KVM: PPC: Book3S HV nestedv2: Add DPDES support in helper library for Guest state buffer
BugLink: https://bugs.launchpad.net/bugs/2070329
Add support for using DPDES in the library for using guest state
buffers. DPDES support is needed for enabling usage of doorbells in a L2
KVM on PAPR guest.
Fixes: 6ccbbc33f0 ("KVM: PPC: Add helper library for Guest State Buffers")
Cc: stable@vger.kernel.org # v6.7+
Signed-off-by: Gautam Menghani <gautam@linux.ibm.com>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240605113913.83715-2-gautam@linux.ibm.com
(cherry picked from commit 55dfb8bed6fe8bda390cc71cca878d11a9407099)
Signed-off-by: Frank Heimes <frank.heimes@canonical.com>
Acked-by: Thibault Ferrante <thibault.ferrante@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
This commit is contained in:
committed by
Stefan Bader
parent
983daea8bf
commit
d9a0496ab2
@@ -546,7 +546,9 @@ table information.
|
||||
+--------+-------+----+--------+----------------------------------+
|
||||
| 0x1052 | 0x08 | RW | T | CTRL |
|
||||
+--------+-------+----+--------+----------------------------------+
|
||||
| 0x1053-| | | | Reserved |
|
||||
| 0x1053 | 0x08 | RW | T | DPDES |
|
||||
+--------+-------+----+--------+----------------------------------+
|
||||
| 0x1054-| | | | Reserved |
|
||||
| 0x1FFF | | | | |
|
||||
+--------+-------+----+--------+----------------------------------+
|
||||
| 0x2000 | 0x04 | RW | T | CR |
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
#define KVMPPC_GSID_HASHKEYR 0x1050
|
||||
#define KVMPPC_GSID_HASHPKEYR 0x1051
|
||||
#define KVMPPC_GSID_CTRL 0x1052
|
||||
#define KVMPPC_GSID_DPDES 0x1053
|
||||
|
||||
#define KVMPPC_GSID_CR 0x2000
|
||||
#define KVMPPC_GSID_PIDR 0x2001
|
||||
@@ -110,7 +111,7 @@
|
||||
#define KVMPPC_GSE_META_COUNT (KVMPPC_GSE_META_END - KVMPPC_GSE_META_START + 1)
|
||||
|
||||
#define KVMPPC_GSE_DW_REGS_START KVMPPC_GSID_GPR(0)
|
||||
#define KVMPPC_GSE_DW_REGS_END KVMPPC_GSID_CTRL
|
||||
#define KVMPPC_GSE_DW_REGS_END KVMPPC_GSID_DPDES
|
||||
#define KVMPPC_GSE_DW_REGS_COUNT \
|
||||
(KVMPPC_GSE_DW_REGS_END - KVMPPC_GSE_DW_REGS_START + 1)
|
||||
|
||||
|
||||
@@ -594,6 +594,7 @@ static inline u##size kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
|
||||
|
||||
|
||||
KVMPPC_BOOK3S_VCORE_ACCESSOR(vtb, 64, KVMPPC_GSID_VTB)
|
||||
KVMPPC_BOOK3S_VCORE_ACCESSOR(dpdes, 64, KVMPPC_GSID_DPDES)
|
||||
KVMPPC_BOOK3S_VCORE_ACCESSOR_GET(arch_compat, 32, KVMPPC_GSID_LOGICAL_PVR)
|
||||
KVMPPC_BOOK3S_VCORE_ACCESSOR_GET(lpcr, 64, KVMPPC_GSID_LPCR)
|
||||
KVMPPC_BOOK3S_VCORE_ACCESSOR_SET(tb_offset, 64, KVMPPC_GSID_TB_OFFSET)
|
||||
|
||||
@@ -320,6 +320,10 @@ static int gs_msg_ops_vcpu_fill_info(struct kvmppc_gs_buff *gsb,
|
||||
rc = kvmppc_gse_put_u64(gsb, iden,
|
||||
vcpu->arch.vcore->vtb);
|
||||
break;
|
||||
case KVMPPC_GSID_DPDES:
|
||||
rc = kvmppc_gse_put_u64(gsb, iden,
|
||||
vcpu->arch.vcore->dpdes);
|
||||
break;
|
||||
case KVMPPC_GSID_LPCR:
|
||||
rc = kvmppc_gse_put_u64(gsb, iden,
|
||||
vcpu->arch.vcore->lpcr);
|
||||
@@ -561,6 +565,9 @@ static int gs_msg_ops_vcpu_refresh_info(struct kvmppc_gs_msg *gsm,
|
||||
case KVMPPC_GSID_VTB:
|
||||
vcpu->arch.vcore->vtb = kvmppc_gse_get_u64(gse);
|
||||
break;
|
||||
case KVMPPC_GSID_DPDES:
|
||||
vcpu->arch.vcore->dpdes = kvmppc_gse_get_u64(gse);
|
||||
break;
|
||||
case KVMPPC_GSID_LPCR:
|
||||
vcpu->arch.vcore->lpcr = kvmppc_gse_get_u64(gse);
|
||||
break;
|
||||
|
||||
@@ -151,7 +151,7 @@ static void test_gs_bitmap(struct kunit *test)
|
||||
i++;
|
||||
}
|
||||
|
||||
for (u16 iden = KVMPPC_GSID_GPR(0); iden <= KVMPPC_GSID_CTRL; iden++) {
|
||||
for (u16 iden = KVMPPC_GSID_GPR(0); iden <= KVMPPC_GSE_DW_REGS_END; iden++) {
|
||||
kvmppc_gsbm_set(&gsbm, iden);
|
||||
kvmppc_gsbm_set(&gsbm1, iden);
|
||||
KUNIT_EXPECT_TRUE(test, kvmppc_gsbm_test(&gsbm, iden));
|
||||
|
||||
Reference in New Issue
Block a user