cx_usage
YONETANI Tomokazu
qhwt+freebsd-acpi at les.ath.cx
Fri Jun 18 05:26:54 GMT 2004
Hello.
On Wed, Jun 16, 2004 at 10:10:55PM +0900, YONETANI Tomokazu wrote:
> What do you think about the following changes?
>
> - print 100% instead of 99% when there's only 1 Cx state, and 0%
> when the sum is zero.
> - two digits from fractional part of each percentage are shown;
> my Laptop PC barely enters into C3 state and hw.acpi.cpu.cx_usage
> is almost always "0% 99% 0%" after revision 1.39. it's now shown as
> "0.00% 99.96% 0.03%"
Actually, cpu_cx_stats[i] * 100 may not fit in u_int and would print
incorrect value as values grow. Please try this instead.
--- /home/build/freebsd/current/sys/dev/acpica/acpi_cpu.c 2004-06-16 15:27:25.000000000 +0900
+++ acpi_cpu.c 2004-06-16 15:24:38.000000000 +0900
@@ -1046,15 +1051,22 @@
struct sbuf sb;
char buf[128];
int i;
- u_int sum;
+ u_int64_t frac, real, sum;
- /* Avoid divide by 0 potential error. */
- sum = 1;
+ sum = 0;
for (i = 0; i < cpu_cx_count; i++)
sum += cpu_cx_stats[i];
sbuf_new(&sb, buf, sizeof(buf), SBUF_FIXEDLEN);
- for (i = 0; i < cpu_cx_count; i++)
- sbuf_printf(&sb, "%u%% ", (cpu_cx_stats[i] * 100) / sum);
+ for (i = 0; i < cpu_cx_count; i++) {
+ if (sum == 0)
+ sbuf_printf(&sb, "0%% ");
+ else {
+ real = cpu_cx_stats[i] * 100;
+ frac = (real % sum) * 100;
+ sbuf_printf(&sb, "%u.%02u%% ",
+ (u_int)(real / sum), (u_int)(frac / sum));
+ }
+ }
sbuf_trim(&sb);
sbuf_finish(&sb);
sysctl_handle_string(oidp, sbuf_data(&sb), sbuf_len(&sb), req);
More information about the freebsd-acpi
mailing list