From: David Gibson <david@gibson.dropbear.id.au>
To: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org, paulus@ozlabs.org
Subject: Re: [Qemu-devel] [QEMU-PPC] [PATCH V3 6/6] target/ppc/spapr: Add H-Call H_GET_CPU_CHARACTERISTICS
Date: Thu, 18 Jan 2018 16:20:29 +1100 [thread overview]
Message-ID: <20180118052029.GR30352@umbus.fritz.box> (raw)
In-Reply-To: <20180115063235.7518-7-sjitindarsingh@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4909 bytes --]
On Mon, Jan 15, 2018 at 05:32:35PM +1100, Suraj Jitindar Singh wrote:
> The new H-Call H_GET_CPU_CHARACTERISTICS is used by the guest to query
> behaviours and available characteristics of the cpu.
>
> Implement the handler for this new H-Call which formulates its response
> based on the setting of the spapr_caps cap-cfpc, cap-sbbc and cap-ibs.
>
> Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
> ---
> hw/ppc/spapr_hcall.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++
> include/hw/ppc/spapr.h | 1 +
> 2 files changed, 67 insertions(+)
>
> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> index 51eba52e86..a693d3b852 100644
> --- a/hw/ppc/spapr_hcall.c
> +++ b/hw/ppc/spapr_hcall.c
> @@ -1654,6 +1654,69 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
> return H_SUCCESS;
> }
>
> +static target_ulong h_get_cpu_characteristics(PowerPCCPU *cpu,
> + sPAPRMachineState *spapr,
> + target_ulong opcode,
> + target_ulong *args)
> +{
> + uint64_t characteristics = H_CPU_CHAR_HON_BRANCH_HINTS &
> + ~H_CPU_CHAR_THR_RECONF_TRIG;
> + uint64_t behaviour = H_CPU_BEHAV_FAVOUR_SECURITY;
> + uint8_t safe_cache = spapr_get_cap(spapr, SPAPR_CAP_CFPC);
> + uint8_t safe_bounds_check = spapr_get_cap(spapr, SPAPR_CAP_SBBC);
> + uint8_t safe_indirect_branch = spapr_get_cap(spapr, SPAPR_CAP_IBS);
> +
> + switch (safe_cache) {
> + case SPAPR_CAP_WORKAROUND:
> + characteristics |= H_CPU_CHAR_L1D_FLUSH_ORI30;
> + characteristics |= H_CPU_CHAR_L1D_FLUSH_TRIG2;
> + characteristics |= H_CPU_CHAR_L1D_THREAD_PRIV;
> + behaviour |= H_CPU_BEHAV_L1D_FLUSH_PR;
> + break;
> + case SPAPR_CAP_FIXED:
> + break;
> + default: /* broken */
> + if (safe_cache != SPAPR_CAP_BROKEN) {
I think you just assert() for this. The only way these could get a
different value is if there's a bug elsewhere.
> + error_report("Invalid value for cap-cfpc (%d), assuming broken",
> + safe_cache);
> + }
> + behaviour |= H_CPU_BEHAV_L1D_FLUSH_PR;
> + break;
> + }
> +
> + switch (safe_bounds_check) {
> + case SPAPR_CAP_WORKAROUND:
> + characteristics |= H_CPU_CHAR_SPEC_BAR_ORI31;
> + behaviour |= H_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
> + break;
> + case SPAPR_CAP_FIXED:
> + break;
> + default: /* broken */
> + if (safe_bounds_check != SPAPR_CAP_BROKEN) {
> + error_report("Invalid value for cap-sbbc (%d), assuming broken",
> + safe_bounds_check);
> + }
> + behaviour |= H_CPU_BEHAV_BNDS_CHK_SPEC_BAR;
> + break;
> + }
> +
> + switch (safe_indirect_branch) {
> + case SPAPR_CAP_FIXED:
> + characteristics |= H_CPU_CHAR_BCCTRL_SERIALISED;
> + default: /* broken */
> + if (safe_indirect_branch != SPAPR_CAP_BROKEN) {
> + error_report("Invalid value for cap-ibs (%d), assuming broken",
> + safe_indirect_branch);
> + }
> + break;
> + }
> +
> + args[0] = characteristics;
> + args[1] = behaviour;
> +
> + 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];
>
> @@ -1733,6 +1796,9 @@ static void hypercall_register_types(void)
> spapr_register_hypercall(H_INVALIDATE_PID, h_invalidate_pid);
> spapr_register_hypercall(H_REGISTER_PROC_TBL, h_register_process_table);
>
> + /* hcall-get-cpu-characteristics */
> + spapr_register_hypercall(H_GET_CPU_CHARACTERISTICS, h_get_cpu_characteristics);
> +
> /* "debugger" hcalls (also used by SLOF). Note: We do -not- differenciate
> * here between the "CI" and the "CACHE" variants, they will use whatever
> * mapping attributes qemu is using. When using KVM, the kernel will
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index 549d7a4134..62c077ac20 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -404,6 +404,7 @@ struct sPAPRMachineState {
> #define H_GET_HCA_INFO 0x1B8
> #define H_GET_PERF_COUNT 0x1BC
> #define H_MANAGE_TRACE 0x1C0
> +#define H_GET_CPU_CHARACTERISTICS 0x1C8
> #define H_FREE_LOGICAL_LAN_BUFFER 0x1D4
> #define H_QUERY_INT_STATE 0x1E4
> #define H_POLL_PENDING 0x1D8
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2018-01-18 5:23 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-15 6:32 [Qemu-devel] [QEMU-PPC] [PATCH V3 0/6] target/ppc: Rework spapr_caps Suraj Jitindar Singh
2018-01-15 6:32 ` [Qemu-devel] [QEMU-PPC] [PATCH V3 1/6] target/ppc/kvm: Add cap_ppc_safe_[cache/bounds_check/indirect_branch] Suraj Jitindar Singh
2018-01-15 6:58 ` [Qemu-devel] [QEMU-PPC] [PATCH V4 " Suraj Jitindar Singh
2018-01-18 5:06 ` David Gibson
2018-01-15 6:32 ` [Qemu-devel] [QEMU-PPC] [PATCH V3 2/6] target/ppc/spapr_caps: Add support for tristate spapr_capabilities Suraj Jitindar Singh
2018-01-18 5:07 ` David Gibson
2018-01-15 6:32 ` [Qemu-devel] [QEMU-PPC] [PATCH V3 3/6] target/ppc/spapr_caps: Add new tristate cap safe_cache Suraj Jitindar Singh
2018-01-18 5:10 ` David Gibson
2018-01-15 6:32 ` [Qemu-devel] [QEMU-PPC] [PATCH V3 4/6] target/ppc/spapr_caps: Add new tristate cap safe_bounds_check Suraj Jitindar Singh
2018-01-18 5:11 ` David Gibson
2018-01-15 6:32 ` [Qemu-devel] [QEMU-PPC] [PATCH V3 5/6] target/ppc/spapr_caps: Add new tristate cap safe_indirect_branch Suraj Jitindar Singh
2018-01-18 5:11 ` David Gibson
2018-01-15 6:32 ` [Qemu-devel] [QEMU-PPC] [PATCH V3 6/6] target/ppc/spapr: Add H-Call H_GET_CPU_CHARACTERISTICS Suraj Jitindar Singh
2018-01-18 5:20 ` David Gibson [this message]
2018-01-18 5:44 ` [Qemu-devel] [Qemu-ppc] " Alexey Kardashevskiy
2018-01-18 5:53 ` David Gibson
2018-01-18 8:11 ` Alexey Kardashevskiy
2018-01-18 20:30 ` Eric Blake
2018-01-18 23:35 ` David Gibson
2018-01-18 23:33 ` David Gibson
2018-01-16 13:47 ` [Qemu-devel] [Qemu-ppc] [QEMU-PPC] [PATCH V3 0/6] target/ppc: Rework spapr_caps Andrea Bolognani
2018-01-16 13:54 ` David Gibson
2018-01-16 14:46 ` Andrea Bolognani
2018-01-16 22:34 ` David Gibson
2018-01-16 23:26 ` Alexey Kardashevskiy
2018-01-16 23:30 ` David Gibson
2018-01-16 23:46 ` Alexey Kardashevskiy
2018-01-17 1:15 ` David Gibson
2018-01-17 8:54 ` Andrea Bolognani
2018-01-18 4:27 ` David Gibson
2018-01-18 15:55 ` Andrea Bolognani
2018-01-19 2:22 ` David Gibson
2018-01-19 3:59 ` Alexey Kardashevskiy
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=20180118052029.GR30352@umbus.fritz.box \
--to=david@gibson.dropbear.id.au \
--cc=paulus@ozlabs.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=sjitindarsingh@gmail.com \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.