From cad06e2bf1c2febeb424614e2513a85e825c52b3 Mon Sep 17 00:00:00 2001 From: chuck Date: Mon, 4 Mar 1996 20:35:23 +0000 Subject: [PATCH] Fix two bugs reported by Don Koch (NetBSD PR#216{8,9}) [1] check return value from malloc() for NULL before trying to bzero it. [2] use "=" rather than "|=" when writing to CSR (otherwise you may ACK something you don't mean to!). --- sys/arch/sparc/dev/xd.c | 10 +++++----- sys/arch/sparc/dev/xy.c | 12 ++++++------ sys/arch/sun3/dev/xd.c | 14 +++++++------- sys/arch/sun3/dev/xy.c | 12 ++++++------ 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/sys/arch/sparc/dev/xd.c b/sys/arch/sparc/dev/xd.c index 04d21f71d2a..b2fc2b6bfd7 100644 --- a/sys/arch/sparc/dev/xd.c +++ b/sys/arch/sparc/dev/xd.c @@ -36,7 +36,7 @@ * x d . c x y l o g i c s 7 5 3 / 7 0 5 3 v m e / s m d d r i v e r * * author: Chuck Cranor - * id: $Id: xd.c,v 1.6 1996/02/08 04:43:45 chuck Exp $ + * id: $Id: xd.c,v 1.7 1996/03/04 20:35:23 chuck Exp $ * started: 27-Feb-95 * references: [1] Xylogics Model 753 User's Manual * part number: 166-753-001, Revision B, May 21, 1988. @@ -143,7 +143,7 @@ (ADDR) = ((ADDR) >> 8); \ (XDC)->xdc_iopbaddr3 = (ADDR); \ (XDC)->xdc_iopbamod = XDC_ADDRMOD; \ - (XDC)->xdc_csr |= XDC_ADDIOPB; /* go! */ \ + (XDC)->xdc_csr = XDC_ADDIOPB; /* go! */ \ } /* @@ -415,9 +415,9 @@ xdcattach(parent, self, aux) xdc->reqs = (struct xd_iorq *) malloc(XDC_MAXIOPB * sizeof(struct xd_iorq), M_DEVBUF, M_NOWAIT); - bzero(xdc->reqs, XDC_MAXIOPB * sizeof(struct xd_iorq)); if (xdc->reqs == NULL) panic("xdc malloc"); + bzero(xdc->reqs, XDC_MAXIOPB * sizeof(struct xd_iorq)); /* init free list, iorq to iopb pointers, and non-zero fields in the * iopb which never change. */ @@ -1662,7 +1662,7 @@ xdc_xdreset(xdcsc, xdsc) if (del <= 0) panic("xdc_reset"); } else { - xdcsc->xdc->xdc_csr |= XDC_CLRRIO; /* clear RIO */ + xdcsc->xdc->xdc_csr = XDC_CLRRIO; /* clear RIO */ } bcopy(&tmpiopb, xdcsc->iopbase, sizeof(tmpiopb)); } @@ -1833,7 +1833,7 @@ xdc_remove_iorq(xdcsc) * done bit. */ if (xdc->xdc_csr & XDC_REMIOPB) { - xdc->xdc_csr |= XDC_CLRRIO; + xdc->xdc_csr = XDC_CLRRIO; } for (rqno = 0; rqno < XDC_MAXIOPB; rqno++) { diff --git a/sys/arch/sparc/dev/xy.c b/sys/arch/sparc/dev/xy.c index 35911f95bd8..bd85ae48a25 100644 --- a/sys/arch/sparc/dev/xy.c +++ b/sys/arch/sparc/dev/xy.c @@ -36,7 +36,7 @@ * x y . c x y l o g i c s 4 5 0 / 4 5 1 s m d d r i v e r * * author: Chuck Cranor - * id: $Id: xy.c,v 1.6 1996/02/21 03:43:18 chuck Exp $ + * id: $Id: xy.c,v 1.7 1996/03/04 20:35:25 chuck Exp $ * started: 14-Sep-95 * references: [1] Xylogics Model 753 User's Manual * part number: 166-753-001, Revision B, May 21, 1988. @@ -99,7 +99,7 @@ (XYC)->xyc_reloc_lo = ((ADDR) & 0xff); \ (ADDR) = ((ADDR) >> 8); \ (XYC)->xyc_reloc_hi = (ADDR); \ - (XYC)->xyc_csr |= XYC_GBSY; /* go! */ \ + (XYC)->xyc_csr = XYC_GBSY; /* go! */ \ } /* @@ -370,9 +370,9 @@ xycattach(parent, self, aux) xyc->dvmaiopb = (struct xy_iopb *) ((u_long)dtmp - DVMA_BASE); xyc->reqs = (struct xy_iorq *) malloc(XYC_MAXIOPB * sizeof(struct xy_iorq), M_DEVBUF, M_NOWAIT); - bzero(xyc->reqs, XYC_MAXIOPB * sizeof(struct xy_iorq)); if (xyc->reqs == NULL) panic("xyc malloc"); + bzero(xyc->reqs, XYC_MAXIOPB * sizeof(struct xy_iorq)); /* * init iorq to iopb pointers, and non-zero fields in the @@ -1575,7 +1575,7 @@ xyc_xyreset(xycsc, xysc) if (xyc_unbusy(xycsc->xyc, XYC_RESETUSEC) == XY_ERR_FAIL) panic("xyc_reset"); } else { - xycsc->xyc->xyc_csr |= XYC_IPND; /* clear IPND */ + xycsc->xyc->xyc_csr = XYC_IPND; /* clear IPND */ } bcopy(&tmpiopb, xycsc->ciopb, sizeof(tmpiopb)); } @@ -1723,10 +1723,10 @@ xyc_remove_iorq(xycsc) */ if (xyc->xyc_csr & XYC_ERR) { - xyc->xyc_csr |= XYC_ERR; /* clear error condition */ + xyc->xyc_csr = XYC_ERR; /* clear error condition */ } if (xyc->xyc_csr & XYC_IPND) { - xyc->xyc_csr |= XYC_IPND; /* clear interrupt */ + xyc->xyc_csr = XYC_IPND; /* clear interrupt */ } for (rq = 0; rq < XYC_MAXIOPB; rq++) { diff --git a/sys/arch/sun3/dev/xd.c b/sys/arch/sun3/dev/xd.c index 3352fd1bfe8..a4ae623c13a 100644 --- a/sys/arch/sun3/dev/xd.c +++ b/sys/arch/sun3/dev/xd.c @@ -36,7 +36,7 @@ * x d . c x y l o g i c s 7 5 3 / 7 0 5 3 v m e / s m d d r i v e r * * author: Chuck Cranor - * id: $Id: xd.c,v 1.4 1996/02/08 04:43:47 chuck Exp $ + * id: $Id: xd.c,v 1.5 1996/03/04 20:35:27 chuck Exp $ * started: 27-Feb-95 * references: [1] Xylogics Model 753 User's Manual * part number: 166-753-001, Revision B, May 21, 1988. @@ -143,7 +143,7 @@ (ADDR) = ((ADDR) >> 8); \ (XDC)->xdc_iopbaddr3 = (ADDR); \ (XDC)->xdc_iopbamod = XDC_ADDRMOD; \ - (XDC)->xdc_csr |= XDC_ADDIOPB; /* go! */ \ + (XDC)->xdc_csr = XDC_ADDIOPB; /* go! */ \ } /* @@ -402,9 +402,9 @@ xdcattach(parent, self, aux) dvma_kvtopa((long) xdc->iopbase, BUS_VME32); xdc->reqs = (struct xd_iorq *) malloc(XDC_MAXIOPB * sizeof(struct xd_iorq), M_DEVBUF, M_NOWAIT); - bzero(xdc->reqs, XDC_MAXIOPB * sizeof(struct xd_iorq)); if (xdc->reqs == NULL) panic("xdc malloc"); + bzero(xdc->reqs, XDC_MAXIOPB * sizeof(struct xd_iorq)); /* init free list, iorq to iopb pointers, and non-zero fields in the * iopb which never change. */ @@ -1257,8 +1257,8 @@ xdc_rqtopb(iorq, iopb, cmd, subfun) block = block / iorq->xd->nhead; iopb->cylno = block; } - dp = dvma_kvtopa((long)iorq->dbuf, BUS_VME32); - iopb->daddr = dp = (iorq->dbuf == NULL) ? 0 : dp; + iopb->daddr = dp = (iorq->dbuf == NULL) ? 0 : + dvma_kvtopa((long)iorq->dbuf, BUS_VME32); iopb->addrmod = XDC_ADDRMOD; } } @@ -1646,7 +1646,7 @@ xdc_xdreset(xdcsc, xdsc) if (del <= 0) panic("xdc_reset"); } else { - xdcsc->xdc->xdc_csr |= XDC_CLRRIO; /* clear RIO */ + xdcsc->xdc->xdc_csr = XDC_CLRRIO; /* clear RIO */ } bcopy(&tmpiopb, xdcsc->iopbase, sizeof(tmpiopb)); } @@ -1815,7 +1815,7 @@ xdc_remove_iorq(xdcsc) * done bit. */ if (xdc->xdc_csr & XDC_REMIOPB) { - xdc->xdc_csr |= XDC_CLRRIO; + xdc->xdc_csr = XDC_CLRRIO; } for (rqno = 0; rqno < XDC_MAXIOPB; rqno++) { diff --git a/sys/arch/sun3/dev/xy.c b/sys/arch/sun3/dev/xy.c index b08bdfcda73..e66d57b187d 100644 --- a/sys/arch/sun3/dev/xy.c +++ b/sys/arch/sun3/dev/xy.c @@ -36,7 +36,7 @@ * x y . c x y l o g i c s 4 5 0 / 4 5 1 s m d d r i v e r * * author: Chuck Cranor - * id: $Id: xy.c,v 1.4 1996/02/21 03:44:01 chuck Exp $ + * id: $Id: xy.c,v 1.5 1996/03/04 20:35:29 chuck Exp $ * started: 14-Sep-95 * references: [1] Xylogics Model 753 User's Manual * part number: 166-753-001, Revision B, May 21, 1988. @@ -99,7 +99,7 @@ (XYC)->xyc_reloc_lo = ((ADDR) & 0xff); \ (ADDR) = ((ADDR) >> 8); \ (XYC)->xyc_reloc_hi = (ADDR); \ - (XYC)->xyc_csr |= XYC_GBSY; /* go! */ \ + (XYC)->xyc_csr = XYC_GBSY; /* go! */ \ } /* @@ -359,9 +359,9 @@ xycattach(parent, self, aux) dvma_kvtopa((long) xyc->iopbase, BUS_VME16); xyc->reqs = (struct xy_iorq *) malloc(XYC_MAXIOPB * sizeof(struct xy_iorq), M_DEVBUF, M_NOWAIT); - bzero(xyc->reqs, XYC_MAXIOPB * sizeof(struct xy_iorq)); if (xyc->reqs == NULL) panic("xyc malloc"); + bzero(xyc->reqs, XYC_MAXIOPB * sizeof(struct xy_iorq)); /* * init iorq to iopb pointers, and non-zero fields in the @@ -1561,7 +1561,7 @@ xyc_xyreset(xycsc, xysc) if (xyc_unbusy(xycsc->xyc, XYC_RESETUSEC) == XY_ERR_FAIL) panic("xyc_reset"); } else { - xycsc->xyc->xyc_csr |= XYC_IPND; /* clear IPND */ + xycsc->xyc->xyc_csr = XYC_IPND; /* clear IPND */ } bcopy(&tmpiopb, xycsc->ciopb, sizeof(tmpiopb)); } @@ -1711,10 +1711,10 @@ xyc_remove_iorq(xycsc) */ if (xyc->xyc_csr & XYC_ERR) { - xyc->xyc_csr |= XYC_ERR; /* clear error condition */ + xyc->xyc_csr = XYC_ERR; /* clear error condition */ } if (xyc->xyc_csr & XYC_IPND) { - xyc->xyc_csr |= XYC_IPND; /* clear interrupt */ + xyc->xyc_csr = XYC_IPND; /* clear interrupt */ } for (rq = 0; rq < XYC_MAXIOPB; rq++) { -- 2.20.1