]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/infiniband/hw/nes/nes_cm.c
RDMA/nes: Use more concise list_for_each_entry()
[linux-2.6-omap-h63xx.git] / drivers / infiniband / hw / nes / nes_cm.c
index 39adb267fb1553fb45d96104b361eb6442ba8658..d0738623bcf3529ecbef5ae6f64f8f7037720e33 100644 (file)
@@ -40,6 +40,7 @@
 #include <linux/tcp.h>
 #include <linux/init.h>
 #include <linux/if_arp.h>
+#include <linux/if_vlan.h>
 #include <linux/notifier.h>
 #include <linux/net.h>
 #include <linux/types.h>
@@ -79,7 +80,30 @@ static struct nes_cm_listener *mini_cm_listen(struct nes_cm_core *,
 static int add_ref_cm_node(struct nes_cm_node *);
 static int rem_ref_cm_node(struct nes_cm_core *, struct nes_cm_node *);
 static int mini_cm_del_listen(struct nes_cm_core *, struct nes_cm_listener *);
-
+static struct sk_buff *form_cm_frame(struct sk_buff *, struct nes_cm_node *,
+                                    void *, u32, void *, u32, u8);
+static struct sk_buff *get_free_pkt(struct nes_cm_node *cm_node);
+
+static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *,
+                                          struct nes_vnic *,
+                                          struct ietf_mpa_frame *,
+                                          struct nes_cm_info *);
+static int mini_cm_accept(struct nes_cm_core *, struct ietf_mpa_frame *,
+                         struct nes_cm_node *);
+static int mini_cm_reject(struct nes_cm_core *, struct ietf_mpa_frame *,
+                         struct nes_cm_node *);
+static int mini_cm_close(struct nes_cm_core *, struct nes_cm_node *);
+static int mini_cm_recv_pkt(struct nes_cm_core *, struct nes_vnic *,
+                           struct sk_buff *);
+static int mini_cm_dealloc_core(struct nes_cm_core *);
+static int mini_cm_get(struct nes_cm_core *);
+static int mini_cm_set(struct nes_cm_core *, u32, u32);
+static int nes_cm_disconn_true(struct nes_qp *);
+static int nes_cm_post_event(struct nes_cm_event *event);
+static int nes_disconnect(struct nes_qp *nesqp, int abrupt);
+static void nes_disconnect_worker(struct work_struct *work);
+static int send_ack(struct nes_cm_node *cm_node);
+static int send_fin(struct nes_cm_node *cm_node, struct sk_buff *skb);
 
 /* External CM API Interface */
 /* instance of function pointers for client API */
@@ -98,7 +122,7 @@ static struct nes_cm_ops nes_cm_api = {
        mini_cm_set
 };
 
-struct nes_cm_core *g_cm_core;
+static struct nes_cm_core *g_cm_core;
 
 atomic_t cm_connects;
 atomic_t cm_accepts;
