aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Jacob <mjacob@FreeBSD.org>2010-06-02 23:31:27 +0000
committerMatt Jacob <mjacob@FreeBSD.org>2010-06-02 23:31:27 +0000
commita035b0afa0100cb792dd67dfb51915a8792cc2df (patch)
treee66138154f0f6318e048fa74b79db26b2ecf2399
parentf0e78b02bd1585eaacb9e456106275d033c0dae0 (diff)
Various minor and not so minor fixes suggested by Coverity.
In at least one case, it's amazing that target mode worked at all. Found by: Coverity. MFC after: 2 weeks
Notes
svn path=/head/; revision=208761
-rw-r--r--sys/dev/isp/isp.c59
-rw-r--r--sys/dev/isp/isp_freebsd.c9
-rw-r--r--sys/dev/isp/isp_library.c2
-rw-r--r--sys/dev/isp/isp_pci.c26
4 files changed, 52 insertions, 44 deletions
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index a03573a65876..0d58ed9cc626 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -3936,14 +3936,18 @@ isp_login_device(ispsoftc_t *isp, int chan, uint32_t portid, isp_pdb_t *p, uint1
i = lim;
}
break;
- } else if (r != MBOX_LOOP_ID_USED) {
+ } else if ((r & 0xffff) == MBOX_LOOP_ID_USED) {
+ /*
+ * Try the next loop id.
+ */
+ *ohp = handle;
+ handle = isp_nxt_handle(isp, chan, handle);
+ } else {
+ /*
+ * Give up.
+ */
i = lim;
break;
- } else if (r == MBOX_TIMEOUT) {
- return (-1);
- } else {
- *ohp = handle;
- handle = isp_nxt_handle(isp, chan, *ohp);
}
}
@@ -4313,8 +4317,7 @@ isp_start(XS_T *xs)
reqp->req_header.rqs_entry_type = RQSTYPE_REQUEST;
}
}
- /* reqp->req_header.rqs_flags = 0; */
- /* reqp->req_header.rqs_seqno = 0; */
+
if (IS_24XX(isp)) {
int ttype;
if (XS_TAG_P(xs)) {
@@ -4363,37 +4366,45 @@ isp_start(XS_T *xs)
reqp->req_flags = XS_TAG_TYPE(xs);
}
}
- cdbp = reqp->req_cdb;
+
tptr = &reqp->req_time;
if (IS_SCSI(isp)) {
reqp->req_target = target | (XS_CHANNEL(xs) << 7);
reqp->req_lun_trn = XS_LUN(xs);
reqp->req_cdblen = XS_CDBLEN(xs);
+ cdbp = reqp->req_cdb;
} else if (IS_24XX(isp)) {
+ ispreqt7_t *t7 = (ispreqt7_t *)local;
fcportdb_t *lp;
lp = &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
- ((ispreqt7_t *)reqp)->req_nphdl = target;
- ((ispreqt7_t *)reqp)->req_tidlo = lp->portid;
- ((ispreqt7_t *)reqp)->req_tidhi = lp->portid >> 16;
- ((ispreqt7_t *)reqp)->req_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(xs));
+ t7->req_nphdl = target;
+ t7->req_tidlo = lp->portid;
+ t7->req_tidhi = lp->portid >> 16;
+ t7->req_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(xs));
if (XS_LUN(xs) > 256) {
- ((ispreqt7_t *)reqp)->req_lun[0] = XS_LUN(xs) >> 8;
- ((ispreqt7_t *)reqp)->req_lun[0] |= 0x40;
+ t7->req_lun[0] = XS_LUN(xs) >> 8;
+ t7->req_lun[0] |= 0x40;
}
- ((ispreqt7_t *)reqp)->req_lun[1] = XS_LUN(xs);
- cdbp = ((ispreqt7_t *)reqp)->req_cdb;
- tptr = &((ispreqt7_t *)reqp)->req_time;
+ t7->req_lun[1] = XS_LUN(xs);
+ cdbp = t7->req_cdb;
+ tptr = &t7->req_time;
} else if (ISP_CAP_2KLOGIN(isp)) {
- ((ispreqt2e_t *)reqp)->req_target = target;
- ((ispreqt2e_t *)reqp)->req_scclun = XS_LUN(xs);
+ ispreqt2e_t *t2e = (ispreqt2e_t *)local;
+ t2e->req_target = target;
+ t2e->req_scclun = XS_LUN(xs);
+ cdbp = t2e->req_cdb;
} else if (ISP_CAP_SCCFW(isp)) {
- ((ispreqt2_t *)reqp)->req_target = target;
- ((ispreqt2_t *)reqp)->req_scclun = XS_LUN(xs);
+ ispreqt2_t *t2 = (ispreqt2_t *)local;
+ t2->req_target = target;
+ t2->req_scclun = XS_LUN(xs);
+ cdbp = t2->req_cdb;
} else {
- ((ispreqt2_t *)reqp)->req_target = target;
- ((ispreqt2_t *)reqp)->req_lun_trn = XS_LUN(xs);
+ ispreqt2_t *t2 = (ispreqt2_t *)local;
+ t2->req_target = target;
+ t2->req_lun_trn = XS_LUN(xs);
+ cdbp = t2->req_cdb;
}
ISP_MEMCPY(cdbp, XS_CDBP(xs), XS_CDBLEN(xs));
diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c
index 3d84b93b8361..eaeda55e79f5 100644
--- a/sys/dev/isp/isp_freebsd.c
+++ b/sys/dev/isp/isp_freebsd.c
@@ -284,7 +284,7 @@ isp_detach(ispsoftc_t *isp)
config_intrhook_disestablish(&isp->isp_osinfo.ehook);
isp->isp_osinfo.ehook_active = 0;
}
- if (isp->isp_osinfo.devq == NULL) {
+ if (isp->isp_osinfo.devq != NULL) {
cam_simq_free(isp->isp_osinfo.devq);
isp->isp_osinfo.devq = NULL;
}
@@ -1910,7 +1910,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep)
tstate_t *tptr;
struct ccb_accept_tio *atiop;
uint16_t nphdl;
- atio_private_data_t *atp = NULL;
+ atio_private_data_t *atp;
inot_private_data_t *ntp;
/*
@@ -2063,9 +2063,6 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep)
rls_lun_statep(isp, tptr);
return;
noresrc:
- if (atp) {
- isp_put_atpd(isp, tptr, atp);
- }
ntp = isp_get_ntpd(isp, tptr);
if (ntp == NULL) {
rls_lun_statep(isp, tptr);
@@ -2500,7 +2497,7 @@ isp_handle_platform_notify_fc(ispsoftc_t *isp, in_fcentry_t *inp)
lun = inp->in_lun;
}
if (ISP_CAP_2KLOGIN(isp)) {
- loopid = ((in_fcentry_e_t *)inot)->in_iid;
+ loopid = ((in_fcentry_e_t *)inp)->in_iid;
} else {
loopid = inp->in_iid;
}
diff --git a/sys/dev/isp/isp_library.c b/sys/dev/isp/isp_library.c
index 020193394d9a..e1b508afbfb2 100644
--- a/sys/dev/isp/isp_library.c
+++ b/sys/dev/isp/isp_library.c
@@ -1338,7 +1338,7 @@ isp_put_vp_ctrl_info(ispsoftc_t *isp, vp_ctrl_info_t *src, vp_ctrl_info_t *dst)
ISP_IOXPUT_16(isp, src->vp_ctrl_idmap[i], &dst->vp_ctrl_idmap[i]);
}
for (i = 0; i < ASIZE(src->vp_ctrl_reserved); i++) {
- ISP_IOXPUT_8(isp, src->vp_ctrl_idmap[i], &dst->vp_ctrl_idmap[i]);
+ ISP_IOXPUT_8(isp, src->vp_ctrl_reserved[i], &dst->vp_ctrl_reserved[i]);
}
}
diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c
index e152e99ee67b..862ad62ffe3a 100644
--- a/sys/dev/isp/isp_pci.c
+++ b/sys/dev/isp/isp_pci.c
@@ -641,7 +641,7 @@ isp_pci_attach(device_t dev)
int isp_nvports = 0;
uint32_t data, cmd, linesz, did;
struct isp_pcisoftc *pcs;
- ispsoftc_t *isp = NULL;
+ ispsoftc_t *isp;
size_t psize, xsize;
char fwname[32];
@@ -966,30 +966,28 @@ isp_pci_attach(device_t dev)
return (0);
bad:
- if (pcs && pcs->ih) {
+ if (pcs->ih) {
(void) bus_teardown_intr(dev, irq, pcs->ih);
}
- if (locksetup && isp) {
+ if (locksetup) {
mtx_destroy(&isp->isp_osinfo.lock);
}
if (irq) {
(void) bus_release_resource(dev, SYS_RES_IRQ, iqd, irq);
}
- if (pcs && pcs->msicount) {
+ if (pcs->msicount) {
pci_release_msi(dev);
}
if (regs) {
(void) bus_release_resource(dev, rtp, rgd, regs);
}
- if (pcs) {
- if (pcs->pci_isp.isp_param) {
- free(pcs->pci_isp.isp_param, M_DEVBUF);
- pcs->pci_isp.isp_param = NULL;
- }
- if (pcs->pci_isp.isp_osinfo.pc.ptr) {
- free(pcs->pci_isp.isp_osinfo.pc.ptr, M_DEVBUF);
- pcs->pci_isp.isp_osinfo.pc.ptr = NULL;
- }
+ if (pcs->pci_isp.isp_param) {
+ free(pcs->pci_isp.isp_param, M_DEVBUF);
+ pcs->pci_isp.isp_param = NULL;
+ }
+ if (pcs->pci_isp.isp_osinfo.pc.ptr) {
+ free(pcs->pci_isp.isp_osinfo.pc.ptr, M_DEVBUF);
+ pcs->pci_isp.isp_osinfo.pc.ptr = NULL;
}
return (ENXIO);
}
@@ -1725,6 +1723,8 @@ tdma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error)
bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREREAD);
ddir = ISP_FROM_DEVICE;
} else {
+ dm_segs = NULL;
+ nseg = 0;
ddir = ISP_NOXFR;
}
} else {