From: Chris Wright <chrisw@sous-sol.org>
To: linux-kernel@vger.kernel.org
Cc: virtualization@lists.osdl.org, xen-devel@lists.xensource.com,
Ian Pratt <ian.pratt@xensource.com>,
Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Subject: [RFC PATCH 16/35] subarch support for interrupt and exception gates
Date: Tue, 09 May 2006 00:00:16 -0700 [thread overview]
Message-ID: <20060509085154.441800000@sous-sol.org> (raw)
In-Reply-To: 20060509084945.373541000@sous-sol.org
[-- Attachment #1: i386-idt --]
[-- Type: text/plain, Size: 5213 bytes --]
Abstract the code that sets up interrupt and exception gates, and
add a separate subarch implementation for Xen.
Signed-off-by: Ian Pratt <ian.pratt@xensource.com>
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
arch/i386/kernel/traps.c | 49 ---------------------------
include/asm-i386/mach-default/mach_idt.h | 52 +++++++++++++++++++++++++++++
include/asm-i386/mach-xen/mach_idt.h | 50 +++++++++++++++++++++++++++
include/asm-i386/mach-xen/setup_arch_pre.h | 2 +
4 files changed, 105 insertions(+), 48 deletions(-)
--- linus-2.6.orig/arch/i386/kernel/traps.c
+++ linus-2.6/arch/i386/kernel/traps.c
@@ -1086,54 +1086,7 @@ void __init trap_init_f00f_bug(void)
}
#endif
-#define _set_gate(gate_addr,type,dpl,addr,seg) \
-do { \
- int __d0, __d1; \
- __asm__ __volatile__ ("movw %%dx,%%ax\n\t" \
- "movw %4,%%dx\n\t" \
- "movl %%eax,%0\n\t" \
- "movl %%edx,%1" \
- :"=m" (*((long *) (gate_addr))), \
- "=m" (*(1+(long *) (gate_addr))), "=&a" (__d0), "=&d" (__d1) \
- :"i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
- "3" ((char *) (addr)),"2" ((seg) << 16)); \
-} while (0)
-
-
-/*
- * This needs to use 'idt_table' rather than 'idt', and
- * thus use the _nonmapped_ version of the IDT, as the
- * Pentium F0 0F bugfix can have resulted in the mapped
- * IDT being write-protected.
- */
-void set_intr_gate(unsigned int n, void *addr)
-{
- _set_gate(idt_table+n,14,0,addr,__KERNEL_CS);
-}
-
-/*
- * This routine sets up an interrupt gate at directory privilege level 3.
- */
-static inline void set_system_intr_gate(unsigned int n, void *addr)
-{
- _set_gate(idt_table+n, 14, 3, addr, __KERNEL_CS);
-}
-
-static void __init set_trap_gate(unsigned int n, void *addr)
-{
- _set_gate(idt_table+n,15,0,addr,__KERNEL_CS);
-}
-
-static void __init set_system_gate(unsigned int n, void *addr)
-{
- _set_gate(idt_table+n,15,3,addr,__KERNEL_CS);
-}
-
-static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
-{
- _set_gate(idt_table+n,5,0,0,(gdt_entry<<3));
-}
-
+#include <mach_idt.h>
void __init trap_init(void)
{
--- linus-2.6.orig/include/asm-i386/mach-xen/setup_arch_pre.h
+++ linus-2.6/include/asm-i386/mach-xen/setup_arch_pre.h
@@ -5,6 +5,8 @@
struct start_info *xen_start_info;
EXPORT_SYMBOL(xen_start_info);
+struct trap_info xen_trap_table[257];
+
/*
* Point at the empty zero page to start with. We map the real shared_info
* page as soon as fixmap is up and running.
--- /dev/null
+++ linus-2.6/include/asm-i386/mach-default/mach_idt.h
@@ -0,0 +1,52 @@
+#ifndef __ASM_MACH_IDT_H
+#define __ASM_MACH_IDT_H
+
+#define _set_gate(gate_addr,type,dpl,addr,seg) \
+do { \
+ int __d0, __d1; \
+ __asm__ __volatile__ ("movw %%dx,%%ax\n\t" \
+ "movw %4,%%dx\n\t" \
+ "movl %%eax,%0\n\t" \
+ "movl %%edx,%1" \
+ :"=m" (*((long *) (gate_addr))), \
+ "=m" (*(1+(long *) (gate_addr))), "=&a" (__d0), "=&d" (__d1) \
+ :"i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
+ "3" ((char *) (addr)),"2" ((seg) << 16)); \
+} while (0)
+
+
+/*
+ * This needs to use 'idt_table' rather than 'idt', and
+ * thus use the _nonmapped_ version of the IDT, as the
+ * Pentium F0 0F bugfix can have resulted in the mapped
+ * IDT being write-protected.
+ */
+void set_intr_gate(unsigned int n, void *addr)
+{
+ _set_gate(idt_table+n,14,0,addr,__KERNEL_CS);
+}
+
+/*
+ * This routine sets up an interrupt gate at directory privilege level 3.
+ */
+static inline void set_system_intr_gate(unsigned int n, void *addr)
+{
+ _set_gate(idt_table+n, 14, 3, addr, __KERNEL_CS);
+}
+
+static void __init set_trap_gate(unsigned int n, void *addr)
+{
+ _set_gate(idt_table+n,15,0,addr,__KERNEL_CS);
+}
+
+static void __init set_system_gate(unsigned int n, void *addr)
+{
+ _set_gate(idt_table+n,15,3,addr,__KERNEL_CS);
+}
+
+static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
+{
+ _set_gate(idt_table+n,5,0,0,(gdt_entry<<3));
+}
+
+#endif /* __ASM_MACH_IDT_H */
--- /dev/null
+++ linus-2.6/include/asm-i386/mach-xen/mach_idt.h
@@ -0,0 +1,50 @@
+#ifndef __ASM_MACH_IDT_H
+#define __ASM_MACH_IDT_H
+
+static inline void _set_gate(unsigned int vector, uint8_t type, uint8_t dpl,
+ void *addr, uint16_t seg)
+{
+ struct trap_info *t = xen_trap_table;
+
+ BUG_ON(vector > 256);
+
+ while (t->address && t->vector != vector)
+ t++;
+
+ t->vector = vector;
+ t->cs = seg;
+ TI_SET_DPL(t, dpl);
+ if (type == 14 || vector == 7)
+ TI_SET_IF(t, 1);
+ t->address = (unsigned long)addr;
+}
+
+void set_intr_gate(unsigned int n, void *addr)
+{
+ _set_gate(n, 14, 0, addr, __KERNEL_CS);
+}
+
+/*
+ * This routine sets up an interrupt gate at directory privilege level 3.
+ */
+static inline void set_system_intr_gate(unsigned int n, void *addr)
+{
+ _set_gate(n, 14, 3, addr, __KERNEL_CS);
+}
+
+static void __init set_trap_gate(unsigned int n, void *addr)
+{
+ _set_gate(n, 15, 0, addr, __KERNEL_CS);
+}
+
+static void __init set_system_gate(unsigned int n, void *addr)
+{
+ _set_gate(n, 15, 3, addr, __KERNEL_CS);
+}
+
+static void __init set_task_gate(unsigned int n, unsigned int gdt_entry)
+{
+ /* _set_gate(n, 5, 0, 0, (gdt_entry<<3)); */
+}
+
+#endif /* __ASM_MACH_IDT_H */
--
next prev parent reply other threads:[~2006-05-09 8:50 UTC|newest]
Thread overview: 185+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-09 8:49 [RFC PATCH 00/35] Xen i386 paravirtualization support Chris Wright
2006-05-09 7:00 ` [RFC PATCH 01/35] Add XEN config options and disable unsupported config options Chris Wright
2006-05-09 10:05 ` Adrian Bunk
2006-05-09 11:06 ` Ed Tomlinson
2006-05-09 12:45 ` Christian Limpach
2006-05-09 23:23 ` Chris Wright
2006-05-09 14:47 ` Daniel Walker
2006-05-09 15:16 ` Christian Limpach
2006-05-09 16:00 ` Daniel Walker
2006-05-09 23:25 ` Chris Wright
2006-05-09 16:42 ` Andi Kleen
2006-05-10 15:36 ` [Xen-devel] " Alan Cox
2006-05-10 15:48 ` Christian Limpach
2006-05-09 7:00 ` [RFC PATCH 02/35] Makefile support to build Xen subarch Chris Wright
2006-05-09 7:00 ` [RFC PATCH 03/35] Add Xen interface header files Chris Wright
2006-05-09 14:49 ` Martin J. Bligh
2006-05-09 17:54 ` Christian Limpach
2006-05-09 15:15 ` Christoph Hellwig
2006-05-09 19:35 ` Hollis Blanchard
2006-05-09 19:48 ` [Xen-devel] " Anthony Liguori
2006-05-09 22:34 ` Christoph Hellwig
2006-05-09 22:36 ` Ingo Oeser
2006-05-09 16:06 ` Daniel Walker
2006-05-09 16:18 ` Christian Limpach
2006-05-09 16:29 ` Daniel Walker
2006-05-09 7:00 ` [RFC PATCH 04/35] Hypervisor " Chris Wright
2006-05-09 22:43 ` Ingo Oeser
2006-05-09 23:01 ` Chris Wright
2006-05-09 7:00 ` [RFC PATCH 05/35] Add sync bitops Chris Wright
2006-05-09 22:56 ` Christoph Lameter
2006-05-09 23:04 ` Andi Kleen
2006-05-09 23:07 ` Chris Wright
2006-05-09 7:00 ` [RFC PATCH 06/35] Add vmlinuz build target Chris Wright
2006-05-09 7:00 ` [RFC PATCH 07/35] Make LOAD_OFFSET defined by subarch Chris Wright
2006-05-10 23:28 ` Zachary Amsden
2006-05-11 7:47 ` [Xen-devel] " Gerd Hoffmann
2006-05-11 8:51 ` Chris Wright
2006-05-11 9:06 ` Gerd Hoffmann
2006-05-11 16:43 ` Christian Limpach
2006-05-12 6:47 ` [Xen-devel] " Jan Beulich
2006-05-12 8:38 ` Christian Limpach
2006-05-09 7:00 ` [RFC PATCH 08/35] Add Xen-specific memory management definitions Chris Wright
2006-05-09 14:49 ` Martin J. Bligh
2006-05-09 17:44 ` Christian Limpach
2006-05-15 6:44 ` Pete Zaitcev
2006-05-15 7:04 ` Keir Fraser
2006-05-15 8:19 ` Christian Limpach
2006-05-17 16:06 ` Pete Zaitcev
2006-05-18 7:42 ` Chris Wright
2006-05-09 7:00 ` [RFC PATCH 09/35] Change __FIXADDR_TOP to leave room for the hypervisor Chris Wright
2006-05-09 7:00 ` [RFC PATCH 10/35] Add a new head.S start-of-day file for booting on Xen Chris Wright
2006-05-09 7:00 ` [RFC PATCH 11/35] Add support for Xen to entry.S Chris Wright
2006-05-09 16:51 ` Andi Kleen
2006-05-09 7:00 ` [RFC PATCH 12/35] Add start-of-day setup hooks to subarch Chris Wright
2006-05-09 7:00 ` [RFC PATCH 13/35] Support loading an initrd when running on Xen Chris Wright
2006-05-09 7:00 ` [RFC PATCH 14/35] Subarch support for CPUID instruction Chris Wright
2006-05-09 7:00 ` [RFC PATCH 15/35] subarch support for controlling interrupt delivery Chris Wright
2006-05-09 14:49 ` Martin J. Bligh
2006-05-09 14:55 ` Nick Piggin
2006-05-09 15:51 ` Christian Limpach
2006-05-09 16:02 ` Martin J. Bligh
2006-05-09 16:07 ` Andi Kleen
2006-05-09 16:29 ` Christian Limpach
2006-05-09 16:31 ` Andi Kleen
2006-05-09 20:42 ` Christian Limpach
2006-05-09 21:56 ` Andi Kleen
2006-05-10 10:35 ` Christian Limpach
2006-05-10 10:54 ` Andi Kleen
2006-05-09 21:56 ` Chris Wright
2006-05-09 7:00 ` Chris Wright [this message]
2006-05-09 11:09 ` [RFC PATCH 16/35] subarch support for interrupt and exception gates Andi Kleen
2006-05-09 12:55 ` Christian Limpach
2006-05-13 12:27 ` Andrew Morton
2006-05-15 18:30 ` Chris Wright
2006-05-09 7:00 ` [RFC PATCH 17/35] Segment register changes for Xen Chris Wright
2006-05-09 7:16 ` Pavel Machek
2006-05-10 20:09 ` Andi Kleen
2006-05-10 20:30 ` Pavel Machek
2006-05-11 10:34 ` Avi Kivity
2006-05-11 10:41 ` Andi Kleen
2006-05-12 0:28 ` [Xen-devel] " Rusty Russell
2006-05-09 16:44 ` Andi Kleen
2006-05-18 20:20 ` Zachary Amsden
2006-05-18 20:41 ` Keir Fraser
2006-05-18 21:26 ` Chris Wright
2006-05-09 7:00 ` [RFC PATCH 18/35] Support gdt/idt/ldt handling on Xen Chris Wright
2006-05-09 7:21 ` Pavel Machek
2006-05-10 20:23 ` Andi Kleen
2006-05-09 14:49 ` Martin J. Bligh
2006-05-09 18:14 ` Christian Limpach
2006-05-09 18:21 ` Martin Bligh
2006-05-09 7:00 ` [RFC PATCH 19/35] subarch support for control register accesses Chris Wright
2006-05-09 7:00 ` [RFC PATCH 20/35] subarch stack pointer update Chris Wright
2006-05-09 7:00 ` [RFC PATCH 21/35] subarch TLB support Chris Wright
2006-05-09 7:00 ` [RFC PATCH 22/35] subarch suport for idle loop (NO_IDLE_HZ for Xen) Chris Wright
2006-05-09 13:21 ` Andi Kleen
2006-05-09 15:13 ` Christian Limpach
2006-05-09 7:00 ` [RFC PATCH 23/35] Increase x86 interrupt vector range Chris Wright
2006-05-09 7:00 ` [RFC PATCH 24/35] Add support for Xen event channels Chris Wright
2006-05-12 21:41 ` Pavel Machek
2006-05-13 12:27 ` Andrew Morton
2006-05-13 13:02 ` Keir Fraser
2006-05-09 7:00 ` [RFC PATCH 25/35] Add Xen time abstractions Chris Wright
2006-05-09 16:23 ` Daniel Walker
2006-05-09 16:38 ` Christian Limpach
2006-05-09 19:27 ` Adrian Bunk
2006-05-09 21:50 ` Andi Kleen
2006-05-09 23:03 ` Ingo Oeser
2006-05-09 23:09 ` Andi Kleen
2006-05-09 23:13 ` Chris Wright
2006-05-12 21:44 ` Pavel Machek
2006-05-09 7:00 ` [RFC PATCH 26/35] Add Xen subarch reboot support Chris Wright
2006-05-09 17:02 ` Andi Kleen
2006-05-12 21:46 ` Pavel Machek
2006-05-12 21:57 ` Chris Wright
2006-05-09 7:00 ` [RFC PATCH 27/35] Add nosegneg capability to the vsyscall page notes Chris Wright
2006-05-09 7:00 ` [RFC PATCH 28/35] add support for Xen feature queries Chris Wright
2006-05-12 21:56 ` Pavel Machek
2006-05-09 7:00 ` [RFC PATCH 29/35] Add the Xen virtual console driver Chris Wright
2006-05-09 13:26 ` Andi Kleen
2006-05-09 15:03 ` Christian Limpach
2006-05-13 12:27 ` Andrew Morton
2006-05-13 12:51 ` Nick Piggin
2006-05-13 14:29 ` Andrew Morton
2006-05-13 14:43 ` Nick Piggin
2006-05-09 7:00 ` [RFC PATCH 30/35] Add apply_to_page_range() function Chris Wright
2006-05-09 7:00 ` [RFC PATCH 31/35] Add Xen grant table support Chris Wright
2006-05-09 7:00 ` [RFC PATCH 32/35] Add Xen driver utility functions Chris Wright
2006-05-09 19:48 ` Greg KH
2006-05-09 21:50 ` Andi Kleen
2006-05-09 7:00 ` [RFC PATCH 33/35] Add the Xenbus sysfs and virtual device hotplug driver Chris Wright
2006-05-09 16:06 ` Alexey Dobriyan
2006-05-09 16:28 ` Andi Kleen
2006-05-09 19:40 ` Greg KH
2006-05-09 21:53 ` Chris Wright
2006-05-09 22:01 ` Greg KH
2006-05-09 22:50 ` Chris Wright
2006-05-09 23:43 ` Anthony Liguori
2006-05-09 19:49 ` Greg KH
2006-05-09 19:58 ` Chris Wright
2006-05-13 12:28 ` Andrew Morton
2006-05-09 7:00 ` [RFC PATCH 34/35] Add the Xen virtual network device driver Chris Wright
2006-05-09 11:55 ` [Xen-devel] " Herbert Xu
2006-05-09 12:43 ` Christian Limpach
2006-05-09 13:01 ` Herbert Xu
2006-05-09 13:14 ` Andi Kleen
2006-05-09 13:16 ` Christian Limpach
2006-05-09 13:26 ` Herbert Xu
2006-05-09 14:00 ` Christian Limpach
2006-05-09 14:30 ` David Boutcher
2006-05-09 23:35 ` Chris Wright
2006-05-09 11:58 ` Christoph Hellwig
2006-05-09 23:37 ` Chris Wright
2006-05-09 18:56 ` Stephen Hemminger
2006-05-09 23:39 ` Chris Wright
2006-05-09 20:25 ` Stephen Hemminger
2006-05-09 20:26 ` Keir Fraser
2006-05-09 20:39 ` Stephen Hemminger
2006-05-09 20:46 ` Roland Dreier
2006-05-10 18:28 ` Andi Kleen
2006-05-11 0:33 ` Herbert Xu
2006-05-11 7:49 ` Keir Fraser
2006-05-11 8:04 ` Herbert Xu
2006-05-11 9:47 ` Andi Kleen
2006-05-11 16:18 ` Stephen Hemminger
2006-05-11 16:48 ` Rick Jones
2006-05-11 16:55 ` Stephen Hemminger
2006-05-11 17:30 ` Andi Kleen
2006-05-09 20:32 ` Chris Wright
2006-05-09 22:41 ` [Xen-devel] " Herbert Xu
2006-05-09 23:51 ` Chris Wright
2006-05-10 6:36 ` Keir Fraser
2006-05-09 7:00 ` [RFC PATCH 35/35] Add Xen virtual block " Chris Wright
2006-05-09 12:01 ` Christoph Hellwig
2006-05-09 14:49 ` [RFC PATCH 00/35] Xen i386 paravirtualization support Martin J. Bligh
2006-05-09 15:07 ` Christoph Hellwig
2006-05-09 15:12 ` Martin J. Bligh
2006-05-09 15:20 ` Andi Kleen
2006-05-09 15:22 ` Christoph Hellwig
2006-05-09 15:45 ` Pekka Enberg
2006-05-14 1:35 ` Andrew Morton
2006-05-15 21:01 ` Chris Wright
-- strict thread matches above, loose matches on Subject: below --
2006-03-22 6:30 Chris Wright
2006-03-22 6:30 ` [RFC PATCH 16/35] subarch support for interrupt and exception gates Chris Wright
2006-03-22 13:45 ` Andi Kleen
2006-03-22 20:54 ` Chris Wright
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060509085154.441800000@sous-sol.org \
--to=chrisw@sous-sol.org \
--cc=Christian.Limpach@cl.cam.ac.uk \
--cc=ian.pratt@xensource.com \
--cc=linux-kernel@vger.kernel.org \
--cc=virtualization@lists.osdl.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox