-EINVAL (-22) - cell state is invalid
-Hypercall "CPU Get State" (code 7)
-- - - - - - - - - - - - - - - - - -
+Hypercall "CPU Get Info" (code 7)
+- - - - - - - - - - - - - - - - -
-Obtain information about the state of a specific CPU.
+Obtain information about a specific CPU.
-Arguments: 1. logical ID of CPU to be queried
+Arguments: 1. Logical ID of CPU to be queried
+ 2. Information type:
+ 0 - CPU state
-Return code: CPU state (>=0) or negative error code
+Return code: Requested value (>=0) or negative error code
Possible CPU states are:
0 - Running
return -ENOMEM;
for_each_cpu(cpu, &cell->cpus_assigned)
- if (jailhouse_call_arg1(JAILHOUSE_HC_CPU_GET_STATE, cpu) ==
+ if (jailhouse_call_arg2(JAILHOUSE_HC_CPU_GET_INFO, cpu,
+ JAILHOUSE_CPU_INFO_STATE) ==
JAILHOUSE_CPU_FAILED)
cpu_set(cpu, *cpus_failed);
}
}
-static int cpu_get_state(struct per_cpu *cpu_data, unsigned long cpu_id)
+static int cpu_get_info(struct per_cpu *cpu_data, unsigned long cpu_id,
+ unsigned long type)
{
if (!cpu_id_valid(cpu_id))
return -EINVAL;
!test_bit(cpu_id, cpu_data->cell->cpu_set->bitmap)))
return -EPERM;
- return per_cpu(cpu_id)->failed ? JAILHOUSE_CPU_FAILED :
- JAILHOUSE_CPU_RUNNING;
+ if (type == JAILHOUSE_CPU_INFO_STATE) {
+ return per_cpu(cpu_id)->failed ? JAILHOUSE_CPU_FAILED :
+ JAILHOUSE_CPU_RUNNING;
+ } else
+ return -EINVAL;
}
long hypercall(struct per_cpu *cpu_data, unsigned long code,
return hypervisor_get_info(cpu_data, arg1);
case JAILHOUSE_HC_CELL_GET_STATE:
return cell_get_state(cpu_data, arg1);
- case JAILHOUSE_HC_CPU_GET_STATE:
- return cpu_get_state(cpu_data, arg1);
+ case JAILHOUSE_HC_CPU_GET_INFO:
+ return cpu_get_info(cpu_data, arg1, arg2);
default:
return -ENOSYS;
}
#define JAILHOUSE_HC_CELL_DESTROY 4
#define JAILHOUSE_HC_HYPERVISOR_GET_INFO 5
#define JAILHOUSE_HC_CELL_GET_STATE 6
-#define JAILHOUSE_HC_CPU_GET_STATE 7
+#define JAILHOUSE_HC_CPU_GET_INFO 7
/* Hypervisor information type */
#define JAILHOUSE_INFO_MEM_POOL_SIZE 0
#define JAILHOUSE_INFO_REMAP_POOL_USED 3
#define JAILHOUSE_INFO_NUM_CELLS 4
+/* Hypervisor information type */
+#define JAILHOUSE_CPU_INFO_STATE 0
+
/* CPU state */
#define JAILHOUSE_CPU_RUNNING 0
#define JAILHOUSE_CPU_FAILED 2 /* terminal state */