Re: [PATCH v4 06/13] SIW application interface

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



-----"Jason Gunthorpe" <jgg@xxxxxxxx> wrote: -----

>To: bmt@xxxxxxxxxxxxxx
>From: "Jason Gunthorpe" <jgg@xxxxxxxx>
>Date: 01/30/2019 11:41PM
>Cc: linux-rdma@xxxxxxxxxxxxxxx
>Subject: Re: [PATCH v4 06/13] SIW application interface
>
>On Wed, Jan 30, 2019 at 06:21:29PM +0100, bmt@xxxxxxxxxxxxxx wrote:
>
>> diff --git a/include/uapi/rdma/siw_user.h
>b/include/uapi/rdma/siw_user.h
>> new file mode 100644
>> index 000000000000..25d1005a0b20
>> +++ b/include/uapi/rdma/siw_user.h
>> @@ -0,0 +1,216 @@
>> +/*
>> + * Software iWARP device driver for Linux
>> + *
>> + * Authors: Bernard Metzler <bmt@xxxxxxxxxxxxxx>
>> + *
>> + * Copyright (c) 2008-2017, IBM Corporation
>> + *
>> + * This software is available to you under a choice of one of two
>> + * licenses. You may choose to be licensed under the terms of the
>GNU
>> + * General Public License (GPL) Version 2, available from the file
>> + * COPYING in the main directory of this source tree, or the
>> + * BSD license below:
>> + *
>> + *   Redistribution and use in source and binary forms, with or
>> + *   without modification, are permitted provided that the
>following
>> + *   conditions are met:
>> + *
>> + *   - Redistributions of source code must retain the above
>copyright notice,
>> + *     this list of conditions and the following disclaimer.
>> + *
>> + *   - Redistributions in binary form must reproduce the above
>copyright
>> + *     notice, this list of conditions and the following
>disclaimer in the
>> + *     documentation and/or other materials provided with the
>distribution.
>> + *
>> + *   - Neither the name of IBM nor the names of its contributors
>may be
>> + *     used to endorse or promote products derived from this
>software without
>> + *     specific prior written permission.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
>OF
>> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
>HOLDERS
>> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
>AN
>> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
>IN
>> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
>THE
>> + * SOFTWARE.
>> + */
>
>I think this is the wrong license for uapi stuff - follow the SPDX
>headers from the other files please

Okay thanks.


>
>> +
>> +#ifndef _SIW_USER_H
>> +#define _SIW_USER_H
>> +
>> +#include <linux/types.h>
>> +
>> +/*Common string that is matched to accept the device by the user
>library*/
>> +#define SIW_NODE_DESC_COMMON	"Software iWARP stack"
>> +
>> +#define SIW_IBDEV_PREFIX "siw_"
>> +
>> +#define VERSION_ID_SOFTIWARP	2
>> +
>> +#define SIW_MAX_SGE		6
>> +#define SIW_MAX_UOBJ_KEY	0xffffff
>> +#define SIW_INVAL_UOBJ_KEY	(SIW_MAX_UOBJ_KEY + 1)
>> +
>> +struct siw_uresp_create_cq {
>> +	__u32	cq_id;
>> +	__u32	num_cqe;
>> +	__u32	cq_key;
>> +};
>
>All command structs should be a multiple of 8 bytes.. Otherwise they
>cannot be used on the _ex interface side.
>

Thanks,
will do.

>> +
>> +struct siw_uresp_create_qp {
>> +	__u32	qp_id;
>> +	__u32	num_sqe;
>> +	__u32	num_rqe;
>> +	__u32	sq_key;
>> +	__u32	rq_key;
>> +};
>> +
>> +struct siw_ureq_reg_mr {
>> +	__u8	stag_key;
>> +	__u8	reserved[3];
>> +};
>> +
>> +struct siw_uresp_reg_mr {
>> +	__u32	stag;
>> +};
>> +
>> +struct siw_uresp_create_srq {
>> +	__u32	num_rqe;
>> +	__u32	srq_key;
>> +};
>> +
>> +struct siw_uresp_alloc_ctx {
>> +	__u32	dev_id;
>> +};
>> +
>> +enum siw_opcode {
>> +	SIW_OP_WRITE		= 0,
>> +	SIW_OP_READ		= 1,
>> +	SIW_OP_READ_LOCAL_INV	= 2,
>> +	SIW_OP_SEND		= 3,
>> +	SIW_OP_SEND_WITH_IMM	= 4,
>> +	SIW_OP_SEND_REMOTE_INV	= 5,
>> +
>> +	/* Unsupported */
>> +	SIW_OP_FETCH_AND_ADD	= 6,
>> +	SIW_OP_COMP_AND_SWAP	= 7,
>> +
>> +	SIW_OP_RECEIVE		= 8,
>> +	/* provider internal SQE */
>> +	SIW_OP_READ_RESPONSE	= 9,
>> +	/*
>> +	 * below opcodes valid for
>> +	 * in-kernel clients only
>> +	 */
>> +	SIW_OP_INVAL_STAG	= 10,
>> +	SIW_OP_REG_MR		= 11,
>> +	SIW_NUM_OPCODES		= 12
>> +};
>> +
>> +/* Keep it same as ibv_sge to allow for memcpy */
>> +struct siw_sge {
>> +	__u64	laddr;
>
>__aligned_u64 in all places
>

OK.

>> +struct siw_cqe {
>> +	__u64	id;
>> +	__u8	flags;
>> +	__u8	opcode;
>> +	__u16	status;
>> +	__u32	bytes;
>> +	__u64	imm_data;
>> +	/* QP number or QP pointer */
>> +	union {
>> +		void	*qp;
>> +		__u64	qp_id;
>
>void * in this header is almost certainly wrong

Depending on application location (user/kernel),
we keep the QP identity of that CQE here. User land
gets a unique QP number in the WC, Kernel user get a 
pointer to the QP.

Would that be OK/better?

struct siw_qp;

struct siw_cqe {
        __aligned_u64   id;
        __u8            flags;
        __u8            opcode;
        __u16           status;
        __u32           bytes;
        __aligned_u64   imm_data;
        /* QP number or QP pointer */
        union {
                struct siw_qp   *qp;
                __aligned_u64   qp_id;
        };
};      


>
>> +	};
>> +};
>> +
>> +/*
>> + * Shared structure between user and kernel
>> + * to control CQ arming.
>> + */
>> +struct siw_cq_ctrl {
>> +	enum siw_notify_flags	notify;
>
>Do not use 'enum' in any of these structs. Only fixed size memory.
>
Right. Will fix that.

>Is this shared memory?
>
Yes, it is shared between provider and user land library
in case of user land app. This avoids trapping into the kernel
for CQ re-arming.


Thanks!
Bernard.




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux