summaryrefslogtreecommitdiffstats
path: root/tools/tools
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2007-01-01 23:50:04 +0000
committerscottl <scottl@FreeBSD.org>2007-01-01 23:50:04 +0000
commit9742680fc8ee30ae1063191b92dd1948e3b17b05 (patch)
tree1d944b5056191440f94a6a6989565a5a9a683d2e /tools/tools
parentb7dd55cb11065da7bd9519f54367feb994685705 (diff)
downloadFreeBSD-src-9742680fc8ee30ae1063191b92dd1948e3b17b05.zip
FreeBSD-src-9742680fc8ee30ae1063191b92dd1948e3b17b05.tar.gz
Add a simple tool for checking the command queues in the MFI driver. Also add
a simple wrapper for running the MegaCLI tool.
Diffstat (limited to 'tools/tools')
-rw-r--r--tools/tools/mfi/Makefile7
-rw-r--r--tools/tools/mfi/mfi_checkq.c81
-rw-r--r--tools/tools/mfi/runmegacli.sh36
3 files changed, 124 insertions, 0 deletions
diff --git a/tools/tools/mfi/Makefile b/tools/tools/mfi/Makefile
new file mode 100644
index 0000000..d819a83
--- /dev/null
+++ b/tools/tools/mfi/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+PROG= mfi_checkq
+NO_MAN=
+BINDIR?=/usr/local/bin
+
+.include <bsd.prog.mk>
diff --git a/tools/tools/mfi/mfi_checkq.c b/tools/tools/mfi/mfi_checkq.c
new file mode 100644
index 0000000..9f860ad
--- /dev/null
+++ b/tools/tools/mfi/mfi_checkq.c
@@ -0,0 +1,81 @@
+/*-
+ * Copyright (c) 2007 Scott Long
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/uio.h>
+
+#include </sys/dev/mfi/mfireg.h>
+#include </sys/dev/mfi/mfi_ioctl.h>
+
+#include <errno.h>
+#include <stdio.h>
+
+/*
+ * Simple program to print out the queue stats on the given queue index.
+ * See /sys/sys/mfi_ioctl.h for the definitions of each queue index.
+ */
+
+void
+usage(void)
+{
+ printf("Usage: mfi_checkq <queue_number>\n");
+ exit(1);
+}
+
+int
+main(int argc, char **argv)
+{
+ union mfi_statrequest sr;
+ int fd, retval, queue;
+
+ if (argc != 2)
+ usage();
+
+ fd = open("/dev/mfi0", O_RDWR);
+ if (fd == -1) {
+ printf("couldn't open mfi0: %s\n", strerror(errno));
+ return (-1);
+ }
+
+ queue = atoi(argv[1]);
+ printf("Getting stats for queue %d\n", queue);
+ bzero(&sr, sizeof(union mfi_statrequest));
+ sr.ms_item = queue;
+ retval = ioctl(fd, MFIIO_STATS, &sr);
+ if (retval == -1) {
+ printf("error on ioctl: %s\n", strerror(errno));
+ return (-1);
+ }
+
+ printf("length= %d, max= %d\n",sr.ms_qstat.q_length, sr.ms_qstat.q_max);
+
+ close(fd);
+ return 0;
+}
diff --git a/tools/tools/mfi/runmegacli.sh b/tools/tools/mfi/runmegacli.sh
new file mode 100644
index 0000000..c69ba2c
--- /dev/null
+++ b/tools/tools/mfi/runmegacli.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# $FreeBSD$
+# This is a simple wrapper for running the MegaCLI tool for Linux. It assumes
+# that the MegaCLI binary has been installed in /compat/linux/usr/sbin/MegaCli.
+# The binary must also have been branded appropriately, and the COMPAT_LINUX,
+# LINPROCFS, and LINSYSFS options must be enabled. It is best to enable the
+# COMPAT_LINUX option and compile the mfi driver into the kernel to ensure that
+# all of the required driver bits are enabled.
+#
+
+megacli=/usr/sbin/MegaCli
+linuxdir=/compat/linux
+osrelease=2.6.12
+
+devfsmount=`mount |grep $linuxdir/dev | awk '{print $3}'`
+if [ "X$devfsmount" = "X" ]; then
+ mount -t devfs devfs $linuxdir/dev
+fi
+
+procfsmount=`mount |grep $linuxdir/proc | awk '{print $3}'`
+if [ "X$procfsmount" = "X" ]; then
+ mount -t linprocfs linprocfs $linuxdir/proc
+fi
+
+sysfsmount=`mount |grep $linuxdir/sys | awk '{print $3}'`
+if [ "X$sysfsmount" = "X" ]; then
+ mount -t linsysfs linsysfs $linuxdir/sys
+fi
+
+linuxver=`sysctl -n compat.linux.osrelease | cut -d . -f 1,2`
+if [ "X$linuxver" != "X2.6" ]; then
+ sysctl compat.linux.osrelease=$osrelease
+fi
+
+chroot /compat/linux /usr/sbin/MegaCli $@
OpenPOWER on IntegriCloud