From: Thomas Huth <thuth@redhat.com>
To: Pierre Morel <pmorel@linux.ibm.com>, qemu-s390x@nongnu.org
Cc: qemu-devel@nongnu.org, borntraeger@de.ibm.com,
pasic@linux.ibm.com, richard.henderson@linaro.org,
david@redhat.com, cohuck@redhat.com, mst@redhat.com,
pbonzini@redhat.com, kvm@vger.kernel.org, ehabkost@redhat.com,
marcel.apfelbaum@gmail.com, eblake@redhat.com, armbru@redhat.com,
seiden@linux.ibm.com, nrb@linux.ibm.com, frankja@linux.ibm.com
Subject: Re: [PATCH v7 10/13] s390x: kvm: topology: interception of PTF instruction
Date: Tue, 24 May 2022 13:27:26 +0200 [thread overview]
Message-ID: <87783273-6abd-f31e-f5f3-a5cf21b1594f@redhat.com> (raw)
In-Reply-To: <20220420115745.13696-11-pmorel@linux.ibm.com>
On 20/04/2022 13.57, Pierre Morel wrote:
> When the host supports the CPU topology facility, the PTF
> instruction with function code 2 is interpreted by the SIE,
> provided that the userland hypervizor activates the interpretation
> by using the KVM_CAP_S390_CPU_TOPOLOGY KVM extension.
>
> The PTF instructions with function code 0 and 1 are intercepted
> and must be emulated by the userland hypervizor.
>
> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> ---
> hw/s390x/s390-virtio-ccw.c | 50 ++++++++++++++++++++++++++++++
> include/hw/s390x/s390-virtio-ccw.h | 6 ++++
> target/s390x/kvm/kvm.c | 14 +++++++++
> 3 files changed, 70 insertions(+)
>
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 93d1a43583..1ffaddebcc 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
Why do you put this into s390-virtio-ccw.c and not into cpu_topology.c ?
> @@ -434,6 +434,56 @@ static void s390_pv_prepare_reset(S390CcwMachineState *ms)
> s390_pv_prep_reset();
> }
>
> +/*
> + * s390_handle_ptf:
> + *
> + * @register 1: contains the function code
> + *
> + * Function codes 0 and 1 handle the CPU polarization.
> + * We assume an horizontal topology, the only one supported currently
> + * by Linux, consequently we answer to function code 0, requesting
> + * horizontal polarization that it is already the current polarization
> + * and reject vertical polarization request without further explanation.
> + *
> + * Function code 2 is handling topology changes and is interpreted
> + * by the SIE.
> + */
> +int s390_handle_ptf(S390CPU *cpu, uint8_t r1, uintptr_t ra)
> +{
> + CPUS390XState *env = &cpu->env;
> + uint64_t reg = env->regs[r1];
> + uint8_t fc = reg & S390_TOPO_FC_MASK;
> +
> + if (!s390_has_feat(S390_FEAT_CONFIGURATION_TOPOLOGY)) {
> + s390_program_interrupt(env, PGM_OPERATION, ra);
> + return 0;
> + }
> +
> + if (env->psw.mask & PSW_MASK_PSTATE) {
> + s390_program_interrupt(env, PGM_PRIVILEGED, ra);
> + return 0;
> + }
> +
> + if (reg & ~S390_TOPO_FC_MASK) {
> + s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + return 0;
> + }
> +
> + switch (fc) {
> + case 0: /* Horizontal polarization is already set */
> + env->regs[r1] |= S390_PTF_REASON_DONE;
> + return 2;
> + case 1: /* Vertical polarization is not supported */
> + env->regs[r1] |= S390_PTF_REASON_NONE;
> + return 2;
> + default:
> + /* Note that fc == 2 is interpreted by the SIE */
> + s390_program_interrupt(env, PGM_SPECIFICATION, ra);
> + }
> +
> + return 0;
> +}
> +
> static void s390_machine_reset(MachineState *machine)
> {
> S390CcwMachineState *ms = S390_CCW_MACHINE(machine);
> diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h
> index 3331990e02..ac4b4a92e7 100644
> --- a/include/hw/s390x/s390-virtio-ccw.h
> +++ b/include/hw/s390x/s390-virtio-ccw.h
> @@ -30,6 +30,12 @@ struct S390CcwMachineState {
> uint8_t loadparm[8];
> };
>
> +#define S390_PTF_REASON_NONE (0x00 << 8)
> +#define S390_PTF_REASON_DONE (0x01 << 8)
> +#define S390_PTF_REASON_BUSY (0x02 << 8)
> +#define S390_TOPO_FC_MASK 0xffUL
> +int s390_handle_ptf(S390CPU *cpu, uint8_t r1, uintptr_t ra);
> +
> struct S390CcwMachineClass {
> /*< private >*/
> MachineClass parent_class;
> diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c
> index 27b3fbfa09..e3792e52c2 100644
> --- a/target/s390x/kvm/kvm.c
> +++ b/target/s390x/kvm/kvm.c
> @@ -98,6 +98,7 @@
>
> #define PRIV_B9_EQBS 0x9c
> #define PRIV_B9_CLP 0xa0
> +#define PRIV_B9_PTF 0xa2
> #define PRIV_B9_PCISTG 0xd0
> #define PRIV_B9_PCILG 0xd2
> #define PRIV_B9_RPCIT 0xd3
> @@ -1453,6 +1454,16 @@ static int kvm_mpcifc_service_call(S390CPU *cpu, struct kvm_run *run)
> }
> }
>
> +static int kvm_handle_ptf(S390CPU *cpu, struct kvm_run *run)
> +{
> + uint8_t r1 = (run->s390_sieic.ipb >> 20) & 0x0f;
> + int ret;
> +
> + ret = s390_handle_ptf(cpu, r1, RA_IGNORED);
> + setcc(cpu, ret);
So you're still setting the CC in case the s390_handle_ptf() function
injected a program interrupt? ... feels wrong. Maybe the CC should be set
within s390_handle_ptf() instead?
Thomas
> + return 0;
> +}
> +
> static int handle_b9(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
> {
> int r = 0;
> @@ -1470,6 +1481,9 @@ static int handle_b9(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
> case PRIV_B9_RPCIT:
> r = kvm_rpcit_service_call(cpu, run);
> break;
> + case PRIV_B9_PTF:
> + r = kvm_handle_ptf(cpu, run);
> + break;
> case PRIV_B9_EQBS:
> /* just inject exception */
> r = -1;
next prev parent reply other threads:[~2022-05-24 11:27 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-20 11:57 [PATCH v7 00/13] s390x: CPU Topology Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 01/13] Update linux headers Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 02/13] vfio: tolerate migration protocol v1 uapi renames Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 03/13] s390x: topology: CPU topology objects and structures Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-05-19 10:45 ` Thomas Huth
2022-05-19 15:22 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 04/13] s390x: topology: implementating Store Topology System Information Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-05-24 10:59 ` Thomas Huth
2022-05-25 8:16 ` Pierre Morel
2022-05-24 11:08 ` Thomas Huth
2022-05-25 8:18 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 05/13] s390x: topology: Adding books to CPU topology Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 06/13] s390x: topology: Adding books to STSI Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-05-24 11:07 ` Thomas Huth
2022-05-25 8:17 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 07/13] s390x: topology: Adding drawers to CPU topology Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 08/13] s390x: topology: Adding drawers to STSI Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-05-24 11:10 ` Thomas Huth
2022-05-25 8:19 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 09/13] s390x: topology: implementing numa for the s390x topology Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 10/13] s390x: kvm: topology: interception of PTF instruction Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-05-24 11:27 ` Thomas Huth [this message]
2022-05-25 8:22 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 11/13] s390x: topology: resetting the Topology-Change-Report Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 12/13] s390x: CPU topology: CPU topology migration Pierre Morel
2022-04-20 11:57 ` Pierre Morel
2022-05-24 11:32 ` Thomas Huth
2022-05-25 8:23 ` Pierre Morel
2022-04-20 11:57 ` [PATCH v7 13/13] s390x: topology: activating CPU topology Pierre Morel
2022-04-20 11:57 ` Pierre Morel
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=87783273-6abd-f31e-f5f3-a5cf21b1594f@redhat.com \
--to=thuth@redhat.com \
--cc=armbru@redhat.com \
--cc=borntraeger@de.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=eblake@redhat.com \
--cc=ehabkost@redhat.com \
--cc=frankja@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=nrb@linux.ibm.com \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=pmorel@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=seiden@linux.ibm.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.