sfc: Cache skb->data in local variable in efx_ptp_rx()
authorBen Hutchings <bhutchings@solarflare.com>
Wed, 12 Feb 2014 18:58:34 +0000 (18:58 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Feb 2014 22:53:33 +0000 (17:53 -0500)
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Shradha Shah <sshah@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/ptp.c

index 52be63dc68cf9220194677076da6d8153e247c8d..7d0de5002f4112ef985e458d2af45f14bf313196 100644 (file)
@@ -1366,6 +1366,7 @@ static bool efx_ptp_rx(struct efx_channel *channel, struct sk_buff *skb)
        struct efx_ptp_match *match = (struct efx_ptp_match *)skb->cb;
        u8 *match_data_012, *match_data_345;
        unsigned int version;
+       u8 *data;
 
        match->expiry = jiffies + msecs_to_jiffies(PKT_EVENT_LIFETIME_MS);
 
@@ -1374,7 +1375,8 @@ static bool efx_ptp_rx(struct efx_channel *channel, struct sk_buff *skb)
                if (!pskb_may_pull(skb, PTP_V1_MIN_LENGTH)) {
                        return false;
                }
-               version = ntohs(*(__be16 *)&skb->data[PTP_V1_VERSION_OFFSET]);
+               data = skb->data;
+               version = ntohs(*(__be16 *)&data[PTP_V1_VERSION_OFFSET]);
                if (version != PTP_VERSION_V1) {
                        return false;
                }
@@ -1382,13 +1384,14 @@ static bool efx_ptp_rx(struct efx_channel *channel, struct sk_buff *skb)
                /* PTP V1 uses all six bytes of the UUID to match the packet
                 * to the timestamp
                 */
-               match_data_012 = skb->data + PTP_V1_UUID_OFFSET;
-               match_data_345 = skb->data + PTP_V1_UUID_OFFSET + 3;
+               match_data_012 = data + PTP_V1_UUID_OFFSET;
+               match_data_345 = data + PTP_V1_UUID_OFFSET + 3;
        } else {
                if (!pskb_may_pull(skb, PTP_V2_MIN_LENGTH)) {
                        return false;
                }
-               version = skb->data[PTP_V2_VERSION_OFFSET];
+               data = skb->data;
+               version = data[PTP_V2_VERSION_OFFSET];
                if ((version & PTP_VERSION_V2_MASK) != PTP_VERSION_V2) {
                        return false;
                }
@@ -1400,17 +1403,17 @@ static bool efx_ptp_rx(struct efx_channel *channel, struct sk_buff *skb)
                 * enhanced mode fixes this issue and uses bytes 0-2
                 * and byte 5-7 of the UUID.
                 */
-               match_data_345 = skb->data + PTP_V2_UUID_OFFSET + 5;
+               match_data_345 = data + PTP_V2_UUID_OFFSET + 5;
                if (ptp->mode == MC_CMD_PTP_MODE_V2) {
-                       match_data_012 = skb->data + PTP_V2_UUID_OFFSET + 2;
+                       match_data_012 = data + PTP_V2_UUID_OFFSET + 2;
                } else {
-                       match_data_012 = skb->data + PTP_V2_UUID_OFFSET + 0;
+                       match_data_012 = data + PTP_V2_UUID_OFFSET + 0;
                        BUG_ON(ptp->mode != MC_CMD_PTP_MODE_V2_ENHANCED);
                }
        }
 
        /* Does this packet require timestamping? */
-       if (ntohs(*(__be16 *)&skb->data[PTP_DPORT_OFFSET]) == PTP_EVENT_PORT) {
+       if (ntohs(*(__be16 *)&data[PTP_DPORT_OFFSET]) == PTP_EVENT_PORT) {
                match->state = PTP_PACKET_STATE_UNMATCHED;
 
                /* We expect the sequence number to be in the same position in
@@ -1426,8 +1429,8 @@ static bool efx_ptp_rx(struct efx_channel *channel, struct sk_buff *skb)
                                   (match_data_345[0] << 24));
                match->words[1] = (match_data_345[1]         |
                                   (match_data_345[2] << 8)  |
-                                  (skb->data[PTP_V1_SEQUENCE_OFFSET +
-                                             PTP_V1_SEQUENCE_LENGTH - 1] <<
+                                  (data[PTP_V1_SEQUENCE_OFFSET +
+                                        PTP_V1_SEQUENCE_LENGTH - 1] <<
                                    16));
        } else {
                match->state = PTP_PACKET_STATE_MATCH_UNWANTED;