[openib-general] [PATCH] RFC Verbs: add support for transport specific verbs

Steve Wise swise at opengridcomputing.com
Tue Feb 28 19:30:15 PST 2006


Aren't attach_mcast and detach_mcast also ib-specific?

On Tue, 2006-02-28 at 11:06 -0800, Sean Hefty wrote:
> Add support for transport specific extensions to the ib_device verbs.
> Relocate process_mad as an IB specific verb.
> 
> This provides a mechanism to add iWarp specific functionality, such as
> the iWarp CM calls, to ib_device.
> 
> Signed-off-by: Sean Hefty <sean.hefty at intel.com>
> 
> ---
> 
> Index: include/rdma/ib_verbs.h
> ===================================================================
> --- include/rdma/ib_verbs.h	(revision 5532)
> +++ include/rdma/ib_verbs.h	(working copy)
> @@ -824,6 +824,16 @@ struct ib_cache {
>  	struct ib_gid_cache   **gid_cache;
>  };
>  
> +struct ib_verbs {
> +	int                        (*process_mad)(struct ib_device *device,
> +						  int process_mad_flags,
> +						  u8 port_num,
> +						  struct ib_wc *in_wc,
> +						  struct ib_grh *in_grh,
> +						  struct ib_mad *in_mad,
> +						  struct ib_mad *out_mad);
> +};
> +
>  struct ib_device {
>  	struct device                *dma_device;
>  
> @@ -954,13 +964,10 @@ struct ib_device {
>  	int                        (*detach_mcast)(struct ib_qp *qp,
>  						   union ib_gid *gid,
>  						   u16 lid);
> -	int                        (*process_mad)(struct ib_device *device,
> -						  int process_mad_flags,
> -						  u8 port_num,
> -						  struct ib_wc *in_wc,
> -						  struct ib_grh *in_grh,
> -						  struct ib_mad *in_mad,
> -						  struct ib_mad *out_mad);
> +
> +	union {
> +		struct ib_verbs     ib;
> +	} ext_verbs;
>  
>  	struct module               *owner;
>  	struct class_device          class_dev;
> Index: core/mad.c
> ===================================================================
> --- core/mad.c	(revision 5532)
> +++ core/mad.c	(working copy)
> @@ -704,9 +704,9 @@ static int handle_outgoing_dr_smp(struct
>  		     send_wr->wr.ud.port_num, &mad_wc);
>  
>  	/* No GRH for DR SMP */
> -	ret = device->process_mad(device, 0, port_num, &mad_wc, NULL,
> -				  (struct ib_mad *)smp,
> -				  (struct ib_mad *)&mad_priv->mad);
> +	ret = device->ext_verbs.ib.process_mad(device, 0, port_num, &mad_wc,
> +					       NULL, (struct ib_mad *)smp,
> +					       (struct ib_mad *)&mad_priv->mad);
>  	switch (ret)
>  	{
>  	case IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_REPLY:
> @@ -1787,7 +1787,7 @@ static void ib_mad_recv_done_handler(str
>  
>  local:
>  	/* Give driver "right of first refusal" on incoming MAD */
> -	if (port_priv->device->process_mad) {
> +	if (port_priv->device->ext_verbs.ib.process_mad) {
>  		int ret;
>  
>  		if (!response) {
> @@ -1799,11 +1799,11 @@ local:
>  			goto out;
>  		}
>  
> -		ret = port_priv->device->process_mad(port_priv->device, 0,
> -						     port_priv->port_num,
> -						     wc, &recv->grh,
> -						     &recv->mad.mad,
> -						     &response->mad.mad);
> +		ret = port_priv->device->
> +		      ext_verbs.ib.process_mad(port_priv->device, 0,
> +					       port_priv->port_num, wc,
> +					       &recv->grh, &recv->mad.mad,
> +					       &response->mad.mad);
>  		if (ret & IB_MAD_RESULT_SUCCESS) {
>  			if (ret & IB_MAD_RESULT_CONSUMED)
>  				goto out;
> Index: core/sysfs.c
> ===================================================================
> --- core/sysfs.c	(revision 5532)
> +++ core/sysfs.c	(working copy)
> @@ -311,7 +311,7 @@ static ssize_t show_pma_counter(struct i
>  	struct ib_mad *out_mad = NULL;
>  	ssize_t ret;
>  
> -	if (!p->ibdev->process_mad)
> +	if (!p->ibdev->ext_verbs.ib.process_mad)
>  		return sprintf(buf, "N/A (no PMA)\n");
>  
>  	in_mad  = kzalloc(sizeof *in_mad, GFP_KERNEL);
> @@ -329,7 +329,7 @@ static ssize_t show_pma_counter(struct i
>  
>  	in_mad->data[41] = p->port_num;	/* PortSelect field */
>  
> -	if ((p->ibdev->process_mad(p->ibdev, IB_MAD_IGNORE_MKEY,
> +	if ((p->ibdev->ext_verbs.ib.process_mad(p->ibdev, IB_MAD_IGNORE_MKEY,
>  		 p->port_num, NULL, NULL, in_mad, out_mad) &
>  	     (IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_REPLY)) !=
>  	    (IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_REPLY)) {
> Index: core/smi.h
> ===================================================================
> --- core/smi.h	(revision 5532)
> +++ core/smi.h	(working copy)
> @@ -58,7 +58,7 @@ static inline int smi_check_local_smp(st
>  {
>  	/* C14-9:3 -- We're at the end of the DR segment of path */
>  	/* C14-9:4 -- Hop Pointer = Hop Count + 1 -> give to SMA/SM */
> -	return ((device->process_mad &&
> +	return ((device->ext_verbs.ib.process_mad &&
>  		!ib_get_smp_direction(smp) &&
>  		(smp->hop_ptr == smp->hop_cnt + 1)));
>  }
> Index: hw/ipath/ipath_verbs.c
> ===================================================================
> --- hw/ipath/ipath_verbs.c	(revision 5532)
> +++ hw/ipath/ipath_verbs.c	(working copy)
> @@ -5949,7 +5949,7 @@ static int ipath_register_ib_device(cons
>  	dev->dealloc_fmr = ipath_dealloc_fmr;
>  	dev->attach_mcast = ipath_multicast_attach;
>  	dev->detach_mcast = ipath_multicast_detach;
> -	dev->process_mad = ipath_process_mad;
> +	dev->ext_verbs.ib.process_mad = ipath_process_mad;
>  
>  	ret = ib_register_device(dev);
>  	if (ret)
> Index: hw/mthca/mthca_provider.c
> ===================================================================
> --- hw/mthca/mthca_provider.c	(revision 5532)
> +++ hw/mthca/mthca_provider.c	(working copy)
> @@ -1329,7 +1329,7 @@ int mthca_register_device(struct mthca_d
>  
>  	dev->ib_dev.attach_mcast         = mthca_multicast_attach;
>  	dev->ib_dev.detach_mcast         = mthca_multicast_detach;
> -	dev->ib_dev.process_mad          = mthca_process_mad;
> +	dev->ib_dev.ext_verbs.ib.process_mad	 = mthca_process_mad;
>  
>  	if (mthca_is_memfree(dev)) {
>  		dev->ib_dev.req_notify_cq = mthca_arbel_arm_cq;
> 
> 
> 
> _______________________________________________
> openib-general mailing list
> openib-general at openib.org
> http://openib.org/mailman/listinfo/openib-general
> 
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general




More information about the general mailing list