mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-07 16:06:25 +00:00
tools/intel_residency: use setitimer instead of {,u}alarm
It seems that Android doesn't have ualarm(). Let's use setitimer() instead. The tool still won't compile on Android due to igt_fb requiring Cairo, but we're supposed to solve this in another patch since our igt_fb calls don't actually require Cairo. Reported-by: Derek Morton <derek.j.morton@intel.com> Tested-by: Derek Morton <derek.j.morton@intel.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
This commit is contained in:
parent
ec5deb218d
commit
3005665ead
@ -23,6 +23,8 @@
|
|||||||
* Authors: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
* Authors: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -311,6 +313,14 @@ static void setup_alarm(void)
|
|||||||
sigaction(SIGALRM, &sa, NULL);
|
sigaction(SIGALRM, &sa, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void set_alarm(time_t sec, suseconds_t usec)
|
||||||
|
{
|
||||||
|
struct itimerval timerval = {{0, 0}, {sec, usec}};
|
||||||
|
|
||||||
|
alarm_received = false;
|
||||||
|
igt_assert(setitimer(ITIMER_REAL, &timerval, NULL) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void unset_mode(void)
|
static void unset_mode(void)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
@ -370,8 +380,7 @@ static void wait_until_idle(void)
|
|||||||
uint64_t tsc, pc, res;
|
uint64_t tsc, pc, res;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
alarm_received = false;
|
set_alarm(0, 500 * 1000);
|
||||||
ualarm(500 * 1000, 0);
|
|
||||||
|
|
||||||
tsc = msr_read(IA32_TIME_STAMP_COUNTER);
|
tsc = msr_read(IA32_TIME_STAMP_COUNTER);
|
||||||
pc = msr_read(deepest_pc_state);
|
pc = msr_read(deepest_pc_state);
|
||||||
@ -398,12 +407,10 @@ static uint64_t do_measurement(void (*callback)(void *ptr), void *ptr)
|
|||||||
|
|
||||||
wait_until_idle();
|
wait_until_idle();
|
||||||
|
|
||||||
alarm_received = false;
|
set_alarm(opts.res_warm_time, 0);
|
||||||
alarm(opts.res_warm_time);
|
|
||||||
callback(ptr);
|
callback(ptr);
|
||||||
|
|
||||||
alarm_received = false;
|
set_alarm(opts.res_calc_time, 0);
|
||||||
alarm(opts.res_calc_time);
|
|
||||||
|
|
||||||
tsc = msr_read(IA32_TIME_STAMP_COUNTER);
|
tsc = msr_read(IA32_TIME_STAMP_COUNTER);
|
||||||
pc = msr_read(deepest_pc_state);
|
pc = msr_read(deepest_pc_state);
|
||||||
@ -423,13 +430,11 @@ static void setup_idle(void)
|
|||||||
|
|
||||||
for (retries = 0; ; retries++) {
|
for (retries = 0; ; retries++) {
|
||||||
|
|
||||||
alarm_received = false;
|
set_alarm(opts.res_warm_time, 0);
|
||||||
alarm(opts.res_warm_time);
|
|
||||||
while (!alarm_received)
|
while (!alarm_received)
|
||||||
pause();
|
pause();
|
||||||
|
|
||||||
alarm_received = false;
|
set_alarm(opts.res_calc_time, 0);
|
||||||
alarm(opts.res_calc_time);
|
|
||||||
|
|
||||||
tsc = msr_read(IA32_TIME_STAMP_COUNTER);
|
tsc = msr_read(IA32_TIME_STAMP_COUNTER);
|
||||||
for (pc_i = best_pc_i; pc_i < NUM_PC_STATES; pc_i++)
|
for (pc_i = best_pc_i; pc_i < NUM_PC_STATES; pc_i++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user