diff options
Diffstat (limited to 'arch/ia64/kernel/perfmon.c')
-rw-r--r-- | arch/ia64/kernel/perfmon.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index 376fcbc3f8da..fd4f3be6e856 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -1265,6 +1265,8 @@ out: | |||
1265 | } | 1265 | } |
1266 | EXPORT_SYMBOL(pfm_unregister_buffer_fmt); | 1266 | EXPORT_SYMBOL(pfm_unregister_buffer_fmt); |
1267 | 1267 | ||
1268 | extern void update_pal_halt_status(int); | ||
1269 | |||
1268 | static int | 1270 | static int |
1269 | pfm_reserve_session(struct task_struct *task, int is_syswide, unsigned int cpu) | 1271 | pfm_reserve_session(struct task_struct *task, int is_syswide, unsigned int cpu) |
1270 | { | 1272 | { |
@@ -1311,6 +1313,11 @@ pfm_reserve_session(struct task_struct *task, int is_syswide, unsigned int cpu) | |||
1311 | is_syswide, | 1313 | is_syswide, |
1312 | cpu)); | 1314 | cpu)); |
1313 | 1315 | ||
1316 | /* | ||
1317 | * disable default_idle() to go to PAL_HALT | ||
1318 | */ | ||
1319 | update_pal_halt_status(0); | ||
1320 | |||
1314 | UNLOCK_PFS(flags); | 1321 | UNLOCK_PFS(flags); |
1315 | 1322 | ||
1316 | return 0; | 1323 | return 0; |
@@ -1366,6 +1373,12 @@ pfm_unreserve_session(pfm_context_t *ctx, int is_syswide, unsigned int cpu) | |||
1366 | is_syswide, | 1373 | is_syswide, |
1367 | cpu)); | 1374 | cpu)); |
1368 | 1375 | ||
1376 | /* | ||
1377 | * if possible, enable default_idle() to go into PAL_HALT | ||
1378 | */ | ||
1379 | if (pfm_sessions.pfs_task_sessions == 0 && pfm_sessions.pfs_sys_sessions == 0) | ||
1380 | update_pal_halt_status(1); | ||
1381 | |||
1369 | UNLOCK_PFS(flags); | 1382 | UNLOCK_PFS(flags); |
1370 | 1383 | ||
1371 | return 0; | 1384 | return 0; |