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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to