dm: uart: use mevent_add only when it is a tty

When acrn-dm is started by acrnd as a background process, STDIN is
redirected to journal. In this case mevent_add cannot be called on
the fd of STDIN.

Tracked-On: #2998
Signed-off-by: Jian Jun Chen <jian.jun.chen@intel.com>
Acked-by: Yu Wang <yu1.wang@intel.com>
This commit is contained in:
Jian Jun Chen 2019-04-23 09:39:45 +08:00 committed by wenlingz
parent 49563b2a11
commit fb9bd2a19a

View File

@ -790,10 +790,12 @@ uart_reset_backend(struct uart_backend *be)
break; break;
} }
error = mevent_enable(evp); if (evp) {
if (error) { error = mevent_enable(evp);
WPRINTF(("mevent_enable error\n")); if (error) {
return -1; WPRINTF(("mevent_enable error\n"));
return -1;
}
} }
return 0; return 0;
@ -821,13 +823,15 @@ uart_enable_backend(struct uart_backend *be, bool enable)
return -1; return -1;
} }
if (enable) if (evp) {
error = mevent_enable(evp); if (enable)
else error = mevent_enable(evp);
error = mevent_disable(evp); else
if (error) { error = mevent_disable(evp);
WPRINTF(("mevent %s error\n", enable ? "enable" : "disable")); if (error) {
return -1; WPRINTF(("mevent %s error\n", enable ? "enable" : "disable"));
return -1;
}
} }
return 0; return 0;
@ -909,11 +913,18 @@ uart_config_backend(struct uart_vdev *uart, struct uart_backend *be, long port)
atexit(uart_reset_stdio); atexit(uart_reset_stdio);
} }
be->opened = true; be->opened = true;
be->evp = mevent_add(fd, EVF_READ, uart_drain, uart, /*
uart_mevent_teardown, uart); * When acrn-dm is started by acrnd as a background process,
if (!be->evp) { * STDIO is redirected to journal log file. In this case epoll
WPRINTF(("uart: mevent_add failed\n")); * cannot be used on a regular file.
return -1; */
if (isatty(fd)) {
be->evp = mevent_add(fd, EVF_READ, uart_drain, uart,
uart_mevent_teardown, uart);
if (!be->evp) {
WPRINTF(("uart: mevent_add failed\n"));
return -1;
}
} }
break; break;
case UART_BE_SOCK: case UART_BE_SOCK: