In article <ycxj044lgyflp...@pony.stderr.spb.ru>, Valery Ushakov <u...@stderr.spb.ru> wrote:
>But to get back to my main point, PLEASE, can we stop making random >aimless changes without prior discussion? Here's the change I'd like to make: - pass the alignment instead of the mask (as Roy asked and to match the other macro) - use alignof to determine that alignment and CTASSERT what we expect - remove unused macros This incrementally improves things. christos Index: net/if_arp.h =================================================================== RCS file: /cvsroot/src/sys/net/if_arp.h,v retrieving revision 1.41 diff -u -p -u -r1.41 if_arp.h --- net/if_arp.h 16 Feb 2021 10:20:56 -0000 1.41 +++ net/if_arp.h 17 Feb 2021 17:45:55 -0000 @@ -72,7 +72,8 @@ struct arphdr { uint8_t ar_tpa[]; /* target protocol address */ #endif }; -#define ARP_HDR_ALIGNMENT 1 +#define ARP_HDR_ALIGNMENT __alignof(struct arphdr) +__CTASSERT(ARP_HDR_ALIGNMENT == 2); static __inline uint8_t * ar_data(struct arphdr *ap) Index: netinet/icmp_private.h =================================================================== RCS file: /cvsroot/src/sys/netinet/icmp_private.h,v retrieving revision 1.4 diff -u -p -u -r1.4 icmp_private.h --- netinet/icmp_private.h 14 Feb 2021 20:58:35 -0000 1.4 +++ netinet/icmp_private.h 17 Feb 2021 17:45:55 -0000 @@ -44,7 +44,6 @@ extern percpu_t *icmpstat_percpu; #define ICMP_STATINC(x) _NET_STATINC(icmpstat_percpu, x) -#define ICMP_HDR_ALIGNMENT 3 #endif /* _KERNEL_ */ #endif /* !_NETINET_ICMP_PRIVATE_H_ */ Index: netinet/igmp_var.h =================================================================== RCS file: /cvsroot/src/sys/netinet/igmp_var.h,v retrieving revision 1.26 diff -u -p -u -r1.26 igmp_var.h --- netinet/igmp_var.h 14 Feb 2021 20:58:35 -0000 1.26 +++ netinet/igmp_var.h 17 Feb 2021 17:45:55 -0000 @@ -105,8 +105,6 @@ */ #define IGMP_RANDOM_DELAY(X) (cprng_fast32() % (X) + 1) -#define IGMP_HDR_ALIGNMENT 3 - void igmp_init(void); void igmp_input(struct mbuf *, int, int); int igmp_joingroup(struct in_multi *); Index: netinet/ip_private.h =================================================================== RCS file: /cvsroot/src/sys/netinet/ip_private.h,v retrieving revision 1.4 diff -u -p -u -r1.4 ip_private.h --- netinet/ip_private.h 14 Feb 2021 20:58:35 -0000 1.4 +++ netinet/ip_private.h 17 Feb 2021 17:45:55 -0000 @@ -43,7 +43,8 @@ extern percpu_t *ipstat_percpu; #define IP_STATINC(x) _NET_STATINC(ipstat_percpu, x) #define IP_STATDEC(x) _NET_STATDEC(ipstat_percpu, x) -#define IP_HDR_ALIGNMENT 3 +#define IP_HDR_ALIGNMENT __alignof(struct ip) +__CTASSERT(IP_HDR_ALIGNMENT == 4); #endif /* _KERNEL */ #endif /* !_NETINET_IP_PRIVATE_H_ */ Index: netinet/tcp_private.h =================================================================== RCS file: /cvsroot/src/sys/netinet/tcp_private.h,v retrieving revision 1.4 diff -u -p -u -r1.4 tcp_private.h --- netinet/tcp_private.h 14 Feb 2021 20:58:35 -0000 1.4 +++ netinet/tcp_private.h 17 Feb 2021 17:45:55 -0000 @@ -43,7 +43,8 @@ extern percpu_t *tcpstat_percpu; #define TCP_STATINC(x) _NET_STATINC(tcpstat_percpu, x) #define TCP_STATADD(x, v) _NET_STATADD(tcpstat_percpu, x, v) -#define TCP_HDR_ALIGNMENT 3 +#define TCP_HDR_ALIGNMENT __alignof(struct tcphdr) +__CTASSERT(TCP_HDR_ALIGNMENT == 4); #endif /* _KERNEL */ #endif /* !_NETINET_TCP_PRIVATE_H_ */ Index: netinet/udp_private.h =================================================================== RCS file: /cvsroot/src/sys/netinet/udp_private.h,v retrieving revision 1.4 diff -u -p -u -r1.4 udp_private.h --- netinet/udp_private.h 14 Feb 2021 20:58:35 -0000 1.4 +++ netinet/udp_private.h 17 Feb 2021 17:45:55 -0000 @@ -39,7 +39,8 @@ extern percpu_t *udpstat_percpu; #define UDP_STATINC(x) _NET_STATINC(udpstat_percpu, x) -#define UDP_HDR_ALIGNMENT 3 +#define UDP_HDR_ALIGNMENT __alignof(struct udphdr) +__CTASSERT(UDP_HDR_ALIGNMENT == 2); #endif /* _KERNEL */ #endif /* !_NETINET_UDP_PRIVATE_H_ */ Index: netinet6/ip6_private.h =================================================================== RCS file: /cvsroot/src/sys/netinet6/ip6_private.h,v retrieving revision 1.4 diff -u -p -u -r1.4 ip6_private.h --- netinet6/ip6_private.h 14 Feb 2021 20:58:35 -0000 1.4 +++ netinet6/ip6_private.h 17 Feb 2021 17:45:55 -0000 @@ -43,7 +43,8 @@ extern percpu_t *ip6stat_percpu; #define IP6_STATINC(x) _NET_STATINC(ip6stat_percpu, x) #define IP6_STATDEC(x) _NET_STATDEC(ip6stat_percpu, x) -#define IP6_HDR_ALIGNMENT 3 +#define IP6_HDR_ALIGNMENT __alignof(struct ip6_hdr) +__CTASSERT(IP6_HDR_ALIGNMENT == 4); #endif /* _KERNEL */ #endif /* !_NETINET_IP6_PRIVATE_H_ */ Index: sys/mbuf.h =================================================================== RCS file: /cvsroot/src/sys/sys/mbuf.h,v retrieving revision 1.230 diff -u -p -u -r1.230 mbuf.h --- sys/mbuf.h 15 Feb 2021 09:29:56 -0000 1.230 +++ sys/mbuf.h 17 Feb 2021 17:45:55 -0000 @@ -846,10 +846,11 @@ m_copy_rcvif(struct mbuf *m, const struc static __inline int m_get_aligned_hdr(struct mbuf **m, int align, size_t hlen, bool linkhdr) { - if (POINTER_ALIGNED_P(mtod(*m, void *), align) == 0) + if (POINTER_ALIGNED_P(mtod(*m, void *), align) == 0) { + --align; // Turn into mask *m = m_copyup(*m, hlen, linkhdr ? (max_linkhdr + align) & ~align : 0); - else if (__predict_false((size_t)(*m)->m_len < hlen)) + } else if (__predict_false((size_t)(*m)->m_len < hlen)) *m = m_pullup(*m, hlen); return *m == NULL; } Index: sys/param.h =================================================================== RCS file: /cvsroot/src/sys/sys/param.h,v retrieving revision 1.688 diff -u -p -u -r1.688 param.h --- sys/param.h 15 Feb 2021 19:46:53 -0000 1.688 +++ sys/param.h 17 Feb 2021 17:45:55 -0000 @@ -290,7 +290,7 @@ #ifdef __NO_STRICT_ALIGNMENT #define POINTER_ALIGNED_P(p, a) 1 #else -#define POINTER_ALIGNED_P(p, a) (((uintptr_t)(p) & (a)) == 0) +#define POINTER_ALIGNED_P(p, a) (((uintptr_t)(p) & ((a) - 1)) == 0) #endif /*