summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authortanimura <tanimura@FreeBSD.org>2003-11-09 09:17:26 +0000
committertanimura <tanimura@FreeBSD.org>2003-11-09 09:17:26 +0000
commit7eade05dfa5c79c8765c89ae76635f31451fe886 (patch)
tree19de3ca43ba82c3cf15a4a6c7fba917e0f7e416b /sys/dev
parent9cbd7fa025947081790184770a6c74511b0b0a44 (diff)
downloadFreeBSD-src-7eade05dfa5c79c8765c89ae76635f31451fe886.zip
FreeBSD-src-7eade05dfa5c79c8765c89ae76635f31451fe886.tar.gz
- Implement selwakeuppri() which allows raising the priority of a
thread being waken up. The thread waken up can run at a priority as high as after tsleep(). - Replace selwakeup()s with selwakeuppri()s and pass appropriate priorities. - Add cv_broadcastpri() which raises the priority of the broadcast threads. Used by selwakeuppri() if collision occurs. Not objected in: -arch, -current
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/aac/aac.c2
-rw-r--r--sys/dev/atkbdc/psm.c2
-rw-r--r--sys/dev/bktr/bktr_core.c2
-rw-r--r--sys/dev/firewire/firewire.c2
-rw-r--r--sys/dev/kbd/kbd.c4
-rw-r--r--sys/dev/mse/mse.c2
-rw-r--r--sys/dev/nmdm/nmdm.c4
-rw-r--r--sys/dev/random/randomdev.c2
-rw-r--r--sys/dev/sab/sab.c2
-rw-r--r--sys/dev/snp/snp.c4
-rw-r--r--sys/dev/sound/midi/midibuf.c4
-rw-r--r--sys/dev/sound/pcm/channel.c2
-rw-r--r--sys/dev/usb/ucom.c2
-rw-r--r--sys/dev/usb/ugen.c4
-rw-r--r--sys/dev/usb/uhid.c2
-rw-r--r--sys/dev/usb/ums.c4
-rw-r--r--sys/dev/usb/usb.c2
-rw-r--r--sys/dev/zs/zs.c2
18 files changed, 24 insertions, 24 deletions
diff --git a/sys/dev/aac/aac.c b/sys/dev/aac/aac.c
index 8466bd8..bb54691 100644
--- a/sys/dev/aac/aac.c
+++ b/sys/dev/aac/aac.c
@@ -2717,7 +2717,7 @@ aac_handle_aif(struct aac_softc *sc, struct aac_fib *fib)
if (sc->aac_state & AAC_STATE_AIF_SLEEPER)
wakeup(sc->aac_aifq);
/* Wakeup any poll()ers */
- selwakeup(&sc->rcv_select);
+ selwakeuppri(&sc->rcv_select, PRIBIO);
}
AAC_LOCK_RELEASE(&sc->aac_aifq_lock);
diff --git a/sys/dev/atkbdc/psm.c b/sys/dev/atkbdc/psm.c
index ef98da4..2c14bbe 100644
--- a/sys/dev/atkbdc/psm.c
+++ b/sys/dev/atkbdc/psm.c
@@ -2371,7 +2371,7 @@ psmintr(void *arg)
sc->state &= ~PSM_ASLP;
wakeup( sc);
}
- selwakeup(&sc->rsel);
+ selwakeuppri(&sc->rsel, PZERO);
}
}
diff --git a/sys/dev/bktr/bktr_core.c b/sys/dev/bktr/bktr_core.c
index 19795a2..b9d21b8 100644
--- a/sys/dev/bktr/bktr_core.c
+++ b/sys/dev/bktr/bktr_core.c
@@ -821,7 +821,7 @@ common_bktr_intr( void *arg )
/* If someone has a select() on /dev/vbi, inform them */
if (SEL_WAITING(&bktr->vbi_select)) {
- selwakeup(&bktr->vbi_select);
+ selwakeuppri(&bktr->vbi_select, VBIPRI);
}
diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c
index be01cc4..9844e7b 100644
--- a/sys/dev/firewire/firewire.c
+++ b/sys/dev/firewire/firewire.c
@@ -1963,7 +1963,7 @@ fw_rcv(struct fw_rcv_buf *rb)
#else
if (&xferq->rsel.si_pid != 0)
#endif
- selwakeup(&xferq->rsel);
+ selwakeuppri(&xferq->rsel, FWPRI);
if (xferq->flag & FWXFERQ_WAKEUP) {
xferq->flag &= ~FWXFERQ_WAKEUP;
wakeup((caddr_t)xferq);
diff --git a/sys/dev/kbd/kbd.c b/sys/dev/kbd/kbd.c
index 1e8785d..f5dd583 100644
--- a/sys/dev/kbd/kbd.c
+++ b/sys/dev/kbd/kbd.c
@@ -676,7 +676,7 @@ genkbd_event(keyboard_t *kbd, int event, void *arg)
sc->gkb_flags &= ~KB_ASLEEP;
wakeup(sc);
}
- selwakeup(&sc->gkb_rsel);
+ selwakeuppri(&sc->gkb_rsel, PZERO);
return 0;
default:
return EINVAL;
@@ -747,7 +747,7 @@ genkbd_event(keyboard_t *kbd, int event, void *arg)
sc->gkb_flags &= ~KB_ASLEEP;
wakeup(sc);
}
- selwakeup(&sc->gkb_rsel);
+ selwakeuppri(&sc->gkb_rsel, PZERO);
}
return 0;
diff --git a/sys/dev/mse/mse.c b/sys/dev/mse/mse.c
index bb79f28..408bbf7 100644
--- a/sys/dev/mse/mse.c
+++ b/sys/dev/mse/mse.c
@@ -751,7 +751,7 @@ mseintr(arg)
sc->sc_flags &= ~MSESC_WANT;
wakeup(sc);
}
- selwakeup(&sc->sc_selp);
+ selwakeuppri(&sc->sc_selp, MSEPRI);
}
}
diff --git a/sys/dev/nmdm/nmdm.c b/sys/dev/nmdm/nmdm.c
index 1511e9b..3227b11 100644
--- a/sys/dev/nmdm/nmdm.c
+++ b/sys/dev/nmdm/nmdm.c
@@ -451,11 +451,11 @@ wakeup_other(struct tty *tp, int flag)
GETPARTS(tp, ourpart, otherpart);
if (flag & FREAD) {
- selwakeup(&otherpart->nm_tty.t_rsel);
+ selwakeuppri(&otherpart->nm_tty.t_rsel, TTIPRI);
wakeup(TSA_PTC_READ((&otherpart->nm_tty)));
}
if (flag & FWRITE) {
- selwakeup(&otherpart->nm_tty.t_wsel);
+ selwakeuppri(&otherpart->nm_tty.t_wsel, TTOPRI);
wakeup(TSA_PTC_WRITE((&otherpart->nm_tty)));
}
}
diff --git a/sys/dev/random/randomdev.c b/sys/dev/random/randomdev.c
index 6bbe200..48618e9 100644
--- a/sys/dev/random/randomdev.c
+++ b/sys/dev/random/randomdev.c
@@ -426,7 +426,7 @@ random_unblock(void)
{
if (!random_systat.seeded) {
random_systat.seeded = 1;
- selwakeup(&random_systat.rsel);
+ selwakeuppri(&random_systat.rsel, PUSER);
wakeup(&random_systat);
}
}
diff --git a/sys/dev/sab/sab.c b/sys/dev/sab/sab.c
index 2eeb7f0..d8ac3d4 100644
--- a/sys/dev/sab/sab.c
+++ b/sys/dev/sab/sab.c
@@ -799,7 +799,7 @@ sabttystart(struct tty *tp)
tp->t_state &= ~TS_SO_OLOWAT;
wakeup(TSA_OLOWAT(tp));
}
- selwakeup(&tp->t_wsel);
+ selwakeuppri(&tp->t_wsel, TTOPRI);
if (tp->t_outq.c_cc == 0) {
if ((tp->t_state & (TS_BUSY | TS_SO_OCOMPLETE)) ==
TS_SO_OCOMPLETE && tp->t_outq.c_cc == 0) {
diff --git a/sys/dev/snp/snp.c b/sys/dev/snp/snp.c
index d08ff3f..4c4115d 100644
--- a/sys/dev/snp/snp.c
+++ b/sys/dev/snp/snp.c
@@ -370,7 +370,7 @@ snp_in(snp, buf, n)
snp->snp_flags &= ~SNOOP_RWAIT;
wakeup(snp);
}
- selwakeup(&snp->snp_sel);
+ selwakeuppri(&snp->snp_sel, PZERO + 1);
return (n);
}
@@ -444,7 +444,7 @@ snp_detach(snp)
snp->snp_target = NODEV;
detach_notty:
- selwakeup(&snp->snp_sel);
+ selwakeuppri(&snp->snp_sel, PZERO + 1);
if ((snp->snp_flags & SNOOP_OPEN) == 0)
free(snp, M_SNP);
diff --git a/sys/dev/sound/midi/midibuf.c b/sys/dev/sound/midi/midibuf.c
index 8b4eda7..f444405 100644
--- a/sys/dev/sound/midi/midibuf.c
+++ b/sys/dev/sound/midi/midibuf.c
@@ -358,7 +358,7 @@ queuerawdata(midi_dbuf *dbuf, char *data, int len)
/* Wake up the processes sleeping on input data. */
cv_broadcast(&dbuf->cv_in);
if (SEL_WAITING(&dbuf->sel) && dbuf->rl >= dbuf->blocksize)
- selwakeup(&dbuf->sel);
+ selwakeuppri(&dbuf->sel, PRIBIO);
}
static void
@@ -399,5 +399,5 @@ deleterawdata(midi_dbuf *dbuf, int len)
/* Wake up the processes sleeping on queueing. */
cv_broadcast(&dbuf->cv_out);
if (SEL_WAITING(&dbuf->sel) && dbuf->fl >= dbuf->blocksize)
- selwakeup(&dbuf->sel);
+ selwakeuppri(&dbuf->sel, PRIBIO);
}
diff --git a/sys/dev/sound/pcm/channel.c b/sys/dev/sound/pcm/channel.c
index c17b219..7a1c906 100644
--- a/sys/dev/sound/pcm/channel.c
+++ b/sys/dev/sound/pcm/channel.c
@@ -116,7 +116,7 @@ chn_wakeup(struct pcm_channel *c)
CHN_LOCKASSERT(c);
if (SEL_WAITING(sndbuf_getsel(bs)) && chn_polltrigger(c))
- selwakeup(sndbuf_getsel(bs));
+ selwakeuppri(sndbuf_getsel(bs), PRIBIO);
wakeup(bs);
}
diff --git a/sys/dev/usb/ucom.c b/sys/dev/usb/ucom.c
index b398661..a57d6f8 100644
--- a/sys/dev/usb/ucom.c
+++ b/sys/dev/usb/ucom.c
@@ -875,7 +875,7 @@ ucomstart(struct tty *tp)
CLR(tp->t_state, TS_SO_OLOWAT);
wakeup(TSA_OLOWAT(tp));
}
- selwakeup(&tp->t_wsel);
+ selwakeuppri(&tp->t_wsel, TTIPRI);
if (tp->t_outq.c_cc == 0) {
if (ISSET(tp->t_state, TS_BUSY | TS_SO_OCOMPLETE) ==
TS_SO_OCOMPLETE && tp->t_outq.c_cc == 0) {
diff --git a/sys/dev/usb/ugen.c b/sys/dev/usb/ugen.c
index bf73938..8740c3d 100644
--- a/sys/dev/usb/ugen.c
+++ b/sys/dev/usb/ugen.c
@@ -945,7 +945,7 @@ ugenintr(usbd_xfer_handle xfer, usbd_private_handle addr, usbd_status status)
DPRINTFN(5, ("ugen_intr: waking %p\n", sce));
wakeup(sce);
}
- selwakeup(&sce->rsel);
+ selwakeuppri(&sce->rsel, PZERO);
}
Static void
@@ -1005,7 +1005,7 @@ ugen_isoc_rintr(usbd_xfer_handle xfer, usbd_private_handle addr,
DPRINTFN(5, ("ugen_isoc_rintr: waking %p\n", sce));
wakeup(sce);
}
- selwakeup(&sce->rsel);
+ selwakeuppri(&sce->rsel, PZERO);
}
Static usbd_status
diff --git a/sys/dev/usb/uhid.c b/sys/dev/usb/uhid.c
index c61e4ba..2451542 100644
--- a/sys/dev/usb/uhid.c
+++ b/sys/dev/usb/uhid.c
@@ -383,7 +383,7 @@ uhid_intr(usbd_xfer_handle xfer, usbd_private_handle addr, usbd_status status)
DPRINTFN(5, ("uhid_intr: waking %p\n", &sc->sc_q));
wakeup(&sc->sc_q);
}
- selwakeup(&sc->sc_rsel);
+ selwakeuppri(&sc->sc_rsel, PZERO);
if (sc->sc_async != NULL) {
DPRINTFN(3, ("uhid_intr: sending SIGIO %p\n", sc->sc_async));
PROC_LOCK(sc->sc_async);
diff --git a/sys/dev/usb/ums.c b/sys/dev/usb/ums.c
index f09fba7..dea1e0b 100644
--- a/sys/dev/usb/ums.c
+++ b/sys/dev/usb/ums.c
@@ -394,7 +394,7 @@ ums_detach(device_t self)
}
if (sc->state & UMS_SELECT) {
sc->state &= ~UMS_SELECT;
- selwakeup(&sc->rsel);
+ selwakeuppri(&sc->rsel, PZERO);
}
destroy_dev(sc->dev);
@@ -533,7 +533,7 @@ ums_add_to_queue(struct ums_softc *sc, int dx, int dy, int dz, int buttons)
}
if (sc->state & UMS_SELECT) {
sc->state &= ~UMS_SELECT;
- selwakeup(&sc->rsel);
+ selwakeuppri(&sc->rsel, PZERO);
}
}
Static int
diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c
index 846a82f..dd2e2b3 100644
--- a/sys/dev/usb/usb.c
+++ b/sys/dev/usb/usb.c
@@ -810,7 +810,7 @@ usb_add_event(int type, struct usb_event *uep)
TAILQ_INSERT_TAIL(&usb_events, ueq, next);
usb_nevents++;
wakeup(&usb_events);
- selwakeup(&usb_selevent);
+ selwakeuppri(&usb_selevent, PZERO);
if (usb_async_proc != NULL) {
PROC_LOCK(usb_async_proc);
psignal(usb_async_proc, SIGIO);
diff --git a/sys/dev/zs/zs.c b/sys/dev/zs/zs.c
index f3687ff..7e58049 100644
--- a/sys/dev/zs/zs.c
+++ b/sys/dev/zs/zs.c
@@ -600,7 +600,7 @@ zsttystart(struct tty *tp)
tp->t_state &= ~TS_SO_OLOWAT;
wakeup(TSA_OLOWAT(tp));
}
- selwakeup(&tp->t_wsel);
+ selwakeuppri(&tp->t_wsel, TTOPRI);
if (tp->t_outq.c_cc == 0) {
if ((tp->t_state & (TS_BUSY | TS_SO_OCOMPLETE)) ==
TS_SO_OCOMPLETE && tp->t_outq.c_cc == 0) {
OpenPOWER on IntegriCloud