Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[SK_BUFF]: Introduce skb_copy_to_linear_data{_offset}

To clearly state the intent of copying to linear sk_buffs, _offset being a
overly long variant but interesting for the sake of saving some bytes.

Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>

authored by

Arnaldo Carvalho de Melo and committed by
David S. Miller
27d7ff46 3dbad80a

+185 -127
+1 -1
arch/ia64/hp/sim/simeth.c
··· 473 473 * XXX Fix me 474 474 * Should really do a csum+copy here 475 475 */ 476 - memcpy(skb->data, frame, len); 476 + skb_copy_to_linear_data(skb, frame, len); 477 477 #endif 478 478 skb->protocol = eth_type_trans(skb, dev); 479 479
+1 -1
arch/ia64/sn/kernel/xpnet.c
··· 233 233 "%lu)\n", skb->data, &msg->data, 234 234 (size_t) msg->embedded_bytes); 235 235 236 - memcpy(skb->data, &msg->data, (size_t) msg->embedded_bytes); 236 + skb_copy_to_linear_data(skb, &msg->data, (size_t)msg->embedded_bytes); 237 237 } else { 238 238 dev_dbg(xpnet, "transferring buffer to the skb->data area;\n\t" 239 239 "bte_copy(0x%p, 0x%p, %hu)\n", (void *)msg->buf_pa,
+2 -1
drivers/isdn/hysdn/hycapi.c
··· 399 399 if (_len > 22) { 400 400 _len2 = _len - 22; 401 401 skb_copy_from_linear_data(skb, msghead, 22); 402 - memcpy(skb->data + _len2, msghead, 22); 402 + skb_copy_to_linear_data_offset(skb, _len2, 403 + msghead, 22); 403 404 skb_pull(skb, _len2); 404 405 CAPIMSG_SETLEN(skb->data, 22); 405 406 retval = capilib_data_b3_req(&cinfo->ncci_head,
+3 -3
drivers/net/8139too.c
··· 1904 1904 u32 left = RX_BUF_LEN - offset; 1905 1905 1906 1906 if (size > left) { 1907 - memcpy(skb->data, ring + offset, left); 1908 - memcpy(skb->data+left, ring, size - left); 1907 + skb_copy_to_linear_data(skb, ring + offset, left); 1908 + skb_copy_to_linear_data_offset(skb, left, ring, size - left); 1909 1909 } else 1910 - memcpy(skb->data, ring + offset, size); 1910 + skb_copy_to_linear_data(skb, ring + offset, size); 1911 1911 } 1912 1912 #endif 1913 1913
+1 -1
drivers/net/appletalk/ltpc.c
··· 774 774 skb_pull(skb,3); 775 775 776 776 /* copy ddp(s,e)hdr + contents */ 777 - memcpy(skb->data,(void*)ltdmabuf,len); 777 + skb_copy_to_linear_data(skb, ltdmabuf, len); 778 778 779 779 skb_reset_transport_header(skb); 780 780
+2 -1
drivers/net/atari_bionet.c
··· 550 550 551 551 /* 'skb->data' points to the start of sk_buff data area. 552 552 */ 553 - memcpy(skb->data, nic_packet->buffer, pkt_len); 553 + skb_copy_to_linear_data(skb, nic_packet->buffer, 554 + pkt_len); 554 555 skb->protocol = eth_type_trans( skb, dev ); 555 556 netif_rx(skb); 556 557 dev->last_rx = jiffies;
+2 -1
drivers/net/atari_pamsnet.c
··· 793 793 794 794 /* 'skb->data' points to the start of sk_buff data area. 795 795 */ 796 - memcpy(skb->data, nic_packet->buffer, pkt_len); 796 + skb_copy_to_linear_data(skb, nic_packet->buffer, 797 + pkt_len); 797 798 netif_rx(skb); 798 799 dev->last_rx = jiffies; 799 800 lp->stats.rx_packets++;
+16 -8
drivers/net/chelsio/sge.c
··· 2095 2095 0x0, 0x7, 0x43, 0x0, 0x0, 0x0 2096 2096 }; 2097 2097 2098 - memcpy(skb->data + sizeof(struct cpl_tx_pkt), 2099 - ch_mac_addr, ETH_ALEN); 2100 - memcpy(skb->data + skb->len - 10, 2101 - ch_mac_addr, ETH_ALEN); 2098 + skb_copy_to_linear_data_offset(skb, 2099 + sizeof(struct cpl_tx_pkt), 2100 + ch_mac_addr, 2101 + ETH_ALEN); 2102 + skb_copy_to_linear_data_offset(skb, 2103 + skb->len - 10, 2104 + ch_mac_addr, 2105 + ETH_ALEN); 2102 2106 skb->cb[0] = 0xff; 2103 2107 } 2104 2108 ··· 2129 2125 if (!skb->cb[0]) { 2130 2126 u8 ch_mac_addr[ETH_ALEN] = 2131 2127 {0x0, 0x7, 0x43, 0x0, 0x0, 0x0}; 2132 - memcpy(skb->data + sizeof(struct cpl_tx_pkt), 2133 - ch_mac_addr, ETH_ALEN); 2134 - memcpy(skb->data + skb->len - 10, ch_mac_addr, 2135 - ETH_ALEN); 2128 + skb_copy_to_linear_data_offset(skb, 2129 + sizeof(struct cpl_tx_pkt), 2130 + ch_mac_addr, 2131 + ETH_ALEN); 2132 + skb_copy_to_linear_data_offset(skb, 2133 + skb->len - 10, 2134 + ch_mac_addr, 2135 + ETH_ALEN); 2136 2136 skb->cb[0] = 0xff; 2137 2137 } 2138 2138
+3 -3
drivers/net/cxgb3/sge.c
··· 661 661 662 662 if (skb) { 663 663 __skb_put(skb, IMMED_PKT_SIZE); 664 - memcpy(skb->data, resp->imm_data, IMMED_PKT_SIZE); 664 + skb_copy_to_linear_data(skb, resp->imm_data, IMMED_PKT_SIZE); 665 665 } 666 666 return skb; 667 667 } ··· 1722 1722 { 1723 1723 skb->len = len; 1724 1724 if (len <= SKB_DATA_SIZE) { 1725 - memcpy(skb->data, p->va, len); 1725 + skb_copy_to_linear_data(skb, p->va, len); 1726 1726 skb->tail += len; 1727 1727 put_page(p->frag.page); 1728 1728 } else { 1729 - memcpy(skb->data, p->va, SKB_DATA_SIZE); 1729 + skb_copy_to_linear_data(skb, p->va, SKB_DATA_SIZE); 1730 1730 skb_shinfo(skb)->frags[0].page = p->frag.page; 1731 1731 skb_shinfo(skb)->frags[0].page_offset = 1732 1732 p->frag.page_offset + SKB_DATA_SIZE;
+3 -1
drivers/net/defxx.c
··· 3091 3091 { 3092 3092 /* Receive buffer allocated, pass receive packet up */ 3093 3093 3094 - memcpy(skb->data, p_buff + RCV_BUFF_K_PADDING, pkt_len+3); 3094 + skb_copy_to_linear_data(skb, 3095 + p_buff + RCV_BUFF_K_PADDING, 3096 + pkt_len + 3); 3095 3097 } 3096 3098 3097 3099 skb_reserve(skb,3); /* adjust data field so that it points to FC byte */
+1 -1
drivers/net/e100.c
··· 1769 1769 1770 1770 /* Align, init, and map the RFD. */ 1771 1771 skb_reserve(rx->skb, NET_IP_ALIGN); 1772 - memcpy(rx->skb->data, &nic->blank_rfd, sizeof(struct rfd)); 1772 + skb_copy_to_linear_data(rx->skb, &nic->blank_rfd, sizeof(struct rfd)); 1773 1773 rx->dma_addr = pci_map_single(nic->pdev, rx->skb->data, 1774 1774 RFD_BUF_LEN, PCI_DMA_BIDIRECTIONAL); 1775 1775
+6 -3
drivers/net/e1000/e1000_main.c
··· 4224 4224 netdev_alloc_skb(netdev, length + NET_IP_ALIGN); 4225 4225 if (new_skb) { 4226 4226 skb_reserve(new_skb, NET_IP_ALIGN); 4227 - memcpy(new_skb->data - NET_IP_ALIGN, 4228 - skb->data - NET_IP_ALIGN, 4229 - length + NET_IP_ALIGN); 4227 + skb_copy_to_linear_data_offset(new_skb, 4228 + -NET_IP_ALIGN, 4229 + (skb->data - 4230 + NET_IP_ALIGN), 4231 + (length + 4232 + NET_IP_ALIGN)); 4230 4233 /* save the skb in buffer_info as good */ 4231 4234 buffer_info->skb = skb; 4232 4235 skb = new_skb;
+2 -2
drivers/net/ehea/ehea_main.c
··· 391 391 if (!skb) 392 392 break; 393 393 } 394 - memcpy(skb->data, ((char*)cqe) + 64, 395 - cqe->num_bytes_transfered - 4); 394 + skb_copy_to_linear_data(skb, ((char*)cqe) + 64, 395 + cqe->num_bytes_transfered - 4); 396 396 ehea_fill_skb(dev, skb, cqe); 397 397 } else if (rq == 2) { /* RQ2 */ 398 398 skb = get_skb_by_index(skb_arr_rq2,
+1 -1
drivers/net/irda/ali-ircc.c
··· 1923 1923 1924 1924 /* Copy frame without CRC, CRC is removed by hardware*/ 1925 1925 skb_put(skb, len); 1926 - memcpy(skb->data, self->rx_buff.data, len); 1926 + skb_copy_to_linear_data(skb, self->rx_buff.data, len); 1927 1927 1928 1928 /* Move to next frame */ 1929 1929 self->rx_buff.data += len;
+1 -1
drivers/net/irda/au1k_ir.c
··· 604 604 skb_put(skb, count); 605 605 else 606 606 skb_put(skb, count-2); 607 - memcpy(skb->data, (void *)pDB->vaddr, count-2); 607 + skb_copy_to_linear_data(skb, pDB->vaddr, count - 2); 608 608 skb->dev = dev; 609 609 skb_reset_mac_header(skb); 610 610 skb->protocol = htons(ETH_P_IRDA);
+2 -2
drivers/net/irda/donauboe.c
··· 1282 1282 skb_reserve (skb, 1); 1283 1283 1284 1284 skb_put (skb, len); 1285 - memcpy (skb->data, self->rx_bufs[self->rxs], len); 1286 - 1285 + skb_copy_to_linear_data(skb, self->rx_bufs[self->rxs], 1286 + len); 1287 1287 self->stats.rx_packets++; 1288 1288 skb->dev = self->netdev; 1289 1289 skb_reset_mac_header(skb);
+2 -2
drivers/net/irda/mcs7780.c
··· 426 426 } 427 427 428 428 skb_reserve(skb, 1); 429 - memcpy(skb->data, buf, new_len); 429 + skb_copy_to_linear_data(skb, buf, new_len); 430 430 skb_put(skb, new_len); 431 431 skb_reset_mac_header(skb); 432 432 skb->protocol = htons(ETH_P_IRDA); ··· 479 479 } 480 480 481 481 skb_reserve(skb, 1); 482 - memcpy(skb->data, buf, new_len); 482 + skb_copy_to_linear_data(skb, buf, new_len); 483 483 skb_put(skb, new_len); 484 484 skb_reset_mac_header(skb); 485 485 skb->protocol = htons(ETH_P_IRDA);
+6 -2
drivers/net/irda/nsc-ircc.c
··· 1868 1868 /* Copy frame without CRC */ 1869 1869 if (self->io.speed < 4000000) { 1870 1870 skb_put(skb, len-2); 1871 - memcpy(skb->data, self->rx_buff.data, len-2); 1871 + skb_copy_to_linear_data(skb, 1872 + self->rx_buff.data, 1873 + len - 2); 1872 1874 } else { 1873 1875 skb_put(skb, len-4); 1874 - memcpy(skb->data, self->rx_buff.data, len-4); 1876 + skb_copy_to_linear_data(skb, 1877 + self->rx_buff.data, 1878 + len - 4); 1875 1879 } 1876 1880 1877 1881 /* Move to next frame */
+1 -1
drivers/net/irda/pxaficp_ir.c
··· 386 386 387 387 /* Align IP header to 20 bytes */ 388 388 skb_reserve(skb, 1); 389 - memcpy(skb->data, si->dma_rx_buff, len); 389 + skb_copy_to_linear_data(skb, si->dma_rx_buff, len); 390 390 skb_put(skb, len); 391 391 392 392 /* Feed it to IrLAP */
+1 -1
drivers/net/irda/stir4200.c
··· 348 348 } 349 349 skb_reserve(nskb, 1); 350 350 skb = nskb; 351 - memcpy(nskb->data, rx_buff->data, len); 351 + skb_copy_to_linear_data(nskb, rx_buff->data, len); 352 352 } else { 353 353 nskb = dev_alloc_skb(rx_buff->truesize); 354 354 if (unlikely(!nskb)) {
+3 -3
drivers/net/irda/via-ircc.c
··· 1189 1189 skb_reserve(skb, 1); 1190 1190 skb_put(skb, len - 4); 1191 1191 1192 - memcpy(skb->data, self->rx_buff.data, len - 4); 1192 + skb_copy_to_linear_data(skb, self->rx_buff.data, len - 4); 1193 1193 IRDA_DEBUG(2, "%s(): len=%x.rx_buff=%p\n", __FUNCTION__, 1194 1194 len - 4, self->rx_buff.data); 1195 1195 ··· 1234 1234 } 1235 1235 skb_reserve(skb, 1); 1236 1236 skb_put(skb, len - 4 + 1); 1237 - memcpy(skb->data, self->rx_buff.data, len - 4 + 1); 1237 + skb_copy_to_linear_data(skb, self->rx_buff.data, len - 4 + 1); 1238 1238 st_fifo->tail++; 1239 1239 st_fifo->len++; 1240 1240 if (st_fifo->tail > MAX_RX_WINDOW) ··· 1303 1303 } 1304 1304 skb_reserve(skb, 1); 1305 1305 skb_put(skb, len - 4); 1306 - memcpy(skb->data, self->rx_buff.data, len - 4); 1306 + skb_copy_to_linear_data(skb, self->rx_buff.data, len - 4); 1307 1307 1308 1308 IRDA_DEBUG(2, "%s(): len=%x.head=%x\n", __FUNCTION__, 1309 1309 len - 4, st_fifo->head);
+6 -2
drivers/net/irda/w83977af_ir.c
··· 908 908 /* Copy frame without CRC */ 909 909 if (self->io.speed < 4000000) { 910 910 skb_put(skb, len-2); 911 - memcpy(skb->data, self->rx_buff.data, len-2); 911 + skb_copy_to_linear_data(skb, 912 + self->rx_buff.data, 913 + len - 2); 912 914 } else { 913 915 skb_put(skb, len-4); 914 - memcpy(skb->data, self->rx_buff.data, len-4); 916 + skb_copy_to_linear_data(skb, 917 + self->rx_buff.data, 918 + len - 4); 915 919 } 916 920 917 921 /* Move to next frame */
+6 -3
drivers/net/ixgb/ixgb_main.c
··· 2017 2017 netdev_alloc_skb(netdev, length + NET_IP_ALIGN); 2018 2018 if (new_skb) { 2019 2019 skb_reserve(new_skb, NET_IP_ALIGN); 2020 - memcpy(new_skb->data - NET_IP_ALIGN, 2021 - skb->data - NET_IP_ALIGN, 2022 - length + NET_IP_ALIGN); 2020 + skb_copy_to_linear_data_offset(new_skb, 2021 + -NET_IP_ALIGN, 2022 + (skb->data - 2023 + NET_IP_ALIGN), 2024 + (length + 2025 + NET_IP_ALIGN)); 2023 2026 /* save the skb in buffer_info as good */ 2024 2027 buffer_info->skb = skb; 2025 2028 skb = new_skb;
+2 -1
drivers/net/loopback.c
··· 94 94 skb_set_mac_header(nskb, -ETH_HLEN); 95 95 skb_reset_network_header(nskb); 96 96 iph = ip_hdr(nskb); 97 - memcpy(nskb->data, skb_network_header(skb), doffset); 97 + skb_copy_to_linear_data(nskb, skb_network_header(skb), 98 + doffset); 98 99 if (skb_copy_bits(skb, 99 100 doffset + offset, 100 101 nskb->data + doffset,
+4 -3
drivers/net/macb.c
··· 367 367 BUG_ON(frag != last_frag); 368 368 frag_len = len - offset; 369 369 } 370 - memcpy(skb->data + offset, 371 - bp->rx_buffers + (RX_BUFFER_SIZE * frag), 372 - frag_len); 370 + skb_copy_to_linear_data_offset(skb, offset, 371 + (bp->rx_buffers + 372 + (RX_BUFFER_SIZE * frag)), 373 + frag_len); 373 374 offset += RX_BUFFER_SIZE; 374 375 bp->rx_ring[frag].addr &= ~MACB_BIT(RX_USED); 375 376 wmb();
+1 -1
drivers/net/myri10ge/myri10ge.c
··· 879 879 * skb_pull() (for ether_pad and eth_type_trans()) requires 880 880 * the beginning of the packet in skb_headlen(), move it 881 881 * manually */ 882 - memcpy(skb->data, va, hlen); 882 + skb_copy_to_linear_data(skb, va, hlen); 883 883 skb_shinfo(skb)->frags[0].page_offset += hlen; 884 884 skb_shinfo(skb)->frags[0].size -= hlen; 885 885 skb->data_len -= hlen;
+1 -1
drivers/net/sk98lin/skge.c
··· 2127 2127 (dma_addr_t) PhysAddr, 2128 2128 FrameLength, 2129 2129 PCI_DMA_FROMDEVICE); 2130 - memcpy(pNewMsg->data, pMsg, FrameLength); 2130 + skb_copy_to_linear_data(pNewMsg, pMsg, FrameLength); 2131 2131 2132 2132 pci_dma_sync_single_for_device(pAC->PciDev, 2133 2133 (dma_addr_t) PhysAddr,
+1 -1
drivers/net/skfp/skfddi.c
··· 1937 1937 } 1938 1938 skb_reserve(skb, 3); 1939 1939 skb_put(skb, len); 1940 - memcpy(skb->data, look_ahead, len); 1940 + skb_copy_to_linear_data(skb, look_ahead, len); 1941 1941 1942 1942 // deliver frame to system 1943 1943 skb->protocol = fddi_type_trans(skb, smc->os.dev);
+1 -1
drivers/net/sun3lance.c
··· 853 853 854 854 skb_reserve( skb, 2 ); /* 16 byte align */ 855 855 skb_put( skb, pkt_len ); /* Make room */ 856 - // memcpy( skb->data, PKTBUF_ADDR(head), pkt_len ); 856 + // skb_copy_to_linear_data(skb, PKTBUF_ADDR(head), pkt_len); 857 857 eth_copy_and_sum(skb, 858 858 PKTBUF_ADDR(head), 859 859 pkt_len, 0);
+2 -2
drivers/net/tokenring/smctr.c
··· 3889 3889 3890 3890 /* Slide data into a sleek skb. */ 3891 3891 skb_put(skb, skb->len); 3892 - memcpy(skb->data, rmf, skb->len); 3892 + skb_copy_to_linear_data(skb, rmf, skb->len); 3893 3893 3894 3894 /* Update Counters */ 3895 3895 tp->MacStat.rx_packets++; ··· 4475 4475 if (skb) { 4476 4476 skb_put(skb, rx_size); 4477 4477 4478 - memcpy(skb->data, pbuff, rx_size); 4478 + skb_copy_to_linear_data(skb, pbuff, rx_size); 4479 4479 4480 4480 /* Update Counters */ 4481 4481 tp->MacStat.rx_packets++;
+2 -1
drivers/net/tokenring/tms380tr.c
··· 2178 2178 || rpl->SkbStat == SKB_DMA_DIRECT)) 2179 2179 { 2180 2180 if(rpl->SkbStat == SKB_DATA_COPY) 2181 - memcpy(skb->data, ReceiveDataPtr, Length); 2181 + skb_copy_to_linear_data(skb, ReceiveDataPtr, 2182 + Length); 2182 2183 2183 2184 /* Deliver frame to system */ 2184 2185 rpl->Skb = NULL;
+2 -1
drivers/net/wan/dscc4.c
··· 1904 1904 struct TxFD *tx_fd = dpriv->tx_fd + last; 1905 1905 1906 1906 skb->len = DUMMY_SKB_SIZE; 1907 - memcpy(skb->data, version, strlen(version)%DUMMY_SKB_SIZE); 1907 + skb_copy_to_linear_data(skb, version, 1908 + strlen(version) % DUMMY_SKB_SIZE); 1908 1909 tx_fd->state = FrameEnd | TO_STATE_TX(DUMMY_SKB_SIZE); 1909 1910 tx_fd->data = pci_map_single(dpriv->pci_priv->pdev, skb->data, 1910 1911 DUMMY_SKB_SIZE, PCI_DMA_TODEVICE);
+1 -1
drivers/net/wan/pc300_drv.c
··· 1759 1759 skb->pkt_type = PACKET_HOST; 1760 1760 skb->len = 10 + skb_main->len; 1761 1761 1762 - memcpy(skb->data, dev->name, 5); 1762 + skb_copy_to_linear_data(skb, dev->name, 5); 1763 1763 skb->data[5] = '['; 1764 1764 skb->data[6] = rx_tx; 1765 1765 skb->data[7] = ']';
+2 -2
drivers/net/wan/pc300_tty.c
··· 1007 1007 skb->pkt_type = PACKET_HOST; 1008 1008 skb->len = 10 + len; 1009 1009 1010 - memcpy(skb->data,dev->dev->name,5); 1010 + skb_copy_to_linear_data(skb, dev->dev->name, 5); 1011 1011 skb->data[5] = '['; 1012 1012 skb->data[6] = rxtx; 1013 1013 skb->data[7] = ']'; 1014 1014 skb->data[8] = ':'; 1015 1015 skb->data[9] = ' '; 1016 - memcpy(&skb->data[10], buf, len); 1016 + skb_copy_to_linear_data_offset(skb, 10, buf, len); 1017 1017 netif_rx(skb); 1018 1018 } 1019 1019
+1 -1
drivers/net/wan/z85230.c
··· 1656 1656 else 1657 1657 { 1658 1658 skb_put(skb, ct); 1659 - memcpy(skb->data, rxb, ct); 1659 + skb_copy_to_linear_data(skb, rxb, ct); 1660 1660 c->stats.rx_packets++; 1661 1661 c->stats.rx_bytes+=ct; 1662 1662 }
+2 -2
drivers/net/wireless/prism54/islpci_eth.c
··· 136 136 printk("islpci_eth_transmit:wds_mac\n"); 137 137 #endif 138 138 memmove(skb->data + 6, src, skb->len); 139 - memcpy(skb->data, wds_mac, 6); 139 + skb_copy_to_linear_data(skb, wds_mac, 6); 140 140 } else { 141 141 memmove(skb->data, src, skb->len); 142 142 } ··· 165 165 skb_copy_from_linear_data(skb, 166 166 newskb->data + 6, 167 167 skb->len); 168 - memcpy(newskb->data, wds_mac, 6); 168 + skb_copy_to_linear_data(newskb, wds_mac, 6); 169 169 #ifdef ISLPCI_ETH_DEBUG 170 170 printk("islpci_eth_transmit:wds_mac\n"); 171 171 #endif
+5 -4
drivers/s390/net/qeth_main.c
··· 2501 2501 vlan_tag = qeth_rebuild_skb(card, skb, hdr); 2502 2502 else { /*in case of OSN*/ 2503 2503 skb_push(skb, sizeof(struct qeth_hdr)); 2504 - memcpy(skb->data, hdr, sizeof(struct qeth_hdr)); 2504 + skb_copy_to_linear_data(skb, hdr, 2505 + sizeof(struct qeth_hdr)); 2505 2506 } 2506 2507 /* is device UP ? */ 2507 2508 if (!(card->dev->flags & IFF_UP)){ ··· 3871 3870 * memcpys instead of one memmove to save cycles. 3872 3871 */ 3873 3872 skb_push(skb, VLAN_HLEN); 3874 - memcpy(skb->data, skb->data + 4, 4); 3875 - memcpy(skb->data + 4, skb->data + 8, 4); 3876 - memcpy(skb->data + 8, skb->data + 12, 4); 3873 + skb_copy_to_linear_data(skb, skb->data + 4, 4); 3874 + skb_copy_to_linear_data_offset(skb, 4, skb->data + 8, 4); 3875 + skb_copy_to_linear_data_offset(skb, 8, skb->data + 12, 4); 3877 3876 tag = (u16 *)(skb->data + 12); 3878 3877 /* 3879 3878 * first two bytes = ETH_P_8021Q (0x8100)
+3 -1
drivers/usb/atm/usbatm.c
··· 396 396 goto out; /* atm_charge increments rx_drop */ 397 397 } 398 398 399 - memcpy(skb->data, skb_tail_pointer(sarb) - pdu_length, length); 399 + skb_copy_to_linear_data(skb, 400 + skb_tail_pointer(sarb) - pdu_length, 401 + length); 400 402 __skb_put(skb, length); 401 403 402 404 vdbg("%s: sending skb 0x%p, skb->len %u, skb->truesize %u",
+1 -1
drivers/usb/net/asix.c
··· 352 352 skb_push(skb, 4); 353 353 packet_len = (((skb->len - 4) ^ 0x0000ffff) << 16) + (skb->len - 4); 354 354 cpu_to_le32s(&packet_len); 355 - memcpy(skb->data, &packet_len, sizeof(packet_len)); 355 + skb_copy_to_linear_data(skb, &packet_len, sizeof(packet_len)); 356 356 357 357 if ((skb->len % 512) == 0) { 358 358 cpu_to_le32s(&padbytes);
+15
include/linux/skbuff.h
··· 1521 1521 memcpy(to, skb->data + offset, len); 1522 1522 } 1523 1523 1524 + static inline void skb_copy_to_linear_data(struct sk_buff *skb, 1525 + const void *from, 1526 + const unsigned int len) 1527 + { 1528 + memcpy(skb->data, from, len); 1529 + } 1530 + 1531 + static inline void skb_copy_to_linear_data_offset(struct sk_buff *skb, 1532 + const int offset, 1533 + const void *from, 1534 + const unsigned int len) 1535 + { 1536 + memcpy(skb->data + offset, from, len); 1537 + } 1538 + 1524 1539 extern void skb_init(void); 1525 1540 1526 1541 /**
+1 -1
net/atm/br2684.c
··· 173 173 } 174 174 skb_push(skb, minheadroom); 175 175 if (brvcc->encaps == e_llc) 176 - memcpy(skb->data, llc_oui_pid_pad, 10); 176 + skb_copy_to_linear_data(skb, llc_oui_pid_pad, 10); 177 177 else 178 178 memset(skb->data, 0, 2); 179 179 #endif /* FASTER_VERSION */
+4 -4
net/atm/lec.c
··· 576 576 break; 577 577 } 578 578 skb2->len = sizeof(struct atmlec_msg); 579 - memcpy(skb2->data, mesg, 580 - sizeof(struct atmlec_msg)); 579 + skb_copy_to_linear_data(skb2, mesg, 580 + sizeof(*mesg)); 581 581 atm_force_charge(priv->lecd, skb2->truesize); 582 582 sk = sk_atm(priv->lecd); 583 583 skb_queue_tail(&sk->sk_receive_queue, skb2); ··· 1337 1337 if (skb == NULL) 1338 1338 return -1; 1339 1339 skb->len = *sizeoftlvs; 1340 - memcpy(skb->data, *tlvs, *sizeoftlvs); 1340 + skb_copy_to_linear_data(skb, *tlvs, *sizeoftlvs); 1341 1341 retval = send_to_lecd(priv, l_arp_xmt, dst_mac, NULL, skb); 1342 1342 } 1343 1343 return retval; ··· 1371 1371 if (skb == NULL) 1372 1372 return 0; 1373 1373 skb->len = sizeoftlvs; 1374 - memcpy(skb->data, tlvs, sizeoftlvs); 1374 + skb_copy_to_linear_data(skb, tlvs, sizeoftlvs); 1375 1375 retval = send_to_lecd(priv, l_associate_req, NULL, NULL, skb); 1376 1376 if (retval != 0) 1377 1377 printk("lec.c: lane2_associate_req() failed\n");
+7 -4
net/atm/mpc.c
··· 504 504 tagged_llc_snap_hdr.tag = entry->ctrl_info.tag; 505 505 skb_pull(skb, ETH_HLEN); /* get rid of Eth header */ 506 506 skb_push(skb, sizeof(tagged_llc_snap_hdr)); /* add LLC/SNAP header */ 507 - memcpy(skb->data, &tagged_llc_snap_hdr, sizeof(tagged_llc_snap_hdr)); 507 + skb_copy_to_linear_data(skb, &tagged_llc_snap_hdr, 508 + sizeof(tagged_llc_snap_hdr)); 508 509 } else { 509 510 skb_pull(skb, ETH_HLEN); /* get rid of Eth header */ 510 511 skb_push(skb, sizeof(struct llc_snap_hdr)); /* add LLC/SNAP header + tag */ 511 - memcpy(skb->data, &llc_snap_mpoa_data, sizeof(struct llc_snap_hdr)); 512 + skb_copy_to_linear_data(skb, &llc_snap_mpoa_data, 513 + sizeof(struct llc_snap_hdr)); 512 514 } 513 515 514 516 atomic_add(skb->truesize, &sk_atm(entry->shortcut)->sk_wmem_alloc); ··· 713 711 return; 714 712 } 715 713 skb_push(new_skb, eg->ctrl_info.DH_length); /* add MAC header */ 716 - memcpy(new_skb->data, eg->ctrl_info.DLL_header, eg->ctrl_info.DH_length); 714 + skb_copy_to_linear_data(new_skb, eg->ctrl_info.DLL_header, 715 + eg->ctrl_info.DH_length); 717 716 new_skb->protocol = eth_type_trans(new_skb, dev); 718 717 skb_reset_network_header(new_skb); 719 718 ··· 939 936 if (skb == NULL) 940 937 return -ENOMEM; 941 938 skb_put(skb, sizeof(struct k_message)); 942 - memcpy(skb->data, mesg, sizeof(struct k_message)); 939 + skb_copy_to_linear_data(skb, mesg, sizeof(*mesg)); 943 940 atm_force_charge(mpc->mpoad_vcc, skb->truesize); 944 941 945 942 sk = sk_atm(mpc->mpoad_vcc);
+2 -1
net/bridge/br_netfilter.c
··· 149 149 if (err) 150 150 return err; 151 151 152 - memcpy(skb->data - header_size, skb->nf_bridge->data, header_size); 152 + skb_copy_to_linear_data_offset(skb, -header_size, 153 + skb->nf_bridge->data, header_size); 153 154 154 155 if (skb->protocol == htons(ETH_P_8021Q)) 155 156 __skb_push(skb, VLAN_HLEN);
+1 -1
net/core/netpoll.c
··· 293 293 if (!skb) 294 294 return; 295 295 296 - memcpy(skb->data, msg, len); 296 + skb_copy_to_linear_data(skb, msg, len); 297 297 skb->len += len; 298 298 299 299 skb_push(skb, sizeof(*udph));
+1 -1
net/core/skbuff.c
··· 1129 1129 if ((copy = start - offset) > 0) { 1130 1130 if (copy > len) 1131 1131 copy = len; 1132 - memcpy(skb->data + offset, from, copy); 1132 + skb_copy_to_linear_data_offset(skb, offset, from, copy); 1133 1133 if ((len -= copy) == 0) 1134 1134 return 0; 1135 1135 offset += copy;
+3 -2
net/ieee80211/ieee80211_rx.c
··· 759 759 IEEE80211_FCTL_TODS) && skb->len >= ETH_HLEN + ETH_ALEN) { 760 760 /* Non-standard frame: get addr4 from its bogus location after 761 761 * the payload */ 762 - memcpy(skb->data + ETH_ALEN, 763 - skb->data + skb->len - ETH_ALEN, ETH_ALEN); 762 + skb_copy_to_linear_data_offset(skb, ETH_ALEN, 763 + skb->data + skb->len - ETH_ALEN, 764 + ETH_ALEN); 764 765 skb_trim(skb, skb->len - ETH_ALEN); 765 766 } 766 767 #endif
+1 -1
net/ipv4/ipcomp.c
··· 66 66 67 67 skb->truesize += dlen - plen; 68 68 __skb_put(skb, dlen - plen); 69 - memcpy(skb->data, scratch, dlen); 69 + skb_copy_to_linear_data(skb, scratch, dlen); 70 70 out: 71 71 put_cpu(); 72 72 return err;
+1 -1
net/ipv4/ipmr.c
··· 584 584 585 585 skb->network_header = skb->tail; 586 586 skb_put(skb, ihl); 587 - memcpy(skb->data,pkt->data,ihl); 587 + skb_copy_to_linear_data(skb, pkt->data, ihl); 588 588 ip_hdr(skb)->protocol = 0; /* Flag to the kernel this is a route add */ 589 589 msg = (struct igmpmsg *)skb_network_header(skb); 590 590 msg->im_vif = vifi;
+1 -1
net/ipv4/ipvs/ip_vs_app.c
··· 602 602 skb_put(skb, diff); 603 603 memmove(skb->data + o_offset + n_len, 604 604 skb->data + o_offset + o_len, o_left); 605 - memcpy(skb->data + o_offset, n_buf, n_len); 605 + skb_copy_to_linear_data_offset(skb, o_offset, n_buf, n_len); 606 606 } 607 607 608 608 /* must update the iph total length here */
+1 -1
net/ipv4/netfilter/ip_queue.c
··· 368 368 } 369 369 if (!skb_make_writable(&e->skb, v->data_len)) 370 370 return -ENOMEM; 371 - memcpy(e->skb->data, v->payload, v->data_len); 371 + skb_copy_to_linear_data(e->skb, v->payload, v->data_len); 372 372 e->skb->ip_summed = CHECKSUM_NONE; 373 373 374 374 return 0;
+1 -1
net/ipv6/ipcomp6.c
··· 111 111 112 112 skb->truesize += dlen - plen; 113 113 __skb_put(skb, dlen - plen); 114 - memcpy(skb->data, scratch, dlen); 114 + skb_copy_to_linear_data(skb, scratch, dlen); 115 115 err = ipch->nexthdr; 116 116 117 117 out_put_cpu:
+1 -1
net/ipv6/netfilter/ip6_queue.c
··· 366 366 } 367 367 if (!skb_make_writable(&e->skb, v->data_len)) 368 368 return -ENOMEM; 369 - memcpy(e->skb->data, v->payload, v->data_len); 369 + skb_copy_to_linear_data(e->skb, v->payload, v->data_len); 370 370 e->skb->ip_summed = CHECKSUM_NONE; 371 371 372 372 return 0;
+1 -1
net/irda/irttp.c
··· 256 256 * Copy all fragments to a new buffer 257 257 */ 258 258 while ((frag = skb_dequeue(&self->rx_fragments)) != NULL) { 259 - memcpy(skb->data+n, frag->data, frag->len); 259 + skb_copy_to_linear_data_offset(skb, n, frag->data, frag->len); 260 260 n += frag->len; 261 261 262 262 dev_kfree_skb(frag);
+2 -1
net/irda/wrapper.c
··· 239 239 240 240 if(docopy) { 241 241 /* Copy data without CRC (lenght already checked) */ 242 - memcpy(newskb->data, rx_buff->data, rx_buff->len - 2); 242 + skb_copy_to_linear_data(newskb, rx_buff->data, 243 + rx_buff->len - 2); 243 244 /* Deliver this skb */ 244 245 dataskb = newskb; 245 246 } else {
+2 -2
net/netrom/nr_out.c
··· 59 59 60 60 /* Duplicate the Transport Header */ 61 61 skb_push(skbn, NR_TRANSPORT_LEN); 62 - memcpy(skbn->data, transport, NR_TRANSPORT_LEN); 63 - 62 + skb_copy_to_linear_data(skbn, transport, 63 + NR_TRANSPORT_LEN); 64 64 if (skb->len > 0) 65 65 skbn->data[4] |= NR_MORE_FLAG; 66 66
+1 -1
net/rose/af_rose.c
··· 1181 1181 1182 1182 /* Duplicate the Header */ 1183 1183 skb_push(skbn, ROSE_MIN_LEN); 1184 - memcpy(skbn->data, header, ROSE_MIN_LEN); 1184 + skb_copy_to_linear_data(skbn, header, ROSE_MIN_LEN); 1185 1185 1186 1186 if (skb->len > 0) 1187 1187 skbn->data[2] |= M_BIT;
+24 -22
net/tipc/link.c
··· 1001 1001 return 0; 1002 1002 1003 1003 skb_put(bundler, pad + size); 1004 - memcpy(bundler->data + to_pos, buf->data, size); 1004 + skb_copy_to_linear_data_offset(bundler, to_pos, buf->data, size); 1005 1005 msg_set_size(bundler_msg, to_pos + size); 1006 1006 msg_set_msgcnt(bundler_msg, msg_msgcnt(bundler_msg) + 1); 1007 1007 dbg("Packed msg # %u(%u octets) into pos %u in buf(#%u)\n", ··· 1109 1109 if (bundler) { 1110 1110 msg_init(&bundler_hdr, MSG_BUNDLER, OPEN_MSG, 1111 1111 TIPC_OK, INT_H_SIZE, l_ptr->addr); 1112 - memcpy(bundler->data, (unchar *)&bundler_hdr, 1113 - INT_H_SIZE); 1112 + skb_copy_to_linear_data(bundler, &bundler_hdr, 1113 + INT_H_SIZE); 1114 1114 skb_trim(bundler, INT_H_SIZE); 1115 1115 link_bundle_buf(l_ptr, bundler, buf); 1116 1116 buf = bundler; ··· 1383 1383 if (!buf) 1384 1384 return -ENOMEM; 1385 1385 buf->next = NULL; 1386 - memcpy(buf->data, (unchar *)&fragm_hdr, INT_H_SIZE); 1386 + skb_copy_to_linear_data(buf, &fragm_hdr, INT_H_SIZE); 1387 1387 hsz = msg_hdr_sz(hdr); 1388 - memcpy(buf->data + INT_H_SIZE, (unchar *)hdr, hsz); 1388 + skb_copy_to_linear_data_offset(buf, INT_H_SIZE, hdr, hsz); 1389 1389 msg_dbg(buf_msg(buf), ">BUILD>"); 1390 1390 1391 1391 /* Chop up message: */ ··· 1416 1416 return -EFAULT; 1417 1417 } 1418 1418 } else 1419 - memcpy(buf->data + fragm_crs, sect_crs, sz); 1420 - 1419 + skb_copy_to_linear_data_offset(buf, fragm_crs, 1420 + sect_crs, sz); 1421 1421 sect_crs += sz; 1422 1422 sect_rest -= sz; 1423 1423 fragm_crs += sz; ··· 1442 1442 1443 1443 buf->next = NULL; 1444 1444 prev->next = buf; 1445 - memcpy(buf->data, (unchar *)&fragm_hdr, INT_H_SIZE); 1445 + skb_copy_to_linear_data(buf, &fragm_hdr, INT_H_SIZE); 1446 1446 fragm_crs = INT_H_SIZE; 1447 1447 fragm_rest = fragm_sz; 1448 1448 msg_dbg(buf_msg(buf)," >BUILD>"); ··· 2130 2130 buf = l_ptr->proto_msg_queue; 2131 2131 if (!buf) 2132 2132 return; 2133 - memcpy(buf->data, (unchar *)msg, sizeof(l_ptr->proto_msg)); 2133 + skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg)); 2134 2134 return; 2135 2135 } 2136 2136 msg_set_timestamp(msg, jiffies_to_msecs(jiffies)); ··· 2143 2143 if (!buf) 2144 2144 return; 2145 2145 2146 - memcpy(buf->data, (unchar *)msg, sizeof(l_ptr->proto_msg)); 2146 + skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg)); 2147 2147 msg_set_size(buf_msg(buf), msg_size); 2148 2148 2149 2149 if (tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr)) { ··· 2319 2319 "unable to send tunnel msg\n"); 2320 2320 return; 2321 2321 } 2322 - memcpy(buf->data, (unchar *)tunnel_hdr, INT_H_SIZE); 2323 - memcpy(buf->data + INT_H_SIZE, (unchar *)msg, length); 2322 + skb_copy_to_linear_data(buf, tunnel_hdr, INT_H_SIZE); 2323 + skb_copy_to_linear_data_offset(buf, INT_H_SIZE, msg, length); 2324 2324 dbg("%c->%c:", l_ptr->b_ptr->net_plane, tunnel->b_ptr->net_plane); 2325 2325 msg_dbg(buf_msg(buf), ">SEND>"); 2326 2326 tipc_link_send_buf(tunnel, buf); ··· 2361 2361 2362 2362 buf = buf_acquire(INT_H_SIZE); 2363 2363 if (buf) { 2364 - memcpy(buf->data, (unchar *)&tunnel_hdr, INT_H_SIZE); 2364 + skb_copy_to_linear_data(buf, &tunnel_hdr, INT_H_SIZE); 2365 2365 msg_set_size(&tunnel_hdr, INT_H_SIZE); 2366 2366 dbg("%c->%c:", l_ptr->b_ptr->net_plane, 2367 2367 tunnel->b_ptr->net_plane); ··· 2426 2426 "unable to send duplicate msg\n"); 2427 2427 return; 2428 2428 } 2429 - memcpy(outbuf->data, (unchar *)&tunnel_hdr, INT_H_SIZE); 2430 - memcpy(outbuf->data + INT_H_SIZE, iter->data, length); 2429 + skb_copy_to_linear_data(outbuf, &tunnel_hdr, INT_H_SIZE); 2430 + skb_copy_to_linear_data_offset(outbuf, INT_H_SIZE, iter->data, 2431 + length); 2431 2432 dbg("%c->%c:", l_ptr->b_ptr->net_plane, 2432 2433 tunnel->b_ptr->net_plane); 2433 2434 msg_dbg(buf_msg(outbuf), ">SEND>"); ··· 2458 2457 2459 2458 eb = buf_acquire(size); 2460 2459 if (eb) 2461 - memcpy(eb->data, (unchar *)msg, size); 2460 + skb_copy_to_linear_data(eb, msg, size); 2462 2461 return eb; 2463 2462 } 2464 2463 ··· 2632 2631 goto exit; 2633 2632 } 2634 2633 msg_set_size(&fragm_hdr, fragm_sz + INT_H_SIZE); 2635 - memcpy(fragm->data, (unchar *)&fragm_hdr, INT_H_SIZE); 2636 - memcpy(fragm->data + INT_H_SIZE, crs, fragm_sz); 2637 - 2634 + skb_copy_to_linear_data(fragm, &fragm_hdr, INT_H_SIZE); 2635 + skb_copy_to_linear_data_offset(fragm, INT_H_SIZE, crs, 2636 + fragm_sz); 2638 2637 /* Send queued messages first, if any: */ 2639 2638 2640 2639 l_ptr->stats.sent_fragments++; ··· 2734 2733 if (pbuf != NULL) { 2735 2734 pbuf->next = *pending; 2736 2735 *pending = pbuf; 2737 - memcpy(pbuf->data, (unchar *)imsg, msg_data_sz(fragm)); 2738 - 2736 + skb_copy_to_linear_data(pbuf, imsg, 2737 + msg_data_sz(fragm)); 2739 2738 /* Prepare buffer for subsequent fragments. */ 2740 2739 2741 2740 set_long_msg_seqno(pbuf, long_msg_seq_no); ··· 2751 2750 u32 fsz = get_fragm_size(pbuf); 2752 2751 u32 crs = ((msg_fragm_no(fragm) - 1) * fsz); 2753 2752 u32 exp_frags = get_expected_frags(pbuf) - 1; 2754 - memcpy(pbuf->data + crs, msg_data(fragm), dsz); 2753 + skb_copy_to_linear_data_offset(pbuf, crs, 2754 + msg_data(fragm), dsz); 2755 2755 buf_discard(fbuf); 2756 2756 2757 2757 /* Is message complete? */
+4 -3
net/tipc/msg.h
··· 786 786 *buf = buf_acquire(sz); 787 787 if (!(*buf)) 788 788 return -ENOMEM; 789 - memcpy((*buf)->data, (unchar *)hdr, hsz); 789 + skb_copy_to_linear_data(*buf, hdr, hsz); 790 790 for (res = 1, cnt = 0; res && (cnt < num_sect); cnt++) { 791 791 if (likely(usrmem)) 792 792 res = !copy_from_user((*buf)->data + pos, 793 793 msg_sect[cnt].iov_base, 794 794 msg_sect[cnt].iov_len); 795 795 else 796 - memcpy((*buf)->data + pos, msg_sect[cnt].iov_base, 797 - msg_sect[cnt].iov_len); 796 + skb_copy_to_linear_data_offset(*buf, pos, 797 + msg_sect[cnt].iov_base, 798 + msg_sect[cnt].iov_len); 798 799 pos += msg_sect[cnt].iov_len; 799 800 } 800 801 if (likely(res))
+4 -4
net/tipc/port.c
··· 464 464 msg_set_size(rmsg, data_sz + hdr_sz); 465 465 msg_set_nametype(rmsg, msg_nametype(msg)); 466 466 msg_set_nameinst(rmsg, msg_nameinst(msg)); 467 - memcpy(rbuf->data + hdr_sz, msg_data(msg), data_sz); 467 + skb_copy_to_linear_data_offset(rbuf, hdr_sz, msg_data(msg), data_sz); 468 468 469 469 /* send self-abort message when rejecting on a connected port */ 470 470 if (msg_connected(msg)) { ··· 1419 1419 return -ENOMEM; 1420 1420 1421 1421 skb_push(buf, hsz); 1422 - memcpy(buf->data, (unchar *)msg, hsz); 1422 + skb_copy_to_linear_data(buf, msg, hsz); 1423 1423 destnode = msg_destnode(msg); 1424 1424 p_ptr->publ.congested = 1; 1425 1425 if (!tipc_port_congested(p_ptr)) { ··· 1555 1555 if (skb_cow(buf, LONG_H_SIZE)) 1556 1556 return -ENOMEM; 1557 1557 skb_push(buf, LONG_H_SIZE); 1558 - memcpy(buf->data, (unchar *)msg, LONG_H_SIZE); 1558 + skb_copy_to_linear_data(buf, msg, LONG_H_SIZE); 1559 1559 msg_dbg(buf_msg(buf),"PREP:"); 1560 1560 if (likely(destport || destnode)) { 1561 1561 p_ptr->sent++; ··· 1679 1679 return -ENOMEM; 1680 1680 1681 1681 skb_push(buf, DIR_MSG_H_SIZE); 1682 - memcpy(buf->data, (unchar *)msg, DIR_MSG_H_SIZE); 1682 + skb_copy_to_linear_data(buf, msg, DIR_MSG_H_SIZE); 1683 1683 msg_dbg(msg, "buf2port: "); 1684 1684 p_ptr->sent++; 1685 1685 if (dest->node == tipc_own_addr)
+2 -2
net/wanrouter/wanmain.c
··· 277 277 skb_push(skb, 7); 278 278 skb->data[0] = 0; 279 279 skb->data[1] = NLPID_SNAP; 280 - memcpy(&skb->data[2], wanrouter_oui_ether, 281 - sizeof(wanrouter_oui_ether)); 280 + skb_copy_to_linear_data_offset(skb, 2, wanrouter_oui_ether, 281 + sizeof(wanrouter_oui_ether)); 282 282 *((unsigned short*)&skb->data[5]) = htons(type); 283 283 break; 284 284
+1 -1
net/x25/x25_out.c
··· 89 89 90 90 /* Duplicate the Header */ 91 91 skb_push(skbn, header_len); 92 - memcpy(skbn->data, header, header_len); 92 + skb_copy_to_linear_data(skbn, header, header_len); 93 93 94 94 if (skb->len > 0) { 95 95 if (x25->neighbour->extended)