Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F169401812
D30695.id90582.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D30695.id90582.diff
View Options
Index: sys/netinet/tcp_lro.h
===================================================================
--- sys/netinet/tcp_lro.h
+++ sys/netinet/tcp_lro.h
@@ -140,7 +140,7 @@
uint16_t uncompressed;
uint16_t window;
uint16_t timestamp; /* flag, not a TCP hdr field. */
- sbintime_t alloc_time; /* time when entry was allocated */
+ struct bintime alloc_time; /* time when entry was allocated */
};
LIST_HEAD(lro_head, lro_entry);
@@ -154,7 +154,7 @@
struct lro_ctrl {
struct ifnet *ifp;
struct lro_mbuf_sort *lro_mbuf_data;
- sbintime_t lro_last_queue_time; /* last time data was queued */
+ struct bintime lro_last_queue_time; /* last time data was queued */
uint64_t lro_queued;
uint64_t lro_flushed;
uint64_t lro_bad_csum;
Index: sys/netinet/tcp_lro.c
===================================================================
--- sys/netinet/tcp_lro.c
+++ sys/netinet/tcp_lro.c
@@ -568,10 +568,10 @@
return;
/* get timeout time */
- sbt = getsbinuptime() - tvtosbt(*timeout);
+ sbt = sbinuptime() - tvtosbt(*timeout);
LIST_FOREACH_SAFE(le, &lc->lro_active, next, le_tmp) {
- if (sbt >= le->alloc_time) {
+ if (sbt >= bttosbt(le->alloc_time)) {
tcp_lro_active_remove(le);
tcp_lro_flush(lc, le);
}
@@ -610,7 +610,7 @@
{
if (tp->t_logstate != TCP_LOG_STATE_OFF) {
union tcp_log_stackspecific log;
- struct timeval tv;
+ struct timeval tv, btv;
uint32_t cts;
cts = tcp_get_usecs(&tv);
@@ -637,7 +637,8 @@
log.u_bbr.cwnd_gain = le->window;
log.u_bbr.cur_del_rate = (uintptr_t)m;
log.u_bbr.bw_inuse = (uintptr_t)le->m_head;
- log.u_bbr.flex6 = sbttous(lc->lro_last_queue_time);
+ bintime2timeval(&lc->lro_last_queue_time, &btv);
+ log.u_bbr.flex6 = tcp_tv_to_usectick(&btv);
log.u_bbr.flex7 = le->compressed;
log.u_bbr.pacing_gain = le->uncompressed;
if (in_epoch(net_epoch_preempt))
@@ -1446,7 +1447,7 @@
CURVNET_SET(lc->ifp->if_vnet);
/* get current time */
- lc->lro_last_queue_time = getsbinuptime();
+ binuptime(&lc->lro_last_queue_time);
/* sort all mbufs according to stream */
tcp_lro_sort(lc->lro_mbuf_data, lc->lro_mbuf_count);
@@ -1739,7 +1740,7 @@
#endif
/* If no hardware or arrival stamp on the packet add timestamp */
if ((m->m_flags & (M_TSTMP_LRO | M_TSTMP)) == 0) {
- m->m_pkthdr.rcv_tstmp = sbttons(lc->lro_last_queue_time);
+ m->m_pkthdr.rcv_tstmp = bintime2ns(&lc->lro_last_queue_time);
m->m_flags |= M_TSTMP_LRO;
}
@@ -1834,7 +1835,7 @@
int error;
/* get current time */
- lc->lro_last_queue_time = getsbinuptime();
+ binuptime(&lc->lro_last_queue_time);
CURVNET_SET(lc->ifp->if_vnet);
error = tcp_lro_rx_common(lc, m, csum, true);
Index: sys/sys/time.h
===================================================================
--- sys/sys/time.h
+++ sys/sys/time.h
@@ -286,6 +286,17 @@
(uint32_t)(_bt->frac >> 32)) >> 32;
}
+static __inline uint64_t
+bintime2ns(const struct bintime *_bt)
+{
+ uint64_t ret;
+
+ ret = (uint64_t)(_bt->sec) * (uint64_t)1000000000;
+ ret += (((uint64_t)1000000000 *
+ (uint32_t)(_bt->frac >> 32)) >> 32);
+ return (ret);
+}
+
static __inline void
timespec2bintime(const struct timespec *_ts, struct bintime *_bt)
{
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Sep 2, 10:46 AM (12 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37946186
Default Alt Text
D30695.id90582.diff (3 KB)
Attached To
Mode
D30695: tcp: LRO timestamps have lost their previous precision
Attached
Detach File
Event Timeline
Log In to Comment