mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 01:34:14 +08:00
[IA64] another perfmon fix (take2)
- pfm_context_load(): change return value from EINVAL to EBUSY when context is already loaded. - pfm_check_task_state(): pass test if context state is MASKED. It is safe to give access on PFM_CTX_MASKED because the PMU state (PMD) is stable and saved in software state. This helps multiplexing programs such as the example given in libpfm-3.1. Signed-off-by: stephane eranian <eranian@hpl.hp.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
8df5a500a3
commit
a5a70b75d9
@ -4215,7 +4215,7 @@ pfm_context_load(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs)
|
||||
DPRINT(("cannot load to [%d], invalid ctx_state=%d\n",
|
||||
req->load_pid,
|
||||
ctx->ctx_state));
|
||||
return -EINVAL;
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
DPRINT(("load_pid [%d] using_dbreg=%d\n", req->load_pid, ctx->ctx_fl_using_dbreg));
|
||||
@ -4716,17 +4716,27 @@ recheck:
|
||||
*/
|
||||
if (task == current || ctx->ctx_fl_system) return 0;
|
||||
|
||||
/*
|
||||
* we are monitoring another thread
|
||||
*/
|
||||
switch(state) {
|
||||
case PFM_CTX_UNLOADED:
|
||||
/*
|
||||
* if context is UNLOADED we are safe to go
|
||||
*/
|
||||
if (state == PFM_CTX_UNLOADED) return 0;
|
||||
|
||||
return 0;
|
||||
case PFM_CTX_ZOMBIE:
|
||||
/*
|
||||
* no command can operate on a zombie context
|
||||
*/
|
||||
if (state == PFM_CTX_ZOMBIE) {
|
||||
DPRINT(("cmd %d state zombie cannot operate on context\n", cmd));
|
||||
return -EINVAL;
|
||||
case PFM_CTX_MASKED:
|
||||
/*
|
||||
* PMU state has been saved to software even though
|
||||
* the thread may still be running.
|
||||
*/
|
||||
if (cmd != PFM_UNLOAD_CONTEXT) return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user