diff options
Diffstat (limited to 'drivers/infiniband/hw/amso1100')
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2.c | 37 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2.h | 9 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_ae.c | 28 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_cm.c | 16 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_intr.c | 8 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_pd.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_provider.c | 39 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_qp.c | 24 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_rnic.c | 14 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_vq.c | 6 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_wr.h | 4 | 
11 files changed, 92 insertions, 97 deletions
diff --git a/drivers/infiniband/hw/amso1100/c2.c b/drivers/infiniband/hw/amso1100/c2.c index dc85d777578..00400c352c1 100644 --- a/drivers/infiniband/hw/amso1100/c2.c +++ b/drivers/infiniband/hw/amso1100/c2.c @@ -36,6 +36,7 @@  #include <linux/netdevice.h>  #include <linux/etherdevice.h>  #include <linux/inetdevice.h> +#include <linux/interrupt.h>  #include <linux/delay.h>  #include <linux/ethtool.h>  #include <linux/mii.h> @@ -47,6 +48,7 @@  #include <linux/init.h>  #include <linux/dma-mapping.h>  #include <linux/slab.h> +#include <linux/prefetch.h>  #include <asm/io.h>  #include <asm/irq.h> @@ -798,13 +800,10 @@ static int c2_xmit_frame(struct sk_buff *skb, struct net_device *netdev)  	/* Loop thru additional data fragments and queue them */  	if (skb_shinfo(skb)->nr_frags) {  		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { -			skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; -			maplen = frag->size; -			mapaddr = -			    pci_map_page(c2dev->pcidev, frag->page, -					 frag->page_offset, maplen, -					 PCI_DMA_TODEVICE); - +			const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; +			maplen = skb_frag_size(frag); +			mapaddr = skb_frag_dma_map(&c2dev->pcidev->dev, frag, +						   0, maplen, DMA_TO_DEVICE);  			elem = elem->next;  			elem->skb = NULL;  			elem->mapaddr = mapaddr; @@ -921,8 +920,7 @@ static struct net_device *c2_devinit(struct c2_dev *c2dev,  	return netdev;  } -static int __devinit c2_probe(struct pci_dev *pcidev, -			      const struct pci_device_id *ent) +static int c2_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)  {  	int ret = 0, i;  	unsigned long reg0_start, reg0_flags, reg0_len; @@ -1084,6 +1082,7 @@ static int __devinit c2_probe(struct pci_dev *pcidev,  	/* Initialize network device */  	if ((netdev = c2_devinit(c2dev, mmio_regs)) == NULL) { +		ret = -ENOMEM;  		iounmap(mmio_regs);  		goto bail4;  	} @@ -1153,7 +1152,8 @@ static int __devinit c2_probe(struct pci_dev *pcidev,  		goto bail10;  	} -	if (c2_register_device(c2dev)) +	ret = c2_register_device(c2dev); +	if (ret)  		goto bail10;  	return 0; @@ -1192,7 +1192,7 @@ static int __devinit c2_probe(struct pci_dev *pcidev,  	return ret;  } -static void __devexit c2_remove(struct pci_dev *pcidev) +static void c2_remove(struct pci_dev *pcidev)  {  	struct c2_dev *c2dev = pci_get_drvdata(pcidev);  	struct net_device *netdev = c2dev->netdev; @@ -1237,18 +1237,7 @@ static struct pci_driver c2_pci_driver = {  	.name = DRV_NAME,  	.id_table = c2_pci_table,  	.probe = c2_probe, -	.remove = __devexit_p(c2_remove), +	.remove = c2_remove,  }; -static int __init c2_init_module(void) -{ -	return pci_register_driver(&c2_pci_driver); -} - -static void __exit c2_exit_module(void) -{ -	pci_unregister_driver(&c2_pci_driver); -} - -module_init(c2_init_module); -module_exit(c2_exit_module); +module_pci_driver(c2_pci_driver); diff --git a/drivers/infiniband/hw/amso1100/c2.h b/drivers/infiniband/hw/amso1100/c2.h index 6ae698e6877..d619d735838 100644 --- a/drivers/infiniband/hw/amso1100/c2.h +++ b/drivers/infiniband/hw/amso1100/c2.h @@ -265,7 +265,6 @@ struct c2_pd_table {  struct c2_qp_table {  	struct idr idr;  	spinlock_t lock; -	int last;  };  struct c2_element { @@ -498,16 +497,16 @@ extern int c2_post_send(struct ib_qp *ibqp, struct ib_send_wr *ib_wr,  			struct ib_send_wr **bad_wr);  extern int c2_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *ib_wr,  			   struct ib_recv_wr **bad_wr); -extern void __devinit c2_init_qp_table(struct c2_dev *c2dev); -extern void __devexit c2_cleanup_qp_table(struct c2_dev *c2dev); +extern void c2_init_qp_table(struct c2_dev *c2dev); +extern void c2_cleanup_qp_table(struct c2_dev *c2dev);  extern void c2_set_qp_state(struct c2_qp *, int);  extern struct c2_qp *c2_find_qpn(struct c2_dev *c2dev, int qpn);  /* PDs */  extern int c2_pd_alloc(struct c2_dev *c2dev, int privileged, struct c2_pd *pd);  extern void c2_pd_free(struct c2_dev *c2dev, struct c2_pd *pd); -extern int __devinit c2_init_pd_table(struct c2_dev *c2dev); -extern void __devexit c2_cleanup_pd_table(struct c2_dev *c2dev); +extern int c2_init_pd_table(struct c2_dev *c2dev); +extern void c2_cleanup_pd_table(struct c2_dev *c2dev);  /* CQs */  extern int c2_init_cq(struct c2_dev *c2dev, int entries, diff --git a/drivers/infiniband/hw/amso1100/c2_ae.c b/drivers/infiniband/hw/amso1100/c2_ae.c index 62af74295db..cedda25232b 100644 --- a/drivers/infiniband/hw/amso1100/c2_ae.c +++ b/drivers/infiniband/hw/amso1100/c2_ae.c @@ -141,7 +141,7 @@ static const char *to_qp_state_str(int state)  		return "C2_QP_STATE_ERROR";  	default:  		return "<invalid QP state>"; -	}; +	}  }  void c2_ae_event(struct c2_dev *c2dev, u32 mq_index) @@ -155,9 +155,11 @@ void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)  	enum c2_event_id event_id;  	unsigned long flags;  	int status; +	struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_event.local_addr; +	struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_event.remote_addr;  	/* -	 * retreive the message +	 * retrieve the message  	 */  	wr = c2_mq_consume(mq);  	if (!wr) @@ -206,10 +208,10 @@ void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)  		case CCAE_ACTIVE_CONNECT_RESULTS:  			res = &wr->ae.ae_active_connect_results;  			cm_event.event = IW_CM_EVENT_CONNECT_REPLY; -			cm_event.local_addr.sin_addr.s_addr = res->laddr; -			cm_event.remote_addr.sin_addr.s_addr = res->raddr; -			cm_event.local_addr.sin_port = res->lport; -			cm_event.remote_addr.sin_port =	res->rport; +			laddr->sin_addr.s_addr = res->laddr; +			raddr->sin_addr.s_addr = res->raddr; +			laddr->sin_port = res->lport; +			raddr->sin_port = res->rport;  			if (status == 0) {  				cm_event.private_data_len =  					be32_to_cpu(res->private_data_length); @@ -281,13 +283,18 @@ void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)  		}  		cm_event.event = IW_CM_EVENT_CONNECT_REQUEST;  		cm_event.provider_data = (void*)(unsigned long)req->cr_handle; -		cm_event.local_addr.sin_addr.s_addr = req->laddr; -		cm_event.remote_addr.sin_addr.s_addr = req->raddr; -		cm_event.local_addr.sin_port = req->lport; -		cm_event.remote_addr.sin_port = req->rport; +		laddr->sin_addr.s_addr = req->laddr; +		raddr->sin_addr.s_addr = req->raddr; +		laddr->sin_port = req->lport; +		raddr->sin_port = req->rport;  		cm_event.private_data_len =  			be32_to_cpu(req->private_data_length);  		cm_event.private_data = req->private_data; +		/* +		 * Until ird/ord negotiation via MPAv2 support is added, send +		 * max supported values +		 */ +		cm_event.ird = cm_event.ord = 128;  		if (cm_id->event_handler)  			cm_id->event_handler(cm_id, &cm_event); @@ -306,6 +313,7 @@ void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)  		if (cq->ibcq.event_handler)  			cq->ibcq.event_handler(&ib_event,  					       cq->ibcq.cq_context); +		break;  	}  	default: diff --git a/drivers/infiniband/hw/amso1100/c2_cm.c b/drivers/infiniband/hw/amso1100/c2_cm.c index 95f58ab1e0b..23bfa94fbd4 100644 --- a/drivers/infiniband/hw/amso1100/c2_cm.c +++ b/drivers/infiniband/hw/amso1100/c2_cm.c @@ -46,6 +46,10 @@ int c2_llp_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param)  	struct c2wr_qp_connect_req *wr;	/* variable size needs a malloc. */  	struct c2_vq_req *vq_req;  	int err; +	struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->remote_addr; + +	if (cm_id->remote_addr.ss_family != AF_INET) +		return -ENOSYS;  	ibqp = c2_get_qp(cm_id->device, iw_param->qpn);  	if (!ibqp) @@ -91,8 +95,8 @@ int c2_llp_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param)  	wr->rnic_handle = c2dev->adapter_handle;  	wr->qp_handle = qp->adapter_handle; -	wr->remote_addr = cm_id->remote_addr.sin_addr.s_addr; -	wr->remote_port = cm_id->remote_addr.sin_port; +	wr->remote_addr = raddr->sin_addr.s_addr; +	wr->remote_port = raddr->sin_port;  	/*  	 * Move any private data from the callers's buf into @@ -135,6 +139,10 @@ int c2_llp_service_create(struct iw_cm_id *cm_id, int backlog)  	struct c2wr_ep_listen_create_rep *reply;  	struct c2_vq_req *vq_req;  	int err; +	struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->local_addr; + +	if (cm_id->local_addr.ss_family != AF_INET) +		return -ENOSYS;  	c2dev = to_c2dev(cm_id->device);  	if (c2dev == NULL) @@ -153,8 +161,8 @@ int c2_llp_service_create(struct iw_cm_id *cm_id, int backlog)  	c2_wr_set_id(&wr, CCWR_EP_LISTEN_CREATE);  	wr.hdr.context = (u64) (unsigned long) vq_req;  	wr.rnic_handle = c2dev->adapter_handle; -	wr.local_addr = cm_id->local_addr.sin_addr.s_addr; -	wr.local_port = cm_id->local_addr.sin_port; +	wr.local_addr = laddr->sin_addr.s_addr; +	wr.local_port = laddr->sin_port;  	wr.backlog = cpu_to_be32(backlog);  	wr.user_context = (u64) (unsigned long) cm_id; diff --git a/drivers/infiniband/hw/amso1100/c2_intr.c b/drivers/infiniband/hw/amso1100/c2_intr.c index 0ebe4e806b8..3a17d9b36db 100644 --- a/drivers/infiniband/hw/amso1100/c2_intr.c +++ b/drivers/infiniband/hw/amso1100/c2_intr.c @@ -169,7 +169,8 @@ static void handle_vq(struct c2_dev *c2dev, u32 mq_index)  		 * We should never get here, as the adapter should  		 * never send us a reply that we're not expecting.  		 */ -		vq_repbuf_free(c2dev, host_msg); +		if (reply_msg != NULL) +			vq_repbuf_free(c2dev, host_msg);  		pr_debug("handle_vq: UNEXPECTEDLY got NULL req\n");  		return;  	} @@ -183,6 +184,11 @@ static void handle_vq(struct c2_dev *c2dev, u32 mq_index)  	case IW_CM_EVENT_ESTABLISHED:  		c2_set_qp_state(req->qp,  				C2_QP_STATE_RTS); +		/* +		 * Until ird/ord negotiation via MPAv2 support is added, send +		 * max supported values +		 */ +		cm_event.ird = cm_event.ord = 128;  	case IW_CM_EVENT_CLOSE:  		/* diff --git a/drivers/infiniband/hw/amso1100/c2_pd.c b/drivers/infiniband/hw/amso1100/c2_pd.c index 161f2a28535..f3e81dc357b 100644 --- a/drivers/infiniband/hw/amso1100/c2_pd.c +++ b/drivers/infiniband/hw/amso1100/c2_pd.c @@ -70,7 +70,7 @@ void c2_pd_free(struct c2_dev *c2dev, struct c2_pd *pd)  	spin_unlock(&c2dev->pd_table.lock);  } -int __devinit c2_init_pd_table(struct c2_dev *c2dev) +int c2_init_pd_table(struct c2_dev *c2dev)  {  	c2dev->pd_table.last = 0; @@ -84,7 +84,7 @@ int __devinit c2_init_pd_table(struct c2_dev *c2dev)  	return 0;  } -void __devexit c2_cleanup_pd_table(struct c2_dev *c2dev) +void c2_cleanup_pd_table(struct c2_dev *c2dev)  {  	kfree(c2dev->pd_table.table);  } diff --git a/drivers/infiniband/hw/amso1100/c2_provider.c b/drivers/infiniband/hw/amso1100/c2_provider.c index aeebc4d37e3..8af33cf1fc4 100644 --- a/drivers/infiniband/hw/amso1100/c2_provider.c +++ b/drivers/infiniband/hw/amso1100/c2_provider.c @@ -94,19 +94,11 @@ static int c2_query_port(struct ib_device *ibdev,  	props->pkey_tbl_len = 1;  	props->qkey_viol_cntr = 0;  	props->active_width = 1; -	props->active_speed = 1; +	props->active_speed = IB_SPEED_SDR;  	return 0;  } -static int c2_modify_port(struct ib_device *ibdev, -			  u8 port, int port_modify_mask, -			  struct ib_port_modify *props) -{ -	pr_debug("%s:%u\n", __func__, __LINE__); -	return 0; -} -  static int c2_query_pkey(struct ib_device *ibdev,  			 u8 port, u16 index, u16 * pkey)  { @@ -439,9 +431,9 @@ static struct ib_mr *c2_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,  	u64 *pages;  	u64 kva = 0;  	int shift, n, len; -	int i, j, k; +	int i, k, entry;  	int err = 0; -	struct ib_umem_chunk *chunk; +	struct scatterlist *sg;  	struct c2_pd *c2pd = to_c2pd(pd);  	struct c2_mr *c2mr; @@ -460,10 +452,7 @@ static struct ib_mr *c2_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,  	}  	shift = ffs(c2mr->umem->page_size) - 1; - -	n = 0; -	list_for_each_entry(chunk, &c2mr->umem->chunk_list, list) -		n += chunk->nents; +	n = c2mr->umem->nmap;  	pages = kmalloc(n * sizeof(u64), GFP_KERNEL);  	if (!pages) { @@ -472,14 +461,12 @@ static struct ib_mr *c2_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,  	}  	i = 0; -	list_for_each_entry(chunk, &c2mr->umem->chunk_list, list) { -		for (j = 0; j < chunk->nmap; ++j) { -			len = sg_dma_len(&chunk->page_list[j]) >> shift; -			for (k = 0; k < len; ++k) { -				pages[i++] = -					sg_dma_address(&chunk->page_list[j]) + -					(c2mr->umem->page_size * k); -			} +	for_each_sg(c2mr->umem->sg_head.sgl, sg, c2mr->umem->nmap, entry) { +		len = sg_dma_len(sg) >> shift; +		for (k = 0; k < len; ++k) { +			pages[i++] = +				sg_dma_address(sg) + +				(c2mr->umem->page_size * k);  		}  	} @@ -761,10 +748,7 @@ static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)  	memcpy_fromio(netdev->dev_addr, c2dev->kva + C2_REGS_RDMA_ENADDR, 6);  	/* Print out the MAC address */ -	pr_debug("%s: MAC %02X:%02X:%02X:%02X:%02X:%02X\n", -		netdev->name, -		netdev->dev_addr[0], netdev->dev_addr[1], netdev->dev_addr[2], -		netdev->dev_addr[3], netdev->dev_addr[4], netdev->dev_addr[5]); +	pr_debug("%s: MAC %pM\n", netdev->name, netdev->dev_addr);  #if 0  	/* Disable network packets */ @@ -817,7 +801,6 @@ int c2_register_device(struct c2_dev *dev)  	dev->ibdev.dma_device = &dev->pcidev->dev;  	dev->ibdev.query_device = c2_query_device;  	dev->ibdev.query_port = c2_query_port; -	dev->ibdev.modify_port = c2_modify_port;  	dev->ibdev.query_pkey = c2_query_pkey;  	dev->ibdev.query_gid = c2_query_gid;  	dev->ibdev.alloc_ucontext = c2_alloc_ucontext; diff --git a/drivers/infiniband/hw/amso1100/c2_qp.c b/drivers/infiniband/hw/amso1100/c2_qp.c index d8f4bb8bf42..86708dee58b 100644 --- a/drivers/infiniband/hw/amso1100/c2_qp.c +++ b/drivers/infiniband/hw/amso1100/c2_qp.c @@ -382,14 +382,16 @@ static int c2_alloc_qpn(struct c2_dev *c2dev, struct c2_qp *qp)  {  	int ret; -        do { -		spin_lock_irq(&c2dev->qp_table.lock); -		ret = idr_get_new_above(&c2dev->qp_table.idr, qp, -					c2dev->qp_table.last++, &qp->qpn); -		spin_unlock_irq(&c2dev->qp_table.lock); -        } while ((ret == -EAGAIN) && -	 	 idr_pre_get(&c2dev->qp_table.idr, GFP_KERNEL)); -	return ret; +	idr_preload(GFP_KERNEL); +	spin_lock_irq(&c2dev->qp_table.lock); + +	ret = idr_alloc_cyclic(&c2dev->qp_table.idr, qp, 0, 0, GFP_NOWAIT); +	if (ret >= 0) +		qp->qpn = ret; + +	spin_unlock_irq(&c2dev->qp_table.lock); +	idr_preload_end(); +	return ret < 0 ? ret : 0;  }  static void c2_free_qpn(struct c2_dev *c2dev, int qpn) @@ -612,7 +614,7 @@ void c2_free_qp(struct c2_dev *c2dev, struct c2_qp *qp)  	c2_unlock_cqs(send_cq, recv_cq);  	/* -	 * Destory qp in the rnic... +	 * Destroy qp in the rnic...  	 */  	destroy_qp(c2dev, qp); @@ -1010,13 +1012,13 @@ out:  	return err;  } -void __devinit c2_init_qp_table(struct c2_dev *c2dev) +void c2_init_qp_table(struct c2_dev *c2dev)  {  	spin_lock_init(&c2dev->qp_table.lock);  	idr_init(&c2dev->qp_table.idr);  } -void __devexit c2_cleanup_qp_table(struct c2_dev *c2dev) +void c2_cleanup_qp_table(struct c2_dev *c2dev)  {  	idr_destroy(&c2dev->qp_table.idr);  } diff --git a/drivers/infiniband/hw/amso1100/c2_rnic.c b/drivers/infiniband/hw/amso1100/c2_rnic.c index 85cfae4cad7..d2a6d961344 100644 --- a/drivers/infiniband/hw/amso1100/c2_rnic.c +++ b/drivers/infiniband/hw/amso1100/c2_rnic.c @@ -439,10 +439,10 @@ static int c2_rnic_close(struct c2_dev *c2dev)  /*   * Called by c2_probe to initialize the RNIC. This principally - * involves initalizing the various limits and resouce pools that + * involves initializing the various limits and resource pools that   * comprise the RNIC instance.   */ -int __devinit c2_rnic_init(struct c2_dev *c2dev) +int c2_rnic_init(struct c2_dev *c2dev)  {  	int err;  	u32 qsize, msgsize; @@ -459,13 +459,12 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev)  	     IB_DEVICE_MEM_WINDOW);  	/* Allocate the qptr_array */ -	c2dev->qptr_array = vmalloc(C2_MAX_CQS * sizeof(void *)); +	c2dev->qptr_array = vzalloc(C2_MAX_CQS * sizeof(void *));  	if (!c2dev->qptr_array) {  		return -ENOMEM;  	} -	/* Inialize the qptr_array */ -	memset(c2dev->qptr_array, 0, C2_MAX_CQS * sizeof(void *)); +	/* Initialize the qptr_array */  	c2dev->qptr_array[0] = (void *) &c2dev->req_vq;  	c2dev->qptr_array[1] = (void *) &c2dev->rep_vq;  	c2dev->qptr_array[2] = (void *) &c2dev->aeq; @@ -577,7 +576,8 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev)  		goto bail4;  	/* Initialize cached the adapter limits */ -	if (c2_rnic_query(c2dev, &c2dev->props)) +	err = c2_rnic_query(c2dev, &c2dev->props); +	if (err)  		goto bail5;  	/* Initialize the PD pool */ @@ -612,7 +612,7 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev)  /*   * Called by c2_remove to cleanup the RNIC resources.   */ -void __devexit c2_rnic_term(struct c2_dev *c2dev) +void c2_rnic_term(struct c2_dev *c2dev)  {  	/* Close the open adapter instance */ diff --git a/drivers/infiniband/hw/amso1100/c2_vq.c b/drivers/infiniband/hw/amso1100/c2_vq.c index 9ce7819b7b2..2ec716fb2ed 100644 --- a/drivers/infiniband/hw/amso1100/c2_vq.c +++ b/drivers/infiniband/hw/amso1100/c2_vq.c @@ -107,7 +107,7 @@ struct c2_vq_req *vq_req_alloc(struct c2_dev *c2dev)  	r = kmalloc(sizeof(struct c2_vq_req), GFP_KERNEL);  	if (r) {  		init_waitqueue_head(&r->wait_object); -		r->reply_msg = (u64) NULL; +		r->reply_msg = 0;  		r->event = 0;  		r->cm_id = NULL;  		r->qp = NULL; @@ -123,7 +123,7 @@ struct c2_vq_req *vq_req_alloc(struct c2_dev *c2dev)   */  void vq_req_free(struct c2_dev *c2dev, struct c2_vq_req *r)  { -	r->reply_msg = (u64) NULL; +	r->reply_msg = 0;  	if (atomic_dec_and_test(&r->refcnt)) {  		kfree(r);  	} @@ -151,7 +151,7 @@ void vq_req_get(struct c2_dev *c2dev, struct c2_vq_req *r)  void vq_req_put(struct c2_dev *c2dev, struct c2_vq_req *r)  {  	if (atomic_dec_and_test(&r->refcnt)) { -		if (r->reply_msg != (u64) NULL) +		if (r->reply_msg != 0)  			vq_repbuf_free(c2dev,  				       (void *) (unsigned long) r->reply_msg);  		kfree(r); diff --git a/drivers/infiniband/hw/amso1100/c2_wr.h b/drivers/infiniband/hw/amso1100/c2_wr.h index c65fbdd6e46..8d4b4ca463c 100644 --- a/drivers/infiniband/hw/amso1100/c2_wr.h +++ b/drivers/infiniband/hw/amso1100/c2_wr.h @@ -131,7 +131,7 @@ enum c2wr_ids {  	 *          All the preceding IDs are fixed, and must not change.  	 *          You can add new IDs, but must not remove or reorder  	 *          any IDs. If you do, YOU will ruin any hope of -	 *          compatability between versions. +	 *          compatibility between versions.  	 */  	CCWR_LAST, @@ -242,7 +242,7 @@ enum c2_acf {  /*   *  to fix bug 1815 we define the max size allowable of the   *  terminate message (per the IETF spec).Refer to the IETF - *  protocal specification, section 12.1.6, page 64) + *  protocol specification, section 12.1.6, page 64)   *  The message is prefixed by 20 types of DDP info.   *   *  Then the message has 6 bytes for the terminate control  | 
