Message ID | 20201209102640.yn7mdn52sm7bfbgm@function |
---|---|
State | New |
Headers | show |
Series | [for,4.19] speakup: Reject setting the speakup line discipline outside of speakup | expand |
Samuel Thibault, le mer. 09 déc. 2020 12:03:24 +0100, a ecrit:
> Can you apply them with -l, or should I fix the whitespacing?
Don't bother, I found the difference, will post fixed patches.
Samuel
On Wed, Dec 09, 2020 at 12:03:24PM +0100, Samuel Thibault wrote: > Greg KH, le mer. 09 déc. 2020 11:54:54 +0100, a ecrit: > > This, and the 4.14.y backport, fail to apply: > > > > patching file drivers/staging/speakup/spk_ttyio.c > > Hunk #1 FAILED at 47. > > Hunk #2 succeeded at 187 (offset -4 lines). > > 1 out of 2 hunks FAILED -- rejects in file drivers/staging/speakup/spk_ttyio.c > > > > What tree(s) did you make the patch against? > > I used 4.19.162 and 4.14.211 tarballs. But now I realize that I used > patch -l, without it there are small whitespace differences. Can you > apply them with -l, or should I fix the whitespacing? Can you fix the whitespace please? quilt and git don't like applying patches with messed up whitespace from what I can tell :( thanks, greg k-h
diff --git a/drivers/staging/speakup/spk_ttyio.c b/drivers/staging/speakup/spk_ttyio.c index 669392f31d4e..6284aff434a1 100644 --- a/drivers/staging/speakup/spk_ttyio.c +++ b/drivers/staging/speakup/spk_ttyio.c @@ -47,27 +47,20 @@ static int spk_ttyio_ldisc_open(struct tty_struct *tty) { struct spk_ldisc_data *ldisc_data; + if (tty != speakup_tty) + /* Somebody tried to use this line discipline outside speakup */ + return -ENODEV; + if (tty->ops->write == NULL) return -EOPNOTSUPP; - mutex_lock(&speakup_tty_mutex); - if (speakup_tty) { - mutex_unlock(&speakup_tty_mutex); - return -EBUSY; - } - speakup_tty = tty; - ldisc_data = kmalloc(sizeof(struct spk_ldisc_data), GFP_KERNEL); - if (!ldisc_data) { - speakup_tty = NULL; - mutex_unlock(&speakup_tty_mutex); + if (!ldisc_data) return -ENOMEM; - } sema_init(&ldisc_data->sem, 0); ldisc_data->buf_free = true; - speakup_tty->disc_data = ldisc_data; - mutex_unlock(&speakup_tty_mutex); + tty->disc_data = ldisc_data; return 0; } @@ -191,9 +184,25 @@ static int spk_ttyio_initialise_ldisc(struct spk_synth *synth) tty_unlock(tty); + mutex_lock(&speakup_tty_mutex); + speakup_tty = tty; ret = tty_set_ldisc(tty, N_SPEAKUP); if (ret) - pr_err("speakup: Failed to set N_SPEAKUP on tty\n"); + speakup_tty = NULL; + mutex_unlock(&speakup_tty_mutex); + + if (!ret) + /* Success */ + return 0; + + pr_err("speakup: Failed to set N_SPEAKUP on tty\n"); + + tty_lock(tty); + if (tty->ops->close) + tty->ops->close(tty, NULL); + tty_unlock(tty); + + tty_kclose(tty); return ret; }