Staging: vt6656: replace memcpy() by ether_addr_copy() using coccinelle and pack...
authoraybuke ozdemir <aybuke.147@gmail.com>
Sun, 22 Feb 2015 13:27:56 +0000 (15:27 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 26 Feb 2015 20:23:58 +0000 (12:23 -0800)
This patch focuses on fixing the following warning generated
by checkpatch.pl for the file rxtx.c

Prefer ether_addr_copy() over memcpy() if the Ethernet addresses
are __aligned(2)

@@ expression e1, e2; @@

- memcpy(e1, e2, ETH_ALEN);
+ ether_addr_copy(e1, e2);

According to ether_addr_copy() description and functionality,
all Ethernet addresses should align to the u16 datatype.
The changes were applied using the following coccinelle rule:

Here is the output of pahole for the relevant datastructures:
struct vnt_usb_send_context {
        void *                     priv;                 /*     0     8*/
        struct sk_buff *           skb;                  /*     8     8*/
        struct urb *               urb;                  /*    16     8*/
        struct ieee80211_hdr *     hdr;                  /*    24     8*/
        unsigned int               buf_len;              /*    32     4*/
        u32                        frame_len;            /*    36     4*/
        u16                        tx_hdr_size;          /*    40     2*/
        u16                        tx_rate;              /*    42     2*/
        u8                         type;                 /*    44     1*/
        u8                         pkt_no;               /*    45     1*/
        u8                         pkt_type;             /*    46     1*/
        u8                         need_ack;             /*    47     1*/
        u8                         fb_option;            /*    48     1*/
        bool                       in_use;               /*    49     1*/
        unsigned char              data[2900];           /*    50  2900*/
        /* --- cacheline 46 boundary (2944 bytes) was 6 bytes ago --- */

        /* size: 2952, cachelines: 47, members: 15 */
        /* padding: 2 */
        /* last cacheline: 8 bytes */
};

struct ieee80211_key_conf {
        u32                        cipher;               /*     0     4*/
        u8                         icv_len;              /*     4     1*/
        u8                         iv_len;               /*     5     1*/
        u8                         hw_key_idx;           /*     6     1*/
        u8                         flags;                /*     7     1*/
        s8                         keyidx;               /*     8     1*/
        u8                         keylen;               /*     9     1*/
        u8                         key[0];               /*    10     0*/

        /* size: 12, cachelines: 1, members: 8 */
        /* padding: 2 */
        /* last cacheline: 12 bytes */
};

struct vnt_mic_hdr {
        u8                         id;                   /*     0     1*/
        u8                         tx_priority;          /*     1     1*/
        u8                         mic_addr2[6];         /*     2     6*/
        u8                         ccmp_pn[6];           /*     8     6*/
        __be16                     payload_len;          /*    14     2*/
        __be16                     hlen;                 /*    16     2*/
        __le16                     frame_control;        /*    18     2*/
        u8                         addr1[6];             /*    20     6*/
        u8                         addr2[6];             /*    26     6*/
        u8                         addr3[6];             /*    32     6*/
        __le16                     seq_ctrl;             /*    38     2*/
        u8                         addr4[6];             /*    40     6*/
        u16                        packing;              /*    46     2*/

        /* size: 48, cachelines: 1, members: 13 */
        /* last cacheline: 48 bytes */
};

Signed-off-by: aybuke ozdemir <aybuke.147@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vt6656/rxtx.c

index 33baf26de4b581b1a354f872baa536466f920c09..f6c2cf8590c4811471a88c9e82be1d4151a11618 100644 (file)
@@ -755,9 +755,9 @@ static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context,
                else
                        mic_hdr->hlen = cpu_to_be16(22);
 
-               memcpy(mic_hdr->addr1, hdr->addr1, ETH_ALEN);
-               memcpy(mic_hdr->addr2, hdr->addr2, ETH_ALEN);
-               memcpy(mic_hdr->addr3, hdr->addr3, ETH_ALEN);
+               ether_addr_copy(mic_hdr->addr1, hdr->addr1);
+               ether_addr_copy(mic_hdr->addr2, hdr->addr2);
+               ether_addr_copy(mic_hdr->addr3, hdr->addr3);
 
                mic_hdr->frame_control = cpu_to_le16(
                        le16_to_cpu(hdr->frame_control) & 0xc78f);
@@ -765,7 +765,7 @@ static void vnt_fill_txkey(struct vnt_usb_send_context *tx_context,
                                le16_to_cpu(hdr->seq_ctrl) & 0xf);
 
                if (ieee80211_has_a4(hdr->frame_control))
-                       memcpy(mic_hdr->addr4, hdr->addr4, ETH_ALEN);
+                       ether_addr_copy(mic_hdr->addr4, hdr->addr4);
 
 
                memcpy(key_buffer, tx_key->key, WLAN_KEY_LEN_CCMP);