svn commit: r252344 - in user/attilio/vmcontention: crypto/openssh etc/defaults etc/rc.d include sbin/nvmecontrol sbin/swapon share/examples/etc share/man/man5 sys/amd64/include sys/amd64/vmm sys/a...
Attilio Rao
attilio at FreeBSD.org
Fri Jun 28 16:11:05 UTC 2013
Author: attilio
Date: Fri Jun 28 16:11:01 2013
New Revision: 252344
URL: http://svnweb.freebsd.org/changeset/base/252344
Log:
MFC
Added:
user/attilio/vmcontention/etc/rc.d/swap
- copied unchanged from r252340, head/etc/rc.d/swap
user/attilio/vmcontention/etc/rc.d/swaplate
- copied unchanged from r252340, head/etc/rc.d/swaplate
user/attilio/vmcontention/sbin/nvmecontrol/devlist.c
- copied unchanged from r252340, head/sbin/nvmecontrol/devlist.c
user/attilio/vmcontention/sbin/nvmecontrol/firmware.c
- copied unchanged from r252340, head/sbin/nvmecontrol/firmware.c
user/attilio/vmcontention/sbin/nvmecontrol/identify.c
- copied unchanged from r252340, head/sbin/nvmecontrol/identify.c
user/attilio/vmcontention/sbin/nvmecontrol/logpage.c
- copied unchanged from r252340, head/sbin/nvmecontrol/logpage.c
user/attilio/vmcontention/sbin/nvmecontrol/nvmecontrol.h
- copied unchanged from r252340, head/sbin/nvmecontrol/nvmecontrol.h
user/attilio/vmcontention/sbin/nvmecontrol/perftest.c
- copied unchanged from r252340, head/sbin/nvmecontrol/perftest.c
user/attilio/vmcontention/sbin/nvmecontrol/reset.c
- copied unchanged from r252340, head/sbin/nvmecontrol/reset.c
user/attilio/vmcontention/sys/kern/subr_vmem.c
- copied unchanged from r252340, head/sys/kern/subr_vmem.c
user/attilio/vmcontention/sys/sys/vmem.h
- copied unchanged from r252340, head/sys/sys/vmem.h
Deleted:
user/attilio/vmcontention/etc/rc.d/encswap
user/attilio/vmcontention/etc/rc.d/swap1
Modified:
user/attilio/vmcontention/crypto/openssh/sshd_config
user/attilio/vmcontention/crypto/openssh/sshd_config.5
user/attilio/vmcontention/etc/defaults/rc.conf
user/attilio/vmcontention/etc/rc.d/Makefile
user/attilio/vmcontention/etc/rc.d/addswap
user/attilio/vmcontention/etc/rc.d/fsck
user/attilio/vmcontention/etc/rc.d/mdconfig
user/attilio/vmcontention/include/paths.h
user/attilio/vmcontention/sbin/nvmecontrol/Makefile
user/attilio/vmcontention/sbin/nvmecontrol/nvmecontrol.8
user/attilio/vmcontention/sbin/nvmecontrol/nvmecontrol.c
user/attilio/vmcontention/sbin/swapon/swapon.8
user/attilio/vmcontention/sbin/swapon/swapon.c
user/attilio/vmcontention/share/examples/etc/make.conf
user/attilio/vmcontention/share/man/man5/fstab.5
user/attilio/vmcontention/sys/amd64/include/acpica_machdep.h
user/attilio/vmcontention/sys/amd64/vmm/x86.c
user/attilio/vmcontention/sys/arm/arm/db_trace.c
user/attilio/vmcontention/sys/arm/arm/exception.S
user/attilio/vmcontention/sys/arm/include/asmacros.h
user/attilio/vmcontention/sys/arm/ti/am335x/am335x_lcd.c
user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
user/attilio/vmcontention/sys/cddl/dev/dtmalloc/dtmalloc.c
user/attilio/vmcontention/sys/conf/files
user/attilio/vmcontention/sys/contrib/dev/acpica/acpica_prep.sh
user/attilio/vmcontention/sys/contrib/dev/acpica/changes.txt (contents, props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/common/dmrestag.c
user/attilio/vmcontention/sys/contrib/dev/acpica/common/dmtable.c
user/attilio/vmcontention/sys/contrib/dev/acpica/common/dmtbdump.c
user/attilio/vmcontention/sys/contrib/dev/acpica/common/dmtbinfo.c
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/aslcompile.c
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/aslmessages.h
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/asltree.c
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/aslutils.c
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/dtfield.c
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/dtio.c
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/dttable.c
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/dttemplate.h
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/dtutils.c
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/preprocess.h
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/prscan.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/debugger/dbcmds.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/debugger/dbdisply.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/debugger/dbinput.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/debugger/dbnames.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/disassembler/dmbuffer.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/disassembler/dmopcode.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/disassembler/dmresrcl.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/disassembler/dmresrcl2.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/events/evgpeinit.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/executer/exdump.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/namespace/nsdump.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/namespace/nsrepair2.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/namespace/nsxfname.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/resources/rsdump.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/resources/rsutils.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/tables/tbxfroot.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/utilities/uteval.c
user/attilio/vmcontention/sys/contrib/dev/acpica/components/utilities/utstring.c
user/attilio/vmcontention/sys/contrib/dev/acpica/include/acdisasm.h
user/attilio/vmcontention/sys/contrib/dev/acpica/include/acpixf.h
user/attilio/vmcontention/sys/contrib/dev/acpica/include/actables.h
user/attilio/vmcontention/sys/contrib/dev/acpica/include/actypes.h
user/attilio/vmcontention/sys/contrib/dev/acpica/include/acutils.h
user/attilio/vmcontention/sys/contrib/dev/acpica/include/platform/acfreebsd.h
user/attilio/vmcontention/sys/dev/acpi_support/atk0110.c
user/attilio/vmcontention/sys/dev/acpica/acpi_pcib_acpi.c
user/attilio/vmcontention/sys/dev/cxgbe/t4_main.c
user/attilio/vmcontention/sys/dev/isci/scil/sati_passthrough.c
user/attilio/vmcontention/sys/dev/nvme/nvme.h
user/attilio/vmcontention/sys/dev/nvme/nvme_ctrlr.c
user/attilio/vmcontention/sys/dev/nvme/nvme_private.h
user/attilio/vmcontention/sys/dev/nvme/nvme_qpair.c
user/attilio/vmcontention/sys/dev/pci/pci.c
user/attilio/vmcontention/sys/dev/pci/pci_private.h
user/attilio/vmcontention/sys/dev/re/if_re.c
user/attilio/vmcontention/sys/dev/usb/serial/u3g.c
user/attilio/vmcontention/sys/dev/usb/usbdevs
user/attilio/vmcontention/sys/dev/xen/blkfront/blkfront.c
user/attilio/vmcontention/sys/dev/xen/blkfront/block.h
user/attilio/vmcontention/sys/fs/ext2fs/ext2_extern.h
user/attilio/vmcontention/sys/geom/geom_io.c
user/attilio/vmcontention/sys/i386/include/acpica_machdep.h
user/attilio/vmcontention/sys/ia64/include/acpica_machdep.h
user/attilio/vmcontention/sys/kern/kern_clock.c
user/attilio/vmcontention/sys/kern/kern_descrip.c
user/attilio/vmcontention/sys/kern/subr_bus.c
user/attilio/vmcontention/sys/kern/vfs_bio.c
user/attilio/vmcontention/sys/sys/bus.h
user/attilio/vmcontention/sys/sys/malloc.h
user/attilio/vmcontention/sys/vm/vm.h
user/attilio/vmcontention/sys/vm/vm_init.c
user/attilio/vmcontention/sys/vm/vm_kern.c
user/attilio/vmcontention/sys/vm/vm_kern.h
user/attilio/vmcontention/sys/vm/vm_object.c
user/attilio/vmcontention/sys/vm/vm_pager.c
user/attilio/vmcontention/sys/vm/vm_pager.h
user/attilio/vmcontention/usr.sbin/acpi/acpidb/acpidb.c
user/attilio/vmcontention/usr.sbin/acpi/acpidump/acpi.c
user/attilio/vmcontention/usr.sbin/bhyve/atpic.c
user/attilio/vmcontention/usr.sbin/bhyve/pci_emul.c
Directory Properties:
user/attilio/vmcontention/ (props changed)
user/attilio/vmcontention/crypto/openssh/ (props changed)
user/attilio/vmcontention/sbin/ (props changed)
user/attilio/vmcontention/sys/ (props changed)
user/attilio/vmcontention/sys/amd64/vmm/ (props changed)
user/attilio/vmcontention/sys/cddl/contrib/opensolaris/ (props changed)
user/attilio/vmcontention/sys/conf/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/common/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/compiler/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/components/debugger/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/components/disassembler/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/components/events/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/components/executer/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/components/namespace/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/components/resources/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/components/tables/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/components/utilities/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/include/ (props changed)
user/attilio/vmcontention/sys/contrib/dev/acpica/os_specific/ (props changed)
user/attilio/vmcontention/usr.sbin/bhyve/ (props changed)
Modified: user/attilio/vmcontention/crypto/openssh/sshd_config
==============================================================================
--- user/attilio/vmcontention/crypto/openssh/sshd_config Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/crypto/openssh/sshd_config Fri Jun 28 16:11:01 2013 (r252344)
@@ -105,7 +105,7 @@
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
-#UsePrivilegeSeparation sandbox
+#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
Modified: user/attilio/vmcontention/crypto/openssh/sshd_config.5
==============================================================================
--- user/attilio/vmcontention/crypto/openssh/sshd_config.5 Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/crypto/openssh/sshd_config.5 Fri Jun 28 16:11:01 2013 (r252344)
@@ -1169,7 +1169,7 @@ the privilege of the authenticated user.
The goal of privilege separation is to prevent privilege
escalation by containing any corruption within the unprivileged processes.
The default is
-.Dq sandbox .
+.Dq yes .
If
.Cm UsePrivilegeSeparation
is set to
Modified: user/attilio/vmcontention/etc/defaults/rc.conf
==============================================================================
--- user/attilio/vmcontention/etc/defaults/rc.conf Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/etc/defaults/rc.conf Fri Jun 28 16:11:01 2013 (r252344)
@@ -32,8 +32,6 @@ early_late_divider="FILESYSTEMS" # Scrip
always_force_depends="NO" # Set to check that indicated dependencies are
# running during boot (can increase boot time).
-swapfile="NO" # Set to name of swapfile if aux swapfile desired.
-swapfile_mdunit="99" # Swapfile md(4) unit number created by mdconfig(8).
apm_enable="NO" # Set to YES to enable APM BIOS functions (or NO).
apmd_enable="NO" # Run apmd to handle APM event from userland.
apmd_flags="" # Flags to apmd (if enabled).
@@ -85,9 +83,6 @@ geli_autodetach="YES" # Automatically de
#geli_da1_autodetach="NO"
#geli_mirror_home_flags="-k /etc/geli/home.keys"
-geli_swap_flags="-e aes -l 256 -s 4096 -d" # Options for GELI-encrypted
- # swap partitions.
-
root_rw_mount="YES" # Set to NO to inhibit remounting root read-write.
fsck_y_enable="NO" # Set to YES to do fsck -y if the initial preen fails.
fsck_y_flags="" # Additional flags for fsck -y
Modified: user/attilio/vmcontention/etc/rc.d/Makefile
==============================================================================
--- user/attilio/vmcontention/etc/rc.d/Makefile Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/etc/rc.d/Makefile Fri Jun 28 16:11:01 2013 (r252344)
@@ -37,7 +37,6 @@ FILES= DAEMON \
dhclient \
dmesg \
dumpon \
- encswap \
faith \
fsck \
ftp-proxy \
@@ -139,7 +138,8 @@ FILES= DAEMON \
static_arp \
static_ndp \
stf \
- swap1 \
+ swap \
+ swaplate \
syscons \
sysctl \
syslogd \
Modified: user/attilio/vmcontention/etc/rc.d/addswap
==============================================================================
--- user/attilio/vmcontention/etc/rc.d/addswap Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/etc/rc.d/addswap Fri Jun 28 16:11:01 2013 (r252344)
@@ -13,57 +13,12 @@
. /etc/rc.subr
name="addswap"
-start_cmd="addswap_start"
-stop_cmd="addswap_stop"
+start_cmd=":"
+stop_cmd=":"
+rcvar=
-addswap_start()
-{
- case ${swapfile} in
- [Nn][Oo] | '')
- ;;
- *)
- if [ -w "${swapfile}" ]; then
- check_startmsgs && echo "Adding ${swapfile} as additional swap"
-
- if [ -n "${swapfile_mdunit}" ]; then
- mdev="/dev/md${swapfile_mdunit#md}"
- mdconfig -a -t vnode -f "${swapfile}" -u ${swapfile_mdunit}
- else
- mdev="/dev/`mdconfig -a -t vnode -f "${swapfile}"`"
- fi
-
- if [ $? -eq 0 ]; then
- swapon ${mdev}
- else
- echo "error creating swapfile device"
- fi
- fi
- ;;
- esac
-}
-
-addswap_stop()
-{
- case ${swapfile} in
- [Nn][Oo] | '')
- ;;
- *)
- if [ -n "${swapfile_mdunit}" ]; then
- mdev="/dev/md${swapfile_mdunit#md}"
- else
- mdev="/dev/`mdconfig -lv | grep "${swapfile}" | cut -f1`"
- swapfile_mdunit=${mdev#md}
- fi
- if [ -n "${swapfile_mdunit}" ]; then
- swapctl -l | grep -q ${mdev}
- if [ $? -eq 0 ]; then
- echo "Dismounting swapfile ${swapfile}"
- swapoff ${mdev} && mdconfig -d -u ${swapfile_mdunit}
- fi
- fi
- ;;
- esac
-}
+set_rcvar_obsolete swapfile
+set_rcvar_obsolete geli_swap_flags
load_rc_config $name
run_rc_command "$1"
Modified: user/attilio/vmcontention/etc/rc.d/fsck
==============================================================================
--- user/attilio/vmcontention/etc/rc.d/fsck Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/etc/rc.d/fsck Fri Jun 28 16:11:01 2013 (r252344)
@@ -4,7 +4,7 @@
#
# PROVIDE: fsck
-# REQUIRE: localswap
+# REQUIRE: swap
# KEYWORD: nojail
. /etc/rc.subr
Modified: user/attilio/vmcontention/etc/rc.d/mdconfig
==============================================================================
--- user/attilio/vmcontention/etc/rc.d/mdconfig Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/etc/rc.d/mdconfig Fri Jun 28 16:11:01 2013 (r252344)
@@ -28,7 +28,7 @@
#
# PROVIDE: mdconfig
-# REQUIRE: localswap root
+# REQUIRE: swap root
. /etc/rc.subr
Copied: user/attilio/vmcontention/etc/rc.d/swap (from r252340, head/etc/rc.d/swap)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/attilio/vmcontention/etc/rc.d/swap Fri Jun 28 16:11:01 2013 (r252344, copy of r252340, head/etc/rc.d/swap)
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: swap
+# REQUIRE: disks
+# KEYWORD: nojail shutdown
+
+. /etc/rc.subr
+
+name="swap"
+start_cmd='/sbin/swapon -aq'
+stop_cmd=':'
+
+load_rc_config $name
+run_rc_command "$1"
Copied: user/attilio/vmcontention/etc/rc.d/swaplate (from r252340, head/etc/rc.d/swaplate)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/attilio/vmcontention/etc/rc.d/swaplate Fri Jun 28 16:11:01 2013 (r252344, copy of r252340, head/etc/rc.d/swaplate)
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: swaplate
+# REQUIRE: mountlate
+# KEYWORD: nojail shutdown
+
+. /etc/rc.subr
+
+name="swaplate"
+start_cmd='/sbin/swapon -aLq'
+stop_cmd='/sbin/swapoff -aq'
+
+load_rc_config swap
+run_rc_command "$1"
Modified: user/attilio/vmcontention/include/paths.h
==============================================================================
--- user/attilio/vmcontention/include/paths.h Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/include/paths.h Fri Jun 28 16:11:01 2013 (r252344)
@@ -57,6 +57,8 @@
#define _PATH_ETC "/etc"
#define _PATH_FTPUSERS "/etc/ftpusers"
#define _PATH_FWMEM "/dev/fwmem"
+#define _PATH_GBDE "/sbin/gbde"
+#define _PATH_GELI "/sbin/geli"
#define _PATH_HALT "/sbin/halt"
#ifdef COMPAT_32BIT
#define _PATH_I18NMODULE "/usr/lib32/i18n"
Modified: user/attilio/vmcontention/sbin/nvmecontrol/Makefile
==============================================================================
--- user/attilio/vmcontention/sbin/nvmecontrol/Makefile Fri Jun 28 16:07:20 2013 (r252343)
+++ user/attilio/vmcontention/sbin/nvmecontrol/Makefile Fri Jun 28 16:11:01 2013 (r252344)
@@ -1,6 +1,8 @@
# $FreeBSD$
PROG= nvmecontrol
+SRCS= nvmecontrol.c devlist.c firmware.c identify.c logpage.c \
+ perftest.c reset.c
MAN= nvmecontrol.8
.include <bsd.prog.mk>
Copied: user/attilio/vmcontention/sbin/nvmecontrol/devlist.c (from r252340, head/sbin/nvmecontrol/devlist.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/attilio/vmcontention/sbin/nvmecontrol/devlist.c Fri Jun 28 16:11:01 2013 (r252344, copy of r252340, head/sbin/nvmecontrol/devlist.c)
@@ -0,0 +1,115 @@
+/*-
+ * Copyright (C) 2012-2013 Intel Corporation
+ * All rights reserved.
+ *
+ * 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/param.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include "nvmecontrol.h"
+
+static void
+devlist_usage(void)
+{
+ fprintf(stderr, "usage:\n");
+ fprintf(stderr, DEVLIST_USAGE);
+ exit(EX_USAGE);
+}
+
+static inline uint32_t
+ns_get_sector_size(struct nvme_namespace_data *nsdata)
+{
+
+ return (1 << nsdata->lbaf[0].lbads);
+}
+
+void
+devlist(int argc, char *argv[])
+{
+ struct nvme_controller_data cdata;
+ struct nvme_namespace_data nsdata;
+ char name[64];
+ uint32_t i;
+ int ch, ctrlr, exit_code, fd, found;
+
+ exit_code = EX_OK;
+
+ while ((ch = getopt(argc, argv, "")) != -1) {
+ switch ((char)ch) {
+ default:
+ devlist_usage();
+ }
+ }
+
+ ctrlr = -1;
+ found = 0;
+
+ while (1) {
+ ctrlr++;
+ sprintf(name, "%s%d", NVME_CTRLR_PREFIX, ctrlr);
+
+ exit_code = open_dev(name, &fd, 0, 0);
+
+ if (exit_code == EX_NOINPUT)
+ break;
+ else if (exit_code == EX_NOPERM) {
+ printf("Could not open /dev/%s, errno = %d (%s)\n",
+ name, errno, strerror(errno));
+ continue;
+ }
+
+ found++;
+ read_controller_data(fd, &cdata);
+ printf("%6s: %s\n", name, cdata.mn);
+
+ for (i = 0; i < cdata.nn; i++) {
+ sprintf(name, "%s%d%s%d", NVME_CTRLR_PREFIX, ctrlr,
+ NVME_NS_PREFIX, i+1);
+ read_namespace_data(fd, i+1, &nsdata);
+ printf(" %10s (%lldGB)\n",
+ name,
+ nsdata.nsze *
+ (long long)ns_get_sector_size(&nsdata) /
+ 1024 / 1024 / 1024);
+ }
+
+ close(fd);
+ }
+
+ if (found == 0)
+ printf("No NVMe controllers found.\n");
+
+ exit(EX_OK);
+}
Copied: user/attilio/vmcontention/sbin/nvmecontrol/firmware.c (from r252340, head/sbin/nvmecontrol/firmware.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/attilio/vmcontention/sbin/nvmecontrol/firmware.c Fri Jun 28 16:11:01 2013 (r252344, copy of r252340, head/sbin/nvmecontrol/firmware.c)
@@ -0,0 +1,335 @@
+/*-
+ * Copyright (c) 2013 EMC Corp.
+ * All rights reserved.
+ *
+ * Copyright (C) 2012-2013 Intel Corporation
+ * All rights reserved.
+ *
+ * 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/param.h>
+#include <sys/ioccom.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include "nvmecontrol.h"
+
+static int
+slot_has_valid_firmware(int fd, int slot)
+{
+ struct nvme_firmware_page fw;
+ int has_fw = false;
+
+ read_logpage(fd, NVME_LOG_FIRMWARE_SLOT,
+ NVME_GLOBAL_NAMESPACE_TAG, &fw, sizeof(fw));
+
+ if (fw.revision[slot-1] != 0LLU)
+ has_fw = true;
+
+ return (has_fw);
+}
+
+static void
+read_image_file(char *path, void **buf, ssize_t *size)
+{
+ struct stat sb;
+ int fd;
+
+ *size = 0;
+ *buf = NULL;
+
+ if ((fd = open(path, O_RDONLY)) < 0) {
+ fprintf(stderr, "Unable to open '%s'.\n", path);
+ exit(EX_IOERR);
+ }
+ if (fstat(fd, &sb) < 0) {
+ fprintf(stderr, "Unable to stat '%s'.\n", path);
+ close(fd);
+ exit(EX_IOERR);
+ }
+ if ((*buf = malloc(sb.st_size)) == NULL) {
+ fprintf(stderr, "Unable to malloc %zd bytes.\n",
+ sb.st_size);
+ close(fd);
+ exit(EX_IOERR);
+ }
+ if ((*size = read(fd, *buf, sb.st_size)) < 0) {
+ fprintf(stderr, "Error reading '%s', errno=%d (%s)\n",
+ path, errno, strerror(errno));
+ close(fd);
+ exit(EX_IOERR);
+ }
+ if (*size != sb.st_size) {
+ fprintf(stderr, "Error reading '%s', "
+ "read %zd bytes, requested %zd bytes\n",
+ path, *size, sb.st_size);
+ close(fd);
+ exit(EX_IOERR);
+ }
+}
+
+static void
+update_firmware(int fd, uint8_t *payload, uint32_t payload_size)
+{
+ struct nvme_pt_command pt;
+ size_t size;
+ void *chunk;
+ uint32_t off, resid;
+ int exit_code = EX_OK;
+
+ off = 0;
+ resid = payload_size;
+
+ if ((chunk = malloc((size_t)NVME_MAX_XFER_SIZE)) == NULL) {
+ printf("Unable to malloc %d bytes.\n", NVME_MAX_XFER_SIZE);
+ exit(EX_IOERR);
+ }
+
+ while (resid > 0) {
+ size = (resid >= NVME_MAX_XFER_SIZE) ?
+ NVME_MAX_XFER_SIZE : resid;
+ memcpy(chunk, payload + off, size);
+
+ memset(&pt, 0, sizeof(pt));
+ pt.cmd.opc = NVME_OPC_FIRMWARE_IMAGE_DOWNLOAD;
+ pt.cmd.cdw10 = (size / sizeof(uint32_t)) - 1;
+ pt.cmd.cdw11 = (off / sizeof(uint32_t));
+ pt.buf = chunk;
+ pt.len = size;
+ pt.is_read = 0;
+
+ if (ioctl(fd, NVME_PASSTHROUGH_CMD, &pt) < 0) {
+ printf("Firmware image download request failed. "
+ "errno=%d (%s)\n",
+ errno, strerror(errno));
+ exit_code = EX_IOERR;
+ break;
+ }
+
+ if (nvme_completion_is_error(&pt.cpl)) {
+ printf("Passthrough command returned error.\n");
+ exit_code = EX_IOERR;
+ break;
+ }
+
+ resid -= size;
+ off += size;
+ }
+
+ if (exit_code != EX_OK)
+ exit(exit_code);
+}
+
+static void
+activate_firmware(int fd, int slot, int activate_action)
+{
+ struct nvme_pt_command pt;
+
+ memset(&pt, 0, sizeof(pt));
+ pt.cmd.opc = NVME_OPC_FIRMWARE_ACTIVATE;
+ pt.cmd.cdw10 = (activate_action << 3) | slot;
+ pt.is_read = 0;
+
+ if (ioctl(fd, NVME_PASSTHROUGH_CMD, &pt) < 0) {
+ printf("Firmware activate request failed. errno=%d (%s)\n",
+ errno, strerror(errno));
+ exit(EX_IOERR);
+ }
+
+ if (nvme_completion_is_error(&pt.cpl)) {
+ printf("Passthrough command returned error.\n");
+ exit(EX_IOERR);
+ }
+}
+
+static void
+firmware_usage(void)
+{
+ fprintf(stderr, "usage:\n");
+ fprintf(stderr, FIRMWARE_USAGE);
+ exit(EX_USAGE);
+}
+
+void
+firmware(int argc, char *argv[])
+{
+ int fd = -1, slot = 0;
+ int a_flag, s_flag, f_flag;
+ char ch, *p, *image = NULL;
+ char *controller = NULL, prompt[64];
+ void *buf = NULL;
+ ssize_t size;
+ struct nvme_controller_data cdata;
+
+ a_flag = s_flag = f_flag = false;
+
+ while ((ch = getopt(argc, argv, "af:s:")) != -1) {
+ switch (ch) {
+ case 'a':
+ a_flag = true;
+ break;
+ case 's':
+ slot = strtol(optarg, &p, 0);
+ if (p != NULL && *p != '\0') {
+ fprintf(stderr,
+ "\"%s\" not valid slot.\n",
+ optarg);
+ firmware_usage();
+ } else if (slot == 0) {
+ fprintf(stderr,
+ "0 is not a valid slot number. "
+ "Slot numbers start at 1.\n");
+ firmware_usage();
+ } else if (slot > 7) {
+ fprintf(stderr,
+ "Slot number %s specified which is "
+ "greater than max allowed slot number of "
+ "7.\n", optarg);
+ firmware_usage();
+ }
+ s_flag = true;
+ break;
+ case 'f':
+ image = optarg;
+ f_flag = true;
+ break;
+ }
+ }
+
+ /* Check that a controller (and not a namespace) was specified. */
+ if (optind >= argc || strstr(argv[optind], NVME_NS_PREFIX) != NULL)
+ firmware_usage();
+
+ if (!f_flag && !a_flag) {
+ fprintf(stderr,
+ "Neither a replace ([-f path_to_firmware]) nor "
+ "activate ([-a]) firmware image action\n"
+ "was specified.\n");
+ firmware_usage();
+ }
+
+ if (!f_flag && a_flag && slot == 0) {
+ fprintf(stderr,
+ "Slot number to activate not specified.\n");
+ firmware_usage();
+ }
+
+ controller = argv[optind];
+ open_dev(controller, &fd, 1, 1);
+ read_controller_data(fd, &cdata);
+
+ if (cdata.oacs.firmware == 0) {
+ fprintf(stderr,
+ "Controller does not support firmware "
+ "activate/download.\n");
+ exit(EX_IOERR);
+ }
+
+ if (f_flag && slot == 1 && cdata.frmw.slot1_ro) {
+ fprintf(stderr, "Slot %d is marked as read only.\n", slot);
+ exit(EX_IOERR);
+ }
+
+ if (slot > cdata.frmw.num_slots) {
+ fprintf(stderr,
+ "Slot %d was specified but controller only "
+ "supports %d firmware slots.\n",
+ slot, cdata.frmw.num_slots);
+ exit(EX_IOERR);
+ }
+
+ if (!slot_has_valid_firmware(fd, slot)) {
+ fprintf(stderr,
+ "Slot %d does not contain valid firmware.\n"
+ "Try 'nvmecontrol logpage -p 3 %s' to get a list "
+ "of available firmware images.\n",
+ slot, controller);
+ exit(EX_IOERR);
+ }
+
+ if (f_flag && a_flag)
+ printf("You are about to download and activate "
+ "firmware image (%s) to controller %s.\n"
+ "This may damage your controller and/or "
+ "overwrite an existing firmware image.\n",
+ image, controller);
+ else if (a_flag)
+ printf("You are about to activate a new firmware "
+ "image on controller %s.\n"
+ "This may damage your controller.\n",
+ controller);
+ else if (f_flag)
+ printf("You are about to download firmware image "
+ "(%s) to controller %s.\n"
+ "This may damage your controller and/or "
+ "overwrite an existing firmware image.\n",
+ image, controller);
+
+ printf("Are you sure you want to continue? (yes/no) ");
+ while (1) {
+ fgets(prompt, sizeof(prompt), stdin);
+ if (strncasecmp(prompt, "yes", 3) == 0)
+ break;
+ if (strncasecmp(prompt, "no", 2) == 0)
+ exit(EX_OK);
+ printf("Please answer \"yes\" or \"no\". ");
+ }
+
+ if (f_flag) {
+ read_image_file(image, &buf, &size);
+ update_firmware(fd, buf, size);
+ if (a_flag)
+ activate_firmware(fd, slot,
+ NVME_AA_REPLACE_ACTIVATE);
+ else
+ activate_firmware(fd, slot,
+ NVME_AA_REPLACE_NO_ACTIVATE);
+ } else {
+ activate_firmware(fd, slot, NVME_AA_ACTIVATE);
+ }
+
+ if (a_flag) {
+ printf("New firmware image activated and will take "
+ "effect after next controller reset.\n"
+ "Controller reset can be initiated via "
+ "'nvmecontrol reset %s'\n",
+ controller);
+ }
+
+ close(fd);
+ exit(EX_OK);
+}
Copied: user/attilio/vmcontention/sbin/nvmecontrol/identify.c (from r252340, head/sbin/nvmecontrol/identify.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/attilio/vmcontention/sbin/nvmecontrol/identify.c Fri Jun 28 16:11:01 2013 (r252344, copy of r252340, head/sbin/nvmecontrol/identify.c)
@@ -0,0 +1,291 @@
+/*-
+ * Copyright (C) 2012-2013 Intel Corporation
+ * All rights reserved.
+ *
+ * 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/param.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include "nvmecontrol.h"
+
+static void
+print_controller(struct nvme_controller_data *cdata)
+{
+ printf("Controller Capabilities/Features\n");
+ printf("================================\n");
+ printf("Vendor ID: %04x\n", cdata->vid);
+ printf("Subsystem Vendor ID: %04x\n", cdata->ssvid);
+ printf("Serial Number: %s\n", cdata->sn);
+ printf("Model Number: %s\n", cdata->mn);
+ printf("Firmware Version: %s\n", cdata->fr);
+ printf("Recommended Arb Burst: %d\n", cdata->rab);
+ printf("IEEE OUI Identifier: %02x %02x %02x\n",
+ cdata->ieee[0], cdata->ieee[1], cdata->ieee[2]);
+ printf("Multi-Interface Cap: %02x\n", cdata->mic);
+ /* TODO: Use CAP.MPSMIN to determine true memory page size. */
+ printf("Max Data Transfer Size: ");
+ if (cdata->mdts == 0)
+ printf("Unlimited\n");
+ else
+ printf("%d\n", PAGE_SIZE * (1 << cdata->mdts));
+ printf("\n");
+
+ printf("Admin Command Set Attributes\n");
+ printf("============================\n");
+ printf("Security Send/Receive: %s\n",
+ cdata->oacs.security ? "Supported" : "Not Supported");
+ printf("Format NVM: %s\n",
+ cdata->oacs.format ? "Supported" : "Not Supported");
+ printf("Firmware Activate/Download: %s\n",
+ cdata->oacs.firmware ? "Supported" : "Not Supported");
+ printf("Abort Command Limit: %d\n", cdata->acl+1);
+ printf("Async Event Request Limit: %d\n", cdata->aerl+1);
+ printf("Number of Firmware Slots: ");
+ if (cdata->oacs.firmware != 0)
+ printf("%d\n", cdata->frmw.num_slots);
+ else
+ printf("N/A\n");
+ printf("Firmware Slot 1 Read-Only: ");
+ if (cdata->oacs.firmware != 0)
+ printf("%s\n", cdata->frmw.slot1_ro ? "Yes" : "No");
+ else
+ printf("N/A\n");
+ printf("Per-Namespace SMART Log: %s\n",
+ cdata->lpa.ns_smart ? "Yes" : "No");
+ printf("Error Log Page Entries: %d\n", cdata->elpe+1);
+ printf("Number of Power States: %d\n", cdata->npss+1);
+ printf("\n");
+
+ printf("NVM Command Set Attributes\n");
+ printf("==========================\n");
+ printf("Submission Queue Entry Size\n");
+ printf(" Max: %d\n", 1 << cdata->sqes.max);
+ printf(" Min: %d\n", 1 << cdata->sqes.min);
+ printf("Completion Queue Entry Size\n");
+ printf(" Max: %d\n", 1 << cdata->cqes.max);
+ printf(" Min: %d\n", 1 << cdata->cqes.min);
+ printf("Number of Namespaces: %d\n", cdata->nn);
+ printf("Compare Command: %s\n",
+ cdata->oncs.compare ? "Supported" : "Not Supported");
+ printf("Write Uncorrectable Command: %s\n",
+ cdata->oncs.write_unc ? "Supported" : "Not Supported");
+ printf("Dataset Management Command: %s\n",
+ cdata->oncs.dsm ? "Supported" : "Not Supported");
+ printf("Volatile Write Cache: %s\n",
+ cdata->vwc.present ? "Present" : "Not Present");
+}
+
+static void
+print_namespace(struct nvme_namespace_data *nsdata)
+{
+ uint32_t i;
+
+ printf("Size (in LBAs): %lld (%lldM)\n",
+ (long long)nsdata->nsze,
+ (long long)nsdata->nsze / 1024 / 1024);
+ printf("Capacity (in LBAs): %lld (%lldM)\n",
+ (long long)nsdata->ncap,
+ (long long)nsdata->ncap / 1024 / 1024);
+ printf("Utilization (in LBAs): %lld (%lldM)\n",
+ (long long)nsdata->nuse,
+ (long long)nsdata->nuse / 1024 / 1024);
+ printf("Thin Provisioning: %s\n",
+ nsdata->nsfeat.thin_prov ? "Supported" : "Not Supported");
+ printf("Number of LBA Formats: %d\n", nsdata->nlbaf+1);
+ printf("Current LBA Format: LBA Format #%d\n",
+ nsdata->flbas.format);
+ for (i = 0; i <= nsdata->nlbaf; i++) {
+ printf("LBA Format #%d:\n", i);
+ printf(" LBA Data Size: %d\n",
+ 1 << nsdata->lbaf[i].lbads);
+ }
+}
+
+static void
+identify_usage(void)
+{
+ fprintf(stderr, "usage:\n");
+ fprintf(stderr, IDENTIFY_USAGE);
+ exit(EX_USAGE);
+}
+
+static void
+identify_ctrlr(int argc, char *argv[])
+{
+ struct nvme_controller_data cdata;
+ int ch, fd, hexflag = 0, hexlength;
+ int verboseflag = 0;
+
+ while ((ch = getopt(argc, argv, "vx")) != -1) {
+ switch ((char)ch) {
+ case 'v':
+ verboseflag = 1;
+ break;
+ case 'x':
+ hexflag = 1;
+ break;
+ default:
+ identify_usage();
+ }
+ }
+
+ /* Check that a controller was specified. */
+ if (optind >= argc)
+ identify_usage();
+
+ open_dev(argv[optind], &fd, 1, 1);
+ read_controller_data(fd, &cdata);
+ close(fd);
+
+ if (hexflag == 1) {
+ if (verboseflag == 1)
+ hexlength = sizeof(struct nvme_controller_data);
+ else
+ hexlength = offsetof(struct nvme_controller_data,
+ reserved5);
+ print_hex(&cdata, hexlength);
+ exit(EX_OK);
+ }
+
+ if (verboseflag == 1) {
+ printf("-v not currently supported without -x.\n");
+ identify_usage();
+ }
+
+ print_controller(&cdata);
+ exit(EX_OK);
+}
+
+static void
+identify_ns(int argc, char *argv[])
+{
+ struct nvme_namespace_data nsdata;
+ char path[64];
+ char *nsloc;
+ int ch, fd, hexflag = 0, hexlength, nsid;
+ int verboseflag = 0;
+
+ while ((ch = getopt(argc, argv, "vx")) != -1) {
+ switch ((char)ch) {
+ case 'v':
+ verboseflag = 1;
+ break;
+ case 'x':
+ hexflag = 1;
+ break;
+ default:
+ identify_usage();
+ }
+ }
+
+ /* Check that a namespace was specified. */
+ if (optind >= argc)
+ identify_usage();
+
+ /*
+ * Check if the specified device node exists before continuing.
+ * This is a cleaner check for cases where the correct controller
+ * is specified, but an invalid namespace on that controller.
+ */
+ open_dev(argv[optind], &fd, 1, 1);
+ close(fd);
+
+ /*
+ * Pull the namespace id from the string. +2 skips past the "ns" part
+ * of the string. Don't search past 10 characters into the string,
+ * otherwise we know it is malformed.
+ */
+ nsloc = strnstr(argv[optind], NVME_NS_PREFIX, 10);
+ if (nsloc != NULL)
+ nsid = strtol(nsloc + 2, NULL, 10);
+ if (nsloc == NULL || (nsid == 0 && errno != 0)) {
+ printf("Invalid namespace ID %s.\n", argv[optind]);
+ exit(EX_IOERR);
+ }
+
+ /*
+ * We send IDENTIFY commands to the controller, not the namespace,
+ * since it is an admin cmd. So the path should only include the
+ * nvmeX part of the nvmeXnsY string.
+ */
+ snprintf(path, nsloc - argv[optind] + 1, "%s", argv[optind]);
+ open_dev(path, &fd, 1, 1);
+ read_namespace_data(fd, nsid, &nsdata);
+ close(fd);
+
+ if (hexflag == 1) {
+ if (verboseflag == 1)
+ hexlength = sizeof(struct nvme_namespace_data);
+ else
+ hexlength = offsetof(struct nvme_namespace_data,
+ reserved6);
+ print_hex(&nsdata, hexlength);
+ exit(EX_OK);
+ }
+
+ if (verboseflag == 1) {
+ printf("-v not currently supported without -x.\n");
+ identify_usage();
+ }
+
+ print_namespace(&nsdata);
+ exit(EX_OK);
+}
+
+void
+identify(int argc, char *argv[])
+{
+ char *target;
+
+ if (argc < 2)
+ identify_usage();
+
+ while (getopt(argc, argv, "vx") != -1) ;
+
+ target = argv[optind];
+
+ optreset = 1;
+ optind = 1;
+
+ /*
+ * If device node contains "ns", we consider it a namespace,
+ * otherwise, consider it a controller.
+ */
+ if (strstr(target, NVME_NS_PREFIX) == NULL)
+ identify_ctrlr(argc, argv);
+ else
+ identify_ns(argc, argv);
+}
Copied: user/attilio/vmcontention/sbin/nvmecontrol/logpage.c (from r252340, head/sbin/nvmecontrol/logpage.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/attilio/vmcontention/sbin/nvmecontrol/logpage.c Fri Jun 28 16:11:01 2013 (r252344, copy of r252340, head/sbin/nvmecontrol/logpage.c)
@@ -0,0 +1,388 @@
+/*-
+ * Copyright (c) 2013 EMC Corp.
+ * All rights reserved.
+ *
+ * Copyright (C) 2012-2013 Intel Corporation
+ * All rights reserved.
+ *
+ * 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/param.h>
+#include <sys/ioccom.h>
+
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list