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
_______________________________________________
linux-um mailing list
linux...@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um