summaryrefslogtreecommitdiff
path: root/debian/patches/intr_lock.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/intr_lock.diff')
-rw-r--r--debian/patches/intr_lock.diff53
1 files changed, 53 insertions, 0 deletions
diff --git a/debian/patches/intr_lock.diff b/debian/patches/intr_lock.diff
new file mode 100644
index 000000000..db718a886
--- /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_ */