Last minute TTY API change: remove mutex argument from tty_alloc().
I don't want people to override the mutex when allocating a TTY. It has to be there, to keep drivers like syscons happy. So I'm creating a tty_alloc_mutex() which can be used in those cases. tty_alloc_mutex() should eventually be removed. The advantage of this approach, is that we can just remove a function, without breaking the regular API in the future.
This commit is contained in:
parent
fa743d1903
commit
8d73adc757
@ -89,7 +89,7 @@ cn_drvinit(void *unused)
|
|||||||
|
|
||||||
if (cfe_consdev.cn_pri != CN_DEAD &&
|
if (cfe_consdev.cn_pri != CN_DEAD &&
|
||||||
cfe_consdev.cn_name[0] != '\0') {
|
cfe_consdev.cn_name[0] != '\0') {
|
||||||
tp = tty_alloc(&cfe_ttydevsw, NULL, NULL);
|
tp = tty_alloc(&cfe_ttydevsw, NULL);
|
||||||
tty_makedev(tp, NULL, "%s", output);
|
tty_makedev(tp, NULL, "%s", output);
|
||||||
tty_makealias(tp, "cfecons");
|
tty_makealias(tp, "cfecons");
|
||||||
}
|
}
|
||||||
|
@ -357,7 +357,7 @@ dcons_attach_port(int port, char *name, int flags)
|
|||||||
struct tty *tp;
|
struct tty *tp;
|
||||||
|
|
||||||
dc = &sc[port];
|
dc = &sc[port];
|
||||||
tp = tty_alloc(&dcons_ttydevsw, dc, NULL);
|
tp = tty_alloc(&dcons_ttydevsw, dc);
|
||||||
dc->flags = flags;
|
dc->flags = flags;
|
||||||
dc->tty = tp;
|
dc->tty = tp;
|
||||||
tty_init_console(tp, 0);
|
tty_init_console(tp, 0);
|
||||||
|
@ -117,11 +117,11 @@ nmdm_alloc(unsigned long unit)
|
|||||||
callout_init(&ns->ns_part2.np_callout, CALLOUT_MPSAFE);
|
callout_init(&ns->ns_part2.np_callout, CALLOUT_MPSAFE);
|
||||||
|
|
||||||
/* Create device nodes. */
|
/* Create device nodes. */
|
||||||
tp = ns->ns_part1.np_tty = tty_alloc(&nmdm_class, &ns->ns_part1,
|
tp = ns->ns_part1.np_tty = tty_alloc_mutex(&nmdm_class, &ns->ns_part1,
|
||||||
&ns->ns_mtx);
|
&ns->ns_mtx);
|
||||||
tty_makedev(tp, NULL, "nmdm%luA", unit);
|
tty_makedev(tp, NULL, "nmdm%luA", unit);
|
||||||
|
|
||||||
tp = ns->ns_part2.np_tty = tty_alloc(&nmdm_class, &ns->ns_part2,
|
tp = ns->ns_part2.np_tty = tty_alloc_mutex(&nmdm_class, &ns->ns_part2,
|
||||||
&ns->ns_mtx);
|
&ns->ns_mtx);
|
||||||
tty_makedev(tp, NULL, "nmdm%luB", unit);
|
tty_makedev(tp, NULL, "nmdm%luB", unit);
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ cn_drvinit(void *unused)
|
|||||||
* XXX: This is a hack and it may result in two /dev/ttya
|
* XXX: This is a hack and it may result in two /dev/ttya
|
||||||
* XXX: devices on platforms where the sab driver works.
|
* XXX: devices on platforms where the sab driver works.
|
||||||
*/
|
*/
|
||||||
tp = tty_alloc(&ofw_ttydevsw, NULL, NULL);
|
tp = tty_alloc(&ofw_ttydevsw, NULL);
|
||||||
tty_makedev(tp, NULL, "%s", output);
|
tty_makedev(tp, NULL, "%s", output);
|
||||||
tty_makealias(tp, "ofwcons");
|
tty_makealias(tp, "ofwcons");
|
||||||
}
|
}
|
||||||
|
@ -774,7 +774,7 @@ rp_attachcommon(CONTROLLER_T *ctlp, int num_aiops, int num_ports)
|
|||||||
for(aiop=0; aiop < num_aiops; aiop++) {
|
for(aiop=0; aiop < num_aiops; aiop++) {
|
||||||
num_chan = sGetAiopNumChan(ctlp, aiop);
|
num_chan = sGetAiopNumChan(ctlp, aiop);
|
||||||
for(chan=0; chan < num_chan; chan++, port++, rp++) {
|
for(chan=0; chan < num_chan; chan++, port++, rp++) {
|
||||||
rp->rp_tty = tp = tty_alloc(&rp_tty_class, rp, NULL);
|
rp->rp_tty = tp = tty_alloc(&rp_tty_class, rp);
|
||||||
rp->rp_port = port;
|
rp->rp_port = port;
|
||||||
rp->rp_ctlp = ctlp;
|
rp->rp_ctlp = ctlp;
|
||||||
rp->rp_unit = unit;
|
rp->rp_unit = unit;
|
||||||
|
@ -584,7 +584,7 @@ siattach(device_t dev)
|
|||||||
sprintf(pp->sp_name, "si%r%r", unit,
|
sprintf(pp->sp_name, "si%r%r", unit,
|
||||||
(int)(pp - sc->sc_ports));
|
(int)(pp - sc->sc_ports));
|
||||||
#endif
|
#endif
|
||||||
tp = pp->sp_tty = tty_alloc(&si_tty_class, pp, &Giant);
|
tp = pp->sp_tty = tty_alloc_mutex(&si_tty_class, pp, &Giant);
|
||||||
tty_makedev(tp, NULL, "A%r%r", unit, (int)(pp - sc->sc_ports));
|
tty_makedev(tp, NULL, "A%r%r", unit, (int)(pp - sc->sc_ports));
|
||||||
}
|
}
|
||||||
try_next2:
|
try_next2:
|
||||||
|
@ -334,7 +334,7 @@ sc_alloc_tty(int index, int devnum)
|
|||||||
stc = malloc(sizeof(struct sc_ttysoftc), M_DEVBUF, M_WAITOK);
|
stc = malloc(sizeof(struct sc_ttysoftc), M_DEVBUF, M_WAITOK);
|
||||||
stc->st_index = index;
|
stc->st_index = index;
|
||||||
stc->st_stat = NULL;
|
stc->st_stat = NULL;
|
||||||
tp = tty_alloc(&sc_ttydevsw, stc, &Giant);
|
tp = tty_alloc_mutex(&sc_ttydevsw, stc, &Giant);
|
||||||
|
|
||||||
/* Create device node. */
|
/* Create device node. */
|
||||||
tty_makedev(tp, NULL, "v%r", devnum);
|
tty_makedev(tp, NULL, "v%r", devnum);
|
||||||
|
@ -164,7 +164,7 @@ static struct ttydevsw smdev_ttydevsw = {
|
|||||||
static void
|
static void
|
||||||
sm_attach_mouse(void *unused)
|
sm_attach_mouse(void *unused)
|
||||||
{
|
{
|
||||||
sysmouse_tty = tty_alloc(&smdev_ttydevsw, NULL, NULL);
|
sysmouse_tty = tty_alloc(&smdev_ttydevsw, NULL);
|
||||||
tty_makedev(sysmouse_tty, NULL, "sysmouse");
|
tty_makedev(sysmouse_tty, NULL, "sysmouse");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ uart_tty_attach(struct uart_softc *sc)
|
|||||||
struct tty *tp;
|
struct tty *tp;
|
||||||
int unit;
|
int unit;
|
||||||
|
|
||||||
sc->sc_u.u_tty.tp = tp = tty_alloc(&uart_tty_class, sc, NULL);
|
sc->sc_u.u_tty.tp = tp = tty_alloc(&uart_tty_class, sc);
|
||||||
|
|
||||||
unit = device_get_unit(sc->sc_dev);
|
unit = device_get_unit(sc->sc_dev);
|
||||||
|
|
||||||
|
@ -293,7 +293,7 @@ usb2_com_attach_tty(struct ucom_softc *sc, uint32_t sub_units)
|
|||||||
int error = 0;
|
int error = 0;
|
||||||
char buf[32]; /* temporary TTY device name buffer */
|
char buf[32]; /* temporary TTY device name buffer */
|
||||||
|
|
||||||
tp = tty_alloc(&usb2_com_class, sc, sc->sc_mtx);
|
tp = tty_alloc_mutex(&usb2_com_class, sc, sc->sc_mtx);
|
||||||
if (tp == NULL) {
|
if (tp == NULL) {
|
||||||
error = ENOMEM;
|
error = ENOMEM;
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -230,7 +230,7 @@ xc_attach(device_t dev)
|
|||||||
xc_consdev.cn_putc = xccnputc_dom0;
|
xc_consdev.cn_putc = xccnputc_dom0;
|
||||||
}
|
}
|
||||||
|
|
||||||
xccons = tty_alloc(&xc_ttydevsw, NULL, NULL);
|
xccons = tty_alloc(&xc_ttydevsw, NULL);
|
||||||
tty_makedev(xccons, NULL, "xc%r", 0);
|
tty_makedev(xccons, NULL, "xc%r", 0);
|
||||||
|
|
||||||
callout_init(&xc_callout, 0);
|
callout_init(&xc_callout, 0);
|
||||||
|
@ -106,7 +106,7 @@ ssc_cnattach(void *arg)
|
|||||||
{
|
{
|
||||||
struct tty *tp;
|
struct tty *tp;
|
||||||
|
|
||||||
tp = tty_alloc(&ssc_class, NULL, NULL);
|
tp = tty_alloc(&ssc_class, NULL);
|
||||||
tty_makedev(tp, NULL, "ssccons");
|
tty_makedev(tp, NULL, "ssccons");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -885,7 +885,14 @@ ttydevsw_deffree(void *softc)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
struct tty *
|
struct tty *
|
||||||
tty_alloc(struct ttydevsw *tsw, void *sc, struct mtx *mutex)
|
tty_alloc(struct ttydevsw *tsw, void *sc)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (tty_alloc_mutex(tsw, sc, NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
struct tty *
|
||||||
|
tty_alloc_mutex(struct ttydevsw *tsw, void *sc, struct mtx *mutex)
|
||||||
{
|
{
|
||||||
struct tty *tp;
|
struct tty *tp;
|
||||||
|
|
||||||
|
@ -741,7 +741,7 @@ pts_alloc(int fflags, struct thread *td, struct file *fp)
|
|||||||
psc->pts_uidinfo = uid;
|
psc->pts_uidinfo = uid;
|
||||||
uihold(uid);
|
uihold(uid);
|
||||||
|
|
||||||
tp = tty_alloc(&pts_class, psc, NULL);
|
tp = tty_alloc(&pts_class, psc);
|
||||||
knlist_init(&psc->pts_inpoll.si_note, tp->t_mtx, NULL, NULL, NULL);
|
knlist_init(&psc->pts_inpoll.si_note, tp->t_mtx, NULL, NULL, NULL);
|
||||||
knlist_init(&psc->pts_outpoll.si_note, tp->t_mtx, NULL, NULL, NULL);
|
knlist_init(&psc->pts_outpoll.si_note, tp->t_mtx, NULL, NULL, NULL);
|
||||||
|
|
||||||
@ -781,7 +781,7 @@ pts_alloc_external(int fflags, struct thread *td, struct file *fp,
|
|||||||
psc->pts_uidinfo = uid;
|
psc->pts_uidinfo = uid;
|
||||||
uihold(uid);
|
uihold(uid);
|
||||||
|
|
||||||
tp = tty_alloc(&pts_class, psc, NULL);
|
tp = tty_alloc(&pts_class, psc);
|
||||||
knlist_init(&psc->pts_inpoll.si_note, tp->t_mtx, NULL, NULL, NULL);
|
knlist_init(&psc->pts_inpoll.si_note, tp->t_mtx, NULL, NULL, NULL);
|
||||||
knlist_init(&psc->pts_outpoll.si_note, tp->t_mtx, NULL, NULL, NULL);
|
knlist_init(&psc->pts_outpoll.si_note, tp->t_mtx, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ hvcn_dev_attach(device_t dev)
|
|||||||
hvcn_consdev.cn_name[0] == '\0')
|
hvcn_consdev.cn_name[0] == '\0')
|
||||||
return (ENXIO);
|
return (ENXIO);
|
||||||
|
|
||||||
tp = tty_alloc(&hvcn_class, NULL, NULL);
|
tp = tty_alloc(&hvcn_class, NULL);
|
||||||
tty_makedev(tp, NULL, "v%r", 1);
|
tty_makedev(tp, NULL, "v%r", 1);
|
||||||
tty_makealias(tp, "hvcn");
|
tty_makealias(tp, "hvcn");
|
||||||
|
|
||||||
|
@ -152,7 +152,8 @@ struct xtty {
|
|||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
|
|
||||||
/* Allocation and deallocation. */
|
/* Allocation and deallocation. */
|
||||||
struct tty *tty_alloc(struct ttydevsw *tsw, void *softc, struct mtx *mtx);
|
struct tty *tty_alloc(struct ttydevsw *tsw, void *softc);
|
||||||
|
struct tty *tty_alloc_mutex(struct ttydevsw *tsw, void *softc, struct mtx *mtx);
|
||||||
void tty_rel_pgrp(struct tty *tp, struct pgrp *pgrp);
|
void tty_rel_pgrp(struct tty *tp, struct pgrp *pgrp);
|
||||||
void tty_rel_sess(struct tty *tp, struct session *sess);
|
void tty_rel_sess(struct tty *tp, struct session *sess);
|
||||||
void tty_rel_gone(struct tty *tp);
|
void tty_rel_gone(struct tty *tp);
|
||||||
|
Loading…
Reference in New Issue
Block a user