summaryrefslogtreecommitdiff
path: root/debian/patches/40_user-tss.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/40_user-tss.patch')
-rw-r--r--debian/patches/40_user-tss.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/debian/patches/40_user-tss.patch b/debian/patches/40_user-tss.patch
new file mode 100644
index 0000000..b55f361
--- /dev/null
+++ b/debian/patches/40_user-tss.patch
@@ -0,0 +1,43 @@
+#DPATCHLEVEL=0
+
+2005-12-26 Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+ * i386/i386/iopb.c: Include "vm_param.h" for kvtolin().
+ (io_tss_init): Fix address and limit of user TSS.
+
+
+--- i386/i386/iopb.c 2005-05-01 18:04:47.000000000 +0200
++++ i386/i386/iopb.c 2005-12-26 19:50:22.000000000 +0100
+@@ -43,6 +43,7 @@
+ #include "iopb.h"
+ #include "seg.h"
+ #include "gdt.h"
++#include "vm_param.h"
+
+ /*
+ * A set of ports for an IO device.
+@@ -242,8 +243,8 @@ io_tss_init(
+ iopb_tss_t io_tss,
+ boolean_t access_all) /* allow access or not */
+ {
+- vm_offset_t addr = (vm_offset_t) io_tss;
+- vm_size_t size = (char *)&io_tss->barrier - (char *)io_tss;
++ vm_offset_t addr = kvtolin (io_tss);
++ vm_size_t limit = (char *)&io_tss->barrier - (char *)io_tss;
+
+ bzero(&io_tss->tss, sizeof(struct i386_tss));
+ io_tss->tss.io_bit_map_offset
+@@ -252,11 +253,11 @@ io_tss_init(
+ io_bitmap_init(io_tss->bitmap, access_all);
+ io_tss->barrier = ~0;
+ queue_init(&io_tss->io_port_list);
+- io_tss->iopb_desc[0] = ((size-1) & 0xffff)
++ io_tss->iopb_desc[0] = (limit & 0xffff)
+ | ((addr & 0xffff) << 16);
+ io_tss->iopb_desc[1] = ((addr & 0x00ff0000) >> 16)
+ | ((ACC_TSS|ACC_PL_K|ACC_P) << 8)
+- | ((size-1) & 0x000f0000)
++ | (limit & 0x000f0000)
+ | (addr & 0xff000000);
+ }
+