From ffc1c33f15567c89c32070e3be7d3077a7048a0d Mon Sep 17 00:00:00 2001 From: pjd Date: Sun, 2 May 2004 17:57:49 +0000 Subject: Make it compile on 64-bit architectures. The biggest issue was that 16-bit atomic operations aren't supported on all architectures. --- sys/geom/gate/g_gate.c | 28 ++++++++++++++-------------- sys/geom/gate/g_gate.h | 24 ++++++++++++------------ 2 files changed, 26 insertions(+), 26 deletions(-) (limited to 'sys/geom') diff --git a/sys/geom/gate/g_gate.c b/sys/geom/gate/g_gate.c index 117f95a..027c70d 100644 --- a/sys/geom/gate/g_gate.c +++ b/sys/geom/gate/g_gate.c @@ -81,7 +81,7 @@ static void g_gate_wither(struct g_gate_softc *sc) { - atomic_set_16(&sc->sc_flags, G_GATE_FLAG_DESTROY); + atomic_set_32(&sc->sc_flags, G_GATE_FLAG_DESTROY); } static int @@ -113,7 +113,7 @@ g_gate_destroy(struct g_gate_softc *sc, boolean_t force) bp = bioq_first(&sc->sc_inqueue); if (bp != NULL) { bioq_remove(&sc->sc_inqueue, bp); - atomic_subtract_rel_16(&sc->sc_queue_count, 1); + atomic_subtract_rel_32(&sc->sc_queue_count, 1); G_GATE_LOGREQ(1, bp, "Request canceled."); g_io_deliver(bp, ENXIO); } else { @@ -126,7 +126,7 @@ g_gate_destroy(struct g_gate_softc *sc, boolean_t force) bp = bioq_first(&sc->sc_outqueue); if (bp != NULL) { bioq_remove(&sc->sc_outqueue, bp); - atomic_subtract_rel_16(&sc->sc_queue_count, 1); + atomic_subtract_rel_32(&sc->sc_queue_count, 1); G_GATE_LOGREQ(1, bp, "Request canceled."); g_io_deliver(bp, ENXIO); } else { @@ -183,7 +183,7 @@ static void g_gate_start(struct bio *bp) { struct g_gate_softc *sc; - uint16_t qcount; + uint32_t qcount; sc = bp->bio_to->geom->softc; if (sc == NULL || (sc->sc_flags & G_GATE_FLAG_DESTROY) != 0) { @@ -203,13 +203,13 @@ g_gate_start(struct bio *bp) return; } - atomic_store_rel_16(&qcount, sc->sc_queue_count); + atomic_store_rel_32(&qcount, sc->sc_queue_count); if (qcount > sc->sc_queue_size) { G_GATE_LOGREQ(1, bp, "Queue full, request canceled."); g_io_deliver(bp, EIO); return; } - atomic_add_acq_16(&sc->sc_queue_count, 1); + atomic_add_acq_32(&sc->sc_queue_count, 1); bp->bio_driver1 = (void *)sc->sc_seq; sc->sc_seq++; @@ -305,7 +305,7 @@ g_gate_guard(void *arg) if (curtime.sec - bp->bio_t0.sec < 5) continue; bioq_remove(&sc->sc_inqueue, bp); - atomic_subtract_rel_16(&sc->sc_queue_count, 1); + atomic_subtract_rel_32(&sc->sc_queue_count, 1); G_GATE_LOGREQ(1, bp, "Request timeout."); g_io_deliver(bp, EIO); } @@ -315,7 +315,7 @@ g_gate_guard(void *arg) if (curtime.sec - bp->bio_t0.sec < 5) continue; bioq_remove(&sc->sc_outqueue, bp); - atomic_subtract_rel_16(&sc->sc_queue_count, 1); + atomic_subtract_rel_32(&sc->sc_queue_count, 1); G_GATE_LOGREQ(1, bp, "Request timeout."); g_io_deliver(bp, EIO); } @@ -499,9 +499,9 @@ g_gate_ioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td) return (0); } bioq_remove(&sc->sc_inqueue, bp); - atomic_subtract_rel_16(&sc->sc_queue_count, 1); + atomic_subtract_rel_32(&sc->sc_queue_count, 1); mtx_unlock(&sc->sc_inqueue_mtx); - ggio->gctl_seq = (u_int)bp->bio_driver1; + ggio->gctl_seq = (uintptr_t)bp->bio_driver1; ggio->gctl_cmd = bp->bio_cmd; ggio->gctl_offset = bp->bio_offset; ggio->gctl_length = bp->bio_length; @@ -523,7 +523,7 @@ g_gate_ioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td) } mtx_lock(&sc->sc_outqueue_mtx); bioq_insert_tail(&sc->sc_outqueue, bp); - atomic_add_acq_16(&sc->sc_queue_count, 1); + atomic_add_acq_32(&sc->sc_queue_count, 1); mtx_unlock(&sc->sc_outqueue_mtx); g_gate_release(sc); return (0); @@ -538,12 +538,12 @@ g_gate_ioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td) return (ENOENT); mtx_lock(&sc->sc_outqueue_mtx); TAILQ_FOREACH(bp, &sc->sc_outqueue.queue, bio_queue) { - if (ggio->gctl_seq == (u_int)bp->bio_driver1) + if (ggio->gctl_seq == (uintptr_t)bp->bio_driver1) break; } if (bp != NULL) { bioq_remove(&sc->sc_outqueue, bp); - atomic_subtract_rel_16(&sc->sc_queue_count, 1); + atomic_subtract_rel_32(&sc->sc_queue_count, 1); } mtx_unlock(&sc->sc_outqueue_mtx); if (bp == NULL) { @@ -556,7 +556,7 @@ g_gate_ioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td) if (ggio->gctl_error == EAGAIN) { bp->bio_error = 0; G_GATE_LOGREQ(1, bp, "Request desisted."); - atomic_add_acq_16(&sc->sc_queue_count, 1); + atomic_add_acq_32(&sc->sc_queue_count, 1); mtx_lock(&sc->sc_inqueue_mtx); bioq_disksort(&sc->sc_inqueue, bp); mtx_unlock(&sc->sc_inqueue_mtx); diff --git a/sys/geom/gate/g_gate.h b/sys/geom/gate/g_gate.h index c89b2c5..a25332f 100644 --- a/sys/geom/gate/g_gate.h +++ b/sys/geom/gate/g_gate.h @@ -69,19 +69,19 @@ struct g_gate_softc { int sc_unit; /* P: (read-only) */ uint16_t sc_ref; /* P: g_gate_list_mtx */ struct g_provider *sc_provider; /* P: (read-only) */ - uint16_t sc_flags; /* P: (read-only) */ + uint32_t sc_flags; /* P: (read-only) */ struct bio_queue_head sc_inqueue; /* P: sc_inqueue_mtx */ struct mtx sc_inqueue_mtx; struct bio_queue_head sc_outqueue; /* P: sc_outqueue_mtx */ struct mtx sc_outqueue_mtx; - uint16_t sc_queue_count; /* P: (atomic) */ - uint16_t sc_queue_size; /* P: (read-only) */ + uint32_t sc_queue_count; /* P: (atomic) */ + uint32_t sc_queue_size; /* P: (read-only) */ u_int sc_timeout; /* P: (read-only) */ struct callout sc_callout; /* P: (modified only from callout thread) */ - u_int sc_seq; /* P: (modified only + uintptr_t sc_seq; /* P: (modified only from g_down thread) */ LIST_ENTRY(g_gate_softc) sc_next; /* P: g_gate_list_mtx */ @@ -131,13 +131,13 @@ struct g_gate_ctl_destroy { }; struct g_gate_ctl_io { - u_int gctl_version; - int gctl_unit; - u_int gctl_seq; - u_int gctl_cmd; - off_t gctl_offset; - off_t gctl_length; - void *gctl_data; - int gctl_error; + u_int gctl_version; + int gctl_unit; + uintptr_t gctl_seq; + u_int gctl_cmd; + off_t gctl_offset; + off_t gctl_length; + void *gctl_data; + int gctl_error; }; #endif /* !_G_GATE_H_ */ -- cgit v1.1