Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153316505
D1436.id2999.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
12 KB
Referenced Files
None
Subscribers
None
D1436.id2999.diff
View Options
Index: head/sys/dev/en/midway.c
===================================================================
--- head/sys/dev/en/midway.c
+++ head/sys/dev/en/midway.c
@@ -1935,7 +1935,7 @@
m->m_pkthdr.rcvif = NULL;
m->m_pkthdr.len = pktlen;
m->m_len = EN_RX1BUF;
- MH_ALIGN(m, EN_RX1BUF);
+ M_ALIGN(m, EN_RX1BUF);
if (m->m_len >= totlen) {
m->m_len = totlen;
Index: head/sys/dev/fatm/if_fatm.c
===================================================================
--- head/sys/dev/fatm/if_fatm.c
+++ head/sys/dev/fatm/if_fatm.c
@@ -1105,7 +1105,7 @@
LIST_INSERT_HEAD(&sc->rbuf_free, rb, link);
break;
}
- MH_ALIGN(m, SMALL_BUFFER_LEN);
+ M_ALIGN(m, SMALL_BUFFER_LEN);
error = bus_dmamap_load(sc->rbuf_tag, rb->map,
m->m_data, SMALL_BUFFER_LEN, dmaload_helper,
&phys, BUS_DMA_NOWAIT);
Index: head/sys/dev/iscsi_initiator/isc_soc.c
===================================================================
--- head/sys/dev/iscsi_initiator/isc_soc.c
+++ head/sys/dev/iscsi_initiator/isc_soc.c
@@ -110,7 +110,7 @@
| Add any AHS to the iSCSI hdr mbuf
*/
if((mh->m_len + pp->ahs_len) < MHLEN) {
- MH_ALIGN(mh, mh->m_len + pp->ahs_len);
+ M_ALIGN(mh, mh->m_len + pp->ahs_len);
bcopy(&pp->ipdu, mh->m_data, mh->m_len);
bcopy(pp->ahs_addr, mh->m_data + mh->m_len, pp->ahs_len);
mh->m_len += pp->ahs_len;
@@ -119,7 +119,7 @@
panic("len AHS=%d too big, not impleneted yet", pp->ahs_len);
}
else {
- MH_ALIGN(mh, mh->m_len);
+ M_ALIGN(mh, mh->m_len);
bcopy(&pp->ipdu, mh->m_data, mh->m_len);
}
mh->m_pkthdr.len = mh->m_len;
Index: head/sys/dev/patm/if_patm_rx.c
===================================================================
--- head/sys/dev/patm/if_patm_rx.c
+++ head/sys/dev/patm/if_patm_rx.c
@@ -471,7 +471,7 @@
default:
case PATM_RAW_CELL:
m->m_len = m->m_pkthdr.len = 53;
- MH_ALIGN(m, 53);
+ M_ALIGN(m, 53);
dst = mtod(m, u_char *);
*dst++ = *cell++;
*dst++ = *cell++;
@@ -483,7 +483,7 @@
case PATM_RAW_NOHEC:
m->m_len = m->m_pkthdr.len = 52;
- MH_ALIGN(m, 52);
+ M_ALIGN(m, 52);
dst = mtod(m, u_char *);
*dst++ = *cell++;
*dst++ = *cell++;
@@ -494,7 +494,7 @@
case PATM_RAW_CS:
m->m_len = m->m_pkthdr.len = 64;
- MH_ALIGN(m, 64);
+ M_ALIGN(m, 64);
dst = mtod(m, u_char *);
*dst++ = *cell++;
*dst++ = *cell++;
Index: head/sys/kern/uipc_mbuf.c
===================================================================
--- head/sys/kern/uipc_mbuf.c
+++ head/sys/kern/uipc_mbuf.c
@@ -574,13 +574,8 @@
m_move_pkthdr(mn, m);
mn->m_next = m;
m = mn;
- if(m->m_flags & M_PKTHDR) {
- if (len < MHLEN)
- MH_ALIGN(m, len);
- } else {
- if (len < MLEN)
- M_ALIGN(m, len);
- }
+ if (len < M_SIZE(m))
+ M_ALIGN(m, len);
m->m_len = len;
return (m);
}
@@ -1226,7 +1221,7 @@
goto extpacket;
if (remain > MHLEN) {
/* m can't be the lead packet */
- MH_ALIGN(n, 0);
+ M_ALIGN(n, 0);
n->m_next = m_split(m, len, wait);
if (n->m_next == NULL) {
(void) m_free(n);
@@ -1236,7 +1231,7 @@
return (n);
}
} else
- MH_ALIGN(n, remain);
+ M_ALIGN(n, remain);
} else if (remain == 0) {
n = m->m_next;
m->m_next = NULL;
@@ -1888,33 +1883,6 @@
}
/*
- * Set the m_data pointer of a newly-allocated mbuf
- * to place an object of the specified size at the
- * end of the mbuf, longword aligned.
- */
-void
-m_align(struct mbuf *m, int len)
-{
-#ifdef INVARIANTS
- const char *msg = "%s: not a virgin mbuf";
-#endif
- int adjust;
-
- if (m->m_flags & M_EXT) {
- KASSERT(m->m_data == m->m_ext.ext_buf, (msg, __func__));
- adjust = m->m_ext.ext_size - len;
- } else if (m->m_flags & M_PKTHDR) {
- KASSERT(m->m_data == m->m_pktdat, (msg, __func__));
- adjust = MHLEN - len;
- } else {
- KASSERT(m->m_data == m->m_dat, (msg, __func__));
- adjust = MLEN - len;
- }
-
- m->m_data += adjust &~ (sizeof(long)-1);
-}
-
-/*
* Create a writable copy of the mbuf chain. While doing this
* we compact the chain with a goal of producing a chain with
* at most two mbufs. The second mbuf in this chain is likely
Index: head/sys/net80211/ieee80211_freebsd.c
===================================================================
--- head/sys/net80211/ieee80211_freebsd.c
+++ head/sys/net80211/ieee80211_freebsd.c
@@ -420,7 +420,7 @@
* frames which all fit in MHLEN.
*/
if (m != NULL)
- MH_ALIGN(m, len);
+ M_ALIGN(m, len);
} else {
m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
if (m != NULL)
Index: head/sys/netinet/if_ether.c
===================================================================
--- head/sys/netinet/if_ether.c
+++ head/sys/netinet/if_ether.c
@@ -261,7 +261,7 @@
m->m_len = sizeof(*ah) + 2 * sizeof(struct in_addr) +
2 * ifp->if_addrlen;
m->m_pkthdr.len = m->m_len;
- MH_ALIGN(m, m->m_len);
+ M_ALIGN(m, m->m_len);
ah = mtod(m, struct arphdr *);
bzero((caddr_t)ah, m->m_len);
#ifdef MAC
Index: head/sys/netinet/igmp.c
===================================================================
--- head/sys/netinet/igmp.c
+++ head/sys/netinet/igmp.c
@@ -2212,7 +2212,7 @@
m = m_gethdr(M_NOWAIT, MT_DATA);
if (m == NULL)
return (ENOMEM);
- MH_ALIGN(m, sizeof(struct ip) + sizeof(struct igmp));
+ M_ALIGN(m, sizeof(struct ip) + sizeof(struct igmp));
m->m_pkthdr.len = sizeof(struct ip) + sizeof(struct igmp);
@@ -2793,7 +2793,7 @@
if (m == NULL) {
m = m_gethdr(M_NOWAIT, MT_DATA);
if (m)
- MH_ALIGN(m, IGMP_LEADINGSPACE);
+ M_ALIGN(m, IGMP_LEADINGSPACE);
}
if (m == NULL)
return (-ENOMEM);
@@ -2917,7 +2917,7 @@
if (m == NULL) {
m = m_gethdr(M_NOWAIT, MT_DATA);
if (m)
- MH_ALIGN(m, IGMP_LEADINGSPACE);
+ M_ALIGN(m, IGMP_LEADINGSPACE);
}
if (m == NULL)
return (-ENOMEM);
@@ -3073,7 +3073,7 @@
if (m == NULL) {
m = m_gethdr(M_NOWAIT, MT_DATA);
if (m)
- MH_ALIGN(m, IGMP_LEADINGSPACE);
+ M_ALIGN(m, IGMP_LEADINGSPACE);
}
if (m == NULL) {
CTR1(KTR_IGMPV3,
Index: head/sys/netinet/ip_carp.c
===================================================================
--- head/sys/netinet/ip_carp.c
+++ head/sys/netinet/ip_carp.c
@@ -840,7 +840,7 @@
m->m_pkthdr.len = len;
m->m_pkthdr.rcvif = NULL;
m->m_len = len;
- MH_ALIGN(m, m->m_len);
+ M_ALIGN(m, m->m_len);
m->m_flags |= M_MCAST;
ip = mtod(m, struct ip *);
ip->ip_v = IPVERSION;
@@ -892,7 +892,7 @@
m->m_pkthdr.len = len;
m->m_pkthdr.rcvif = NULL;
m->m_len = len;
- MH_ALIGN(m, m->m_len);
+ M_ALIGN(m, m->m_len);
m->m_flags |= M_MCAST;
ip6 = mtod(m, struct ip6_hdr *);
bzero(ip6, sizeof(*ip6));
Index: head/sys/netinet/sctp_os_bsd.h
===================================================================
--- head/sys/netinet/sctp_os_bsd.h
+++ head/sys/netinet/sctp_os_bsd.h
@@ -304,11 +304,7 @@
#define SCTP_BUF_RECVIF(m) (m->m_pkthdr.rcvif)
#define SCTP_BUF_PREPEND M_PREPEND
-#define SCTP_ALIGN_TO_END(m, len) if(m->m_flags & M_PKTHDR) { \
- MH_ALIGN(m, len); \
- } else if ((m->m_flags & M_EXT) == 0) { \
- M_ALIGN(m, len); \
- }
+#define SCTP_ALIGN_TO_END(m, len) M_ALIGN(m, len)
/* We make it so if you have up to 4 threads
* writing based on the default size of
Index: head/sys/netinet/tcp_output.c
===================================================================
--- head/sys/netinet/tcp_output.c
+++ head/sys/netinet/tcp_output.c
@@ -1007,7 +1007,7 @@
#ifdef INET6
if (isipv6 && (MHLEN < hdrlen + max_linkhdr) &&
MHLEN >= hdrlen) {
- MH_ALIGN(m, hdrlen);
+ M_ALIGN(m, hdrlen);
} else
#endif
m->m_data += max_linkhdr;
Index: head/sys/netinet6/ip6_output.c
===================================================================
--- head/sys/netinet6/ip6_output.c
+++ head/sys/netinet6/ip6_output.c
@@ -2940,7 +2940,7 @@
return ENOBUFS;
}
m_move_pkthdr(mh, m);
- MH_ALIGN(mh, sizeof(*ip6));
+ M_ALIGN(mh, sizeof(*ip6));
m->m_len -= sizeof(*ip6);
m->m_data += sizeof(*ip6);
mh->m_next = m;
Index: head/sys/netinet6/mld6.c
===================================================================
--- head/sys/netinet6/mld6.c
+++ head/sys/netinet6/mld6.c
@@ -1818,7 +1818,7 @@
* that ether_output() does not need to allocate another mbuf
* for the header in the most common case.
*/
- MH_ALIGN(mh, sizeof(struct ip6_hdr));
+ M_ALIGN(mh, sizeof(struct ip6_hdr));
mh->m_pkthdr.len = sizeof(struct ip6_hdr) + sizeof(struct mld_hdr);
mh->m_len = sizeof(struct ip6_hdr);
@@ -3179,7 +3179,7 @@
m_freem(m);
return (NULL);
}
- MH_ALIGN(mh, sizeof(struct ip6_hdr) + sizeof(struct mldv2_report));
+ M_ALIGN(mh, sizeof(struct ip6_hdr) + sizeof(struct mldv2_report));
mldreclen = m_length(m, NULL);
CTR2(KTR_MLD, "%s: mldreclen is %d", __func__, mldreclen);
Index: head/sys/netinet6/nd6_nbr.c
===================================================================
--- head/sys/netinet6/nd6_nbr.c
+++ head/sys/netinet6/nd6_nbr.c
@@ -431,7 +431,7 @@
icmp6len = sizeof(*nd_ns);
m->m_pkthdr.len = m->m_len = sizeof(*ip6) + icmp6len;
- m->m_data += max_linkhdr; /* or MH_ALIGN() equivalent? */
+ m->m_data += max_linkhdr; /* or M_ALIGN() equivalent? */
/* fill neighbor solicitation packet */
ip6 = mtod(m, struct ip6_hdr *);
@@ -1003,7 +1003,7 @@
icmp6len = sizeof(*nd_na);
m->m_pkthdr.len = m->m_len = sizeof(struct ip6_hdr) + icmp6len;
- m->m_data += max_linkhdr; /* or MH_ALIGN() equivalent? */
+ m->m_data += max_linkhdr; /* or M_ALIGN() equivalent? */
/* fill neighbor advertisement packet */
ip6 = mtod(m, struct ip6_hdr *);
Index: head/sys/sys/mbuf.h
===================================================================
--- head/sys/sys/mbuf.h
+++ head/sys/sys/mbuf.h
@@ -810,42 +810,6 @@
("%s: attempted use of a free mbuf!", __func__))
/*
- * Set the m_data pointer of a newly-allocated mbuf (m_get/MGET) to place an
- * object of the specified size at the end of the mbuf, longword aligned.
- */
-#define M_ALIGN(m, len) do { \
- KASSERT(!((m)->m_flags & (M_PKTHDR|M_EXT)), \
- ("%s: M_ALIGN not normal mbuf", __func__)); \
- KASSERT((m)->m_data == (m)->m_dat, \
- ("%s: M_ALIGN not a virgin mbuf", __func__)); \
- (m)->m_data += (MLEN - (len)) & ~(sizeof(long) - 1); \
-} while (0)
-
-/*
- * As above, for mbufs allocated with m_gethdr/MGETHDR or initialized by
- * M_DUP/MOVE_PKTHDR.
- */
-#define MH_ALIGN(m, len) do { \
- KASSERT((m)->m_flags & M_PKTHDR && !((m)->m_flags & M_EXT), \
- ("%s: MH_ALIGN not PKTHDR mbuf", __func__)); \
- KASSERT((m)->m_data == (m)->m_pktdat, \
- ("%s: MH_ALIGN not a virgin mbuf", __func__)); \
- (m)->m_data += (MHLEN - (len)) & ~(sizeof(long) - 1); \
-} while (0)
-
-/*
- * As above, for mbuf with external storage.
- */
-#define MEXT_ALIGN(m, len) do { \
- KASSERT((m)->m_flags & M_EXT, \
- ("%s: MEXT_ALIGN not an M_EXT mbuf", __func__)); \
- KASSERT((m)->m_data == (m)->m_ext.ext_buf, \
- ("%s: MEXT_ALIGN not a virgin mbuf", __func__)); \
- (m)->m_data += ((m)->m_ext.ext_size - (len)) & \
- ~(sizeof(long) - 1); \
-} while (0)
-
-/*
* Return the address of the start of the buffer associated with an mbuf,
* handling external storage, packet-header mbufs, and regular data mbufs.
*/
@@ -864,6 +828,41 @@
MLEN)
/*
+ * Set the m_data pointer of a newly allocated mbuf to place an object of the
+ * specified size at the end of the mbuf, longword aligned.
+ *
+ * NB: Historically, we had M_ALIGN(), MH_ALIGN(), and MEXT_ALIGN() as
+ * separate macros, each asserting that it was called at the proper moment.
+ * This required callers to themselves test the storage type and call the
+ * right one. Rather than require callers to be aware of those layout
+ * decisions, we centralize here.
+ */
+static __inline void
+m_align(struct mbuf *m, int len)
+{
+#ifdef INVARIANTS
+ const char *msg = "%s: not a virgin mbuf";
+#endif
+ int adjust;
+
+ KASSERT(m->m_data == M_START(m), (msg, __func__));
+
+ if (m->m_flags & M_EXT) {
+ adjust = m->m_ext.ext_size - len;
+ } else if (m->m_flags & M_PKTHDR) {
+ adjust = MHLEN - len;
+ } else {
+ adjust = MLEN - len;
+ }
+
+ m->m_data += adjust &~ (sizeof(long)-1);
+}
+
+#define M_ALIGN(m, len) m_align(m, len)
+#define MH_ALIGN(m, len) m_align(m, len)
+#define MEXT_ALIGN(m, len) m_align(m, len)
+
+/*
* Compute the amount of space available before the current start of data in
* an mbuf.
*
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Apr 21, 10:48 AM (17 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31905555
Default Alt Text
D1436.id2999.diff (12 KB)
Attached To
Mode
D1436: Unify mbuf alignment functions to reduce exposure of mbuf internals outside of core mbuf code
Attached
Detach File
Event Timeline
Log In to Comment