Skip to content

Commit 3fef15f

Browse files
committed
Merge tag 'auxdisplay-for-linus-v5.12-rc6' of git://github.com/ojeda/linux
Pull auxdisplay fix from Miguel Ojeda: "Remove in_interrupt() usage (Sebastian Andrzej Siewior)" * tag 'auxdisplay-for-linus-v5.12-rc6' of git://github.com/ojeda/linux: auxdisplay: Remove in_interrupt() usage.
2 parents 36a1463 + 701454b commit 3fef15f

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

drivers/auxdisplay/charlcd.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -470,12 +470,14 @@ static ssize_t charlcd_write(struct file *file, const char __user *buf,
470470
char c;
471471

472472
for (; count-- > 0; (*ppos)++, tmp++) {
473-
if (!in_interrupt() && (((count + 1) & 0x1f) == 0))
473+
if (((count + 1) & 0x1f) == 0) {
474474
/*
475-
* let's be a little nice with other processes
476-
* that need some CPU
475+
* charlcd_write() is invoked as a VFS->write() callback
476+
* and as such it is always invoked from preemptible
477+
* context and may sleep.
477478
*/
478-
schedule();
479+
cond_resched();
480+
}
479481

480482
if (get_user(c, tmp))
481483
return -EFAULT;
@@ -537,12 +539,8 @@ static void charlcd_puts(struct charlcd *lcd, const char *s)
537539
int count = strlen(s);
538540

539541
for (; count-- > 0; tmp++) {
540-
if (!in_interrupt() && (((count + 1) & 0x1f) == 0))
541-
/*
542-
* let's be a little nice with other processes
543-
* that need some CPU
544-
*/
545-
schedule();
542+
if (((count + 1) & 0x1f) == 0)
543+
cond_resched();
546544

547545
charlcd_write_char(lcd, *tmp);
548546
}

0 commit comments

Comments
 (0)