diff options
author | narayan <none@none> | 2006-07-10 13:54:40 -0700 |
---|---|---|
committer | narayan <none@none> | 2006-07-10 13:54:40 -0700 |
commit | d10e4ef2fabf16c3237c6d6592496df3eac6a1ef (patch) | |
tree | eba8ce41c34abcfb747da37e51cbe610162cf334 /usr/src/uts/sun4v/io/cnex.c | |
parent | 0ccf9e790d232720597416743840df88825a9317 (diff) | |
download | illumos-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.c | 11 |
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); |