Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3c68904fee1459b6d51040864e15d19098eedef7
Commit:     3c68904fee1459b6d51040864e15d19098eedef7
Parent:     2f4aaf53c21e644ba0f581ce62b985d767388c64
Author:     Markus Metzger <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 30 13:31:20 2008 +0100
Committer:  Ingo Molnar <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 13:31:20 2008 +0100

    x86, ptrace: use jiffies for BTS timestamps
    
    Replace sched_clock() with jiffies for BTS timestamps.
    
    Signed-off-by: Markus Metzger <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
---
 arch/x86/kernel/ds.c     |   30 ++++++++++--------------------
 arch/x86/kernel/ptrace.c |    2 +-
 include/asm-x86/ds.h     |    2 +-
 3 files changed, 12 insertions(+), 22 deletions(-)

diff --git a/arch/x86/kernel/ds.c b/arch/x86/kernel/ds.c
index 996a7c4..e7855de 100644
--- a/arch/x86/kernel/ds.c
+++ b/arch/x86/kernel/ds.c
@@ -167,23 +167,13 @@ static inline void set_info_type(char *base, unsigned 
char value)
 {
        (*(unsigned char *)(base + ds_cfg.info_type.offset)) = value;
 }
-/*
- * The info data might overlap with the info type on some architectures.
- * We therefore read and write the exact number of bytes.
- */
-static inline unsigned long long get_info_data(char *base)
+static inline unsigned long get_info_data(char *base)
 {
-       unsigned long long value = 0;
-       memcpy(&value,
-              base + ds_cfg.info_data.offset,
-              ds_cfg.info_data.size);
-       return value;
+       return *(unsigned long *)(base + ds_cfg.info_data.offset);
 }
-static inline void set_info_data(char *base, unsigned long long value)
+static inline void set_info_data(char *base, unsigned long value)
 {
-       memcpy(base + ds_cfg.info_data.offset,
-              &value,
-              ds_cfg.info_data.size);
+       (*(unsigned long *)(base + ds_cfg.info_data.offset)) = value;
 }
 
 
@@ -282,8 +272,8 @@ int ds_read_bts(void *ds, size_t index, struct bts_struct 
*out)
 
        memset(out, 0, sizeof(*out));
        if (get_from_ip(bts) == BTS_ESCAPE_ADDRESS) {
-               out->qualifier         = get_info_type(bts);
-               out->variant.timestamp = get_info_data(bts);
+               out->qualifier       = get_info_type(bts);
+               out->variant.jiffies = get_info_data(bts);
        } else {
                out->qualifier = BTS_BRANCH;
                out->variant.lbr.from_ip = get_from_ip(bts);
@@ -319,7 +309,7 @@ int ds_write_bts(void *ds, const struct bts_struct *in)
        case BTS_TASK_DEPARTS:
                set_from_ip(bts, BTS_ESCAPE_ADDRESS);
                set_info_type(bts, in->qualifier);
-               set_info_data(bts, in->variant.timestamp);
+               set_info_data(bts, in->variant.jiffies);
                break;
 
        default:
@@ -350,7 +340,7 @@ static const struct ds_configuration ds_cfg_netburst = {
        .from_ip = { 0, 4 },
        .to_ip = { 4, 4 },
        .info_type = { 4, 1 },
-       .info_data = { 5, 7 },
+       .info_data = { 8, 4 },
        .debugctl_mask = (1<<2)|(1<<3)
 };
 
@@ -364,7 +354,7 @@ static const struct ds_configuration ds_cfg_pentium_m = {
        .from_ip = { 0, 4 },
        .to_ip = { 4, 4 },
        .info_type = { 4, 1 },
-       .info_data = { 5, 7 },
+       .info_data = { 8, 4 },
        .debugctl_mask = (1<<6)|(1<<7)
 };
 #endif /* _i386_ */
@@ -379,7 +369,7 @@ static const struct ds_configuration ds_cfg_core2 = {
        .from_ip = { 0, 8 },
        .to_ip = { 8, 8 },
        .info_type = { 8, 1 },
-       .info_data = { 9, 7 },
+       .info_data = { 16, 8 },
        .debugctl_mask = (1<<6)|(1<<7)|(1<<9)
 };
 
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index 8d0dd8b..ec86aba 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -616,7 +616,7 @@ void ptrace_bts_take_timestamp(struct task_struct *tsk,
 {
        struct bts_struct rec = {
                .qualifier = qualifier,
-               .variant.timestamp = sched_clock()
+               .variant.jiffies = jiffies
        };
 
        if (ptrace_bts_get_buffer_size(tsk) <= 0)
diff --git a/include/asm-x86/ds.h b/include/asm-x86/ds.h
index edd8467..c9e1538 100644
--- a/include/asm-x86/ds.h
+++ b/include/asm-x86/ds.h
@@ -48,7 +48,7 @@ struct bts_struct {
                } lbr;
                /* BTS_TASK_ARRIVES or
                   BTS_TASK_DEPARTS */
-               unsigned long long timestamp;
+               unsigned long jiffies;
        } variant;
 };
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to