mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	IB/uverbs: Enable QP creation with a given source QP number
Enable QP creation with a given source QP number, the created QP will use the source QPN as its wire QP number. To create such a QP, root privileges (i.e. CAP_NET_RAW) are required from the user application. This comes as a pre-patch for downstream patches in this series to allow user space applications to accelerate traffic which is typically handled by IPoIB ULP. Signed-off-by: Yishai Hadas <yishaih@mellanox.com> Reviewed-by: Maor Gottlieb <maorg@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
		
							parent
							
								
									02984cc7b3
								
							
						
					
					
						commit
						2dee0e5458
					
				
					 2 changed files with 15 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -1383,8 +1383,9 @@ static int create_qp(struct ib_uverbs_file *file,
 | 
			
		|||
		attr.rwq_ind_tbl = ind_tbl;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((cmd_sz >= offsetof(typeof(*cmd), reserved1) +
 | 
			
		||||
		       sizeof(cmd->reserved1)) && cmd->reserved1) {
 | 
			
		||||
	if (cmd_sz > sizeof(*cmd) &&
 | 
			
		||||
	    !ib_is_udata_cleared(ucore, sizeof(*cmd),
 | 
			
		||||
				 cmd_sz - sizeof(*cmd))) {
 | 
			
		||||
		ret = -EOPNOTSUPP;
 | 
			
		||||
		goto err_put;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1482,11 +1483,21 @@ static int create_qp(struct ib_uverbs_file *file,
 | 
			
		|||
				IB_QP_CREATE_MANAGED_SEND |
 | 
			
		||||
				IB_QP_CREATE_MANAGED_RECV |
 | 
			
		||||
				IB_QP_CREATE_SCATTER_FCS |
 | 
			
		||||
				IB_QP_CREATE_CVLAN_STRIPPING)) {
 | 
			
		||||
				IB_QP_CREATE_CVLAN_STRIPPING |
 | 
			
		||||
				IB_QP_CREATE_SOURCE_QPN)) {
 | 
			
		||||
		ret = -EINVAL;
 | 
			
		||||
		goto err_put;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (attr.create_flags & IB_QP_CREATE_SOURCE_QPN) {
 | 
			
		||||
		if (!capable(CAP_NET_RAW)) {
 | 
			
		||||
			ret = -EPERM;
 | 
			
		||||
			goto err_put;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		attr.source_qpn = cmd->source_qpn;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	buf = (void *)cmd + sizeof(*cmd);
 | 
			
		||||
	if (cmd_sz > sizeof(*cmd))
 | 
			
		||||
		if (!(buf[0] == 0 && !memcmp(buf, buf + 1,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -578,7 +578,7 @@ struct ib_uverbs_ex_create_qp {
 | 
			
		|||
	__u32 comp_mask;
 | 
			
		||||
	__u32 create_flags;
 | 
			
		||||
	__u32 rwq_ind_tbl_handle;
 | 
			
		||||
	__u32  reserved1;
 | 
			
		||||
	__u32  source_qpn;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ib_uverbs_open_qp {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue