Merge tag 'pci-v5.11-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
[linux-2.6-microblaze.git] / drivers / s390 / net / ctcm_main.c
index d06809e..fd70542 100644 (file)
@@ -623,25 +623,10 @@ static void ctcmpc_send_sweep_req(struct channel *rch)
                                goto nomem;
        }
 
-       header = kmalloc(TH_SWEEP_LENGTH, gfp_type());
-
-       if (!header) {
-               dev_kfree_skb_any(sweep_skb);
-               /* rc = -ENOMEM; */
-                               goto nomem;
-       }
-
-       header->th.th_seg       = 0x00 ;
+       header = skb_put_zero(sweep_skb, TH_SWEEP_LENGTH);
        header->th.th_ch_flag   = TH_SWEEP_REQ;  /* 0x0f */
-       header->th.th_blk_flag  = 0x00;
-       header->th.th_is_xid    = 0x00;
-       header->th.th_seq_num   = 0x00;
        header->sw.th_last_seq  = ch->th_seq_num;
 
-       skb_put_data(sweep_skb, header, TH_SWEEP_LENGTH);
-
-       kfree(header);
-
        netif_trans_update(dev);
        skb_queue_tail(&ch->sweep_queue, sweep_skb);
 
@@ -680,24 +665,16 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb)
        if ((fsm_getstate(ch->fsm) != CTC_STATE_TXIDLE) || grp->in_sweep) {
                spin_lock_irqsave(&ch->collect_lock, saveflags);
                refcount_inc(&skb->users);
-               p_header = kmalloc(PDU_HEADER_LENGTH, gfp_type());
-
-               if (!p_header) {
-                       spin_unlock_irqrestore(&ch->collect_lock, saveflags);
-                               goto nomem_exit;
-               }
 
-               p_header->pdu_offset = skb->len;
+               p_header = skb_push(skb, PDU_HEADER_LENGTH);
+               p_header->pdu_offset = skb->len - PDU_HEADER_LENGTH;
                p_header->pdu_proto = 0x01;
-               p_header->pdu_flag = 0x00;
                if (be16_to_cpu(skb->protocol) == ETH_P_SNAP) {
-                       p_header->pdu_flag |= PDU_FIRST | PDU_CNTL;
+                       p_header->pdu_flag = PDU_FIRST | PDU_CNTL;
                } else {
-                       p_header->pdu_flag |= PDU_FIRST;
+                       p_header->pdu_flag = PDU_FIRST;
                }
                p_header->pdu_seq = 0;
-               memcpy(skb_push(skb, PDU_HEADER_LENGTH), p_header,
-                      PDU_HEADER_LENGTH);
 
                CTCM_PR_DEBUG("%s(%s): Put on collect_q - skb len: %04x \n"
                                "pdu header and data for up to 32 bytes:\n",
@@ -706,7 +683,6 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb)
 
                skb_queue_tail(&ch->collect_queue, skb);
                ch->collect_len += skb->len;
-               kfree(p_header);
 
                spin_unlock_irqrestore(&ch->collect_lock, saveflags);
                        goto done;
@@ -736,23 +712,15 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb)
                }
        }
 
-       p_header = kmalloc(PDU_HEADER_LENGTH, gfp_type());
-
-       if (!p_header)
-               goto nomem_exit;
-
-       p_header->pdu_offset = skb->len;
+       p_header = skb_push(skb, PDU_HEADER_LENGTH);
+       p_header->pdu_offset = skb->len - PDU_HEADER_LENGTH;
        p_header->pdu_proto = 0x01;
-       p_header->pdu_flag = 0x00;
        p_header->pdu_seq = 0;
        if (be16_to_cpu(skb->protocol) == ETH_P_SNAP) {
-               p_header->pdu_flag |= PDU_FIRST | PDU_CNTL;
+               p_header->pdu_flag = PDU_FIRST | PDU_CNTL;
        } else {
-               p_header->pdu_flag |= PDU_FIRST;
+               p_header->pdu_flag = PDU_FIRST;
        }
-       memcpy(skb_push(skb, PDU_HEADER_LENGTH), p_header, PDU_HEADER_LENGTH);
-
-       kfree(p_header);
 
        if (ch->collect_len > 0) {
                spin_lock_irqsave(&ch->collect_lock, saveflags);
@@ -768,25 +736,17 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb)
 
        ch->prof.txlen += skb->len - PDU_HEADER_LENGTH;
 
-       header = kmalloc(TH_HEADER_LENGTH, gfp_type());
-       if (!header)
-               goto nomem_exit;
+       /* put the TH on the packet */
+       header = skb_push(skb, TH_HEADER_LENGTH);
+       memset(header, 0, TH_HEADER_LENGTH);
 
-       header->th_seg = 0x00;
        header->th_ch_flag = TH_HAS_PDU;  /* Normal data */
-       header->th_blk_flag = 0x00;
-       header->th_is_xid = 0x00;          /* Just data here */
        ch->th_seq_num++;
        header->th_seq_num = ch->th_seq_num;
 
        CTCM_PR_DBGDATA("%s(%s) ToVTAM_th_seq= %08x\n" ,
                       __func__, dev->name, ch->th_seq_num);
 
-       /* put the TH on the packet */
-       memcpy(skb_push(skb, TH_HEADER_LENGTH), header, TH_HEADER_LENGTH);
-
-       kfree(header);
-
        CTCM_PR_DBGDATA("%s(%s): skb len: %04x\n - pdu header and data for "
                        "up to 32 bytes sent to vtam:\n",
                                __func__, dev->name, skb->len);
@@ -943,7 +903,7 @@ static int ctcmpc_tx(struct sk_buff *skb, struct net_device *dev)
                CTCM_D3_DUMP((char *)skb->data, min_t(int, 32, skb->len));
 
                len =  skb->len + TH_HEADER_LENGTH + PDU_HEADER_LENGTH;
-               newskb = __dev_alloc_skb(len, gfp_type() | GFP_DMA);
+               newskb = __dev_alloc_skb(len, GFP_ATOMIC | GFP_DMA);
 
                if (!newskb) {
                        CTCM_DBF_TEXT_(MPC_TRACE, CTC_DBF_ERROR,
@@ -1361,7 +1321,7 @@ static int add_channel(struct ccw_device *cdev, enum ctcm_channel_types type,
 
        ch->protocol = priv->protocol;
        if (IS_MPC(priv)) {
-               ch->discontact_th = kzalloc(TH_HEADER_LENGTH, gfp_type());
+               ch->discontact_th = kzalloc(TH_HEADER_LENGTH, GFP_KERNEL);
                if (ch->discontact_th == NULL)
                                        goto nomem_return;