summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2019-07-29 12:13:24 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2019-07-29 12:13:24 +0000
commit17304c0b18b0ddd09fa2283f34a32b031338ff26 (patch)
treee74f22b7bb16647b7e9da94d68bf69aae4e463f4
parent4114093726f400cc6f3a5e1fb3c934d55cdf5f66 (diff)
parent5cffb2606ed604b9f1f45d061bc8aa92e0536f70 (diff)
downloadillumos-joyent-17304c0b18b0ddd09fa2283f34a32b031338ff26.tar.gz
[illumos-gate merge]
commit 5cffb2606ed604b9f1f45d061bc8aa92e0536f70 11306 syseventd cores after hot-add of disk commit 508a0e8cf1600b06c1f7361ad76e736710d3fdf8 11257 Add DDI support for Upgradable Firmware Modules 11258 Add libtopo support for Upgradable Firmware Modules Conflicts: usr/src/uts/sparc/ufmtest/Makefile usr/src/uts/sparc/Makefile.sparc usr/src/uts/intel/ufmtest/Makefile usr/src/uts/common/sys/scsi/adapters/mpt_sas/mptsas_var.h usr/src/uts/common/sys/ddi_ufm_impl.h usr/src/uts/common/sys/ddi_ufm.h usr/src/uts/common/io/ufmtest.c usr/src/uts/common/io/ufm.c usr/src/test/os-tests/tests/Makefile usr/src/test/os-tests/runfiles/default.run usr/src/man/man9f/ddi_ufm_image.9f usr/src/man/man9f/Makefile usr/src/man/man9e/ddi_ufm.9e usr/src/man/man9e/Makefile usr/src/man/man7d/ufm.7d usr/src/lib/fm/topo/libtopo/common/topo_mod.c
-rw-r--r--manifest2
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/mapfile-vers2
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/topo_mod.c4
-rw-r--r--usr/src/lib/libdiskmgt/common/events.c117
-rw-r--r--usr/src/man/man7d/ufm.7d8
-rw-r--r--usr/src/man/man9e/Makefile6
-rw-r--r--usr/src/man/man9e/ddi_ufm.9e8
-rw-r--r--usr/src/man/man9f/Makefile26
-rw-r--r--usr/src/man/man9f/ddi_ufm_image.9f3
-rw-r--r--usr/src/pkg/manifests/system-header.mf2
-rw-r--r--usr/src/pkg/manifests/system-io-tests.mf3
-rw-r--r--usr/src/pkg/manifests/system-kernel.man7d.inc2
-rw-r--r--usr/src/pkg/manifests/system-kernel.man9e.inc6
-rw-r--r--usr/src/pkg/manifests/system-kernel.man9f.inc13
-rw-r--r--usr/src/pkg/manifests/system-kernel.mf4
-rw-r--r--usr/src/pkg/manifests/system-test-ostest.mf7
-rw-r--r--usr/src/test/os-tests/runfiles/default.run6
-rw-r--r--usr/src/test/os-tests/tests/ddi_ufm/Makefile2
-rw-r--r--usr/src/test/os-tests/tests/ddi_ufm/ufm-test-cleanup.sh32
-rw-r--r--usr/src/test/os-tests/tests/ddi_ufm/ufm-test-setup.sh34
-rw-r--r--usr/src/uts/common/io/i40e/i40e_main.c22
-rw-r--r--usr/src/uts/common/io/i40e/i40e_sw.h16
-rw-r--r--usr/src/uts/common/io/ufm.c4
-rw-r--r--usr/src/uts/common/io/ufmtest.c6
-rw-r--r--usr/src/uts/common/mapfiles/ddi.mapfile3
-rw-r--r--usr/src/uts/common/sys/ddi_ufm.h6
-rw-r--r--usr/src/uts/common/sys/ddi_ufm_impl.h2
-rw-r--r--usr/src/uts/common/sys/scsi/adapters/mpt_sas/mptsas_var.h1
-rw-r--r--usr/src/uts/intel/ufmtest/Makefile2
-rw-r--r--usr/src/uts/sparc/Makefile.sparc1
-rw-r--r--usr/src/uts/sparc/ufmtest/Makefile2
31 files changed, 260 insertions, 92 deletions
diff --git a/manifest b/manifest
index bf032129e7..711d93bb40 100644
--- a/manifest
+++ b/manifest
@@ -19344,6 +19344,7 @@ f usr/share/man/man9e/csx_event_handler.9e 0444 root bin
f usr/share/man/man9e/ddi_ufm.9e 0444 root bin
s usr/share/man/man9e/ddi_ufm_op_fill_image.9e=ddi_ufm.9e
s usr/share/man/man9e/ddi_ufm_op_fill_slot.9e=ddi_ufm.9e
+s usr/share/man/man9e/ddi_ufm_op_getcaps.9e=ddi_ufm.9e
s usr/share/man/man9e/ddi_ufm_op_nimages.9e=ddi_ufm.9e
s usr/share/man/man9e/ddi_ufm_op_nslots.9e=ddi_ufm.9e
f usr/share/man/man9e/detach.9e 0444 root bin
@@ -20039,6 +20040,7 @@ s usr/share/man/man9f/ddi_ufm_update.9f=ddi_ufm.9f
f usr/share/man/man9f/ddi_ufm_image.9f 0444 root bin
s usr/share/man/man9f/ddi_ufm_image_set_desc.9f=ddi_ufm_image.9f
s usr/share/man/man9f/ddi_ufm_image_set_misc.9f=ddi_ufm_image.9f
+s usr/share/man/man9f/ddi_ufm_image_set_nslots.9f=ddi_ufm_image.9f
f usr/share/man/man9f/ddi_ufm_slot.9f 0444 root bin
s usr/share/man/man9f/ddi_ufm_slot_set_attrs.9f=ddi_ufm_slot.9f
s usr/share/man/man9f/ddi_ufm_slot_set_misc.9f=ddi_ufm_slot.9f
diff --git a/usr/src/lib/fm/topo/libtopo/common/mapfile-vers b/usr/src/lib/fm/topo/libtopo/common/mapfile-vers
index 8ead50bf0f..76c7f15f85 100644
--- a/usr/src/lib/fm/topo/libtopo/common/mapfile-vers
+++ b/usr/src/lib/fm/topo/libtopo/common/mapfile-vers
@@ -97,6 +97,8 @@ SYMBOL_VERSION SUNWprivate {
topo_mod_create_ufm_slot;
topo_mod_clrdebug;
topo_mod_cpufmri;
+ topo_mod_create_ufm;
+ topo_mod_create_ufm_slot;
topo_mod_devfmri;
topo_mod_devinfo;
topo_mod_dprintf;
diff --git a/usr/src/lib/fm/topo/libtopo/common/topo_mod.c b/usr/src/lib/fm/topo/libtopo/common/topo_mod.c
index 4b1cf13d34..851f0264cd 100644
--- a/usr/src/lib/fm/topo/libtopo/common/topo_mod.c
+++ b/usr/src/lib/fm/topo/libtopo/common/topo_mod.c
@@ -1025,7 +1025,7 @@ topo_mod_create_ufm_slot(topo_mod_t *mod, tnode_t *ufmnode,
nvlist_free(fmri);
/* Just inherit the parent's FRU */
- if (topo_node_fru_set(slotnode, NULL, NULL, &err) != 0) {
+ if (topo_node_fru_set(slotnode, NULL, 0, &err) != 0) {
topo_mod_dprintf(mod, "failed to set FRU on %s: %s", UFM,
topo_strerror(err));
(void) topo_mod_seterrno(mod, err);
@@ -1153,7 +1153,7 @@ topo_mod_create_ufm(topo_mod_t *mod, tnode_t *parent, const char *descr,
nvlist_free(fmri);
/* Just inherit the parent's FRU */
- if (topo_node_fru_set(ufmnode, NULL, NULL, &err) != 0) {
+ if (topo_node_fru_set(ufmnode, NULL, 0, &err) != 0) {
topo_mod_dprintf(mod, "failed to set FRU on %s: %s", UFM,
topo_strerror(err));
(void) topo_mod_seterrno(mod, err);
diff --git a/usr/src/lib/libdiskmgt/common/events.c b/usr/src/lib/libdiskmgt/common/events.c
index 134abe1846..6874000bea 100644
--- a/usr/src/lib/libdiskmgt/common/events.c
+++ b/usr/src/lib/libdiskmgt/common/events.c
@@ -23,6 +23,9 @@
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
+/*
+ * Copyright 2019 Joyent, Inc.
+ */
#include <stdio.h>
#include <stdlib.h>
@@ -39,11 +42,16 @@
#include "libdiskmgt.h"
#include "disks_private.h"
+#pragma fini(libdiskmgt_fini)
+
struct event_list {
struct event_list *next;
nvlist_t *event;
};
+static mutex_t shp_lock = ERRORCHECKMUTEX;
+static sysevent_handle_t *shp = NULL;
+
static struct event_list *events = NULL;
static int event_error = 0;
static int event_break = 0;
@@ -72,8 +80,10 @@ static sema_t semaphore;
#define WALK_RUNNING 2
#define WALK_WAIT_TIME 60 /* wait 60 seconds */
-static mutex_t walker_lock;
+static mutex_t walker_lock = ERRORCHECKMUTEX;
+static cond_t walker_cv = DEFAULTCV;
static int walker_state = WALK_NONE;
+
static int events_pending = 0;
static int sendevents = 0;
@@ -87,6 +97,31 @@ static void walker(void *arg);
static void(*callback)(nvlist_t *, int) = NULL;
+static boolean_t shutting_down = B_FALSE;
+
+static void
+libdiskmgt_fini(void)
+{
+ mutex_enter(&shp_lock);
+ if (shp != NULL) {
+ sysevent_unsubscribe_event(shp, EC_ALL);
+ sysevent_unbind_handle(shp);
+ shp = NULL;
+ }
+ /*
+ * At this point a new invocation of walker() can't occur. However,
+ * if one was already running then we need to wait for it to finish
+ * because if we allow ourselves to be unloaded out from underneath
+ * it, then bad things will happen.
+ */
+ mutex_enter(&walker_lock);
+ shutting_down = B_TRUE;
+ while (walker_state != WALK_NONE)
+ (void) cond_wait(&walker_cv, &walker_lock);
+
+ mutex_exit(&walker_lock);
+}
+
nvlist_t *
dm_get_event(int *errp)
{
@@ -223,40 +258,44 @@ events_new_slice_event(char *dev, char *type)
int
events_start_event_watcher()
{
- sysevent_handle_t *shp;
const char *subclass_list[1];
+ int ret = -1;
+
+ mutex_enter(&shp_lock);
+ if (shp != NULL) {
+ ret = 0;
+ goto out;
+ }
/* Bind event handler and create subscriber handle */
shp = sysevent_bind_handle(event_handler);
if (shp == NULL) {
- if (dm_debug) {
- /* keep going when we're debugging */
- (void) fprintf(stderr, "ERROR: bind failed %d\n", errno);
- return (0);
- }
- return (errno);
+ if (dm_debug) {
+ (void) fprintf(stderr, "ERROR: sysevent bind failed: "
+ "%d\n", errno);
+ }
+ goto out;
}
subclass_list[0] = ESC_DISK;
- if (sysevent_subscribe_event(shp, EC_DEV_ADD, subclass_list, 1) != 0) {
- if (dm_debug) {
- /* keep going when we're debugging */
- (void) fprintf(stderr, "ERROR: subscribe failed\n");
- return (0);
- }
- return (errno);
- }
- if (sysevent_subscribe_event(shp, EC_DEV_REMOVE, subclass_list, 1)
- != 0) {
- if (dm_debug) {
- /* keep going when we're debugging */
- (void) fprintf(stderr, "ERROR: subscribe failed\n");
- return (0);
- }
- return (errno);
- }
+ if (sysevent_subscribe_event(shp, EC_DEV_ADD, subclass_list, 1) != 0 ||
+ sysevent_subscribe_event(shp, EC_DEV_REMOVE, subclass_list, 1) !=
+ 0) {
+
+ sysevent_unsubscribe_event(shp, EC_ALL);
+ sysevent_unbind_handle(shp);
+ shp = NULL;
- return (0);
+ if (dm_debug) {
+ (void) fprintf(stderr, "ERROR: sysevent subscribe "
+ "failed: %d\n", errno);
+ }
+ goto out;
+ }
+ ret = 0;
+out:
+ mutex_exit(&shp_lock);
+ return (ret);
}
static void
@@ -439,7 +478,7 @@ walk_devtree()
{
thread_t walk_thread;
- (void) mutex_lock(&walker_lock);
+ mutex_enter(&walker_lock);
switch (walker_state) {
case WALK_NONE:
@@ -458,7 +497,7 @@ walk_devtree()
break;
}
- (void) mutex_unlock(&walker_lock);
+ mutex_exit(&walker_lock);
}
/*ARGSUSED*/
@@ -468,16 +507,28 @@ walker(void *arg)
int walk_again = 0;
do {
- /* start by wating for a few seconds to absorb extra events */
+ /* start by waiting for a few seconds to absorb extra events */
(void) sleep(WALK_WAIT_TIME);
- (void) mutex_lock(&walker_lock);
+ mutex_enter(&walker_lock);
+ if (shutting_down) {
+ walker_state = WALK_NONE;
+ (void) cond_broadcast(&walker_cv);
+ mutex_exit(&walker_lock);
+ return;
+ }
walker_state = WALK_RUNNING;
- (void) mutex_unlock(&walker_lock);
+ mutex_exit(&walker_lock);
cache_update(DM_EV_DISK_ADD, NULL);
- (void) mutex_lock(&walker_lock);
+ mutex_enter(&walker_lock);
+ if (shutting_down) {
+ walker_state = WALK_NONE;
+ (void) cond_broadcast(&walker_cv);
+ mutex_exit(&walker_lock);
+ return;
+ }
if (events_pending) {
events_pending = 0;
@@ -488,7 +539,7 @@ walker(void *arg)
walk_again = 0;
}
- (void) mutex_unlock(&walker_lock);
+ mutex_exit(&walker_lock);
} while (walk_again);
}
diff --git a/usr/src/man/man7d/ufm.7d b/usr/src/man/man7d/ufm.7d
index 7fb7b0c6db..5cd2b3581e 100644
--- a/usr/src/man/man7d/ufm.7d
+++ b/usr/src/man/man7d/ufm.7d
@@ -68,9 +68,9 @@ On success the ufmg_caps field will be filled in with a value indicating the
supported UFM capabilities of the device specified in ufmg_devpath.
.Bd -literal
typedef struct ufm_ioc_getcaps {
- uint_t ufmg_version; /* DDI_UFM_VERSION */
+ uint_t ufmg_version; /* DDI_UFM_VERSION */
uint_t ufmg_caps; /* UFM Caps */
- char ufmg_devpath[MAXPATHLEN];
+ char ufmg_devpath[MAXPATHLEN];
} ufm_ioc_getcaps_t;
.Ed
.It UFM_IOC_REPORTSZ
@@ -87,7 +87,7 @@ Callers should specify the ufbz_version and ufbz_devpath fields.
On success the ufmg_size field will be filled in with the required buffer size.
.Bd -literal
typedef struct ufm_ioc_bufsz {
- uint_t ufbz_version; /* DDI_UFM_VERSION */
+ uint_t ufbz_version; /* DDI_UFM_VERSION */
size_t ufbz_size; /* sz of buf to be returned by ioctl */
char ufbz_devpath[MAXPATHLEN];
} ufm_ioc_bufsz_t;
@@ -176,7 +176,7 @@ main(int argc, char **argv)
.Sh ERRORS
On failure to open or perform ioctls to the
.Nm
-driver,
+driver,
.Va errno
will be set to indicate the type of error.
A subset of the more common errors are detailed below.
diff --git a/usr/src/man/man9e/Makefile b/usr/src/man/man9e/Makefile
index 081194c3b4..a67785e520 100644
--- a/usr/src/man/man9e/Makefile
+++ b/usr/src/man/man9e/Makefile
@@ -99,8 +99,8 @@ MANFILES= Intro.9e \
MANLINKS= ddi_ufm_op_fill_image.9e \
ddi_ufm_op_fill_slot.9e \
+ ddi_ufm_op_getcaps.9e \
ddi_ufm_op_nimages.9e \
- ddi_ufm_op_nslots.9e \
_info.9e \
_init.9e \
gldv3.9e \
@@ -135,10 +135,10 @@ MANLINKS= ddi_ufm_op_fill_image.9e \
usba_hcdi_pipe_close.9e \
usba_hcdi_pipe_stop_isoc_polling.9e
-ddi_ufm_op_nimages.9e := LINKSRC = ddi_ufm.9e
-ddi_ufm_op_nslots.9e := LINKSRC = ddi_ufm.9e
ddi_ufm_op_fill_image.9e := LINKSRC = ddi_ufm.9e
ddi_ufm_op_fill_slot.9e := LINKSRC = ddi_ufm.9e
+ddi_ufm_op_getcaps.9e := LINKSRC = ddi_ufm.9e
+ddi_ufm_op_nimages.9e := LINKSRC = ddi_ufm.9e
intro.9e := LINKSRC = Intro.9e
_info.9e := LINKSRC = _fini.9e
diff --git a/usr/src/man/man9e/ddi_ufm.9e b/usr/src/man/man9e/ddi_ufm.9e
index 162a7bea6d..62e49893f8 100644
--- a/usr/src/man/man9e/ddi_ufm.9e
+++ b/usr/src/man/man9e/ddi_ufm.9e
@@ -19,7 +19,8 @@
.Nm ddi_ufm_op_nimages ,
.Nm ddi_ufm_op_fill_image ,
.Nm ddi_ufm_op_nslots ,
-.Nm ddi_ufm_op_fill_slot
+.Nm ddi_ufm_op_fill_slot ,
+.Nm ddi_ufm_op_getcaps
.Nd DDI upgradable firmware module entry points
.Sh SYNOPSIS
.Vt typedef struct ddi_ufm_handle ddi_ufm_handle_t
@@ -58,7 +59,8 @@
.Bl -tag -width Fa
.It Fa uhp
A handle corresponding to the device's UFM handle.
-This is the same value as returned in .Xr ddi_ufm_init 9F .
+This is the same value as returned in
+.Xr ddi_ufm_init 9F .
.It Fa drv_arg
This is a private value that the driver passed in when calling
.Xr ddi_ufm_init 9F .
@@ -396,7 +398,7 @@ block until it is terminated.
.Ss ioctl Interface
Userland consumers can access UFM information via a set of ioctls that are
implemented by the
-.Xr ufd 7D
+.Xr ufm 7D
driver.
.Sh CONTEXT
The various UFM entry points that a device driver must implement will
diff --git a/usr/src/man/man9f/Makefile b/usr/src/man/man9f/Makefile
index 335afe6ab0..a750abb887 100644
--- a/usr/src/man/man9f/Makefile
+++ b/usr/src/man/man9f/Makefile
@@ -12,14 +12,14 @@
#
# Copyright 2017, Richard Lowe
# Copyright 2014 Garrett D'Amore <garrett@damore>
-# Copyright (c) 2019, Joyent, Inc.
+# Copyright 2019 Joyent, Inc.
# Copyright 2016 Nexenta Systems, Inc.
# Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
#
include $(SRC)/Makefile.master
-MANSECT= 9f
+MANSECT= 9f
MANFILES= ASSERT.9f \
Intro.9f \
@@ -921,6 +921,7 @@ MANLINKS= AVL_NEXT.9f \
ddi_ufm_fini.9f \
ddi_ufm_image_set_desc.9f \
ddi_ufm_image_set_misc.9f \
+ ddi_ufm_image_set_nslots.9f \
ddi_ufm_init.9f \
ddi_ufm_slot_set_attrs.9f \
ddi_ufm_slot_set_misc.9f \
@@ -1210,13 +1211,13 @@ MANLINKS= AVL_NEXT.9f \
scsi_hba_iportmap_iport_add.9f \
scsi_hba_iportmap_iport_remove.9f \
scsi_hba_pkt_free.9f \
- scsi_hba_tgtmap_destroy.9f \
- scsi_hba_tgtmap_set_begin.9f \
- scsi_hba_tgtmap_set_add.9f \
- scsi_hba_tgtmap_set_end.9f \
- scsi_hba_tgtmap_set_flush.9f \
- scsi_hba_tgtmap_tgt_add.9f \
- scsi_hba_tgtmap_tgt_remove.9f \
+ scsi_hba_tgtmap_destroy.9f \
+ scsi_hba_tgtmap_set_begin.9f \
+ scsi_hba_tgtmap_set_add.9f \
+ scsi_hba_tgtmap_set_end.9f \
+ scsi_hba_tgtmap_set_flush.9f \
+ scsi_hba_tgtmap_tgt_add.9f \
+ scsi_hba_tgtmap_tgt_remove.9f \
scsi_hba_tran_free.9f \
scsi_ifsetcap.9f \
scsi_mname.9f \
@@ -1450,7 +1451,7 @@ avl_add.9f := LINKSRC = avl.9f
avl_create.9f := LINKSRC = avl.9f
avl_destroy.9f := LINKSRC = avl.9f
avl_destroy_nodes.9f := LINKSRC = avl.9f
-avl_find.9f := LINKSRC = avl.9f
+avl_find.9f := LINKSRC = avl.9f
avl_first.9f := LINKSRC = avl.9f
avl_insert.9f := LINKSRC = avl.9f
avl_insert_here.9f := LINKSRC = avl.9f
@@ -1769,6 +1770,7 @@ devmap_load.9f := LINKSRC = devmap_unload.9f
ddi_ufm_fini.9f := LINKSRC = ddi_ufm.9f
ddi_ufm_image_set_desc.9f := LINKSRC = ddi_ufm_image.9f
ddi_ufm_image_set_misc.9f := LINKSRC = ddi_ufm_image.9f
+ddi_ufm_image_set_nslots.9f := LINKSRC = ddi_ufm_image.9f
ddi_ufm_init.9f := LINKSRC = ddi_ufm.9f
ddi_ufm_slot_set_attrs.9f := LINKSRC = ddi_ufm_slot.9f
ddi_ufm_slot_set_misc.9f := LINKSRC = ddi_ufm_slot.9f
@@ -2119,8 +2121,8 @@ scsi_hba_iport_find.9f := LINKSRC = scsi_hba_iport_exist.9f
scsi_hba_pkt_free.9f := LINKSRC = scsi_hba_pkt_alloc.9f
-scsi_hba_tgtmap_destroy.9f := LINKSRC = scsi_hba_tgtmap_create.9f
-scsi_hba_tgtmap_set_begin.9f := LINKSRC = scsi_hba_tgtmap_create.9f
+scsi_hba_tgtmap_destroy.9f := LINKSRC = scsi_hba_tgtmap_create.9f
+scsi_hba_tgtmap_set_begin.9f := LINKSRC = scsi_hba_tgtmap_create.9f
scsi_hba_tgtmap_set_add.9f := LINKSRC = scsi_hba_tgtmap_create.9f
scsi_hba_tgtmap_set_end.9f := LINKSRC = scsi_hba_tgtmap_create.9f
scsi_hba_tgtmap_set_flush.9f := LINKSRC = scsi_hba_tgtmap_create.9f
diff --git a/usr/src/man/man9f/ddi_ufm_image.9f b/usr/src/man/man9f/ddi_ufm_image.9f
index 3b1e2ebe74..606103bb8c 100644
--- a/usr/src/man/man9f/ddi_ufm_image.9f
+++ b/usr/src/man/man9f/ddi_ufm_image.9f
@@ -16,7 +16,8 @@
.Os
.Sh NAME
.Nm ddi_ufm_image_set_desc ,
-.Nm ddi_ufm_image_set_misc
+.Nm ddi_ufm_image_set_misc ,
+.Nm ddi_ufm_image_set_nslots
.Nd UFM image property routines
.Sh SYNOPSIS
.In sys/ddi_ufm.h
diff --git a/usr/src/pkg/manifests/system-header.mf b/usr/src/pkg/manifests/system-header.mf
index 494e5dd023..2f78c34031 100644
--- a/usr/src/pkg/manifests/system-header.mf
+++ b/usr/src/pkg/manifests/system-header.mf
@@ -900,6 +900,8 @@ file path=usr/include/sys/ddi_intr_impl.h
file path=usr/include/sys/ddi_isa.h
file path=usr/include/sys/ddi_obsolete.h
file path=usr/include/sys/ddi_periodic.h
+file path=usr/include/sys/ddi_ufm.h
+file path=usr/include/sys/ddi_ufm_impl.h
file path=usr/include/sys/ddidevmap.h
file path=usr/include/sys/ddidmareq.h
file path=usr/include/sys/ddifm.h
diff --git a/usr/src/pkg/manifests/system-io-tests.mf b/usr/src/pkg/manifests/system-io-tests.mf
index 68d0a51b1a..4794852e10 100644
--- a/usr/src/pkg/manifests/system-io-tests.mf
+++ b/usr/src/pkg/manifests/system-io-tests.mf
@@ -21,6 +21,7 @@
#
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright 2019 Joyent, Inc.
#
set name=pkg.fmri value=pkg:/system/io/tests@$(PKGVERS)
@@ -48,8 +49,10 @@ file path=usr/kernel/drv/$(ARCH64)/pshot group=sys
file path=usr/kernel/drv/$(ARCH64)/tclient group=sys
file path=usr/kernel/drv/$(ARCH64)/tphci group=sys
file path=usr/kernel/drv/$(ARCH64)/tvhci group=sys
+file path=usr/kernel/drv/$(ARCH64)/ufmtest group=sys
file path=usr/kernel/drv/emul64.conf group=sys
file path=usr/kernel/drv/pshot.conf group=sys
+file path=usr/kernel/drv/ufmtest.conf group=sys
file path=usr/lib/scsi/sestopo mode=0555
file path=usr/lib/scsi/smp mode=0555
file path=usr/sbin/devctl mode=0555
diff --git a/usr/src/pkg/manifests/system-kernel.man7d.inc b/usr/src/pkg/manifests/system-kernel.man7d.inc
index 375ba3896a..07da55bde8 100644
--- a/usr/src/pkg/manifests/system-kernel.man7d.inc
+++ b/usr/src/pkg/manifests/system-kernel.man7d.inc
@@ -12,6 +12,7 @@
#
# Copyright 2011, Richard Lowe
# Copyright 2016 Nexenta Systems, Inc.
+# Copyright 2019 Joyent, Inc.
#
file path=usr/share/man/man7d/bscv.7d
@@ -46,6 +47,7 @@ file path=usr/share/man/man7d/ticlts.7d
file path=usr/share/man/man7d/tty.7d
file path=usr/share/man/man7d/ttymux.7d
file path=usr/share/man/man7d/tzmon.7d
+file path=usr/share/man/man7d/ufm.7d
file path=usr/share/man/man7d/virtualkm.7d
file path=usr/share/man/man7d/vni.7d
file path=usr/share/man/man7d/wscons.7d
diff --git a/usr/src/pkg/manifests/system-kernel.man9e.inc b/usr/src/pkg/manifests/system-kernel.man9e.inc
index 600a2bf7f9..3513e98c4c 100644
--- a/usr/src/pkg/manifests/system-kernel.man9e.inc
+++ b/usr/src/pkg/manifests/system-kernel.man9e.inc
@@ -12,6 +12,7 @@
#
# Copyright 2011, Richard Lowe
# Copyright 2012 Nexenta Systems, Inc. All rights reserved.
+# Copyright 2019 Joyent, Inc.
#
file path=usr/share/man/man9e/Intro.9e
@@ -22,6 +23,7 @@ file path=usr/share/man/man9e/awrite.9e
file path=usr/share/man/man9e/chpoll.9e
file path=usr/share/man/man9e/close.9e
file path=usr/share/man/man9e/csx_event_handler.9e
+file path=usr/share/man/man9e/ddi_ufm.9e
file path=usr/share/man/man9e/detach.9e
file path=usr/share/man/man9e/devmap.9e
file path=usr/share/man/man9e/devmap_access.9e
@@ -82,6 +84,10 @@ link path=usr/share/man/man9e/GLDv3.9e target=mac.9e
link path=usr/share/man/man9e/MAC.9e target=mac.9e
link path=usr/share/man/man9e/_info.9e target=_fini.9e
link path=usr/share/man/man9e/_init.9e target=_fini.9e
+link path=usr/share/man/man9e/ddi_ufm_op_fill_image.9e target=ddi_ufm.9e
+link path=usr/share/man/man9e/ddi_ufm_op_fill_slot.9e target=ddi_ufm.9e
+link path=usr/share/man/man9e/ddi_ufm_op_getcaps.9e target=ddi_ufm.9e
+link path=usr/share/man/man9e/ddi_ufm_op_nimages.9e target=ddi_ufm.9e
link path=usr/share/man/man9e/gldm_get_stats.9e target=gld.9e
link path=usr/share/man/man9e/gldm_intr.9e target=gld.9e
link path=usr/share/man/man9e/gldm_ioctl.9e target=gld.9e
diff --git a/usr/src/pkg/manifests/system-kernel.man9f.inc b/usr/src/pkg/manifests/system-kernel.man9f.inc
index e209013182..c09595a017 100644
--- a/usr/src/pkg/manifests/system-kernel.man9f.inc
+++ b/usr/src/pkg/manifests/system-kernel.man9f.inc
@@ -14,6 +14,7 @@
# Copyright 2014 Garrett D'Amore <garrett@damore.org>
# Copyright 2016 Nexenta Systems, Inc.
# Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
+# Copyright 2019 Joyent, Inc.
#
file path=usr/share/man/man9f/ASSERT.9f
@@ -237,6 +238,9 @@ file path=usr/share/man/man9f/ddi_soft_state.9f
file path=usr/share/man/man9f/ddi_strtol.9f
file path=usr/share/man/man9f/ddi_strtoll.9f
file path=usr/share/man/man9f/ddi_strtoul.9f
+file path=usr/share/man/man9f/ddi_ufm.9f
+file path=usr/share/man/man9f/ddi_ufm_image.9f
+file path=usr/share/man/man9f/ddi_ufm_slot.9f
file path=usr/share/man/man9f/ddi_umem_alloc.9f
file path=usr/share/man/man9f/ddi_umem_iosetup.9f
file path=usr/share/man/man9f/ddi_umem_lock.9f
@@ -913,6 +917,15 @@ link path=usr/share/man/man9f/ddi_taskq_suspend.9f target=taskq.9f
link path=usr/share/man/man9f/ddi_taskq_wait.9f target=taskq.9f
link path=usr/share/man/man9f/ddi_trigger_softintr.9f \
target=ddi_add_softintr.9f
+link path=usr/share/man/man9f/ddi_ufm_fini.9f target=ddi_ufm.9f
+link path=usr/share/man/man9f/ddi_ufm_init.9f target=ddi_ufm.9f
+link path=usr/share/man/man9f/ddi_ufm_update.9f target=ddi_ufm.9f
+link path=usr/share/man/man9f/ddi_ufm_image_set_desc.9f target=ddi_ufm_image.9f
+link path=usr/share/man/man9f/ddi_ufm_image_set_misc.9f target=ddi_ufm_image.9f
+link path=usr/share/man/man9f/ddi_ufm_image_set_nslots.9f target=ddi_ufm_image.9f
+link path=usr/share/man/man9f/ddi_ufm_slot_set_attrs.9f target=ddi_ufm_slot.9f
+link path=usr/share/man/man9f/ddi_ufm_slot_set_misc.9f target=ddi_ufm_slot.9f
+link path=usr/share/man/man9f/ddi_ufm_slot_set_version.9f target=ddi_ufm_slot.9f
link path=usr/share/man/man9f/ddi_umem_free.9f target=ddi_umem_alloc.9f
link path=usr/share/man/man9f/ddi_umem_unlock.9f target=ddi_umem_lock.9f
link path=usr/share/man/man9f/ddi_unmap_regs.9f target=ddi_map_regs.9f
diff --git a/usr/src/pkg/manifests/system-kernel.mf b/usr/src/pkg/manifests/system-kernel.mf
index 58e1aa8ff2..70fa5dd1dc 100644
--- a/usr/src/pkg/manifests/system-kernel.mf
+++ b/usr/src/pkg/manifests/system-kernel.mf
@@ -26,6 +26,7 @@
# Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
# Copyright 2017 James S Blachly, MD <james.blachly@gmail.com>
# Copyright 2019 RackTop Systems
+# Copyright 2019 Joyent, Inc.
#
#
@@ -286,6 +287,7 @@ $(sparc_ONLY)driver name=uata \
$(i386_ONLY)driver name=ucode perms="* 0644 root sys"
driver name=udp perms="udp 0666 root sys"
driver name=udp6 perms="udp6 0666 root sys"
+driver name=ufm perms="ufm 0666 root sys"
$(i386_ONLY)driver name=vgatext \
alias=pciclass,000100 \
alias=pciclass,030000 \
@@ -406,6 +408,7 @@ $(sparc_ONLY)file path=kernel/drv/$(ARCH64)/uata group=sys
$(i386_ONLY)file path=kernel/drv/$(ARCH64)/ucode group=sys
file path=kernel/drv/$(ARCH64)/udp group=sys
file path=kernel/drv/$(ARCH64)/udp6 group=sys
+file path=kernel/drv/$(ARCH64)/ufm group=sys
$(i386_ONLY)file path=kernel/drv/$(ARCH64)/vgatext group=sys
file path=kernel/drv/$(ARCH64)/vnic group=sys
file path=kernel/drv/$(ARCH64)/wc group=sys
@@ -490,6 +493,7 @@ $(sparc_ONLY)file path=kernel/drv/uata.conf group=sys \
$(i386_ONLY)file path=kernel/drv/ucode.conf group=sys
file path=kernel/drv/udp.conf group=sys
file path=kernel/drv/udp6.conf group=sys
+file path=kernel/drv/ufm.conf group=sys
file path=kernel/drv/vnic.conf group=sys
file path=kernel/drv/wc.conf group=sys
$(sparc_ONLY)file path=kernel/exec/$(ARCH64)/aoutexec group=sys mode=0755
diff --git a/usr/src/pkg/manifests/system-test-ostest.mf b/usr/src/pkg/manifests/system-test-ostest.mf
index 935920cc83..78d46bdf6a 100644
--- a/usr/src/pkg/manifests/system-test-ostest.mf
+++ b/usr/src/pkg/manifests/system-test-ostest.mf
@@ -12,7 +12,7 @@
#
# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
# Copyright 2014, OmniTI Computer Consulting, Inc. All rights reserved.
-# Copyright 2018 Joyent, Inc.
+# Copyright 2019 Joyent, Inc.
#
set name=pkg.fmri value=pkg:/system/test/ostest@$(PKGVERS)
@@ -25,6 +25,7 @@ dir path=opt/os-tests
dir path=opt/os-tests/bin
dir path=opt/os-tests/runfiles
dir path=opt/os-tests/tests
+dir path=opt/os-tests/tests/ddi_ufm
dir path=opt/os-tests/tests/file-locking
$(i386_ONLY)dir path=opt/os-tests/tests/i386
dir path=opt/os-tests/tests/pf_key
@@ -36,6 +37,9 @@ dir path=opt/os-tests/tests/stress
file path=opt/os-tests/README mode=0444
file path=opt/os-tests/bin/ostest mode=0555
file path=opt/os-tests/runfiles/default.run mode=0444
+file path=opt/os-tests/tests/ddi_ufm/ufm-test mode=0555
+file path=opt/os-tests/tests/ddi_ufm/ufm-test-cleanup mode=0555
+file path=opt/os-tests/tests/ddi_ufm/ufm-test-setup mode=0555
file path=opt/os-tests/tests/epoll_test mode=0555
file path=opt/os-tests/tests/file-locking/acquire-lock.32 mode=0555
file path=opt/os-tests/tests/file-locking/acquire-lock.64 mode=0555
@@ -76,4 +80,5 @@ file path=opt/os-tests/tests/stress/dladm-kstat mode=0555
license cr_Sun license=cr_Sun
license lic_CDDL license=lic_CDDL
depend fmri=pkg:/network/telnet type=require
+depend fmri=system/io/tests type=require
depend fmri=system/test/testrunner type=require
diff --git a/usr/src/test/os-tests/runfiles/default.run b/usr/src/test/os-tests/runfiles/default.run
index 232688ccce..d9d0f03464 100644
--- a/usr/src/test/os-tests/runfiles/default.run
+++ b/usr/src/test/os-tests/runfiles/default.run
@@ -11,7 +11,7 @@
#
# Copyright (c) 2012 by Delphix. All rights reserved.
-# Copyright 2018 Joyent, Inc.
+# Copyright 2019 Joyent, Inc.
#
[DEFAULT]
@@ -74,6 +74,10 @@ tests = ['acquire-compare', 'acquire-spray']
[/opt/os-tests/tests/OS-6097.32]
[/opt/os-tests/tests/OS-6097.64]
+[/opt/os-tests/tests/ddi_ufm]
+user = root
+tests = ['ufm-test-setup', 'ufm-test', 'ufm-test-cleanup']
+
[/opt/os-tests/tests/i386]
user = root
arch = i86pc
diff --git a/usr/src/test/os-tests/tests/ddi_ufm/Makefile b/usr/src/test/os-tests/tests/ddi_ufm/Makefile
index c8f0aaae3f..31646142b0 100644
--- a/usr/src/test/os-tests/tests/ddi_ufm/Makefile
+++ b/usr/src/test/os-tests/tests/ddi_ufm/Makefile
@@ -18,7 +18,7 @@ include $(SRC)/Makefile.master
ROOTOPTPKG = $(ROOT)/opt/os-tests
TESTDIR = $(ROOTOPTPKG)/tests/ddi_ufm
-PROGS = ufm-test
+PROGS = ufm-test-setup ufm-test ufm-test-cleanup
include $(SRC)/cmd/Makefile.cmd
include $(SRC)/test/Makefile.com
diff --git a/usr/src/test/os-tests/tests/ddi_ufm/ufm-test-cleanup.sh b/usr/src/test/os-tests/tests/ddi_ufm/ufm-test-cleanup.sh
new file mode 100644
index 0000000000..f71951511f
--- /dev/null
+++ b/usr/src/test/os-tests/tests/ddi_ufm/ufm-test-cleanup.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/bash
+
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2019 Joyent, Inc.
+#
+
+grep ufmtest /etc/name_to_major &> /dev/null
+if [[ $? -eq 1 ]]; then
+ printf "ufmtest driver is not currently installed\n"
+ exit 0
+fi
+
+printf "Removing ufmtest driver ...\n"
+/usr/sbin/rem_drv ufmtest
+if [[ $? -ne 0 ]]; then
+ printf "Failed to remove the ufmtest driver.\n" 1>&2
+ exit 1
+else
+ exit 0
+fi
+
diff --git a/usr/src/test/os-tests/tests/ddi_ufm/ufm-test-setup.sh b/usr/src/test/os-tests/tests/ddi_ufm/ufm-test-setup.sh
new file mode 100644
index 0000000000..6895b2f479
--- /dev/null
+++ b/usr/src/test/os-tests/tests/ddi_ufm/ufm-test-setup.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/bash
+
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2019 Joyent, Inc.
+#
+
+grep ufmtest /etc/name_to_major &>/dev/null
+if [[ $? -eq 0 ]]; then
+ printf "ufmtest driver is already installed\n"
+ exit 0
+fi
+
+printf "Installing ufmtest driver ... \n"
+/usr/sbin/add_drv -v -f ufmtest
+
+if [[ $? -ne 0 ]]; then
+ printf "%s\n%s\n" "Failed to install the ufmtest driver." \
+ "Verify that the IPS package system/io/tests is installed." 1>&2
+ exit 1
+else
+ exit 0
+fi
+
diff --git a/usr/src/uts/common/io/i40e/i40e_main.c b/usr/src/uts/common/io/i40e/i40e_main.c
index 954deb6808..003997a408 100644
--- a/usr/src/uts/common/io/i40e/i40e_main.c
+++ b/usr/src/uts/common/io/i40e/i40e_main.c
@@ -2036,7 +2036,7 @@ i40e_set_shared_vsi_props(i40e_t *i40e,
info->mapping_flags = LE_16(I40E_AQ_VSI_QUE_MAP_CONTIG);
info->queue_mapping[0] =
LE_16((vsi_qp_base << I40E_AQ_VSI_QUEUE_SHIFT) &
- I40E_AQ_VSI_QUEUE_MASK);
+ I40E_AQ_VSI_QUEUE_MASK);
/*
* tc_queues determines the size of the traffic class, where
@@ -2044,12 +2044,12 @@ i40e_set_shared_vsi_props(i40e_t *i40e,
* and 128 for the X722.
*
* Some examples:
- * i40e_num_trqpairs_per_vsi == 1 => tc_queues = 0, 2^^0 = 1.
- * i40e_num_trqpairs_per_vsi == 7 => tc_queues = 3, 2^^3 = 8.
- * i40e_num_trqpairs_per_vsi == 8 => tc_queues = 3, 2^^3 = 8.
- * i40e_num_trqpairs_per_vsi == 9 => tc_queues = 4, 2^^4 = 16.
- * i40e_num_trqpairs_per_vsi == 17 => tc_queues = 5, 2^^5 = 32.
- * i40e_num_trqpairs_per_vsi == 64 => tc_queues = 6, 2^^6 = 64.
+ * i40e_num_trqpairs_per_vsi == 1 => tc_queues = 0, 2^^0 = 1.
+ * i40e_num_trqpairs_per_vsi == 7 => tc_queues = 3, 2^^3 = 8.
+ * i40e_num_trqpairs_per_vsi == 8 => tc_queues = 3, 2^^3 = 8.
+ * i40e_num_trqpairs_per_vsi == 9 => tc_queues = 4, 2^^4 = 16.
+ * i40e_num_trqpairs_per_vsi == 17 => tc_queues = 5, 2^^5 = 32.
+ * i40e_num_trqpairs_per_vsi == 64 => tc_queues = 6, 2^^6 = 64.
*/
tc_queues = ddi_fls(i40e->i40e_num_trqpairs_per_vsi - 1);
@@ -2060,9 +2060,9 @@ i40e_set_shared_vsi_props(i40e_t *i40e,
*/
info->tc_mapping[0] =
LE_16(((0 << I40E_AQ_VSI_TC_QUE_OFFSET_SHIFT) &
- I40E_AQ_VSI_TC_QUE_OFFSET_MASK) |
- ((tc_queues << I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT) &
- I40E_AQ_VSI_TC_QUE_NUMBER_MASK));
+ I40E_AQ_VSI_TC_QUE_OFFSET_MASK) |
+ ((tc_queues << I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT) &
+ I40E_AQ_VSI_TC_QUE_NUMBER_MASK));
/*
* I40E_AQ_VSI_PVLAN_MODE_ALL ("VLAN driver insertion mode")
@@ -2397,7 +2397,7 @@ out:
/*
* Set up RSS.
- * 1. Seed the hash key.
+ * 1. Seed the hash key.
* 2. Enable PCTYPEs for the hash filter.
* 3. Populate the LUT.
*/
diff --git a/usr/src/uts/common/io/i40e/i40e_sw.h b/usr/src/uts/common/io/i40e/i40e_sw.h
index 7b0ff20c95..4bd0a58c2a 100644
--- a/usr/src/uts/common/io/i40e/i40e_sw.h
+++ b/usr/src/uts/common/io/i40e/i40e_sw.h
@@ -149,7 +149,7 @@ typedef enum i40e_itr_index {
I40E_ITR_INDEX_RX = 0x0,
I40E_ITR_INDEX_TX = 0x1,
I40E_ITR_INDEX_OTHER = 0x2,
- I40E_ITR_INDEX_NONE = 0x3
+ I40E_ITR_INDEX_NONE = 0x3
} i40e_itr_index_t;
/*
@@ -336,7 +336,7 @@ typedef enum i40e_attach_state {
I40E_ATTACH_ALLOC_INTR = 0x0008, /* Interrupts allocated */
I40E_ATTACH_ALLOC_RINGSLOCKS = 0x0010, /* Rings & locks allocated */
I40E_ATTACH_ADD_INTR = 0x0020, /* Intr handlers added */
- I40E_ATTACH_COMMON_CODE = 0x0040, /* Intel code initialized */
+ I40E_ATTACH_COMMON_CODE = 0x0040, /* Intel code initialized */
I40E_ATTACH_INIT = 0x0080, /* Device initialized */
I40E_ATTACH_STATS = 0x0200, /* Kstats created */
I40E_ATTACH_MAC = 0x0800, /* MAC registered */
@@ -355,12 +355,12 @@ typedef enum i40e_attach_state {
* I40E_INITIALIZED: The device has been fully attached.
* I40E_STARTED: The device has come out of the GLDV3 start routine.
* I40E_SUSPENDED: The device is suspended and I/O among other things
- * should not occur. This happens because of an actual
- * DDI_SUSPEND or interrupt adjustments.
+ * should not occur. This happens because of an actual
+ * DDI_SUSPEND or interrupt adjustments.
* I40E_STALL: The tx stall detection logic has found a stall.
* I40E_OVERTEMP: The device has encountered a temperature alarm.
* I40E_INTR_ADJUST: Our interrupts are being manipulated and therefore we
- * shouldn't be manipulating their state.
+ * shouldn't be manipulating their state.
* I40E_ERROR: We've detected an FM error and degraded the device.
*/
typedef enum i40e_state {
@@ -592,7 +592,7 @@ typedef struct i40e_trqpair {
*/
i40e_dma_buffer_t itrq_desc_area; /* DMA buffer of tx desc ring */
i40e_tx_desc_t *itrq_desc_ring; /* TX Desc ring */
- volatile uint32_t *itrq_desc_wbhead; /* TX write-back index */
+ volatile uint32_t *itrq_desc_wbhead; /* TX write-back index */
uint32_t itrq_desc_head; /* Last index hw freed */
uint32_t itrq_desc_tail; /* Index of next free desc */
uint32_t itrq_desc_free; /* Number of free descriptors */
@@ -825,7 +825,7 @@ typedef struct i40e {
struct i40e_hw i40e_hw_space;
struct i40e_osdep i40e_osdep_space;
struct i40e_aq_get_phy_abilities_resp i40e_phy;
- void *i40e_aqbuf;
+ void *i40e_aqbuf;
#define I40E_DEF_VSI_IDX 0
#define I40E_DEF_VSI(i40e) ((i40e)->i40e_vsis[I40E_DEF_VSI_IDX])
@@ -858,7 +858,7 @@ typedef struct i40e {
* Transmit and receive information, tunables, and MAC info.
*/
i40e_trqpair_t *i40e_trqpairs;
- boolean_t i40e_mr_enable;
+ boolean_t i40e_mr_enable;
uint_t i40e_num_trqpairs; /* total TRQPs (per PF) */
uint_t i40e_num_trqpairs_per_vsi; /* TRQPs per VSI */
uint_t i40e_other_itr;
diff --git a/usr/src/uts/common/io/ufm.c b/usr/src/uts/common/io/ufm.c
index 40b1b4120b..49a98c101a 100644
--- a/usr/src/uts/common/io/ufm.c
+++ b/usr/src/uts/common/io/ufm.c
@@ -16,10 +16,6 @@
/*
* The ufm(7D) pseudo driver provides an ioctl interface for DDI UFM
* information. See ddi_ufm.h.
- *
- * Most of the test cases depend on the ufmtest driver being loaded.
- * On SmartOS, this driver will need to be manually installed, as it is not
- * part of the platform image.
*/
#include <sys/ddi.h>
#include <sys/sunddi.h>
diff --git a/usr/src/uts/common/io/ufmtest.c b/usr/src/uts/common/io/ufmtest.c
index 8d74f0d91e..ea9bb115d5 100644
--- a/usr/src/uts/common/io/ufmtest.c
+++ b/usr/src/uts/common/io/ufmtest.c
@@ -15,6 +15,10 @@
/*
* This is a test driver used for exercising the DDI UFM subsystem.
+ *
+ * Most of the test cases depend on the ufmtest driver being loaded.
+ * On SmartOS, this driver will need to be manually installed, as it is not
+ * part of the platform image.
*/
#include <sys/ddi.h>
#include <sys/sunddi.h>
@@ -30,7 +34,7 @@
#include "ufmtest.h"
typedef struct ufmtest {
- dev_info_t *ufmt_devi;
+ dev_info_t *ufmt_devi;
nvlist_t *ufmt_nvl;
ddi_ufm_handle_t *ufmt_ufmh;
uint32_t ufmt_failflags;
diff --git a/usr/src/uts/common/mapfiles/ddi.mapfile b/usr/src/uts/common/mapfiles/ddi.mapfile
index ab65377941..5c74fdab11 100644
--- a/usr/src/uts/common/mapfiles/ddi.mapfile
+++ b/usr/src/uts/common/mapfiles/ddi.mapfile
@@ -172,6 +172,9 @@ SYMBOL_SCOPE {
nvlist_alloc { FLAGS = EXTERN };
nvlist_free { FLAGS = EXTERN };
nulldev { FLAGS = EXTERN };
+ nvlist_add_string { FLAGS = EXTERN };
+ nvlist_alloc { FLAGS = EXTERN };
+ nvlist_free { FLAGS = EXTERN };
panic { FLAGS = EXTERN };
pci_config_get16 { FLAGS = EXTERN };
pci_config_get32 { FLAGS = EXTERN };
diff --git a/usr/src/uts/common/sys/ddi_ufm.h b/usr/src/uts/common/sys/ddi_ufm.h
index 7d3a68e17d..e6ad50d9ef 100644
--- a/usr/src/uts/common/sys/ddi_ufm.h
+++ b/usr/src/uts/common/sys/ddi_ufm.h
@@ -61,9 +61,9 @@ typedef enum {
* UFM capabilities of the device specified in ufmg_devpath.
*/
typedef struct ufm_ioc_getcaps {
- uint_t ufmg_version; /* DDI_UFM_VERSION */
+ uint_t ufmg_version; /* DDI_UFM_VERSION */
uint_t ufmg_caps; /* UFM Caps */
- char ufmg_devpath[MAXPATHLEN];
+ char ufmg_devpath[MAXPATHLEN];
} ufm_ioc_getcaps_t;
/*
@@ -74,7 +74,7 @@ typedef struct ufm_ioc_getcaps {
* to allocate a sufficiently size buffer for the UFM_IOC_REPORT ioctl.
*/
typedef struct ufm_ioc_bufsz {
- uint_t ufbz_version; /* DDI_UFM_VERSION */
+ uint_t ufbz_version; /* DDI_UFM_VERSION */
size_t ufbz_size; /* sz of buf to be returned by ioctl */
char ufbz_devpath[MAXPATHLEN];
} ufm_ioc_bufsz_t;
diff --git a/usr/src/uts/common/sys/ddi_ufm_impl.h b/usr/src/uts/common/sys/ddi_ufm_impl.h
index 20e94ae894..49fd3b9246 100644
--- a/usr/src/uts/common/sys/ddi_ufm_impl.h
+++ b/usr/src/uts/common/sys/ddi_ufm_impl.h
@@ -48,7 +48,7 @@ struct ddi_ufm_slot {
struct ddi_ufm_image {
uint_t ufmi_imageno;
- char *ufmi_desc;
+ char *ufmi_desc;
nvlist_t *ufmi_misc;
struct ddi_ufm_slot *ufmi_slots;
uint_t ufmi_nslots;
diff --git a/usr/src/uts/common/sys/scsi/adapters/mpt_sas/mptsas_var.h b/usr/src/uts/common/sys/scsi/adapters/mpt_sas/mptsas_var.h
index 5b7a3f6442..4a3a0d72e5 100644
--- a/usr/src/uts/common/sys/scsi/adapters/mpt_sas/mptsas_var.h
+++ b/usr/src/uts/common/sys/scsi/adapters/mpt_sas/mptsas_var.h
@@ -63,6 +63,7 @@
#include <sys/sunmdi.h>
#include <sys/mdi_impldefs.h>
#include <sys/ddi_ufm.h>
+#include <sys/scsi/adapters/mpt_sas/mptsas_hash.h>
#include <sys/scsi/adapters/mpt_sas/mptsas_ioctl.h>
#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_tool.h>
#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_cnfg.h>
diff --git a/usr/src/uts/intel/ufmtest/Makefile b/usr/src/uts/intel/ufmtest/Makefile
index ee2b997f3c..3b4ea07f85 100644
--- a/usr/src/uts/intel/ufmtest/Makefile
+++ b/usr/src/uts/intel/ufmtest/Makefile
@@ -18,7 +18,7 @@ UTSBASE = ../..
MODULE = ufmtest
OBJECTS = $(OBJS_DIR)/ufmtest.o
LINTS = $(LINTS_DIR)/ufmtest.ln
-ROOTMODULE = $(ROOT_DRV_DIR)/$(MODULE)
+ROOTMODULE = $(USR_DRV_DIR)/$(MODULE)
CONF_SRCDIR = $(UTSBASE)/common/io
include $(UTSBASE)/intel/Makefile.intel
diff --git a/usr/src/uts/sparc/Makefile.sparc b/usr/src/uts/sparc/Makefile.sparc
index f2c885cd0c..7cc7f3b737 100644
--- a/usr/src/uts/sparc/Makefile.sparc
+++ b/usr/src/uts/sparc/Makefile.sparc
@@ -244,7 +244,6 @@ DRV_KMODS += dca
DRV_KMODS += inotify
DRV_KMODS += eventfd
DRV_KMODS += signalfd
-DRV_KMODS += timerfd
DRV_KMODS += ufm
DRV_KMODS += ufmtest
diff --git a/usr/src/uts/sparc/ufmtest/Makefile b/usr/src/uts/sparc/ufmtest/Makefile
index 3a39bb9eab..44827a5d96 100644
--- a/usr/src/uts/sparc/ufmtest/Makefile
+++ b/usr/src/uts/sparc/ufmtest/Makefile
@@ -18,7 +18,7 @@ UTSBASE = ../..
MODULE = ufmtest
OBJECTS = $(OBJS_DIR)/ufmtest.o
LINTS = $(LINTS_DIR)/ufmtest.ln
-ROOTMODULE = $(ROOT_DRV_DIR)/$(MODULE)
+ROOTMODULE = $(USR_DRV_DIR)/$(MODULE)
CONF_SRCDIR = $(UTSBASE)/common/io
include $(UTSBASE)/sparc/Makefile.sparc