Pablo Greco e6a3ae
From ad53e96559cfe9d5f1b5518c3c925618e7e1bcc7 Mon Sep 17 00:00:00 2001
Pablo Greco e6a3ae
From: Thomas Huth <thuth@redhat.com>
Pablo Greco e6a3ae
Date: Wed, 18 Sep 2019 14:35:49 +0100
Pablo Greco e6a3ae
Subject: [PATCH 10/22] s390x/cpumodel: Set up CPU model for AQIC interception
Pablo Greco e6a3ae
Pablo Greco e6a3ae
RH-Author: Thomas Huth <thuth@redhat.com>
Pablo Greco e6a3ae
Message-id: <20190918143549.16340-3-thuth@redhat.com>
Pablo Greco e6a3ae
Patchwork-id: 90760
Pablo Greco e6a3ae
O-Subject: [RHEL-8.2.0 qemu-kvm PATCH 2/2] s390x/cpumodel: Set up CPU model for AQIC interception
Pablo Greco e6a3ae
Bugzilla: 1660909
Pablo Greco e6a3ae
RH-Acked-by: David Hildenbrand <david@redhat.com>
Pablo Greco e6a3ae
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
Pablo Greco e6a3ae
RH-Acked-by: Jens Freimann <jfreimann@redhat.com>
Pablo Greco e6a3ae
Pablo Greco e6a3ae
From: Pierre Morel <pmorel@linux.ibm.com>
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Let's add support for the AP-Queue interruption facility to the CPU
Pablo Greco e6a3ae
model.
Pablo Greco e6a3ae
Pablo Greco e6a3ae
The S390_FEAT_AP_QUEUE_INTERRUPT_CONTROL, CPU facility indicates
Pablo Greco e6a3ae
whether the PQAP instruction with the AQIC command is available
Pablo Greco e6a3ae
to the guest.
Pablo Greco e6a3ae
This feature will be enabled only if the AP instructions are
Pablo Greco e6a3ae
available on the linux host and AQIC facility is installed on
Pablo Greco e6a3ae
the host.
Pablo Greco e6a3ae
Pablo Greco e6a3ae
This feature must be turned on from userspace to intercept AP
Pablo Greco e6a3ae
instructions on the KVM guest. The QEMU command line to turn
Pablo Greco e6a3ae
this feature on looks something like this:
Pablo Greco e6a3ae
Pablo Greco e6a3ae
    qemu-system-s390x ... -cpu xxx,apqi=on ...
Pablo Greco e6a3ae
or
Pablo Greco e6a3ae
    ... -cpu host
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Right now AP pass-through devices do not support migration,
Pablo Greco e6a3ae
which means that we do not have to take care of migrating
Pablo Greco e6a3ae
the interrupt data:
Pablo Greco e6a3ae
virsh migrate apguest --live qemu+ssh://root@target.lan/system
Pablo Greco e6a3ae
error: Requested operation is not valid: domain has assigned non-USB host devices
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
Pablo Greco e6a3ae
Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com>
Pablo Greco e6a3ae
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Pablo Greco e6a3ae
Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
Pablo Greco e6a3ae
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Pablo Greco e6a3ae
[rebase to newest qemu and fixup description]
Pablo Greco e6a3ae
Message-Id: <20190705153249.12525-1-borntraeger@de.ibm.com>
Pablo Greco e6a3ae
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Pablo Greco e6a3ae
(cherry picked from commit 9ef2d19e5f5dfdebc9877c77951c28f25c74e000)
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
Pablo Greco e6a3ae
---
Pablo Greco e6a3ae
 target/s390x/cpu_features_def.inc.h | 1 +
Pablo Greco e6a3ae
 target/s390x/cpu_models.c           | 1 +
Pablo Greco e6a3ae
 target/s390x/gen-features.c         | 1 +
Pablo Greco e6a3ae
 3 files changed, 3 insertions(+)
