From: Glauber de Oliveira Costa <gcosta@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: akpm@linux-foundation.org, rusty@rustcorp.com.au, ak@suse.de,
mingo@elte.hu, chrisw@sous-sol.org, jeremy@goop.org,
avi@qumranet.com, anthony@codemonkey.ws,
virtualization@lists.linux-foundation.org, lguest@ozlabs.org,
glommer@gmail.com, Glauber de Oliveira Costa <gcosta@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>
Subject: [PATCH 4/25 -v2] Add debugreg/load_rsp native hooks
Date: Fri, 10 Aug 2007 16:12:16 -0300 [thread overview]
Message-ID: <11867731781610-git-send-email-gcosta@redhat.com> (raw)
In-Reply-To: <11867731732274-git-send-email-gcosta@redhat.com>
This patch adds native hooks for debugreg handling functions,
and for the native load_rsp0 function. The later also have its
call sites patched.
Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
arch/x86_64/kernel/process.c | 2 +-
arch/x86_64/kernel/smpboot.c | 2 +-
include/asm-x86_64/processor.h | 71 ++++++++++++++++++++++++++++++++++++----
3 files changed, 66 insertions(+), 9 deletions(-)
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c
index 2842f50..33046f1 100644
--- a/arch/x86_64/kernel/process.c
+++ b/arch/x86_64/kernel/process.c
@@ -595,7 +595,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
/*
* Reload esp0, LDT and the page table pointer:
*/
- tss->rsp0 = next->rsp0;
+ load_rsp0(tss, next);
/*
* Switch DS and ES.
diff --git a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c
index 32f5078..f99ced6 100644
--- a/arch/x86_64/kernel/smpboot.c
+++ b/arch/x86_64/kernel/smpboot.c
@@ -620,7 +620,7 @@ do_rest:
start_rip = setup_trampoline();
init_rsp = c_idle.idle->thread.rsp;
- per_cpu(init_tss,cpu).rsp0 = init_rsp;
+ load_rsp0(&per_cpu(init_tss,cpu), &c_idle.idle->thread);
initial_code = start_secondary;
clear_tsk_thread_flag(c_idle.idle, TIF_FORK);
diff --git a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h
index 1952517..65f689b 100644
--- a/include/asm-x86_64/processor.h
+++ b/include/asm-x86_64/processor.h
@@ -249,6 +249,12 @@ struct thread_struct {
.rsp0 = (unsigned long)&init_stack + sizeof(init_stack) \
}
+static inline void native_load_rsp0(struct tss_struct *tss,
+ struct thread_struct *thread)
+{
+ tss->rsp0 = thread->rsp0;
+}
+
#define INIT_MMAP \
{ &init_mm, 0, 0, NULL, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL }
@@ -264,13 +270,64 @@ struct thread_struct {
set_fs(USER_DS); \
} while(0)
-#define get_debugreg(var, register) \
- __asm__("movq %%db" #register ", %0" \
- :"=r" (var))
-#define set_debugreg(value, register) \
- __asm__("movq %0,%%db" #register \
- : /* no output */ \
- :"r" (value))
+static inline unsigned long native_get_debugreg(int regno)
+{
+ unsigned long val;
+
+ switch (regno) {
+ case 0:
+ asm("movq %%db0, %0" :"=r" (val)); break;
+ case 1:
+ asm("movq %%db1, %0" :"=r" (val)); break;
+ case 2:
+ asm("movq %%db2, %0" :"=r" (val)); break;
+ case 3:
+ asm("movq %%db3, %0" :"=r" (val)); break;
+ case 6:
+ asm("movq %%db6, %0" :"=r" (val)); break;
+ case 7:
+ asm("movq %%db7, %0" :"=r" (val)); break;
+ default:
+ val = 0; /* assign it to keep gcc quiet */
+ WARN_ON(1);
+ }
+ return val;
+}
+
+static inline void native_set_debugreg(unsigned long value, int regno)
+{
+ switch (regno) {
+ case 0:
+ asm("movq %0,%%db0" : /* no output */ :"r" (value));
+ break;
+ case 1:
+ asm("movq %0,%%db1" : /* no output */ :"r" (value));
+ break;
+ case 2:
+ asm("movq %0,%%db2" : /* no output */ :"r" (value));
+ break;
+ case 3:
+ asm("movq %0,%%db3" : /* no output */ :"r" (value));
+ break;
+ case 6:
+ asm("movq %0,%%db6" : /* no output */ :"r" (value));
+ break;
+ case 7:
+ asm("movq %0,%%db7" : /* no output */ :"r" (value));
+ break;
+ default:
+ BUG();
+ }
+}
+
+#ifdef CONFIG_PARAVIRT
+#include <asm/paravirt.h>
+#else
+#define paravirt_enabled() 0
+#define load_rsp0 native_load_rsp0
+#define set_debugreg(val, reg) native_set_debugreg(reg, val)
+#define get_debugreg(var, reg) (var) = native_get_debugreg(reg)
+#endif
struct task_struct;
struct mm_struct;
--
1.4.4.2
next prev parent reply other threads:[~2007-08-10 22:04 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-10 19:12 [PATCH 0/25 -v2] paravirt_ops for x86_64, second round Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 1/25 -v2] header file move Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 2/25 -v2] tlb flushing routines Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 3/25 -v2] irq_flags / halt routines Glauber de Oliveira Costa
2007-08-10 19:12 ` Glauber de Oliveira Costa [this message]
2007-08-10 19:12 ` [PATCH 5/25 -v2] native versions for system.h functions Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 6/25 -v2] add native_apic read and write functions, as well as boot clocks ones Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 7/25 -v2] interrupt related native paravirt functions Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 8/25 -v2] use macro for sti/cli in spinlock definitions Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 9/25 -v2] report ring kernel is running without paravirt Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 10/25 -v2] export math_state_restore Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 11/25 -v2] native versions for set pagetables Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 12/25 -v2] turn msr.h functions into native versions Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 13/25 -v2] add native functions for descriptors handling Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 14/25 -v2] get rid of inline asm for load_cr3 Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 15/25 -v2] introducing paravirt_activate_mm Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 16/25 -v2] turn page operations into native versions Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 17/25 -v2] introduce paravirt_release_pgd() Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 18/25 -v2] turn priviled operations into macros in entry.S Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 19/25 -v2] time-related functions paravirt provisions Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 20/25 -v2] replace syscall_init Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 21/25 -v2] export cpu_gdt_descr Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 22/25 -v2] turn priviled operation into a macro Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 23/25 -v2] provide paravirt patching function Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 24/25 -v2] paravirt hooks for arch initialization Glauber de Oliveira Costa
2007-08-10 19:12 ` [PATCH 25/25 -v2] add paravirtualization support for x86_64 Glauber de Oliveira Costa
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=11867731781610-git-send-email-gcosta@redhat.com \
--to=gcosta@redhat.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=anthony@codemonkey.ws \
--cc=avi@qumranet.com \
--cc=chrisw@sous-sol.org \
--cc=glommer@gmail.com \
--cc=jeremy@goop.org \
--cc=lguest@ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
--cc=rusty@rustcorp.com.au \
--cc=virtualization@lists.linux-foundation.org \
/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