summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-11-22 16:02:59 +0000
committerDamien Zammit <damien@zamaudio.com>2023-06-23 23:55:57 +1000
commit739e31c5578828a40bfb775b3b08afb3e715a22d (patch)
treeaf7da55b369a2c6722f53ad0236fb69bb0c8c762
parent8c3ae8e7f2e91f9c5b2dc909b447d21fb3e5f539 (diff)
patches/intr_lock.diff: Lock the kernel on interruptdebian/0_20191130-6
-rw-r--r--debian/changelog6
-rw-r--r--debian/patches/ahcisata-atapi.diff2
-rw-r--r--debian/patches/intr_lock.diff53
-rw-r--r--debian/patches/print-error.diff67
-rw-r--r--debian/patches/series1
5 files changed, 129 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 4eead6d4..c11986bd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+rumpkernel (0~20191130-6) unreleased; urgency=medium
+
+ * patches/intr_lock.diff: Lock the kernel on interrupt.
+
+ -- Samuel Thibault <sthibault@debian.org> Sun, 22 Nov 2020 18:46:53 +0000
+
rumpkernel (0~20191130-5) unreleased; urgency=medium
* patches/ahcisata-atapi.diff: Add ATAPI support on top of AHCI.
diff --git a/debian/patches/ahcisata-atapi.diff b/debian/patches/ahcisata-atapi.diff
index 5208a791..5450aa59 100644
--- a/debian/patches/ahcisata-atapi.diff
+++ b/debian/patches/ahcisata-atapi.diff
@@ -1,3 +1,5 @@
+TODO: merge with ahcisata-rump.diff?
+
Index: rumpkernel/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/AHCISATA.ioconf
===================================================================
--- rumpkernel.orig/buildrump.sh/src/sys/rump/dev/lib/libpci_ahcisata/AHCISATA.ioconf
diff --git a/debian/patches/intr_lock.diff b/debian/patches/intr_lock.diff
new file mode 100644
index 00000000..db718a88
--- /dev/null
+++ b/debian/patches/intr_lock.diff
@@ -0,0 +1,53 @@
+TODO: submit upstream: intr handlers such as rumpns_scsipi_done seem to assume
+that klock is to be locked before entering the interrupt handler.
+
+Index: rumpkernel/pci-userspace/src-gnu/pci_user-gnu.c
+===================================================================
+--- rumpkernel.orig/pci-userspace/src-gnu/pci_user-gnu.c
++++ rumpkernel/pci-userspace/src-gnu/pci_user-gnu.c
+@@ -344,9 +344,9 @@ intrthread(void *arg)
+ }
+
+ MACH_PRINT("k_handle...");
+- rumpuser_component_schedule(NULL);
++ rumpuser_component_klock(1);
+ irq->handler(irq->data);
+- rumpuser_component_unschedule();
++ rumpuser_component_kunlock(1);
+ MACH_PRINT("k_done\n");
+
+ device_intr_ack (irq_dev, irq->irqport, MACH_MSG_TYPE_MAKE_SEND);
+Index: rumpkernel/buildrump.sh/src/lib/librumpuser/rumpuser_component.c
+===================================================================
+--- rumpkernel.orig/buildrump.sh/src/lib/librumpuser/rumpuser_component.c
++++ rumpkernel/buildrump.sh/src/lib/librumpuser/rumpuser_component.c
+@@ -62,6 +62,17 @@ rumpuser_component_schedule(void *cookie
+ }
+
+ void
++rumpuser_component_klock(int nlock)
++{
++ rump_user_schedule(nlock, NULL);
++}
++void
++rumpuser_component_kunlock(int nlock)
++{
++ rump_user_unschedule(nlock, NULL, NULL);
++}
++
++void
+ rumpuser_component_kthread(void)
+ {
+
+Index: rumpkernel/buildrump.sh/src/lib/librumpuser/rumpuser_component.h
+===================================================================
+--- rumpkernel.orig/buildrump.sh/src/lib/librumpuser/rumpuser_component.h
++++ rumpkernel/buildrump.sh/src/lib/librumpuser/rumpuser_component.h
+@@ -37,4 +37,7 @@ struct lwp *rumpuser_component_curlwp(vo
+ void rumpuser_component_switchlwp(struct lwp *);
+ void rumpuser_component_kthread_release(void);
+
++void rumpuser_component_klock(int nlock);
++void rumpuser_component_kunlock(int nlock);
++
+ #endif /* _RUMP_RUMPUSER_COMPONENT_H_ */
diff --git a/debian/patches/print-error.diff b/debian/patches/print-error.diff
index 98b36da3..1c30afe5 100644
--- a/debian/patches/print-error.diff
+++ b/debian/patches/print-error.diff
@@ -1,3 +1,5 @@
+TODO: should probably go upstream
+
Index: rumpkernel/buildrump.sh/src/sys/rump/include/rump-sys/kern.h
===================================================================
--- rumpkernel.orig/buildrump.sh/src/sys/rump/include/rump-sys/kern.h
@@ -11,3 +13,68 @@ Index: rumpkernel/buildrump.sh/src/sys/rump/include/rump-sys/kern.h
} while (/*CONSTCOND*/0)
#define RUMPMEM_UNLIMITED ((unsigned long)-1)
+Index: rumpkernel/buildrump.sh/src/sys/kern/subr_prf.c
+===================================================================
+--- rumpkernel.orig/buildrump.sh/src/sys/kern/subr_prf.c
++++ rumpkernel/buildrump.sh/src/sys/kern/subr_prf.c
+@@ -339,6 +339,7 @@ vpanic(const char *fmt, va_list ap)
+ #ifdef DDB
+ db_panic();
+ #endif
++ rumpuser_abort();
+ cpu_reboot(bootopt, NULL);
+ }
+
+Index: rumpkernel/buildrump.sh/src/lib/librumpuser/rumpuser.c
+===================================================================
+--- rumpkernel.orig/buildrump.sh/src/lib/librumpuser/rumpuser.c
++++ rumpkernel/buildrump.sh/src/lib/librumpuser/rumpuser.c
+@@ -50,6 +50,7 @@ __RCSID("$NetBSD: rumpuser.c,v 1.67 2015
+ #include <string.h>
+ #include <time.h>
+ #include <unistd.h>
++#include <execinfo.h>
+
+ #include <rump/rumpuser.h>
+
+@@ -237,6 +238,27 @@ rumpuser_exit(int rv)
+ exit(rv);
+ }
+
++__dead void
++rumpuser_abort(void)
++{
++ const size_t size = 128;
++ const size_t skip = 1;
++ int nptrs;
++ void *buffer[size];
++
++ nptrs = backtrace(buffer, size);
++ if (nptrs > skip) {
++ char **syms = backtrace_symbols(&buffer[skip], nptrs - skip);
++ size_t i;
++
++ for (i = skip; i < nptrs; i++)
++ fprintf(stderr,"%p: %s\n", buffer[i], syms[i - skip]);
++ fflush(stderr);
++ }
++
++ abort();
++}
++
+ void
+ rumpuser_seterrno(int error)
+ {
+Index: rumpkernel/buildrump.sh/src/sys/rump/include/rump/rumpuser.h
+===================================================================
+--- rumpkernel.orig/buildrump.sh/src/sys/rump/include/rump/rumpuser.h
++++ rumpkernel/buildrump.sh/src/sys/rump/include/rump/rumpuser.h
+@@ -151,6 +151,8 @@ int rumpuser_kill(int64_t, int);
+ #define RUMPUSER_PANIC (-1)
+ void rumpuser_exit(int) __dead;
+
++void rumpuser_abort(void) __dead;
++
+ /*
+ * console output
+ */
diff --git a/debian/patches/series b/debian/patches/series
index a5accbb0..20e8c2a4 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -10,3 +10,4 @@ rumpuser-rng-debug.diff
machirqdev.diff
ahcisata-atapi.diff
print-error.diff
+intr_lock.diff