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
next prev 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.