summaryrefslogtreecommitdiff
path: root/usr/src/uts/sun4v/io/cnex.c
diff options
context:
space:
mode:
authornarayan <none@none>2006-07-10 13:54:40 -0700
committernarayan <none@none>2006-07-10 13:54:40 -0700
commitd10e4ef2fabf16c3237c6d6592496df3eac6a1ef (patch)
treeeba8ce41c34abcfb747da37e51cbe610162cf334 /usr/src/uts/sun4v/io/cnex.c
parent0ccf9e790d232720597416743840df88825a9317 (diff)
downloadillumos-joyent-d10e4ef2fabf16c3237c6d6592496df3eac6a1ef.tar.gz
6412648 VIO service drivers auto-unload after some time
6413569 Possible memory leaks needs to be investigated. 6423722 vds should use finer-grained locking for better performance 6429738 LDom panics using a destroyed ldc 6431111 LDOM manager should use P_FAULTED state for cpu instead of P_OFFLINE/ 6431300 can not enter '~' character on a ldom's console 6431458 vDisk drivers need to handle read/write requests asynchronously 6437436 ldc read/write operations are serialized due to a common lock 6437766 vDisk VTOC should handle the timestamp field 6440543 vSwitch/vNet should use aligned IP frame headers 6440553 vNet/vSwitch should reuse previously allocated mblks 6442270 vDisk server should set FREAD and FWRITE mode when calling ldi_ioctl 6442851 Remove VLDC max write_pa limit 6442973 vntsd dumps core with assertion failure message 6443193 vDisk client incorrectly implements DKIOCSGEOM ioctl 6443198 vDisk client incorrectly caches new VTOC on DKIOCSVTOC ioctl 6444392 vswitch/vnet should set end_idx to -1 for increased performance
Diffstat (limited to 'usr/src/uts/sun4v/io/cnex.c')
-rw-r--r--usr/src/uts/sun4v/io/cnex.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/usr/src/uts/sun4v/io/cnex.c b/usr/src/uts/sun4v/io/cnex.c
index 08a70cc810..293c20e131 100644
--- a/usr/src/uts/sun4v/io/cnex.c
+++ b/usr/src/uts/sun4v/io/cnex.c
@@ -765,9 +765,11 @@ cnex_rem_intr(dev_info_t *dip, uint64_t id, cnex_intrtype_t itype)
if (rv) {
DWARN("cnex_rem_intr: ino=0x%llx, cannot get state\n",
iinfo->ino);
+ mutex_exit(&cldcp->lock);
+ return (ENXIO);
}
- if (rv || ((gethrtime() - start) > cnex_pending_tmout))
+ if ((gethrtime() - start) > cnex_pending_tmout)
break;
} while (!panicstr && istate == HV_INTR_DELIVERED_STATE);
@@ -776,9 +778,8 @@ cnex_rem_intr(dev_info_t *dip, uint64_t id, cnex_intrtype_t itype)
if (istate != HV_INTR_IDLE_STATE) {
DWARN("cnex_rem_intr: cannot remove intr busy ino=%x\n",
iinfo->ino);
- /* clear interrupt state */
- (void) hvldc_intr_setstate(cnex_ssp->cfghdl, iinfo->ino,
- HV_INTR_IDLE_STATE);
+ mutex_exit(&cldcp->lock);
+ return (EAGAIN);
}
/* remove interrupt */
@@ -850,6 +851,8 @@ cnex_clr_intr(dev_info_t *dip, uint64_t id, cnex_intrtype_t itype)
HV_INTR_IDLE_STATE);
if (rv) {
DWARN("cnex_intr_wrapper: cannot clear interrupt state\n");
+ mutex_exit(&cldcp->lock);
+ return (ENXIO);
}
mutex_exit(&cldcp->lock);