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

Commit 44bf4cea authored by Nigel Cunningham's avatar Nigel Cunningham Committed by Linus Torvalds
Browse files

x86: PM_TRACE support



Signed-off-by: default avatarNigel Cunningham <nigel@nigel.suspend2.net>
Cc: Randy Dunlap <rdunlap@xenotime.net>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Pavel Machek <pavel@ucw.cz>
Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 9ef231a4
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -54,6 +54,13 @@ SECTIONS

  RODATA

  . = ALIGN(4);
  .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {
  	__tracedata_start = .;
	*(.tracedata)
  	__tracedata_end = .;
  }

  . = ALIGN(PAGE_SIZE);        /* Align data segment to page size boundary */
				/* Data */
  .data : AT(ADDR(.data) - LOAD_OFFSET) {
+4 −1
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ void set_trace_device(struct device *dev)
{
	dev_hash_value = hash_string(DEVSEED, dev->bus_id, DEVHASH);
}
EXPORT_SYMBOL(set_trace_device);

/*
 * We could just take the "tracedata" index into the .tracedata
@@ -162,6 +163,7 @@ void generate_resume_trace(void *tracedata, unsigned int user)
	file_hash_value = hash_string(lineno, file, FILEHASH);
	set_magic_time(user_hash_value, file_hash_value, dev_hash_value);
}
EXPORT_SYMBOL(generate_resume_trace);

extern char __tracedata_start, __tracedata_end;
static int show_file_hash(unsigned int value)
@@ -170,7 +172,8 @@ static int show_file_hash(unsigned int value)
	char *tracedata;

	match = 0;
	for (tracedata = &__tracedata_start ; tracedata < &__tracedata_end ; tracedata += 6) {
	for (tracedata = &__tracedata_start ; tracedata < &__tracedata_end ;
			tracedata += 2 + sizeof(unsigned long)) {
		unsigned short lineno = *(unsigned short *)tracedata;
		const char *file = *(const char **)(tracedata + 2);
		unsigned int hash = hash_string(lineno, file, FILEHASH);
+13 −0
Original line number Diff line number Diff line
#define TRACE_RESUME(user) do {					\
	if (pm_trace_enabled) {					\
		void *tracedata;				\
		asm volatile("movl $1f,%0\n"			\
			".section .tracedata,\"a\"\n"		\
			"1:\t.word %c1\n"			\
			"\t.long %c2\n"				\
			".previous"				\
			:"=r" (tracedata)			\
			: "i" (__LINE__), "i" (__FILE__));	\
		generate_resume_trace(tracedata, user);		\
	}							\
} while (0)
+13 −0
Original line number Diff line number Diff line
#define TRACE_RESUME(user) do {					\
	if (pm_trace_enabled) {					\
		void *tracedata;				\
		asm volatile("movq $1f,%0\n"			\
			".section .tracedata,\"a\"\n"		\
			"1:\t.word %c1\n"			\
			"\t.quad %c2\n"				\
			".previous"				\
			:"=r" (tracedata)			\
			: "i" (__LINE__), "i" (__FILE__));	\
		generate_resume_trace(tracedata, user);		\
	}							\
} while (0)
+5 −14
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
#define RESUME_TRACE_H

#ifdef CONFIG_PM_TRACE
#include <asm/resume-trace.h>

extern int pm_trace_enabled;

@@ -9,19 +10,9 @@ struct device;
extern void set_trace_device(struct device *);
extern void generate_resume_trace(void *tracedata, unsigned int user);

#define TRACE_DEVICE(dev) set_trace_device(dev)
#define TRACE_RESUME(user) do {					\
	if (pm_trace_enabled) {					\
		void *tracedata;				\
		asm volatile("movl $1f,%0\n"			\
			".section .tracedata,\"a\"\n"		\
			"1:\t.word %c1\n"			\
			"\t.long %c2\n"				\
			".previous"				\
			:"=r" (tracedata)			\
			: "i" (__LINE__), "i" (__FILE__));	\
		generate_resume_trace(tracedata, user);		\
	}							\
#define TRACE_DEVICE(dev) do { \
	if (pm_trace_enabled) \
		set_trace_device(dev); \
	} while(0)

#else
Loading