Commit 0b0c002c340e78173789f8afaa508070d838cf3d
Committed by
Konrad Rzeszutek Wilk
1 parent
283c0972d5
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
xen/time: remove blocked time accounting from xen "clockchip"
... because the "clock_event_device framework" already accounts for idle time through the "event_handler" function pointer in xen_timer_interrupt(). The patch is intended as the completion of [1]. It should fix the double idle times seen in PV guests' /proc/stat [2]. It should be orthogonal to stolen time accounting (the removed code seems to be isolated). The approach may be completely misguided. [1] https://lkml.org/lkml/2011/10/6/10 [2] http://lists.xensource.com/archives/html/xen-devel/2010-08/msg01068.html John took the time to retest this patch on top of v3.10 and reported: "idle time is correctly incremented for pv and hvm for the normal case, nohz=off and nohz=idle." so lets put this patch in. CC: stable@vger.kernel.org Signed-off-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: John Haxby <john.haxby@oracle.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Showing 1 changed file with 2 additions and 15 deletions Side-by-side Diff
arch/x86/xen/time.c
... | ... | @@ -37,9 +37,8 @@ |
37 | 37 | /* snapshots of runstate info */ |
38 | 38 | static DEFINE_PER_CPU(struct vcpu_runstate_info, xen_runstate_snapshot); |
39 | 39 | |
40 | -/* unused ns of stolen and blocked time */ | |
40 | +/* unused ns of stolen time */ | |
41 | 41 | static DEFINE_PER_CPU(u64, xen_residual_stolen); |
42 | -static DEFINE_PER_CPU(u64, xen_residual_blocked); | |
43 | 42 | |
44 | 43 | /* return an consistent snapshot of 64-bit time/counter value */ |
45 | 44 | static u64 get64(const u64 *p) |
... | ... | @@ -116,7 +115,7 @@ |
116 | 115 | { |
117 | 116 | struct vcpu_runstate_info state; |
118 | 117 | struct vcpu_runstate_info *snap; |
119 | - s64 blocked, runnable, offline, stolen; | |
118 | + s64 runnable, offline, stolen; | |
120 | 119 | cputime_t ticks; |
121 | 120 | |
122 | 121 | get_runstate_snapshot(&state); |
... | ... | @@ -126,7 +125,6 @@ |
126 | 125 | snap = &__get_cpu_var(xen_runstate_snapshot); |
127 | 126 | |
128 | 127 | /* work out how much time the VCPU has not been runn*ing* */ |
129 | - blocked = state.time[RUNSTATE_blocked] - snap->time[RUNSTATE_blocked]; | |
130 | 128 | runnable = state.time[RUNSTATE_runnable] - snap->time[RUNSTATE_runnable]; |
131 | 129 | offline = state.time[RUNSTATE_offline] - snap->time[RUNSTATE_offline]; |
132 | 130 | |
... | ... | @@ -142,17 +140,6 @@ |
142 | 140 | ticks = iter_div_u64_rem(stolen, NS_PER_TICK, &stolen); |
143 | 141 | __this_cpu_write(xen_residual_stolen, stolen); |
144 | 142 | account_steal_ticks(ticks); |
145 | - | |
146 | - /* Add the appropriate number of ticks of blocked time, | |
147 | - including any left-overs from last time. */ | |
148 | - blocked += __this_cpu_read(xen_residual_blocked); | |
149 | - | |
150 | - if (blocked < 0) | |
151 | - blocked = 0; | |
152 | - | |
153 | - ticks = iter_div_u64_rem(blocked, NS_PER_TICK, &blocked); | |
154 | - __this_cpu_write(xen_residual_blocked, blocked); | |
155 | - account_idle_ticks(ticks); | |
156 | 143 | } |
157 | 144 | |
158 | 145 | /* Get the TSC speed from Xen */ |