Revert "Call get_unaligned() in various places"
This reverts commit 74847768df924221df0401e04556ce010ba5da0f.
We used get_unaligned() to work around the issue where the IPv4 header
was not properly aligned on a 4-byte boundary. Quantenna recently added
code to memmove IPv4 packets to ensure proper alignment. Hence, the
calls to get_unaligned() are no longer needed.
Change-Id: I295531a6edb838bccc03978f2af6595d18542634
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index af5b139..730d856 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -341,7 +341,7 @@
ipv6_addr_set(solicited,
htonl(0xFF020000), 0,
htonl(0x1),
- htonl(0xFF000000) | get_unaligned(&addr->s6_addr32[3]));
+ htonl(0xFF000000) | addr->s6_addr32[3]);
}
static inline bool ipv6_addr_is_ll_all_nodes(const struct in6_addr *addr)
@@ -350,9 +350,9 @@
__be64 *p = (__be64 *)addr;
return ((p[0] ^ cpu_to_be64(0xff02000000000000UL)) | (p[1] ^ cpu_to_be64(1))) == 0UL;
#else
- return ((get_unaligned(&addr->s6_addr32[0]) ^ htonl(0xff020000)) |
- get_unaligned(&addr->s6_addr32[1]) | get_unaligned(&addr->s6_addr32[2]) |
- (get_unaligned(&addr->s6_addr32[3]) ^ htonl(0x00000001))) == 0;
+ return ((addr->s6_addr32[0] ^ htonl(0xff020000)) |
+ addr->s6_addr32[1] | addr->s6_addr32[2] |
+ (addr->s6_addr32[3] ^ htonl(0x00000001))) == 0;
#endif
}
@@ -362,15 +362,15 @@
__be64 *p = (__be64 *)addr;
return ((p[0] ^ cpu_to_be64(0xff02000000000000UL)) | (p[1] ^ cpu_to_be64(2))) == 0UL;
#else
- return ((get_unaligned(&addr->s6_addr32[0]) ^ htonl(0xff020000)) |
- get_unaligned(&addr->s6_addr32[1]) | get_unaligned(&addr->s6_addr32[2]) |
- (get_unaligned(&addr->s6_addr32[3]) ^ htonl(0x00000002))) == 0;
+ return ((addr->s6_addr32[0] ^ htonl(0xff020000)) |
+ addr->s6_addr32[1] | addr->s6_addr32[2] |
+ (addr->s6_addr32[3] ^ htonl(0x00000002))) == 0;
#endif
}
static inline bool ipv6_addr_is_isatap(const struct in6_addr *addr)
{
- return (get_unaligned(&addr->s6_addr32[2]) | htonl(0x02000000)) == htonl(0x02005EFE);
+ return (addr->s6_addr32[2] | htonl(0x02000000)) == htonl(0x02005EFE);
}
static inline bool ipv6_addr_is_solict_mult(const struct in6_addr *addr)
@@ -381,9 +381,9 @@
((p[1] ^ cpu_to_be64(0x00000001ff000000UL)) &
cpu_to_be64(0xffffffffff000000UL))) == 0UL;
#else
- return ((get_unaligned(&addr->s6_addr32[0]) ^ htonl(0xff020000)) |
- get_unaligned(&addr->s6_addr32[1]) |
- (get_unaligned(&addr->s6_addr32[2]) ^ htonl(0x00000001)) |
+ return ((addr->s6_addr32[0] ^ htonl(0xff020000)) |
+ addr->s6_addr32[1] |
+ (addr->s6_addr32[2] ^ htonl(0x00000001)) |
(addr->s6_addr[12] ^ 0xff)) == 0;
#endif
}
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index 8d8cc40..11a0452 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -21,7 +21,6 @@
#include <net/flow.h>
#include <net/flow_dissector.h>
#include <net/snmp.h>
-#include <asm/unaligned.h>
#define SIN6_LEN_RFC2133 24
@@ -463,10 +462,10 @@
return ((ul1[0] ^ ul2[0]) | (ul1[1] ^ ul2[1])) == 0UL;
#else
- return ((get_unaligned(&a1->s6_addr32[0]) ^ get_unaligned(&a2->s6_addr32[0])) |
- (get_unaligned(&a1->s6_addr32[1]) ^ get_unaligned(&a2->s6_addr32[1])) |
- (get_unaligned(&a1->s6_addr32[2]) ^ get_unaligned(&a2->s6_addr32[2])) |
- (get_unaligned(&a1->s6_addr32[3]) ^ get_unaligned(&a2->s6_addr32[3]))) == 0;
+ return ((a1->s6_addr32[0] ^ a2->s6_addr32[0]) |
+ (a1->s6_addr32[1] ^ a2->s6_addr32[1]) |
+ (a1->s6_addr32[2] ^ a2->s6_addr32[2]) |
+ (a1->s6_addr32[3] ^ a2->s6_addr32[3])) == 0;
#endif
}
@@ -581,8 +580,8 @@
return (u32)(x ^ (x >> 32));
#else
- return (__force u32)(get_unaligned(&a->s6_addr32[0]) ^ get_unaligned(&a->s6_addr32[1]) ^
- get_unaligned(&a->s6_addr32[2]) ^ get_unaligned(&a->s6_addr32[3]));
+ return (__force u32)(a->s6_addr32[0] ^ a->s6_addr32[1] ^
+ a->s6_addr32[2] ^ a->s6_addr32[3]);
#endif
}
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 965853a..e3f6f1f 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -72,7 +72,7 @@
return 0;
switch (a->proto) {
case htons(ETH_P_IP):
- return get_unaligned(&a->u.ip4) == get_unaligned(&b->u.ip4);
+ return a->u.ip4 == b->u.ip4;
#if IS_ENABLED(CONFIG_IPV6)
case htons(ETH_P_IPV6):
return ipv6_addr_equal(&a->u.ip6, &b->u.ip6);
@@ -102,7 +102,7 @@
{
switch (ip->proto) {
case htons(ETH_P_IP):
- return __br_ip4_hash(mdb, get_unaligned(&ip->u.ip4), ip->vid);
+ return __br_ip4_hash(mdb, ip->u.ip4, ip->vid);
#if IS_ENABLED(CONFIG_IPV6)
case htons(ETH_P_IPV6):
return __br_ip6_hash(mdb, &ip->u.ip6, ip->vid);
@@ -175,7 +175,7 @@
switch (ip.proto) {
case htons(ETH_P_IP):
- ip.u.ip4 = get_unaligned(&ip_hdr(skb)->daddr);
+ ip.u.ip4 = ip_hdr(skb)->daddr;
break;
#if IS_ENABLED(CONFIG_IPV6)
case htons(ETH_P_IPV6):
@@ -875,7 +875,7 @@
if (ipv6_addr_is_ll_all_nodes(group))
return 0;
- memcpy(&br_group.u.ip6, &group, sizeof(*group));
+ br_group.u.ip6 = *group;
br_group.proto = htons(ETH_P_IPV6);
br_group.vid = vid;
@@ -1161,7 +1161,7 @@
return -EINVAL;
grec = (void *)(skb->data + len - sizeof(*grec));
- group = get_unaligned(&grec->grec_mca);
+ group = grec->grec_mca;
type = grec->grec_type;
len += ntohs(grec->grec_nsrcs) * 4;
@@ -1838,7 +1838,7 @@
own_query = port ? &port->ip6_own_query : &br->ip6_own_query;
- memcpy(&br_group.u.ip6, group, sizeof(*group));
+ br_group.u.ip6 = *group;
br_group.proto = htons(ETH_P_IPV6);
br_group.vid = vid;
@@ -1884,7 +1884,7 @@
case IGMPV2_HOST_MEMBERSHIP_REPORT:
BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
err = br_ip4_multicast_add_group(br, port,
- src_mac, skb->src_port, get_unaligned(&ih->group), vid);
+ src_mac, skb->src_port, ih->group, vid);
break;
case IGMPV3_HOST_MEMBERSHIP_REPORT:
err = br_ip4_multicast_igmp3_report(br, port, skb_trimmed, vid);
@@ -1894,7 +1894,7 @@
break;
case IGMP_HOST_LEAVE_MESSAGE:
br_ip4_multicast_leave_group(br, port,
- src_mac, skb->src_port, get_unaligned(&ih->group), vid);
+ src_mac, skb->src_port, ih->group, vid);
break;
}
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
index 6abd5a7..73c33de 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -340,7 +340,7 @@
* how the packet travels inside Linux networking.
*/
if (!skb_valid_dst(skb)) {
- int err = ip_route_input_noref(skb, get_unaligned(&iph->daddr), get_unaligned(&iph->saddr),
+ int err = ip_route_input_noref(skb, iph->daddr, iph->saddr,
iph->tos, skb->dev);
if (unlikely(err)) {
if (err == -EXDEV)
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 22f0e79..4aed8fc 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1322,7 +1322,7 @@
if (sin) {
sin->sin_family = AF_INET;
sin->sin_port = udp_hdr(skb)->source;
- sin->sin_addr.s_addr = get_unaligned(&ip_hdr(skb)->saddr);
+ sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
*addr_len = sizeof(*sin);
}
@@ -1745,8 +1745,8 @@
uh = udp_hdr(skb);
ulen = ntohs(uh->len);
- saddr = get_unaligned(&ip_hdr(skb)->saddr);
- daddr = get_unaligned(&ip_hdr(skb)->daddr);
+ saddr = ip_hdr(skb)->saddr;
+ daddr = ip_hdr(skb)->daddr;
if (ulen > skb->len)
goto short_packet;
@@ -1926,17 +1926,17 @@
/* we are supposed to accept bcast packets */
if (skb->pkt_type == PACKET_MULTICAST) {
- ours = ip_check_mc_rcu(in_dev, get_unaligned(&iph->daddr), get_unaligned(&iph->saddr),
+ ours = ip_check_mc_rcu(in_dev, iph->daddr, iph->saddr,
iph->protocol);
if (!ours)
return;
}
- sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, get_unaligned(&iph->daddr),
- uh->source, get_unaligned(&iph->saddr), dif);
+ sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, iph->daddr,
+ uh->source, iph->saddr, dif);
} else if (skb->pkt_type == PACKET_HOST) {
- sk = __udp4_lib_demux_lookup(net, uh->dest, get_unaligned(&iph->daddr),
- uh->source, get_unaligned(&iph->saddr), dif);
+ sk = __udp4_lib_demux_lookup(net, uh->dest, iph->daddr,
+ uh->source, iph->saddr, dif);
}
if (!sk || !atomic_inc_not_zero_hint(&sk->sk_refcnt, 2))
diff --git a/net/ipv6/ip6_checksum.c b/net/ipv6/ip6_checksum.c
index 505e1e0..c0cbcb2 100644
--- a/net/ipv6/ip6_checksum.c
+++ b/net/ipv6/ip6_checksum.c
@@ -14,36 +14,36 @@
__u32 uproto;
__u32 sum = (__force u32)csum;
- sum += (__force u32)get_unaligned(&saddr->s6_addr32[0]);
- carry = (sum < (__force u32)get_unaligned(&saddr->s6_addr32[0]));
+ sum += (__force u32)saddr->s6_addr32[0];
+ carry = (sum < (__force u32)saddr->s6_addr32[0]);
sum += carry;
- sum += (__force u32)get_unaligned(&saddr->s6_addr32[1]);
- carry = (sum < (__force u32)get_unaligned(&saddr->s6_addr32[1]));
+ sum += (__force u32)saddr->s6_addr32[1];
+ carry = (sum < (__force u32)saddr->s6_addr32[1]);
sum += carry;
- sum += (__force u32)get_unaligned(&saddr->s6_addr32[2]);
- carry = (sum < (__force u32)get_unaligned(&saddr->s6_addr32[2]));
+ sum += (__force u32)saddr->s6_addr32[2];
+ carry = (sum < (__force u32)saddr->s6_addr32[2]);
sum += carry;
- sum += (__force u32)get_unaligned(&saddr->s6_addr32[3]);
- carry = (sum < (__force u32)get_unaligned(&saddr->s6_addr32[3]));
+ sum += (__force u32)saddr->s6_addr32[3];
+ carry = (sum < (__force u32)saddr->s6_addr32[3]);
sum += carry;
- sum += (__force u32)get_unaligned(&daddr->s6_addr32[0]);
- carry = (sum < (__force u32)get_unaligned(&daddr->s6_addr32[0]));
+ sum += (__force u32)daddr->s6_addr32[0];
+ carry = (sum < (__force u32)daddr->s6_addr32[0]);
sum += carry;
- sum += (__force u32)get_unaligned(&daddr->s6_addr32[1]);
- carry = (sum < (__force u32)get_unaligned(&daddr->s6_addr32[1]));
+ sum += (__force u32)daddr->s6_addr32[1];
+ carry = (sum < (__force u32)daddr->s6_addr32[1]);
sum += carry;
- sum += (__force u32)get_unaligned(&daddr->s6_addr32[2]);
- carry = (sum < (__force u32)get_unaligned(&daddr->s6_addr32[2]));
+ sum += (__force u32)daddr->s6_addr32[2];
+ carry = (sum < (__force u32)daddr->s6_addr32[2]);
sum += carry;
- sum += (__force u32)get_unaligned(&daddr->s6_addr32[3]);
- carry = (sum < (__force u32)get_unaligned(&daddr->s6_addr32[3]));
+ sum += (__force u32)daddr->s6_addr32[3];
+ carry = (sum < (__force u32)daddr->s6_addr32[3]);
sum += carry;
ulen = (__force u32)htonl((__u32) len);