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
This commit is contained in:
John Baldwin 2014-11-18 21:58:57 +00:00
parent caddd60abd
commit 369934d602
2 changed files with 21 additions and 19 deletions

View File

@ -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);
}

View File

@ -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, struct i2o_lct_entry *lct)
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 mfa, struct i2o_single_reply *reply)
(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