@@ -148,7 +172,7 @@ static struct nes_cm_event *create_event(struct nes_cm_node *cm_node,
 /**
  * send_mpa_request
  */
-int send_mpa_request(struct nes_cm_node *cm_node)
+static int send_mpa_request(struct nes_cm_node *cm_node)
 {
        struct sk_buff *skb;
        int ret;
@@ -242,8 +266,9 @@ static int handle_exception_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb
  * form_cm_frame - get a free packet and build empty frame Use
  * node info to build.
  */
-struct sk_buff *form_cm_frame(struct sk_buff *skb, struct nes_cm_node *cm_node,
-               void *options, u32 optionsize, void *data, u32 datasize, u8 flags)
+static struct sk_buff *form_cm_frame(struct sk_buff *skb, struct nes_cm_node *cm_node,
+                                    void *options, u32 optionsize, void *data,
+                                    u32 datasize, u8 flags)
 {
        struct tcphdr *tcph;
        struct iphdr *iph;
@@ -341,7 +366,6 @@ static void print_core(struct nes_cm_core *core)
        if (!core)
                return;
        nes_debug(NES_DBG_CM, "---------------------------------------------\n");
-       nes_debug(NES_DBG_CM, "Session ID    : %u \n", atomic_read(&core->session_id));
 
        nes_debug(NES_DBG_CM, "State         : %u \n",  core->state);
 
@@ -394,7 +418,7 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb,
        }
 
        if (type == NES_TIMER_TYPE_SEND) {
-               new_send->seq_num = htonl(tcp_hdr(skb)->seq);
+               new_send->seq_num = ntohl(tcp_hdr(skb)->seq);
                atomic_inc(&new_send->skb->users);
 
                ret = nes_nic_cm_xmit(new_send->skb, cm_node->netdev);
@@ -419,7 +443,7 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb,
                spin_unlock_irqrestore(&cm_node->retrans_list_lock, flags);
        }
        if (type == NES_TIMER_TYPE_RECV) {
-               new_send->seq_num = htonl(tcp_hdr(skb)->seq);
+               new_send->seq_num = ntohl(tcp_hdr(skb)->seq);
                new_send->timetosend = jiffies;
                spin_lock_irqsave(&cm_node->recv_list_lock, flags);
                list_add_tail(&new_send->list, &cm_node->recv_list);
@@ -441,7 +465,7 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb,
 /**
  * nes_cm_timer_tick
  */
-void nes_cm_timer_tick(unsigned long pass)
+static void nes_cm_timer_tick(unsigned long pass)
 {
        unsigned long flags, qplockflags;
        unsigned long nexttimeout = jiffies + NES_LONG_TIME;
@@ -643,7 +667,7 @@ void nes_cm_timer_tick(unsigned long pass)
 /**
  * send_syn
  */
-int send_syn(struct nes_cm_node *cm_node, u32 sendack)
+static int send_syn(struct nes_cm_node *cm_node, u32 sendack)
 {
        int ret;
        int flags = SET_SYN;
@@ -709,7 +733,7 @@ int send_syn(struct nes_cm_node *cm_node, u32 sendack)
 /**
  * send_reset
  */
-int send_reset(struct nes_cm_node *cm_node)
+static int send_reset(struct nes_cm_node *cm_node)
 {
        int ret;
        struct sk_buff *skb = get_free_pkt(cm_node);
@@ -731,7 +755,7 @@ int send_reset(struct nes_cm_node *cm_node)
 /**
  * send_ack
  */
-int send_ack(struct nes_cm_node *cm_node)
+static int send_ack(struct nes_cm_node *cm_node)
 {
        int ret;
        struct sk_buff *skb = get_free_pkt(cm_node);
@@ -751,7 +775,7 @@ int send_ack(struct nes_cm_node *cm_node)
 /**
  * send_fin
  */
-int send_fin(struct nes_cm_node *cm_node, struct sk_buff *skb)
+static int send_fin(struct nes_cm_node *cm_node, struct sk_buff *skb)
 {
        int ret;
 
@@ -774,7 +798,7 @@ int send_fin(struct nes_cm_node *cm_node, struct sk_buff *skb)
 /**
  * get_free_pkt
  */
-struct sk_buff *get_free_pkt(struct nes_cm_node *cm_node)
+static struct sk_buff *get_free_pkt(struct nes_cm_node *cm_node)
 {
        struct sk_buff *skb, *new_skb;
 
@@ -819,7 +843,6 @@ static struct nes_cm_node *find_node(struct nes_cm_core *cm_core,
 {
        unsigned long flags;
        u32 hashkey;
-       struct list_head *list_pos;
        struct list_head *hte;
        struct nes_cm_node *cm_node;
 
@@ -834,8 +857,7 @@ static struct nes_cm_node *find_node(struct nes_cm_core *cm_core,
 
        /* walk list and find cm_node associated with this session ID */
        spin_lock_irqsave(&cm_core->ht_lock, flags);
-       list_for_each(list_pos, hte) {
-               cm_node = container_of(list_pos, struct nes_cm_node, list);
+       list_for_each_entry(cm_node, hte, list) {
                /* compare quad, return node handle if a match */
                nes_debug(NES_DBG_CM, "finding node %x:%x =? %x:%x ^ %x:%x =? %x:%x\n",
                                cm_node->loc_addr, cm_node->loc_port,
@@ -863,13 +885,11 @@ static struct nes_cm_listener *find_listener(struct nes_cm_core *cm_core,
                nes_addr_t dst_addr, u16 dst_port, enum nes_cm_listener_state listener_state)
 {
        unsigned long flags;
-       struct list_head *listen_list;
        struct nes_cm_listener *listen_node;
 
        /* walk list and find cm_node associated with this session ID */
        spin_lock_irqsave(&cm_core->listen_list_lock, flags);
-       list_for_each(listen_list, &cm_core->listen_list.list) {
-               listen_node = container_of(listen_list, struct nes_cm_listener, list);
+       list_for_each_entry(listen_node, &cm_core->listen_list.list, list) {
                /* compare node pair, return node handle if a match */
                if (((listen_node->loc_addr == dst_addr) ||
                                listen_node->loc_addr == 0x00000000) &&
@@ -1013,7 +1033,7 @@ static void nes_addr_send_arp(u32 dst_ip)
        fl.nl_u.ip4_u.daddr = htonl(dst_ip);
        if (ip_route_output_key(&init_net, &rt, &fl)) {
                printk("%s: ip_route_output_key failed for 0x%08X\n",
-                               __FUNCTION__, dst_ip);
+                               __func__, dst_ip);
                return;
        }
 
@@ -1072,12 +1092,10 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core,
        ts = current_kernel_time();
        cm_node->tcp_cntxt.loc_seq_num = htonl(ts.tv_nsec);
        cm_node->tcp_cntxt.mss = nesvnic->max_frame_size - sizeof(struct iphdr) -
-                       sizeof(struct tcphdr) - ETH_HLEN;
+                       sizeof(struct tcphdr) - ETH_HLEN - VLAN_HLEN;
        cm_node->tcp_cntxt.rcv_nxt = 0;
        /* get a unique session ID , add thread_id to an upcounter to handle race */
        atomic_inc(&cm_core->node_cnt);
-       atomic_inc(&cm_core->session_id);
-       cm_node->session_id = (u32)(atomic_read(&cm_core->session_id) + current->tgid);
        cm_node->conn_type = cm_info->conn_type;
        cm_node->apbvt_set = 0;
        cm_node->accept_pend = 0;
@@ -1238,7 +1256,7 @@ static int process_options(struct nes_cm_node *cm_node, u8 *optionsloc, u32 opti
                                continue;
                        case OPTION_NUMBER_MSS:
                                nes_debug(NES_DBG_CM, "%s: MSS Length: %d Offset: %d Size: %d\n",
-                                               __FUNCTION__,
+                                               __func__,
                                                all_options->as_mss.length, offset, optionsize);
                                got_mss_option = 1;
                                if (all_options->as_mss.length != 4) {
@@ -1271,8 +1289,8 @@ static int process_options(struct nes_cm_node *cm_node, u8 *optionsloc, u32 opti
 /**
  * process_packet
  */
-int process_packet(struct nes_cm_node *cm_node, struct sk_buff *skb,
-               struct nes_cm_core *cm_core)
+static int process_packet(struct nes_cm_node *cm_node, struct sk_buff *skb,
+                         struct nes_cm_core *cm_core)
 {
        int optionsize;
        int datasize;
@@ -1359,7 +1377,7 @@ int process_packet(struct nes_cm_node *cm_node, struct sk_buff *skb,
        if (optionsize) {
                u8 *optionsloc = (u8 *)&tcph[1];
                if (process_options(cm_node, optionsloc, optionsize, (u32)tcph->syn)) {
-                       nes_debug(NES_DBG_CM, "%s: Node %p, Sending RESET\n", __FUNCTION__, cm_node);
+                       nes_debug(NES_DBG_CM, "%s: Node %p, Sending RESET\n", __func__, cm_node);
                        send_reset(cm_node);
                        if (cm_node->state != NES_CM_STATE_SYN_SENT)
                        rem_ref_cm_node(cm_core, cm_node);
@@ -1604,9 +1622,7 @@ static struct nes_cm_listener *mini_cm_listen(struct nes_cm_core *cm_core,
        listener->cm_core = cm_core;
        listener->nesvnic = nesvnic;
        atomic_inc(&cm_core->node_cnt);
-       atomic_inc(&cm_core->session_id);
 
-       listener->session_id = (u32)(atomic_read(&cm_core->session_id) + current->tgid);
        listener->conn_type = cm_info->conn_type;
        listener->backlog = cm_info->backlog;
        listener->listener_state = NES_CM_LISTENER_ACTIVE_STATE;
@@ -1630,9 +1646,10 @@ static struct nes_cm_listener *mini_cm_listen(struct nes_cm_core *cm_core,
 /**
  * mini_cm_connect - make a connection node with params
  */
-struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core,
-               struct nes_vnic *nesvnic, struct ietf_mpa_frame *mpa_frame,
-               struct nes_cm_info *cm_info)
+static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core,
+                                          struct nes_vnic *nesvnic,
+                                          struct ietf_mpa_frame *mpa_frame,
+                                          struct nes_cm_info *cm_info)
 {
        int ret = 0;
        struct nes_cm_node *cm_node;
@@ -1716,8 +1733,8 @@ struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core,
  * mini_cm_accept - accept a connection
  * This function is never called
  */
-int mini_cm_accept(struct nes_cm_core *cm_core, struct ietf_mpa_frame *mpa_frame,
-               struct nes_cm_node *cm_node)
+static int mini_cm_accept(struct nes_cm_core *cm_core, struct ietf_mpa_frame *mpa_frame,
+                         struct nes_cm_node *cm_node)
 {
        return 0;
 }
@@ -1726,9 +1743,9 @@ int mini_cm_accept(struct nes_cm_core *cm_core, struct ietf_mpa_frame *mpa_frame
 /**
  * mini_cm_reject - reject and teardown a connection
  */
-int mini_cm_reject(struct nes_cm_core *cm_core,
-               struct ietf_mpa_frame *mpa_frame,
-               struct nes_cm_node *cm_node)
+static int mini_cm_reject(struct nes_cm_core *cm_core,
+                         struct ietf_mpa_frame *mpa_frame,
+                         struct nes_cm_node *cm_node)
 {
        int ret = 0;
        struct sk_buff *skb;
@@ -1760,7 +1777,7 @@ int mini_cm_reject(struct nes_cm_core *cm_core,
 /**
  * mini_cm_close
  */
-int mini_cm_close(struct nes_cm_core *cm_core, struct nes_cm_node *cm_node)
+static int mini_cm_close(struct nes_cm_core *cm_core, struct nes_cm_node *cm_node)
 {
        int ret = 0;
 
@@ -1807,8 +1824,8 @@ int mini_cm_close(struct nes_cm_core *cm_core, struct nes_cm_node *cm_node)
  * recv_pkt - recv an ETHERNET packet, and process it through CM
  * node state machine
  */
-int mini_cm_recv_pkt(struct nes_cm_core *cm_core, struct nes_vnic *nesvnic,
-               struct sk_buff *skb)
+static int mini_cm_recv_pkt(struct nes_cm_core *cm_core, struct nes_vnic *nesvnic,
+                           struct sk_buff *skb)
 {
        struct nes_cm_node *cm_node = NULL;
        struct nes_cm_listener *listener = NULL;
@@ -1897,7 +1914,7 @@ int mini_cm_recv_pkt(struct nes_cm_core *cm_core, struct nes_vnic *nesvnic,
 /**
  * nes_cm_alloc_core - allocate a top level instance of a cm core
  */
-struct nes_cm_core *nes_cm_alloc_core(void)
+static struct nes_cm_core *nes_cm_alloc_core(void)
 {
        int i;
 
@@ -1918,7 +1935,6 @@ struct nes_cm_core *nes_cm_alloc_core(void)
        cm_core->state = NES_CM_STATE_INITED;
        cm_core->free_tx_pkt_max = NES_CM_DEFAULT_FREE_PKTS;
 
-       atomic_set(&cm_core->session_id, 0);
        atomic_set(&cm_core->events_posted, 0);
 
        /* init the packet lists */
@@ -1957,7 +1973,7 @@ struct nes_cm_core *nes_cm_alloc_core(void)
 /**
  * mini_cm_dealloc_core - deallocate a top level instance of a cm core
  */
-int mini_cm_dealloc_core(struct nes_cm_core *cm_core)
+static int mini_cm_dealloc_core(struct nes_cm_core *cm_core)
 {
        nes_debug(NES_DBG_CM, "De-Alloc CM Core (%p)\n", cm_core);
 
@@ -1982,7 +1998,7 @@ int mini_cm_dealloc_core(struct nes_cm_core *cm_core)
 /**
  * mini_cm_get
  */
-int mini_cm_get(struct nes_cm_core *cm_core)
+static int mini_cm_get(struct nes_cm_core *cm_core)
 {
        return cm_core->state;
 }
@@ -1991,7 +2007,7 @@ int mini_cm_get(struct nes_cm_core *cm_core)
 /**
  * mini_cm_set
  */
-int mini_cm_set(struct nes_cm_core *cm_core, u32 type, u32 value)
+static int mini_cm_set(struct nes_cm_core *cm_core, u32 type, u32 value)
 {
        int ret = 0;
 
@@ -2108,7 +2124,7 @@ int nes_cm_disconn(struct nes_qp *nesqp)
 /**
  * nes_disconnect_worker
  */
-void nes_disconnect_worker(struct work_struct *work)
+static void nes_disconnect_worker(struct work_struct *work)
 {
        struct nes_qp *nesqp = container_of(work, struct nes_qp, disconn_work);
 
@@ -2121,7 +2137,7 @@ void nes_disconnect_worker(struct work_struct *work)
 /**
  * nes_cm_disconn_true
  */
-int nes_cm_disconn_true(struct nes_qp *nesqp)
+static int nes_cm_disconn_true(struct nes_qp *nesqp)
 {
        unsigned long flags;
        int ret = 0;
@@ -2264,7 +2280,7 @@ int nes_cm_disconn_true(struct nes_qp *nesqp)
 /**
  * nes_disconnect
  */
-int nes_disconnect(struct nes_qp *nesqp, int abrupt)
+static int nes_disconnect(struct nes_qp *nesqp, int abrupt)
 {
        int ret = 0;
        struct nes_vnic *nesvnic;
@@ -2481,7 +2497,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
        }
        if (ret)
                printk("%s[%u] OFA CM event_handler returned, ret=%d\n",
-                               __FUNCTION__, __LINE__, ret);
+                               __func__, __LINE__, ret);
 
        return 0;
 }
@@ -2649,7 +2665,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog)
        cm_node = g_cm_core->api->listen(g_cm_core, nesvnic, &cm_info);
        if (!cm_node) {
                printk("%s[%u] Error returned from listen API call\n",
-                               __FUNCTION__, __LINE__);
+                               __func__, __LINE__);
                return -ENOMEM;
        }
 
@@ -2739,7 +2755,7 @@ int nes_cm_stop(void)
  * cm_event_connected
  * handle a connected event, setup QPs and HW
  */
-void cm_event_connected(struct nes_cm_event *event)
+static void cm_event_connected(struct nes_cm_event *event)
 {
        u64 u64temp;
        struct nes_qp *nesqp;
@@ -2863,7 +2879,7 @@ void cm_event_connected(struct nes_cm_event *event)
 
        if (ret)
                printk("%s[%u] OFA CM event_handler returned, ret=%d\n",
-                               __FUNCTION__, __LINE__, ret);
+                               __func__, __LINE__, ret);
        nes_debug(NES_DBG_CM, "Exiting connect thread for QP%u. jiffies = %lu\n",
                        nesqp->hwqp.qp_id, jiffies );
 
@@ -2876,7 +2892,7 @@ void cm_event_connected(struct nes_cm_event *event)
 /**
  * cm_event_connect_error
  */
-void cm_event_connect_error(struct nes_cm_event *event)
+static void cm_event_connect_error(struct nes_cm_event *event)
 {
        struct nes_qp *nesqp;
        struct iw_cm_id *cm_id;
@@ -2918,7 +2934,7 @@ void cm_event_connect_error(struct nes_cm_event *event)
        nes_debug(NES_DBG_CM, "OFA CM event_handler returned, ret=%d\n", ret);
        if (ret)
                printk("%s[%u] OFA CM event_handler returned, ret=%d\n",
-                               __FUNCTION__, __LINE__, ret);
+                               __func__, __LINE__, ret);
        nes_rem_ref(&nesqp->ibqp);
                cm_id->rem_ref(cm_id);
 
@@ -2929,7 +2945,7 @@ void cm_event_connect_error(struct nes_cm_event *event)
 /**
  * cm_event_reset
  */
-void cm_event_reset(struct nes_cm_event *event)
+static void cm_event_reset(struct nes_cm_event *event)
 {
        struct nes_qp *nesqp;
        struct iw_cm_id *cm_id;
@@ -2972,7 +2988,7 @@ void cm_event_reset(struct nes_cm_event *event)
 /**
  * cm_event_mpa_req
  */
-void cm_event_mpa_req(struct nes_cm_event *event)
+static void cm_event_mpa_req(struct nes_cm_event *event)
 {
        struct iw_cm_id   *cm_id;
        struct iw_cm_event cm_event;
@@ -3006,7 +3022,7 @@ void cm_event_mpa_req(struct nes_cm_event *event)
        ret = cm_id->event_handler(cm_id, &cm_event);
        if (ret)
                printk("%s[%u] OFA CM event_handler returned, ret=%d\n",
-                               __FUNCTION__, __LINE__, ret);
+                               __func__, __LINE__, ret);
 
        return;
 }
@@ -3018,7 +3034,7 @@ static void nes_cm_event_handler(struct work_struct *);
  * nes_cm_post_event
  * post an event to the cm event handler
  */
-int nes_cm_post_event(struct nes_cm_event *event)
+static int nes_cm_post_event(struct nes_cm_event *event)
 {
        atomic_inc(&event->cm_node->cm_core->events_posted);
        add_ref_cm_node(event->cm_node);