]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: PPC: Book3S HV nestedv2: Add DPDES support in helper library for Guest state...
authorGautam Menghani <gautam@linux.ibm.com>
Wed, 5 Jun 2024 11:39:09 +0000 (17:09 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 6 Jun 2024 12:38:10 +0000 (22:38 +1000)
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: 6ccbbc33f06a ("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
Documentation/arch/powerpc/kvm-nested.rst
arch/powerpc/include/asm/guest-state-buffer.h
arch/powerpc/include/asm/kvm_book3s.h
arch/powerpc/kvm/book3s_hv_nestedv2.c
arch/powerpc/kvm/test-guest-state-buffer.c

index 630602a8aa008bea171367d458f6203f07b5cb35..5defd13cc6c17caaec21f95b0fd71b28112196b2 100644 (file)
@@ -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                               |
index 808149f315763d4ccb084911454080c7acff78b3..d107abe1468fe18724828284a79b5d0ac6b0840e 100644 (file)
@@ -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
 #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)
 
index 3e1e2a698c9e70158de8145cf16e5afad16dee19..10618622d7efc95ad9d04276b5b5f436a8223047 100644 (file)
@@ -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)
index 1091f7a83b255d0b13320557afcf55937632c682..342f583147709960f2c946f2f4b20898edca5f77 100644 (file)
@@ -311,6 +311,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);
@@ -543,6 +547,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;
index 4720b8dc883791c98448cdde71dcc6c4f08dd43e..2571ccc618c96510453ec377d0a285f58346b6d9 100644 (file)
@@ -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));