Hello Mihai, In this case, it is good to have the User Mode Linux upstream in the loop.
Thanks, Ritesh --- linux-source-5.16/arch/um/drivers/mconsole_kern.c 2022-02-05 20:22:06.000000000 +0200 +++ linux-source-5.16.fix/arch/um/drivers/mconsole_kern.c 2022-02-16 23:35:39.562668086 +0200 @@ -224,6 +224,7 @@ void mconsole_stop(struct mc_request *req) { + int err; deactivate_fd(req->originating_fd, MCONSOLE_IRQ); os_set_fd_block(req->originating_fd, 1); mconsole_reply(req, "stopped", 0, 0); @@ -247,6 +248,11 @@ } os_set_fd_block(req->originating_fd, 0); mconsole_reply(req, "", 0, 0); + err=activate_fd(MCONSOLE_IRQ, req->originating_fd, IRQ_READ, + (void*)(req->originating_fd), NULL); + if (err) + mconsole_reply(req, "Failed to reactivate MCONSOLE_IRQ, \ + this will block the read for uml_mconsole", 1, 0); } static DEFINE_SPINLOCK(mc_devices_lock); --- linux-source-5.16/arch/um/kernel/irq.c 2022-02-05 20:22:06.000000000 +0200 +++ linux-source-5.16.fix/arch/um/kernel/irq.c 2022-02-16 23:39:15.650279367 +0200 @@ -249,7 +249,7 @@ free_irq_entry(entry, false); } -static int activate_fd(int irq, int fd, enum um_irq_type type, void *dev_id, +int activate_fd(int irq, int fd, enum um_irq_type type, void *dev_id, void (*timetravel_handler)(int, int, void *, struct time_travel_event *)) { @@ -304,6 +304,7 @@ out: return err; } +EXPORT_SYMBOL(activate_fd); /* * Remove the entry or entries for a specific FD, if you --- linux-source-5.16/arch/um/include/shared/irq_user.h 2022-02-05 20:22:06.000000000 +0200 +++ linux-source-5.16.fix/arch/um/include/shared/irq_user.h 2022-02-16 23:39:09.642292312 +0200 @@ -19,6 +19,7 @@ void sigio_run_timetravel_handlers(void); extern void free_irq_by_fd(int fd); extern void deactivate_fd(int fd, int irqnum); +extern int activate_fd(int irq, int fd, enum um_irq_type type, void *dev_id, void (*timetravel_handler)(int, int, void *, struct time_travel_event *)); extern int deactivate_all_fds(void); extern int activate_ipi(int fd, int pid); On Thu, 2022-02-17 at 01:06 +0200, Mihai Hanor wrote: > Package: user-mode-linux > Version: 5.16um1 > Severity: normal > File: /usr/bin/linux.uml > X-Debbugs-Cc: quake2i...@gmail.com > > Dear Maintainer, > > * What is the problem: > Issuing the commands stop followed by go, at the input of the > uml_mconsole > client, results in the client becoming blocked on read socket. This > is because > of logic in arch/um/drivers/mconsole_kern.c, where mconsole_stop() > doesn't > reactivate the MCONSOLE_IRQ before the function has exited. > > I've managed to find a fix which seems to be working, but I don't > know if it's > a proper fix. Please see the attached file. > > > -- System Information: > Debian Release: bookworm/sid > APT prefers testing > APT policy: (900, 'testing'), (500, 'unstable-debug'), (500, > 'testing-debug'), (1, 'unstable') > Architecture: amd64 (x86_64) > Foreign Architectures: i386 > > Kernel: Linux 5.16.0-1-amd64 (SMP w/4 CPU threads; PREEMPT) > Kernel taint flags: TAINT_WARN > Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), > LANGUAGE=en_US:en > Shell: /bin/sh linked to /bin/dash > Init: systemd (via /run/systemd/system) > LSM: AppArmor: enabled > > Versions of packages user-mode-linux depends on: > ii libc6 2.33-5 > > Versions of packages user-mode-linux recommends: > ii uml-utilities 20070815.4-1 > > Versions of packages user-mode-linux suggests: > ii mate-terminal [x-terminal-emulator] 1.26.0-1 > ii pterm [x-terminal-emulator] 0.76-2 > pn rootstrap <none> > pn slirp <none> > pn user-mode-linux-doc <none> > pn vde2 <none> > > -- no debconf information -- Ritesh Raj Sarraf | http://people.debian.org/~rrs Debian - The Universal Operating System
signature.asc
Description: This is a digitally signed message part