Page MenuHomeFreeBSD

D30695.id90582.diff
No OneTemporary

D30695.id90582.diff

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

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)

Event Timeline