Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c68904f authored by Markus Metzger's avatar Markus Metzger Committed by Ingo Molnar
Browse files

x86, ptrace: use jiffies for BTS timestamps



Replace sched_clock() with jiffies for BTS timestamps.

Signed-off-by: default avatarMarkus Metzger <markus.t.metzger@intel.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 2f4aaf53
Loading
Loading
Loading
Loading
+10 −20
Original line number Diff line number Diff line
@@ -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;
}


@@ -283,7 +273,7 @@ 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->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)
};

+1 −1
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ struct bts_struct {
		} lbr;
		/* BTS_TASK_ARRIVES or
		   BTS_TASK_DEPARTS */
		unsigned long long timestamp;
		unsigned long jiffies;
	} variant;
};