components/open-fabrics/libibverbs/patches/base.patch
changeset 1566 d1c87d1ecd13
parent 1399 8f4b38fe52ad
child 2187 391c8a50fa82
equal deleted inserted replaced
1565:0521ea8ab0da 1566:d1c87d1ecd13
   529  
   529  
   530  /*
   530  /*
   531 diff -r -u /tmp/846623/libibverbs-1.1.4/src/verbs.c libibverbs-1.1.4/src/verbs.c
   531 diff -r -u /tmp/846623/libibverbs-1.1.4/src/verbs.c libibverbs-1.1.4/src/verbs.c
   532 --- /tmp/846623/libibverbs-1.1.4/src/verbs.c	Thu Feb  3 01:53:17 2011
   532 --- /tmp/846623/libibverbs-1.1.4/src/verbs.c	Thu Feb  3 01:53:17 2011
   533 +++ libibverbs-1.1.4/src/verbs.c	Fri Feb 11 04:02:33 2011
   533 +++ libibverbs-1.1.4/src/verbs.c	Fri Feb 11 04:02:33 2011
   534 @@ -41,6 +41,11 @@
   534 @@ -41,9 +41,24 @@
   535  #include <stdlib.h>
   535  #include <stdlib.h>
   536  #include <errno.h>
   536  #include <errno.h>
   537  #include <string.h>
   537  #include <string.h>
   538 +#if defined(__SVR4) && defined(__sun)
   538 +#if defined(__SVR4) && defined(__sun)
   539 +#include <fcntl.h>
   539 +#include <fcntl.h>
   541 +#include <sys/mkdev.h>
   541 +#include <sys/mkdev.h>
   542 +#endif
   542 +#endif
   543  
   543  
   544  #include "ibverbs.h"
   544  #include "ibverbs.h"
   545  
   545  
   546 @@ -93,6 +98,12 @@
   546 +#define	IBV_IS_VALID_UGID(gid)	\
       
   547 +	(gid->raw[0] != 0xff)
       
   548 +
       
   549 +#define	IBV_IS_VALID_MGID(gid)					\
       
   550 +	((gids->raw[0] == 0xff) &&				\
       
   551 +	((gids->raw[1] == 0x0e) || (gids->raw[1] == 0x02) ||	\
       
   552 +	(gids->raw[1] == 0x05)  || (gids->raw[1] == 0x08) ||	\
       
   553 +	(gids->raw[1] == 0x1e)  || (gids->raw[1] == 0x12) ||	\
       
   554 +	(gids->raw[1] == 0x15)  || (gids->raw[1] == 0x18)))
       
   555 +
       
   556  int ibv_rate_to_mult(enum ibv_rate rate)
       
   557  {
       
   558  	switch (rate) {
       
   559 @@ -93,6 +108,12 @@
   547  int __ibv_query_gid(struct ibv_context *context, uint8_t port_num,
   560  int __ibv_query_gid(struct ibv_context *context, uint8_t port_num,
   548  		    int index, union ibv_gid *gid)
   561  		    int index, union ibv_gid *gid)
   549  {
   562  {
   550 +#if defined(__SVR4) && defined(__sun)
   563 +#if defined(__SVR4) && defined(__sun)
   551 +	extern int sol_ibv_query_gid();
   564 +	extern int sol_ibv_query_gid();
   554 +
   567 +
   555 +#else
   568 +#else
   556  	char name[24];
   569  	char name[24];
   557  	char attr[41];
   570  	char attr[41];
   558  	uint16_t val;
   571  	uint16_t val;
   559 @@ -112,6 +123,7 @@
   572 @@ -112,6 +133,7 @@
   560  	}
   573  	}
   561  
   574  
   562  	return 0;
   575  	return 0;
   563 +#endif
   576 +#endif
   564  }
   577  }
   565  default_symver(__ibv_query_gid, ibv_query_gid);
   578  default_symver(__ibv_query_gid, ibv_query_gid);
   566  
   579  
   567 @@ -118,6 +130,12 @@
   580 @@ -118,6 +140,12 @@
   568  int __ibv_query_pkey(struct ibv_context *context, uint8_t port_num,
   581  int __ibv_query_pkey(struct ibv_context *context, uint8_t port_num,
   569  		     int index, uint16_t *pkey)
   582  		     int index, uint16_t *pkey)
   570  {
   583  {
   571 +#if defined(__SVR4) && defined(__sun)
   584 +#if defined(__SVR4) && defined(__sun)
   572 +	extern int sol_ibv_query_pkey();
   585 +	extern int sol_ibv_query_pkey();
   575 +
   588 +
   576 +#else
   589 +#else
   577  	char name[24];
   590  	char name[24];
   578  	char attr[8];
   591  	char attr[8];
   579  	uint16_t val;
   592  	uint16_t val;
   580 @@ -133,9 +151,142 @@
   593 @@ -133,9 +161,159 @@
   581  
   594  
   582  	*pkey = htons(val);
   595  	*pkey = htons(val);
   583  	return 0;
   596  	return 0;
   584 +#endif
   597 +#endif
   585  }
   598  }
   587  
   600  
   588 +int ibv_register_sm_events(struct ibv_context *context,
   601 +int ibv_register_sm_events(struct ibv_context *context,
   589 +    ibv_sm_event_type_t event, uint_t gid_num, union ibv_gid *gids)
   602 +    ibv_sm_event_type_t event, uint_t gid_num, union ibv_gid *gids)
   590 +{
   603 +{
   591 +	struct ibv_reg_sm_event		*cmd;
   604 +	struct ibv_reg_sm_event		*cmd;
   592 +	int				rc, cmd_size, data_size;
   605 +	int				cmd_size, data_size;
   593 +	void				*data_p;
   606 +	void				*data_p;
   594 +
   607 +
   595 +	if (((gid_num > 0) && (gids == NULL)) ||
   608 +	if (((gid_num > 0) && (gids == NULL)) ||
   596 +	   ((gid_num == 0) && (gids != NULL))) {
   609 +	   ((gid_num == 0) && (gids != NULL))) {
   597 +		errno = EINVAL;
   610 +		errno = EINVAL;
   622 +	cmd_size = (sizeof (struct ibv_reg_sm_event)) + data_size;
   635 +	cmd_size = (sizeof (struct ibv_reg_sm_event)) + data_size;
   623 +	data_p = (void *)gids;
   636 +	data_p = (void *)gids;
   624 +	cmd  = alloca(cmd_size);
   637 +	cmd  = alloca(cmd_size);
   625 +	cmd->data_num = gid_num;
   638 +	cmd->data_num = gid_num;
   626 +
   639 +
       
   640 +	if ((event == IBV_SM_EVENT_UGID) && (!IBV_IS_VALID_UGID(gids))) { 
       
   641 +		errno = EINVAL;
       
   642 +		return (-1);
       
   643 +	}
       
   644 +
       
   645 +	if ((event == IBV_SM_EVENT_MGID) && (!IBV_IS_VALID_MGID(gids))) { 
       
   646 +		errno = EINVAL;
       
   647 +		return (-1);
       
   648 +	}
       
   649 +
   627 +	IBV_INIT_CMD(cmd, cmd_size, REG_SM_EVENT);
   650 +	IBV_INIT_CMD(cmd, cmd_size, REG_SM_EVENT);
   628 +
   651 +
   629 +	cmd->events = event;
   652 +	cmd->events = event;
   630 +	if (gid_num > 0)
   653 +	if (gid_num > 0)
   631 +		memcpy(cmd->driver_data, data_p, data_size);
   654 +		memcpy(cmd->driver_data, data_p, data_size);
   632 +
   655 +
   633 +	rc = write(context->cmd_fd, cmd, cmd_size);
   656 +	if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) {
   634 +	if (rc < 0) {
   657 +		errno = EINVAL;
   635 +		errno = -rc;
   658 +		return (-1);
   636 +		rc = -1;
   659 +	}
   637 +	}
   660 +
   638 +
   661 +	return (0);
   639 +	return (rc);
       
   640 +}
   662 +}
   641 +
   663 +
   642 +int ibv_unregister_sm_events(struct ibv_context *context,
   664 +int ibv_unregister_sm_events(struct ibv_context *context,
   643 +    ibv_sm_event_type_t event, uint_t gid_num, union ibv_gid *gids)
   665 +    ibv_sm_event_type_t event, uint_t gid_num, union ibv_gid *gids)
   644 +{
   666 +{
   645 +	struct ibv_unreg_sm_event	*cmd;
   667 +	struct ibv_unreg_sm_event	*cmd;
   646 +	int				rc, cmd_size, data_size;
   668 +	int				cmd_size, data_size;
   647 +	void				*data_p;
   669 +	void				*data_p;
   648 +
   670 +
   649 +	if (((gid_num > 0) && (gids == NULL)) ||
   671 +	if (((gid_num > 0) && (gids == NULL)) ||
   650 +	   ((gid_num == 0) && (gids != NULL))) {
   672 +	   ((gid_num == 0) && (gids != NULL))) {
   651 +		errno = EINVAL;
   673 +		errno = EINVAL;
   676 +	cmd_size = (sizeof (struct ibv_unreg_sm_event)) + data_size;
   698 +	cmd_size = (sizeof (struct ibv_unreg_sm_event)) + data_size;
   677 +	data_p = (void *)gids;
   699 +	data_p = (void *)gids;
   678 +	cmd  = alloca(cmd_size);
   700 +	cmd  = alloca(cmd_size);
   679 +	cmd->data_num = gid_num;
   701 +	cmd->data_num = gid_num;
   680 +
   702 +
       
   703 +	if ((event == IBV_SM_EVENT_UGID) && (!IBV_IS_VALID_UGID(gids))) { 
       
   704 +		errno = EINVAL;
       
   705 +		return (-1);
       
   706 +	}
       
   707 +
       
   708 +	if ((event == IBV_SM_EVENT_MGID) && (!IBV_IS_VALID_MGID(gids))) { 
       
   709 +		errno = EINVAL;
       
   710 +		return (-1);
       
   711 +	}
       
   712 +
   681 +	IBV_INIT_CMD(cmd, cmd_size, UNREG_SM_EVENT);
   713 +	IBV_INIT_CMD(cmd, cmd_size, UNREG_SM_EVENT);
   682 +
   714 +
   683 +	cmd->events = event;
   715 +	cmd->events = event;
   684 +	if (gid_num > 0)
   716 +	if (gid_num > 0)
   685 +		memcpy(cmd->driver_data, data_p, data_size);
   717 +		memcpy(cmd->driver_data, data_p, data_size);
   686 +
   718 +
   687 +	rc = write(context->cmd_fd, cmd, cmd_size);
   719 +	if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) {
   688 +	if (rc < 0) {
   720 +		errno = EINVAL;
   689 +		errno = -rc;
   721 +		return (-1);
   690 +		rc = -1;
   722 +	}
   691 +	}
   723 +
   692 +
   724 +	return (0);
   693 +	return (rc);
       
   694 +}
   725 +}
   695 +
   726 +
   696 +int ibv_gid_reachable(struct ibv_context *context,
   727 +int ibv_gid_reachable(struct ibv_context *context,
   697 +    uint_t port, union ibv_gid *gid_p, int timeout)
   728 +    uint_t port, union ibv_gid *gid_p, int timeout)
   698 +{
   729 +{
   708 +
   739 +
   709 +	memcpy(cmd->gid, gid_p, sizeof (*gid_p));
   740 +	memcpy(cmd->gid, gid_p, sizeof (*gid_p));
   710 +
   741 +
   711 +	rc = write(context->cmd_fd, cmd, sizeof(struct ibv_gid_reachable));
   742 +	rc = write(context->cmd_fd, cmd, sizeof(struct ibv_gid_reachable));
   712 +	if (rc < 0) {
   743 +	if (rc < 0) {
   713 +		errno = -rc;
   744 +		return (-1);
   714 +		rc = -1;
   745 +	}
   715 +	}
   746 +
   716 +
   747 +	return (0);
   717 +	return (rc);
       
   718 +}
   748 +}
   719 +
   749 +
   720  struct ibv_pd *__ibv_alloc_pd(struct ibv_context *context)
   750  struct ibv_pd *__ibv_alloc_pd(struct ibv_context *context)
   721  {
   751  {
   722  	struct ibv_pd *pd;
   752  	struct ibv_pd *pd;
   723 @@ -148,6 +299,27 @@
   753 @@ -148,6 +326,27 @@
   724  }
   754  }
   725  default_symver(__ibv_alloc_pd, ibv_alloc_pd);
   755  default_symver(__ibv_alloc_pd, ibv_alloc_pd);
   726  
   756  
   727 +struct ibv_shpd *__ibv_alloc_shpd(struct ibv_pd *pd, uint64_t share_key, struct ibv_shpd *shpd)
   757 +struct ibv_shpd *__ibv_alloc_shpd(struct ibv_pd *pd, uint64_t share_key, struct ibv_shpd *shpd)
   728 +{
   758 +{
   746 +default_symver(__ibv_share_pd, ibv_share_pd);
   776 +default_symver(__ibv_share_pd, ibv_share_pd);
   747 +
   777 +
   748  int __ibv_dealloc_pd(struct ibv_pd *pd)
   778  int __ibv_dealloc_pd(struct ibv_pd *pd)
   749  {
   779  {
   750  	return pd->context->ops.dealloc_pd(pd);
   780  	return pd->context->ops.dealloc_pd(pd);
   751 @@ -175,6 +347,27 @@
   781 @@ -175,6 +374,27 @@
   752  }
   782  }
   753  default_symver(__ibv_reg_mr, ibv_reg_mr);
   783  default_symver(__ibv_reg_mr, ibv_reg_mr);
   754  
   784  
   755 +struct ibv_mr *__ibv_reg_mr_relaxed(struct ibv_pd *pd, void *addr,
   785 +struct ibv_mr *__ibv_reg_mr_relaxed(struct ibv_pd *pd, void *addr,
   756 +			    size_t length, int access)
   786 +			    size_t length, int access)
   774 +default_symver(__ibv_reg_mr_relaxed, ibv_reg_mr_relaxed);
   804 +default_symver(__ibv_reg_mr_relaxed, ibv_reg_mr_relaxed);
   775 +
   805 +
   776  int __ibv_dereg_mr(struct ibv_mr *mr)
   806  int __ibv_dereg_mr(struct ibv_mr *mr)
   777  {
   807  {
   778  	int ret;
   808  	int ret;
   779 @@ -189,6 +382,26 @@
   809 @@ -189,6 +409,26 @@
   780  }
   810  }
   781  default_symver(__ibv_dereg_mr, ibv_dereg_mr);
   811  default_symver(__ibv_dereg_mr, ibv_dereg_mr);
   782  
   812  
   783 +int __ibv_dereg_mr_relaxed(struct ibv_mr *mr)
   813 +int __ibv_dereg_mr_relaxed(struct ibv_mr *mr)
   784 +{
   814 +{
   801 +default_symver(__ibv_flush_relaxed_mr, ibv_flush_relaxed_mr);
   831 +default_symver(__ibv_flush_relaxed_mr, ibv_flush_relaxed_mr);
   802 +
   832 +
   803  static struct ibv_comp_channel *ibv_create_comp_channel_v2(struct ibv_context *context)
   833  static struct ibv_comp_channel *ibv_create_comp_channel_v2(struct ibv_context *context)
   804  {
   834  {
   805  	struct ibv_abi_compat_v2 *t = context->abi_compat;
   835  	struct ibv_abi_compat_v2 *t = context->abi_compat;
   806 @@ -212,6 +425,10 @@
   836 @@ -212,6 +452,10 @@
   807  	struct ibv_comp_channel            *channel;
   837  	struct ibv_comp_channel            *channel;
   808  	struct ibv_create_comp_channel      cmd;
   838  	struct ibv_create_comp_channel      cmd;
   809  	struct ibv_create_comp_channel_resp resp;
   839  	struct ibv_create_comp_channel_resp resp;
   810 +#if defined(__SVR4) && defined(__sun)
   840 +#if defined(__SVR4) && defined(__sun)
   811 +	int		event_fd;
   841 +	int		event_fd;
   812 +	struct stat	fstat_buf;
   842 +	struct stat	fstat_buf;
   813 +#endif
   843 +#endif
   814  
   844  
   815  	if (abi_ver <= 2)
   845  	if (abi_ver <= 2)
   816  		return ibv_create_comp_channel_v2(context);
   846  		return ibv_create_comp_channel_v2(context);
   817 @@ -221,7 +438,23 @@
   847 @@ -221,7 +465,23 @@
   818  		return NULL;
   848  		return NULL;
   819  
   849  
   820  	IBV_INIT_CMD_RESP(&cmd, sizeof cmd, CREATE_COMP_CHANNEL, &resp, sizeof resp);
   850  	IBV_INIT_CMD_RESP(&cmd, sizeof cmd, CREATE_COMP_CHANNEL, &resp, sizeof resp);
   821 +#if defined(__SVR4) && defined(__sun)
   851 +#if defined(__SVR4) && defined(__sun)
   822 +	event_fd = open("/dev/infiniband/ofs/uverbs:event", O_RDWR);
   852 +	event_fd = open("/dev/infiniband/ofs/uverbs:event", O_RDWR);
   836 +		close(event_fd);
   866 +		close(event_fd);
   837 +#endif
   867 +#endif
   838  		free(channel);
   868  		free(channel);
   839  		return NULL;
   869  		return NULL;
   840  	}
   870  	}
   841 @@ -228,6 +461,9 @@
   871 @@ -228,6 +488,9 @@
   842  
   872  
   843  	VALGRIND_MAKE_MEM_DEFINED(&resp, sizeof resp);
   873  	VALGRIND_MAKE_MEM_DEFINED(&resp, sizeof resp);
   844  
   874  
   845 +#if defined(__SVR4) && defined(__sun)
   875 +#if defined(__SVR4) && defined(__sun)
   846 +	resp.fd = event_fd;
   876 +	resp.fd = event_fd;