PERFORCE change 107229 for review
Warner Losh
imp at FreeBSD.org
Tue Oct 3 17:18:28 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=107229
Change 107229 by imp at imp_lighthouse on 2006/10/04 00:17:41
Fix broken locking. simplify a open/close.
Affected files ...
.. //depot/projects/arm/src/sys/dev/mmc/mmcsd.c#8 edit
Differences ...
==== //depot/projects/arm/src/sys/dev/mmc/mmcsd.c#8 (text+ko) ====
@@ -89,7 +89,6 @@
sc->dev = dev;
MMCSD_LOCK_INIT(sc);
- MMCSD_LOCK(sc);
sc->disk = disk_alloc();
sc->disk->d_open = mmcsd_open;
sc->disk->d_close = mmcsd_close;
@@ -103,7 +102,6 @@
sc->disk->d_unit = device_get_unit(dev);
disk_create(sc->disk, DISK_VERSION);
bioq_init(&sc->bio_queue);
- MMCSD_UNLOCK(sc);
kthread_create(&mmcsd_task, sc, &sc->p, 0, 0, "task: mmc/sd card");
return (0);
@@ -118,27 +116,12 @@
static int
mmcsd_open(struct disk *dp)
{
- struct mmcsd_softc *sc;
-
- sc = (struct mmcsd_softc *)dp->d_drv1;
-
- MMCSD_LOCK(sc);
- MMCSD_UNLOCK(sc);
-
return 0;
}
static int
mmcsd_close(struct disk *dp)
{
- struct mmcsd_softc *sc;
-
- sc = (struct mmcsd_softc *)dp->d_drv1;
-
- MMCSD_LOCK(sc);
- MMCSD_UNLOCK(sc);
-
- // XXX do nothing since we don't lock for now
return 0;
}
@@ -168,17 +151,17 @@
uint32_t block;
device_t dev;
- MMCSD_LOCK(sc);
- printf("mmcsd_task: start\n");
dev = sc->dev;
for (;;) {
+ MMCSD_LOCK(sc);
do {
bp = bioq_first(&sc->bio_queue);
if (bp == NULL)
msleep(sc, &sc->sc_mtx, PRIBIO, "jobqueue", 0);
} while (bp == NULL);
+ bioq_remove(&sc->bio_queue, bp);
+ MMCSD_UNLOCK(sc);
MMCBUS_ACQUIRE_BUS(device_get_parent(dev), dev);
- bioq_remove(&sc->bio_queue, bp);
// printf("mmc_task: request %p for block %lld\n", bp, bp->bio_pblkno);
sz = sc->disk->d_sectorsize;
end = bp->bio_pblkno + (bp->bio_bcount / sz);
More information about the p4-projects
mailing list