/* * Copyright (C) 2015 Anshuman Khandual, IBM Corporation. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ #define VEC_MAX 128 #define VSX_MAX 32 #define VMX_MAX 32 /* * unsigned long vsx[32] * unsigned long load[128] */ int validate_vsx(unsigned long *vsx, unsigned long *load) { int i; for (i = 0; i < VSX_MAX; i++) { if (vsx[i] != load[2 * i + 1]) { printf("vsx[%d]: %lx load[%d] %lx\n", i, vsx[i], 2 * i + 1, load[2 * i + 1]); return TEST_FAIL; } } return TEST_PASS; } /* * unsigned long vmx[32][2] * unsigned long load[128] */ int validate_vmx(unsigned long vmx[][2], unsigned long *load) { int i; for (i = 0; i < VMX_MAX; i++) { #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ if ((vmx[i][0] != load[64 + 2 * i]) || (vmx[i][1] != load[65 + 2 * i])) { printf("vmx[%d][0]: %lx load[%d] %lx\n", i, vmx[i][0], 64 + 2 * i, load[64 + 2 * i]); printf("vmx[%d][1]: %lx load[%d] %lx\n", i, vmx[i][1], 65 + 2 * i, load[65 + 2 * i]); return TEST_FAIL; } #else /* * In LE each value pair is stored in an * alternate manner. */ if ((vmx[i][0] != load[65 + 2 * i]) || (vmx[i][1] != load[64 + 2 * i])) { printf("vmx[%d][0]: %lx load[%d] %lx\n", i, vmx[i][0], 65 + 2 * i, load[65 + 2 * i]); printf("vmx[%d][1]: %lx load[%d] %lx\n", i, vmx[i][1], 64 + 2 * i, load[64 + 2 * i]); return TEST_FAIL; } #endif } return TEST_PASS; } /* * unsigned long store[128] * unsigned long load[128] */ int compare_vsx_vmx(unsigned long *store, unsigned long *load) { int i; for (i = 0; i < VSX_MAX; i++) { if (store[1 + 2 * i] != load[1 + 2 * i]) { printf("store[%d]: %lx load[%d] %lx\n", 1 + 2 * i, store[i], 1 + 2 * i, load[i]); return TEST_FAIL; } } #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ for (i = 64; i < VEC_MAX; i++) { if (store[i] != load[i]) { printf("store[%d]: %lx load[%d] %lx\n", i, store[i], i, load[i]); return TEST_FAIL; } } #else /* In LE each value pair is stored in an alternate manner */ for (i = 64; i < VEC_MAX; i++) { if (!(i % 2) && (store[i] != load[i+1])) { printf("store[%d]: %lx load[%d] %lx\n", i, store[i], i+1, load[i+1]); return TEST_FAIL; } if ((i % 2) && (store[i] != load[i-1])) { printf("here store[%d]: %lx load[%d] %lx\n", i, store[i], i-1, load[i-1]); return TEST_FAIL; } } #endif return TEST_PASS; } void load_vsx_vmx(unsigned long *load, unsigned long *vsx, unsigned long vmx[][2]) { int i; for (i = 0; i < VSX_MAX; i++) vsx[i] = load[1 + 2 * i]; for (i = 0; i < VMX_MAX; i++) { vmx[i][0] = load[64 + 2 * i]; vmx[i][1] = load[65 + 2 * i]; } } void loadvsx(void *p, int tmp); void storevsx(void *p, int tmp); 90'>media
diff options
context:
space:
mode:
authorBaolin Wang <baolin.wang@linaro.org>2016-11-28 14:35:21 -0800
committerThomas Gleixner <tglx@linutronix.de>2016-12-01 14:45:08 +0100
commit4a057549d6044c2dea47e80f8369a76225ec9d90 (patch)
treee2951737c3fcee363a24c6bc2f09be6e8ae9129b /Documentation/media
parent2924ecd441f3c12da59b297daade265f49d0831b (diff)
alarmtimer: Add tracepoints for alarm timers
Alarm timers are one of the mechanisms to wake up a system from suspend, but there exist no tracepoints to analyse which process/thread armed an alarmtimer. Add tracepoints for start/cancel/expire of individual alarm timers and one for tracing the suspend time decision when to resume the system. The following trace excerpt illustrates the new mechanism: Binder:3292_2-3304 [000] d..2 149.981123: alarmtimer_cancel: alarmtimer:ffffffc1319a7800 type:REALTIME expires:1325463120000000000 now:1325376810370370245 Binder:3292_2-3304 [000] d..2 149.981136: alarmtimer_start: alarmtimer:ffffffc1319a7800 type:REALTIME expires:1325376840000000000 now:1325376810370384591 Binder:3292_9-3953 [000] d..2 150.212991: alarmtimer_cancel: alarmtimer:ffffffc1319a5a00 type:BOOTTIME expires:179552000000 now:150154008122 Binder:3292_9-3953 [000] d..2 150.213006: alarmtimer_start: alarmtimer:ffffffc1319a5a00 type:BOOTTIME expires:179551000000 now:150154025622 system_server-3000 [002] ...1 162.701940: alarmtimer_suspend: alarmtimer type:REALTIME expires:1325376840000000000 The wakeup time which is selected at suspend time allows to map it back to the task arming the timer: Binder:3292_2. [ tglx: Store alarm timer expiry time instead of some useless RTC relative information, add proper type information for wakeups which are handled via the clock_nanosleep/freezer and massage the changelog. ] Signed-off-by: Baolin Wang <baolin.wang@linaro.org> Signed-off-by: John Stultz <john.stultz@linaro.org> Acked-by: Steven Rostedt <rostedt@goodmis.org> Cc: Prarit Bhargava <prarit@redhat.com> Cc: Richard Cochran <richardcochran@gmail.com> Link: http://lkml.kernel.org/r/1480372524-15181-5-git-send-email-john.stultz@linaro.org Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'Documentation/media')