mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@osdl.org>
To: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/6] iscsi_iser header file
Date: Thu, 27 Apr 2006 09:58:54 -0700	[thread overview]
Message-ID: <20060427095854.54e51fdb@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.44.0604271530400.16463-100000@zuben>

O
> +#define PFX "iser:"
> +
> +#define iser_dbg(fmt, arg...)				\
> +	do {						\
> +		if (iser_debug_level > 0)		\
> +			printk(KERN_DEBUG PFX "%s:" fmt,\
> +				__func__ , ## arg);	\
> +	} while (0)
> +
> +#define iser_err(fmt, arg...)				\
> +	do {						\
> +		printk(KERN_ERR PFX "%s:" fmt,          \
> +		       __func__ , ## arg);		\
> +	} while (0)
> +
> +#define iser_bug(fmt,arg...)				\
> +	do {						\
> +		printk(KERN_ERR PFX "%s: PANIC! " fmt,	\
> +			__func__ , ## arg);		\
> +		BUG();					\
> +	} while(0)
> +

Why? is pr_debug, BUG_ON, etc, not good enough for you.
Macro's that obfuscate things like this make global fixups harder

> +					/* support upto 512KB in one RDMA */
> +#define ISCSI_ISER_SG_TABLESIZE         (0x80000 >> PAGE_SHIFT)
> +#define ISCSI_ISER_MAX_LUN		256
> +#define ISCSI_ISER_MAX_CMD_LEN		16
> +
> +/* QP settings */
> +/* Maximal bounds on received asynchronous PDUs */
> +#define ISER_MAX_RX_MISC_PDUS		4 /* NOOP_IN(2) , ASYNC_EVENT(2)   */
> +
> +#define ISER_MAX_TX_MISC_PDUS		6 /* NOOP_OUT(2), TEXT(1),         *
> +					   * SCSI_TMFUNC(2), LOGOUT(1) */
> +
> +#define ISER_QP_MAX_RECV_DTOS		(ISCSI_XMIT_CMDS_MAX + \
> +					ISER_MAX_RX_MISC_PDUS    +  \
> +					ISER_MAX_TX_MISC_PDUS)
> +
> +/* the max TX (send) WR supported by the iSER QP is defined by                 *
> + * max_send_wr = T * (1 + D) + C ; D is how many inflight dataouts we expect   *
> + * to have at max for SCSI command. The tx posting & completion handling code  *
> + * supports -EAGAIN scheme where tx is suspended till the QP has room for more *
> + * send WR. D=8 comes from 64K/8K                                              */
> +
> +#define ISER_INFLIGHT_DATAOUTS		8
> +
> +#define ISER_QP_MAX_REQ_DTOS		(ISCSI_XMIT_CMDS_MAX *    \
> +					(1 + ISER_INFLIGHT_DATAOUTS) + \
> +					ISER_MAX_TX_MISC_PDUS        + \
> +					ISER_MAX_RX_MISC_PDUS)
> +
> +#define ISER_VER			0x10
> +#define ISER_WSV			0x08
> +#define ISER_RSV			0x04
> +
> +struct iser_hdr {
> +	u8      flags;
> +	u8      rsvd[3];
> +	__be32  write_stag; /* write rkey */
> +	__be64  write_va;
> +	__be32  read_stag;  /* read rkey */
> +	__be64  read_va;
> +} __attribute__((packed));
> +
> +
> +/* Length of an object name string */
> +#define ISER_OBJECT_NAME_SIZE		    64
> +
> +enum iser_ib_conn_state {
> +	ISER_CONN_INIT,		   /* descriptor allocd, no conn          */
> +	ISER_CONN_PENDING,	   /* in the process of being established */
> +	ISER_CONN_UP,		   /* up and running                      */
> +	ISER_CONN_TERMINATING,	   /* in the process of being terminated  */
> +	ISER_CONN_DOWN,		   /* shut down                           */
> +	ISER_CONN_STATES_NUM
> +};
> +
> +enum iser_task_status {
> +	ISER_TASK_STATUS_INIT = 0,
> +	ISER_TASK_STATUS_STARTED,
> +	ISER_TASK_STATUS_COMPLETED
> +};
> +
> +enum iser_data_dir {
> +	ISER_DIR_IN = 0,	   /* to initiator */
> +	ISER_DIR_OUT,		   /* from initiator */
> +	ISER_DIRS_NUM
> +};
> +
> +struct iser_data_buf {
> +	void               *buf;      /* pointer to the sg list               */
> +	unsigned int       size;      /* num entries of this sg               */
> +	unsigned long      data_len;  /* total data len                       */
> +	unsigned int       dma_nents; /* returned by dma_map_sg               */
> +	char       	   *copy_buf; /* allocated copy buf for SGs unaligned *
> +	                               * for rdma which are copied            */
> +	struct scatterlist sg_single; /* SG-ified clone of a non SG SC or     *
> +				       * unaligned SG                         */
> +  };
> +
> +/* fwd declarations */
> +struct iser_device;
> +struct iscsi_iser_conn;
> +struct iscsi_iser_cmd_task;
> +
> +struct iser_mem_reg {
> +	u32  lkey;
> +	u32  rkey;
> +	u64  va;
> +	u64  len;
> +	void *mem_h;
> +};
> +
> +struct iser_regd_buf {
> +	struct iser_mem_reg     reg;        /* memory registration info        */
> +	void                    *virt_addr;
> +	struct iser_device      *device;    /* device->device for dma_unmap    */
> +	dma_addr_t              dma_addr;   /* if non zero, addr for dma_unmap */
> +	enum dma_data_direction direction;  /* direction for dma_unmap	       */
> +	unsigned int            data_size;
> +	atomic_t                ref_count;  /* refcount, freed when dec to 0   */
> +};
> +
> +#define MAX_REGD_BUF_VECTOR_LEN	2
> +
> +struct iser_dto {
> +	struct iscsi_iser_cmd_task *ctask;
> +	struct iscsi_iser_conn     *conn;
> +	int                        notify_enable;
> +
> +	/* vector of registered buffers */
> +	unsigned int               regd_vector_len;
> +	struct iser_regd_buf       *regd[MAX_REGD_BUF_VECTOR_LEN];
> +
> +	/* offset into the registered buffer may be specified */
> +	unsigned int               offset[MAX_REGD_BUF_VECTOR_LEN];
> +
> +	/* a smaller size may be specified, if 0, then full size is used */
> +	unsigned int               used_sz[MAX_REGD_BUF_VECTOR_LEN];
> +};
> +
> +enum iser_desc_type {
> +	ISCSI_RX,
> +	ISCSI_TX_CONTROL ,
> +	ISCSI_TX_SCSI_COMMAND,
> +	ISCSI_TX_DATAOUT
> +};
> +
> +struct iser_desc {
> +	struct iser_hdr              iser_header;
> +	struct iscsi_hdr             iscsi_header;
> +	struct iser_regd_buf         hdr_regd_buf;
> +	void                         *data;         /* used by RX & TX_CONTROL */
> +	struct iser_regd_buf         data_regd_buf; /* used by RX & TX_CONTROL */
> +	enum   iser_desc_type        type;
> +	struct iser_dto              dto;
> +};
> +
> +struct iser_device {
> +	struct ib_device             *ib_device;
> +	struct ib_pd	             *pd;
> +	struct ib_cq	             *cq;
> +	struct ib_mr	             *mr;
> +	struct tasklet_struct	     cq_tasklet;
> +	struct list_head             ig_list; /* entry in ig devices list */
> +	int                          refcount;
> +};
> +
> +struct iser_conn
> +{

you were  doing bracket after the 'struct foo' why the sudden change
of style?

> +	struct iscsi_iser_conn       *iser_conn; /* iser conn for upcalls  */
> +	atomic_t		     state;	    /* rdma connection state   */
> +	struct iser_device           *device;       /* device context          */
> +	struct rdma_cm_id            *cma_id;       /* CMA ID		       */
> +	struct ib_qp	             *qp;           /* QP 		       */
> +	struct ib_fmr_pool           *fmr_pool;     /* pool of IB FMRs         */
> +	int                          disc_evt_flag; /* disconn event delivered */
> +	wait_queue_head_t	     wait;          /* waitq for conn/disconn  */
> +	atomic_t                     post_recv_buf_count; /* posted rx count   */
> +	atomic_t                     post_send_buf_count; /* posted tx count   */
> +	struct work_struct           comperror_work; /* conn term sleepable ctx*/
> +	char 			     name[ISER_OBJECT_NAME_SIZE];
> +	struct iser_page_vec         *page_vec;     /* represents SG to fmr maps*
> +						     * maps serialized as tx is*/
> +	struct list_head	     conn_list;       /* entry in ig conn list */
> +};
> +
> +struct iscsi_iser_conn {
> +	struct iscsi_conn            *iscsi_conn;/* ptr to iscsi conn */
> +	struct iser_conn             *ib_conn;   /* iSER IB conn      */
> +
> +	rwlock_t		     lock;
> +};
> +
> +struct iscsi_iser_cmd_task {
> +	struct iser_desc             desc;
> +	struct iscsi_iser_conn	     *iser_conn;
> +	int			     rdma_data_count;/* RDMA bytes           */
> +	enum iser_task_status 	     status;
> +	int                          command_sent;  /* set if command  sent  */
> +	int                          dir[ISER_DIRS_NUM];      /* set if dir use*/
> +	struct iser_regd_buf         rdma_regd[ISER_DIRS_NUM];/* regd rdma buf */
> +	struct iser_data_buf         data[ISER_DIRS_NUM];     /* orig. data des*/
> +	struct iser_data_buf         data_copy[ISER_DIRS_NUM];/* contig. copy  */
> +};
> +
> +struct iser_page_vec {
> +	u64 *pages;
> +	int length;
> +	int offset;
> +	int data_size;
> +};
> +
> +struct iser_global {
> +	struct mutex      device_list_mutex;/*                   */
> +	struct list_head  device_list;	     /* all iSER devices */
> +	struct mutex      connlist_mutex;
> +	struct list_head  connlist;		/* all iSER IB connections */
> +
> +	kmem_cache_t *desc_cache;
> +};
> +
> +extern struct iser_global ig;
> +extern int iser_debug_level;
> +
> +/* allocate connection resources needed for rdma functionality */
> +int iser_conn_set_full_featured_mode(struct iscsi_conn *conn);
> +
> +int iser_send_control(struct iscsi_conn      *conn,
> +		      struct iscsi_mgmt_task *mtask);
> +
> +int iser_send_command(struct iscsi_conn      *conn,
> +		      struct iscsi_cmd_task  *ctask);
> +
> +int iser_send_data_out(struct iscsi_conn     *conn,
> +		       struct iscsi_cmd_task *ctask,
> +		       struct iscsi_data          *hdr);
> +
> +void iscsi_iser_recv(struct iscsi_conn *conn,
> +		     struct iscsi_hdr       *hdr,
> +		     char                   *rx_data,
> +		     int                    rx_data_len);
> +
> +int  iser_conn_init(struct iser_conn **ib_conn);
> +
> +void iser_conn_terminate(struct iser_conn *ib_conn);
> +
> +void iser_conn_release(struct iser_conn *ib_conn);
> +
> +void iser_rcv_completion(struct iser_desc *desc,
> +			 unsigned long    dto_xfer_len);
> +
> +void iser_snd_completion(struct iser_desc *desc);
> +
> +void iser_ctask_rdma_init(struct iscsi_iser_cmd_task     *ctask);
> +
> +void iser_ctask_rdma_finalize(struct iscsi_iser_cmd_task *ctask);
> +
> +void iser_dto_buffs_release(struct iser_dto *dto);
> +
> +int  iser_regd_buff_release(struct iser_regd_buf *regd_buf);
> +
> +void iser_reg_single(struct iser_device      *device,
> +		     struct iser_regd_buf    *regd_buf,
> +		     enum dma_data_direction direction);
> +
> +int  iser_start_rdma_unaligned_sg(struct iscsi_iser_cmd_task    *ctask,
> +				  enum iser_data_dir            cmd_dir);
> +
> +void iser_finalize_rdma_unaligned_sg(struct iscsi_iser_cmd_task *ctask,
> +				     enum iser_data_dir         cmd_dir);
> +
> +int  iser_reg_rdma_mem(struct iscsi_iser_cmd_task *ctask,
> +		       enum   iser_data_dir        cmd_dir);
> +
> +int  iser_connect(struct iser_conn   *ib_conn,
> +		  struct sockaddr_in *src_addr,
> +		  struct sockaddr_in *dst_addr,
> +		  int                non_blocking);
> +
> +int  iser_reg_page_vec(struct iser_conn     *ib_conn,
> +		       struct iser_page_vec *page_vec,
> +		       struct iser_mem_reg  *mem_reg);
> +
> +void iser_unreg_mem(struct iser_mem_reg *mem_reg);
> +
> +int  iser_post_recv(struct iser_desc *rx_desc);
> +int  iser_post_send(struct iser_desc *tx_desc);
> +#endif

common practice is to put extern ahead of function prototypes in .h file.

  parent reply	other threads:[~2006-04-27 16:59 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-27 12:30 [PATCH 0/6] iSER (iSCSI Extensions for RDMA) initiator Or Gerlitz
2006-04-27 12:30 ` [PATCH 1/6] iSER's Makefile and Kconfig Or Gerlitz
2006-04-27 12:31   ` [PATCH 2/6] iscsi_iser header file Or Gerlitz
2006-04-27 12:31     ` [PATCH 3/6] open iscsi iser transport provider code Or Gerlitz
2006-04-27 12:32       ` [PATCH 4/6] iser initiator Or Gerlitz
2006-04-27 12:32         ` [PATCH 5/6] iser RDMA CM (CMA) and IB verbs interaction Or Gerlitz
2006-04-27 12:33           ` [PATCH 6/6] iser handling of memory for RDMA Or Gerlitz
2006-04-28 23:05           ` [openib-general] [PATCH 5/6] iser RDMA CM (CMA) and IB verbsinteraction Sean Hefty
2006-04-30 12:30             ` Or Gerlitz
2006-05-01 13:02             ` Or Gerlitz
2006-05-04 13:00               ` [openib-general] [PATCH 5/6] iser RDMA CM (CMA) and IB verbs interaction Or Gerlitz
2006-05-04 13:06                 ` Or Gerlitz
2006-04-27 17:01       ` [PATCH 3/6] open iscsi iser transport provider code Stephen Hemminger
2006-04-27 16:58     ` Stephen Hemminger [this message]
2006-04-27 12:40   ` [PATCH 1/6] iSER's Makefile and Kconfig Jan-Benedict Glaw
2006-04-27 12:44     ` Or Gerlitz
2006-05-01 18:32 ` [PATCH 0/6] iSER (iSCSI Extensions for RDMA) initiator Roland Dreier
2006-05-02  7:56   ` Or Gerlitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060427095854.54e51fdb@localhost.localdomain \
    --to=shemminger@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome