diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/intel/io/scsi/adapters/pvscsi/pvscsi.c | 15 |
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: |