KVM/riscv fixes for 6.16, take #1 - Fix the size parameter check in SBI SFENCE calls - Don't treat SBI HFENCE calls as NOPs
Unified · Split
| @@ -103,7 +103,7 @@ static int kvm_sbi_ext_rfence_handler(struct kvm_vcpu *vcpu, struct kvm_run *run · 102 unmodified lines | ||
| 103 | 103 | kvm_riscv_vcpu_pmu_incr_fw(vcpu, SBI_PMU_FW_FENCE_I_SENT); |
| 104 | 104 | break; |
| 105 | 105 | case SBI_EXT_RFENCE_REMOTE_SFENCE_VMA: |
| 106 | − if (cp->a2 == 0 && cp->a3 == 0) | |
| 106 | + if ((cp->a2 == 0 && cp->a3 == 0) || cp->a3 == -1UL) | |
| 107 | 107 | kvm_riscv_hfence_vvma_all(vcpu->kvm, hbase, hmask); |
| 108 | 108 | else |
| 109 | 109 | kvm_riscv_hfence_vvma_gva(vcpu->kvm, hbase, hmask, |
| @@ -111,7 +111,7 @@ static int kvm_sbi_ext_rfence_handler(struct kvm_vcpu *vcpu, struct kvm_run *run · 1 unmodified line | ||
| 111 | 111 | kvm_riscv_vcpu_pmu_incr_fw(vcpu, SBI_PMU_FW_HFENCE_VVMA_SENT); |
| 112 | 112 | break; |
| 113 | 113 | case SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID: |
| 114 | − if (cp->a2 == 0 && cp->a3 == 0) | |
| 114 | + if ((cp->a2 == 0 && cp->a3 == 0) || cp->a3 == -1UL) | |
| 115 | 115 | kvm_riscv_hfence_vvma_asid_all(vcpu->kvm, |
| 116 | 116 | hbase, hmask, cp->a4); |
| 117 | 117 | else |
| @@ -127,9 +127,9 @@ static int kvm_sbi_ext_rfence_handler(struct kvm_vcpu *vcpu, struct kvm_run *run · 9 unmodified lines | ||
| 127 | 127 | case SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID: |
| 128 | 128 | /* |
| 129 | 129 | * Until nested virtualization is implemented, the |
| 130 | − * SBI HFENCE calls should be treated as NOPs | |
| 130 | + * SBI HFENCE calls should return not supported | |
| 131 | + * hence fallthrough. | |
| 131 | 132 | */ |
| 132 | − break; | |
| 133 | 133 | default: |
| 134 | 134 | retdata->err_val = SBI_ERR_NOT_SUPPORTED; |
| 135 | 135 | } |