summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorjw149990 <none@none>2008-06-02 20:05:52 -0700
committerjw149990 <none@none>2008-06-02 20:05:52 -0700
commit5c44817c0d1a2b9b02dbbf343823da0b064f0ee7 (patch)
tree399642d887fb92b192aa26bcbe02a11d3f6862fa /usr/src
parent50953a6d365217c310232e7d3d326f02ff97ff8b (diff)
downloadillumos-joyent-5c44817c0d1a2b9b02dbbf343823da0b064f0ee7.tar.gz
PSARC 2008/337 scsi-self-identifying
6637648 new class scsi-self-identifying needed 6682564 solaris shall not chain together 'specs' whose class names are different during parsing hwconf file
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/pkgdefs/SUNWahci/postinstall25
-rw-r--r--usr/src/pkgdefs/SUNWmv88sx/postinstall5
-rw-r--r--usr/src/pkgdefs/SUNWnvsata/postinstall4
-rw-r--r--usr/src/pkgdefs/SUNWsi3124/postinstall5
-rw-r--r--usr/src/pkgdefs/common_files/i.kclasses_i3866
-rw-r--r--usr/src/pkgdefs/common_files/i.kclasses_sparc6
-rw-r--r--usr/src/pkgdefs/common_files/i.sdconf_i38650
-rw-r--r--usr/src/pkgdefs/common_files/i.sdconf_sparc20
-rw-r--r--usr/src/pkgdefs/common_files/i.ssdconf19
-rw-r--r--usr/src/tools/scripts/bfu.sh32
-rw-r--r--usr/src/uts/common/io/sata/impl/sata.c27
-rw-r--r--usr/src/uts/common/io/scsi/adapters/scsi_vhci/scsi_vhci.c39
-rw-r--r--usr/src/uts/common/os/modsysfile.c13
-rw-r--r--usr/src/uts/intel/io/scsi/targets/sd.conf20
-rw-r--r--usr/src/uts/intel/os/driver_classes5
-rw-r--r--usr/src/uts/sparc/os/driver_classes3
-rw-r--r--usr/src/uts/sun/io/scsi/targets/sd.conf10
-rw-r--r--usr/src/uts/sun/io/scsi/targets/ssd.conf20
18 files changed, 225 insertions, 84 deletions
diff --git a/usr/src/pkgdefs/SUNWahci/postinstall b/usr/src/pkgdefs/SUNWahci/postinstall
index 68a3de40ae..8416c09fde 100644
--- a/usr/src/pkgdefs/SUNWahci/postinstall
+++ b/usr/src/pkgdefs/SUNWahci/postinstall
@@ -21,7 +21,7 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -41,16 +41,29 @@ installed() {
return $?
}
+verify_drv_class() {
+ driver=$1
+ class=$2
+ egrep "^$driver[ ]+$class( | |$)" \
+ $BASEDIR/etc/driver_classes
+ return $?
+}
+
EXIT=0
if installed ahci; then
- echo "ahci already installed" || EXIT=1
-
-else
+ if verify_drv_class ahci scsi-self-identifying; then
+ echo "ahci already installed" || EXIT=1
+ else
+ echo "ahci\tscsi-self-identifying" >> \
+ $BASEDIR/etc/driver_classes
+ fi
+else
add_drv -i \
'"pciclass,010601"' \
- ${BASEDIR_OPT} -m '* 0644 root sys' ahci || \
- EXIT=1
+ ${BASEDIR_OPT} -m '* 0644 root sys' -c \
+ scsi-self-identifying ahci || EXIT=1
+
fi
exit $EXIT
diff --git a/usr/src/pkgdefs/SUNWmv88sx/postinstall b/usr/src/pkgdefs/SUNWmv88sx/postinstall
index 8c093a0041..6adaed4205 100644
--- a/usr/src/pkgdefs/SUNWmv88sx/postinstall
+++ b/usr/src/pkgdefs/SUNWmv88sx/postinstall
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
# ident "%Z%%M% %I% %E% SMI"
@@ -113,4 +113,5 @@ check_add_drv -i \
"pci11ab,5040"
"pci11ab,6041.9"
"pci11ab,6081.9"'\
- -b "$BASEDIR" -m '* 0644 root sys' marvell88sx
+ -b "$BASEDIR" -m '* 0644 root sys'\
+ -c scsi-self-identifying marvell88sx
diff --git a/usr/src/pkgdefs/SUNWnvsata/postinstall b/usr/src/pkgdefs/SUNWnvsata/postinstall
index 6d4e3c29ba..9b43dd9cd6 100644
--- a/usr/src/pkgdefs/SUNWnvsata/postinstall
+++ b/usr/src/pkgdefs/SUNWnvsata/postinstall
@@ -21,7 +21,7 @@
#
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
# ident "%Z%%M% %I% %E% SMI"
@@ -1301,7 +1301,7 @@ check_add_drv()
#
# Main program starts here.
#
-check_add_drv -b ${ROOT} -i '"pci10de,37f" "pci10de,55" "pci10de,54"' -m '* 0644 root sys' nv_sata
+check_add_drv -b ${ROOT} -i '"pci10de,37f" "pci10de,55" "pci10de,54"' -m '* 0644 root sys' -c scsi-self-identifying nv_sata
#
# Create temporary directory for node migration
diff --git a/usr/src/pkgdefs/SUNWsi3124/postinstall b/usr/src/pkgdefs/SUNWsi3124/postinstall
index adc4a97737..a58173f9cc 100644
--- a/usr/src/pkgdefs/SUNWsi3124/postinstall
+++ b/usr/src/pkgdefs/SUNWsi3124/postinstall
@@ -21,7 +21,7 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -130,4 +130,5 @@ check_add_drv()
check_add_drv -i \
'"pci1095,3124"
"pci1095,3132"'\
- -b "$BASEDIR" -m '* 0644 root sys' si3124
+ -b "$BASEDIR" -m '* 0644 root sys'\
+ -c scsi-self-identifying si3124
diff --git a/usr/src/pkgdefs/common_files/i.kclasses_i386 b/usr/src/pkgdefs/common_files/i.kclasses_i386
index ddbd428c3b..5bb023e2f9 100644
--- a/usr/src/pkgdefs/common_files/i.kclasses_i386
+++ b/usr/src/pkgdefs/common_files/i.kclasses_i386
@@ -21,7 +21,7 @@
#
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -94,6 +94,10 @@ do
if [ $? != 0 ] ; then
echo 'mpt scsi' >> $dest
fi
+ grep '^scsi_vhci[ ].*scsi-self-identifying' $dest > /dev/null 2>&1
+ if [ $? != 0 ] ; then
+ echo 'scsi_vhci scsi-self-identifying' >> $dest
+ fi
fi
done
diff --git a/usr/src/pkgdefs/common_files/i.kclasses_sparc b/usr/src/pkgdefs/common_files/i.kclasses_sparc
index 787a2cc8e7..77bd25476c 100644
--- a/usr/src/pkgdefs/common_files/i.kclasses_sparc
+++ b/usr/src/pkgdefs/common_files/i.kclasses_sparc
@@ -22,7 +22,7 @@
#
#ident "%Z%%M% %I% %E% SMI"
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
@@ -99,6 +99,10 @@ do
if [ $? != 0 ] ; then
echo 'mpt scsi' >> $dest
fi
+ grep '^scsi_vhci[ ].*scsi-self-identifying' $dest > /dev/null 2>&1
+ if [ $? != 0 ] ; then
+ echo 'scsi_vhci scsi-self-identifying' >> $dest
+ fi
fi
done
rm -f /tmp/newident.$$ /tmp/rest.$$
diff --git a/usr/src/pkgdefs/common_files/i.sdconf_i386 b/usr/src/pkgdefs/common_files/i.sdconf_i386
index 7284d57b99..555847596f 100644
--- a/usr/src/pkgdefs/common_files/i.sdconf_i386
+++ b/usr/src/pkgdefs/common_files/i.sdconf_i386
@@ -1,11 +1,9 @@
-#!/bin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -20,18 +18,25 @@
#
# CDDL HEADER END
#
-#
-#ident "%Z%%M% %I% %E% SMI"
+
#
# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
+#
+#ident "%Z%%M% %I% %E% SMI"
+#
PATH="/usr/bin:/usr/sbin:${PATH}"
export PATH
-add_sata_entry() {
-cat >> $dest << EOF
-name="sd" parent="$1";
+add_self_identifying_entry() {
+cat >> $dest <<EOF
+
+#
+# The following stub node is needed for pathological bottom-up
+# devid resolution on a self-identifying transport.
+#
+name="sd" class="scsi-self-identifying";
EOF
}
@@ -94,6 +99,11 @@ do
-e '/^name="sd" parent="flashpt"\n target=4 lun=0;\n$/d' \
-e '/^name="sd" parent="flashpt"\n target=5 lun=0;\n$/d' \
-e '/^name="sd" parent="flashpt"\n target=6 lun=0;\n$/d' \
+ -e '/^# Add SATA HBA drivers as parents of sd driver.$/d' \
+ -e '/^name="sd" parent="nv_sata";$/d' \
+ -e '/^name="sd" parent="ahci";$/d' \
+ -e '/^name="sd" parent="si3124";$/d' \
+ -e '/^name="sd" parent="marvell88sx";$/d' \
/tmp/d.$$ > /tmp/d2.$$
if cmp -s /tmp/d.$$ /tmp/d2.$$ > /dev/null 2>&1
@@ -102,29 +112,11 @@ do
else
cp /tmp/d2.$$ $dest
fi
+ echo `cat $dest` | grep "scsi-self-identifying" > /dev/null
- # Add SATA HBA driver entries if not present
- line1="name=\"sd\" parent=\"nv_sata\";"
- echo `cat $dest` | grep "$line1" >/dev/null
- if [ $? -ne 0 ]; then
- add_sata_entry "nv_sata"
- fi
- line1="name=\"sd\" parent=\"ahci\";"
- echo `cat $dest` | grep "$line1" >/dev/null
- if [ $? -ne 0 ]; then
- add_sata_entry "ahci"
- fi
- line1="name=\"sd\" parent=\"si3124\";"
- echo `cat $dest` | grep "$line1" >/dev/null
- if [ $? -ne 0 ]; then
- add_sata_entry "si3124"
- fi
- line1="name=\"sd\" parent=\"marvell88sx\";"
- echo `cat $dest` | grep "$line1" >/dev/null
if [ $? -ne 0 ]; then
- add_sata_entry "marvell88sx"
+ add_self_identifying_entry
fi
-
# remove temporary files
rm -f /tmp/d.$$ /tmp/d2.$$ /tmp/newident.$$ /tmp/rest.$$
fi
diff --git a/usr/src/pkgdefs/common_files/i.sdconf_sparc b/usr/src/pkgdefs/common_files/i.sdconf_sparc
index 2b0327648a..5d781fc0d9 100644
--- a/usr/src/pkgdefs/common_files/i.sdconf_sparc
+++ b/usr/src/pkgdefs/common_files/i.sdconf_sparc
@@ -19,7 +19,9 @@
#
# CDDL HEADER END
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+
+#
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -42,6 +44,17 @@ name="sd" parent="mpt"
EOF
}
+add_self_identifying_entry() {
+cat >> $dest <<EOF
+
+#
+# The following stub node is needed for pathological bottom-up
+# devid resolution on a self-identifying transport.
+#
+name="sd" class="scsi-self-identifying";
+EOF
+}
+
while read src dest; do
if [ ! -f $dest ]; then
cp $src $dest
@@ -53,6 +66,11 @@ while read src dest; do
if [ $? -ne 0 ]; then
add_mpt_entry
fi
+ echo `cat $dest` | grep "scsi-self-identifying" > /dev/null
+
+ if [ $? -ne 0 ]; then
+ add_self_identifying_entry
+ fi
fi
done
diff --git a/usr/src/pkgdefs/common_files/i.ssdconf b/usr/src/pkgdefs/common_files/i.ssdconf
index d98ce71c6d..80605118de 100644
--- a/usr/src/pkgdefs/common_files/i.ssdconf
+++ b/usr/src/pkgdefs/common_files/i.ssdconf
@@ -19,7 +19,7 @@
#
# CDDL HEADER END
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -28,12 +28,24 @@
PATH="/usr/bin:/usr/sbin:${PATH}"
export PATH
+add_self_identifying_entry() {
+cat >> $dest <<EOF
+
+#
+# The following stub node is needed for pathological bottom-up
+# devid resolution on a self-identifying transport.
+#
+name="ssd" class="scsi-self-identifying";
+EOF
+}
+
while read src dest; do
if [ ! -f $dest ]; then
cp $src $dest
else
# Remove obsoleted drivers
grep -v 'name="ssd" parent="SUNW,pln" port=' $dest > /tmp/d.$$
+ grep -v 'name="ssd" parent="scsi_vhci" target=0;' /tmp/d.$$ > /tmp/d.$$
mv /tmp/d.$$ $dest
# Process conf files for missing entries
@@ -47,6 +59,11 @@ while read src dest; do
echo $confline >> $dest
fi
done < $src
+ echo `cat $dest` | grep "scsi-self-identifying" > /dev/null
+
+ if [ $? -ne 0 ]; then
+ add_self_identifying_entry
+ fi
fi
done
diff --git a/usr/src/tools/scripts/bfu.sh b/usr/src/tools/scripts/bfu.sh
index c4dbdcf94f..331352fae5 100644
--- a/usr/src/tools/scripts/bfu.sh
+++ b/usr/src/tools/scripts/bfu.sh
@@ -762,6 +762,34 @@ update_etc_mach_i386()
fi
}
+# check and update driver class for scsi-self-identifying
+chk_update_drv_class()
+{
+
+ drvclassfile=$rootprefix/etc/driver_classes
+ name2majorfile=$rootprefix/etc/name_to_major
+ drvname=$1
+ classentry="^$drvname[ ].*scsi-self-identifying"
+
+ [ -f $drvclassfile ] || return
+ [ -f $name2majorfile ] || return
+
+ grep -w $drvname $name2majorfile > /dev/null 2>&1 || return
+
+ egrep -s "$classentry" $drvclassfile
+ if [ $? -ne 0 ]; then
+ echo "$drvname scsi-self-identifying" >> $drvclassfile
+ fi
+}
+
+update_drvclass_i386()
+{
+ chk_update_drv_class ahci
+ chk_update_drv_class si3124
+ chk_update_drv_class marvell88sx
+ chk_update_drv_class nv_sata
+}
+
update_policy_conf() {
# update /etc/security/policy.conf with the default
# Solaris crypt(3c) policy.
@@ -7776,6 +7804,10 @@ mondo_loop() {
update_etc_mach_i386
fi
+ if [ $target_isa = i386 ]; then
+ update_drvclass_i386
+ fi
+
if [ $zone != global ]; then
rm -rf $global_zone_only_files $superfluous_nonglobal_zone_files
fi
diff --git a/usr/src/uts/common/io/sata/impl/sata.c b/usr/src/uts/common/io/sata/impl/sata.c
index d3b3f9608b..ad4c00236c 100644
--- a/usr/src/uts/common/io/sata/impl/sata.c
+++ b/usr/src/uts/common/io/sata/impl/sata.c
@@ -1637,6 +1637,24 @@ sata_free_error_retrieval_pkt(sata_pkt_t *sata_pkt)
}
+/*
+ * sata_name_child is for composing the name of the node
+ * the format of the name is "target,0".
+ */
+static int
+sata_name_child(dev_info_t *dip, char *name, int namelen)
+{
+ int target;
+
+ target = ddi_prop_get_int(DDI_DEV_T_ANY, dip,
+ DDI_PROP_DONTPASS, "target", -1);
+ if (target == -1)
+ return (DDI_FAILURE);
+ (void) snprintf(name, namelen, "%x,0", target);
+ return (DDI_SUCCESS);
+}
+
+
/* ****************** SCSA required entry points *********************** */
@@ -1665,6 +1683,15 @@ sata_scsi_tgt_init(dev_info_t *hba_dip, dev_info_t *tgt_dip,
char *vid, *pid;
int i;
+ /*
+ * Fail tran_tgt_init for .conf stub node
+ */
+ if (ndi_dev_is_persistent_node(tgt_dip) == 0) {
+ (void) ndi_merge_node(tgt_dip, sata_name_child);
+ ddi_set_name_addr(tgt_dip, NULL);
+ return (DDI_FAILURE);
+ }
+
sata_hba_inst = (sata_hba_inst_t *)(hba_tran->tran_hba_private);
/* Validate scsi device address */
diff --git a/usr/src/uts/common/io/scsi/adapters/scsi_vhci/scsi_vhci.c b/usr/src/uts/common/io/scsi/adapters/scsi_vhci/scsi_vhci.c
index 47a62af903..d4c26d15e3 100644
--- a/usr/src/uts/common/io/scsi/adapters/scsi_vhci/scsi_vhci.c
+++ b/usr/src/uts/common/io/scsi/adapters/scsi_vhci/scsi_vhci.c
@@ -915,7 +915,6 @@ vhci_getinfo(dev_info_t *dip, ddi_info_cmd_t cmd, void *arg, void **result)
return (DDI_SUCCESS);
}
-
/*ARGSUSED*/
static int
vhci_scsi_tgt_init(dev_info_t *hba_dip, dev_info_t *tgt_dip,
@@ -931,28 +930,40 @@ vhci_scsi_tgt_init(dev_info_t *hba_dip, dev_info_t *tgt_dip,
ASSERT(hba_dip != NULL);
ASSERT(tgt_dip != NULL);
- vhci = ddi_get_soft_state(vhci_softstate, ddi_get_instance(hba_dip));
- ASSERT(vhci != NULL);
-
- VHCI_DEBUG(4, (CE_NOTE, hba_dip,
- "!tgt_init: called for %s (instance %d)\n",
- ddi_driver_name(tgt_dip), ddi_get_instance(tgt_dip)));
-
if (ddi_prop_lookup_string(DDI_DEV_T_ANY, tgt_dip, PROPFLAGS,
MDI_CLIENT_GUID_PROP, &guid) != DDI_SUCCESS) {
/*
- * This must be the .conf node. The ssd node under
- * fp already inserts a delay, so we just return from here.
- * We rely on this delay to have all dips be posted to
- * the ndi hotplug thread's newdev list. This is
- * necessary for the deferred attach mechanism to work
- * and opens() done soon after boot to succeed.
+ * This must be the .conf node without GUID property.
+ * The node under fp already inserts a delay, so we
+ * just return from here. We rely on this delay to have
+ * all dips be posted to the ndi hotplug thread's newdev
+ * list. This is necessary for the deferred attach
+ * mechanism to work and opens() done soon after boot to
+ * succeed.
*/
VHCI_DEBUG(4, (CE_WARN, hba_dip, "tgt_init: lun guid "
"property failed"));
return (DDI_NOT_WELL_FORMED);
}
+ if (ndi_dev_is_persistent_node(tgt_dip) == 0) {
+ /*
+ * This must be .conf node with the GUID property. We don't
+ * merge property by ndi_merge_node() here because the
+ * devi_addr_buf of .conf node is "" always according the
+ * implementation of vhci_scsi_get_name_bus_addr().
+ */
+ ddi_set_name_addr(tgt_dip, NULL);
+ return (DDI_FAILURE);
+ }
+
+ vhci = ddi_get_soft_state(vhci_softstate, ddi_get_instance(hba_dip));
+ ASSERT(vhci != NULL);
+
+ VHCI_DEBUG(4, (CE_NOTE, hba_dip,
+ "!tgt_init: called for %s (instance %d)\n",
+ ddi_driver_name(tgt_dip), ddi_get_instance(tgt_dip)));
+
vlun = vhci_lun_lookup(tgt_dip);
mutex_enter(&vhci_global_mutex);
diff --git a/usr/src/uts/common/os/modsysfile.c b/usr/src/uts/common/os/modsysfile.c
index 5ba026e22e..2294f1793b 100644
--- a/usr/src/uts/common/os/modsysfile.c
+++ b/usr/src/uts/common/os/modsysfile.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -3160,8 +3160,9 @@ add_spec(struct hwc_spec *spec, struct par_list **par)
major_t maj;
struct par_list *pl, *par_last = NULL;
char *parent = spec->hwc_parent_name;
+ char *class = spec->hwc_class_name;
- ASSERT(parent || spec->hwc_class_name);
+ ASSERT(parent || class);
/*
* If given a parent=/full-pathname, see if the platform
@@ -3191,10 +3192,14 @@ add_spec(struct hwc_spec *spec, struct par_list **par)
maj = (major_t)-1;
/*
- * Scan the list looking for a matching parent.
+ * Scan the list looking for a matching parent. When parent is
+ * not NULL, we match the parent by major. If parent is NULL but
+ * class is not NULL, we mache the pl by class name.
*/
for (pl = *par; pl; pl = pl->par_next) {
- if (maj == pl->par_major) {
+ if ((parent && (maj == pl->par_major)) || ((parent == NULL) &&
+ class && pl->par_specs->hwc_class_name && (strncmp(class,
+ pl->par_specs->hwc_class_name, strlen(class)) == 0))) {
append(spec, pl);
return;
}
diff --git a/usr/src/uts/intel/io/scsi/targets/sd.conf b/usr/src/uts/intel/io/scsi/targets/sd.conf
index aa6fb10e47..2050575fa9 100644
--- a/usr/src/uts/intel/io/scsi/targets/sd.conf
+++ b/usr/src/uts/intel/io/scsi/targets/sd.conf
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -19,12 +18,13 @@
#
# CDDL HEADER END
#
-#
-#pragma ident "%Z%%M% %I% %E% SMI"
+
#
# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
+#ident "%Z%%M% %I% %E% SMI"
+#
name="sd" class="scsi" target=0 lun=0;
name="sd" class="scsi" target=1 lun=0;
@@ -43,8 +43,8 @@ name="sd" class="scsi" target=13 lun=0;
name="sd" class="scsi" target=14 lun=0;
name="sd" class="scsi" target=15 lun=0;
-# Add SATA HBA drivers as parents of sd driver.
-name="sd" parent="nv_sata";
-name="sd" parent="ahci";
-name="sd" parent="si3124";
-name="sd" parent="marvell88sx";
+#
+# The following stub node is needed for pathological bottom-up
+# devid resolution on a self-identifying transport.
+#
+name="sd" class="scsi-self-identifying";
diff --git a/usr/src/uts/intel/os/driver_classes b/usr/src/uts/intel/os/driver_classes
index 8b2115730b..cf66ff7abc 100644
--- a/usr/src/uts/intel/os/driver_classes
+++ b/usr/src/uts/intel/os/driver_classes
@@ -1,5 +1,5 @@
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# CDDL HEADER START
@@ -21,7 +21,7 @@
#
# CDDL HEADER END
#
-#pragma ident "%Z%%M% %I% %E% SMI"
+#ident "%Z%%M% %I% %E% SMI"
ata scsi
mscsi scsi
@@ -30,3 +30,4 @@ eisa sysbus
pci pci
pci_pci pci
mpt scsi
+scsi_vhci scsi-self-identifying
diff --git a/usr/src/uts/sparc/os/driver_classes b/usr/src/uts/sparc/os/driver_classes
index 5e8ebecad6..9fb8d88e11 100644
--- a/usr/src/uts/sparc/os/driver_classes
+++ b/usr/src/uts/sparc/os/driver_classes
@@ -1,5 +1,5 @@
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# CDDL HEADER START
@@ -36,3 +36,4 @@ glm scsi
uata dada
uata scsi
mpt scsi
+scsi_vhci scsi-self-identifying
diff --git a/usr/src/uts/sun/io/scsi/targets/sd.conf b/usr/src/uts/sun/io/scsi/targets/sd.conf
index 603231ccf8..89c4386528 100644
--- a/usr/src/uts/sun/io/scsi/targets/sd.conf
+++ b/usr/src/uts/sun/io/scsi/targets/sd.conf
@@ -20,10 +20,11 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-# ident "%Z%%M% %I% %E% SMI"
+#ident "%Z%%M% %I% %E% SMI"
+#
name="sd" class="scsi" class_prop="atapi"
target=0 lun=0;
@@ -78,3 +79,8 @@ name="sd" class="scsi"
#
name="sd" parent="mpt"
target=7 lun=0;
+#
+# The following stub node is needed for pathological bottom-up
+# devid resolution on a self-identifying transport.
+#
+name="sd" class="scsi-self-identifying";
diff --git a/usr/src/uts/sun/io/scsi/targets/ssd.conf b/usr/src/uts/sun/io/scsi/targets/ssd.conf
index b79ad6a672..c3fc22749a 100644
--- a/usr/src/uts/sun/io/scsi/targets/ssd.conf
+++ b/usr/src/uts/sun/io/scsi/targets/ssd.conf
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -19,12 +18,21 @@
#
# CDDL HEADER END
#
+
#
-# Copyright 2003 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
+#
-name="ssd" parent="sf" target=0;
+name="ssd" parent="sf" target=0;
name="ssd" parent="fp" target=0;
-name="ssd" parent="scsi_vhci" target=0;
+#
+# The following stub node is needed for pathological bottom-up
+# devid resolution on a self-identifying transport.
+#
+name="ssd" class="scsi-self-identifying";
+
+
+