All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Wise <swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
To: Roland Dreier <rdreier-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] RDMA/cxgb3: Shrink .text with compile-time init of handlers arrays
Date: Wed, 28 Apr 2010 14:33:31 -0500	[thread overview]
Message-ID: <4BD88D8B.8050000@opengridcomputing.com> (raw)
In-Reply-To: <adaiq7b1jhe.fsf-BjVyx320WGW9gfZ95n9DRSW4+XlvGpQz@public.gmane.org>

Looks ok to me.  Functionally it doesn't change anything I guess.



Roland Dreier wrote:
> Hey Steve,
>
> What do you think about this for the next merge window?  I think it
> arguably makes the source cleaner, and it definitely makes the compiled
> code better:
>
> add/remove: 0/1 grow/shrink: 4/3 up/down: 4/-1682 (-1678)
> function                                     old     new   delta
> tx_ack                                       167     168      +1
> state_set                                     55      56      +1
> start_ep_timer                                99     100      +1
> pass_establish                               177     178      +1
> act_open_req_arp_failure                      39      38      -1
> sched                                         84      82      -2
> iwch_cm_init                                 442      91    -351
> work_handlers                               1328       -   -1328
> ---
>  drivers/infiniband/hw/cxgb3/iwch.c    |    2 -
>  drivers/infiniband/hw/cxgb3/iwch_cm.c |  131 +++++++++++++++++----------------
>  2 files changed, 67 insertions(+), 66 deletions(-)
>
> diff --git a/drivers/infiniband/hw/cxgb3/iwch.c b/drivers/infiniband/hw/cxgb3/iwch.c
> index 63f975f..8e77dc5 100644
> --- a/drivers/infiniband/hw/cxgb3/iwch.c
> +++ b/drivers/infiniband/hw/cxgb3/iwch.c
> @@ -47,8 +47,6 @@ MODULE_DESCRIPTION("Chelsio T3 RDMA Driver");
>  MODULE_LICENSE("Dual BSD/GPL");
>  MODULE_VERSION(DRV_VERSION);
>  
> -cxgb3_cpl_handler_func t3c_handlers[NUM_CPL_CMDS];
> -
>  static void open_rnic_dev(struct t3cdev *);
>  static void close_rnic_dev(struct t3cdev *);
>  static void iwch_event_handler(struct t3cdev *, u32, u32);
> diff --git a/drivers/infiniband/hw/cxgb3/iwch_cm.c b/drivers/infiniband/hw/cxgb3/iwch_cm.c
> index cfd6db0..f2d2c29 100644
> --- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
> +++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
> @@ -102,12 +102,9 @@ static unsigned int cong_flavor = 1;
>  module_param(cong_flavor, uint, 0644);
>  MODULE_PARM_DESC(cong_flavor, "TCP Congestion control flavor (default=1)");
>  
> -static void process_work(struct work_struct *work);
>  static struct workqueue_struct *workq;
> -static DECLARE_WORK(skb_work, process_work);
>  
>  static struct sk_buff_head rxq;
> -static cxgb3_cpl_handler_func work_handlers[NUM_CPL_CMDS];
>  
>  static struct sk_buff *get_skb(struct sk_buff *skb, int len, gfp_t gfp);
>  static void ep_timeout(unsigned long arg);
> @@ -302,27 +299,6 @@ static void release_ep_resources(struct iwch_ep *ep)
>  	put_ep(&ep->com);
>  }
>  
> -static void process_work(struct work_struct *work)
> -{
> -	struct sk_buff *skb = NULL;
> -	void *ep;
> -	struct t3cdev *tdev;
> -	int ret;
> -
> -	while ((skb = skb_dequeue(&rxq))) {
> -		ep = *((void **) (skb->cb));
> -		tdev = *((struct t3cdev **) (skb->cb + sizeof(void *)));
> -		ret = work_handlers[G_OPCODE(ntohl((__force __be32)skb->csum))](tdev, skb, ep);
> -		if (ret & CPL_RET_BUF_DONE)
> -			kfree_skb(skb);
> -
> -		/*
> -		 * ep was referenced in sched(), and is freed here.
> -		 */
> -		put_ep((struct iwch_ep_common *)ep);
> -	}
> -}
> -
>  static int status2errno(int status)
>  {
>  	switch (status) {
> @@ -2158,6 +2134,50 @@ int iwch_ep_redirect(void *ctx, struct dst_entry *old, struct dst_entry *new,
>  /*
>   * All the CM events are handled on a work queue to have a safe context.
>   */
> +/*
> + * These are the real handlers that are called from a work queue.
> + */
> +static const cxgb3_cpl_handler_func work_handlers[NUM_CPL_CMDS] = {
> +	[CPL_ACT_ESTABLISH]	= act_establish,
> +	[CPL_ACT_OPEN_RPL]	= act_open_rpl,
> +	[CPL_RX_DATA]		= rx_data,
> +	[CPL_TX_DMA_ACK]	= tx_ack,
> +	[CPL_ABORT_RPL_RSS]	= abort_rpl,
> +	[CPL_ABORT_RPL]		= abort_rpl,
> +	[CPL_PASS_OPEN_RPL]	= pass_open_rpl,
> +	[CPL_CLOSE_LISTSRV_RPL]	= close_listsrv_rpl,
> +	[CPL_PASS_ACCEPT_REQ]	= pass_accept_req,
> +	[CPL_PASS_ESTABLISH]	= pass_establish,
> +	[CPL_PEER_CLOSE]	= peer_close,
> +	[CPL_ABORT_REQ_RSS]	= peer_abort,
> +	[CPL_CLOSE_CON_RPL]	= close_con_rpl,
> +	[CPL_RDMA_TERMINATE]	= terminate,
> +	[CPL_RDMA_EC_STATUS]	= ec_status,
> +};
> +
> +static void process_work(struct work_struct *work)
> +{
> +	struct sk_buff *skb = NULL;
> +	void *ep;
> +	struct t3cdev *tdev;
> +	int ret;
> +
> +	while ((skb = skb_dequeue(&rxq))) {
> +		ep = *((void **) (skb->cb));
> +		tdev = *((struct t3cdev **) (skb->cb + sizeof(void *)));
> +		ret = work_handlers[G_OPCODE(ntohl((__force __be32)skb->csum))](tdev, skb, ep);
> +		if (ret & CPL_RET_BUF_DONE)
> +			kfree_skb(skb);
> +
> +		/*
> +		 * ep was referenced in sched(), and is freed here.
> +		 */
> +		put_ep((struct iwch_ep_common *)ep);
> +	}
> +}
> +
> +static DECLARE_WORK(skb_work, process_work);
> +
>  static int sched(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
>  {
>  	struct iwch_ep_common *epc = ctx;
> @@ -2189,6 +2209,29 @@ static int set_tcb_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
>  	return CPL_RET_BUF_DONE;
>  }
>  
> +/*
> + * All upcalls from the T3 Core go to sched() to schedule the
> + * processing on a work queue.
> + */
> +cxgb3_cpl_handler_func t3c_handlers[NUM_CPL_CMDS] = {
> +	[CPL_ACT_ESTABLISH]	= sched,
> +	[CPL_ACT_OPEN_RPL]	= sched,
> +	[CPL_RX_DATA]		= sched,
> +	[CPL_TX_DMA_ACK]	= sched,
> +	[CPL_ABORT_RPL_RSS]	= sched,
> +	[CPL_ABORT_RPL]		= sched,
> +	[CPL_PASS_OPEN_RPL]	= sched,
> +	[CPL_CLOSE_LISTSRV_RPL]	= sched,
> +	[CPL_PASS_ACCEPT_REQ]	= sched,
> +	[CPL_PASS_ESTABLISH]	= sched,
> +	[CPL_PEER_CLOSE]	= sched,
> +	[CPL_CLOSE_CON_RPL]	= sched,
> +	[CPL_ABORT_REQ_RSS]	= sched,
> +	[CPL_RDMA_TERMINATE]	= sched,
> +	[CPL_RDMA_EC_STATUS]	= sched,
> +	[CPL_SET_TCB_RPL]	= set_tcb_rpl,
> +};
> +
>  int __init iwch_cm_init(void)
>  {
>  	skb_queue_head_init(&rxq);
> @@ -2197,46 +2240,6 @@ int __init iwch_cm_init(void)
>  	if (!workq)
>  		return -ENOMEM;
>  
> -	/*
> -	 * All upcalls from the T3 Core go to sched() to
> -	 * schedule the processing on a work queue.
> -	 */
> -	t3c_handlers[CPL_ACT_ESTABLISH] = sched;
> -	t3c_handlers[CPL_ACT_OPEN_RPL] = sched;
> -	t3c_handlers[CPL_RX_DATA] = sched;
> -	t3c_handlers[CPL_TX_DMA_ACK] = sched;
> -	t3c_handlers[CPL_ABORT_RPL_RSS] = sched;
> -	t3c_handlers[CPL_ABORT_RPL] = sched;
> -	t3c_handlers[CPL_PASS_OPEN_RPL] = sched;
> -	t3c_handlers[CPL_CLOSE_LISTSRV_RPL] = sched;
> -	t3c_handlers[CPL_PASS_ACCEPT_REQ] = sched;
> -	t3c_handlers[CPL_PASS_ESTABLISH] = sched;
> -	t3c_handlers[CPL_PEER_CLOSE] = sched;
> -	t3c_handlers[CPL_CLOSE_CON_RPL] = sched;
> -	t3c_handlers[CPL_ABORT_REQ_RSS] = sched;
> -	t3c_handlers[CPL_RDMA_TERMINATE] = sched;
> -	t3c_handlers[CPL_RDMA_EC_STATUS] = sched;
> -	t3c_handlers[CPL_SET_TCB_RPL] = set_tcb_rpl;
> -
> -	/*
> -	 * These are the real handlers that are called from a
> -	 * work queue.
> -	 */
> -	work_handlers[CPL_ACT_ESTABLISH] = act_establish;
> -	work_handlers[CPL_ACT_OPEN_RPL] = act_open_rpl;
> -	work_handlers[CPL_RX_DATA] = rx_data;
> -	work_handlers[CPL_TX_DMA_ACK] = tx_ack;
> -	work_handlers[CPL_ABORT_RPL_RSS] = abort_rpl;
> -	work_handlers[CPL_ABORT_RPL] = abort_rpl;
> -	work_handlers[CPL_PASS_OPEN_RPL] = pass_open_rpl;
> -	work_handlers[CPL_CLOSE_LISTSRV_RPL] = close_listsrv_rpl;
> -	work_handlers[CPL_PASS_ACCEPT_REQ] = pass_accept_req;
> -	work_handlers[CPL_PASS_ESTABLISH] = pass_establish;
> -	work_handlers[CPL_PEER_CLOSE] = peer_close;
> -	work_handlers[CPL_ABORT_REQ_RSS] = peer_abort;
> -	work_handlers[CPL_CLOSE_CON_RPL] = close_con_rpl;
> -	work_handlers[CPL_RDMA_TERMINATE] = terminate;
> -	work_handlers[CPL_RDMA_EC_STATUS] = ec_status;
>  	return 0;
>  }
>  
>
>   

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2010-04-28 19:33 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-28 19:10 [PATCH] RDMA/cxgb3: Shrink .text with compile-time init of handlers arrays Roland Dreier
     [not found] ` <adaiq7b1jhe.fsf-BjVyx320WGW9gfZ95n9DRSW4+XlvGpQz@public.gmane.org>
2010-04-28 19:33   ` Steve Wise [this message]
     [not found]     ` <4BD88D8B.8050000-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
2010-04-28 21:54       ` Roland Dreier
     [not found]         ` <ada7hnr1bwc.fsf-BjVyx320WGW9gfZ95n9DRSW4+XlvGpQz@public.gmane.org>
2010-05-03 14:32           ` Steve Wise
     [not found]             ` <4BDEDE62.8010905-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
2010-05-03 14:37               ` Roland Dreier

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=4BD88D8B.8050000@opengridcomputing.com \
    --to=swise-7bpotxp6k4+p2yhjcf5u+vpxobypeauw@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=rdreier-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.