[PATCH] drivers/{char|isdn}: work_struct-induced breakage
part 1 of fsck-knows-how-many Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
7a87b6c228
commit
3e577a80ea
|
@ -663,7 +663,7 @@ static int stli_initopen(stlibrd_t *brdp, stliport_t *portp);
|
||||||
static int stli_rawopen(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait);
|
static int stli_rawopen(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait);
|
||||||
static int stli_rawclose(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait);
|
static int stli_rawclose(stlibrd_t *brdp, stliport_t *portp, unsigned long arg, int wait);
|
||||||
static int stli_waitcarrier(stlibrd_t *brdp, stliport_t *portp, struct file *filp);
|
static int stli_waitcarrier(stlibrd_t *brdp, stliport_t *portp, struct file *filp);
|
||||||
static void stli_dohangup(void *arg);
|
static void stli_dohangup(struct work_struct *);
|
||||||
static int stli_setport(stliport_t *portp);
|
static int stli_setport(stliport_t *portp);
|
||||||
static int stli_cmdwait(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback);
|
static int stli_cmdwait(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback);
|
||||||
static void stli_sendcmd(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback);
|
static void stli_sendcmd(stlibrd_t *brdp, stliport_t *portp, unsigned long cmd, void *arg, int size, int copyback);
|
||||||
|
@ -1990,9 +1990,9 @@ static void stli_start(struct tty_struct *tty)
|
||||||
* aren't that time critical).
|
* aren't that time critical).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void stli_dohangup(void *arg)
|
static void stli_dohangup(struct work_struct *ugly_api)
|
||||||
{
|
{
|
||||||
stliport_t *portp = (stliport_t *) arg;
|
stliport_t *portp = container_of(ugly_api, stliport_t, tqhangup);
|
||||||
if (portp->tty != NULL) {
|
if (portp->tty != NULL) {
|
||||||
tty_hangup(portp->tty);
|
tty_hangup(portp->tty);
|
||||||
}
|
}
|
||||||
|
@ -2898,7 +2898,7 @@ static int stli_initports(stlibrd_t *brdp)
|
||||||
portp->baud_base = STL_BAUDBASE;
|
portp->baud_base = STL_BAUDBASE;
|
||||||
portp->close_delay = STL_CLOSEDELAY;
|
portp->close_delay = STL_CLOSEDELAY;
|
||||||
portp->closing_wait = 30 * HZ;
|
portp->closing_wait = 30 * HZ;
|
||||||
INIT_WORK(&portp->tqhangup, stli_dohangup, portp);
|
INIT_WORK(&portp->tqhangup, stli_dohangup);
|
||||||
init_waitqueue_head(&portp->open_wait);
|
init_waitqueue_head(&portp->open_wait);
|
||||||
init_waitqueue_head(&portp->close_wait);
|
init_waitqueue_head(&portp->close_wait);
|
||||||
init_waitqueue_head(&portp->raw_wait);
|
init_waitqueue_head(&portp->raw_wait);
|
||||||
|
|
|
@ -1516,9 +1516,9 @@ static void rc_start(struct tty_struct * tty)
|
||||||
* do_rc_hangup() -> tty->hangup() -> rc_hangup()
|
* do_rc_hangup() -> tty->hangup() -> rc_hangup()
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void do_rc_hangup(void *private_)
|
static void do_rc_hangup(struct work_struct *ugly_api)
|
||||||
{
|
{
|
||||||
struct riscom_port *port = (struct riscom_port *) private_;
|
struct riscom_port *port = container_of(ugly_api, struct riscom_port, tqueue_hangup);
|
||||||
struct tty_struct *tty;
|
struct tty_struct *tty;
|
||||||
|
|
||||||
tty = port->tty;
|
tty = port->tty;
|
||||||
|
@ -1567,9 +1567,9 @@ static void rc_set_termios(struct tty_struct * tty, struct termios * old_termios
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_softint(void *private_)
|
static void do_softint(struct work_struct *ugly_api)
|
||||||
{
|
{
|
||||||
struct riscom_port *port = (struct riscom_port *) private_;
|
struct riscom_port *port = container_of(ugly_api, struct riscom_port, tqueue);
|
||||||
struct tty_struct *tty;
|
struct tty_struct *tty;
|
||||||
|
|
||||||
if(!(tty = port->tty))
|
if(!(tty = port->tty))
|
||||||
|
@ -1632,8 +1632,8 @@ static inline int rc_init_drivers(void)
|
||||||
memset(rc_port, 0, sizeof(rc_port));
|
memset(rc_port, 0, sizeof(rc_port));
|
||||||
for (i = 0; i < RC_NPORT * RC_NBOARD; i++) {
|
for (i = 0; i < RC_NPORT * RC_NBOARD; i++) {
|
||||||
rc_port[i].magic = RISCOM8_MAGIC;
|
rc_port[i].magic = RISCOM8_MAGIC;
|
||||||
INIT_WORK(&rc_port[i].tqueue, do_softint, &rc_port[i]);
|
INIT_WORK(&rc_port[i].tqueue, do_softint);
|
||||||
INIT_WORK(&rc_port[i].tqueue_hangup, do_rc_hangup, &rc_port[i]);
|
INIT_WORK(&rc_port[i].tqueue_hangup, do_rc_hangup);
|
||||||
rc_port[i].close_delay = 50 * HZ/100;
|
rc_port[i].close_delay = 50 * HZ/100;
|
||||||
rc_port[i].closing_wait = 3000 * HZ/100;
|
rc_port[i].closing_wait = 3000 * HZ/100;
|
||||||
init_waitqueue_head(&rc_port[i].open_wait);
|
init_waitqueue_head(&rc_port[i].open_wait);
|
||||||
|
|
|
@ -706,9 +706,9 @@ cd2401_rx_interrupt(int irq, void *dev_id)
|
||||||
* had to poll every port to see if that port needed servicing.
|
* had to poll every port to see if that port needed servicing.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
do_softint(void *private_)
|
do_softint(struct work_struct *ugly_api)
|
||||||
{
|
{
|
||||||
struct cyclades_port *info = (struct cyclades_port *) private_;
|
struct cyclades_port *info = container_of(ugly_api, struct cyclades_port, tqueue);
|
||||||
struct tty_struct *tty;
|
struct tty_struct *tty;
|
||||||
|
|
||||||
tty = info->tty;
|
tty = info->tty;
|
||||||
|
@ -2273,7 +2273,7 @@ scrn[1] = '\0';
|
||||||
info->blocked_open = 0;
|
info->blocked_open = 0;
|
||||||
info->default_threshold = 0;
|
info->default_threshold = 0;
|
||||||
info->default_timeout = 0;
|
info->default_timeout = 0;
|
||||||
INIT_WORK(&info->tqueue, do_softint, info);
|
INIT_WORK(&info->tqueue, do_softint);
|
||||||
init_waitqueue_head(&info->open_wait);
|
init_waitqueue_head(&info->open_wait);
|
||||||
init_waitqueue_head(&info->close_wait);
|
init_waitqueue_head(&info->close_wait);
|
||||||
/* info->session */
|
/* info->session */
|
||||||
|
|
|
@ -500,7 +500,7 @@ static int stl_echatintr(stlbrd_t *brdp);
|
||||||
static int stl_echmcaintr(stlbrd_t *brdp);
|
static int stl_echmcaintr(stlbrd_t *brdp);
|
||||||
static int stl_echpciintr(stlbrd_t *brdp);
|
static int stl_echpciintr(stlbrd_t *brdp);
|
||||||
static int stl_echpci64intr(stlbrd_t *brdp);
|
static int stl_echpci64intr(stlbrd_t *brdp);
|
||||||
static void stl_offintr(void *private);
|
static void stl_offintr(struct work_struct *);
|
||||||
static stlbrd_t *stl_allocbrd(void);
|
static stlbrd_t *stl_allocbrd(void);
|
||||||
static stlport_t *stl_getport(int brdnr, int panelnr, int portnr);
|
static stlport_t *stl_getport(int brdnr, int panelnr, int portnr);
|
||||||
|
|
||||||
|
@ -2081,14 +2081,12 @@ static int stl_echpci64intr(stlbrd_t *brdp)
|
||||||
/*
|
/*
|
||||||
* Service an off-level request for some channel.
|
* Service an off-level request for some channel.
|
||||||
*/
|
*/
|
||||||
static void stl_offintr(void *private)
|
static void stl_offintr(struct work_struct *work)
|
||||||
{
|
{
|
||||||
stlport_t *portp;
|
stlport_t *portp = container_of(work, stlport_t, tqueue);
|
||||||
struct tty_struct *tty;
|
struct tty_struct *tty;
|
||||||
unsigned int oldsigs;
|
unsigned int oldsigs;
|
||||||
|
|
||||||
portp = private;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printk("stl_offintr(portp=%x)\n", (int) portp);
|
printk("stl_offintr(portp=%x)\n", (int) portp);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2156,7 +2154,7 @@ static int __init stl_initports(stlbrd_t *brdp, stlpanel_t *panelp)
|
||||||
portp->baud_base = STL_BAUDBASE;
|
portp->baud_base = STL_BAUDBASE;
|
||||||
portp->close_delay = STL_CLOSEDELAY;
|
portp->close_delay = STL_CLOSEDELAY;
|
||||||
portp->closing_wait = 30 * HZ;
|
portp->closing_wait = 30 * HZ;
|
||||||
INIT_WORK(&portp->tqueue, stl_offintr, portp);
|
INIT_WORK(&portp->tqueue, stl_offintr);
|
||||||
init_waitqueue_head(&portp->open_wait);
|
init_waitqueue_head(&portp->open_wait);
|
||||||
init_waitqueue_head(&portp->close_wait);
|
init_waitqueue_head(&portp->close_wait);
|
||||||
portp->stats.brd = portp->brdnr;
|
portp->stats.brd = portp->brdnr;
|
||||||
|
|
|
@ -71,8 +71,9 @@ ergo_interrupt(int intno, void *dev_id)
|
||||||
/* may be queued from everywhere (interrupts included). */
|
/* may be queued from everywhere (interrupts included). */
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
static void
|
static void
|
||||||
ergo_irq_bh(hysdn_card * card)
|
ergo_irq_bh(struct work_struct *ugli_api)
|
||||||
{
|
{
|
||||||
|
hysdn_card * card = container_of(ugli_api, hysdn_card, irq_queue);
|
||||||
tErgDpram *dpr;
|
tErgDpram *dpr;
|
||||||
int again;
|
int again;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -442,7 +443,7 @@ ergo_inithardware(hysdn_card * card)
|
||||||
card->writebootseq = ergo_writebootseq;
|
card->writebootseq = ergo_writebootseq;
|
||||||
card->waitpofready = ergo_waitpofready;
|
card->waitpofready = ergo_waitpofready;
|
||||||
card->set_errlog_state = ergo_set_errlog_state;
|
card->set_errlog_state = ergo_set_errlog_state;
|
||||||
INIT_WORK(&card->irq_queue, (void *) (void *) ergo_irq_bh, card);
|
INIT_WORK(&card->irq_queue, ergo_irq_bh);
|
||||||
card->hysdn_lock = SPIN_LOCK_UNLOCKED;
|
card->hysdn_lock = SPIN_LOCK_UNLOCKED;
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
|
|
|
@ -267,12 +267,12 @@ adb_probe_task(void *x)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
__adb_probe_task(void *data)
|
__adb_probe_task(struct work_struct *bullshit)
|
||||||
{
|
{
|
||||||
adb_probe_task_pid = kernel_thread(adb_probe_task, NULL, SIGCHLD | CLONE_KERNEL);
|
adb_probe_task_pid = kernel_thread(adb_probe_task, NULL, SIGCHLD | CLONE_KERNEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DECLARE_WORK(adb_reset_work, __adb_probe_task, NULL);
|
static DECLARE_WORK(adb_reset_work, __adb_probe_task);
|
||||||
|
|
||||||
int
|
int
|
||||||
adb_reset_bus(void)
|
adb_reset_bus(void)
|
||||||
|
|
Loading…
Reference in New Issue