aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/oprofile/op_model_amd.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/x86/oprofile/op_model_amd.c b/arch/x86/oprofile/op_model_amd.c
index 6557683c190e..97c84ebe3f24 100644
--- a/arch/x86/oprofile/op_model_amd.c
+++ b/arch/x86/oprofile/op_model_amd.c
@@ -218,6 +218,29 @@ static void op_amd_setup_ctrs(struct op_x86_model_spec const *model,
218 } 218 }
219} 219}
220 220
221/*
222 * 16-bit Linear Feedback Shift Register (LFSR)
223 *
224 * 16 14 13 11
225 * Feedback polynomial = X + X + X + X + 1
226 */
227static unsigned int lfsr_random(void)
228{
229 static unsigned int lfsr_value = 0xF00D;
230 unsigned int bit;
231
232 /* Compute next bit to shift in */
233 bit = ((lfsr_value >> 0) ^
234 (lfsr_value >> 2) ^
235 (lfsr_value >> 3) ^
236 (lfsr_value >> 5)) & 0x0001;
237
238 /* Advance to next register value */
239 lfsr_value = (lfsr_value >> 1) | (bit << 15);
240
241 return lfsr_value;
242}
243
221static inline void 244static inline void
222op_amd_handle_ibs(struct pt_regs * const regs, 245op_amd_handle_ibs(struct pt_regs * const regs,
223 struct op_msrs const * const msrs) 246 struct op_msrs const * const msrs)