|
@@ -28,7 +28,8 @@ static void GLUE(X_PFX,ack_pending)(struct kvmppc_xive_vcpu *xc)
|
|
|
* bit.
|
|
|
*/
|
|
|
if (cpu_has_feature(CPU_FTR_POWER9_DD1)) {
|
|
|
- u8 pipr = __x_readb(__x_tima + TM_QW1_OS + TM_PIPR);
|
|
|
+ __be64 qw1 = __x_readq(__x_tima + TM_QW1_OS);
|
|
|
+ u8 pipr = be64_to_cpu(qw1) & 0xff;
|
|
|
if (pipr >= xc->hw_cppr)
|
|
|
return;
|
|
|
}
|
|
@@ -336,7 +337,6 @@ X_STATIC unsigned long GLUE(X_PFX,h_ipoll)(struct kvm_vcpu *vcpu, unsigned long
|
|
|
struct kvmppc_xive_vcpu *xc = vcpu->arch.xive_vcpu;
|
|
|
u8 pending = xc->pending;
|
|
|
u32 hirq;
|
|
|
- u8 pipr;
|
|
|
|
|
|
pr_devel("H_IPOLL(server=%ld)\n", server);
|
|
|
|
|
@@ -353,7 +353,8 @@ X_STATIC unsigned long GLUE(X_PFX,h_ipoll)(struct kvm_vcpu *vcpu, unsigned long
|
|
|
pending = 0xff;
|
|
|
} else {
|
|
|
/* Grab pending interrupt if any */
|
|
|
- pipr = __x_readb(__x_tima + TM_QW1_OS + TM_PIPR);
|
|
|
+ __be64 qw1 = __x_readq(__x_tima + TM_QW1_OS);
|
|
|
+ u8 pipr = be64_to_cpu(qw1) & 0xff;
|
|
|
if (pipr < 8)
|
|
|
pending |= 1 << pipr;
|
|
|
}
|