From nobody Fri May 3 02:41:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516338163016959.6700084725574; Thu, 18 Jan 2018 21:02:43 -0800 (PST) Received: from localhost ([::1]:52373 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOp8-0000Jj-3g for importer@patchew.org; Fri, 19 Jan 2018 00:02:42 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60222) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOmx-0007OQ-Do for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecOmv-0004oA-V5 for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:27 -0500 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]:45169) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ecOms-0004mv-DY; Fri, 19 Jan 2018 00:00:22 -0500 Received: by mail-pf0-x244.google.com with SMTP id a88so525265pfe.12; Thu, 18 Jan 2018 21:00:22 -0800 (PST) Received: from surajjs1.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id i128sm14653163pfg.83.2018.01.18.21.00.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 21:00:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rF8xMht1QbHhWjF3d+r3ccfA/ebzNQZmJXIfkRj7Nv0=; b=o2CPhluEE72E168EL50gpqz0cPQyHpVZjJJZ/jeZsMZ4vspshsmI/7uHt469ytPHPS ZrbIjYBCgjpsxe70E+C+Xi7qLK6z947wrhC3wmuOSxHJIw+GlYVJZ9z9NNGCd+rkwgOw llEX0EHyp4VxdV2CHroIElg2MyaOKevrOBsAY5Gi65WKcLaBJCOpI/AEV6qD6DH9sbIa E5vjOhSbcfdvevLSpJca+HAb12Dhw+c6/EKu1SZroG4HwJjTpejlOcCFQ8/iuJ/3k+rQ tyXxF/tzUJ45ZemW0dXhbLlpIEsu3lXu3e6xSylYc39XEbnI52sxqOBX+5G8os0hV+hh WiVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rF8xMht1QbHhWjF3d+r3ccfA/ebzNQZmJXIfkRj7Nv0=; b=B2LigMxQrrLbzq+T/jCX+hnc+tiyusfp9moFB/V34YK7p7vhNnRHoEG4/JxhLH6g5t vEFN8M5VAalfdVVQQm38dx36kmBWUjA73X2eNPOCVuM6Zzp8sdWNCV0xII7VBdckdjtH ww3AcZ69WswkSE4gMWRmd6Y/wetV9HiHxhuDBXeW4m8H5Ll8IgFUlklqFsxBN1FEXbzT yHpv+rolgWYhradUXrXOre9LjePCz+Gr55MozpLM587f05tvWoPURMxEW03SVkq5r097 a23lxq90OHv03Whb9vxFXk5EIdkzWTT2l66VhGfvNZLIm3pSz4YLcxU7e/kw0uPFN6jz 2PsQ== X-Gm-Message-State: AKwxytdzL2/eM2zxcgtrAG2pdygA2nXk6SSJObNc1OIjjTD2yIHemO6f 9+EpxYQql7veUjVgESazRrSbgTFe X-Google-Smtp-Source: ACJfBotYMBzwFXj1+dyD2q5sXknVOWGFzIICMb36T2dkklmubbmcU9aGOkWOLBp+UMSnFd/7Z4ShEw== X-Received: by 10.98.131.200 with SMTP id h191mr30554032pfe.149.1516338021246; Thu, 18 Jan 2018 21:00:21 -0800 (PST) From: Suraj Jitindar Singh To: qemu-ppc@nongnu.org Date: Fri, 19 Jan 2018 15:59:59 +1100 Message-Id: <20180119050005.29392-2-sjitindarsingh@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180119050005.29392-1-sjitindarsingh@gmail.com> References: <20180119050005.29392-1-sjitindarsingh@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::244 Subject: [Qemu-devel] [QEMU-PPC] [PATCH V5 1/7] target/ppc/kvm: Add cap_ppc_safe_[cache/bounds_check/indirect_branch] X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: paulus@ozlabs.org, qemu-devel@nongnu.org, Suraj Jitindar Singh , david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add three new kvm capabilities used to represent the level of host support for three corresponding workarounds. Host support for each of the capabilities is queried through the new ioctl KVM_PPC_GET_CPU_CHAR which returns four uint64 quantities. The first two, character and behaviour, represent the available characteristics of the cpu and the behaviour of the cpu respectively. The second two, c_mask and b_mask, represent the mask of known bits for the character and beheviour dwords respectively. Signed-off-by: Suraj Jitindar Singh Reviewed-by: David Gibson --- include/hw/ppc/spapr.h | 12 +++++++++ linux-headers/asm-powerpc/kvm.h | 8 ++++++ linux-headers/linux/kvm.h | 3 +++ target/ppc/kvm.c | 58 +++++++++++++++++++++++++++++++++++++= ++++ target/ppc/kvm_ppc.h | 18 +++++++++++++ 5 files changed, 99 insertions(+) diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 0f5628f22e..eded0ea57d 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -295,6 +295,18 @@ struct sPAPRMachineState { #define H_DABRX_KERNEL (1ULL<<(63-62)) #define H_DABRX_USER (1ULL<<(63-63)) =20 +/* Values for KVM_PPC_GET_CPU_CHAR & H_GET_CPU_CHARACTERISTICS */ +#define H_CPU_CHAR_SPEC_BAR_ORI31 PPC_BIT(0) +#define H_CPU_CHAR_BCCTRL_SERIALISED PPC_BIT(1) +#define H_CPU_CHAR_L1D_FLUSH_ORI30 PPC_BIT(2) +#define H_CPU_CHAR_L1D_FLUSH_TRIG2 PPC_BIT(3) +#define H_CPU_CHAR_L1D_THREAD_PRIV PPC_BIT(4) +#define H_CPU_CHAR_HON_BRANCH_HINTS PPC_BIT(5) +#define H_CPU_CHAR_THR_RECONF_TRIG PPC_BIT(6) +#define H_CPU_BEHAV_FAVOUR_SECURITY PPC_BIT(0) +#define H_CPU_BEHAV_L1D_FLUSH_PR PPC_BIT(1) +#define H_CPU_BEHAV_BNDS_CHK_SPEC_BAR PPC_BIT(2) + /* Each control block has to be on a 4K boundary */ #define H_CB_ALIGNMENT 4096 =20 diff --git a/linux-headers/asm-powerpc/kvm.h b/linux-headers/asm-powerpc/kv= m.h index 61d6049f4c..5d2cb26848 100644 --- a/linux-headers/asm-powerpc/kvm.h +++ b/linux-headers/asm-powerpc/kvm.h @@ -443,6 +443,14 @@ struct kvm_ppc_rmmu_info { __u32 ap_encodings[8]; }; =20 +/* For KVM_PPC_GET_CPU_CHAR */ +struct kvm_ppc_cpu_char { + __u64 character; /* characteristics of the CPU */ + __u64 behaviour; /* recommended software behaviour */ + __u64 c_mask; /* valid bits in character */ + __u64 b_mask; /* valid bits in behaviour */ +}; + /* Per-vcpu XICS interrupt controller state */ #define KVM_REG_PPC_ICP_STATE (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c) =20 diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h index ce6c2f11f4..c35f1bd363 100644 --- a/linux-headers/linux/kvm.h +++ b/linux-headers/linux/kvm.h @@ -932,6 +932,7 @@ struct kvm_ppc_resize_hpt { #define KVM_CAP_HYPERV_SYNIC2 148 #define KVM_CAP_HYPERV_VP_INDEX 149 #define KVM_CAP_S390_AIS_MIGRATION 150 +#define KVM_CAP_PPC_GET_CPU_CHAR 151 =20 #ifdef KVM_CAP_IRQ_ROUTING =20 @@ -1261,6 +1262,8 @@ struct kvm_s390_ucas_mapping { #define KVM_PPC_CONFIGURE_V3_MMU _IOW(KVMIO, 0xaf, struct kvm_ppc_mmuv3_= cfg) /* Available with KVM_CAP_PPC_RADIX_MMU */ #define KVM_PPC_GET_RMMU_INFO _IOW(KVMIO, 0xb0, struct kvm_ppc_rmmu_inf= o) +/* Available with KVM_CAP_PPC_GET_CPU_CHAR */ +#define KVM_PPC_GET_CPU_CHAR _IOR(KVMIO, 0xb1, struct kvm_ppc_cpu_ch= ar) =20 /* ioctl for vm fd */ #define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device) diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index 914be687e7..b16f731522 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -89,6 +89,9 @@ static int cap_mmu_radix; static int cap_mmu_hash_v3; static int cap_resize_hpt; static int cap_ppc_pvr_compat; +static int cap_ppc_safe_cache; +static int cap_ppc_safe_bounds_check; +static int cap_ppc_safe_indirect_branch; =20 static uint32_t debug_inst_opcode; =20 @@ -121,6 +124,7 @@ static bool kvmppc_is_pr(KVMState *ks) } =20 static int kvm_ppc_register_host_cpu_type(MachineState *ms); +static void kvmppc_get_cpu_characteristics(KVMState *s); =20 int kvm_arch_init(MachineState *ms, KVMState *s) { @@ -147,6 +151,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s) cap_mmu_radix =3D kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_RADIX); cap_mmu_hash_v3 =3D kvm_vm_check_extension(s, KVM_CAP_PPC_MMU_HASH_V3); cap_resize_hpt =3D kvm_vm_check_extension(s, KVM_CAP_SPAPR_RESIZE_HPT); + kvmppc_get_cpu_characteristics(s); /* * Note: setting it to false because there is not such capability * in KVM at this moment. @@ -2456,6 +2461,59 @@ bool kvmppc_has_cap_mmu_hash_v3(void) return cap_mmu_hash_v3; } =20 +static void kvmppc_get_cpu_characteristics(KVMState *s) +{ + struct kvm_ppc_cpu_char c; + int ret; + + /* Assume broken */ + cap_ppc_safe_cache =3D 0; + cap_ppc_safe_bounds_check =3D 0; + cap_ppc_safe_indirect_branch =3D 0; + + ret =3D kvm_vm_check_extension(s, KVM_CAP_PPC_GET_CPU_CHAR); + if (!ret) { + return; + } + ret =3D kvm_vm_ioctl(s, KVM_PPC_GET_CPU_CHAR, &c); + if (ret < 0) { + return; + } + /* Parse and set cap_ppc_safe_cache */ + if (~c.behaviour & c.b_mask & H_CPU_BEHAV_L1D_FLUSH_PR) { + cap_ppc_safe_cache =3D 2; + } else if ((c.character & c.c_mask & H_CPU_CHAR_L1D_THREAD_PRIV) && + (c.character & c.c_mask & (H_CPU_CHAR_L1D_FLUSH_ORI30 | + H_CPU_CHAR_L1D_FLUSH_TRIG2))) { + cap_ppc_safe_cache =3D 1; + } + /* Parse and set cap_ppc_safe_bounds_check */ + if (~c.behaviour & c.b_mask & H_CPU_BEHAV_BNDS_CHK_SPEC_BAR) { + cap_ppc_safe_bounds_check =3D 2; + } else if (c.character & c.c_mask & H_CPU_CHAR_SPEC_BAR_ORI31) { + cap_ppc_safe_bounds_check =3D 1; + } + /* Parse and set cap_ppc_safe_indirect_branch */ + if (c.character & H_CPU_CHAR_BCCTRL_SERIALISED) { + cap_ppc_safe_indirect_branch =3D 2; + } +} + +int kvmppc_get_cap_safe_cache(void) +{ + return cap_ppc_safe_cache; +} + +int kvmppc_get_cap_safe_bounds_check(void) +{ + return cap_ppc_safe_bounds_check; +} + +int kvmppc_get_cap_safe_indirect_branch(void) +{ + return cap_ppc_safe_indirect_branch; +} + PowerPCCPUClass *kvm_ppc_get_host_cpu_class(void) { uint32_t host_pvr =3D mfpvr(); diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h index ecb55493cc..39830baa77 100644 --- a/target/ppc/kvm_ppc.h +++ b/target/ppc/kvm_ppc.h @@ -59,6 +59,9 @@ bool kvmppc_has_cap_fixup_hcalls(void); bool kvmppc_has_cap_htm(void); bool kvmppc_has_cap_mmu_radix(void); bool kvmppc_has_cap_mmu_hash_v3(void); +int kvmppc_get_cap_safe_cache(void); +int kvmppc_get_cap_safe_bounds_check(void); +int kvmppc_get_cap_safe_indirect_branch(void); int kvmppc_enable_hwrng(void); int kvmppc_put_books_sregs(PowerPCCPU *cpu); PowerPCCPUClass *kvm_ppc_get_host_cpu_class(void); @@ -290,6 +293,21 @@ static inline bool kvmppc_has_cap_mmu_hash_v3(void) return false; } =20 +static inline int kvmppc_get_cap_safe_cache(void) +{ + return 0; +} + +static inline int kvmppc_get_cap_safe_bounds_check(void) +{ + return 0; +} + +static inline int kvmppc_get_cap_safe_indirect_branch(void) +{ + return 0; +} + static inline int kvmppc_enable_hwrng(void) { return -1; --=20 2.13.6 From nobody Fri May 3 02:41:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516338347942328.6116900480481; Thu, 18 Jan 2018 21:05:47 -0800 (PST) Received: from localhost ([::1]:52464 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOs7-0002x4-4p for importer@patchew.org; Fri, 19 Jan 2018 00:05:47 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60238) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOmz-0007QH-C1 for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecOmy-0004p0-31 for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:29 -0500 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:45168) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ecOmv-0004nd-6l; Fri, 19 Jan 2018 00:00:25 -0500 Received: by mail-pf0-x242.google.com with SMTP id a88so525353pfe.12; Thu, 18 Jan 2018 21:00:24 -0800 (PST) Received: from surajjs1.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id i128sm14653163pfg.83.2018.01.18.21.00.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 21:00:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vl4nmHg7KT8IbcFd5bNK9EMsl8YY+LSbu3dwu2mmZic=; b=g8Aly4Jsb2PDELMheS7xolVLT+xXFHpZKR1gZlZ8V1QDsWOk0B94ZR0D8GAjGsC2KX 6Y5w9AuVYtQ8R/vkT2/1Jad0lYYCwb175Ltycngj6oxTVHBQsKJ5nBsXpW4NFNTUN4c8 FpooWZYV3KSQN42O6LWu6PftyTET4BfdzBc4NQ2KWyxQ8dmMOaLmfBoVkjxKeGxxxAKj EXuyHGPOcRl0v8LWmmOJKd08+Ny64O+uigEqWU5DjKYpBhO8rqcjSNvQeTFZ7JLST30d PGV8kZvffGUgS5MM0I139qBJVSdXRiwR2aXTAdU4jmPqUeTpAhB6oh/ypRYhIPm4jT/S lD4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vl4nmHg7KT8IbcFd5bNK9EMsl8YY+LSbu3dwu2mmZic=; b=KVxSrDF5XSQLcdhL0TZM4lCXhQcZQC57wOvUd7i0jGKiHsRNZib8KQDSF3ZQjIFJYA vZG5Ap46kWll93TOWgJ0+6Dea+zdC9EJjakMyacQsx0zyWawIeWgmQ/gGwum0VT5NT3R UQVC6ahmH6j7daMmEVRPKEy9dgDaQqvVr5IlisVQnOAw59Aj3EQWdCYmxlgBDGijkoWv KeJ7boMYlVaRPfFtVb3B2sniAEGNwGlXm1eciAHZ+hghJE7V6vZ96CUeFRwwcyfcpsrA 4M6sAYpdrKtX1kzwYQp0LH5Kvkmc3zwprgpds+D0XiQlqRICcumqv5M1VgWoOcDiLPrP cafw== X-Gm-Message-State: AKwxytf7AYf2SuUhXT31ptQNzMsGm5aZHNXw7JYSfk4FzZlrFU2whiR5 ix/l80OlQHBZN7GB/sBBMxAY/ZR4 X-Google-Smtp-Source: ACJfBot5S+1whouLe7zELYRPn70Hjen1ABQ8vGmBGvZp0qB3Kc/ptnX2E+weF6Sla3r9kaMbNKDj0A== X-Received: by 10.98.18.10 with SMTP id a10mr14677969pfj.140.1516338023997; Thu, 18 Jan 2018 21:00:23 -0800 (PST) From: Suraj Jitindar Singh To: qemu-ppc@nongnu.org Date: Fri, 19 Jan 2018 16:00:00 +1100 Message-Id: <20180119050005.29392-3-sjitindarsingh@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180119050005.29392-1-sjitindarsingh@gmail.com> References: <20180119050005.29392-1-sjitindarsingh@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [QEMU-PPC] [PATCH V5 2/7] target/ppc/spapr_caps: Add macro to generate spapr_caps migration vmstate X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: paulus@ozlabs.org, qemu-devel@nongnu.org, Suraj Jitindar Singh , david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The vmstate description and the contained needed function for migration of spapr_caps is the same for each cap, with the name of the cap substituted. As such introduce a macro to allow for easier generation of these. Convert the three existing spapr_caps (htm, vsx, and dfp) to use this macro. Signed-off-by: Suraj Jitindar Singh --- V5: - Patch added to series --- hw/ppc/spapr_caps.c | 78 +++++++++++++++++--------------------------------= ---- 1 file changed, 24 insertions(+), 54 deletions(-) diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c index d5c9ce774a..5d52969bd5 100644 --- a/hw/ppc/spapr_caps.c +++ b/hw/ppc/spapr_caps.c @@ -228,62 +228,32 @@ int spapr_caps_post_migration(sPAPRMachineState *spap= r) return ok ? 0 : -EINVAL; } =20 -static bool spapr_cap_htm_needed(void *opaque) -{ - sPAPRMachineState *spapr =3D opaque; - - return spapr->cmd_line_caps[SPAPR_CAP_HTM] && - (spapr->eff.caps[SPAPR_CAP_HTM] !=3D spapr->def.caps[SPAPR_CAP_= HTM]); -} - -const VMStateDescription vmstate_spapr_cap_htm =3D { - .name =3D "spapr/cap/htm", - .version_id =3D 1, - .minimum_version_id =3D 1, - .needed =3D spapr_cap_htm_needed, - .fields =3D (VMStateField[]) { - VMSTATE_UINT8(mig.caps[SPAPR_CAP_HTM], sPAPRMachineState), - VMSTATE_END_OF_LIST() - }, -}; - -static bool spapr_cap_vsx_needed(void *opaque) -{ - sPAPRMachineState *spapr =3D opaque; - - return spapr->cmd_line_caps[SPAPR_CAP_VSX] && - (spapr->eff.caps[SPAPR_CAP_VSX] !=3D spapr->def.caps[SPAPR_CAP_= VSX]); +/* Used to generate the migration field and needed function for a spapr ca= p */ +#define SPAPR_CAP_MIG_STATE(cap, ccap) \ +static bool spapr_cap_##cap##_needed(void *opaque) \ +{ \ + sPAPRMachineState *spapr =3D opaque; \ + \ + return spapr->cmd_line_caps[SPAPR_CAP_##ccap] && \ + (spapr->eff.caps[SPAPR_CAP_##ccap] !=3D \ + spapr->def.caps[SPAPR_CAP_##ccap]); \ +} \ + \ +const VMStateDescription vmstate_spapr_cap_##cap =3D { \ + .name =3D "spapr/cap/" #cap, \ + .version_id =3D 1, \ + .minimum_version_id =3D 1, \ + .needed =3D spapr_cap_##cap##_needed, \ + .fields =3D (VMStateField[]) { \ + VMSTATE_UINT8(mig.caps[SPAPR_CAP_##ccap], \ + sPAPRMachineState), \ + VMSTATE_END_OF_LIST() \ + }, \ } =20 -const VMStateDescription vmstate_spapr_cap_vsx =3D { - .name =3D "spapr/cap/vsx", - .version_id =3D 1, - .minimum_version_id =3D 1, - .needed =3D spapr_cap_vsx_needed, - .fields =3D (VMStateField[]) { - VMSTATE_UINT8(mig.caps[SPAPR_CAP_VSX], sPAPRMachineState), - VMSTATE_END_OF_LIST() - }, -}; - -static bool spapr_cap_dfp_needed(void *opaque) -{ - sPAPRMachineState *spapr =3D opaque; - - return spapr->cmd_line_caps[SPAPR_CAP_DFP] && - (spapr->eff.caps[SPAPR_CAP_DFP] !=3D spapr->def.caps[SPAPR_CAP_= DFP]); -} - -const VMStateDescription vmstate_spapr_cap_dfp =3D { - .name =3D "spapr/cap/dfp", - .version_id =3D 1, - .minimum_version_id =3D 1, - .needed =3D spapr_cap_dfp_needed, - .fields =3D (VMStateField[]) { - VMSTATE_UINT8(mig.caps[SPAPR_CAP_DFP], sPAPRMachineState), - VMSTATE_END_OF_LIST() - }, -}; +SPAPR_CAP_MIG_STATE(htm, HTM); +SPAPR_CAP_MIG_STATE(vsx, VSX); +SPAPR_CAP_MIG_STATE(dfp, DFP); =20 void spapr_caps_reset(sPAPRMachineState *spapr) { --=20 2.13.6 From nobody Fri May 3 02:41:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516338700996233.8039935629506; Thu, 18 Jan 2018 21:11:40 -0800 (PST) Received: from localhost ([::1]:52675 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOxo-0008LZ-5i for importer@patchew.org; Fri, 19 Jan 2018 00:11:40 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60286) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOn4-0007V9-Kv for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecOn3-0004rB-Kd for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:34 -0500 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:35812) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ecOmx-0004om-WC; Fri, 19 Jan 2018 00:00:28 -0500 Received: by mail-pf0-x242.google.com with SMTP id t12so545371pfg.2; Thu, 18 Jan 2018 21:00:27 -0800 (PST) Received: from surajjs1.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id i128sm14653163pfg.83.2018.01.18.21.00.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 21:00:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mEg+JNdllWDH9x7o5VO2+CjyvHIGVOgiOqa5LtLQzMA=; b=WJaeN3Qucl/8K1l3UiFx7eRm13CZiksmi37HLDXUCN/Za0VUKAZjN2UsTfhIWdoTLN P1psshPkIxcPtcwRa8unnzayOkd/fk7OyC+XMqtyZ8UyG00wI6CUSGdyFbaN9l1XnAko 4YXoAlTo0RXhxopWSFg0lmmV+9aLPHFdjAIIDeAOTeBn7X0PCKpBKxeRkk5IxQ/Sr2Gw h8IXt3tjNRRELrZxGE4oDWIziC+33yE/Y7WzXlFbey+hhGXqLv4jlv7hWesbTI6QQ5Hd p7Eq1IUwcWGH5pUebOogjuvUvyxMq4OGaSFk7H+r8b9sHnkmHq0amA+ITAt1ioAw8JOw WNDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mEg+JNdllWDH9x7o5VO2+CjyvHIGVOgiOqa5LtLQzMA=; b=pfRX1TtJBVb6+KWWmW55A2Mbgq+a3YC0bNtkn0k6BzsUOdJUn0IQ+T2Yiau2HSnWdt jYlOmWMe0FmvZ9kJYSREasWOp21a6kLFSHVui5Sw4aADBD6p15Zhd8vs6nq8Wu+BDKJd OJ+3wIlTMiauP3RIv3L6l54cnpOQzHkPeZs0GSr4fdoNBw2WrZO+X+0qLo0Rq3rHaCq9 3ZVgGyGeA6dgZzi96GFgF5YuxW0eGuMJfZ4eti33nVXt+H1sR+WrvF4Gp+JAX/kOOCU4 rWTa8qZTgDZfp5WZzo5EFJkgMqkFxnfQPGml9cRtn7Bl0RoTODZb66kAtNkZV441a4m8 pNLg== X-Gm-Message-State: AKwxytc08LuhCnFp8H7/D4lDQfQ5Sf3IxuWMzojbaUgFfvZc7soCtO9/ zLF3+/9WFR8exIO7JUD/2gpByvew X-Google-Smtp-Source: ACJfBotMpscWp6k1AXwpUuC01Jv1Xy8XcsHI+nwqSKaxbL14uWYtPxp5TEduVXhiDsmHaUJd45xnIw== X-Received: by 2002:a17:902:828c:: with SMTP id y12-v6mr957112pln.145.1516338026837; Thu, 18 Jan 2018 21:00:26 -0800 (PST) From: Suraj Jitindar Singh To: qemu-ppc@nongnu.org Date: Fri, 19 Jan 2018 16:00:01 +1100 Message-Id: <20180119050005.29392-4-sjitindarsingh@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180119050005.29392-1-sjitindarsingh@gmail.com> References: <20180119050005.29392-1-sjitindarsingh@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [QEMU-PPC] [PATCH V5 3/7] target/ppc/spapr_caps: Add support for tristate spapr_capabilities X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: paulus@ozlabs.org, qemu-devel@nongnu.org, Suraj Jitindar Singh , david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" spapr_caps are used to represent the level of support for various capabilities related to the spapr machine type. Currently there is only support for boolean capabilities. Add support for tristate capabilities by implementing their get/set functions. These capabilities can have the values 0, 1 or 2 corresponding to broken, workaround and fixed. Signed-off-by: Suraj Jitindar Singh --- V4 -> V5: - Add unused directive to fix bisection breakage --- hw/ppc/spapr_caps.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ include/hw/ppc/spapr.h | 4 +++ 2 files changed, 70 insertions(+) diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c index 5d52969bd5..d6f82b18fc 100644 --- a/hw/ppc/spapr_caps.c +++ b/hw/ppc/spapr_caps.c @@ -73,6 +73,72 @@ static void spapr_cap_set_bool(Object *obj, Visitor *v, = const char *name, spapr->eff.caps[cap->index] =3D value ? SPAPR_CAP_ON : SPAPR_CAP_OFF; } =20 +static void __attribute__ ((unused)) spapr_cap_get_tristate(Object *obj, + Visitor *v, + const char *na= me, + void *opaque, + Error **errp) +{ + sPAPRCapabilityInfo *cap =3D opaque; + sPAPRMachineState *spapr =3D SPAPR_MACHINE(obj); + char *val =3D NULL; + uint8_t value =3D spapr_get_cap(spapr, cap->index); + + switch (value) { + case SPAPR_CAP_BROKEN: + val =3D g_strdup("broken"); + break; + case SPAPR_CAP_WORKAROUND: + val =3D g_strdup("workaround"); + break; + case SPAPR_CAP_FIXED: + val =3D g_strdup("fixed"); + break; + default: + error_setg(errp, "Invalid value (%d) for cap-%s", value, cap->name= ); + return; + } + + visit_type_str(v, name, &val, errp); + g_free(val); +} + +static void __attribute__ ((unused)) spapr_cap_set_tristate(Object *obj, + Visitor *v, + const char *na= me, + void *opaque, + Error **errp) +{ + sPAPRCapabilityInfo *cap =3D opaque; + sPAPRMachineState *spapr =3D SPAPR_MACHINE(obj); + char *val; + Error *local_err =3D NULL; + uint8_t value; + + visit_type_str(v, name, &val, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + + if (!strcasecmp(val, "broken")) { + value =3D SPAPR_CAP_BROKEN; + } else if (!strcasecmp(val, "workaround")) { + value =3D SPAPR_CAP_WORKAROUND; + } else if (!strcasecmp(val, "fixed")) { + value =3D SPAPR_CAP_FIXED; + } else { + error_setg(errp, "Invalid capability mode \"%s\" for cap-%s", val, + cap->name); + goto out; + } + + spapr->cmd_line_caps[cap->index] =3D true; + spapr->eff.caps[cap->index] =3D value; +out: + g_free(val); +} + static void cap_htm_apply(sPAPRMachineState *spapr, uint8_t val, Error **e= rrp) { if (!val) { diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index eded0ea57d..61bb3632c4 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -69,6 +69,10 @@ typedef enum { /* Bool Caps */ #define SPAPR_CAP_OFF 0x00 #define SPAPR_CAP_ON 0x01 +/* Broken | Workaround | Fixed Caps */ +#define SPAPR_CAP_BROKEN 0x00 +#define SPAPR_CAP_WORKAROUND 0x01 +#define SPAPR_CAP_FIXED 0x02 =20 typedef struct sPAPRCapabilities sPAPRCapabilities; struct sPAPRCapabilities { --=20 2.13.6 From nobody Fri May 3 02:41:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516338372294748.9705168817226; Thu, 18 Jan 2018 21:06:12 -0800 (PST) Received: from localhost ([::1]:52467 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOsV-0003MI-8v for importer@patchew.org; Fri, 19 Jan 2018 00:06:11 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60315) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOn5-0007Wq-QH for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecOn4-0004rl-RY for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:35 -0500 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:44661) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ecOn0-0004q6-UW; Fri, 19 Jan 2018 00:00:31 -0500 Received: by mail-pf0-x242.google.com with SMTP id m26so530183pfj.11; Thu, 18 Jan 2018 21:00:30 -0800 (PST) Received: from surajjs1.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id i128sm14653163pfg.83.2018.01.18.21.00.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 21:00:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Mo5SwhWD7QMs1hH/sC099MTslZX/Cfi7l6V1DcxjFf4=; b=eyDprReYojcCXXoCeu6bDFhoYr68wtLpvJhGSKqnjPMV+aPCM8eSfUJy3rbQkhNOXK TM7VsBoxUS4O7/lD28rsjCSIVkpeU9DdrOdtxf0wFKLaxjZVmLXV/c8JUnHp06wdeO4S 7mj+XQXqMg9WiMZswNILd0+2I+Eat+0G90b3ApE6mf8nKz7wu4TTqYlJ5uyWYYuLv135 E5rEhR03JHvosJw97bi7Bir5ybRPMMBKROfkyazooS/rfPZ8wCi9sJdCp2Rr3SN24fr6 +UqFPy1JEohN8HwhbX0+E+8nIr6cExjZPDsjO+2mOfYLkbvQsdatc9PDTPgfQp460VOP S5uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Mo5SwhWD7QMs1hH/sC099MTslZX/Cfi7l6V1DcxjFf4=; b=DVVt441b8mWRm8rrhsn3APPrxz+wC39fSiGf2iM69jXWLojveRCwtm9cvE4rjGx5tZ aQmmcpPBOatYvpVorzST/WzGZqVNEiWuctCJkw2mQwYgvhCIMVyrc+BEdFOUwrmH1zcC E77PbZlnUgfAtTsA4p5AbdvGBlq9XVjWFLC+56ra70LYzSdTe/HDtp3tm0Ma11W4Hk7y cocJBUi+j4QjionktnWK3tpENsecspNxR/pqRymFN/VUWytArdUdP/bnjiXzKwh8MIX1 q5V+Ta+Ko9g1spmtuVGZBYpcq4PQVOYVVzJ8tD2pCaGGsRYuaUEP2nEo8KuH4UP9euN3 earw== X-Gm-Message-State: AKwxytfH7bqFzdkyPKyRbUm/ZpZv6/YB125Vns9SFiG1DaDD/9L5KpkL yCDILPrVb3rQJmPASbq8LAvFZ5za X-Google-Smtp-Source: ACJfBotvakQ8USGfla/1odgCtsovbsKZos93pM4vq/hViZeOkIfvx3kVh87fnf6VnhMnCfRgmcto2A== X-Received: by 10.101.66.193 with SMTP id l1mr22188794pgp.17.1516338029636; Thu, 18 Jan 2018 21:00:29 -0800 (PST) From: Suraj Jitindar Singh To: qemu-ppc@nongnu.org Date: Fri, 19 Jan 2018 16:00:02 +1100 Message-Id: <20180119050005.29392-5-sjitindarsingh@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180119050005.29392-1-sjitindarsingh@gmail.com> References: <20180119050005.29392-1-sjitindarsingh@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [QEMU-PPC] [PATCH V5 4/7] target/ppc/spapr_caps: Add new tristate cap safe_cache X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: paulus@ozlabs.org, qemu-devel@nongnu.org, Suraj Jitindar Singh , david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add new tristate cap cap-cfpc to represent the cache flush on privilege change capability. Signed-off-by: Suraj Jitindar Singh Reviewed-by: David Gibson --- V4 -> V5: - Use macro to generate migration state --- hw/ppc/spapr.c | 2 ++ hw/ppc/spapr_caps.c | 36 ++++++++++++++++++++++++++---------- include/hw/ppc/spapr.h | 5 ++++- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 02e45dd010..ff8f1aeb59 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1791,6 +1791,7 @@ static const VMStateDescription vmstate_spapr =3D { &vmstate_spapr_cap_htm, &vmstate_spapr_cap_vsx, &vmstate_spapr_cap_dfp, + &vmstate_spapr_cap_cfpc, NULL } }; @@ -3878,6 +3879,7 @@ static void spapr_machine_class_init(ObjectClass *oc,= void *data) smc->default_caps.caps[SPAPR_CAP_HTM] =3D SPAPR_CAP_OFF; smc->default_caps.caps[SPAPR_CAP_VSX] =3D SPAPR_CAP_ON; smc->default_caps.caps[SPAPR_CAP_DFP] =3D SPAPR_CAP_ON; + smc->default_caps.caps[SPAPR_CAP_CFPC] =3D SPAPR_CAP_BROKEN; spapr_caps_add_properties(smc, &error_abort); } =20 diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c index d6f82b18fc..d53da63b1c 100644 --- a/hw/ppc/spapr_caps.c +++ b/hw/ppc/spapr_caps.c @@ -73,11 +73,8 @@ static void spapr_cap_set_bool(Object *obj, Visitor *v, = const char *name, spapr->eff.caps[cap->index] =3D value ? SPAPR_CAP_ON : SPAPR_CAP_OFF; } =20 -static void __attribute__ ((unused)) spapr_cap_get_tristate(Object *obj, - Visitor *v, - const char *na= me, - void *opaque, - Error **errp) +static void spapr_cap_get_tristate(Object *obj, Visitor *v, const char *na= me, + void *opaque, Error **errp) { sPAPRCapabilityInfo *cap =3D opaque; sPAPRMachineState *spapr =3D SPAPR_MACHINE(obj); @@ -103,11 +100,8 @@ static void __attribute__ ((unused)) spapr_cap_get_tri= state(Object *obj, g_free(val); } =20 -static void __attribute__ ((unused)) spapr_cap_set_tristate(Object *obj, - Visitor *v, - const char *na= me, - void *opaque, - Error **errp) +static void spapr_cap_set_tristate(Object *obj, Visitor *v, const char *na= me, + void *opaque, Error **errp) { sPAPRCapabilityInfo *cap =3D opaque; sPAPRMachineState *spapr =3D SPAPR_MACHINE(obj); @@ -186,6 +180,18 @@ static void cap_dfp_apply(sPAPRMachineState *spapr, ui= nt8_t val, Error **errp) } } =20 +static void cap_safe_cache_apply(sPAPRMachineState *spapr, uint8_t val, + Error **errp) +{ + if (tcg_enabled() && val) { + /* TODO - for now only allow broken for TCG */ + error_setg(errp, "Requested safe cache capability level not suppor= ted by tcg, try a different value for cap-cfpc"); + } else if (kvm_enabled() && (val > kvmppc_get_cap_safe_cache())) { + error_setg(errp, "Requested safe cache capability level not suppor= ted by kvm, try a different value for cap-cfpc"); + } +} + +#define VALUE_DESC_TRISTATE " (broken, workaround, fixed)" =20 sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] =3D { [SPAPR_CAP_HTM] =3D { @@ -215,6 +221,15 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = =3D { .type =3D "bool", .apply =3D cap_dfp_apply, }, + [SPAPR_CAP_CFPC] =3D { + .name =3D "cfpc", + .description =3D "Cache Flush on Privilege Change" VALUE_DESC_TRIS= TATE, + .index =3D SPAPR_CAP_CFPC, + .get =3D spapr_cap_get_tristate, + .set =3D spapr_cap_set_tristate, + .type =3D "string", + .apply =3D cap_safe_cache_apply, + }, }; =20 static sPAPRCapabilities default_caps_with_cpu(sPAPRMachineState *spapr, @@ -320,6 +335,7 @@ const VMStateDescription vmstate_spapr_cap_##cap =3D { = \ SPAPR_CAP_MIG_STATE(htm, HTM); SPAPR_CAP_MIG_STATE(vsx, VSX); SPAPR_CAP_MIG_STATE(dfp, DFP); +SPAPR_CAP_MIG_STATE(cfpc, CFPC); =20 void spapr_caps_reset(sPAPRMachineState *spapr) { diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 61bb3632c4..ff476693d1 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -60,8 +60,10 @@ typedef enum { #define SPAPR_CAP_VSX 0x01 /* Decimal Floating Point */ #define SPAPR_CAP_DFP 0x02 +/* Cache Flush on Privilege Change */ +#define SPAPR_CAP_CFPC 0x03 /* Num Caps */ -#define SPAPR_CAP_NUM (SPAPR_CAP_DFP + 1) +#define SPAPR_CAP_NUM (SPAPR_CAP_CFPC + 1) =20 /* * Capability Values @@ -779,6 +781,7 @@ int spapr_caps_pre_save(void *opaque); extern const VMStateDescription vmstate_spapr_cap_htm; extern const VMStateDescription vmstate_spapr_cap_vsx; extern const VMStateDescription vmstate_spapr_cap_dfp; +extern const VMStateDescription vmstate_spapr_cap_cfpc; =20 static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap) { --=20 2.13.6 From nobody Fri May 3 02:41:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516338524294726.2748950107293; Thu, 18 Jan 2018 21:08:44 -0800 (PST) Received: from localhost ([::1]:52624 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOux-0005jO-CP for importer@patchew.org; Fri, 19 Jan 2018 00:08:43 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60339) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOn7-0007Xm-1R for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecOn6-0004sF-3m for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:37 -0500 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:45169) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ecOn3-0004qm-HG; Fri, 19 Jan 2018 00:00:33 -0500 Received: by mail-pf0-x242.google.com with SMTP id a88so525627pfe.12; Thu, 18 Jan 2018 21:00:33 -0800 (PST) Received: from surajjs1.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id i128sm14653163pfg.83.2018.01.18.21.00.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 21:00:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZR6OGJajwFmEguoFBQ2woiEVMOqz6SbpWhMNx5/c7M4=; b=L4CBbi7PI51ZJK+LB5utumGGrnTtwiv5DxR9AgcZstkPO6v3OImflXmRjzfjRzW1FQ kTognDfmePhxL6IoOmGt55AA8zt2cvLh50Hj4L36Le06hxZ2y7iU7cKtdreR92bUaB/C DdHBlmUC0vTI4VnJUDdVz+IzQUMh2kSFRWlCx438VfegJuFY+qI/vMiTrji5ianFLFFg GC4mKoMQJgmZ3GvQMEwv6lPwRO2sIPiDSYr6mSYrwLHyh73IFvqs+v4p7mRz9P7l1kZX 50UQQh5tWw21MbHRRW8f06DOba8hEMyzEp1i+/4NtoB8AGm5FA0HWSItiQllOHF9QaX0 A0JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZR6OGJajwFmEguoFBQ2woiEVMOqz6SbpWhMNx5/c7M4=; b=p+CSvSGv9hhwgwZKeZGzjZ5W6LmMrBMG5+ZcDVkH3gaeXRo+s/8Z6PGZgeNXyEQpQn GPVxqampoQEZjMNwWfHPSj96KENvnLkvWQjPjB8ngBsMaX4sAnU9evcRQmbDXUIV07Ff dh/A+VIzSeEQXAmgjhvWYiYJoDq2zJv3bvAPQh/zzvLSjPaeJ7YtrDyzyx+9Oh0y/XBQ S05qIF5a2EzlJlOkA9fpYw/gZ/AgPi3IOc6aZoTerMVfpEN6mcPiChC744jTQjpVmfZY QfW+URnTjnGXDspF+A4RXXMJasbFmhvgMtIHgAHpEk/+n673dYrzNoWPzty8q9IKqJwm SrFA== X-Gm-Message-State: AKwxyte1fLtBJoPU3EHI9gpvY//lbZ465W/e6fcDLLY/BzKa8BCBFpx6 xcRfWgY6rcpswNyfE6T70hVmvCSP X-Google-Smtp-Source: ACJfBovXWQ3mKCUdA+g8fdzGTEzIOhsgcE8lcQBeseArOSEaFWuNXMIncuua3W4w67fSbgeBLrbAzA== X-Received: by 10.101.77.8 with SMTP id i8mr12147318pgt.308.1516338032442; Thu, 18 Jan 2018 21:00:32 -0800 (PST) From: Suraj Jitindar Singh To: qemu-ppc@nongnu.org Date: Fri, 19 Jan 2018 16:00:03 +1100 Message-Id: <20180119050005.29392-6-sjitindarsingh@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180119050005.29392-1-sjitindarsingh@gmail.com> References: <20180119050005.29392-1-sjitindarsingh@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [QEMU-PPC] [PATCH V5 5/7] target/ppc/spapr_caps: Add new tristate cap safe_bounds_check X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: paulus@ozlabs.org, qemu-devel@nongnu.org, Suraj Jitindar Singh , david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add new tristate cap cap-sbbc to represent the speculation barrier bounds checking capability. Signed-off-by: Suraj Jitindar Singh Reviewed-by: David Gibson --- V4 -> V5: - Use macro to generate migration state --- hw/ppc/spapr.c | 2 ++ hw/ppc/spapr_caps.c | 21 +++++++++++++++++++++ include/hw/ppc/spapr.h | 5 ++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index ff8f1aeb59..4cbed31b16 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1792,6 +1792,7 @@ static const VMStateDescription vmstate_spapr =3D { &vmstate_spapr_cap_vsx, &vmstate_spapr_cap_dfp, &vmstate_spapr_cap_cfpc, + &vmstate_spapr_cap_sbbc, NULL } }; @@ -3880,6 +3881,7 @@ static void spapr_machine_class_init(ObjectClass *oc,= void *data) smc->default_caps.caps[SPAPR_CAP_VSX] =3D SPAPR_CAP_ON; smc->default_caps.caps[SPAPR_CAP_DFP] =3D SPAPR_CAP_ON; smc->default_caps.caps[SPAPR_CAP_CFPC] =3D SPAPR_CAP_BROKEN; + smc->default_caps.caps[SPAPR_CAP_SBBC] =3D SPAPR_CAP_BROKEN; spapr_caps_add_properties(smc, &error_abort); } =20 diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c index d53da63b1c..ce1f74f26d 100644 --- a/hw/ppc/spapr_caps.c +++ b/hw/ppc/spapr_caps.c @@ -191,6 +191,17 @@ static void cap_safe_cache_apply(sPAPRMachineState *sp= apr, uint8_t val, } } =20 +static void cap_safe_bounds_check_apply(sPAPRMachineState *spapr, uint8_t = val, + Error **errp) +{ + if (tcg_enabled() && val) { + /* TODO - for now only allow broken for TCG */ + error_setg(errp, "Requested safe bounds check capability level not= supported by tcg, try a different value for cap-sbbc"); + } else if (kvm_enabled() && (val > kvmppc_get_cap_safe_bounds_check())= ) { + error_setg(errp, "Requested safe bounds check capability level not= supported by kvm, try a different value for cap-sbbc"); + } +} + #define VALUE_DESC_TRISTATE " (broken, workaround, fixed)" =20 sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] =3D { @@ -230,6 +241,15 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = =3D { .type =3D "string", .apply =3D cap_safe_cache_apply, }, + [SPAPR_CAP_SBBC] =3D { + .name =3D "sbbc", + .description =3D "Speculation Barrier Bounds Checking" VALUE_DESC_= TRISTATE, + .index =3D SPAPR_CAP_SBBC, + .get =3D spapr_cap_get_tristate, + .set =3D spapr_cap_set_tristate, + .type =3D "string", + .apply =3D cap_safe_bounds_check_apply, + }, }; =20 static sPAPRCapabilities default_caps_with_cpu(sPAPRMachineState *spapr, @@ -336,6 +356,7 @@ SPAPR_CAP_MIG_STATE(htm, HTM); SPAPR_CAP_MIG_STATE(vsx, VSX); SPAPR_CAP_MIG_STATE(dfp, DFP); SPAPR_CAP_MIG_STATE(cfpc, CFPC); +SPAPR_CAP_MIG_STATE(sbbc, SBBC); =20 void spapr_caps_reset(sPAPRMachineState *spapr) { diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index ff476693d1..c65be62e92 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -62,8 +62,10 @@ typedef enum { #define SPAPR_CAP_DFP 0x02 /* Cache Flush on Privilege Change */ #define SPAPR_CAP_CFPC 0x03 +/* Speculation Barrier Bounds Checking */ +#define SPAPR_CAP_SBBC 0x04 /* Num Caps */ -#define SPAPR_CAP_NUM (SPAPR_CAP_CFPC + 1) +#define SPAPR_CAP_NUM (SPAPR_CAP_SBBC + 1) =20 /* * Capability Values @@ -782,6 +784,7 @@ extern const VMStateDescription vmstate_spapr_cap_htm; extern const VMStateDescription vmstate_spapr_cap_vsx; extern const VMStateDescription vmstate_spapr_cap_dfp; extern const VMStateDescription vmstate_spapr_cap_cfpc; +extern const VMStateDescription vmstate_spapr_cap_sbbc; =20 static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap) { --=20 2.13.6 From nobody Fri May 3 02:41:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516338668752965.4128788901731; Thu, 18 Jan 2018 21:11:08 -0800 (PST) Received: from localhost ([::1]:52666 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOxB-0007rW-6c for importer@patchew.org; Fri, 19 Jan 2018 00:11:01 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60378) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOn9-0007Zw-QL for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecOn8-0004sy-PL for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:39 -0500 Received: from mail-pg0-x243.google.com ([2607:f8b0:400e:c05::243]:43352) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ecOn6-0004ry-8q; Fri, 19 Jan 2018 00:00:36 -0500 Received: by mail-pg0-x243.google.com with SMTP id n17so551187pgf.10; Thu, 18 Jan 2018 21:00:36 -0800 (PST) Received: from surajjs1.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id i128sm14653163pfg.83.2018.01.18.21.00.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 21:00:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Cl9RYPccYnb2JBejPYt/sm0mT5m438pGlb48VHPljnk=; b=XjmepsnLDaTP/EtBF2bL8/UDWrL1DGt2Yplap9Px7aE4WYjTWAhRLylmzbwo47Yq4n hX2XS5WHf9iSD3hZPmPmfI+Az+5cf7fMOVLjWk243wdAGUNkaobS10MpoXYM+iOtGdlN Qbi15TwYqF4bS+TJm4zP9reyvSRAJr5e22xw/oEsOnGKZEKSVN5fkJAMRX8uNPYXKUe0 lD4LAziQtWPpG1xDkcGG00fItmEVRWn0PHqfaBl9r7ZaXCM2nqw93EwTc0q4FDQB1v6c AWmc1Io7crYvfvgC8a0nH0vTXp5mZM4dSfxjtnurr4U6wHFZHU7IbE7elGhnX4qfq78B LnHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Cl9RYPccYnb2JBejPYt/sm0mT5m438pGlb48VHPljnk=; b=tWiucfYqHY2xYPpO7+qWSbyUvYxAI1eZ6lfmW7esTVa+fkuegtZlj5ybAEf14f8cto vxtPWrTdfX9B1YwLt/X3vRycV2Heo0ej8CTg9IXf9JAw9EJo74t22/j3kR/RhuXQzazg 3ognj3QlWd1jTpLwHh0sT7KxEDUA6qUNwgnXdUy5f8s35HSkPypQqr4mklhsYlDas1nT Qol9q72m0MbYkO/Got6Lc8fwmFqil3/nSpKuhqabnoPj6XkCbmS1oPbY1LnknAS3GROy biYh/BPixS/7vC41CStuMbBgIlKOXqmJRI5iYoE88sU1mtAyEod1pA0Iya/HR5a+zxWX 23pQ== X-Gm-Message-State: AKwxytehZ+4WF3sb3ZVpVIy5R3taSscgt/wEqWKz7k3eZZLqUofofaer l19zof7Dx1HgiRVdcseRAugELkFM X-Google-Smtp-Source: ACJfBovIVjqbmpiBKJvFwZ0JWPOM/trbGAH2gW4lcUbLubTKDTn9LKglHFI+6ymsr4N02PnLU8vOow== X-Received: by 10.101.88.66 with SMTP id s2mr17520701pgr.341.1516338035173; Thu, 18 Jan 2018 21:00:35 -0800 (PST) From: Suraj Jitindar Singh To: qemu-ppc@nongnu.org Date: Fri, 19 Jan 2018 16:00:04 +1100 Message-Id: <20180119050005.29392-7-sjitindarsingh@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180119050005.29392-1-sjitindarsingh@gmail.com> References: <20180119050005.29392-1-sjitindarsingh@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::243 Subject: [Qemu-devel] [QEMU-PPC] [PATCH V5 6/7] target/ppc/spapr_caps: Add new tristate cap safe_indirect_branch X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: paulus@ozlabs.org, qemu-devel@nongnu.org, Suraj Jitindar Singh , david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add new tristate cap cap-ibs to represent the indirect branch serialisation capability. Signed-off-by: Suraj Jitindar Singh Reviewed-by: David Gibson --- V4 -> V5: - Use macro to generate migration state --- hw/ppc/spapr.c | 2 ++ hw/ppc/spapr_caps.c | 21 +++++++++++++++++++++ include/hw/ppc/spapr.h | 5 ++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 4cbed31b16..5544eeb853 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1793,6 +1793,7 @@ static const VMStateDescription vmstate_spapr =3D { &vmstate_spapr_cap_dfp, &vmstate_spapr_cap_cfpc, &vmstate_spapr_cap_sbbc, + &vmstate_spapr_cap_ibs, NULL } }; @@ -3882,6 +3883,7 @@ static void spapr_machine_class_init(ObjectClass *oc,= void *data) smc->default_caps.caps[SPAPR_CAP_DFP] =3D SPAPR_CAP_ON; smc->default_caps.caps[SPAPR_CAP_CFPC] =3D SPAPR_CAP_BROKEN; smc->default_caps.caps[SPAPR_CAP_SBBC] =3D SPAPR_CAP_BROKEN; + smc->default_caps.caps[SPAPR_CAP_IBS] =3D SPAPR_CAP_BROKEN; spapr_caps_add_properties(smc, &error_abort); } =20 diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c index ce1f74f26d..62efdaee38 100644 --- a/hw/ppc/spapr_caps.c +++ b/hw/ppc/spapr_caps.c @@ -202,6 +202,17 @@ static void cap_safe_bounds_check_apply(sPAPRMachineSt= ate *spapr, uint8_t val, } } =20 +static void cap_safe_indirect_branch_apply(sPAPRMachineState *spapr, + uint8_t val, Error **errp) +{ + if (tcg_enabled() && val) { + /* TODO - for now only allow broken for TCG */ + error_setg(errp, "Requested safe indirect branch capability level = not supported by tcg, try a different value for cap-ibs"); + } else if (kvm_enabled() && (val > kvmppc_get_cap_safe_indirect_branch= ())) { + error_setg(errp, "Requested safe indirect branch capability level = not supported by kvm, try a different value for cap-ibs"); + } +} + #define VALUE_DESC_TRISTATE " (broken, workaround, fixed)" =20 sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] =3D { @@ -250,6 +261,15 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = =3D { .type =3D "string", .apply =3D cap_safe_bounds_check_apply, }, + [SPAPR_CAP_IBS] =3D { + .name =3D "ibs", + .description =3D "Indirect Branch Serialisation" VALUE_DESC_TRISTA= TE, + .index =3D SPAPR_CAP_IBS, + .get =3D spapr_cap_get_tristate, + .set =3D spapr_cap_set_tristate, + .type =3D "string", + .apply =3D cap_safe_indirect_branch_apply, + }, }; =20 static sPAPRCapabilities default_caps_with_cpu(sPAPRMachineState *spapr, @@ -357,6 +377,7 @@ SPAPR_CAP_MIG_STATE(vsx, VSX); SPAPR_CAP_MIG_STATE(dfp, DFP); SPAPR_CAP_MIG_STATE(cfpc, CFPC); SPAPR_CAP_MIG_STATE(sbbc, SBBC); +SPAPR_CAP_MIG_STATE(ibs, IBS); =20 void spapr_caps_reset(sPAPRMachineState *spapr) { diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index c65be62e92..549d7a4134 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -64,8 +64,10 @@ typedef enum { #define SPAPR_CAP_CFPC 0x03 /* Speculation Barrier Bounds Checking */ #define SPAPR_CAP_SBBC 0x04 +/* Indirect Branch Serialisation */ +#define SPAPR_CAP_IBS 0x05 /* Num Caps */ -#define SPAPR_CAP_NUM (SPAPR_CAP_SBBC + 1) +#define SPAPR_CAP_NUM (SPAPR_CAP_IBS + 1) =20 /* * Capability Values @@ -785,6 +787,7 @@ extern const VMStateDescription vmstate_spapr_cap_vsx; extern const VMStateDescription vmstate_spapr_cap_dfp; extern const VMStateDescription vmstate_spapr_cap_cfpc; extern const VMStateDescription vmstate_spapr_cap_sbbc; +extern const VMStateDescription vmstate_spapr_cap_ibs; =20 static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap) { --=20 2.13.6 From nobody Fri May 3 02:41:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516339112204478.7457145645301; Thu, 18 Jan 2018 21:18:32 -0800 (PST) Received: from localhost ([::1]:53295 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecP4R-0005N9-BJ for importer@patchew.org; Fri, 19 Jan 2018 00:18:31 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60407) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecOnF-0007fc-Iq for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecOnE-0004ty-KT for qemu-devel@nongnu.org; Fri, 19 Jan 2018 00:00:45 -0500 Received: from mail-pg0-x244.google.com ([2607:f8b0:400e:c05::244]:40625) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ecOn9-0004su-A7; Fri, 19 Jan 2018 00:00:39 -0500 Received: by mail-pg0-x244.google.com with SMTP id g16so558456pgn.7; Thu, 18 Jan 2018 21:00:38 -0800 (PST) Received: from surajjs1.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id i128sm14653163pfg.83.2018.01.18.21.00.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 21:00:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oRr9tacZ2WbFsP/oLcwfTnHJyR01rux/tA+WuyGPvGY=; b=ruYmnoxT+opLDeb5a58M9w0YfJS94TdEfIbK60qRUFgJ/zGJbH3hFLbtJa8lIWVcgL y+znMJ0n/BjTAryl7l+p4LiBTBJLGPOQsIUdaaklTn/sCf031xif/X0c/y6261+tAC8Y 2Lg+Uq087eBALTFdYX4QLXyLJKykCMAYkwtBLn+EfCzSupgj96PQHRzKLxjJZFfvq8xc WQ9RgeZgsGOQZoi+S+QXogJ7gG6cbNoeQUP62P1Y9TTNe1dmM+HeEK+u/j7IK+F83GEa LL9DIM9MC4WiOUDc5KnzADdpYsQ0R1NiYeRvBwNget8YwzCRwzXVINPZqMqLvE+x6BbX eFDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oRr9tacZ2WbFsP/oLcwfTnHJyR01rux/tA+WuyGPvGY=; b=gKGJzXsIfYPUnsFyEa6O+93/OciDg5SeJzhgHVFWi0VqVyRp27OSCCoAfl5ifBmLgw WOWTgrOZ9X5UC1i+M617/5nV9/hKW1sJZGVHUG4U1dVZm4lHMb9KAJWei4+wjEANrQ8U zQjxrTjLO0KhmGNzPE6VTTT5x7yrcf6eTZOZc5JBWXbKAEa/8zhv9xJqiFlBglmOVTC/ sc0oMJtAYy0+flVsJc0FdZdw4vKQq61kQLYq2A6Jr9T7SO/v+6ozjxw3T8eweVdgfbp8 kEPwqMRRsgQuhg/xnrmY4pTcRb2mJMCqG7EIbm9QDEVb54tPQ3oVH30/zvapycGpq4gt C20Q== X-Gm-Message-State: AKwxytet+5jkQvZAzKJvUPIPvyR/OQvk8YPSn2+6yOquuOEkQaXh/NtX 5HlwcHQDCFhS+/wrmNEU7UbrAyIV X-Google-Smtp-Source: ACJfBossTqWd1b75gSdtKulxXGasMb6Cv/PN+TCUJsgop0+mc1QEcK4g70CIsMzgjagm47Au7ah2nQ== X-Received: by 2002:a17:902:5853:: with SMTP id f19-v6mr975025plj.383.1516338037960; Thu, 18 Jan 2018 21:00:37 -0800 (PST) From: Suraj Jitindar Singh To: qemu-ppc@nongnu.org Date: Fri, 19 Jan 2018 16:00:05 +1100 Message-Id: <20180119050005.29392-8-sjitindarsingh@gmail.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180119050005.29392-1-sjitindarsingh@gmail.com> References: <20180119050005.29392-1-sjitindarsingh@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::244 Subject: [Qemu-devel] [QEMU-PPC] [PATCH V5 7/7] target/ppc/spapr: Add H-Call H_GET_CPU_CHARACTERISTICS X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: paulus@ozlabs.org, qemu-devel@nongnu.org, Suraj Jitindar Singh , david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 --- V4 -> V5: - Assert for invalid cap value --- hw/ppc/spapr_hcall.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ include/hw/ppc/spapr.h | 1 + 2 files changed, 59 insertions(+) diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 51eba52e86..4d0e6eb0cf 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -1654,6 +1654,60 @@ static target_ulong h_client_architecture_support(Po= werPCCPU *cpu, return H_SUCCESS; } =20 +static target_ulong h_get_cpu_characteristics(PowerPCCPU *cpu, + sPAPRMachineState *spapr, + target_ulong opcode, + target_ulong *args) +{ + uint64_t characteristics =3D H_CPU_CHAR_HON_BRANCH_HINTS & + ~H_CPU_CHAR_THR_RECONF_TRIG; + uint64_t behaviour =3D H_CPU_BEHAV_FAVOUR_SECURITY; + uint8_t safe_cache =3D spapr_get_cap(spapr, SPAPR_CAP_CFPC); + uint8_t safe_bounds_check =3D spapr_get_cap(spapr, SPAPR_CAP_SBBC); + uint8_t safe_indirect_branch =3D spapr_get_cap(spapr, SPAPR_CAP_IBS); + + switch (safe_cache) { + case SPAPR_CAP_WORKAROUND: + characteristics |=3D H_CPU_CHAR_L1D_FLUSH_ORI30; + characteristics |=3D H_CPU_CHAR_L1D_FLUSH_TRIG2; + characteristics |=3D H_CPU_CHAR_L1D_THREAD_PRIV; + behaviour |=3D H_CPU_BEHAV_L1D_FLUSH_PR; + break; + case SPAPR_CAP_FIXED: + break; + default: /* broken */ + assert(safe_cache =3D=3D SPAPR_CAP_BROKEN); + behaviour |=3D H_CPU_BEHAV_L1D_FLUSH_PR; + break; + } + + switch (safe_bounds_check) { + case SPAPR_CAP_WORKAROUND: + characteristics |=3D H_CPU_CHAR_SPEC_BAR_ORI31; + behaviour |=3D H_CPU_BEHAV_BNDS_CHK_SPEC_BAR; + break; + case SPAPR_CAP_FIXED: + break; + default: /* broken */ + assert(safe_bounds_check =3D=3D SPAPR_CAP_BROKEN); + behaviour |=3D H_CPU_BEHAV_BNDS_CHK_SPEC_BAR; + break; + } + + switch (safe_indirect_branch) { + case SPAPR_CAP_FIXED: + characteristics |=3D H_CPU_CHAR_BCCTRL_SERIALISED; + default: /* broken */ + assert(safe_indirect_branch =3D=3D SPAPR_CAP_BROKEN); + break; + } + + args[0] =3D characteristics; + args[1] =3D 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_HCA= LL_BASE + 1]; =20 @@ -1733,6 +1787,10 @@ 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= ); =20 + /* 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- differenci= ate * here between the "CI" and the "CACHE" variants, they will use whate= ver * 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 --=20 2.13.6