[ewg] [PATCH] RDMA/nes: Fix for OFED-3.12-1 RC3
Date: Fri, 24 Oct 2014 14:09:04 -0500 Subject: [PATCH] RDMA/nes: Fix for register mr with zero length Signed-off-by: Tatyana Nikolova --- ...008-RDMA-nes-Fix-for-register-zero-len-mr.patch | 40 1 files changed, 40 insertions(+), 0 deletions(-) create mode 100644 linux-next-pending/0008-RDMA-nes-Fix-for-register-zero-len-mr.patch diff --git a/linux-next-pending/0008-RDMA-nes-Fix-for-register-zero-len-mr.patch b/linux-next-pending/0008-RDMA-nes-Fix-for-register-zero-len-mr.patch new file mode 100644 index 000..2bc70bf --- /dev/null +++ b/linux-next-pending/0008-RDMA-nes-Fix-for-register-zero-len-mr.patch @@ -0,0 +1,40 @@ +RDMA/nes: Fix for a crash when registering a user mr with zero length + +Note: The return value ibmr has been previously initialized to ERR_PTR(-EINVAL), +independent of this patch. + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_verbs.c |9 - + 1 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +index 5b53ca5..e08d175 100644 +--- a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +@@ -2331,6 +2331,10 @@ static struct ib_mr *nes_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, + u8 single_page = 1; + u8 stag_key; + ++ if (length == 0) { ++ nes_debug(NES_DBG_MR, "Unable to register zero length region\n"); ++ return ibmr; ++ } + region = ib_umem_get(pd->uobject->context, start, length, acc, 0); + if (IS_ERR(region)) { + return (struct ib_mr *)region; +@@ -2565,11 +2569,6 @@ static struct ib_mr *nes_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, + return ibmr; + case IWNES_MEMREG_TYPE_QP: + case IWNES_MEMREG_TYPE_CQ: +- if (!region->length) { +- nes_debug(NES_DBG_MR, "Unable to register zero length region for CQ\n"); +- ib_umem_release(region); +- return ERR_PTR(-EINVAL); +- } + nespbl = kzalloc(sizeof(*nespbl), GFP_KERNEL); + if (!nespbl) { + nes_debug(NES_DBG_MR, "Unable to allocate PBL\n"); +-- +1.7.1 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Update to OFED-3.5 nes release notes
RDMA/nes: Update to OFED 3.5 nes release notes. Signed-off-by: Tatyana Nikolova --- release_notes/nes_release_notes.txt |5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/release_notes/nes_release_notes.txt b/release_notes/nes_release_notes.txt index e6f1ff6..bf6d6c3 100644 --- a/release_notes/nes_release_notes.txt +++ b/release_notes/nes_release_notes.txt @@ -32,6 +32,7 @@ OFED 3.5 contains several important bug fixes for iw_nes driver: - Fixed an incorrect setting of a multicast address in the perfect filter table. - Fixed a problem when adding timer and a timer is already pending. - Fixed a problem when initializing terminate timer more than once. + - Fixed a problem when establishing iWarp connection and tx checksum offload is disabled. - Added backports for Linux 2.6 and 3.0 kernels - iw_nes driver version is changed to 1.5.0.1 @@ -92,8 +93,8 @@ NOTE: Assuming NetEffect Ethernet Cluster Server Adapter is assigned eth2. ifconfig eth2 mtu 9000 - largest mtu supported -ethtool -K eth2 tso on - enables TSO (Operation not supported for rhel6.2/rhel6.3) -ethtool -K eth2 tso off- disables TSO (Operation not supported for rhel6.2/rhel6.3) +ethtool -K eth2 tso on - enables TSO +ethtool -K eth2 tso off- disables TSO ethtool -C eth2 rx-usecs-irq 128 - set static interrupt moderation -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fixes for OFED-3.5 RC3
RDMA/nes: Fixes for OFED-3.5 RC3 1. Backports for ethtool ops (which allow turning on/off tx, rx, sg, tso) are added for RHEL 6.2 and 6.3 2. Fix for crash caused by improper skb ip_summed field setting when tx checksum is disabled 3. Fix for crash when registering MR with zero length Signed-off-by: Tatyana Nikolova --- ...033-RDMA-nes-Fix-for-tx-checksum-disabled.patch | 39 ++ ...34-RDMA-nes-Fix-for-memreg-cq-zero-length.patch | 26 ...RDMA-nes-Backports-update-for-ethtool-ops.patch | 122 3 files changed, 187 insertions(+), 0 deletions(-) create mode 100644 linux-next-pending/0033-RDMA-nes-Fix-for-tx-checksum-disabled.patch create mode 100644 linux-next-pending/0034-RDMA-nes-Fix-for-memreg-cq-zero-length.patch create mode 100644 patches/0029-RDMA-nes-Backports-update-for-ethtool-ops.patch diff --git a/linux-next-pending/0033-RDMA-nes-Fix-for-tx-checksum-disabled.patch b/linux-next-pending/0033-RDMA-nes-Fix-for-tx-checksum-disabled.patch new file mode 100644 index 000..a1aa7e8 --- /dev/null +++ b/linux-next-pending/0033-RDMA-nes-Fix-for-tx-checksum-disabled.patch @@ -0,0 +1,39 @@ +Fix for sending mini cm packets with tx checksum offload disabled. + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_cm.c |2 ++ + drivers/infiniband/hw/nes/nes_nic.c |4 +++- + 2 files changed, 5 insertions(+), 1 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index 43d91b0..4084dd3 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -430,6 +430,8 @@ static void form_cm_frame(struct sk_buff *skb, + buf += sizeof(*tcph); + + skb->ip_summed = CHECKSUM_PARTIAL; ++ if (!(cm_node->netdev->features & NETIF_F_IP_CSUM)) ++ skb->ip_summed = CHECKSUM_UNNECESSARY; + skb->protocol = htons(0x800); + skb->data_len = 0; + skb->mac_len = ETH_HLEN; +diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c +index d113dac..300192f 100644 +--- a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c +@@ -400,7 +400,9 @@ static int nes_nic_send(struct sk_buff *skb, struct net_device *netdev) + wqe_misc |= NES_NIC_SQ_WQE_COMPLETION; + } + } else {/* CHECKSUM_HW */ +- wqe_misc |= NES_NIC_SQ_WQE_DISABLE_CHKSUM | NES_NIC_SQ_WQE_COMPLETION; ++ wqe_misc |= NES_NIC_SQ_WQE_COMPLETION; ++ if (skb->ip_summed != CHECKSUM_UNNECESSARY) ++ wqe_misc |= NES_NIC_SQ_WQE_DISABLE_CHKSUM; + } + + set_wqe_32bit_value(nic_sqe->wqe_words, NES_NIC_SQ_WQE_TOTAL_LENGTH_IDX, +-- +1.7.4.2 + diff --git a/linux-next-pending/0034-RDMA-nes-Fix-for-memreg-cq-zero-length.patch b/linux-next-pending/0034-RDMA-nes-Fix-for-memreg-cq-zero-length.patch new file mode 100644 index 000..8f423b9 --- /dev/null +++ b/linux-next-pending/0034-RDMA-nes-Fix-for-memreg-cq-zero-length.patch @@ -0,0 +1,26 @@ +Fix for crash when registering zero length MR for CQ. + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_verbs.c |5 + + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +index c47ec25..07e4fba 100644 +--- a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +@@ -2561,6 +2561,11 @@ static struct ib_mr *nes_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, + return ibmr; + case IWNES_MEMREG_TYPE_QP: + case IWNES_MEMREG_TYPE_CQ: ++ if (!region->length) { ++ nes_debug(NES_DBG_MR, "Unable to register zero length region for CQ\n"); ++ ib_umem_release(region); ++ return ERR_PTR(-EINVAL); ++ } + nespbl = kzalloc(sizeof(*nespbl), GFP_KERNEL); + if (!nespbl) { + nes_debug(NES_DBG_MR, "Unable to allocate PBL\n"); +-- +1.7.4.2 + diff --git a/patches/0029-RDMA-nes-Backports-update-for-ethtool-ops.patch b/patches/0029-RDMA-nes-Backports-update-for-ethtool-ops.patch new file mode 100644 index 000..e380389 --- /dev/null +++ b/patches/0029-RDMA-nes-Backports-update-for-ethtool-ops.patch @@ -0,0 +1,122 @@ +Added backports for RHEL 6.2 and 6.3 ethtool ops. + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_hw.c | 10 + drivers/infiniband/hw/nes/nes_hw.h |3 ++ + drivers/infiniband/hw/nes/nes_nic.c | 43 +++ + 3 files changed, 56 insertions(+), 0 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index ef
[ewg] [PATCH] RDMA/nes: Updated release notes
RDMA/nes: Updated release notes Signed-off-by: Tatyana Nikolova --- release_notes/nes_release_notes.txt | 218 --- 1 files changed, 75 insertions(+), 143 deletions(-) diff --git a/release_notes/nes_release_notes.txt b/release_notes/nes_release_notes.txt index bb750ff..8359e55 100644 --- a/release_notes/nes_release_notes.txt +++ b/release_notes/nes_release_notes.txt @@ -1,43 +1,39 @@ Open Fabrics Enterprise Distribution (OFED) NetEffect Ethernet Cluster Server Adapter Release Notes - January 2012 - + December 2012 The iw_nes module and libnes user library provide RDMA and L2IF -support for the NetEffect Ethernet Cluster Server Adapters. +support for the NetEffect Ethernet Cluster Server Adapters. + += +Supported Architectures and Operating Systems += + +* CPU architectures: +- x86_64 +- x86 + +* Linux Operating Systems: + - RedHat EL6.2 2.6.32-220.el6 + - RedHat EL6.3 2.6.32-279.el6 + - SLES11 SP23.0.13-0.27-default + - kernel.org3.5 (minimal QA for this version) == What's New == -OFED 1.5.4.1 contains bug fixes for iw_nes driver. - -* Fixed a problem with QP destroy timer and improved AE handling. -* Fixed a problem with sending MPA reject message. -* Fixed fast memory registration issues. - -OFED 1.5.4 contains several enhancements and bug fixes to iw_nes driver. - -* Added backports for 2.6.35 to 3.0 kernels. -* Fixed a couple of problems which caused IMA to crash. -* Fixed a problem with VLAN flag for IMA. -* Enabled bonding with iw_nes. -* Fixed a couple of IB_EVENT issues. -* Fixed an SFP+ link status issue. -* Added support for Chelsio Interoperability. -* Added support for MPA version 2. - - - -Required Setting - RDMA Unify TCP port space - -RDMA connections use the same TCP port space as the host stack. To avoid -conflicts, set rdma_cm module option unify_tcp_port_space to 1 by adding -the following to /etc/modprobe.conf: - -options rdma_cm unify_tcp_port_space=1 +OFED 3.5 contains several important bug fixes for iw_nes driver: + - Removed an incorrect macro routine from the loopback code. + - Fixed a couple of problems when unlinking skbs (interoperability with Chelsio). + - Added a lock, so that FPDUs are forwarded in order to iw_nes hardware (interoperability with Chelsio). + - Fixed an incorrect setting of a multicast address in the perfect filter table. + - Fixed a problem when adding timer and a timer is already pending. + - Fixed a problem when initializing terminate timer more than once. + - Added backports for Linux 2.6 and 3.0 kernels + - iw_nes driver version is changed to 1.5.0.1 Required Setting - Power Management Mode @@ -51,7 +47,7 @@ If possible, disable Active State Power Management in the BIOS, e.g.: Loadable Module Options === The following options can be used when loading the iw_nes module by modifying -/etc/modprobe.conf file. +/etc/modprobe.conf.local file in the SLES hosts and /etc/modprobe.d/rnic.conf file in the RHEL hosts. wide_ppm_offset=0 Set to 1 will increase CX4 interface clock ppm offset to 300ppm. @@ -76,7 +72,7 @@ nes_drv_opt=0x0100 0x0200 - Disable Virtual Work Queue 0x1000 - Disable extra doorbell read after write -nes_debug_level=0 +debug_level=0 Specify debug output level. wqm_quanta=65536 @@ -85,6 +81,8 @@ wqm_quanta=65536 limit_maxrdreqsz=0 Limit PCI read request size to 256 bytes. +nes_lro_max_aggr=64 +Max number of LRO packets to be aggregated. === Runtime Options @@ -92,30 +90,25 @@ Runtime Options The following options can be used to alter the behavior of the iw_nes module: NOTE: Assuming NetEffect Ethernet Cluster Server Adapter is assigned eth2. -ifconfig eth2 mtu 9000 - largest mtu supported +ifconfig eth2 mtu 9000 - largest mtu supported -ethtool -K eth2 tso on - enables TSO -ethtool -K eth2 tso off - disables TSO +ethtool -K eth2 tso on - enables TSO (Operation not supported for rhel6.2/rhel6.3) +ethtool -K eth2 tso off- disables TSO (Operation not supported for rhel6.2/rhel6.3) -ethtool -C eth2 rx-usecs-irq 128 - set static interrupt moderation +ethtool -C eth2 rx-usecs-irq 128 - set static interrupt moderation -ethtool -C eth2 adaptive-rx on - enable dynamic interrupt moderation -ethtool -C eth2 adaptive-rx off - disable dynamic interrupt moderation -ethtool -C eth2 rx-frames-low 16 - low watermark of rx queue for dy
[ewg] [PATCH] RDMA/nes: Fix for terminate timer crash
Fix for terminate timer crash. Signed-off-by: Tatyana Nikolova --- ...-nes-Fix-for-initializing-terminate-timer.patch | 81 1 files changed, 81 insertions(+), 0 deletions(-) create mode 100644 linux-next-pending/0030-RDMA-nes-Fix-for-initializing-terminate-timer.patch diff --git a/linux-next-pending/0030-RDMA-nes-Fix-for-initializing-terminate-timer.patch b/linux-next-pending/0030-RDMA-nes-Fix-for-initializing-terminate-timer.patch new file mode 100644 index 000..16be677 --- /dev/null +++ b/linux-next-pending/0030-RDMA-nes-Fix-for-initializing-terminate-timer.patch @@ -0,0 +1,81 @@ +Fix for terminate timer crash. +Nes terminate timer needs to be initialized just once. + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes.h |1 + + drivers/infiniband/hw/nes/nes_hw.c|9 ++--- + drivers/infiniband/hw/nes/nes_verbs.c |4 +++- + 3 files changed, 6 insertions(+), 8 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h +index 5cac29e..33cc589 100644 +--- a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h +@@ -532,6 +532,7 @@ void nes_iwarp_ce_handler(struct nes_device *, struct nes_hw_cq *); + int nes_destroy_cqp(struct nes_device *); + int nes_nic_cm_xmit(struct sk_buff *, struct net_device *); + void nes_recheck_link_status(struct work_struct *work); ++void nes_terminate_timeout(unsigned long context); + + /* nes_nic.c */ + struct net_device *nes_netdev_init(struct nes_device *, void __iomem *); +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index fe7965e..67647e2 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +@@ -75,7 +75,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, + static void process_critical_error(struct nes_device *nesdev); + static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number); + static unsigned int nes_reset_adapter_ne020(struct nes_device *nesdev, u8 *OneG_Mode); +-static void nes_terminate_timeout(unsigned long context); + static void nes_terminate_start_timer(struct nes_qp *nesqp); + + #ifdef CONFIG_INFINIBAND_NES_DEBUG +@@ -3520,7 +3519,7 @@ static void nes_terminate_received(struct nes_device *nesdev, + } + + /* Timeout routine in case terminate fails to complete */ +-static void nes_terminate_timeout(unsigned long context) ++void nes_terminate_timeout(unsigned long context) + { + struct nes_qp *nesqp = (struct nes_qp *)(unsigned long)context; + +@@ -3530,11 +3529,7 @@ static void nes_terminate_timeout(unsigned long context) + /* Set a timer in case hw cannot complete the terminate sequence */ + static void nes_terminate_start_timer(struct nes_qp *nesqp) + { +- init_timer(&nesqp->terminate_timer); +- nesqp->terminate_timer.function = nes_terminate_timeout; +- nesqp->terminate_timer.expires = jiffies + HZ; +- nesqp->terminate_timer.data = (unsigned long)nesqp; +- add_timer(&nesqp->terminate_timer); ++ mod_timer(&nesqp->terminate_timer, (jiffies + HZ)); + } + + /** +diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +index cd0ecb2..c47ec25 100644 +--- a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +@@ -1404,6 +1404,9 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd, + } + + nesqp->sig_all = (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR); ++ init_timer(&nesqp->terminate_timer); ++ nesqp->terminate_timer.function = nes_terminate_timeout; ++ nesqp->terminate_timer.data = (unsigned long)nesqp; + + /* update the QP table */ + nesdev->nesadapter->qp_table[nesqp->hwqp.qp_id-NES_FIRST_QPN] = nesqp; +@@ -1413,7 +1416,6 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd, + return &nesqp->ibqp; + } + +- + /** + * nes_clean_cq + */ +-- +1.7.4.2 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fix for crash when adding timer and timer is pending
RDMA/nes: Replace with 0025-RDMA-nes-Fix-for-adding-timer.patch with 0025-RDMA-nes-Fix-for-modifying-tcp-timer.patch Signed-off-by: Tatyana Nikolova --- .../0025-RDMA-nes-Fix-for-adding-timer.patch | 23 -- ...0025-RDMA-nes-Fix-for-modifying-tcp-timer.patch | 74 2 files changed, 74 insertions(+), 23 deletions(-) delete mode 100644 linux-next-pending/0025-RDMA-nes-Fix-for-adding-timer.patch create mode 100644 linux-next-pending/0025-RDMA-nes-Fix-for-modifying-tcp-timer.patch diff --git a/linux-next-pending/0025-RDMA-nes-Fix-for-adding-timer.patch b/linux-next-pending/0025-RDMA-nes-Fix-for-adding-timer.patch deleted file mode 100644 index 13f9a29..000 --- a/linux-next-pending/0025-RDMA-nes-Fix-for-adding-timer.patch +++ /dev/null @@ -1,23 +0,0 @@ -Fix for kernel panic caused by adding a timer when a timer is already pending. - -Signed-off-by: Tatyana Nikolova - drivers/infiniband/hw/nes/nes_cm.c |2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c -index cfaacaf..c04bfca 100644 a/drivers/infiniband/hw/nes/nes_cm.c -+++ b/drivers/infiniband/hw/nes/nes_cm.c -@@ -727,7 +727,7 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb, - - if (!was_timer_set) { - cm_core->tcp_timer.expires = new_send->timetosend; -- add_timer(&cm_core->tcp_timer); -+ mod_timer(&cm_core->tcp_timer, cm_core->tcp_timer.expires); - } - - return ret; --- -1.7.4.2 - diff --git a/linux-next-pending/0025-RDMA-nes-Fix-for-modifying-tcp-timer.patch b/linux-next-pending/0025-RDMA-nes-Fix-for-modifying-tcp-timer.patch new file mode 100644 index 000..129ccec --- /dev/null +++ b/linux-next-pending/0025-RDMA-nes-Fix-for-modifying-tcp-timer.patch @@ -0,0 +1,74 @@ +Fix for kernel BUG_ON when adding timer and a timer is already pending. +To avoid nes tcp_timer crash for SMP architectures, add_timer is replaced with mod_timer. + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_cm.c | 24 ++-- + 1 files changed, 6 insertions(+), 18 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index cfaacaf..7bee158 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -671,7 +671,6 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb, + struct nes_cm_core *cm_core = cm_node->cm_core; + struct nes_timer_entry *new_send; + int ret = 0; +- u32 was_timer_set; + + new_send = kzalloc(sizeof(*new_send), GFP_ATOMIC); + if (!new_send) +@@ -723,12 +722,8 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb, + } + } + +- was_timer_set = timer_pending(&cm_core->tcp_timer); +- +- if (!was_timer_set) { +- cm_core->tcp_timer.expires = new_send->timetosend; +- add_timer(&cm_core->tcp_timer); +- } ++ if (!timer_pending(&cm_core->tcp_timer)) ++ mod_timer(&cm_core->tcp_timer, new_send->timetosend); + + return ret; + } +@@ -946,10 +941,8 @@ static void nes_cm_timer_tick(unsigned long pass) + } + + if (settimer) { +- if (!timer_pending(&cm_core->tcp_timer)) { +- cm_core->tcp_timer.expires = nexttimeout; +- add_timer(&cm_core->tcp_timer); +- } ++ if (!timer_pending(&cm_core->tcp_timer)) ++ mod_timer(&cm_core->tcp_timer, nexttimeout); + } + } + +@@ -1314,8 +1307,6 @@ static int mini_cm_del_listen(struct nes_cm_core *cm_core, + static inline int mini_cm_accelerated(struct nes_cm_core *cm_core, + struct nes_cm_node *cm_node) + { +- u32 was_timer_set; +- + cm_node->accelerated = 1; + + if (cm_node->accept_pend) { +@@ -1325,11 +1316,8 @@ static inline int mini_cm_accelerated(struct nes_cm_core *cm_core, + BUG_ON(atomic_read(&cm_node->listener->pend_accepts_cnt) < 0); + } + +- was_timer_set = timer_pending(&cm_core->tcp_timer); +- if (!was_timer_set) { +- cm_core->tcp_timer.expires = jiffies + NES_SHORT_TIME; +- add_timer(&cm_core->tcp_timer); +- } ++ if (!timer_pending(&cm_core->tcp_timer)) ++ mod_timer(&cm_core->tcp_timer, (jiffies + NES_SHORT_TIME)); + + return 0; + } +-- +1.7.4.2 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fix for incorrect multicast address
Fix for incorrect multicast address Signed-off-by: Tatyana Nikolova --- .../0026-RDMA-nes-Fix-for-multicast-addr.patch | 34 1 files changed, 34 insertions(+), 0 deletions(-) create mode 100644 linux-next-pending/0026-RDMA-nes-Fix-for-multicast-addr.patch diff --git a/linux-next-pending/0026-RDMA-nes-Fix-for-multicast-addr.patch b/linux-next-pending/0026-RDMA-nes-Fix-for-multicast-addr.patch new file mode 100644 index 000..defa75d --- /dev/null +++ b/linux-next-pending/0026-RDMA-nes-Fix-for-multicast-addr.patch @@ -0,0 +1,34 @@ +RDMA/nes: Fix for incorrect multicast address in the perfect filter table + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_nic.c | 13 +++-- + 1 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c +index 0564be7..9542e16 100644 +--- a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c +@@ -944,12 +944,13 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev) + addr, + perfect_filter_register_address+(mc_index * 8), + mc_nic_index); +- macaddr_high = ((u16) addr[0]) << 8; +- macaddr_high += (u16) addr[1]; +- macaddr_low = ((u32) addr[2]) << 24; +- macaddr_low += ((u32) addr[3]) << 16; +- macaddr_low += ((u32) addr[4]) << 8; +- macaddr_low += (u32) addr[5]; ++ macaddr_high = ((u8) addr[0]) << 8; ++ macaddr_high += (u8) addr[1]; ++ macaddr_low = ((u8) addr[2]) << 24; ++ macaddr_low += ((u8) addr[3]) << 16; ++ macaddr_low += ((u8) addr[4]) << 8; ++ macaddr_low += (u8) addr[5]; ++ + nes_write_indexed(nesdev, + perfect_filter_register_address+(mc_index * 8), + macaddr_low); +-- +1.7.4.2 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fix for crash when adding timer
Fix for adding timer when a timer is pending Signed-off-by: Tatyana Nikolova --- .../0025-RDMA-nes-Fix-for-adding-timer.patch | 23 1 files changed, 23 insertions(+), 0 deletions(-) create mode 100644 linux-next-pending/0025-RDMA-nes-Fix-for-adding-timer.patch diff --git a/linux-next-pending/0025-RDMA-nes-Fix-for-adding-timer.patch b/linux-next-pending/0025-RDMA-nes-Fix-for-adding-timer.patch new file mode 100644 index 000..5154da2 --- /dev/null +++ b/linux-next-pending/0025-RDMA-nes-Fix-for-adding-timer.patch @@ -0,0 +1,23 @@ +Fix for kernel panic caused by adding a timer when a timer is already pending. + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_cm.c |2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index cfaacaf..c04bfca 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -727,7 +727,7 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb, + + if (!was_timer_set) { + cm_core->tcp_timer.expires = new_send->timetosend; +- add_timer(&cm_core->tcp_timer); ++ mod_timer(&cm_core->tcp_timer, cm_core->tcp_timer.expires); + } + + return ret; +-- +1.7.4.2 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Changing nes driver version
RDMA/nes: Changing nes driver version Signed-off-by: Tatyana Nikolova --- .../0006-RDMA-nes-Changing-driver-version.patch| 23 1 files changed, 23 insertions(+), 0 deletions(-) create mode 100644 linux-next-pending/0006-RDMA-nes-Changing-driver-version.patch diff --git a/linux-next-pending/0006-RDMA-nes-Changing-driver-version.patch b/linux-next-pending/0006-RDMA-nes-Changing-driver-version.patch new file mode 100644 index 000..3ee922b --- /dev/null +++ b/linux-next-pending/0006-RDMA-nes-Changing-driver-version.patch @@ -0,0 +1,23 @@ +Changing the version of the nes driver to reflect recent fixes + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes.h |2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h +index c438e46..0418bc0 100644 +--- a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h +@@ -57,7 +57,7 @@ + #define QUEUE_DISCONNECTS + + #define DRV_NAME"iw_nes" +-#define DRV_VERSION "1.5.0.0" ++#define DRV_VERSION "1.5.0.1" + #define PFX DRV_NAME ": " + + /* +-- +1.7.4.2 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Locking fix to prevent race conditions
RDMA/nes: Replace 0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch with 0009-RDMA-nes-Forward-fpdus-inorder.patch Locking fix to prevent race conditions. It forces all fpdus per QP to be forwarded to hardware in order of their tcp sequence numbers. Signed-off-by: Tatyana Nikolova --- .../0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch | 62 .../0009-RDMA-nes-Forward-fpdus-inorder.patch | 100 2 files changed, 100 insertions(+), 62 deletions(-) delete mode 100644 linux-next-pending/0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch create mode 100644 linux-next-pending/0009-RDMA-nes-Forward-fpdus-inorder.patch diff --git a/linux-next-pending/0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch b/linux-next-pending/0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch deleted file mode 100644 index f2250fd..000 --- a/linux-next-pending/0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch +++ /dev/null @@ -1,62 +0,0 @@ -Fix for unlinking NULL skb because of race condition - -Signed-off-by: Tatyana Nikolova - drivers/infiniband/hw/nes/nes_mgt.c |8 - 1 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c -index 2d710e1..9d0fd2b 100644 a/drivers/infiniband/hw/nes/nes_mgt.c -+++ b/drivers/infiniband/hw/nes/nes_mgt.c -@@ -322,11 +322,10 @@ static int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp, - frag_cnt = 1; - } - -- spin_unlock_irqrestore(&nesqp->pau_lock, flags); -- - /* Found one */ - fpdu_info = kzalloc(sizeof(*fpdu_info), GFP_ATOMIC); - if (fpdu_info == NULL) { -+ spin_unlock_irqrestore(&nesqp->pau_lock, flags); - nes_debug(NES_DBG_PAU, "Failed to alloc a fpdu_info.\n"); - rc = -ENOMEM; - goto out; -@@ -334,6 +333,7 @@ static int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp, - - fpdu_info->cqp_request = nes_get_cqp_request(nesdev); - if (fpdu_info->cqp_request == NULL) { -+ spin_unlock_irqrestore(&nesqp->pau_lock, flags); - nes_debug(NES_DBG_PAU, "Failed to get a cqp_request.\n"); - rc = -ENOMEM; - goto out; -@@ -353,6 +353,7 @@ static int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp, - fpdu_info->hdr_vbase = pci_alloc_consistent(nesdev->pcidev, - fpdu_info->hdr_len, &fpdu_info->hdr_pbase); - if (!fpdu_info->hdr_vbase) { -+ spin_unlock_irqrestore(&nesqp->pau_lock, flags); - nes_debug(NES_DBG_PAU, "Unable to allocate memory for pau first frag\n"); - rc = -ENOMEM; - goto out; -@@ -385,10 +386,8 @@ static int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp, - - if (frags[i].skb->len == 0) { - /* Pull skb off the list - it will be freed in the callback */ -- spin_lock_irqsave(&nesqp->pau_lock, flags); - if (!skb_queue_empty(&nesqp->pau_list)) - skb_unlink(frags[i].skb, &nesqp->pau_list); -- spin_unlock_irqrestore(&nesqp->pau_lock, flags); - } else { - /* Last skb still has data so update the seq */ - iph = (struct iphdr *)(cb->data_start + ETH_HLEN); -@@ -396,6 +395,7 @@ static int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp, - tcph->seq = cpu_to_be32(nesqp->pau_rcv_nxt); - } - } -+ spin_unlock_irqrestore(&nesqp->pau_lock, flags); - - out: - if (rc) { --- -1.7.4.2 - diff --git a/linux-next-pending/0009-RDMA-nes-Forward-fpdus-inorder.patch b/linux-next-pending/0009-RDMA-nes-Forward-fpdus-inorder.patch new file mode 100644 index 000..a2a3a4f --- /dev/null +++ b/linux-next-pending/0009-RDMA-nes-Forward-fpdus-inorder.patch @@ -0,0 +1,100 @@ +Locking fix to prevent race conditions, forcing fpdus (per qp) to be forwarded +to hardware in the order of their sequence numbers. + +Signed-off-by: Tatyana Nikolova +Signed-off-by: Donald Wood +--- + drivers/infiniband/hw/nes/nes_mgt.c | 23 ++- + 1 files changed, 10 insertions(+), 13 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +index 2d710e1..07cbf86 100644 +--- a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +@@ -247,7 +247,6 @@ static int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp, + struct nes_rskb_cb *cb; + struct pau_fpdu_info *fpdu_info = NULL; + struct pau_fpdu_frag frags[MAX_FPDU
[ewg] [PATCH] RDMA/nes: Fixes for PAU handling
Fixes for packed and unaligned fpdu handling Signed-off-by: Tatyana Nikolova --- .../0007-RDMA-nes-Fix-for-pau-hdr_pbase.patch | 23 +++ .../0008-RDMA-nes-Check-for-empty-skb-list.patch | 51 .../0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch | 62 3 files changed, 136 insertions(+), 0 deletions(-) create mode 100644 linux-next-pending/0007-RDMA-nes-Fix-for-pau-hdr_pbase.patch create mode 100644 linux-next-pending/0008-RDMA-nes-Check-for-empty-skb-list.patch create mode 100644 linux-next-pending/0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch diff --git a/linux-next-pending/0007-RDMA-nes-Fix-for-pau-hdr_pbase.patch b/linux-next-pending/0007-RDMA-nes-Fix-for-pau-hdr_pbase.patch new file mode 100644 index 000..706deff --- /dev/null +++ b/linux-next-pending/0007-RDMA-nes-Fix-for-pau-hdr_pbase.patch @@ -0,0 +1,23 @@ +Fix for incorrect hdr_pbase when forwarding fpdus to hardware + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_mgt.c |2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +index 3ba7be3..8cf74fd 100644 +--- a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +@@ -447,7 +447,7 @@ static int forward_fpdus(struct nes_vnic *nesvnic, struct nes_qp *nesqp) + set_wqe_32bit_value(cqp_wqe->wqe_words, NES_NIC_SQ_WQE_FRAG0_LOW_IDX, + lower_32_bits(u64tmp)); + set_wqe_32bit_value(cqp_wqe->wqe_words, NES_NIC_SQ_WQE_FRAG0_HIGH_IDX, +- upper_32_bits(u64tmp >> 32)); ++ upper_32_bits(u64tmp)); + + set_wqe_32bit_value(cqp_wqe->wqe_words, NES_NIC_SQ_WQE_FRAG1_LOW_IDX, + lower_32_bits(fpdu_info->frags[0].physaddr)); +-- +1.7.4.2 + diff --git a/linux-next-pending/0008-RDMA-nes-Check-for-empty-skb-list.patch b/linux-next-pending/0008-RDMA-nes-Check-for-empty-skb-list.patch new file mode 100644 index 000..d42b67a --- /dev/null +++ b/linux-next-pending/0008-RDMA-nes-Check-for-empty-skb-list.patch @@ -0,0 +1,51 @@ +Fix for unlinking skbs from empty list + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_mgt.c | 11 +++ + 1 files changed, 7 insertions(+), 4 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +index 8cf74fd..2d710e1 100644 +--- a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +@@ -210,6 +210,9 @@ static struct sk_buff *nes_get_next_skb(struct nes_device *nesdev, struct nes_qp + } + + while (1) { ++ if (skb_queue_empty(&nesqp->pau_list)) ++ goto out; ++ + seq = nes_get_seq(skb, ack, wnd, fin_rcvd, rst_rcvd); + if (seq == nextseq) { + if (skb->len || processacks) +@@ -218,14 +221,13 @@ static struct sk_buff *nes_get_next_skb(struct nes_device *nesdev, struct nes_qp + goto out; + } + +- if (skb->next == (struct sk_buff *)&nesqp->pau_list) +- goto out; +- + old_skb = skb; + skb = skb->next; + skb_unlink(old_skb, &nesqp->pau_list); + nes_mgt_free_skb(nesdev, old_skb, PCI_DMA_TODEVICE); + nes_rem_ref_cm_node(nesqp->cm_node); ++ if (skb == (struct sk_buff *)&nesqp->pau_list) ++ goto out; + } + return skb; + +@@ -384,7 +386,8 @@ static int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp, + if (frags[i].skb->len == 0) { + /* Pull skb off the list - it will be freed in the callback */ + spin_lock_irqsave(&nesqp->pau_lock, flags); +- skb_unlink(frags[i].skb, &nesqp->pau_list); ++ if (!skb_queue_empty(&nesqp->pau_list)) ++ skb_unlink(frags[i].skb, &nesqp->pau_list); + spin_unlock_irqrestore(&nesqp->pau_lock, flags); + } else { + /* Last skb still has data so update the seq */ +-- +1.7.4.2 + diff --git a/linux-next-pending/0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch b/linux-next-pending/0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch new file mode 100644 index 000..f2250fd --- /dev/null +++ b/linux-next-pending/0009-RDMA-nes-Fix-for-unlinking-NULL-skb.patch @@ -0,0 +1,62 @@ +Fix for unlinking NULL skb because of race condition + +Signed-off-by: Tatyana Nikolova +--- + drivers/infiniband/hw/nes/nes_mgt.c |8 + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b
[ewg] [PATCH] RDMA/nes: TSO is enabled again for linux-3.5 - Backport change
RDMA/nes: TSO is enabled again for linux-3.5 (the patch should be applied on top of previous backports) Signed-off-by: Tatyana Nikolova --- drivers/infiniband/hw/nes/nes_nic.c |2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index 5242294..4f73965 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c @@ -1758,12 +1758,10 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev, netdev->features |= NETIF_F_HIGHDMA | NETIF_F_HW_VLAN_TX; if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV)) { -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(3,3,0)) netdev->features |= NETIF_F_TSO; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) netdev->hw_features |= NETIF_F_TSO; #endif -#endif } nes_debug(NES_DBG_INIT, "nesvnic = %p, reported features = 0x%lX, QPid = %d," -- 1.7.4.2 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fix for loopback MAC address - Backport change
RDMA/nes: Fix for resolving correctly the MAC address for loopback connection (the patch should be applied on top of previous backports) Signed-off-by: Tatyana Nikolova --- drivers/infiniband/hw/nes/nes_cm.c |5 + 1 files changed, 1 insertions(+), 4 deletions(-) diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index e3535c1..8a2c301 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c @@ -1363,11 +1363,8 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi else netdev = nesvnic->netdev; -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, netdev); -#else - neigh = dst_neigh_lookup(&rt->dst, &dst_ip); -#endif + rcu_read_lock(); if (neigh) { if (neigh->nud_state & NUD_VALID) { -- 1.7.4.2 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fix for TSO low nic throughput - linux-next-pending
Fix for TSO low nic throughput with linux-3.5 skb_is_gso() is changed to bool and returns 1 instead of MSS. The gso_size from skb_shared_info is now used to pass MSS to hardware. (the patch is linux-next-pending) Signed-off-by: Tatyana Nikolova --- drivers/infiniband/hw/nes/nes_nic.c | 28 +--- 1 files changed, 13 insertions(+), 15 deletions(-) diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index 696b80e..5242294 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c @@ -388,18 +388,16 @@ static int nes_nic_send(struct sk_buff *skb, struct net_device *netdev) if (skb->ip_summed == CHECKSUM_PARTIAL) { tcph = tcp_hdr(skb); - if (1) { - if (skb_is_gso(skb)) { - /* nes_debug(NES_DBG_NIC_TX, "%s: TSO request... seg size = %u\n", - netdev->name, skb_is_gso(skb)); */ - wqe_misc |= NES_NIC_SQ_WQE_LSO_ENABLE | - NES_NIC_SQ_WQE_COMPLETION | (u16)skb_is_gso(skb); - set_wqe_32bit_value(nic_sqe->wqe_words, NES_NIC_SQ_WQE_LSO_INFO_IDX, - ((u32)tcph->doff) | - (((u32)(((unsigned char *)tcph) - skb->data)) << 4)); - } else { - wqe_misc |= NES_NIC_SQ_WQE_COMPLETION; - } + if (skb_is_gso(skb)) { + nes_debug(NES_DBG_NIC_TX, "%s: TSO request... seg size = %u\n", + netdev->name, skb_shinfo(skb)->gso_size); + wqe_misc |= NES_NIC_SQ_WQE_LSO_ENABLE | + NES_NIC_SQ_WQE_COMPLETION | (u16)skb_shinfo(skb)->gso_size; + set_wqe_32bit_value(nic_sqe->wqe_words, NES_NIC_SQ_WQE_LSO_INFO_IDX, + ((u32)tcph->doff) | + (((u32)(((unsigned char *)tcph) - skb->data)) << 4)); + } else { + wqe_misc |= NES_NIC_SQ_WQE_COMPLETION; } } else {/* CHECKSUM_HW */ wqe_misc |= NES_NIC_SQ_WQE_DISABLE_CHKSUM | NES_NIC_SQ_WQE_COMPLETION; @@ -600,7 +598,7 @@ tso_sq_no_longer_full: " (%u frags), tso_size=%u\n", netdev->name, skb->len, skb_headlen(skb), - skb_shinfo(skb)->nr_frags, skb_is_gso(skb)); + skb_shinfo(skb)->nr_frags, skb_shinfo(skb)->gso_size); } memcpy(&nesnic->first_frag_vbase[nesnic->sq_head].buffer, skb->data, min(((unsigned int)NES_FIRST_FRAG_SIZE), @@ -652,8 +650,8 @@ tso_sq_no_longer_full: } else { nesnic->tx_skb[nesnic->sq_head] = NULL; } - wqe_misc |= NES_NIC_SQ_WQE_COMPLETION | (u16)skb_is_gso(skb); - if ((tso_wqe_length + original_first_length) > skb_is_gso(skb)) { + wqe_misc |= NES_NIC_SQ_WQE_COMPLETION | (u16)skb_shinfo(skb)->gso_size; + if ((tso_wqe_length + original_first_length) > skb_shinfo(skb)->gso_size) { wqe_misc |= NES_NIC_SQ_WQE_LSO_ENABLE; } else { iph->tot_len = htons(tso_wqe_length + original_first_length - nhoffset); -- 1.7.4.2 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Loopback clean up - linux-next-pending
Necessary clean up for the loopback code (the patch is linux-next-pending) Signed-off-by: Tatyana Nikolova --- drivers/infiniband/hw/nes/nes_cm.c | 30 ++ 1 files changed, 6 insertions(+), 24 deletions(-) diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index 0b5b1a9..e3535c1 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c @@ -1475,12 +1475,8 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core, cm_node->loopbackpartner = NULL; /* get the mac addr for the remote node */ - if (ipv4_is_loopback(htonl(cm_node->rem_addr))) { - arpindex = nes_arp_table(nesdev, ntohl(nesvnic->local_ipaddr), NULL, NES_ARP_RESOLVE); - } else { - oldarpindex = nes_arp_table(nesdev, cm_node->rem_addr, NULL, NES_ARP_RESOLVE); - arpindex = nes_addr_resolve_neigh(nesvnic, cm_info->rem_addr, oldarpindex); - } + oldarpindex = nes_arp_table(nesdev, cm_node->rem_addr, NULL, NES_ARP_RESOLVE); + arpindex = nes_addr_resolve_neigh(nesvnic, cm_info->rem_addr, oldarpindex); if (arpindex < 0) { kfree(cm_node); return NULL; @@ -3163,11 +3159,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) nesqp->nesqp_context->tcpPorts[1] = cpu_to_le16(ntohs(cm_id->remote_addr.sin_port)); - if (ipv4_is_loopback(cm_id->remote_addr.sin_addr.s_addr)) - nesqp->nesqp_context->ip0 = - cpu_to_le32(ntohl(nesvnic->local_ipaddr)); - else - nesqp->nesqp_context->ip0 = + nesqp->nesqp_context->ip0 = cpu_to_le32(ntohl(cm_id->remote_addr.sin_addr.s_addr)); nesqp->nesqp_context->misc2 |= cpu_to_le32( @@ -3192,10 +3184,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) memset(&nes_quad, 0, sizeof(nes_quad)); nes_quad.DstIpAdrIndex = cpu_to_le32((u32)PCI_FUNC(nesdev->pcidev->devfn) << 24); - if (ipv4_is_loopback(cm_id->remote_addr.sin_addr.s_addr)) - nes_quad.SrcIpadr = nesvnic->local_ipaddr; - else - nes_quad.SrcIpadr = cm_id->remote_addr.sin_addr.s_addr; + nes_quad.SrcIpadr = cm_id->remote_addr.sin_addr.s_addr; nes_quad.TcpPorts[0] = cm_id->remote_addr.sin_port; nes_quad.TcpPorts[1] = cm_id->local_addr.sin_port; @@ -3548,11 +3537,7 @@ static void cm_event_connected(struct nes_cm_event *event) cpu_to_le16(ntohs(cm_id->local_addr.sin_port)); nesqp->nesqp_context->tcpPorts[1] = cpu_to_le16(ntohs(cm_id->remote_addr.sin_port)); - if (ipv4_is_loopback(cm_id->remote_addr.sin_addr.s_addr)) - nesqp->nesqp_context->ip0 = - cpu_to_le32(ntohl(nesvnic->local_ipaddr)); - else - nesqp->nesqp_context->ip0 = + nesqp->nesqp_context->ip0 = cpu_to_le32(ntohl(cm_id->remote_addr.sin_addr.s_addr)); nesqp->nesqp_context->misc2 |= cpu_to_le32( @@ -3581,10 +3566,7 @@ static void cm_event_connected(struct nes_cm_event *event) nes_quad.DstIpAdrIndex = cpu_to_le32((u32)PCI_FUNC(nesdev->pcidev->devfn) << 24); - if (ipv4_is_loopback(cm_id->remote_addr.sin_addr.s_addr)) - nes_quad.SrcIpadr = nesvnic->local_ipaddr; - else - nes_quad.SrcIpadr = cm_id->remote_addr.sin_addr.s_addr; + nes_quad.SrcIpadr = cm_id->remote_addr.sin_addr.s_addr; nes_quad.TcpPorts[0] = cm_id->remote_addr.sin_port; nes_quad.TcpPorts[1] = cm_id->local_addr.sin_port; -- 1.7.4.2 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Updated backports
OFED-3.5/NES: Updated backports to be applied on top of the previously submitted backport patch. Signed-off-by: Tatyana Nikolova --- drivers/infiniband/hw/nes/nes_hw.c | 11 drivers/infiniband/hw/nes/nes_hw.h |3 ++ drivers/infiniband/hw/nes/nes_nic.c | 49 -- 3 files changed, 54 insertions(+), 9 deletions(-) diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c index d42c9f4..151cefe 100644 --- a/drivers/infiniband/hw/nes/nes_hw.c +++ b/drivers/infiniband/hw/nes/nes_hw.c @@ -2951,7 +2951,18 @@ void nes_nic_ce_handler(struct nes_device *nesdev, struct nes_hw_nic_cq *cq) nes_debug(NES_DBG_CQ, "%s: Reporting stripped VLAN packet. Tag = 0x%04X\n", nesvnic->netdev->name, vlan_tag); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) + if (nesvnic->vlan_grp != NULL) { + if (nes_use_lro) + lro_vlan_hwaccel_receive_skb(&nesvnic->lro_mgr, rx_skb, + nesvnic->vlan_grp, vlan_tag, NULL); + else + vlan_hwaccel_receive_skb(rx_skb, nesvnic->vlan_grp, vlan_tag); + goto skip_rx_indicate0; + } +#endif __vlan_hwaccel_put_tag(rx_skb, vlan_tag); + } if (nes_use_lro) lro_receive_skb(&nesvnic->lro_mgr, rx_skb, NULL); diff --git a/drivers/infiniband/hw/nes/nes_hw.h b/drivers/infiniband/hw/nes/nes_hw.h index d748e4b..b4a31de 100644 --- a/drivers/infiniband/hw/nes/nes_hw.h +++ b/drivers/infiniband/hw/nes/nes_hw.h @@ -1236,6 +1236,9 @@ struct nes_vnic { /* void *mem; */ struct nes_device *nesdev; struct net_device *netdev; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) + struct vlan_group *vlan_grp; +#endif atomic_t rx_skbs_needed; atomic_t rx_skb_timer_running; int budget; diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index 8544d0a..864469f 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c @@ -1597,6 +1597,33 @@ static const struct ethtool_ops nes_ethtool_ops = { .set_pauseparam = nes_netdev_set_pauseparam, }; + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) +static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) +{ + 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) + u32temp &= 0xfdff; + else + u32temp |= 0x0200; + + nes_write_indexed(nesdev, NES_IDX_PCIX_DIAG, u32temp); + spin_unlock_irqrestore(&nesadapter->phy_lock, flags); +} +#endif + static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev, netdev_features_t features) { struct nes_adapter *nesadapter = nesdev->nesadapter; @@ -1618,6 +1645,7 @@ static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev, spin_unlock_irqrestore(&nesadapter->phy_lock, flags); } + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) static netdev_features_t nes_fix_features(struct net_device *netdev, netdev_features_t features) { @@ -1656,6 +1684,9 @@ static const struct net_device_ops nes_netdev_ops = { .ndo_set_rx_mode= nes_netdev_set_multicast_list, .ndo_change_mtu = nes_netdev_change_mtu, .ndo_validate_addr = eth_validate_addr, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) + .ndo_vlan_rx_register = nes_netdev_vlan_rx_register, +#endif #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) .ndo_fix_features = nes_fix_features, .ndo_set_features = nes_set_features, @@ -1691,12 +1722,10 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev, netdev->hard_header_len = ETH_HLEN; netdev->addr_len = ETH_ALEN; netdev->type = ARPHRD_ETHER; - netdev->f
[ewg] [PATCH] RDMA/ucma.c: Different fix for ucma context uid=0, causing iWarp RDMA applications to fail in connection establishment
Fix for ucma context uid=0, causing iWarp RDMA applications to fail in connection establishment. This is a new patch addressing the librdmacm segfault when RDMA_CM_EVENT_ESTABLISHED event shows up with evt->id_priv = NULL In the ucma_event_handler(), ctx->file->mut is moved up to prevent race conditions and protect from assigning zero ucma ctx->uid to asynchronously generated events. Signed-off-by: Tatyana Nikolova Signed-off-by: Sean Hefty --- drivers/infiniband/core/ucma.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c index 8002ae6..88c50d2 100644 --- a/drivers/infiniband/core/ucma.c +++ b/drivers/infiniband/core/ucma.c @@ -267,6 +267,7 @@ static int ucma_event_handler(struct rdma_cm_id *cm_id, if (!uevent) return event->event == RDMA_CM_EVENT_CONNECT_REQUEST; + mutex_lock(&ctx->file->mut); uevent->cm_id = cm_id; ucma_set_event_context(ctx, event, uevent); uevent->resp.event = event->event; @@ -277,7 +278,6 @@ static int ucma_event_handler(struct rdma_cm_id *cm_id, ucma_copy_conn_event(&uevent->resp.param.conn, &event->param.conn); - mutex_lock(&ctx->file->mut); if (event->event == RDMA_CM_EVENT_CONNECT_REQUEST) { if (!ctx->backlog) { ret = -ENOMEM; -- 1.7.4.2 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/ucma.c: Fix for ucma context uid=0, causing iWarp RDMA applications to fail in connection establishment
Fix for ucma context uid=0, causing iWarp RDMA applications to fail in connection establishment. If the context uid is not set before calling rdma_accept(), the RDMA_CM_EVENT_ESTABLISHED event generated asynchronously by successfull rdma_accept ends up with zero ucma context uid, resulting in segfault at librdmacm.so Signed-off-by: Tatyana Nikolova --- drivers/infiniband/core/ucma.c |3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c index 8002ae6..6cc40de 100644 --- a/drivers/infiniband/core/ucma.c +++ b/drivers/infiniband/core/ucma.c @@ -803,9 +803,8 @@ static ssize_t ucma_accept(struct ucma_file *file, const char __user *inbuf, if (cmd.conn_param.valid) { ucma_copy_conn_param(&conn_param, &cmd.conn_param); mutex_lock(&file->mut); + ctx->uid = cmd.uid; ret = rdma_accept(ctx->cm_id, &conn_param); - if (!ret) - ctx->uid = cmd.uid; mutex_unlock(&file->mut); } else ret = rdma_accept(ctx->cm_id, NULL); -- 1.7.4.2 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] compat-rdma-3.5: Changes to makefile
CONFIG_COMPAT_SKB_FRAG_NEEDED is defined in the makefile. It is necessary for kernels < linux-3.2 except for RHEL 6.3 (linux-2.6.32-279.el6) where CONFIG_COMPAT_SKB_FRAG_NEEDED should not be defined. Signed-off-by: Tatyana Nikolova --- makefile |7 +++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/makefile b/makefile index 19a668c..d609f23 100644 --- a/makefile +++ b/makefile @@ -54,6 +54,12 @@ ifneq ($(kconfig_h),) KCONFIG_H = -include $(kconfig_h) endif +#ifdef CONFIG_COMPAT_KERNEL_3_2 +ifneq ("$(KVERSION)","2.6.32-279.el6.x86_64") +COMPAT_3_2_SKB_FRAG = 1 +endif +#endif + V ?= 1 # @@ -137,6 +143,7 @@ kernel: -I$(CWD)/drivers/infiniband/ulp/srpt \ $$(if $$(CONFIG_XEN),-D__XEN_INTERFACE_VERSION__=$$(CONFIG_XEN_INTERFACE_VERSION)) \ $$(if $$(CONFIG_XEN),-I$$(srctree)/arch/x86/include/mach-xen) \ + $$(if $$(COMPAT_3_2_SKB_FRAG),-DCONFIG_COMPAT_SKB_FRAG_NEEDED) \ -I$$(srctree)/arch/$$(SRCARCH)/include \ -Iarch/$$(SRCARCH)/include/generated -Iinclude \ $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) \ -- 1.7.4.2 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] compat-rdma-3.5: Changes to makefile
CONFIG_COMPAT_SKB_FRAG_NEEDED is defined in the makefile. It is necessary for kernels < linux-3.2 except for RHEL 6.3 (linux-2.6.32-279.el6) where CONFIG_COMPAT_SKB_FRAG_NEEDED should not be defined. Signed-off-by: Tatyana Nikolova --- makefile |7 +++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/makefile b/makefile index 19a668c..d609f23 100644 --- a/makefile +++ b/makefile @@ -54,6 +54,12 @@ ifneq ($(kconfig_h),) KCONFIG_H = -include $(kconfig_h) endif +#ifdef CONFIG_COMPAT_KERNEL_3_2 +ifneq ("$(KVERSION)","2.6.32-279.el6.x86_64") +COMPAT_3_2_SKB_FRAG = 1 +endif +#endif + V ?= 1 # @@ -137,6 +143,7 @@ kernel: -I$(CWD)/drivers/infiniband/ulp/srpt \ $$(if $$(CONFIG_XEN),-D__XEN_INTERFACE_VERSION__=$$(CONFIG_XEN_INTERFACE_VERSION)) \ $$(if $$(CONFIG_XEN),-I$$(srctree)/arch/x86/include/mach-xen) \ + $$(if $$(COMPAT_3_2_SKB_FRAG),-DCONFIG_COMPAT_SKB_FRAG_NEEDED) \ -I$$(srctree)/arch/$$(SRCARCH)/include \ -Iarch/$$(SRCARCH)/include/generated -Iinclude \ $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) \ -- 1.7.4.2 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Backports for RHEL 6.2 and 6.3
Backports for linux-3.5 nes to RHEL-6.2 and RHEL-6.3 Signed-off-by: Tatyana Nikolova --- drivers/infiniband/hw/nes/nes_cm.c | 12 +++- drivers/infiniband/hw/nes/nes_nic.c | 26 +++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index 020e95c..0b5b1a9 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c @@ -1343,9 +1343,16 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi int rc = arpindex; struct net_device *netdev; struct nes_adapter *nesadapter = nesvnic->nesdev->nesadapter; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39)) + struct flowi fl; + memset(&fl, 0, sizeof fl); + fl.nl_u.ip4_u.daddr = htonl(dst_ip); + if (ip_route_output_key(&init_net, &rt, &fl)) { +#else rt = ip_route_output(&init_net, htonl(dst_ip), 0, 0, 0); if (IS_ERR(rt)) { +#endif printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n", __func__, dst_ip); return rc; @@ -1356,8 +1363,11 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi else netdev = nesvnic->netdev; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) + neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, netdev); +#else neigh = dst_neigh_lookup(&rt->dst, &dst_ip); - +#endif rcu_read_lock(); if (neigh) { if (neigh->nud_state & NUD_VALID) { diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index f3a3ecf..8544d0a 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c @@ -909,7 +909,11 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev) if (!mc_all_on) { char *addrs; int i; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) struct netdev_hw_addr *ha; +#else + struct dev_mc_list *mcaddr; +#endif addrs = kmalloc(ETH_ALEN * mc_count, GFP_ATOMIC); if (!addrs) { @@ -917,9 +921,13 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev) goto unlock; } i = 0; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) netdev_for_each_mc_addr(ha, netdev) memcpy(get_addr(addrs, i++), ha->addr, ETH_ALEN); - +#else + netdev_for_each_mc_addr(mcaddr, netdev) + memcpy(get_addr(addrs, i++), mcaddr->dmi_addr, ETH_ALEN); +#endif perfect_filter_register_address = NES_IDX_PERFECT_FILTER_LOW + pft_entries_preallocated * 0x8; for (i = 0, mc_index = 0; mc_index < max_pft_entries_avaiable; @@ -1610,6 +1618,7 @@ static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev, spin_unlock_irqrestore(&nesadapter->phy_lock, flags); } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) static netdev_features_t nes_fix_features(struct net_device *netdev, netdev_features_t features) { /* @@ -1635,6 +1644,7 @@ static int nes_set_features(struct net_device *netdev, netdev_features_t feature return 0; } +#endif static const struct net_device_ops nes_netdev_ops = { .ndo_open = nes_netdev_open, @@ -1646,8 +1656,10 @@ static const struct net_device_ops nes_netdev_ops = { .ndo_set_rx_mode= nes_netdev_set_multicast_list, .ndo_change_mtu = nes_netdev_change_mtu, .ndo_validate_addr = eth_validate_addr, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) .ndo_fix_features = nes_fix_features, .ndo_set_features = nes_set_features, +#endif }; /** @@ -1711,12 +1723,20 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev, netdev->dev_addr[5] = (u8)u64temp; memcpy(netdev->perm_addr, netdev->dev_addr, 6); + netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_HW_VLAN_RX; - if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV)) - netdev->hw_features |= NETIF_F_TSO; netdev->features |= netdev->hw_features; netdev->hw_features |= NETIF_F_LRO; +#endif + if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV)) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39)) + netdev->hw_features |
[ewg] [PATCH] RDMA/nes: Backport for RHEL-6.3
Backport for linux-3.5 nes to RHEL-6.3 Signed-off-by: Tatyana Nikolova --- drivers/infiniband/hw/nes/nes_cm.c |8 +++-- drivers/infiniband/hw/nes/nes_nic.c | 51 +++ 2 files changed, 15 insertions(+), 44 deletions(-) diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index 020e95c..68dbf10 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c @@ -1339,13 +1339,15 @@ static inline int mini_cm_accelerated(struct nes_cm_core *cm_core, static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpindex) { struct rtable *rt; + struct flowi fl; struct neighbour *neigh; int rc = arpindex; struct net_device *netdev; struct nes_adapter *nesadapter = nesvnic->nesdev->nesadapter; - rt = ip_route_output(&init_net, htonl(dst_ip), 0, 0, 0); - if (IS_ERR(rt)) { + memset(&fl, 0, sizeof fl); + fl.nl_u.ip4_u.daddr = htonl(dst_ip); + if (ip_route_output_key(&init_net, &rt, &fl)) { printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n", __func__, dst_ip); return rc; @@ -1356,7 +1358,7 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi else netdev = nesvnic->netdev; - neigh = dst_neigh_lookup(&rt->dst, &dst_ip); + neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, netdev); rcu_read_lock(); if (neigh) { diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index f3a3ecf..c7a2f78 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c @@ -909,7 +909,7 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev) if (!mc_all_on) { char *addrs; int i; - struct netdev_hw_addr *ha; + struct dev_mc_list *mcaddr; addrs = kmalloc(ETH_ALEN * mc_count, GFP_ATOMIC); if (!addrs) { @@ -917,8 +917,8 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev) goto unlock; } i = 0; - netdev_for_each_mc_addr(ha, netdev) - memcpy(get_addr(addrs, i++), ha->addr, ETH_ALEN); + netdev_for_each_mc_addr(mcaddr, netdev) + memcpy(get_addr(addrs, i++), mcaddr->dmi_addr, ETH_ALEN); perfect_filter_register_address = NES_IDX_PERFECT_FILTER_LOW + pft_entries_preallocated * 0x8; @@ -1589,7 +1589,7 @@ static const struct ethtool_ops nes_ethtool_ops = { .set_pauseparam = nes_netdev_set_pauseparam, }; -static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev, netdev_features_t features) +static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev) { struct nes_adapter *nesadapter = nesdev->nesadapter; u32 u32temp; @@ -1601,7 +1601,7 @@ static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev, /* Enable/Disable VLAN Stripping */ u32temp = nes_read_indexed(nesdev, NES_IDX_PCIX_DIAG); - if (features & NETIF_F_HW_VLAN_RX) + if (netdev->features & NETIF_F_HW_VLAN_RX) u32temp &= 0xfdff; else u32temp |= 0x0200; @@ -1610,32 +1610,6 @@ static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev, spin_unlock_irqrestore(&nesadapter->phy_lock, flags); } -static netdev_features_t nes_fix_features(struct net_device *netdev, netdev_features_t features) -{ - /* -* Since there is no support for separate rx/tx vlan accel -* enable/disable make sure tx flag is always in same state as rx. -*/ - if (features & NETIF_F_HW_VLAN_RX) - features |= NETIF_F_HW_VLAN_TX; - else - features &= ~NETIF_F_HW_VLAN_TX; - - return features; -} - -static int nes_set_features(struct net_device *netdev, netdev_features_t features) -{ - struct nes_vnic *nesvnic = netdev_priv(netdev); - struct nes_device *nesdev = nesvnic->nesdev; - u32 changed = netdev->features ^ features; - - if (changed & NETIF_F_HW_VLAN_RX) - nes_vlan_mode(netdev, nesdev, features); - - return 0; -} - static const struct net_device_ops nes_netdev_ops = { .ndo_open = nes_netdev_open, .ndo_stop = nes_netdev_stop, @@ -1646,8 +1620,6 @@ static const struct net_device_ops nes_netdev_ops = { .ndo_set_rx_mode= nes_netdev_set_multicast_list, .ndo_change_mtu = nes_netdev_chang
[ewg] [PATCH] RDMA/nes: Backport for RHEL-6.2
Backport for linux-3.5 nes to RHEL-6.2 Signed-off-by: Tatyana Nikolova --- drivers/infiniband/hw/nes/nes_cm.c |8 -- drivers/infiniband/hw/nes/nes_nic.c | 45 +- 2 files changed, 12 insertions(+), 41 deletions(-) diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index 020e95c..68dbf10 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c @@ -1339,13 +1339,15 @@ static inline int mini_cm_accelerated(struct nes_cm_core *cm_core, static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpindex) { struct rtable *rt; + struct flowi fl; struct neighbour *neigh; int rc = arpindex; struct net_device *netdev; struct nes_adapter *nesadapter = nesvnic->nesdev->nesadapter; - rt = ip_route_output(&init_net, htonl(dst_ip), 0, 0, 0); - if (IS_ERR(rt)) { + memset(&fl, 0, sizeof fl); + fl.nl_u.ip4_u.daddr = htonl(dst_ip); + if (ip_route_output_key(&init_net, &rt, &fl)) { printk(KERN_ERR "%s: ip_route_output_key failed for 0x%08X\n", __func__, dst_ip); return rc; @@ -1356,7 +1358,7 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi else netdev = nesvnic->netdev; - neigh = dst_neigh_lookup(&rt->dst, &dst_ip); + neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, netdev); rcu_read_lock(); if (neigh) { diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index f3a3ecf..d2d9e6f 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c @@ -909,7 +909,7 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev) if (!mc_all_on) { char *addrs; int i; - struct netdev_hw_addr *ha; + struct dev_mc_list *mcaddr; addrs = kmalloc(ETH_ALEN * mc_count, GFP_ATOMIC); if (!addrs) { @@ -917,8 +917,8 @@ static void nes_netdev_set_multicast_list(struct net_device *netdev) goto unlock; } i = 0; - netdev_for_each_mc_addr(ha, netdev) - memcpy(get_addr(addrs, i++), ha->addr, ETH_ALEN); + netdev_for_each_mc_addr(mcaddr, netdev) + memcpy(get_addr(addrs, i++), mcaddr->dmi_addr, ETH_ALEN); perfect_filter_register_address = NES_IDX_PERFECT_FILTER_LOW + pft_entries_preallocated * 0x8; @@ -1610,32 +1610,6 @@ static void nes_vlan_mode(struct net_device *netdev, struct nes_device *nesdev, spin_unlock_irqrestore(&nesadapter->phy_lock, flags); } -static netdev_features_t nes_fix_features(struct net_device *netdev, netdev_features_t features) -{ - /* -* Since there is no support for separate rx/tx vlan accel -* enable/disable make sure tx flag is always in same state as rx. -*/ - if (features & NETIF_F_HW_VLAN_RX) - features |= NETIF_F_HW_VLAN_TX; - else - features &= ~NETIF_F_HW_VLAN_TX; - - return features; -} - -static int nes_set_features(struct net_device *netdev, netdev_features_t features) -{ - struct nes_vnic *nesvnic = netdev_priv(netdev); - struct nes_device *nesdev = nesvnic->nesdev; - u32 changed = netdev->features ^ features; - - if (changed & NETIF_F_HW_VLAN_RX) - nes_vlan_mode(netdev, nesdev, features); - - return 0; -} - static const struct net_device_ops nes_netdev_ops = { .ndo_open = nes_netdev_open, .ndo_stop = nes_netdev_stop, @@ -1646,8 +1620,6 @@ static const struct net_device_ops nes_netdev_ops = { .ndo_set_rx_mode= nes_netdev_set_multicast_list, .ndo_change_mtu = nes_netdev_change_mtu, .ndo_validate_addr = eth_validate_addr, - .ndo_fix_features = nes_fix_features, - .ndo_set_features = nes_set_features, }; /** @@ -1711,13 +1683,10 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev, netdev->dev_addr[5] = (u8)u64temp; memcpy(netdev->perm_addr, netdev->dev_addr, 6); - netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM | - NETIF_F_HW_VLAN_RX; - if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != NE020_REV)) - netdev->hw_features |= NETIF_F_TSO; - netdev->features |= netdev->hw_features; - netdev->hw_features |= NETIF_F_LRO; - + netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM; + if ((nesvni
[ewg] [PATCH] compat: Addition to compat-2.6.39.h
backport netif_is_bond_slave() < 2.6.39 Signed-off-by: Tatyana Nikolova --- include/linux/compat-2.6.39.h |5 + 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/include/linux/compat-2.6.39.h b/include/linux/compat-2.6.39.h index 961e91c..92edbd4 100644 --- a/include/linux/compat-2.6.39.h +++ b/include/linux/compat-2.6.39.h @@ -8,6 +8,7 @@ #include #include #include +#include #define tiocmget(tty) tiocmget(tty, NULL) #define tiocmset(tty, set, clear) tiocmset(tty, NULL, set, clear) @@ -16,6 +17,10 @@ extern int tty_set_termios(struct tty_struct *tty, struct ktermios *kt); #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) */ +static inline int netif_is_bond_slave(struct net_device *dev) +{ + return dev->flags & IFF_SLAVE && dev->priv_flags & IFF_BONDING; +} static inline int irq_set_irq_wake(unsigned int irq, unsigned int on) { return set_irq_wake(irq, on); -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] compat-rdma/nes: Fixes
Fixes for NES driver which have been accepted upstream. Signed-off-by: Tatyana Nikolova --- patches/nes-0001-Fix-for-mpa-reject.patch | 31 + patches/nes-0002-Fix-for-terminate-timer.patch| 37 + patches/nes-0003-Fix-for-ibqp-event-handler.patch | 25 ++ patches/nes-0004-Fix-for-ord-size.patch | 26 ++ 4 files changed, 119 insertions(+), 0 deletions(-) create mode 100644 patches/nes-0001-Fix-for-mpa-reject.patch create mode 100644 patches/nes-0002-Fix-for-terminate-timer.patch create mode 100644 patches/nes-0003-Fix-for-ibqp-event-handler.patch create mode 100644 patches/nes-0004-Fix-for-ord-size.patch diff --git a/patches/nes-0001-Fix-for-mpa-reject.patch b/patches/nes-0001-Fix-for-mpa-reject.patch new file mode 100644 index 000..8228f85 --- /dev/null +++ b/patches/nes-0001-Fix-for-mpa-reject.patch @@ -0,0 +1,31 @@ +Set a reject flag, when sending MPA reject message to inform the peer +that the application has rejected the connection. + +Signed-off-by: Tatyana Nikolova +Signed-off-by: Faisal Latif +--- + +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index 47713f2..53c7e32 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -233,6 +233,7 @@ static int send_mpa_reject(struct nes_cm_node *cm_node) + u8 *start_ptr = &start_addr; + u8 **start_buff = &start_ptr; + u16 buff_len = 0; ++ struct ietf_mpa_v1 *mpa_frame; + + skb = dev_alloc_skb(MAX_CM_BUFFER); + if (!skb) { +@@ -242,6 +243,8 @@ static int send_mpa_reject(struct nes_cm_node *cm_node) + + /* send an MPA reject frame */ + cm_build_mpa_frame(cm_node, start_buff, &buff_len, NULL, MPA_KEY_REPLY); ++ mpa_frame = (struct ietf_mpa_v1 *)*start_buff; ++ mpa_frame->flags |= IETF_MPA_FLAGS_REJECT; + form_cm_frame(skb, cm_node, NULL, 0, *start_buff, buff_len, SET_ACK | SET_FIN); + + cm_node->state = NES_CM_STATE_FIN_WAIT1; +-- +1.7.1 + diff --git a/patches/nes-0002-Fix-for-terminate-timer.patch b/patches/nes-0002-Fix-for-terminate-timer.patch new file mode 100644 index 000..f45c178 --- /dev/null +++ b/patches/nes-0002-Fix-for-terminate-timer.patch @@ -0,0 +1,37 @@ +Fix for reset which happens right after sending a terminate message. +Terminate timer is not deleted when the connection is closed. + +Signed-off-by: Tatyana Nikolova +Signed-off-by: Faisal Latif +--- + +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index fc050aa..793ccd6 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -2841,6 +2841,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) + issue_disconn = 1; + issue_close = 1; + nesqp->cm_id = NULL; ++ del_timer(&nesqp->terminate_timer); + if (nesqp->flush_issued == 0) { + nesqp->flush_issued = 1; + issue_flush = 1; +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index 355786c..5bcd645 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +@@ -3619,10 +3619,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, + } + break; + case NES_AEQE_AEID_LLP_CLOSE_COMPLETE: +- if (nesqp->term_flags) { +- nes_terminate_done(nesqp, 0); +- return; +- } + spin_lock_irqsave(&nesqp->lock, flags); + nesqp->hw_iwarp_state = iwarp_state; + nesqp->hw_tcp_state = tcp_state; +-- +1.7.1 + diff --git a/patches/nes-0003-Fix-for-ibqp-event-handler.patch b/patches/nes-0003-Fix-for-ibqp-event-handler.patch new file mode 100644 index 000..9d3f2f4 --- /dev/null +++ b/patches/nes-0003-Fix-for-ibqp-event-handler.patch @@ -0,0 +1,25 @@ +Fix for ibqp event handler in the case it was NULL (not initialized by ULP). + +Signed-off-by: Tatyana Nikolova +Signed-off-by: Donald Wood +--- + drivers/infiniband/hw/nes/nes_cm.c |3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index da2c67d..a9899b1 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -2878,7 +2878,8 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) + ibevent.device = nesqp->ibqp.device; + ibevent.event = nesqp->terminate_eventtype; + ibevent.element.qp = &nesqp->ibqp; +- nesqp->ibqp.event_handler(&ibevent, nesqp-&g
[ewg] [PATCH] RDMA/nes: Fixes for Sparse Endian related warnings
Fixes for Endian Sparse Warnings introduced with the enhanced MPA patch Reported-by: Dan Carpenter Signed-off-by: Tatyana Nikolova Signed-off-by: Faisal Latif --- .../fixes/nes_0070_sparse_endian_fix.patch | 97 1 files changed, 97 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0070_sparse_endian_fix.patch diff --git a/kernel_patches/fixes/nes_0070_sparse_endian_fix.patch b/kernel_patches/fixes/nes_0070_sparse_endian_fix.patch new file mode 100644 index 000..59ee486 --- /dev/null +++ b/kernel_patches/fixes/nes_0070_sparse_endian_fix.patch @@ -0,0 +1,97 @@ +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index a4972ab..da2c67d 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -338,18 +338,21 @@ static int parse_mpa(struct nes_cm_node *cm_node, u8 *buffer, u32 *type, + case IETF_MPA_V2: { + u16 ird_size; + u16 ord_size; ++ u16 rtr_ctrl_ird; ++ u16 rtr_ctrl_ord; ++ + mpa_v2_frame = (struct ietf_mpa_v2 *)buffer; + mpa_hdr_len += IETF_RTR_MSG_SIZE; + cm_node->mpa_frame_size -= IETF_RTR_MSG_SIZE; + rtr_msg = &mpa_v2_frame->rtr_msg; + + /* parse rtr message */ +- rtr_msg->ctrl_ird = ntohs(rtr_msg->ctrl_ird); +- rtr_msg->ctrl_ord = ntohs(rtr_msg->ctrl_ord); +- ird_size = rtr_msg->ctrl_ird & IETF_NO_IRD_ORD; +- ord_size = rtr_msg->ctrl_ord & IETF_NO_IRD_ORD; ++ rtr_ctrl_ird = ntohs(rtr_msg->ctrl_ird); ++ rtr_ctrl_ord = ntohs(rtr_msg->ctrl_ord); ++ ird_size = rtr_ctrl_ird & IETF_NO_IRD_ORD; ++ ord_size = rtr_ctrl_ord & IETF_NO_IRD_ORD; + +- if (!(rtr_msg->ctrl_ird & IETF_PEER_TO_PEER)) { ++ if (!(rtr_ctrl_ird & IETF_PEER_TO_PEER)) { + /* send reset */ + return -EINVAL; + } +@@ -370,9 +373,9 @@ static int parse_mpa(struct nes_cm_node *cm_node, u8 *buffer, u32 *type, + } + } + +- if (rtr_msg->ctrl_ord & IETF_RDMA0_READ) { ++ if (rtr_ctrl_ord & IETF_RDMA0_READ) { + cm_node->send_rdma0_op = SEND_RDMA_READ_ZERO; +- } else if (rtr_msg->ctrl_ord & IETF_RDMA0_WRITE) { ++ } else if (rtr_ctrl_ord & IETF_RDMA0_WRITE) { + cm_node->send_rdma0_op = SEND_RDMA_WRITE_ZERO; + } else {/* Not supported RDMA0 operation */ + return -EINVAL; +@@ -543,6 +546,8 @@ static void build_mpa_v2(struct nes_cm_node *cm_node, + { + struct ietf_mpa_v2 *mpa_frame = (struct ietf_mpa_v2 *)start_addr; + struct ietf_rtr_msg *rtr_msg = &mpa_frame->rtr_msg; ++ u16 ctrl_ird; ++ u16 ctrl_ord; + + /* initialize the upper 5 bytes of the frame */ + build_mpa_v1(cm_node, start_addr, mpa_key); +@@ -550,31 +555,31 @@ static void build_mpa_v2(struct nes_cm_node *cm_node, + mpa_frame->priv_data_len += htons(IETF_RTR_MSG_SIZE); + + /* initialize RTR msg */ +- rtr_msg->ctrl_ird = (cm_node->ird_size > IETF_NO_IRD_ORD) ? ++ ctrl_ird = (cm_node->ird_size > IETF_NO_IRD_ORD) ? + IETF_NO_IRD_ORD : cm_node->ird_size; +- rtr_msg->ctrl_ord = (cm_node->ord_size > IETF_NO_IRD_ORD) ? ++ ctrl_ord = (cm_node->ord_size > IETF_NO_IRD_ORD) ? + IETF_NO_IRD_ORD : cm_node->ord_size; + +- rtr_msg->ctrl_ird |= IETF_PEER_TO_PEER; +- rtr_msg->ctrl_ird |= IETF_FLPDU_ZERO_LEN; ++ ctrl_ird |= IETF_PEER_TO_PEER; ++ ctrl_ird |= IETF_FLPDU_ZERO_LEN; + + switch (mpa_key) { + case MPA_KEY_REQUEST: +- rtr_msg->ctrl_ord |= IETF_RDMA0_WRITE; +- rtr_msg->ctrl_ord |= IETF_RDMA0_READ; ++ ctrl_ord |= IETF_RDMA0_WRITE; ++ ctrl_ord |= IETF_RDMA0_READ; + break; + case MPA_KEY_REPLY: + switch (cm_node->send_rdma0_op) { + case SEND_RDMA_WRITE_ZERO: +- rtr_msg->ctrl_ord |= IETF_RDMA0_WRITE; ++ ctrl_ord |= IETF_RDMA0_WRITE; + break; + case SEND_RDMA_READ_ZERO: +- rtr_msg->ctrl_ord |= IETF_RDMA0_READ; ++ ctrl_ord |= IETF_RDMA0_READ; + break; + } + } +- rtr_msg->ctrl_ird = htons(rtr_msg->ctrl_ird); +- rtr_msg->ctrl_ord = htons(rtr_msg->ctrl_ord); ++ rtr_msg->ctrl_ird = htons(ctrl_ird); ++ rtr_msg->ctrl_ord = htons(ctrl_ord); + } + + /** +-- +1.7.1 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Update nes release notes
Update nes_release_notes.txt for OFED-1.5.4.1 Signed-off-by: Tatyana Nikolova Signed-off-by: Faisal Latif --- release_notes/nes_release_notes.txt |9 - 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/release_notes/nes_release_notes.txt b/release_notes/nes_release_notes.txt index 6033895..bfbe7b8 100644 --- a/release_notes/nes_release_notes.txt +++ b/release_notes/nes_release_notes.txt @@ -1,6 +1,6 @@ Open Fabrics Enterprise Distribution (OFED) NetEffect Ethernet Cluster Server Adapter Release Notes - November 2011 + January 2012 @@ -10,6 +10,13 @@ support for the NetEffect Ethernet Cluster Server Adapters. == What's New == + +OFED 1.5.4.1 contains bug fixes for iw_nes driver. + +* Fixed a problem with QP destroy timer and improved AE handling. +* Fixed a problem with sending MPA reject message. +* Fixed fast memory registration issues. + OFED 1.5.4 contains several enhancements and bug fixes to iw_nes driver. * Added backports for 2.6.35 to 3.0 kernels. -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fix for sending MPA reject frame
Set a reject flag, when sending MPA reject message to inform the peer that the application has rejected the connection. Signed-off-by: Tatyana Nikolova Signed-off-by: Faisal Latif --- kernel_patches/fixes/nes_0069_mpa_reject_fix.patch | 24 1 files changed, 24 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0069_mpa_reject_fix.patch diff --git a/kernel_patches/fixes/nes_0069_mpa_reject_fix.patch b/kernel_patches/fixes/nes_0069_mpa_reject_fix.patch new file mode 100644 index 000..1f06b88 --- /dev/null +++ b/kernel_patches/fixes/nes_0069_mpa_reject_fix.patch @@ -0,0 +1,24 @@ +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index 47713f2..53c7e32 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -233,6 +233,7 @@ static int send_mpa_reject(struct nes_cm_node *cm_node) + u8 *start_ptr = &start_addr; + u8 **start_buff = &start_ptr; + u16 buff_len = 0; ++ struct ietf_mpa_v1 *mpa_frame; + + skb = dev_alloc_skb(MAX_CM_BUFFER); + if (!skb) { +@@ -242,6 +243,8 @@ static int send_mpa_reject(struct nes_cm_node *cm_node) + + /* send an MPA reject frame */ + cm_build_mpa_frame(cm_node, start_buff, &buff_len, NULL, MPA_KEY_REPLY); ++ mpa_frame = (struct ietf_mpa_v1 *)*start_buff; ++ mpa_frame->flags |= IETF_MPA_FLAGS_REJECT; + form_cm_frame(skb, cm_node, NULL, 0, *start_buff, buff_len, SET_ACK | SET_FIN); + + cm_node->state = NES_CM_STATE_FIN_WAIT1; +-- +1.7.1 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fix for fast memory registration opcode
Fixes fast memory registration incorrect opcode for local invalidate completion. Signed-off-by: Tatyana Nikolova Signed-off-by: Donald Wood --- kernel_patches/fixes/nes_0068_fmr_compl_fix.patch | 16 1 files changed, 16 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0068_fmr_compl_fix.patch diff --git a/kernel_patches/fixes/nes_0068_fmr_compl_fix.patch b/kernel_patches/fixes/nes_0068_fmr_compl_fix.patch new file mode 100644 index 000..0108b94 --- /dev/null +++ b/kernel_patches/fixes/nes_0068_fmr_compl_fix.patch @@ -0,0 +1,16 @@ +diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +index d33f563..bd09a19 100644 +--- a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +@@ -3947,7 +3949,7 @@ static int nes_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *entry) + entry->opcode = IB_WC_SEND; + break; + case NES_IWARP_SQ_OP_LOCINV: +- entry->opcode = IB_WR_LOCAL_INV; ++ entry->opcode = IB_WC_LOCAL_INV; + break; + case NES_IWARP_SQ_OP_FAST_REG: + entry->opcode = IB_WC_FAST_REG_MR; +-- +1.7.1 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fix for fast memory registration length
Zero high order word of fast memory registration (FMR) length field. FMR length field is 32 bits, so high word should always be zero. Signed-off-by: Tatyana Nikolova Signed-off-by: Donald Wood --- kernel_patches/fixes/nes_0067_fmr_length_fix.patch | 16 1 files changed, 16 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0067_fmr_length_fix.patch diff --git a/kernel_patches/fixes/nes_0067_fmr_length_fix.patch b/kernel_patches/fixes/nes_0067_fmr_length_fix.patch new file mode 100644 index 000..a5ae034 --- /dev/null +++ b/kernel_patches/fixes/nes_0067_fmr_length_fix.patch @@ -0,0 +1,16 @@ +diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +index d33f563..bd09a19 100644 +--- a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c +@@ -3651,6 +3651,8 @@ static int nes_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr, + NES_IWARP_SQ_FMR_WQE_LENGTH_LOW_IDX, + ib_wr->wr.fast_reg.length); + set_wqe_32bit_value(wqe->wqe_words, ++ NES_IWARP_SQ_FMR_WQE_LENGTH_HIGH_IDX, 0); ++ set_wqe_32bit_value(wqe->wqe_words, + NES_IWARP_SQ_FMR_WQE_MR_STAG_IDX, + ib_wr->wr.fast_reg.rkey); + /* Set page size: */ +-- +1.7.1 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Change for phy SFP+ clock divisor
Change phy SFP+ clock divisor Signed-off-by: Tatyana Nikolova Signed-off-by: Faisal Latif --- kernel_patches/fixes/nes_0066_phy_clk_div.patch | 16 1 files changed, 16 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0066_phy_clk_div.patch diff --git a/kernel_patches/fixes/nes_0066_phy_clk_div.patch b/kernel_patches/fixes/nes_0066_phy_clk_div.patch new file mode 100644 index 000..aaa2627 --- /dev/null +++ b/kernel_patches/fixes/nes_0066_phy_clk_div.patch @@ -0,0 +1,16 @@ +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index 2398c2d..66bda69 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +@@ -1529,7 +1529,7 @@ int nes_init_phy(struct nes_device *nesdev) + } else { + /* setup 10G MDIO operation */ + tx_config &= 0xFFE3; +- tx_config |= 0x15; ++ tx_config |= 0x1D; + } + nes_write_indexed(nesdev, NES_IDX_MAC_TX_CONFIG, tx_config); + +-- +1.7.1 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Fixes for Sparse generated warnings
Fix source code warnings generated by Sparse Signed-off-by: Tatyana Nikolova Signed-off-by: Faisal Latif --- kernel_patches/fixes/nes_0065_sparse_fix.patch | 217 1 files changed, 217 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0065_sparse_fix.patch diff --git a/kernel_patches/fixes/nes_0065_sparse_fix.patch b/kernel_patches/fixes/nes_0065_sparse_fix.patch new file mode 100644 index 000..e1daf3f --- /dev/null +++ b/kernel_patches/fixes/nes_0065_sparse_fix.patch @@ -0,0 +1,217 @@ +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index 3fb164d..47713f2 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -2802,7 +2802,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) + u16 last_ae; + u8 original_hw_tcp_state; + u8 original_ibqp_state; +- enum iw_cm_event_type disconn_status = IW_CM_EVENT_STATUS_OK; ++ enum iw_cm_event_status disconn_status = IW_CM_EVENT_STATUS_OK; + int issue_disconn = 0; + int issue_close = 0; + int issue_flush = 0; +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index 1b4d61d..2398c2d 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +@@ -1305,7 +1305,7 @@ int nes_destroy_cqp(struct nes_device *nesdev) + /** + * nes_init_1g_phy + */ +-int nes_init_1g_phy(struct nes_device *nesdev, u8 phy_type, u8 phy_index) ++static int nes_init_1g_phy(struct nes_device *nesdev, u8 phy_type, u8 phy_index) + { + u32 counter = 0; + u16 phy_data; +@@ -1359,7 +1359,7 @@ int nes_init_1g_phy(struct nes_device *nesdev, u8 phy_type, u8 phy_index) + /** + * nes_init_2025_phy + */ +-int nes_init_2025_phy(struct nes_device *nesdev, u8 phy_type, u8 phy_index) ++static int nes_init_2025_phy(struct nes_device *nesdev, u8 phy_type, u8 phy_index) + { + u32 temp_phy_data = 0; + u32 temp_phy_data2 = 0; +diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +index e46b000..8d95ed2 100644 +--- a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +@@ -40,7 +40,7 @@ + #include "nes.h" + #include "nes_mgt.h" + +-void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic) ++static void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic) + { + unsigned long flags; + dma_addr_t bus_address; +@@ -119,7 +119,7 @@ void nes_replenish_mgt_rq(struct nes_vnic_mgt *mgtvnic) + /** + * nes_mgt_rq_wqes_timeout + */ +-void nes_mgt_rq_wqes_timeout(unsigned long parm) ++static void nes_mgt_rq_wqes_timeout(unsigned long parm) + { + struct nes_vnic_mgt *mgtvnic = (struct nes_vnic_mgt *)parm; + +@@ -131,7 +131,7 @@ void nes_mgt_rq_wqes_timeout(unsigned long parm) + /** + * nes_mgt_free_skb - unmap and free skb + */ +-void nes_mgt_free_skb(struct nes_device *nesdev, struct sk_buff *skb, u32 dir) ++static void nes_mgt_free_skb(struct nes_device *nesdev, struct sk_buff *skb, u32 dir) + { + struct nes_rskb_cb *cb; + +@@ -144,7 +144,7 @@ void nes_mgt_free_skb(struct nes_device *nesdev, struct sk_buff *skb, u32 dir) + /** + * nes_download_callback - handle download completions + */ +-void nes_download_callback(struct nes_device *nesdev, struct nes_cqp_request *cqp_request) ++static void nes_download_callback(struct nes_device *nesdev, struct nes_cqp_request *cqp_request) + { + struct pau_fpdu_info *fpdu_info = cqp_request->cqp_callback_pointer; + struct nes_qp *nesqp = fpdu_info->nesqp; +@@ -168,7 +168,7 @@ void nes_download_callback(struct nes_device *nesdev, struct nes_cqp_request *cq + /** + * nes_get_seq - Get the seq, ack_seq and window from the packet + */ +-u32 nes_get_seq(struct sk_buff *skb, u32 *ack, u16 *wnd, u32 *fin_rcvd, u32 *rst_rcvd) ++static u32 nes_get_seq(struct sk_buff *skb, u32 *ack, u16 *wnd, u32 *fin_rcvd, u32 *rst_rcvd) + { + struct nes_rskb_cb *cb = (struct nes_rskb_cb *)&skb->cb[0]; + struct iphdr *iph = (struct iphdr *)(cb->data_start + ETH_HLEN); +@@ -184,7 +184,7 @@ u32 nes_get_seq(struct sk_buff *skb, u32 *ack, u16 *wnd, u32 *fin_rcvd, u32 *rst + /** + * nes_get_next_skb - Get the next skb based on where current skb is in the queue + */ +-struct sk_buff *nes_get_next_skb(struct nes_device *nesdev, struct nes_qp *nesqp, struct sk_buff *skb, ++static struct sk_buff *nes_get_next_skb(struct nes_device *nesdev, struct nes_qp *nesqp, struct sk_buff *skb, +u32 nextseq, u32 *ack, u16 *wnd, u32 *fin_rcvd, u32 *rst_rcvd) + { + u32 seq; +@@ -232,7 +232,7 @@ out: + /** + * get_fpdu_info - Find the next complete fpdu and return its fragments. + */ +-int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp, struct pau_fpdu_info **pau_fpdu_info) ++static int get_fpdu_info(struct nes_device *nesdev, struct nes_qp *nesqp,
[ewg] [PATCH] RDMA/nes: Fix terminate during fatal AE
Fix for reset which happens right after sending a terminate message. Terminate timer is not deleted when the connection is closed. Signed-off-by: Tatyana Nikolova Signed-off-by: Faisal Latif --- kernel_patches/fixes/nes_0064_term_rst_fix.patch | 30 ++ 1 files changed, 30 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0064_term_rst_fix.patch diff --git a/kernel_patches/fixes/nes_0064_term_rst_fix.patch b/kernel_patches/fixes/nes_0064_term_rst_fix.patch new file mode 100644 index 000..802e90d --- /dev/null +++ b/kernel_patches/fixes/nes_0064_term_rst_fix.patch @@ -0,0 +1,30 @@ +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index 597b993..3fb164d 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -2835,6 +2835,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) + issue_disconn = 1; + issue_close = 1; + nesqp->cm_id = NULL; ++ del_timer(&nesqp->terminate_timer); + if (nesqp->flush_issued == 0) { + nesqp->flush_issued = 1; + issue_flush = 1; +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index 485a1b3..1b4d61d 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +@@ -3627,10 +3627,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, + } + break; + case NES_AEQE_AEID_LLP_CLOSE_COMPLETE: +- if (nesqp->term_flags) { +- nes_terminate_done(nesqp, 0); +- return; +- } + spin_lock_irqsave(&nesqp->lock, flags); + nesqp->hw_iwarp_state = iwarp_state; + nesqp->hw_tcp_state = tcp_state; +-- +1.7.1 + -- 1.7.1 ___ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
[ewg] [PATCH] RDMA/nes: Update nes release notes
Update nes_release_notes.txt file Signed-off-by: Jakub Fedoruk Signed-off-by: Tatyana Nikolova --- release_notes/nes_release_notes.txt | 94 --- 1 files changed, 32 insertions(+), 62 deletions(-) diff --git a/release_notes/nes_release_notes.txt b/release_notes/nes_release_notes.txt index 73628e2..a19b7a1 100644 --- a/release_notes/nes_release_notes.txt +++ b/release_notes/nes_release_notes.txt @@ -1,6 +1,6 @@ Open Fabrics Enterprise Distribution (OFED) NetEffect Ethernet Cluster Server Adapter Release Notes - February 2011 + November 2011 @@ -10,20 +10,17 @@ support for the NetEffect Ethernet Cluster Server Adapters. == What's New == -OFED 1.5.3 contains several enhancements and bug fixes to iw_nes driver. - -* Correct AEQE operation. -* Add backports for 2.6.35 and 2.6.36 kernels. -* Fix for problem of lack of HW limit checking for MG attach for IMA. -* Fix for a problem with non-aligned buffers crash during post_recv for IMA. -* Fix for possible crash when RAW QP resources are destroyed. -* Fix for problem of RAW QP transition state toERR. -* Fix a problem with sending packets with VLAN flag for IMA. -* Enable bonds on iw_nes. -* Fix hazard of sending ibevent for unregistered device. -* Fix for sending IB_EVENT_PORT_ERR/PORT_ACTIVEevent on link state interrupt. -* Fix SFP link down detection issue with switch port disable. -* Fix incorrect SFP link status detection on driver init. +OFED 1.5.4 contains several enhancements and bug fixes to iw_nes driver. + +* Added backports for 2.6.35 to 3.0 kernels. +* Fixed a couple of problems which caused IMA to crash. +* Fixed a problem with VLAN flag for IMA. +* Enabled bonding with iw_nes. +* Fixed a couple of IB_EVENT issues. +* Fixed an SFP+ link status issue. +* Added support for Chelsio Interoperability. +* Added support for MPA version 2. + Required Setting - RDMA Unify TCP port space @@ -47,14 +44,14 @@ If possible, disable Active State Power Management in the BIOS, e.g.: Loadable Module Options === The following options can be used when loading the iw_nes module by modifying -modprobe.conf file. +/etc/modprobe.conf file. wide_ppm_offset=0 Set to 1 will increase CX4 interface clock ppm offset to 300ppm. Default setting 0 is 100ppm. mpa_version=1 -MPA version to be used int MPA Req/Resp (0 or 1). +MPA version to be used int MPA Req/Resp (1 or 2). disable_mpa_crc=0 Disable checking of MPA CRC. @@ -109,12 +106,17 @@ NOTE: Assuming NetEffect Ethernet Cluster Server Adapter is assigned eth2. === uDAPL Configuration === -Rest of the document assumes the following uDAPL settings in dat.conf: +Rest of the document assumes the following uDAPL settings in /etc/dat.conf: OpenIB-iwarp u1.2 nonthreadsafe default libdaplcma.so.1 dapl.1.2 "eth2 0" "" ofa-v2-iwarp u2.0 nonthreadsafe default libdaplofa.so.2 dapl.2.0 "eth2 0" "" - + +Chelsio Interoperability + +The firmware version supporting interoperability with Chelsio is 3.23 or greater. +The load time Chelsio parameter peer2peer must be set to 1. + == mpd.hosts file == @@ -130,63 +132,35 @@ This operational mode can cause 100% CPU utilization. To switch to Event Driven mode and lower CPU utilization please refer to README or Release Notes for specific application. - -Recommended Settings for Platform MPI 7.1 (formerly HP-MPI) - -Add the following to mpirun command: - --1sided - -Example mpirun command with uDAPL-2.0: - -mpirun -np 2 -hostfile /opt/mpd.hosts - -UDAPL -prot -intra=shm - -e MPI_HASIC_UDAPL=ofa-v2-iwarp - -1sided - /opt/platform_mpi/help/hello_world - -Example mpirun command with uDAPL-1.2: - -mpirun -np 2 -hostfile /opt/mpd.hosts - -UDAPL -prot -intra=shm - -e MPI_HASIC_UDAPL=OpenIB-iwarp - -1sided - /opt/platform_mpi/help/hello_world - - == Recommended Settings for Intel MPI 4.0.x == Add the following to mpiexec command: -genv I_MPI_FALLBACK_DEVICE 0 --genv I_MPI_FABRICS shm:dapl --genv I_MPI_DAPL_PROVIDER ofa-v2-iwarp +-genv I_MPI_DEVICE rdma:ofa-v2-iwarp -genv I_MPI_USE_RENDEZVOUS_RDMA_WRITE 1 Example mpiexec command line for uDAPL-2.0: mpiexec -genv I_MPI_FALLBACK_DEVICE 0 --genv I_MPI_DEVICE shm:dapl --genv I_MPI_DAPL_PROVIDER OpenIB-iwarp --genv I_MPI_DAPL_PROVIDER ofa-v2-iwarp +
[ewg] [PATCH] RDMA/nes: Copyright Update
Update Copyright information in the source files. Signed-off-by: Tatyana Nikolova Signed-off-by: Faisal Latif --- .../fixes/nes_0063_copyright_update.patch | 179 1 files changed, 179 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0063_copyright_update.patch diff --git a/kernel_patches/fixes/nes_0063_copyright_update.patch b/kernel_patches/fixes/nes_0063_copyright_update.patch new file mode 100644 index 000..386bddd --- /dev/null +++ b/kernel_patches/fixes/nes_0063_copyright_update.patch @@ -0,0 +1,179 @@ +diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c +index ec809f7..7bd1e75 100644 +--- a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2006 - 2009 Intel Corporation. All rights reserved. ++ * Copyright (c) 2006 - 2011 Intel Corporation. All rights reserved. + * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved. + * + * This software is available to you under a choice of one of two +diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h +index 4bf44aa..390eb42 100644 +--- a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2006 - 2009 Intel Corporation. All rights reserved. ++ * Copyright (c) 2006 - 2011 Intel Corporation. All rights reserved. + * Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved. + * + * This software is available to you under a choice of one of two +diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +index 230974d..597b993 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2006 - 2009 Intel Corporation. All rights reserved. ++ * Copyright (c) 2006 - 2011 Intel Corporation. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU +diff --git a/drivers/infiniband/hw/nes/nes_cm.h b/drivers/infiniband/hw/nes/nes_cm.h +index bdfa1fb..4646e66 100644 +--- a/drivers/infiniband/hw/nes/nes_cm.h b/drivers/infiniband/hw/nes/nes_cm.h +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2006 - 2009 Intel Corporation. All rights reserved. ++ * Copyright (c) 2006 - 2011 Intel Corporation. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU +diff --git a/drivers/infiniband/hw/nes/nes_context.h b/drivers/infiniband/hw/nes/nes_context.h +index b4393a1..a69eef1 100644 +--- a/drivers/infiniband/hw/nes/nes_context.h b/drivers/infiniband/hw/nes/nes_context.h +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2006 - 2009 Intel Corporation. All rights reserved. ++ * Copyright (c) 2006 - 2011 Intel Corporation. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index e9ee74d..485a1b3 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2006 - 2009 Intel Corporation. All rights reserved. ++ * Copyright (c) 2006 - 2011 Intel Corporation. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU +diff --git a/drivers/infiniband/hw/nes/nes_hw.h b/drivers/infiniband/hw/nes/nes_hw.h +index 11012e5..5b41161 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.h b/drivers/infiniband/hw/nes/nes_hw.h +@@ -1,5 +1,5 @@ + /* +-* Copyright (c) 2006 - 2009 Intel Corporation. All rights reserved. ++* Copyright (c) 2006 - 2011 Intel Corporation. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU +diff --git a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +index 6af74ed..e46b000 100644 +--- a/drivers/infiniband/hw/nes/nes_mgt.c b/drivers/infiniband/hw/nes/nes_mgt.c +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2006 - 2009 Intel-NE, Inc. All rights reserved. ++ * Copyright (c) 2006 - 2011 Intel-NE, Inc. All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses. You may choose to be licensed under the terms of the GNU +diff --git a/drivers/infiniband/hw/nes/nes_mgt.h b/drivers/infiniband/hw/nes/nes_mgt.h +index b4a56cc..4e42145 100644 +--- a/drivers/infiniband/hw/nes/nes_mgt.h b/drivers/infiniband/hw/nes/nes_mgt.h +@@ -1,5 +1,5 @@ + /* +-* Copyright (c) 2010 Intel-NE, Inc. All rights reserved. ++* Copyright (c) 2006 - 2011 Intel