Commit d38aa396 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Jakub Kicinski

s390/ctcm: Avoid temporary allocation of struct qllc.

The size of struct qllc is 2 byte. The memory for is allocated,
initialized, used and deallocated a few lines later.

It is more efficient to avoid the allocation/free dance and assign the
values directly to skb's data part instead of using memcpy() for it.

Avoid an allocation of struct qllc and use the resulting skb pointer
instead.
Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
[jwi: remove a newline, reflow the commit msg]
Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 94e0028a
...@@ -2048,7 +2048,6 @@ static void mpc_action_rcvd_xid7(fsm_instance *fsm, int event, void *arg) ...@@ -2048,7 +2048,6 @@ static void mpc_action_rcvd_xid7(fsm_instance *fsm, int event, void *arg)
*/ */
static int mpc_send_qllc_discontact(struct net_device *dev) static int mpc_send_qllc_discontact(struct net_device *dev)
{ {
__u32 new_len = 0;
struct sk_buff *skb; struct sk_buff *skb;
struct qllc *qllcptr; struct qllc *qllcptr;
struct ctcm_priv *priv = dev->ml_priv; struct ctcm_priv *priv = dev->ml_priv;
...@@ -2079,31 +2078,19 @@ static int mpc_send_qllc_discontact(struct net_device *dev) ...@@ -2079,31 +2078,19 @@ static int mpc_send_qllc_discontact(struct net_device *dev)
case MPCG_STATE_FLOWC: case MPCG_STATE_FLOWC:
case MPCG_STATE_READY: case MPCG_STATE_READY:
grp->send_qllc_disc = 2; grp->send_qllc_disc = 2;
new_len = sizeof(struct qllc);
qllcptr = kzalloc(new_len, gfp_type() | GFP_DMA);
if (qllcptr == NULL) {
CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR,
"%s(%s): qllcptr allocation error",
CTCM_FUNTAIL, dev->name);
return -ENOMEM;
}
qllcptr->qllc_address = 0xcc;
qllcptr->qllc_commands = 0x03;
skb = __dev_alloc_skb(new_len, GFP_ATOMIC);
skb = __dev_alloc_skb(sizeof(struct qllc), GFP_ATOMIC);
if (skb == NULL) { if (skb == NULL) {
CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR, CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR,
"%s(%s): skb allocation error", "%s(%s): skb allocation error",
CTCM_FUNTAIL, dev->name); CTCM_FUNTAIL, dev->name);
priv->stats.rx_dropped++; priv->stats.rx_dropped++;
kfree(qllcptr);
return -ENOMEM; return -ENOMEM;
} }
skb_put_data(skb, qllcptr, new_len); qllcptr = skb_put(skb, sizeof(struct qllc));
kfree(qllcptr); qllcptr->qllc_address = 0xcc;
qllcptr->qllc_commands = 0x03;
if (skb_headroom(skb) < 4) { if (skb_headroom(skb) < 4) {
CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR, CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment