Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.27-rc2 72 lines 1.8 kB view raw
1/* 2 * Debug Store (DS) support 3 * 4 * This provides a low-level interface to the hardware's Debug Store 5 * feature that is used for last branch recording (LBR) and 6 * precise-event based sampling (PEBS). 7 * 8 * Different architectures use a different DS layout/pointer size. 9 * The below functions therefore work on a void*. 10 * 11 * 12 * Since there is no user for PEBS, yet, only LBR (or branch 13 * trace store, BTS) is supported. 14 * 15 * 16 * Copyright (C) 2007 Intel Corporation. 17 * Markus Metzger <markus.t.metzger@intel.com>, Dec 2007 18 */ 19 20#ifndef _ASM_X86_DS_H 21#define _ASM_X86_DS_H 22 23#include <linux/types.h> 24#include <linux/init.h> 25 26struct cpuinfo_x86; 27 28 29/* a branch trace record entry 30 * 31 * In order to unify the interface between various processor versions, 32 * we use the below data structure for all processors. 33 */ 34enum bts_qualifier { 35 BTS_INVALID = 0, 36 BTS_BRANCH, 37 BTS_TASK_ARRIVES, 38 BTS_TASK_DEPARTS 39}; 40 41struct bts_struct { 42 u64 qualifier; 43 union { 44 /* BTS_BRANCH */ 45 struct { 46 u64 from_ip; 47 u64 to_ip; 48 } lbr; 49 /* BTS_TASK_ARRIVES or 50 BTS_TASK_DEPARTS */ 51 u64 jiffies; 52 } variant; 53}; 54 55/* Overflow handling mechanisms */ 56#define DS_O_SIGNAL 1 /* send overflow signal */ 57#define DS_O_WRAP 2 /* wrap around */ 58 59extern int ds_allocate(void **, size_t); 60extern int ds_free(void **); 61extern int ds_get_bts_size(void *); 62extern int ds_get_bts_end(void *); 63extern int ds_get_bts_index(void *); 64extern int ds_set_overflow(void *, int); 65extern int ds_get_overflow(void *); 66extern int ds_clear(void *); 67extern int ds_read_bts(void *, int, struct bts_struct *); 68extern int ds_write_bts(void *, const struct bts_struct *); 69extern unsigned long ds_debugctl_mask(void); 70extern void __cpuinit ds_init_intel(struct cpuinfo_x86 *c); 71 72#endif /* _ASM_X86_DS_H */