summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/devinfo.c
diff options
context:
space:
mode:
authordh142964 <David.Hollister@Sun.COM>2009-09-30 13:40:27 -0600
committerdh142964 <David.Hollister@Sun.COM>2009-09-30 13:40:27 -0600
commit4c06356b0f0fffb4fc1b6eccc8e5d8e2254a84d6 (patch)
tree17ba947a21901975bb128b8c535cb0575d4c9a4a /usr/src/uts/common/io/devinfo.c
parent7b57f05abb8796d3c91c8d4d4c75dcafb5af6b69 (diff)
downloadillumos-joyent-4c06356b0f0fffb4fc1b6eccc8e5d8e2254a84d6.tar.gz
PSARC 2008/672 thebe SAS/SATA driver
PSARC 2008/755 ddi_ssoft_state(9F) and ddi_isoft_state(9F) PSARC 2008/764 Cfgadm SCSI-Plugin MPxIO Support PSARC 2009/125 scsi_device property interfaces 6726110 pmcs driver (driver for thebe) 6726867 SCSAv3
Diffstat (limited to 'usr/src/uts/common/io/devinfo.c')
-rw-r--r--usr/src/uts/common/io/devinfo.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/usr/src/uts/common/io/devinfo.c b/usr/src/uts/common/io/devinfo.c
index cff9b3ac4f..d1d02ce378 100644
--- a/usr/src/uts/common/io/devinfo.c
+++ b/usr/src/uts/common/io/devinfo.c
@@ -647,7 +647,7 @@ di_ioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp)
rv = i_ddi_devs_attached(i);
modunload_enable();
- i_ddi_di_cache_invalidate(KM_SLEEP);
+ i_ddi_di_cache_invalidate();
return ((rv == DDI_SUCCESS)? 0 : ENXIO);
@@ -2638,6 +2638,19 @@ path_state_convert(mdi_pathinfo_state_t st)
}
}
+static uint_t
+path_flags_convert(uint_t pi_path_flags)
+{
+ uint_t di_path_flags = 0;
+
+ /* MDI_PATHINFO_FLAGS_HIDDEN nodes not in snapshot */
+
+ if (pi_path_flags & MDI_PATHINFO_FLAGS_DEVICE_REMOVED)
+ di_path_flags |= DI_PATH_FLAGS_DEVICE_REMOVED;
+
+ return (di_path_flags);
+}
+
static di_off_t
di_path_getprop(mdi_pathinfo_t *pip, di_off_t *off_p,
@@ -2793,13 +2806,19 @@ di_getpath_data(dev_info_t *dip, di_off_t *off_p, di_off_t noff,
pip = NULL;
while (pip = (*next_pip)(dip, pip)) {
- mdi_pathinfo_state_t state;
di_off_t stored_offset;
dcmn_err((CE_WARN, "marshalling pip = %p", (void *)pip));
mdi_pi_lock(pip);
+ /* We don't represent hidden paths in the snapshot */
+ if (mdi_pi_ishidden(pip)) {
+ dcmn_err((CE_WARN, "hidden, skip"));
+ mdi_pi_unlock(pip);
+ continue;
+ }
+
if (di_pip_find(st, pip, &stored_offset) != -1) {
/*
* We've already seen this pathinfo node so we need to
@@ -2856,8 +2875,8 @@ di_getpath_data(dev_info_t *dip, di_off_t *off_p, di_off_t noff,
*/
di_register_pip(st, pip, me->self);
- state = mdi_pi_get_state(pip);
- me->path_state = path_state_convert(state);
+ me->path_state = path_state_convert(mdi_pi_get_state(pip));
+ me->path_flags = path_flags_convert(mdi_pi_get_flags(pip));
me->path_instance = mdi_pi_get_path_instance(pip);