@ -44,7 +44,7 @@ static target_ulong h_cppr(PowerPCCPU *cpu, sPAPRMachineState *spapr,
target_ulong opcode , target_ulong * args )
{
CPUState * cs = CPU ( cpu ) ;
ICPState * icp = & spapr - > xics - > ss [ cs - > cpu_index ] ;
ICPState * icp = xics_icp_get ( XICS_FABRIC ( spapr ) , cs - > cpu_index ) ;
target_ulong cppr = args [ 0 ] ;
icp_set_cppr ( icp , cppr ) ;
@ -56,12 +56,13 @@ static target_ulong h_ipi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
{
target_ulong server = xics_get_cpu_index_by_dt_id ( args [ 0 ] ) ;
target_ulong mfrr = args [ 1 ] ;
ICPState * icp = xics_icp_get ( XICS_FABRIC ( spapr ) , server ) ;
if ( server > = spapr - > xics - > nr_servers ) {
if ( ! icp ) {
return H_PARAMETER ;
}
icp_set_mfrr ( spapr - > x ics - > ss + server , mfrr ) ;
icp_set_mfrr ( icp , mfrr ) ;
return H_SUCCESS ;
}
@ -69,7 +70,7 @@ static target_ulong h_xirr(PowerPCCPU *cpu, sPAPRMachineState *spapr,
target_ulong opcode , target_ulong * args )
{
CPUState * cs = CPU ( cpu ) ;
ICPState * icp = & spapr - > xics - > ss [ cs - > cpu_index ] ;
ICPState * icp = xics_icp_get ( XICS_FABRIC ( spapr ) , cs - > cpu_index ) ;
uint32_t xirr = icp_accept ( icp ) ;
args [ 0 ] = xirr ;
@ -80,7 +81,7 @@ static target_ulong h_xirr_x(PowerPCCPU *cpu, sPAPRMachineState *spapr,
target_ulong opcode , target_ulong * args )
{
CPUState * cs = CPU ( cpu ) ;
ICPState * icp = & spapr - > xics - > ss [ cs - > cpu_index ] ;
ICPState * icp = xics_icp_get ( XICS_FABRIC ( spapr ) , cs - > cpu_index ) ;
uint32_t xirr = icp_accept ( icp ) ;
args [ 0 ] = xirr ;
@ -92,7 +93,7 @@ static target_ulong h_eoi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
target_ulong opcode , target_ulong * args )
{
CPUState * cs = CPU ( cpu ) ;
ICPState * icp = & spapr - > xics - > ss [ cs - > cpu_index ] ;
ICPState * icp = xics_icp_get ( XICS_FABRIC ( spapr ) , cs - > cpu_index ) ;
target_ulong xirr = args [ 0 ] ;
icp_eoi ( icp , xirr ) ;
@ -103,7 +104,7 @@ static target_ulong h_ipoll(PowerPCCPU *cpu, sPAPRMachineState *spapr,
target_ulong opcode , target_ulong * args )
{
CPUState * cs = CPU ( cpu ) ;
ICPState * icp = & spapr - > xics - > ss [ cs - > cpu_index ] ;
ICPState * icp = xics_icp_get ( XICS_FABRIC ( spapr ) , cs - > cpu_index ) ;
uint32_t mfrr ;
uint32_t xirr = icp_ipoll ( icp , & mfrr ) ;
@ -134,7 +135,7 @@ static void rtas_set_xive(PowerPCCPU *cpu, sPAPRMachineState *spapr,
server = xics_get_cpu_index_by_dt_id ( rtas_ld ( args , 1 ) ) ;
priority = rtas_ld ( args , 2 ) ;
if ( ! ics_valid_irq ( ics , nr ) | | ( server > = ics - > xics - > nr_servers )
if ( ! ics_valid_irq ( ics , nr ) | | ! xics_icp_get ( XICS_FABRIC ( spapr ) , server )
| | ( priority > 0xff ) ) {
rtas_st ( rets , 0 , RTAS_OUT_PARAM_ERROR ) ;
return ;