Pablo Greco e6a3ae
Pablo Greco e6a3ae
diff --git a/target/s390x/cpu_features_def.inc.h b/target/s390x/cpu_features_def.inc.h
Pablo Greco e6a3ae
index 011ce4d..dead061 100644
Pablo Greco e6a3ae
--- a/target/s390x/cpu_features_def.inc.h
Pablo Greco e6a3ae
+++ b/target/s390x/cpu_features_def.inc.h
Pablo Greco e6a3ae
@@ -77,6 +77,7 @@ DEF_FEAT(SEMAPHORE_ASSIST, "sema", STFL, 59, "Semaphore-assist facility")
Pablo Greco e6a3ae
 DEF_FEAT(TIME_SLICE_INSTRUMENTATION, "tsi", STFL, 60, "Time-slice Instrumentation facility")
Pablo Greco e6a3ae
 DEF_FEAT(MISC_INSTRUCTION_EXT3, "minste3", STFL, 61, "Miscellaneous-Instruction-Extensions Facility 3")
Pablo Greco e6a3ae
 DEF_FEAT(RUNTIME_INSTRUMENTATION, "ri", STFL, 64, "CPU runtime-instrumentation facility")
Pablo Greco e6a3ae
+DEF_FEAT(AP_QUEUE_INTERRUPT_CONTROL, "apqi", STFL, 65, "AP-Queue interruption facility")
Pablo Greco e6a3ae
 DEF_FEAT(ZPCI, "zpci", STFL, 69, "z/PCI facility")
Pablo Greco e6a3ae
 DEF_FEAT(ADAPTER_EVENT_NOTIFICATION, "aen", STFL, 71, "General-purpose-adapter-event-notification facility")
Pablo Greco e6a3ae
 DEF_FEAT(ADAPTER_INT_SUPPRESSION, "ais", STFL, 72, "General-purpose-adapter-interruption-suppression facility")
Pablo Greco e6a3ae
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
Pablo Greco e6a3ae
index 91afc6b..f16ef64 100644
Pablo Greco e6a3ae
--- a/target/s390x/cpu_models.c
Pablo Greco e6a3ae
+++ b/target/s390x/cpu_models.c
Pablo Greco e6a3ae
@@ -792,6 +792,7 @@ static void check_consistency(const S390CPUModel *model)
Pablo Greco e6a3ae
         { S390_FEAT_PTFF_QTOUE, S390_FEAT_MULTIPLE_EPOCH },
Pablo Greco e6a3ae
         { S390_FEAT_PTFF_STOE, S390_FEAT_MULTIPLE_EPOCH },
Pablo Greco e6a3ae
         { S390_FEAT_PTFF_STOUE, S390_FEAT_MULTIPLE_EPOCH },
Pablo Greco e6a3ae
+        { S390_FEAT_AP_QUEUE_INTERRUPT_CONTROL, S390_FEAT_AP },
Pablo Greco e6a3ae
     };
Pablo Greco e6a3ae
     int i;
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
Pablo Greco e6a3ae
index 24d78e9..17bb04e 100644
Pablo Greco e6a3ae
--- a/target/s390x/gen-features.c
Pablo Greco e6a3ae
+++ b/target/s390x/gen-features.c
Pablo Greco e6a3ae
@@ -519,6 +519,7 @@ static uint16_t full_GEN12_GA1[] = {
Pablo Greco e6a3ae
     S390_FEAT_EDAT_2,
Pablo Greco e6a3ae
     S390_FEAT_SIDE_EFFECT_ACCESS_ESOP2,
Pablo Greco e6a3ae
     S390_FEAT_AP_QUERY_CONFIG_INFO,
Pablo Greco e6a3ae
+    S390_FEAT_AP_QUEUE_INTERRUPT_CONTROL,
Pablo Greco e6a3ae
     S390_FEAT_AP_FACILITIES_TEST,
Pablo Greco e6a3ae
     S390_FEAT_AP,
Pablo Greco e6a3ae
 };
Pablo Greco e6a3ae
-- 
Pablo Greco e6a3ae
1.8.3.1
Pablo Greco e6a3ae