summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/intel/io/scsi/adapters/pvscsi/pvscsi.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/usr/src/uts/intel/io/scsi/adapters/pvscsi/pvscsi.c b/usr/src/uts/intel/io/scsi/adapters/pvscsi/pvscsi.c
index d0a9db6736..edef3dd442 100644
--- a/usr/src/uts/intel/io/scsi/adapters/pvscsi/pvscsi.c
+++ b/usr/src/uts/intel/io/scsi/adapters/pvscsi/pvscsi.c
@@ -346,6 +346,8 @@ pvscsi_config_one(dev_info_t *pdip, pvscsi_softc_t *pvs, int target,
pvscsi_device_t *devnode;
struct scsi_inquiry inq;
+ ASSERT(DEVI_BUSY_OWNED(pdip));
+
/* Inquiry target */
inqrc = pvscsi_inquiry_target(pvs, target, &inq);
@@ -446,8 +448,10 @@ pvscsi_config_all(dev_info_t *pdip, pvscsi_softc_t *pvs)
{
int target;
- for (target = 0; target < PVSCSI_MAXTGTS; target++)
+ for (target = 0; target < PVSCSI_MAXTGTS; target++) {
+ /* ndi_devi_enter is done in pvscsi_bus_config */
(void) pvscsi_config_one(pdip, pvs, target, NULL);
+ }
return (NDI_SUCCESS);
}
@@ -550,9 +554,12 @@ static void
pvscsi_handle_msg(void *arg)
{
pvscsi_msg_t *msg = (pvscsi_msg_t *)arg;
+ dev_info_t *dip = msg->msg_pvs->dip;
+ int circ;
- (void) pvscsi_config_one(msg->msg_pvs->dip, msg->msg_pvs, msg->target,
- NULL);
+ ndi_devi_enter(dip, &circ);
+ (void) pvscsi_config_one(dip, msg->msg_pvs, msg->target, NULL);
+ ndi_devi_exit(dip, circ);
kmem_free(msg, sizeof (pvscsi_msg_t));
}
@@ -2280,7 +2287,7 @@ pvscsi_bus_config(dev_info_t *pdip, uint_t flags, ddi_bus_config_op_t op,
switch (op) {
case BUS_CONFIG_ONE:
if ((p = strrchr((char *)arg, '@')) != NULL &&
- ddi_strtol(p + 1, NULL, 10, &target) == 0)
+ ddi_strtol(p + 1, NULL, 16, &target) == 0)
ret = pvscsi_config_one(pdip, pvs, (int)target, childp);
break;
case BUS_CONFIG_DRIVER: