Skip to content

Commit f3f870b

Browse files
chejianjwenlingz
authored andcommitted
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>
1 parent 3060956 commit f3f870b

File tree

1 file changed

+27
-16
lines changed

1 file changed

+27
-16
lines changed

devicemodel/hw/uart_core.c

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -790,10 +790,12 @@ uart_reset_backend(struct uart_backend *be)
790790
break;
791791
}
792792

793-
error = mevent_enable(evp);
794-
if (error) {
795-
WPRINTF(("mevent_enable error\n"));
796-
return -1;
793+
if (evp) {
794+
error = mevent_enable(evp);
795+
if (error) {
796+
WPRINTF(("mevent_enable error\n"));
797+
return -1;
798+
}
797799
}
798800

799801
return 0;
@@ -821,13 +823,15 @@ uart_enable_backend(struct uart_backend *be, bool enable)
821823
return -1;
822824
}
823825

824-
if (enable)
825-
error = mevent_enable(evp);
826-
else
827-
error = mevent_disable(evp);
828-
if (error) {
829-
WPRINTF(("mevent %s error\n", enable ? "enable" : "disable"));
830-
return -1;
826+
if (evp) {
827+
if (enable)
828+
error = mevent_enable(evp);
829+
else
830+
error = mevent_disable(evp);
831+
if (error) {
832+
WPRINTF(("mevent %s error\n", enable ? "enable" : "disable"));
833+
return -1;
834+
}
831835
}
832836

833837
return 0;
@@ -909,11 +913,18 @@ uart_config_backend(struct uart_vdev *uart, struct uart_backend *be, long port)
909913
atexit(uart_reset_stdio);
910914
}
911915
be->opened = true;
912-
be->evp = mevent_add(fd, EVF_READ, uart_drain, uart,
913-
uart_mevent_teardown, uart);
914-
if (!be->evp) {
915-
WPRINTF(("uart: mevent_add failed\n"));
916-
return -1;
916+
/*
917+
* When acrn-dm is started by acrnd as a background process,
918+
* STDIO is redirected to journal log file. In this case epoll
919+
* cannot be used on a regular file.
920+
*/
921+
if (isatty(fd)) {
922+
be->evp = mevent_add(fd, EVF_READ, uart_drain, uart,
923+
uart_mevent_teardown, uart);
924+
if (!be->evp) {
925+
WPRINTF(("uart: mevent_add failed\n"));
926+
return -1;
927+
}
917928
}
918929
break;
919930
case UART_BE_SOCK:

0 commit comments

Comments
 (0)