diff options
author | scottl <scottl@FreeBSD.org> | 2007-01-01 23:50:04 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2007-01-01 23:50:04 +0000 |
commit | 9742680fc8ee30ae1063191b92dd1948e3b17b05 (patch) | |
tree | 1d944b5056191440f94a6a6989565a5a9a683d2e | |
parent | b7dd55cb11065da7bd9519f54367feb994685705 (diff) | |
download | FreeBSD-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.
-rw-r--r-- | tools/tools/mfi/Makefile | 7 | ||||
-rw-r--r-- | tools/tools/mfi/mfi_checkq.c | 81 | ||||
-rw-r--r-- | tools/tools/mfi/runmegacli.sh | 36 |
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 $@ |