- swap_submit (swap_alloc, swap_avail, -1LL, swap_resv);
-/* #endif defined(KERNEL_SOLARIS) */
+ swap_submit ("used", swap_alloc);
+ swap_submit ("free", swap_avail);
+ swap_submit ("reserved", swap_resv - swap_alloc);
+/* #endif HAVE_LIBKSTAT */
+
+#elif defined(VM_SWAPUSAGE)
+ int mib[3];
+ size_t mib_len;
+ struct xsw_usage sw_usage;
+ size_t sw_usage_len;
+
+ mib_len = 2;
+ mib[0] = CTL_VM;
+ mib[1] = VM_SWAPUSAGE;
+
+ sw_usage_len = sizeof (struct xsw_usage);
+
+ 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;