diff options
author | Rafael Vanoni <rafael.vanoni@sun.com> | 2009-11-13 01:32:32 -0800 |
---|---|---|
committer | Rafael Vanoni <rafael.vanoni@sun.com> | 2009-11-13 01:32:32 -0800 |
commit | d3d50737e566cade9a08d73d2af95105ac7cd960 (patch) | |
tree | 399b76a3f6bf107e2ff506d8f9c3333654b29fc7 /usr/src/uts/common/inet/ip/ip_if.c | |
parent | 1eff5f7761619411b3c31280fcd96cefc32968b7 (diff) | |
download | illumos-joyent-d3d50737e566cade9a08d73d2af95105ac7cd960.tar.gz |
PSARC/2009/396 Tickless Kernel Architecture / lbolt decoupling
6860030 tickless clock requires a clock() decoupled lbolt / lbolt64
Portions contributed by Chad Mynhier <cmynhier@gmail.com>
Diffstat (limited to 'usr/src/uts/common/inet/ip/ip_if.c')
-rw-r--r-- | usr/src/uts/common/inet/ip/ip_if.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/usr/src/uts/common/inet/ip/ip_if.c b/usr/src/uts/common/inet/ip/ip_if.c index 6066da35b4..cd5a98b7b5 100644 --- a/usr/src/uts/common/inet/ip/ip_if.c +++ b/usr/src/uts/common/inet/ip/ip_if.c @@ -2426,6 +2426,7 @@ ill_frag_prune(ill_t *ill, uint_t max_count) ipfb_t *ipfb; ipf_t *ipf; size_t count; + clock_t now; /* * If we are here within ip_min_frag_prune_time msecs remove @@ -2433,7 +2434,8 @@ ill_frag_prune(ill_t *ill, uint_t max_count) * ill_frag_free_num_pkts. */ mutex_enter(&ill->ill_lock); - if (TICK_TO_MSEC(lbolt - ill->ill_last_frag_clean_time) <= + now = ddi_get_lbolt(); + if (TICK_TO_MSEC(now - ill->ill_last_frag_clean_time) <= (ip_min_frag_prune_time != 0 ? ip_min_frag_prune_time : msec_per_tick)) { @@ -2442,7 +2444,7 @@ ill_frag_prune(ill_t *ill, uint_t max_count) } else { ill->ill_frag_free_num_pkts = 0; } - ill->ill_last_frag_clean_time = lbolt; + ill->ill_last_frag_clean_time = now; mutex_exit(&ill->ill_lock); /* @@ -4994,7 +4996,7 @@ th_trace_rrecord(th_trace_t *th_trace) lastref = 0; th_trace->th_trace_lastref = lastref; tr_buf = &th_trace->th_trbuf[lastref]; - tr_buf->tr_time = lbolt; + tr_buf->tr_time = ddi_get_lbolt(); tr_buf->tr_depth = getpcstack(tr_buf->tr_stack, TR_STACK_DEPTH); } @@ -6528,8 +6530,8 @@ ipsq_enter(ill_t *ill, boolean_t force, int type) } else { mutex_exit(&ipx->ipx_lock); mutex_exit(&ipsq->ipsq_lock); - (void) cv_timedwait(&ill->ill_cv, - &ill->ill_lock, lbolt + ENTER_SQ_WAIT_TICKS); + (void) cv_reltimedwait(&ill->ill_cv, + &ill->ill_lock, ENTER_SQ_WAIT_TICKS, TR_CLOCK_TICK); waited_enough = B_TRUE; } mutex_exit(&ill->ill_lock); |