- if (sysctl (mib, 2, &sw_usage, &sw_usage_len, NULL, 0) != 0)
- return;
+ if (sysctl (mib, mib_len, &sw_usage, &sw_usage_len, NULL, 0) != 0)
+ return (-1);
+
+ /* The returned values are bytes. */
+ swap_submit ("used", sw_usage.xsu_used);
+ swap_submit ("free", sw_usage.xsu_avail);
+/* #endif VM_SWAPUSAGE */
+
+#elif HAVE_LIBKVM
+ struct kvm_swap data_s;
+ int status;
+
+ unsigned long long used;
+ unsigned long long free;
+ unsigned long long total;
+
+ if (kvm_obj == NULL)
+ return (-1);
+
+ /* only one structure => only get the grand total, no details */
+ status = kvm_getswapinfo (kvm_obj, &data_s, 1, 0);
+ if (status == -1)
+ return (-1);
+
+ total = (unsigned long long) data_s.ksw_total;
+ used = (unsigned long long) data_s.ksw_used;
+
+ total *= (unsigned long long) kvm_pagesize;
+ used *= (unsigned long long) kvm_pagesize;