svn commit: r274678 - head/sys/dev/pst

John Baldwin jhb at FreeBSD.org
Tue Nov 18 21:58:58 UTC 2014


Author: jhb
Date: Tue Nov 18 21:58:57 2014
New Revision: 274678
URL: https://svnweb.freebsd.org/changeset/base/274678

Log:
  Cleanups to pst(4):
  - Use callout(9) instead of timeout(9).
  - Don't bother zero'ing the softc.
  - Destroy mutex on detach.
  
  Tested by:	no one

Modified:
  head/sys/dev/pst/pst-pci.c
  head/sys/dev/pst/pst-raid.c

Modified: head/sys/dev/pst/pst-pci.c
==============================================================================
--- head/sys/dev/pst/pst-pci.c	Tue Nov 18 21:55:50 2014	(r274677)
+++ head/sys/dev/pst/pst-pci.c	Tue Nov 18 21:58:57 2014	(r274678)
@@ -73,15 +73,13 @@ iop_pci_attach(device_t dev)
     struct iop_softc *sc = device_get_softc(dev);
     int rid;
 
-    bzero(sc, sizeof(struct iop_softc));
-
     /* get resources */
-    rid = 0x10;
+    rid = PCIR_BAR(0);
     sc->r_mem = 
 	bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
 
     if (!sc->r_mem)
-	return 0;
+	return ENXIO;
 
     rid = 0x00;
     sc->r_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
@@ -104,11 +102,16 @@ static int
 iop_pci_detach(device_t dev)
 {
     struct iop_softc *sc = device_get_softc(dev);
+    int error;
 
+    error = bus_generic_detach(dev);
+    if (error)
+	    return (error);
     bus_teardown_intr(dev, sc->r_irq, sc->handle);
     bus_release_resource(dev, SYS_RES_IRQ, 0x00, sc->r_irq);
-    bus_release_resource(dev, SYS_RES_MEMORY, 0x10, sc->r_mem);
-    return bus_generic_detach(dev);
+    bus_release_resource(dev, SYS_RES_MEMORY, PCIR_BAR(0), sc->r_mem);
+    mtx_destroy(&sc->mtx);
+    return (0);
 }
 
 

Modified: head/sys/dev/pst/pst-raid.c
==============================================================================
--- head/sys/dev/pst/pst-raid.c	Tue Nov 18 21:55:50 2014	(r274677)
+++ head/sys/dev/pst/pst-raid.c	Tue Nov 18 21:58:57 2014	(r274678)
@@ -63,7 +63,7 @@ struct pst_softc {
 struct pst_request {
     struct pst_softc		*psc;		/* pointer to softc */
     u_int32_t			mfa;		/* frame addreess */
-    struct callout_handle	timeout_handle; /* handle for untimeout */
+    struct callout		timeout;	/* timeout timer */
     struct bio			*bp;		/* associated bio ptr */
 };
 
@@ -75,7 +75,7 @@ static int pst_shutdown(device_t);
 static void pst_start(struct pst_softc *);
 static void pst_done(struct iop_softc *, u_int32_t, struct i2o_single_reply *);
 static int pst_rw(struct pst_request *);
-static void pst_timeout(struct pst_request *);
+static void pst_timeout(void *);
 static void bpack(int8_t *, int8_t *, int);
 
 /* local vars */
@@ -97,7 +97,7 @@ pst_add_raid(struct iop_softc *sc, struc
     psc->iop = sc;
     psc->lct = lct;
     device_set_softc(child, psc);
-    return bus_generic_attach(sc->dev);
+    return device_probe_and_attach(child);
 }
 
 static int
@@ -224,6 +224,7 @@ pst_start(struct pst_softc *psc)
 		iop_free_mfa(psc->iop, mfa);
 		return;
 	    }
+	    callout_init_mtx(&request->timeout, &psc->iop->mtx, 0);
 	    psc->iop->outstanding++;
 	    request->psc = psc;
 	    request->mfa = mfa;
@@ -245,7 +246,7 @@ pst_done(struct iop_softc *sc, u_int32_t
 	(struct pst_request *)reply->transaction_context;
     struct pst_softc *psc = request->psc;
 
-    untimeout((timeout_t *)pst_timeout, request, request->timeout_handle);
+    callout_stop(&request->timeout);
     request->bp->bio_resid = request->bp->bio_bcount - reply->donecount;
     biofinish(request->bp, NULL, reply->status ? EIO : 0);
     free(request, M_PSTRAID);
@@ -297,26 +298,25 @@ pst_rw(struct pst_request *request)
 
     request->psc->iop->reg->iqueue = request->mfa;
 
-    if (dumping)
-	request->timeout_handle.callout = NULL;
-    else
-	request->timeout_handle = 
-	    timeout((timeout_t*)pst_timeout, request, 10 * hz);
+    if (!dumping)
+	callout_reset(&request->timeout, 10 * hz, pst_timeout, request);
     return 0;
 }
 
 static void
-pst_timeout(struct pst_request *request)
+pst_timeout(void *arg)
 {
+    struct pst_request *request;
+
+    request = arg;
     printf("pst: timeout mfa=0x%08x cmd=0x%02x\n",
 	   request->mfa, request->bp->bio_cmd);
-    mtx_lock(&request->psc->iop->mtx);
+    mtx_assert(&request->psc->iop->mtx, MA_OWNED);
     iop_free_mfa(request->psc->iop, request->mfa);
     if ((request->mfa = iop_get_mfa(request->psc->iop)) == 0xffffffff) {
 	printf("pst: timeout no mfa possible\n");
 	biofinish(request->bp, NULL, EIO);
 	request->psc->iop->outstanding--;
-	mtx_unlock(&request->psc->iop->mtx);
 	return;
     }
     if (pst_rw(request)) {
@@ -324,7 +324,6 @@ pst_timeout(struct pst_request *request)
 	biofinish(request->bp, NULL, EIO);
 	request->psc->iop->outstanding--;
     }
-    mtx_unlock(&request->psc->iop->mtx);
 }
 
 static void


More information about the svn-src-head mailing list