From: Suraj Jitindar Singh <sjitindarsingh@gmail.com> To: qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org, david@gibson.dropbear.id.au, clg@kaod.org, groug@kaod.org, Suraj Jitindar Singh <sjitindarsingh@gmail.com> Subject: [Qemu-devel] [QEMU-PPC] [PATCH 10/13] target/ppc: Implement hcall H_TLB_INVALIDATE Date: Fri, 3 May 2019 15:53:13 +1000 [thread overview] Message-ID: <20190503055316.6441-11-sjitindarsingh@gmail.com> (raw) In-Reply-To: <20190503055316.6441-1-sjitindarsingh@gmail.com> The hcall H_TLB_INVALIDATE is used by a guest acting as a nested hypervisor to perform partition scoped tlb invalidation since these instructions are hypervisor privileged. Check the arguments are valid and then invalidate the entire tlb since this is about all we can do in tcg. Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> --- hw/ppc/spapr_hcall.c | 28 ++++++++++++++++++++++++++++ include/hw/ppc/spapr.h | 3 ++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 68f3282214..a84d5e2163 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -2131,6 +2131,33 @@ void h_exit_nested(PowerPCCPU *cpu) env->gpr[3] = trap; } +static target_ulong h_nested_tlb_invalidate(PowerPCCPU *cpu, + SpaprMachineState *spapr, + target_ulong opcode, + target_ulong *args) +{ + target_ulong instr = args[0]; + target_ulong rbval = args[2]; + int r, ric, prs, is; + + if (spapr_get_cap(spapr, SPAPR_CAP_NESTED_KVM_HV) == 0) { + return H_FUNCTION; + } + + ric = (instr >> 18) & 0x3; + prs = (instr >> 17) & 0x1; + r = (instr >> 16) & 0x1; + is = (rbval >> 10) & 0x3; + + if ((!r) || (prs) || (ric == 3) || (is == 1) || ((!is) && (ric == 1 || + ric == 2))) + return H_PARAMETER; + + /* Invalidate everything, not much else we can do */ + cpu->env.tlb_need_flush = TLB_NEED_GLOBAL_FLUSH | TLB_NEED_LOCAL_FLUSH; + return H_SUCCESS; +} + static spapr_hcall_fn papr_hypercall_table[(MAX_HCALL_OPCODE / 4) + 1]; static spapr_hcall_fn kvmppc_hypercall_table[KVMPPC_HCALL_MAX - KVMPPC_HCALL_BASE + 1]; @@ -2240,6 +2267,7 @@ static void hypercall_register_types(void) /* Platform-specific hcalls used for nested HV KVM */ spapr_register_hypercall(H_SET_PARTITION_TABLE, h_set_partition_table); spapr_register_hypercall(H_ENTER_NESTED, h_enter_nested); + spapr_register_hypercall(H_TLB_INVALIDATE, h_nested_tlb_invalidate); /* Virtual Processor Home Node */ spapr_register_hypercall(H_HOME_NODE_ASSOCIATIVITY, diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 7083dea9ef..6a614c445f 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -504,7 +504,8 @@ struct SpaprMachineState { /* Platform-specific hcalls used for nested HV KVM */ #define H_SET_PARTITION_TABLE 0xF800 #define H_ENTER_NESTED 0xF804 -#define KVMPPC_HCALL_MAX H_ENTER_NESTED +#define H_TLB_INVALIDATE 0xF808 +#define KVMPPC_HCALL_MAX H_TLB_INVALIDATE typedef struct SpaprDeviceTreeUpdateHeader { uint32_t version_id; -- 2.13.6
WARNING: multiple messages have this Message-ID (diff)
From: Suraj Jitindar Singh <sjitindarsingh@gmail.com> To: qemu-devel@nongnu.org Cc: groug@kaod.org, qemu-ppc@nongnu.org, clg@kaod.org, Suraj Jitindar Singh <sjitindarsingh@gmail.com>, david@gibson.dropbear.id.au Subject: [Qemu-devel] [QEMU-PPC] [PATCH 10/13] target/ppc: Implement hcall H_TLB_INVALIDATE Date: Fri, 3 May 2019 15:53:13 +1000 [thread overview] Message-ID: <20190503055316.6441-11-sjitindarsingh@gmail.com> (raw) Message-ID: <20190503055313.HsiFYP5OUSlxv13Zs5zksuTqpUN6t6x79XP6woQE5Vo@z> (raw) In-Reply-To: <20190503055316.6441-1-sjitindarsingh@gmail.com> The hcall H_TLB_INVALIDATE is used by a guest acting as a nested hypervisor to perform partition scoped tlb invalidation since these instructions are hypervisor privileged. Check the arguments are valid and then invalidate the entire tlb since this is about all we can do in tcg. Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> --- hw/ppc/spapr_hcall.c | 28 ++++++++++++++++++++++++++++ include/hw/ppc/spapr.h | 3 ++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 68f3282214..a84d5e2163 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -2131,6 +2131,33 @@ void h_exit_nested(PowerPCCPU *cpu) env->gpr[3] = trap; } +static target_ulong h_nested_tlb_invalidate(PowerPCCPU *cpu, + SpaprMachineState *spapr, + target_ulong opcode, + target_ulong *args) +{ + target_ulong instr = args[0]; + target_ulong rbval = args[2]; + int r, ric, prs, is; + + if (spapr_get_cap(spapr, SPAPR_CAP_NESTED_KVM_HV) == 0) { + return H_FUNCTION; + } + + ric = (instr >> 18) & 0x3; + prs = (instr >> 17) & 0x1; + r = (instr >> 16) & 0x1; + is = (rbval >> 10) & 0x3; + + if ((!r) || (prs) || (ric == 3) || (is == 1) || ((!is) && (ric == 1 || + ric == 2))) + return H_PARAMETER; + + /* Invalidate everything, not much else we can do */ + cpu->env.tlb_need_flush = TLB_NEED_GLOBAL_FLUSH | TLB_NEED_LOCAL_FLUSH; + return H_SUCCESS; +} + static spapr_hcall_fn papr_hypercall_table[(MAX_HCALL_OPCODE / 4) + 1]; static spapr_hcall_fn kvmppc_hypercall_table[KVMPPC_HCALL_MAX - KVMPPC_HCALL_BASE + 1]; @@ -2240,6 +2267,7 @@ static void hypercall_register_types(void) /* Platform-specific hcalls used for nested HV KVM */ spapr_register_hypercall(H_SET_PARTITION_TABLE, h_set_partition_table); spapr_register_hypercall(H_ENTER_NESTED, h_enter_nested); + spapr_register_hypercall(H_TLB_INVALIDATE, h_nested_tlb_invalidate); /* Virtual Processor Home Node */ spapr_register_hypercall(H_HOME_NODE_ASSOCIATIVITY, diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 7083dea9ef..6a614c445f 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -504,7 +504,8 @@ struct SpaprMachineState { /* Platform-specific hcalls used for nested HV KVM */ #define H_SET_PARTITION_TABLE 0xF800 #define H_ENTER_NESTED 0xF804 -#define KVMPPC_HCALL_MAX H_ENTER_NESTED +#define H_TLB_INVALIDATE 0xF808 +#define KVMPPC_HCALL_MAX H_TLB_INVALIDATE typedef struct SpaprDeviceTreeUpdateHeader { uint32_t version_id; -- 2.13.6
next prev parent reply other threads:[~2019-05-03 5:54 UTC|newest] Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-03 5:53 [Qemu-devel] [QEMU-PPC] [PATCH 00/13] target/ppc: Implement KVM support under TCG Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 01/13] target/ppc: Implement the VTB for HV access Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-06 6:02 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 02/13] target/ppc: Work [S]PURR implementation and add HV support Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-06 6:15 ` David Gibson 2019-05-07 1:28 ` Suraj Jitindar Singh 2019-05-09 6:45 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 03/13] target/ppc: Add SPR ASDR Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-06 6:16 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 04/13] target/ppc: Add SPR TBU40 Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-06 6:17 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 05/13] target/ppc: Add privileged message send facilities Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-10 2:09 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 06/13] target/ppc: Enforce that the root page directory size must be at least 5 Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-10 2:11 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 07/13] target/ppc: Handle partition scoped radix tree translation Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-10 2:28 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 08/13] target/ppc: Implement hcall H_SET_PARTITION_TABLE Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-10 2:30 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 09/13] target/ppc: Implement hcall H_ENTER_NESTED Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-10 2:57 ` David Gibson 2019-05-03 5:53 ` Suraj Jitindar Singh [this message] 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 10/13] target/ppc: Implement hcall H_TLB_INVALIDATE Suraj Jitindar Singh 2019-05-10 6:28 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 11/13] target/ppc: Implement hcall H_COPY_TOFROM_GUEST Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-10 6:32 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 12/13] target/ppc: Introduce POWER9 DD2.2 cpu type Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-10 6:32 ` David Gibson 2019-05-03 5:53 ` [Qemu-devel] [QEMU-PPC] [PATCH 13/13] target/ppc: Enable SPAPR_CAP_NESTED_KVM_HV under tcg Suraj Jitindar Singh 2019-05-03 5:53 ` Suraj Jitindar Singh 2019-05-10 6:34 ` David Gibson 2019-05-03 5:58 ` [Qemu-devel] [QEMU-PPC] [PATCH 00/13] target/ppc: Implement KVM support under TCG Suraj Jitindar Singh 2019-05-03 5:58 ` Suraj Jitindar Singh 2019-05-06 6:20 ` David Gibson 2019-05-06 23:45 ` Suraj Jitindar Singh
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190503055316.6441-11-sjitindarsingh@gmail.com \ --to=sjitindarsingh@gmail.com \ --cc=clg@kaod.org \ --cc=david@gibson.dropbear.id.au \ --cc=groug@kaod.org \ --cc=qemu-devel@nongnu.org \ --cc=qemu-ppc@nongnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).