summaryrefslogtreecommitdiff
path: root/open_issues
diff options
context:
space:
mode:
Diffstat (limited to 'open_issues')
-rw-r--r--open_issues/crash_server.mdwn152
-rw-r--r--open_issues/device_drivers_and_io_systems.mdwn24
-rw-r--r--open_issues/time.mdwn55
-rw-r--r--open_issues/user-space_device_drivers.mdwn55
-rw-r--r--open_issues/xen_crash_copy-size_le_page_size.mdwn65
5 files changed, 348 insertions, 3 deletions
diff --git a/open_issues/crash_server.mdwn b/open_issues/crash_server.mdwn
new file mode 100644
index 00000000..71f495cc
--- /dev/null
+++ b/open_issues/crash_server.mdwn
@@ -0,0 +1,152 @@
+[[!meta copyright="Copyright © 2009 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+[[!tag open_issue_hurd]]
+
+Given an `a.out` executable that only does `raise (SIGABRT)`, invoking that
+one...
+
+ * ... against `crash-dump-core` will...
+
+ * ... not overwrite existing `core` files.
+
+ Is this reasonable? Linux does overwrite them, for example.
+
+ * ... show big variances in running-time behavior:
+
+ $ TIMEFORMAT='real %R user %U system %S'
+ $ rm -f core; time env CRASHSERVER=/servers/crash-dump-core ./a.out; ls -l core
+ Aborted (core dumped)
+ real 1.350 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 21:59 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-dump-core ./a.out; ls -l core
+ Aborted (core dumped)
+ real 22.771 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 21:59 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-dump-core ./a.out; ls -l core
+ Aborted (core dumped)
+ real 1.367 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:00 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-dump-core ./a.out; ls -l core
+ Aborted (core dumped)
+ real 5.789 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:00 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-dump-core ./a.out; ls -l core
+ Aborted (core dumped)
+ real 22.664 user 0.010 system 0.000
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:01 core
+
+ * ... produce a huge `core` file:
+
+ $ du -hs core
+ 17M core
+
+ On Linux, the `core` file occupies 76 KiB of disk space, which seems
+ much more reasonable.
+
+ * ... produce an invalid `core` file:
+
+ $ gdb a.out core
+ warning: core file may not match specified executable file.
+ [New Thread 76651]
+
+ warning: Wrong size fpregset in core file.
+ Reading symbols from /lib/libc.so.0.3...[...]
+ Core was generated by `./a.out'.
+ Program terminated with signal 6, Aborted.
+
+ warning: Wrong size fpregset in core file.
+ #0 0x00000000 in ?? ()
+ (gdb) bt
+ #0 0x00000000 in ?? ()
+ Cannot access memory at address 0x17
+
+ [[!tag open_issue_gdb]] Probably the `crash` server code and [[GDB]] are
+ out of sync.
+
+ * ... against `crash-suspend` will...
+
+ * ... not work at all:
+
+ $ CRASHSERVER=/servers/crash-suspend ./a.out
+ $ [returns to the shell and doesn't suspended]
+
+ * ... show big variances in running-time behavior:
+
+ $ TIMEFORMAT='real %R user %U system %S'
+ $ rm -f core; time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted (core dumped)
+ real 1.381 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:04 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted (core dumped)
+ real 1.332 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:04 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted (core dumped)
+ real 21.228 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:04 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted (core dumped)
+ real 1.323 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:05 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted (core dumped)
+ real 22.279 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:05 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted (core dumped)
+ real 1.362 user 0.000 system 0.000
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:08 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted (core dumped)
+ real 21.110 user 0.000 system 0.000
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:08 core
+ $ rm -f core; time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted (core dumped)
+ real 1.350 user 0.000 system 0.020
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:08 core
+
+ * ... can reliably crash GNU Mach:
+
+ This happens if a `core` file is already present (and won't get
+ overwritten; see above). I reproduced this three times.
+
+ $ TIMEFORMAT='real %R user %U system %S'
+ $ time env CRASHSERVER=/servers/crash-suspend ./a.out; ls -l core
+ Aborted
+ real 2.856 user 0.000 system 0.010
+ -rw------- 1 tschwinge tschwinge 17031168 Jul 7 22:08 core
+
+ panic: zalloc: zone kalloc.8192 exhausted
+ Kernel Breakpoint trap, eip 0x20020a77
+ Stopped at 0x20020a76: int $3
+ db> trace
+ 0x20020a76(2006aba8,4d0f7e9c,200209b0,0,0)
+ 0x20020a4d(2006b094,2006ae40,2000,20016803,4a5f4114)
+ 0x2002bca5(49a03564,1,0,9,1000)
+ 0x20022f4c(2000,4a5f45d4,4a84879c,49a46564,4ac43e78)
+ 0x20021e65(4ac43e78,4a5f45d4,4a5f4114,0,0)
+ 0x2005309d(2106ba9c,3,38,28,1783)
+ Bad frame pointer: 0x2106ba78
+
+ $ addr2line -i -f -e /boot/gnumach-xen 0x20020a76 0x20020a4d 0x2002bca5 0x20022f4c 0x20021e65 0x2005309d
+ Debugger
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/kern/debug.c:105
+ panic
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/kern/debug.c:148
+ zalloc
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/kern/zalloc.c:470
+ kalloc
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/kern/kalloc.c:185
+ ipc_kobject_server
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/kern/ipc_kobject.c:76
+ mach_msg_trap
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/ipc/mach_msg.c:1367
diff --git a/open_issues/device_drivers_and_io_systems.mdwn b/open_issues/device_drivers_and_io_systems.mdwn
index 57a96cd0..f84ddce8 100644
--- a/open_issues/device_drivers_and_io_systems.mdwn
+++ b/open_issues/device_drivers_and_io_systems.mdwn
@@ -15,6 +15,8 @@ in general.
Also see [[user-space device drivers]].
+[[!toc levels=2]]
+
# Documentation
@@ -63,7 +65,27 @@ Also see [[user-space device drivers]].
2004, Joshua Levasseur, Volkmar Uhlig, Jan Stoess, Stefan Götz
-# Projects
+# External Projects
* [Building Linux Device Drivers on
FreeBSD](http://info.iet.unipi.it/~luigi/FreeBSD/linux_bsd_kld.html)
+
+ * [Project UDI](http://www.projectudi.org/), a multi-company effort to define
+ a Uniform Driver Interface
+
+ * [The Free Software Movement and
+ UDI](http://www.gnu.org/philosophy/udi.html)
+
+ * [OSKit](http://www.cs.utah.edu/flux/oskit/)
+
+ * [Unofficial OSKit source](http://www.nongnu.org/oskit/) on Savannah
+
+ * [[microkernel/Mach]]-like
+
+ It might be possible to integrate these systems' device drivers, as they're
+ expected to mostly be using the same interfaces as the current in-kernel
+ Mach drivers are.
+
+ * OSF Mach
+
+ * Darwin
diff --git a/open_issues/time.mdwn b/open_issues/time.mdwn
new file mode 100644
index 00000000..eda5b635
--- /dev/null
+++ b/open_issues/time.mdwn
@@ -0,0 +1,55 @@
+[[!meta copyright="Copyright © 2009 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+[[!tag open_issue_porting]]
+
+Neither the `time` executable from the GNU time package work completely
+correctly, nor does the GNU Bash built-in one.
+
+ tschwinge@flubber:~ $ \time sleep 2
+ 0.00user 0.00system 9:38:00elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
+ 0inputs+0outputs (0major+0minor)pagefaults 0swaps
+ tschwinge@flubber:~ $ \time sleep 4
+ 0.00user 0.00system 18:50:25elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
+ 0inputs+0outputs (0major+0minor)pagefaults 0swaps
+ tschwinge@flubber:~ $ \time sleep 6
+ 0.00user 0.00system 28:00:53elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
+ 0inputs+0outputs (0major+0minor)pagefaults 0swaps
+ tschwinge@flubber:~ $ time sleep 2
+
+ real 0m2.093s
+ user 0m0.000s
+ sys 0m0.011s
+ tschwinge@flubber:~ $ time sleep 4
+
+ real 0m4.083s
+ user 0m0.000s
+ sys 0m0.010s
+ tschwinge@flubber:~ $ time sleep 6
+
+ real 0m6.164s
+ user 0m0.000s
+ sys 0m0.010s
+
+GNU time's *elapsed* value is off by some factor.
+
+ $ \time factor 1111111111111111111
+ 1111111111111111111: 1111111111111111111
+ 0.00user 0.00system 52:39:24elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
+ 0inputs+0outputs (0major+0minor)pagefaults 0swaps
+ $ time factor 1111111111111111111
+ 1111111111111111111: 1111111111111111111
+
+ real 0m11.424s
+ user 0m0.000s
+ sys 0m0.010s
+
+As above; also here all the running time should be attriuted to *user* time.
+This is probably a [[!taglink open_issue_gnumach]].
diff --git a/open_issues/user-space_device_drivers.mdwn b/open_issues/user-space_device_drivers.mdwn
index 154a525c..43795705 100644
--- a/open_issues/user-space_device_drivers.mdwn
+++ b/open_issues/user-space_device_drivers.mdwn
@@ -14,6 +14,57 @@ This is a collection of resources concerning *user-space device drivers*.
Also see [[device drivers and IO systems]].
+[[!toc levels=2]]
+
+
+# Issues
+
+## IRQs
+
+ * Can be modeled using [[RPC]]s.
+
+ * Security considerations: IRQ sharing.
+
+ * *Omega0* paper defines an interface.
+
+## DMA
+
+ * Security considerations.
+
+ * I/O MMU.
+
+## I/O Ports
+
+ * Security considerations.
+
+## PCI and other buses
+
+ * Security considerations: sharing.
+
+## Latency of doing RPCs
+
+ * [[GNU Mach|microkernel/mach/gnumach]] is said to have a high overhead when
+ doing RPC calls.
+
+
+# Plan
+
+ * Examine what other systems are doing.
+
+ * L4
+
+ * Hurd on L4: deva, fabrica
+
+ * Minix 3
+
+ * Start with a simple driver and implement the needed infrastructure (see
+ *Issues* above) as needed.
+
+ * <http://savannah.nongnu.org/projects/user-drivers/>
+
+ Some (unfinished?) code written by Robert Millan in 2003: PC keyboard
+ and parallel port drivers, using `libtrivfs`.
+
# Documentation
@@ -92,8 +143,8 @@ Also see [[device drivers and IO systems]].
Ganapathy, Arini Balakrishnan, Michael M. Swift, Somesh Jha
-# Projects
+# External Projects
* <http://ertos.nicta.com.au/research/drivers/uldd/>
- * <http://savannah.nongnu.org/projects/user-drivers>
+ * <http://gelato.unsw.edu.au/IA64wiki/UserLevelDrivers>
diff --git a/open_issues/xen_crash_copy-size_le_page_size.mdwn b/open_issues/xen_crash_copy-size_le_page_size.mdwn
new file mode 100644
index 00000000..09287274
--- /dev/null
+++ b/open_issues/xen_crash_copy-size_le_page_size.mdwn
@@ -0,0 +1,65 @@
+[[!meta copyright="Copyright © 2009 Free Software Foundation, Inc."]]
+
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+License|/fdl]]."]]"""]]
+
+[[!tag open_issue_gnumach]]
+
+`/dev/hd2` is 2 GiB in size (backed by LVM), unformatted.
+
+ # mkfs.ext2 -o hurd /dev/hd2
+ mke2fs 1.41.7 (29-June-2009)
+ hd2 count 1
+ re-open, hd2 count 2
+ ext2fs_check_if_mount: Can't check if filesystem is mounted due to missing mtab file while determining whether /dev/hd2 is mounted.
+ re-open, hd2 count 3
+ re-open, hd2 count 4
+ re-open, hd2 count 5
+ Filesystem label=
+ OS type: Hurd
+ Block size=4096 (log=2)
+ Fragment size=4096 (log=2)
+ 131072 inodes, 524288 blocks
+ 26214 blocks (5.00%) reserved for the super user
+ First data block=0
+ Maximum filesystem blocks=536870912
+ 16 block groups
+ 32768 blocks per group, 32768 fragments per group
+ 8192 inodes per group
+ Superblock backups stored on blocks:
+ 32768, 98304, 163840, 229376, 294912
+
+ Assertion `copy->size <= PAGE_SIZE' failed in file "../gnumach-1-branch-Xen-branch/xen/block.c", line 536
+ Kernel Breakpoint trap, eip 0x20020a77
+ Stopped at 0x20020a76: int $3
+ db> trace
+ 0x20020a76(2006abc1,2006ba03,2006782c,218,2e2be8d4)
+ 0x20020ace(2006ba03,2006782c,218,2e3629a0,32000)
+ 0x2003e9d5(2de04764,2e2be0b8,12,0,3fff80)
+ 0x200476e6(2de5ad54,2e2db010,2e30a9a0,2de3a854,2de5ad44)
+ 0x20021ed4(2de5ad44,2e2bb2e0,2e2bb2a0,0,0)
+ 0x2005309d(129b8f0,3,38,28,e)
+ 0x20006838(129b8f0,3,38,28,e)
+ >>>>> user space <<<<<
+
+
+ $ addr2line -i -f -e /boot/gnumach-xen 0x20020a76 0x20020ace 0x2003e9d5 0x200476e6 0x20021ed4 0x2005309d 0x20006838
+ Debugger
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/kern/debug.c:105
+ Assert
+ ??:0
+ device_write
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/xen/block.c:537
+ _Xdevice_write
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/device/device.server.c:253
+ ipc_kobject_server
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/kern/ipc_kobject.c:201
+ mach_msg_trap
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/ipc/mach_msg.c:1367
+ mach_call_call
+ /home/tschwinge/tmp/gnumach/gnumach-1-branch-Xen-branch.build/../gnumach-1-branch-Xen-branch/i386/i386/locore.S:1083