1
The following changes since commit 75e50c80e051423a6f55a34ee4a1eec842444a5b:
1
Hi Richard!
2
2
3
Merge remote-tracking branch 'remotes/armbru/tags/pull-misc-2018-10-10' into staging (2018-10-11 10:43:37 +0100)
3
The following changes since commit 39e19f5f67d925c60278a6156fd1776d04495a93:
4
5
Merge tag 'pull-xen-20220705' of https://xenbits.xen.org/git-http/people/aperard/qemu-dm into staging (2022-07-05 22:13:51 +0530)
4
6
5
are available in the Git repository at:
7
are available in the Git repository at:
6
8
7
git://github.com/cohuck/qemu tags/s390x-20181012
9
https://gitlab.com/thuth/qemu.git tags/pull-request-2022-07-07
8
10
9
for you to fetch changes up to 0161215d435ef5680c4623bcbdfe89ce5b35cf42:
11
for you to fetch changes up to 3d8111fd3bf7298486bcf1a72013b44c9044104e:
10
12
11
hw/s390x: Include the tod-qemu also for builds with --disable-tcg (2018-10-12 11:32:19 +0200)
13
target/s390x: Exit tb after executing ex_value (2022-07-06 19:04:57 +0200)
12
14
13
----------------------------------------------------------------
15
----------------------------------------------------------------
14
More s390x updates:
16
* Check validity of the address in the SET PREFIX instruction
15
- introduce support for vfio-ap (s390 crypto devices), including a
17
* Fix booting from devices that use 4k sectors, but are not like DASDs
16
Linux headers update to get the new interfaces
18
* Re-evaluate pending interrupts after EXECUTE of certain instructions
17
- the usual fixing + cleanup
18
19
19
----------------------------------------------------------------
20
----------------------------------------------------------------
21
Janis Schoetterl-Glausch (1):
22
target/s390x/tcg: SPX: check validity of new prefix
20
23
21
Cornelia Huck (1):
24
Richard Henderson (4):
22
linux-headers: update
25
target/s390x: Remove DISAS_GOTO_TB
26
target/s390x: Remove DISAS_PC_STALE
27
target/s390x: Remove DISAS_PC_STALE_NOCHAIN
28
target/s390x: Exit tb after executing ex_value
23
29
24
Thomas Huth (2):
30
Thomas Huth (13):
25
target/s390x/excp_helper: Remove DPRINTF() macro
31
pc-bios/s390-ccw: Add a proper prototype for main()
26
hw/s390x: Include the tod-qemu also for builds with --disable-tcg
32
pc-bios/s390-ccw/virtio: Introduce a macro for the DASD block size
33
pc-bios/s390-ccw/bootmap: Improve the guessing logic in
34
zipl_load_vblk()
35
pc-bios/s390-ccw/virtio-blkdev: Simplify/fix
36
virtio_ipl_disk_is_valid()
37
pc-bios/s390-ccw/virtio-blkdev: Remove virtio_assume_scsi()
38
pc-bios/s390-ccw/virtio: Set missing status bits while initializing
39
pc-bios/s390-ccw/virtio: Read device config after feature negotiation
40
pc-bios/s390-ccw/virtio: Beautify the code for reading virtqueue
41
configuration
42
pc-bios/s390-ccw: Split virtio-scsi code from
43
virtio_blk_setup_device()
44
pc-bios/s390-ccw/virtio-blkdev: Request the right feature bits
45
pc-bios/s390-ccw/virtio: Remove "extern" keyword from prototypes
46
pc-bios/s390-ccw/netboot.mak: Ignore Clang's warnings about GNU
47
extensions
48
pc-bios/s390-ccw: Update the s390-ccw bios binaries with the
49
virtio-blk fixes
27
50
28
Tony Krowiak (5):
51
pc-bios/s390-ccw/netboot.mak | 7 ++-
29
s390x/cpumodel: Set up CPU model for AP device support
52
pc-bios/s390-ccw/s390-ccw.h | 1 +
30
s390x/kvm: enable AP instruction interpretation for guest
53
pc-bios/s390-ccw/virtio-scsi.h | 2 +-
31
s390x/ap: base Adjunct Processor (AP) object model
54
pc-bios/s390-ccw/virtio.h | 16 +++---
32
s390x/vfio: ap: Introduce VFIO AP device
55
pc-bios/s390-ccw/bootmap.c | 27 +++++++--
33
s390: doc: detailed specifications for AP virtualization
56
pc-bios/s390-ccw/main.c | 27 ++++++---
34
57
pc-bios/s390-ccw/virtio-blkdev.c | 91 +++++--------------------------
35
MAINTAINERS | 16 +
58
pc-bios/s390-ccw/virtio-scsi.c | 19 ++++++-
36
default-configs/s390x-softmmu.mak | 1 +
59
pc-bios/s390-ccw/virtio.c | 28 ++++++----
37
docs/vfio-ap.txt | 825 +++++++++++++++++++++++++++++++++
60
target/s390x/tcg/misc_helper.c | 7 +++
38
hw/s390x/Makefile.objs | 4 +-
61
target/s390x/tcg/translate.c | 42 ++++++--------
39
hw/s390x/ap-bridge.c | 78 ++++
62
pc-bios/s390-ccw.img | Bin 50936 -> 42608 bytes
40
hw/s390x/ap-device.c | 38 ++
63
pc-bios/s390-netboot.img | Bin 79688 -> 67232 bytes
41
hw/s390x/s390-virtio-ccw.c | 4 +
64
13 files changed, 129 insertions(+), 138 deletions(-)
42
hw/vfio/Makefile.objs | 1 +
43
hw/vfio/ap.c | 181 ++++++++
44
include/hw/s390x/ap-bridge.h | 19 +
45
include/hw/s390x/ap-device.h | 22 +
46
include/hw/vfio/vfio-common.h | 1 +
47
include/standard-headers/linux/input.h | 9 +-
48
linux-headers/asm-arm/kvm.h | 13 +
49
linux-headers/asm-arm64/kvm.h | 13 +
50
linux-headers/asm-s390/kvm.h | 2 +
51
linux-headers/asm-x86/kvm.h | 1 +
52
linux-headers/linux/kvm.h | 2 +
53
linux-headers/linux/vfio.h | 2 +
54
linux-headers/linux/vhost.h | 2 +-
55
target/s390x/cpu_features.c | 3 +
56
target/s390x/cpu_features_def.h | 3 +
57
target/s390x/cpu_models.c | 2 +
58
target/s390x/excp_helper.c | 48 +-
59
target/s390x/gen-features.c | 3 +
60
target/s390x/kvm.c | 19 +
61
26 files changed, 1269 insertions(+), 43 deletions(-)
62
create mode 100644 docs/vfio-ap.txt
63
create mode 100644 hw/s390x/ap-bridge.c
64
create mode 100644 hw/s390x/ap-device.c
65
create mode 100644 hw/vfio/ap.c
66
create mode 100644 include/hw/s390x/ap-bridge.h
67
create mode 100644 include/hw/s390x/ap-device.h
68
65
69
--
66
--
70
2.14.4
67
2.31.1
71
72
diff view generated by jsdifflib
New patch
1
From: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
1
2
3
According to the architecture, SET PREFIX must try to access the new
4
prefix area and recognize an addressing exception if the area is not
5
accessible.
6
For qemu this check prevents a crash in cpu_map_lowcore after an
7
inaccessible prefix area has been set.
8
9
Signed-off-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
10
Reviewed-by: David Hildenbrand <david@redhat.com>
11
Message-Id: <20220630094340.3646279-1-scgl@linux.ibm.com>
12
Signed-off-by: Thomas Huth <thuth@redhat.com>
13
---
14
target/s390x/tcg/misc_helper.c | 7 +++++++
15
1 file changed, 7 insertions(+)
16
17
diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/s390x/tcg/misc_helper.c
20
+++ b/target/s390x/tcg/misc_helper.c
21
@@ -XXX,XX +XXX,XX @@ void HELPER(spx)(CPUS390XState *env, uint64_t a1)
22
if (prefix == old_prefix) {
23
return;
24
}
25
+ /*
26
+ * Since prefix got aligned to 8k and memory increments are a multiple of
27
+ * 8k checking the first page is sufficient
28
+ */
29
+ if (!mmu_absolute_addr_valid(prefix, true)) {
30
+ tcg_s390_program_interrupt(env, PGM_ADDRESSING, GETPC());
31
+ }
32
33
env->psa = prefix;
34
HELPER_LOG("prefix: %#x\n", prefix);
35
--
36
2.31.1
diff view generated by jsdifflib
New patch
1
Older versions of Clang complain if there is no prototype for main().
2
Add one, and while we're at it, make sure that we use the same type
3
for main.c and netmain.c - since the return value does not matter,
4
declare the return type of main() as "void".
1
5
6
Message-Id: <20220704111903.62400-2-thuth@redhat.com>
7
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
8
Reviewed-by: Eric Farman <farman@linux.ibm.com>
9
Signed-off-by: Thomas Huth <thuth@redhat.com>
10
---
11
pc-bios/s390-ccw/s390-ccw.h | 1 +
12
pc-bios/s390-ccw/main.c | 3 +--
13
2 files changed, 2 insertions(+), 2 deletions(-)
14
15
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
16
index XXXXXXX..XXXXXXX 100644
17
--- a/pc-bios/s390-ccw/s390-ccw.h
18
+++ b/pc-bios/s390-ccw/s390-ccw.h
19
@@ -XXX,XX +XXX,XX @@ void write_subsystem_identification(void);
20
void write_iplb_location(void);
21
extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
22
unsigned int get_loadparm_index(void);
23
+void main(void);
24
25
/* sclp.c */
26
void sclp_print(const char *string);
27
diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
28
index XXXXXXX..XXXXXXX 100644
29
--- a/pc-bios/s390-ccw/main.c
30
+++ b/pc-bios/s390-ccw/main.c
31
@@ -XXX,XX +XXX,XX @@ static void probe_boot_device(void)
32
sclp_print("Could not find a suitable boot device (none specified)\n");
33
}
34
35
-int main(void)
36
+void main(void)
37
{
38
sclp_setup();
39
css_setup();
40
@@ -XXX,XX +XXX,XX @@ int main(void)
41
}
42
43
panic("Failed to load OS from hard disk\n");
44
- return 0; /* make compiler happy */
45
}
46
--
47
2.31.1
diff view generated by jsdifflib
New patch
1
Use VIRTIO_DASD_DEFAULT_BLOCK_SIZE instead of the magic value 4096.
1
2
3
Message-Id: <20220704111903.62400-3-thuth@redhat.com>
4
Reviewed-by: Eric Farman <farman@linux.ibm.com>
5
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
6
Signed-off-by: Thomas Huth <thuth@redhat.com>
7
---
8
pc-bios/s390-ccw/virtio.h | 1 +
9
pc-bios/s390-ccw/virtio-blkdev.c | 2 +-
10
2 files changed, 2 insertions(+), 1 deletion(-)
11
12
diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
13
index XXXXXXX..XXXXXXX 100644
14
--- a/pc-bios/s390-ccw/virtio.h
15
+++ b/pc-bios/s390-ccw/virtio.h
16
@@ -XXX,XX +XXX,XX @@ extern int virtio_read_many(ulong sector, void *load_addr, int sec_num);
17
#define VIRTIO_SECTOR_SIZE 512
18
#define VIRTIO_ISO_BLOCK_SIZE 2048
19
#define VIRTIO_SCSI_BLOCK_SIZE 512
20
+#define VIRTIO_DASD_DEFAULT_BLOCK_SIZE 4096
21
22
static inline ulong virtio_sector_adjust(ulong sector)
23
{
24
diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c
25
index XXXXXXX..XXXXXXX 100644
26
--- a/pc-bios/s390-ccw/virtio-blkdev.c
27
+++ b/pc-bios/s390-ccw/virtio-blkdev.c
28
@@ -XXX,XX +XXX,XX @@ void virtio_assume_eckd(void)
29
vdev->config.blk.physical_block_exp = 0;
30
switch (vdev->senseid.cu_model) {
31
case VIRTIO_ID_BLOCK:
32
- vdev->config.blk.blk_size = 4096;
33
+ vdev->config.blk.blk_size = VIRTIO_DASD_DEFAULT_BLOCK_SIZE;
34
break;
35
case VIRTIO_ID_SCSI:
36
vdev->config.blk.blk_size = vdev->scsi_block_size;
37
--
38
2.31.1
diff view generated by jsdifflib
1
From: Tony Krowiak <akrowiak@linux.ibm.com>
1
The logic of trying an final ISO or ECKD boot on virtio-block devices is
2
very weird: Since the geometry hardly ever matches in virtio_disk_is_scsi(),
3
virtio_blk_setup_device() always sets a "guessed" disk geometry via
4
virtio_assume_scsi() (which is certainly also wrong in a lot of cases).
2
5
3
Introduces a VFIO based AP device. The device is defined via
6
zipl_load_vblk() then sees that there's been a "virtio_guessed_disk_nature"
4
the QEMU command line by specifying:
7
and tries to fix up the geometry again via virtio_assume_iso9660() before
8
always trying to do ipl_iso_el_torito(). That's a very brain-twisting
9
way of attempting to boot from ISO images, which won't work anymore after
10
the following patches that will clean up the virtio_assume_scsi() mess
11
(and thus get rid of the "virtio_guessed_disk_nature" here).
5
12
6
-device vfio-ap,sysfsdev=<path-to-mediated-matrix-device>
13
Let's try a better approach instead: ISO files always have a magic
14
string "CD001" at offset 0x8001 (see e.g. the ECMA-119 specification)
15
which we can use to decide whether we should try to boot in ISO 9660
16
mode (which we should also try if we see a sector size of 2048).
7
17
8
There may be only one vfio-ap device configured for a guest.
18
And if we were not able to boot in ISO mode here, the final boot attempt
19
before panicking is to boot in ECKD mode. Since this is our last boot
20
attempt anyway, simply always assume the ECKD geometry here (if the sector
21
size was not 4096 yet), so that we also do not depend on the guessed disk
22
geometry from virtio_blk_setup_device() here anymore.
9
23
10
The mediated matrix device is created by the VFIO AP device
24
Message-Id: <20220704111903.62400-4-thuth@redhat.com>
11
driver by writing a UUID to a sysfs attribute file (see
25
Signed-off-by: Thomas Huth <thuth@redhat.com>
12
docs/vfio-ap.txt). The mediated matrix device will be named
26
---
13
after the UUID. Symbolic links to the $uuid are created in
27
pc-bios/s390-ccw/bootmap.c | 27 +++++++++++++++++++++++----
14
many places, so the path to the mediated matrix device $uuid
28
1 file changed, 23 insertions(+), 4 deletions(-)
15
can be specified in any of the following ways:
16
29
17
/sys/devices/vfio_ap/matrix/$uuid
30
diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c
18
/sys/devices/vfio_ap/matrix/mdev_supported_types/vfio_ap-passthrough/devices/$uuid
19
/sys/bus/mdev/devices/$uuid
20
/sys/bus/mdev/drivers/vfio_mdev/$uuid
21
22
When the vfio-ap device is realized, it acquires and opens the
23
VFIO iommu group to which the mediated matrix device is
24
bound. This causes a VFIO group notification event to be
25
signaled. The vfio_ap device driver's group notification
26
handler will get called at which time the device driver
27
will configure the the AP devices to which the guest will
28
be granted access.
29
30
Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
31
Tested-by: Pierre Morel <pmorel@linux.ibm.com>
32
Acked-by: Halil Pasic <pasic@linux.ibm.com>
33
Tested-by: Pierre Morel <pmorel@linux.ibm.com>
34
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
35
Message-Id: <20181010170309.12045-6-akrowiak@linux.ibm.com>
36
Reviewed-by: Thomas Huth <thuth@redhat.com>
37
[CH: added missing g_free and device category]
38
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
39
---
40
MAINTAINERS | 2 +
41
default-configs/s390x-softmmu.mak | 1 +
42
hw/vfio/Makefile.objs | 1 +
43
hw/vfio/ap.c | 181 ++++++++++++++++++++++++++++++++++++++
44
include/hw/vfio/vfio-common.h | 1 +
45
5 files changed, 186 insertions(+)
46
create mode 100644 hw/vfio/ap.c
47
48
diff --git a/MAINTAINERS b/MAINTAINERS
49
index XXXXXXX..XXXXXXX 100644
31
index XXXXXXX..XXXXXXX 100644
50
--- a/MAINTAINERS
32
--- a/pc-bios/s390-ccw/bootmap.c
51
+++ b/MAINTAINERS
33
+++ b/pc-bios/s390-ccw/bootmap.c
52
@@ -XXX,XX +XXX,XX @@ F: hw/char/terminal3270.c
34
@@ -XXX,XX +XXX,XX @@ static void ipl_iso_el_torito(void)
53
F: hw/intc/s390_flic.c
35
}
54
F: hw/intc/s390_flic_kvm.c
36
}
55
F: hw/s390x/
37
56
+F: hw/vfio/ap.c
38
+/**
57
F: hw/vfio/ccw.c
39
+ * Detect whether we're trying to boot from an .ISO image.
58
F: hw/watchdog/wdt_diag288.c
40
+ * These always have a signature string "CD001" at offset 0x8001.
59
F: include/hw/s390x/
60
@@ -XXX,XX +XXX,XX @@ F: hw/s390x/ap-device.c
61
F: hw/s390x/ap-bridge.c
62
F: include/hw/s390x/ap-device.h
63
F: include/hw/s390x/ap-bridge.h
64
+F: hw/vfio/ap.c
65
L: qemu-s390x@nongnu.org
66
67
vhost
68
diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak
69
index XXXXXXX..XXXXXXX 100644
70
--- a/default-configs/s390x-softmmu.mak
71
+++ b/default-configs/s390x-softmmu.mak
72
@@ -XXX,XX +XXX,XX @@ CONFIG_S390_FLIC=y
73
CONFIG_S390_FLIC_KVM=$(CONFIG_KVM)
74
CONFIG_VFIO_CCW=$(CONFIG_LINUX)
75
CONFIG_WDT_DIAG288=y
76
+CONFIG_VFIO_AP=$(CONFIG_LINUX)
77
diff --git a/hw/vfio/Makefile.objs b/hw/vfio/Makefile.objs
78
index XXXXXXX..XXXXXXX 100644
79
--- a/hw/vfio/Makefile.objs
80
+++ b/hw/vfio/Makefile.objs
81
@@ -XXX,XX +XXX,XX @@ obj-$(CONFIG_SOFTMMU) += platform.o
82
obj-$(CONFIG_VFIO_XGMAC) += calxeda-xgmac.o
83
obj-$(CONFIG_VFIO_AMD_XGBE) += amd-xgbe.o
84
obj-$(CONFIG_SOFTMMU) += spapr.o
85
+obj-$(CONFIG_VFIO_AP) += ap.o
86
endif
87
diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c
88
new file mode 100644
89
index XXXXXXX..XXXXXXX
90
--- /dev/null
91
+++ b/hw/vfio/ap.c
92
@@ -XXX,XX +XXX,XX @@
93
+/*
94
+ * VFIO based AP matrix device assignment
95
+ *
96
+ * Copyright 2018 IBM Corp.
97
+ * Author(s): Tony Krowiak <akrowiak@linux.ibm.com>
98
+ * Halil Pasic <pasic@linux.ibm.com>
99
+ *
100
+ * This work is licensed under the terms of the GNU GPL, version 2 or (at
101
+ * your option) any later version. See the COPYING file in the top-level
102
+ * directory.
103
+ */
41
+ */
42
+static bool has_iso_signature(void)
43
+{
44
+ int blksize = virtio_get_block_size();
104
+
45
+
105
+#include <linux/vfio.h>
46
+ if (!blksize || virtio_read(0x8000 / blksize, sec)) {
106
+#include <sys/ioctl.h>
47
+ return false;
107
+#include "qemu/osdep.h"
48
+ }
108
+#include "qapi/error.h"
109
+#include "hw/sysbus.h"
110
+#include "hw/vfio/vfio.h"
111
+#include "hw/vfio/vfio-common.h"
112
+#include "hw/s390x/ap-device.h"
113
+#include "qemu/error-report.h"
114
+#include "qemu/queue.h"
115
+#include "qemu/option.h"
116
+#include "qemu/config-file.h"
117
+#include "cpu.h"
118
+#include "kvm_s390x.h"
119
+#include "sysemu/sysemu.h"
120
+#include "hw/s390x/ap-bridge.h"
121
+#include "exec/address-spaces.h"
122
+
49
+
123
+#define VFIO_AP_DEVICE_TYPE "vfio-ap"
50
+ return !memcmp("CD001", &sec[1], 5);
124
+
125
+typedef struct VFIOAPDevice {
126
+ APDevice apdev;
127
+ VFIODevice vdev;
128
+} VFIOAPDevice;
129
+
130
+#define VFIO_AP_DEVICE(obj) \
131
+ OBJECT_CHECK(VFIOAPDevice, (obj), VFIO_AP_DEVICE_TYPE)
132
+
133
+static void vfio_ap_compute_needs_reset(VFIODevice *vdev)
134
+{
135
+ vdev->needs_reset = false;
136
+}
51
+}
137
+
52
+
138
+/*
53
/***********************************************************************
139
+ * We don't need vfio_hot_reset_multi and vfio_eoi operations for
54
* Bus specific IPL sequences
140
+ * vfio-ap device now.
55
*/
141
+ */
56
142
+struct VFIODeviceOps vfio_ap_ops = {
57
static void zipl_load_vblk(void)
143
+ .vfio_compute_needs_reset = vfio_ap_compute_needs_reset,
58
{
144
+};
59
- if (virtio_guessed_disk_nature()) {
60
- virtio_assume_iso9660();
61
+ int blksize = virtio_get_block_size();
145
+
62
+
146
+static void vfio_ap_put_device(VFIOAPDevice *vapdev)
63
+ if (blksize == VIRTIO_ISO_BLOCK_SIZE || has_iso_signature()) {
147
+{
64
+ if (blksize != VIRTIO_ISO_BLOCK_SIZE) {
148
+ g_free(vapdev->vdev.name);
65
+ virtio_assume_iso9660();
149
+ vfio_put_base_device(&vapdev->vdev);
66
+ }
150
+}
67
+ ipl_iso_el_torito();
151
+
68
}
152
+static VFIOGroup *vfio_ap_get_group(VFIOAPDevice *vapdev, Error **errp)
69
- ipl_iso_el_torito();
153
+{
70
154
+ GError *gerror = NULL;
71
- if (virtio_guessed_disk_nature()) {
155
+ char *symlink, *group_path;
72
+ if (blksize != VIRTIO_DASD_DEFAULT_BLOCK_SIZE) {
156
+ int groupid;
73
sclp_print("Using guessed DASD geometry.\n");
157
+
74
virtio_assume_eckd();
158
+ symlink = g_strdup_printf("%s/iommu_group", vapdev->vdev.sysfsdev);
75
}
159
+ group_path = g_file_read_link(symlink, &gerror);
160
+ g_free(symlink);
161
+
162
+ if (!group_path) {
163
+ error_setg(errp, "%s: no iommu_group found for %s: %s",
164
+ VFIO_AP_DEVICE_TYPE, vapdev->vdev.sysfsdev, gerror->message);
165
+ return NULL;
166
+ }
167
+
168
+ if (sscanf(basename(group_path), "%d", &groupid) != 1) {
169
+ error_setg(errp, "vfio: failed to read %s", group_path);
170
+ g_free(group_path);
171
+ return NULL;
172
+ }
173
+
174
+ g_free(group_path);
175
+
176
+ return vfio_get_group(groupid, &address_space_memory, errp);
177
+}
178
+
179
+static void vfio_ap_realize(DeviceState *dev, Error **errp)
180
+{
181
+ int ret;
182
+ char *mdevid;
183
+ Error *local_err = NULL;
184
+ VFIOGroup *vfio_group;
185
+ APDevice *apdev = AP_DEVICE(dev);
186
+ VFIOAPDevice *vapdev = VFIO_AP_DEVICE(apdev);
187
+
188
+ vfio_group = vfio_ap_get_group(vapdev, &local_err);
189
+ if (!vfio_group) {
190
+ goto out_err;
191
+ }
192
+
193
+ vapdev->vdev.ops = &vfio_ap_ops;
194
+ vapdev->vdev.type = VFIO_DEVICE_TYPE_AP;
195
+ mdevid = basename(vapdev->vdev.sysfsdev);
196
+ vapdev->vdev.name = g_strdup_printf("%s", mdevid);
197
+ vapdev->vdev.dev = dev;
198
+
199
+ ret = vfio_get_device(vfio_group, mdevid, &vapdev->vdev, &local_err);
200
+ if (ret) {
201
+ goto out_get_dev_err;
202
+ }
203
+
204
+ return;
205
+
206
+out_get_dev_err:
207
+ vfio_ap_put_device(vapdev);
208
+ vfio_put_group(vfio_group);
209
+out_err:
210
+ error_propagate(errp, local_err);
211
+}
212
+
213
+static void vfio_ap_unrealize(DeviceState *dev, Error **errp)
214
+{
215
+ APDevice *apdev = AP_DEVICE(dev);
216
+ VFIOAPDevice *vapdev = VFIO_AP_DEVICE(apdev);
217
+ VFIOGroup *group = vapdev->vdev.group;
218
+
219
+ vfio_ap_put_device(vapdev);
220
+ vfio_put_group(group);
221
+}
222
+
223
+static Property vfio_ap_properties[] = {
224
+ DEFINE_PROP_STRING("sysfsdev", VFIOAPDevice, vdev.sysfsdev),
225
+ DEFINE_PROP_END_OF_LIST(),
226
+};
227
+
228
+static void vfio_ap_reset(DeviceState *dev)
229
+{
230
+ int ret;
231
+ APDevice *apdev = AP_DEVICE(dev);
232
+ VFIOAPDevice *vapdev = VFIO_AP_DEVICE(apdev);
233
+
234
+ ret = ioctl(vapdev->vdev.fd, VFIO_DEVICE_RESET);
235
+ if (ret) {
236
+ error_report("%s: failed to reset %s device: %s", __func__,
237
+ vapdev->vdev.name, strerror(ret));
238
+ }
239
+}
240
+
241
+static const VMStateDescription vfio_ap_vmstate = {
242
+ .name = VFIO_AP_DEVICE_TYPE,
243
+ .unmigratable = 1,
244
+};
245
+
246
+static void vfio_ap_class_init(ObjectClass *klass, void *data)
247
+{
248
+ DeviceClass *dc = DEVICE_CLASS(klass);
249
+
250
+ dc->props = vfio_ap_properties;
251
+ dc->vmsd = &vfio_ap_vmstate;
252
+ dc->desc = "VFIO-based AP device assignment";
253
+ set_bit(DEVICE_CATEGORY_MISC, dc->categories);
254
+ dc->realize = vfio_ap_realize;
255
+ dc->unrealize = vfio_ap_unrealize;
256
+ dc->hotpluggable = false;
257
+ dc->reset = vfio_ap_reset;
258
+ dc->bus_type = TYPE_AP_BUS;
259
+}
260
+
261
+static const TypeInfo vfio_ap_info = {
262
+ .name = VFIO_AP_DEVICE_TYPE,
263
+ .parent = AP_DEVICE_TYPE,
264
+ .instance_size = sizeof(VFIOAPDevice),
265
+ .class_init = vfio_ap_class_init,
266
+};
267
+
268
+static void vfio_ap_type_init(void)
269
+{
270
+ type_register_static(&vfio_ap_info);
271
+}
272
+
273
+type_init(vfio_ap_type_init)
274
diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
275
index XXXXXXX..XXXXXXX 100644
276
--- a/include/hw/vfio/vfio-common.h
277
+++ b/include/hw/vfio/vfio-common.h
278
@@ -XXX,XX +XXX,XX @@ enum {
279
VFIO_DEVICE_TYPE_PCI = 0,
280
VFIO_DEVICE_TYPE_PLATFORM = 1,
281
VFIO_DEVICE_TYPE_CCW = 2,
282
+ VFIO_DEVICE_TYPE_AP = 3,
283
};
284
285
typedef struct VFIOMmap {
286
--
76
--
287
2.14.4
77
2.31.1
288
289
diff view generated by jsdifflib
New patch
1
The s390-ccw bios fails to boot if the boot disk is a virtio-blk
2
disk with a sector size of 4096. For example:
1
3
4
dasdfmt -b 4096 -d cdl -y -p -M quick /dev/dasdX
5
fdasd -a /dev/dasdX
6
install a guest onto /dev/dasdX1 using virtio-blk
7
qemu-system-s390x -nographic -hda /dev/dasdX1
8
9
The bios then bails out with:
10
11
! Cannot read block 0 !
12
13
Looking at virtio_ipl_disk_is_valid() and especially the function
14
virtio_disk_is_scsi(), it does not really make sense that we expect
15
only such a limited disk geometry (like a block size of 512) for
16
our boot disks. Let's relax the check and allow everything that
17
remotely looks like a sane disk.
18
19
Message-Id: <20220704111903.62400-5-thuth@redhat.com>
20
Reviewed-by: Eric Farman <farman@linux.ibm.com>
21
Signed-off-by: Thomas Huth <thuth@redhat.com>
22
---
23
pc-bios/s390-ccw/virtio.h | 2 --
24
pc-bios/s390-ccw/virtio-blkdev.c | 41 ++++++--------------------------
25
2 files changed, 7 insertions(+), 36 deletions(-)
26
27
diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
28
index XXXXXXX..XXXXXXX 100644
29
--- a/pc-bios/s390-ccw/virtio.h
30
+++ b/pc-bios/s390-ccw/virtio.h
31
@@ -XXX,XX +XXX,XX @@ void virtio_assume_scsi(void);
32
void virtio_assume_eckd(void);
33
void virtio_assume_iso9660(void);
34
35
-extern bool virtio_disk_is_scsi(void);
36
-extern bool virtio_disk_is_eckd(void);
37
extern bool virtio_ipl_disk_is_valid(void);
38
extern int virtio_get_block_size(void);
39
extern uint8_t virtio_get_heads(void);
40
diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c
41
index XXXXXXX..XXXXXXX 100644
42
--- a/pc-bios/s390-ccw/virtio-blkdev.c
43
+++ b/pc-bios/s390-ccw/virtio-blkdev.c
44
@@ -XXX,XX +XXX,XX @@ void virtio_assume_eckd(void)
45
virtio_eckd_sectors_for_block_size(vdev->config.blk.blk_size);
46
}
47
48
-bool virtio_disk_is_scsi(void)
49
-{
50
- VDev *vdev = virtio_get_device();
51
-
52
- if (vdev->guessed_disk_nature == VIRTIO_GDN_SCSI) {
53
- return true;
54
- }
55
- switch (vdev->senseid.cu_model) {
56
- case VIRTIO_ID_BLOCK:
57
- return (vdev->config.blk.geometry.heads == 255)
58
- && (vdev->config.blk.geometry.sectors == 63)
59
- && (virtio_get_block_size() == VIRTIO_SCSI_BLOCK_SIZE);
60
- case VIRTIO_ID_SCSI:
61
- return true;
62
- }
63
- return false;
64
-}
65
-
66
-bool virtio_disk_is_eckd(void)
67
+bool virtio_ipl_disk_is_valid(void)
68
{
69
+ int blksize = virtio_get_block_size();
70
VDev *vdev = virtio_get_device();
71
- const int block_size = virtio_get_block_size();
72
73
- if (vdev->guessed_disk_nature == VIRTIO_GDN_DASD) {
74
+ if (vdev->guessed_disk_nature == VIRTIO_GDN_SCSI ||
75
+ vdev->guessed_disk_nature == VIRTIO_GDN_DASD) {
76
return true;
77
}
78
- switch (vdev->senseid.cu_model) {
79
- case VIRTIO_ID_BLOCK:
80
- return (vdev->config.blk.geometry.heads == 15)
81
- && (vdev->config.blk.geometry.sectors ==
82
- virtio_eckd_sectors_for_block_size(block_size));
83
- case VIRTIO_ID_SCSI:
84
- return false;
85
- }
86
- return false;
87
-}
88
89
-bool virtio_ipl_disk_is_valid(void)
90
-{
91
- return virtio_disk_is_scsi() || virtio_disk_is_eckd();
92
+ return (vdev->senseid.cu_model == VIRTIO_ID_BLOCK ||
93
+ vdev->senseid.cu_model == VIRTIO_ID_SCSI) &&
94
+ blksize >= 512 && blksize <= 4096;
95
}
96
97
int virtio_get_block_size(void)
98
--
99
2.31.1
diff view generated by jsdifflib
New patch
1
The virtio_assume_scsi() function is very questionable: First, it
2
is only called for virtio-blk, and not for virtio-scsi, so the naming
3
is already quite confusing. Second, it is called if we detected a
4
"invalid" IPL disk, trying to fix it by blindly setting a sector
5
size of 512. This of course won't work in most cases since disks
6
might have a different sector size for a reason.
1
7
8
Thus let's remove this strange function now. The calling code can
9
also be removed completely, since there is another spot in main.c
10
that does "IPL_assert(virtio_ipl_disk_is_valid(), ...)" to make
11
sure that we do not try to IPL from an invalid device.
12
13
Message-Id: <20220704111903.62400-6-thuth@redhat.com>
14
Reviewed-by: Eric Farman <farman@linux.ibm.com>
15
Signed-off-by: Thomas Huth <thuth@redhat.com>
16
---
17
pc-bios/s390-ccw/virtio.h | 1 -
18
pc-bios/s390-ccw/virtio-blkdev.c | 24 ------------------------
19
2 files changed, 25 deletions(-)
20
21
diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
22
index XXXXXXX..XXXXXXX 100644
23
--- a/pc-bios/s390-ccw/virtio.h
24
+++ b/pc-bios/s390-ccw/virtio.h
25
@@ -XXX,XX +XXX,XX @@ enum guessed_disk_nature_type {
26
typedef enum guessed_disk_nature_type VirtioGDN;
27
28
VirtioGDN virtio_guessed_disk_nature(void);
29
-void virtio_assume_scsi(void);
30
void virtio_assume_eckd(void);
31
void virtio_assume_iso9660(void);
32
33
diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c
34
index XXXXXXX..XXXXXXX 100644
35
--- a/pc-bios/s390-ccw/virtio-blkdev.c
36
+++ b/pc-bios/s390-ccw/virtio-blkdev.c
37
@@ -XXX,XX +XXX,XX @@ VirtioGDN virtio_guessed_disk_nature(void)
38
return virtio_get_device()->guessed_disk_nature;
39
}
40
41
-void virtio_assume_scsi(void)
42
-{
43
- VDev *vdev = virtio_get_device();
44
-
45
- switch (vdev->senseid.cu_model) {
46
- case VIRTIO_ID_BLOCK:
47
- vdev->guessed_disk_nature = VIRTIO_GDN_SCSI;
48
- vdev->config.blk.blk_size = VIRTIO_SCSI_BLOCK_SIZE;
49
- vdev->config.blk.physical_block_exp = 0;
50
- vdev->blk_factor = 1;
51
- break;
52
- case VIRTIO_ID_SCSI:
53
- vdev->scsi_block_size = VIRTIO_SCSI_BLOCK_SIZE;
54
- break;
55
- }
56
-}
57
-
58
void virtio_assume_iso9660(void)
59
{
60
VDev *vdev = virtio_get_device();
61
@@ -XXX,XX +XXX,XX @@ int virtio_blk_setup_device(SubChannelId schid)
62
switch (vdev->senseid.cu_model) {
63
case VIRTIO_ID_BLOCK:
64
sclp_print("Using virtio-blk.\n");
65
- if (!virtio_ipl_disk_is_valid()) {
66
- /* make sure all getters but blocksize return 0 for
67
- * invalid IPL disk
68
- */
69
- memset(&vdev->config.blk, 0, sizeof(vdev->config.blk));
70
- virtio_assume_scsi();
71
- }
72
break;
73
case VIRTIO_ID_SCSI:
74
IPL_assert(vdev->config.scsi.sense_size == VIRTIO_SCSI_SENSE_SIZE,
75
--
76
2.31.1
diff view generated by jsdifflib
1
From: Tony Krowiak <akrowiak@linux.ibm.com>
1
According chapter "3.1.1 Driver Requirements: Device Initialization"
2
of the Virtio specification (v1.1), a driver for a device has to set
3
the ACKNOWLEDGE and DRIVER bits in the status field after resetting
4
the device. The s390-ccw bios skipped these steps so far and seems
5
like QEMU never cared. Anyway, it's better to follow the spec, so
6
let's set these bits now in the right spots, too.
2
7
3
Let's use the KVM_SET_DEVICE_ATTR ioctl to enable hardware
8
Message-Id: <20220704111903.62400-7-thuth@redhat.com>
4
interpretation of AP instructions executed on the guest.
9
Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com>
5
If the S390_FEAT_AP feature is switched on for the guest,
10
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
6
AP instructions must be interpreted by default; otherwise,
11
Reviewed-by: Eric Farman <farman@linux.ibm.com>
7
they will be intercepted.
12
Signed-off-by: Thomas Huth <thuth@redhat.com>
13
---
14
pc-bios/s390-ccw/virtio.c | 18 ++++++++++++++----
15
1 file changed, 14 insertions(+), 4 deletions(-)
8
16
9
This attribute setting may be overridden by a device. For example,
17
diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c
10
a device may want to provide AP instructions to the guest (i.e.,
11
S390_FEAT_AP turned on), but it may want to emulate them. In this
12
case, the AP instructions executed on the guest must be
13
intercepted; so when the device is realized, it must disable
14
interpretation.
15
16
Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
17
Tested-by: Pierre Morel <pmorel@linux.ibm.com>
18
Reviewed-by: David Hildenbrand <david@redhat.com>
19
Reviewed-by: Thomas Huth <thuth@redhat.com>
20
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
21
Acked-by: Halil Pasic <pasic@linux.ibm.com>
22
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
23
Message-Id: <20181010170309.12045-4-akrowiak@linux.ibm.com>
24
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
25
---
26
target/s390x/kvm.c | 19 +++++++++++++++++++
27
1 file changed, 19 insertions(+)
28
29
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
30
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
31
--- a/target/s390x/kvm.c
19
--- a/pc-bios/s390-ccw/virtio.c
32
+++ b/target/s390x/kvm.c
20
+++ b/pc-bios/s390-ccw/virtio.c
33
@@ -XXX,XX +XXX,XX @@ void kvm_s390_get_host_cpu_model(S390CPUModel *model, Error **errp)
21
@@ -XXX,XX +XXX,XX @@ int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd)
34
error_setg(errp, "KVM: host CPU model could not be identified");
22
void virtio_setup_ccw(VDev *vdev)
35
return;
23
{
36
}
24
int i, rc, cfg_size = 0;
37
+ /* for now, we can only provide the AP feature with HW support */
25
- unsigned char status = VIRTIO_CONFIG_S_DRIVER_OK;
38
+ if (kvm_vm_check_attr(kvm_state, KVM_S390_VM_CRYPTO,
26
+ uint8_t status;
39
+ KVM_S390_VM_CRYPTO_ENABLE_APIE)) {
27
struct VirtioFeatureDesc {
40
+ set_bit(S390_FEAT_AP, model->features);
28
uint32_t features;
41
+ }
29
uint8_t index;
42
/* strip of features that are not part of the maximum model */
30
@@ -XXX,XX +XXX,XX @@ void virtio_setup_ccw(VDev *vdev)
43
bitmap_and(model->features, model->features, model->def->full_feat,
31
44
S390_FEAT_MAX);
32
run_ccw(vdev, CCW_CMD_VDEV_RESET, NULL, 0, false);
45
}
33
46
34
+ status = VIRTIO_CONFIG_S_ACKNOWLEDGE;
47
+static void kvm_s390_configure_apie(bool interpret)
35
+ rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false);
48
+{
36
+ IPL_assert(rc == 0, "Could not write ACKNOWLEDGE status to host");
49
+ uint64_t attr = interpret ? KVM_S390_VM_CRYPTO_ENABLE_APIE :
50
+ KVM_S390_VM_CRYPTO_DISABLE_APIE;
51
+
37
+
52
+ if (kvm_vm_check_attr(kvm_state, KVM_S390_VM_CRYPTO, attr)) {
38
switch (vdev->senseid.cu_model) {
53
+ kvm_s390_set_attr(attr);
39
case VIRTIO_ID_NET:
54
+ }
40
vdev->nr_vqs = 2;
55
+}
41
@@ -XXX,XX +XXX,XX @@ void virtio_setup_ccw(VDev *vdev)
56
+
42
default:
57
void kvm_s390_apply_cpu_model(const S390CPUModel *model, Error **errp)
43
panic("Unsupported virtio device\n");
58
{
59
struct kvm_s390_vm_cpu_processor prop = {
60
@@ -XXX,XX +XXX,XX @@ void kvm_s390_apply_cpu_model(const S390CPUModel *model, Error **errp)
61
if (test_bit(S390_FEAT_CMM, model->features)) {
62
kvm_s390_enable_cmma();
63
}
44
}
64
+
45
+
65
+ if (test_bit(S390_FEAT_AP, model->features)) {
46
+ status |= VIRTIO_CONFIG_S_DRIVER;
66
+ kvm_s390_configure_apie(true);
47
+ rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false);
67
+ }
48
+ IPL_assert(rc == 0, "Could not write DRIVER status to host");
49
+
50
IPL_assert(
51
run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false) == 0,
52
"Could not get block device configuration");
53
@@ -XXX,XX +XXX,XX @@ void virtio_setup_ccw(VDev *vdev)
54
run_ccw(vdev, CCW_CMD_SET_VQ, &info, sizeof(info), false) == 0,
55
"Cannot set VQ info");
56
}
57
- IPL_assert(
58
- run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false) == 0,
59
- "Could not write status to host");
60
+
61
+ status |= VIRTIO_CONFIG_S_DRIVER_OK;
62
+ rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false);
63
+ IPL_assert(rc == 0, "Could not write DRIVER_OK status to host");
68
}
64
}
69
65
70
void kvm_s390_restart_interrupt(S390CPU *cpu)
66
bool virtio_is_supported(SubChannelId schid)
71
--
67
--
72
2.14.4
68
2.31.1
73
74
diff view generated by jsdifflib
New patch
1
Feature negotiation should be done first, since some fields in the
2
config area can depend on the negotiated features and thus should
3
rather be read afterwards.
1
4
5
While we're at it, also adjust the error message here a little bit
6
(the code is nowadays used for non-block virtio devices, too).
7
8
Message-Id: <20220704111903.62400-8-thuth@redhat.com>
9
Reviewed-by: Eric Farman <farman@linux.ibm.com>
10
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
11
Signed-off-by: Thomas Huth <thuth@redhat.com>
12
---
13
pc-bios/s390-ccw/virtio.c | 7 +++----
14
1 file changed, 3 insertions(+), 4 deletions(-)
15
16
diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/pc-bios/s390-ccw/virtio.c
19
+++ b/pc-bios/s390-ccw/virtio.c
20
@@ -XXX,XX +XXX,XX @@ void virtio_setup_ccw(VDev *vdev)
21
rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false);
22
IPL_assert(rc == 0, "Could not write DRIVER status to host");
23
24
- IPL_assert(
25
- run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false) == 0,
26
- "Could not get block device configuration");
27
-
28
/* Feature negotiation */
29
for (i = 0; i < ARRAY_SIZE(vdev->guest_features); i++) {
30
feats.features = 0;
31
@@ -XXX,XX +XXX,XX @@ void virtio_setup_ccw(VDev *vdev)
32
IPL_assert(rc == 0, "Could not set features bits");
33
}
34
35
+ rc = run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false);
36
+ IPL_assert(rc == 0, "Could not get virtio device configuration");
37
+
38
for (i = 0; i < vdev->nr_vqs; i++) {
39
VqInfo info = {
40
.queue = (unsigned long long) ring_area + (i * VIRTIO_RING_SIZE),
41
--
42
2.31.1
diff view generated by jsdifflib
New patch
1
It looks nicer if we separate the run_ccw() from the IPL_assert()
2
statement, and the error message should talk about "virtio device"
3
instead of "block device", since this code is nowadays used for
4
non-block (i.e. network) devices, too.
1
5
6
Message-Id: <20220704111903.62400-9-thuth@redhat.com>
7
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
8
Reviewed-by: Eric Farman <farman@linux.ibm.com>
9
Signed-off-by: Thomas Huth <thuth@redhat.com>
10
---
11
pc-bios/s390-ccw/virtio.c | 5 ++---
12
1 file changed, 2 insertions(+), 3 deletions(-)
13
14
diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c
15
index XXXXXXX..XXXXXXX 100644
16
--- a/pc-bios/s390-ccw/virtio.c
17
+++ b/pc-bios/s390-ccw/virtio.c
18
@@ -XXX,XX +XXX,XX @@ void virtio_setup_ccw(VDev *vdev)
19
.num = 0,
20
};
21
22
- IPL_assert(
23
- run_ccw(vdev, CCW_CMD_READ_VQ_CONF, &config, sizeof(config), false) == 0,
24
- "Could not get block device VQ configuration");
25
+ rc = run_ccw(vdev, CCW_CMD_READ_VQ_CONF, &config, sizeof(config), false);
26
+ IPL_assert(rc == 0, "Could not get virtio device VQ configuration");
27
info.num = config.num;
28
vring_init(&vdev->vrings[i], &info);
29
vdev->vrings[i].schid = vdev->schid;
30
--
31
2.31.1
diff view generated by jsdifflib
1
From: Tony Krowiak <akrowiak@linux.ibm.com>
1
The next patch is going to add more virtio-block specific code to
2
virtio_blk_setup_device(), and if the virtio-scsi code is also in
3
there, this is more cumbersome. And the calling function virtio_setup()
4
in main.c looks at the device type already anyway, so it's more
5
logical to separate the virtio-scsi stuff into a new function in
6
virtio-scsi.c instead.
2
7
3
Introduces the base object model for virtualizing AP devices.
8
Message-Id: <20220704111903.62400-10-thuth@redhat.com>
9
Reviewed-by: Eric Farman <farman@linux.ibm.com>
10
Signed-off-by: Thomas Huth <thuth@redhat.com>
11
---
12
pc-bios/s390-ccw/virtio-scsi.h | 2 +-
13
pc-bios/s390-ccw/main.c | 24 +++++++++++++++++-------
14
pc-bios/s390-ccw/virtio-blkdev.c | 20 ++------------------
15
pc-bios/s390-ccw/virtio-scsi.c | 19 ++++++++++++++++++-
16
4 files changed, 38 insertions(+), 27 deletions(-)
4
17
5
Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
18
diff --git a/pc-bios/s390-ccw/virtio-scsi.h b/pc-bios/s390-ccw/virtio-scsi.h
6
Tested-by: Pierre Morel <pmorel@linux.ibm.com>
7
Acked-by: David Hildenbrand <david@redhat.com>
8
Reviewed-by: Thomas Huth <thuth@redhat.com>
9
Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
10
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
11
Message-Id: <20181010170309.12045-5-akrowiak@linux.ibm.com>
12
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
13
---
14
MAINTAINERS | 12 +++++++
15
hw/s390x/Makefile.objs | 2 ++
16
hw/s390x/ap-bridge.c | 78 ++++++++++++++++++++++++++++++++++++++++++++
17
hw/s390x/ap-device.c | 38 +++++++++++++++++++++
18
hw/s390x/s390-virtio-ccw.c | 4 +++
19
include/hw/s390x/ap-bridge.h | 19 +++++++++++
20
include/hw/s390x/ap-device.h | 22 +++++++++++++
21
7 files changed, 175 insertions(+)
22
create mode 100644 hw/s390x/ap-bridge.c
23
create mode 100644 hw/s390x/ap-device.c
24
create mode 100644 include/hw/s390x/ap-bridge.h
25
create mode 100644 include/hw/s390x/ap-device.h
26
27
diff --git a/MAINTAINERS b/MAINTAINERS
28
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
29
--- a/MAINTAINERS
20
--- a/pc-bios/s390-ccw/virtio-scsi.h
30
+++ b/MAINTAINERS
21
+++ b/pc-bios/s390-ccw/virtio-scsi.h
31
@@ -XXX,XX +XXX,XX @@ F: include/hw/s390x/s390-ccw.h
22
@@ -XXX,XX +XXX,XX @@ static inline bool virtio_scsi_response_ok(const VirtioScsiCmdResp *r)
32
T: git git://github.com/cohuck/qemu.git s390-next
23
return r->response == VIRTIO_SCSI_S_OK && r->status == CDB_STATUS_GOOD;
33
L: qemu-s390x@nongnu.org
24
}
34
25
35
+vfio-ap
26
-int virtio_scsi_setup(VDev *vdev);
36
+M: Christian Borntraeger <borntraeger@de.ibm.com>
27
int virtio_scsi_read_many(VDev *vdev,
37
+M: Tony Krowiak <akrowiak@linux.ibm.com>
28
ulong sector, void *load_addr, int sec_num);
38
+M: Halil Pasic <pasic@linux.ibm.com>
29
+int virtio_scsi_setup_device(SubChannelId schid);
39
+M: Pierre Morel <pmorel@linux.ibm.com>
30
40
+S: Supported
31
#endif /* VIRTIO_SCSI_H */
41
+F: hw/s390x/ap-device.c
32
diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
42
+F: hw/s390x/ap-bridge.c
43
+F: include/hw/s390x/ap-device.h
44
+F: include/hw/s390x/ap-bridge.h
45
+L: qemu-s390x@nongnu.org
46
+
47
vhost
48
M: Michael S. Tsirkin <mst@redhat.com>
49
S: Supported
50
diff --git a/hw/s390x/Makefile.objs b/hw/s390x/Makefile.objs
51
index XXXXXXX..XXXXXXX 100644
33
index XXXXXXX..XXXXXXX 100644
52
--- a/hw/s390x/Makefile.objs
34
--- a/pc-bios/s390-ccw/main.c
53
+++ b/hw/s390x/Makefile.objs
35
+++ b/pc-bios/s390-ccw/main.c
54
@@ -XXX,XX +XXX,XX @@ obj-$(CONFIG_TCG) += tod-qemu.o
55
obj-$(CONFIG_KVM) += s390-skeys-kvm.o
56
obj-$(CONFIG_KVM) += s390-stattrib-kvm.o
57
obj-y += s390-ccw.o
58
+obj-y += ap-device.o
59
+obj-y += ap-bridge.o
60
diff --git a/hw/s390x/ap-bridge.c b/hw/s390x/ap-bridge.c
61
new file mode 100644
62
index XXXXXXX..XXXXXXX
63
--- /dev/null
64
+++ b/hw/s390x/ap-bridge.c
65
@@ -XXX,XX +XXX,XX @@
36
@@ -XXX,XX +XXX,XX @@
66
+/*
37
#include "s390-ccw.h"
67
+ * ap bridge
38
#include "cio.h"
68
+ *
39
#include "virtio.h"
69
+ * Copyright 2018 IBM Corp.
40
+#include "virtio-scsi.h"
70
+ *
41
#include "dasd-ipl.h"
71
+ * This work is licensed under the terms of the GNU GPL, version 2 or (at
42
72
+ * your option) any later version. See the COPYING file in the top-level
43
char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
73
+ * directory.
44
@@ -XXX,XX +XXX,XX @@ static int virtio_setup(void)
74
+ */
45
{
75
+#include "qemu/osdep.h"
46
VDev *vdev = virtio_get_device();
76
+#include "qapi/error.h"
47
QemuIplParameters *early_qipl = (QemuIplParameters *)QIPL_ADDRESS;
77
+#include "hw/sysbus.h"
48
+ int ret;
78
+#include "qemu/bitops.h"
49
79
+#include "hw/s390x/ap-bridge.h"
50
memcpy(&qipl, early_qipl, sizeof(QemuIplParameters));
80
+#include "cpu.h"
51
81
+
52
@@ -XXX,XX +XXX,XX @@ static int virtio_setup(void)
82
+static char *ap_bus_get_dev_path(DeviceState *dev)
53
menu_setup();
83
+{
54
}
84
+ /* at most one */
55
85
+ return g_strdup_printf("/1");
56
- if (virtio_get_device_type() == VIRTIO_ID_NET) {
86
+}
57
+ switch (vdev->senseid.cu_model) {
87
+
58
+ case VIRTIO_ID_NET:
88
+static void ap_bus_class_init(ObjectClass *oc, void *data)
59
sclp_print("Network boot device detected\n");
89
+{
60
vdev->netboot_start_addr = qipl.netboot_start_addr;
90
+ BusClass *k = BUS_CLASS(oc);
61
- } else {
91
+
62
- int ret = virtio_blk_setup_device(blk_schid);
92
+ k->get_dev_path = ap_bus_get_dev_path;
63
- if (ret) {
93
+ /* More than one ap device does not make sense */
64
- return ret;
94
+ k->max_dev = 1;
65
- }
95
+}
66
+ return 0;
96
+
67
+ case VIRTIO_ID_BLOCK:
97
+static const TypeInfo ap_bus_info = {
68
+ ret = virtio_blk_setup_device(blk_schid);
98
+ .name = TYPE_AP_BUS,
69
+ break;
99
+ .parent = TYPE_BUS,
70
+ case VIRTIO_ID_SCSI:
100
+ .instance_size = 0,
71
+ ret = virtio_scsi_setup_device(blk_schid);
101
+ .class_init = ap_bus_class_init,
72
+ break;
102
+};
73
+ default:
103
+
74
+ panic("\n! No IPL device available !\n");
104
+void s390_init_ap(void)
105
+{
106
+ DeviceState *dev;
107
+
108
+ /* If no AP instructions then no need for AP bridge */
109
+ if (!s390_has_feat(S390_FEAT_AP)) {
110
+ return;
111
+ }
75
+ }
112
+
76
+
113
+ /* Create bridge device */
77
+ if (!ret) {
114
+ dev = qdev_create(NULL, TYPE_AP_BRIDGE);
78
IPL_assert(virtio_ipl_disk_is_valid(), "No valid IPL device detected");
115
+ object_property_add_child(qdev_get_machine(), TYPE_AP_BRIDGE,
79
}
116
+ OBJECT(dev), NULL);
80
117
+ qdev_init_nofail(dev);
81
- return 0;
82
+ return ret;
83
}
84
85
static void ipl_boot_device(void)
86
diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c
87
index XXXXXXX..XXXXXXX 100644
88
--- a/pc-bios/s390-ccw/virtio-blkdev.c
89
+++ b/pc-bios/s390-ccw/virtio-blkdev.c
90
@@ -XXX,XX +XXX,XX @@ uint64_t virtio_get_blocks(void)
91
int virtio_blk_setup_device(SubChannelId schid)
92
{
93
VDev *vdev = virtio_get_device();
94
- int ret = 0;
95
96
vdev->schid = schid;
97
virtio_setup_ccw(vdev);
98
99
- switch (vdev->senseid.cu_model) {
100
- case VIRTIO_ID_BLOCK:
101
- sclp_print("Using virtio-blk.\n");
102
- break;
103
- case VIRTIO_ID_SCSI:
104
- IPL_assert(vdev->config.scsi.sense_size == VIRTIO_SCSI_SENSE_SIZE,
105
- "Config: sense size mismatch");
106
- IPL_assert(vdev->config.scsi.cdb_size == VIRTIO_SCSI_CDB_SIZE,
107
- "Config: CDB size mismatch");
108
+ sclp_print("Using virtio-blk.\n");
109
110
- sclp_print("Using virtio-scsi.\n");
111
- ret = virtio_scsi_setup(vdev);
112
- break;
113
- default:
114
- panic("\n! No IPL device available !\n");
115
- }
116
-
117
- return ret;
118
+ return 0;
119
}
120
diff --git a/pc-bios/s390-ccw/virtio-scsi.c b/pc-bios/s390-ccw/virtio-scsi.c
121
index XXXXXXX..XXXXXXX 100644
122
--- a/pc-bios/s390-ccw/virtio-scsi.c
123
+++ b/pc-bios/s390-ccw/virtio-scsi.c
124
@@ -XXX,XX +XXX,XX @@ static void scsi_parse_capacity_report(void *data,
125
}
126
}
127
128
-int virtio_scsi_setup(VDev *vdev)
129
+static int virtio_scsi_setup(VDev *vdev)
130
{
131
int retry_test_unit_ready = 3;
132
uint8_t data[256];
133
@@ -XXX,XX +XXX,XX @@ int virtio_scsi_setup(VDev *vdev)
134
135
return 0;
136
}
118
+
137
+
119
+ /* Create bus on bridge device */
138
+int virtio_scsi_setup_device(SubChannelId schid)
120
+ qbus_create(TYPE_AP_BUS, dev, TYPE_AP_BUS);
139
+{
121
+ }
140
+ VDev *vdev = virtio_get_device();
122
+
141
+
123
+static void ap_bridge_class_init(ObjectClass *oc, void *data)
142
+ vdev->schid = schid;
124
+{
143
+ virtio_setup_ccw(vdev);
125
+ DeviceClass *dc = DEVICE_CLASS(oc);
126
+
144
+
127
+ set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
145
+ IPL_assert(vdev->config.scsi.sense_size == VIRTIO_SCSI_SENSE_SIZE,
146
+ "Config: sense size mismatch");
147
+ IPL_assert(vdev->config.scsi.cdb_size == VIRTIO_SCSI_CDB_SIZE,
148
+ "Config: CDB size mismatch");
149
+
150
+ sclp_print("Using virtio-scsi.\n");
151
+
152
+ return virtio_scsi_setup(vdev);
128
+}
153
+}
129
+
130
+static const TypeInfo ap_bridge_info = {
131
+ .name = TYPE_AP_BRIDGE,
132
+ .parent = TYPE_SYS_BUS_DEVICE,
133
+ .instance_size = 0,
134
+ .class_init = ap_bridge_class_init,
135
+};
136
+
137
+static void ap_register(void)
138
+{
139
+ type_register_static(&ap_bridge_info);
140
+ type_register_static(&ap_bus_info);
141
+}
142
+
143
+type_init(ap_register)
144
diff --git a/hw/s390x/ap-device.c b/hw/s390x/ap-device.c
145
new file mode 100644
146
index XXXXXXX..XXXXXXX
147
--- /dev/null
148
+++ b/hw/s390x/ap-device.c
149
@@ -XXX,XX +XXX,XX @@
150
+/*
151
+ * Adjunct Processor (AP) matrix device
152
+ *
153
+ * Copyright 2018 IBM Corp.
154
+ *
155
+ * This work is licensed under the terms of the GNU GPL, version 2 or (at
156
+ * your option) any later version. See the COPYING file in the top-level
157
+ * directory.
158
+ */
159
+#include "qemu/osdep.h"
160
+#include "qemu/module.h"
161
+#include "qapi/error.h"
162
+#include "hw/qdev.h"
163
+#include "hw/s390x/ap-device.h"
164
+
165
+static void ap_class_init(ObjectClass *klass, void *data)
166
+{
167
+ DeviceClass *dc = DEVICE_CLASS(klass);
168
+
169
+ dc->desc = "AP device class";
170
+ dc->hotpluggable = false;
171
+}
172
+
173
+static const TypeInfo ap_device_info = {
174
+ .name = AP_DEVICE_TYPE,
175
+ .parent = TYPE_DEVICE,
176
+ .instance_size = sizeof(APDevice),
177
+ .class_size = sizeof(DeviceClass),
178
+ .class_init = ap_class_init,
179
+ .abstract = true,
180
+};
181
+
182
+static void ap_device_register(void)
183
+{
184
+ type_register_static(&ap_device_info);
185
+}
186
+
187
+type_init(ap_device_register)
188
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
189
index XXXXXXX..XXXXXXX 100644
190
--- a/hw/s390x/s390-virtio-ccw.c
191
+++ b/hw/s390x/s390-virtio-ccw.c
192
@@ -XXX,XX +XXX,XX @@
193
#include "ipl.h"
194
#include "hw/s390x/s390-virtio-ccw.h"
195
#include "hw/s390x/css-bridge.h"
196
+#include "hw/s390x/ap-bridge.h"
197
#include "migration/register.h"
198
#include "cpu_models.h"
199
#include "hw/nmi.h"
200
@@ -XXX,XX +XXX,XX @@ static void ccw_init(MachineState *machine)
201
/* init the SIGP facility */
202
s390_init_sigp();
203
204
+ /* create AP bridge and bus(es) */
205
+ s390_init_ap();
206
+
207
/* get a BUS */
208
css_bus = virtual_css_bus_init();
209
s390_init_ipl_dev(machine->kernel_filename, machine->kernel_cmdline,
210
diff --git a/include/hw/s390x/ap-bridge.h b/include/hw/s390x/ap-bridge.h
211
new file mode 100644
212
index XXXXXXX..XXXXXXX
213
--- /dev/null
214
+++ b/include/hw/s390x/ap-bridge.h
215
@@ -XXX,XX +XXX,XX @@
216
+/*
217
+ * ap bridge
218
+ *
219
+ * Copyright 2018 IBM Corp.
220
+ *
221
+ * This work is licensed under the terms of the GNU GPL, version 2 or (at
222
+ * your option) any later version. See the COPYING file in the top-level
223
+ * directory.
224
+ */
225
+
226
+#ifndef HW_S390X_AP_BRIDGE_H
227
+#define HW_S390X_AP_BRIDGE_H
228
+
229
+#define TYPE_AP_BRIDGE "ap-bridge"
230
+#define TYPE_AP_BUS "ap-bus"
231
+
232
+void s390_init_ap(void);
233
+
234
+#endif
235
diff --git a/include/hw/s390x/ap-device.h b/include/hw/s390x/ap-device.h
236
new file mode 100644
237
index XXXXXXX..XXXXXXX
238
--- /dev/null
239
+++ b/include/hw/s390x/ap-device.h
240
@@ -XXX,XX +XXX,XX @@
241
+/*
242
+ * Adjunct Processor (AP) matrix device interfaces
243
+ *
244
+ * Copyright 2018 IBM Corp.
245
+ *
246
+ * This work is licensed under the terms of the GNU GPL, version 2 or (at
247
+ * your option) any later version. See the COPYING file in the top-level
248
+ * directory.
249
+ */
250
+#ifndef HW_S390X_AP_DEVICE_H
251
+#define HW_S390X_AP_DEVICE_H
252
+
253
+#define AP_DEVICE_TYPE "ap-device"
254
+
255
+typedef struct APDevice {
256
+ DeviceState parent_obj;
257
+} APDevice;
258
+
259
+#define AP_DEVICE(obj) \
260
+ OBJECT_CHECK(APDevice, (obj), AP_DEVICE_TYPE)
261
+
262
+#endif /* HW_S390X_AP_DEVICE_H */
263
--
154
--
264
2.14.4
155
2.31.1
265
266
diff view generated by jsdifflib
1
Update to kvm/next commit dd5bd0a65ff6 ("Merge tag 'kvm-s390-next-4.20-1'
1
The virtio-blk code uses the block size and geometry fields in the
2
of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD")
2
config area. According to the virtio-spec, these have to be negotiated
3
with the right feature bits during initialization, otherwise they
4
might not be available. QEMU is so far very forgiving and always
5
provides them, but we should not rely on this behavior, so let's
6
better request them properly via the VIRTIO_BLK_F_GEOMETRY and
7
VIRTIO_BLK_F_BLK_SIZE feature bits.
3
8
4
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
9
Message-Id: <20220704111903.62400-11-thuth@redhat.com>
10
Signed-off-by: Thomas Huth <thuth@redhat.com>
5
---
11
---
6
include/standard-headers/linux/input.h | 9 +++++----
12
pc-bios/s390-ccw/virtio-blkdev.c | 4 ++++
7
linux-headers/asm-arm/kvm.h | 13 +++++++++++++
13
1 file changed, 4 insertions(+)
8
linux-headers/asm-arm64/kvm.h | 13 +++++++++++++
9
linux-headers/asm-s390/kvm.h | 2 ++
10
linux-headers/asm-x86/kvm.h | 1 +
11
linux-headers/linux/kvm.h | 2 ++
12
linux-headers/linux/vfio.h | 2 ++
13
linux-headers/linux/vhost.h | 2 +-
14
8 files changed, 39 insertions(+), 5 deletions(-)
15
14
16
diff --git a/include/standard-headers/linux/input.h b/include/standard-headers/linux/input.h
15
diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c
17
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
18
--- a/include/standard-headers/linux/input.h
17
--- a/pc-bios/s390-ccw/virtio-blkdev.c
19
+++ b/include/standard-headers/linux/input.h
18
+++ b/pc-bios/s390-ccw/virtio-blkdev.c
20
@@ -XXX,XX +XXX,XX @@ struct input_mask {
21
/*
22
* MT_TOOL types
23
*/
24
-#define MT_TOOL_FINGER        0
25
-#define MT_TOOL_PEN        1
26
-#define MT_TOOL_PALM        2
27
-#define MT_TOOL_MAX        2
28
+#define MT_TOOL_FINGER        0x00
29
+#define MT_TOOL_PEN        0x01
30
+#define MT_TOOL_PALM        0x02
31
+#define MT_TOOL_DIAL        0x0a
32
+#define MT_TOOL_MAX        0x0f
33
34
/*
35
* Values describing the status of a force-feedback effect
36
diff --git a/linux-headers/asm-arm/kvm.h b/linux-headers/asm-arm/kvm.h
37
index XXXXXXX..XXXXXXX 100644
38
--- a/linux-headers/asm-arm/kvm.h
39
+++ b/linux-headers/asm-arm/kvm.h
40
@@ -XXX,XX +XXX,XX @@
19
@@ -XXX,XX +XXX,XX @@
41
#define __KVM_HAVE_GUEST_DEBUG
20
#include "virtio.h"
42
#define __KVM_HAVE_IRQ_LINE
21
#include "virtio-scsi.h"
43
#define __KVM_HAVE_READONLY_MEM
22
44
+#define __KVM_HAVE_VCPU_EVENTS
23
+#define VIRTIO_BLK_F_GEOMETRY (1 << 4)
45
24
+#define VIRTIO_BLK_F_BLK_SIZE (1 << 6)
46
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
47
48
@@ -XXX,XX +XXX,XX @@ struct kvm_sync_regs {
49
struct kvm_arch_memory_slot {
50
};
51
52
+/* for KVM_GET/SET_VCPU_EVENTS */
53
+struct kvm_vcpu_events {
54
+    struct {
55
+        __u8 serror_pending;
56
+        __u8 serror_has_esr;
57
+        /* Align it to 8 bytes */
58
+        __u8 pad[6];
59
+        __u64 serror_esr;
60
+    } exception;
61
+    __u32 reserved[12];
62
+};
63
+
25
+
64
/* If you need to interpret the index values, here is the key: */
26
static int virtio_blk_read_many(VDev *vdev, ulong sector, void *load_addr,
65
#define KVM_REG_ARM_COPROC_MASK        0x000000000FFF0000
27
int sec_num)
66
#define KVM_REG_ARM_COPROC_SHIFT    16
28
{
67
diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h
29
@@ -XXX,XX +XXX,XX @@ int virtio_blk_setup_device(SubChannelId schid)
68
index XXXXXXX..XXXXXXX 100644
30
{
69
--- a/linux-headers/asm-arm64/kvm.h
31
VDev *vdev = virtio_get_device();
70
+++ b/linux-headers/asm-arm64/kvm.h
32
71
@@ -XXX,XX +XXX,XX @@
33
+ vdev->guest_features[0] = VIRTIO_BLK_F_GEOMETRY | VIRTIO_BLK_F_BLK_SIZE;
72
#define __KVM_HAVE_GUEST_DEBUG
34
vdev->schid = schid;
73
#define __KVM_HAVE_IRQ_LINE
35
virtio_setup_ccw(vdev);
74
#define __KVM_HAVE_READONLY_MEM
75
+#define __KVM_HAVE_VCPU_EVENTS
76
77
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
78
79
@@ -XXX,XX +XXX,XX @@ struct kvm_sync_regs {
80
struct kvm_arch_memory_slot {
81
};
82
83
+/* for KVM_GET/SET_VCPU_EVENTS */
84
+struct kvm_vcpu_events {
85
+    struct {
86
+        __u8 serror_pending;
87
+        __u8 serror_has_esr;
88
+        /* Align it to 8 bytes */
89
+        __u8 pad[6];
90
+        __u64 serror_esr;
91
+    } exception;
92
+    __u32 reserved[12];
93
+};
94
+
95
/* If you need to interpret the index values, here is the key: */
96
#define KVM_REG_ARM_COPROC_MASK        0x000000000FFF0000
97
#define KVM_REG_ARM_COPROC_SHIFT    16
98
diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
99
index XXXXXXX..XXXXXXX 100644
100
--- a/linux-headers/asm-s390/kvm.h
101
+++ b/linux-headers/asm-s390/kvm.h
102
@@ -XXX,XX +XXX,XX @@ struct kvm_s390_vm_cpu_subfunc {
103
#define KVM_S390_VM_CRYPTO_ENABLE_DEA_KW    1
104
#define KVM_S390_VM_CRYPTO_DISABLE_AES_KW    2
105
#define KVM_S390_VM_CRYPTO_DISABLE_DEA_KW    3
106
+#define KVM_S390_VM_CRYPTO_ENABLE_APIE        4
107
+#define KVM_S390_VM_CRYPTO_DISABLE_APIE        5
108
109
/* kvm attributes for migration mode */
110
#define KVM_S390_VM_MIGRATION_STOP    0
111
diff --git a/linux-headers/asm-x86/kvm.h b/linux-headers/asm-x86/kvm.h
112
index XXXXXXX..XXXXXXX 100644
113
--- a/linux-headers/asm-x86/kvm.h
114
+++ b/linux-headers/asm-x86/kvm.h
115
@@ -XXX,XX +XXX,XX @@ struct kvm_sync_regs {
116
117
#define KVM_X86_QUIRK_LINT0_REENABLED    (1 << 0)
118
#define KVM_X86_QUIRK_CD_NW_CLEARED    (1 << 1)
119
+#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE    (1 << 2)
120
121
#define KVM_STATE_NESTED_GUEST_MODE    0x00000001
122
#define KVM_STATE_NESTED_RUN_PENDING    0x00000002
123
diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
124
index XXXXXXX..XXXXXXX 100644
125
--- a/linux-headers/linux/kvm.h
126
+++ b/linux-headers/linux/kvm.h
127
@@ -XXX,XX +XXX,XX @@ struct kvm_ppc_resize_hpt {
128
#define KVM_CAP_HYPERV_TLBFLUSH 155
129
#define KVM_CAP_S390_HPAGE_1M 156
130
#define KVM_CAP_NESTED_STATE 157
131
+#define KVM_CAP_ARM_INJECT_SERROR_ESR 158
132
+#define KVM_CAP_MSR_PLATFORM_INFO 159
133
134
#ifdef KVM_CAP_IRQ_ROUTING
135
136
diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h
137
index XXXXXXX..XXXXXXX 100644
138
--- a/linux-headers/linux/vfio.h
139
+++ b/linux-headers/linux/vfio.h
140
@@ -XXX,XX +XXX,XX @@ struct vfio_device_info {
141
#define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)    /* vfio-platform device */
142
#define VFIO_DEVICE_FLAGS_AMBA (1 << 3)    /* vfio-amba device */
143
#define VFIO_DEVICE_FLAGS_CCW    (1 << 4)    /* vfio-ccw device */
144
+#define VFIO_DEVICE_FLAGS_AP    (1 << 5)    /* vfio-ap device */
145
    __u32    num_regions;    /* Max region index + 1 */
146
    __u32    num_irqs;    /* Max IRQ index + 1 */
147
};
148
@@ -XXX,XX +XXX,XX @@ struct vfio_device_info {
149
#define VFIO_DEVICE_API_PLATFORM_STRING        "vfio-platform"
150
#define VFIO_DEVICE_API_AMBA_STRING        "vfio-amba"
151
#define VFIO_DEVICE_API_CCW_STRING        "vfio-ccw"
152
+#define VFIO_DEVICE_API_AP_STRING        "vfio-ap"
153
154
/**
155
* VFIO_DEVICE_GET_REGION_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 8,
156
diff --git a/linux-headers/linux/vhost.h b/linux-headers/linux/vhost.h
157
index XXXXXXX..XXXXXXX 100644
158
--- a/linux-headers/linux/vhost.h
159
+++ b/linux-headers/linux/vhost.h
160
@@ -XXX,XX +XXX,XX @@ struct vhost_memory {
161
#define VHOST_BACKEND_F_IOTLB_MSG_V2 0x1
162
163
#define VHOST_SET_BACKEND_FEATURES _IOW(VHOST_VIRTIO, 0x25, __u64)
164
-#define VHOST_GET_BACKEND_FEATURES _IOW(VHOST_VIRTIO, 0x26, __u64)
165
+#define VHOST_GET_BACKEND_FEATURES _IOR(VHOST_VIRTIO, 0x26, __u64)
166
167
/* VHOST_NET specific defines */
168
36
169
--
37
--
170
2.14.4
38
2.31.1
171
172
diff view generated by jsdifflib
New patch
1
All the other protytpes in the headers here do not use the "extern"
2
keyword, so let's unify this by removing the "extern" from the misfits,
3
too.
1
4
5
Message-Id: <20220704111903.62400-12-thuth@redhat.com>
6
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
7
Signed-off-by: Thomas Huth <thuth@redhat.com>
8
---
9
pc-bios/s390-ccw/virtio.h | 12 ++++++------
10
1 file changed, 6 insertions(+), 6 deletions(-)
11
12
diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h
13
index XXXXXXX..XXXXXXX 100644
14
--- a/pc-bios/s390-ccw/virtio.h
15
+++ b/pc-bios/s390-ccw/virtio.h
16
@@ -XXX,XX +XXX,XX @@ VirtioGDN virtio_guessed_disk_nature(void);
17
void virtio_assume_eckd(void);
18
void virtio_assume_iso9660(void);
19
20
-extern bool virtio_ipl_disk_is_valid(void);
21
-extern int virtio_get_block_size(void);
22
-extern uint8_t virtio_get_heads(void);
23
-extern uint8_t virtio_get_sectors(void);
24
-extern uint64_t virtio_get_blocks(void);
25
-extern int virtio_read_many(ulong sector, void *load_addr, int sec_num);
26
+bool virtio_ipl_disk_is_valid(void);
27
+int virtio_get_block_size(void);
28
+uint8_t virtio_get_heads(void);
29
+uint8_t virtio_get_sectors(void);
30
+uint64_t virtio_get_blocks(void);
31
+int virtio_read_many(ulong sector, void *load_addr, int sec_num);
32
33
#define VIRTIO_SECTOR_SIZE 512
34
#define VIRTIO_ISO_BLOCK_SIZE 2048
35
--
36
2.31.1
diff view generated by jsdifflib
New patch
1
When compiling the s390-ccw bios with Clang (v14.0), there is currently
2
an unuseful warning like this:
1
3
4
CC pc-bios/s390-ccw/ipv6.o
5
../../roms/SLOF/lib/libnet/ipv6.c:447:18: warning: variable length array
6
folded to constant array as an extension [-Wgnu-folding-constant]
7
unsigned short raw[ip6size];
8
^
9
10
SLOF is currently GCC-only and cannot be compiled with Clang yet, so
11
it is expected that such extensions sneak in there - and as long as
12
we don't want to compile the code with a compiler that is neither GCC
13
or Clang, it is also not necessary to avoid such extensions.
14
15
Thus these GNU-extension related warnings are completely useless in
16
the s390-ccw bios, especially in the code that is coming from SLOF,
17
so we should simply disable the related warnings here now.
18
19
Message-Id: <20220704111903.62400-13-thuth@redhat.com>
20
Signed-off-by: Thomas Huth <thuth@redhat.com>
21
---
22
pc-bios/s390-ccw/netboot.mak | 7 +++++--
23
1 file changed, 5 insertions(+), 2 deletions(-)
24
25
diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak
26
index XXXXXXX..XXXXXXX 100644
27
--- a/pc-bios/s390-ccw/netboot.mak
28
+++ b/pc-bios/s390-ccw/netboot.mak
29
@@ -XXX,XX +XXX,XX @@ s390-netboot.elf: $(NETOBJS) libnet.a libc.a
30
s390-netboot.img: s390-netboot.elf
31
    $(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,"STRIP","$(TARGET_DIR)$@")
32
33
+# SLOF is GCC-only, so ignore warnings about GNU extensions with Clang here
34
+NO_GNU_WARN := $(call cc-option,-Werror $(QEMU_CFLAGS),-Wno-gnu)
35
+
36
# libc files:
37
38
-LIBC_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
39
+LIBC_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(NO_GNU_WARN) $(LIBC_INC) $(LIBNET_INC) \
40
     -MMD -MP -MT $@ -MF $(@:%.o=%.d)
41
42
CTYPE_OBJS = isdigit.o isxdigit.o toupper.o
43
@@ -XXX,XX +XXX,XX @@ libc.a: $(LIBCOBJS)
44
45
LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \
46
     dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o
47
-LIBNETCFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
48
+LIBNETCFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(NO_GNU_WARN) $(LIBC_INC) $(LIBNET_INC) \
49
     -DDHCPARCH=0x1F -MMD -MP -MT $@ -MF $(@:%.o=%.d)
50
51
%.o : $(SLOF_DIR)/lib/libnet/%.c
52
--
53
2.31.1
diff view generated by jsdifflib
New patch
1
The binaries have been recompiled with the fixes from the previous patches.
1
2
3
Signed-off-by: Thomas Huth <thuth@redhat.com>
4
---
5
pc-bios/s390-ccw.img | Bin 50936 -> 42608 bytes
6
pc-bios/s390-netboot.img | Bin 79688 -> 67232 bytes
7
2 files changed, 0 insertions(+), 0 deletions(-)
8
9
diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img
10
index XXXXXXX..XXXXXXX 100644
11
GIT binary patch
12
literal 42608
13
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
380
NjDl;rRhaO^{{!#4+l>GK
381
382
literal 50936
383
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
825
E03u^A*Z=?k
826
827
diff --git a/pc-bios/s390-netboot.img b/pc-bios/s390-netboot.img
828
index XXXXXXX..XXXXXXX 100644
829
GIT binary patch
830
literal 67232
831
zcmeF4d3==B_5bfoLK2W=5&}$u!UQ6OMHm(lT<S~!1zb9~)Sy)(?$uVRsb5?Btr1g2
832
zR18t9b{$bVxYYq|6|I`KwqL*9zSO!^Ym1Ir+qeuE1q3p`_vbv%Oaf?yw!i*Wcunr}
833
z-1VGu&pr3tbI-lc6|;{%A{Y#~!oMOnm}iS9Z7w^{kB?ax2yU=2=BB&eF6IWf{=Ap)
834
zE4Fw?ocC{+FtEjo&WEmy_ac6Nx!`m!eb<l{ynp#naOszC&rjYpD8AK;$%i4ms$4HG
835
z-riklv-g${o$ENki^+$Da>9{+T@UMTY4gq@s5C3yjeOD4owIU5Vm_gqk(q4y(C8xE
836
z@^qQQGyj6Sgs#?$FNDQsHN8HcxKclUPlFKUjw7?*-p+XC@dQ4<{e0*G6E8e};lvBi
837
znl^R9B^OPYWX-9LN`6I09($sDY5q@FKiKxSWh?HwX4J$3&aYW^+=zje%j<X1Mo5<|
838
zFLuG$zU9q4>!0FF-+pP~<m=ksEqVF1i5sS`oBGUGZ(Y{!p@*Np$#VRiKQNRLvb#Sm
839
zb3b~+k1z1E5-Q7`>#K*-tCqc~kbh<T_9cEFy_8;A;MWMRb=~<F`}}J4PA<eRUaw;O
840
z3%2kl(4(FgEZVt<yQJx?voF5*^s~-rI>ViQNz)k@H@QpB{=!+OpT9^+7k#P8OFDni
841
zG^IA3?ap6x;X<!;X>%^$fCu-L0jrnzeEnX$KW>TN;J3RIp2X+z&DXO<`H0W%oZrKf
842
zcuObE%kSe^dZp1zMf~`*6(>Gy5Bc~jqkeo)^wmEvf6EI`>813_V4Xt#`SE|qm-k}-
843
z^Y=d#_zwmCLxKNL;6D`j4+Z{1f&Wn8KNR>61^y)z=(s2wb+zrRD;AxY+P1B^{dE?}
844
zC$vYL`@%YVUaY^R$G5YdIrptpm2;^vuH>p<QCVuZ3#3}y_|(JBwYNIgye6L9)SL>t
845
zqROG+nmM6XcWuN4Rt?E*9bA!`k;|<sc4K42s=kruR*XnBxv8l~sN->0lxoVoZf$-;
846
zskINcM``VcD}vF!sivaex5ub`aV8S|ylYK0xS~0sn5*1hHLHce6>2vVjefx`_u7bg
847
zZ5&7&ExG67>5X-%xq*h%4ChE6rxs2<m(~LJe_PLyS1LvjUy+(sbSZcQ?q6<@T%3uu
848
z_HwP6Xlt?lW|OWq6U(mVZ=y9wOsq9vsgA#mtwpXi5!!T_>O1!j)HX&>hs{~r3&=v`
849
zugrutHM_;@2D=)2s#SVpnYDD1m3mx%$NXM@4=n@MK9+W>rKMAsx!$Q;T_31hOznrz
850
z2afi>YGs~HO~~cKi&HIuNmgcomAR#2NorQ$qy}=OhPh%=KSx-SY6-?H*MC{At9qn=
851
z#ZMm|Z{2ua9*2{^yDsSHt3aIkngRzF;@hC^ldf-SEInK4M#L*Np0{FR$dTuBKna&b
852
zfN-PXdHT1h<6>HVJRZ3sw`z3OrRI{;>yI|U@!9V+xb=>5!L|S0>eh~M%}biyzG^Y}
853
zEn1wnuD6?;Ix3e=eaj^%7lNkHy}q*54Zf1NK<c2}7V?c&U1uzyTubnB=zJr6<2Ehh
854
zZ(`F8{Ecn8p1;ve*YP*9X(@k08(}wcUdyw~Zc*=Mv;1|NmJpNJbPa!F**A%aW;gIR
855
zw&`kOqMN?X-$?caVnW&V{EcjCAttoxD*h(2?aG;bn7`3%TB*i2F8dVEA>*XRO^cOt
856
z)0O;<!5OV^y!*m*dM5CL8HPnk`y!sF#GxT&sEe@&-l{JSFYyE~rmD)ES0mUT+1^Nr
857
z15*oJrN++>4j|6B{kVksDmWk$-B{}?JEmX->!-B%l%$Q65sUI%5T=*t>HkXA2Fi^~
858
zjG{#*6@tgnKPBolu)WMx=J{`$_}w^Ca3B23iV?<(qs5h}rmlzKj)PR!g_~1f$>o&i
859
zoH?mmy1t#~@eALzxKAn1=MA27&a>yk6kk-Yzrjk{m|?M_EcfVCXV<z+WMiEhtoPW+
860
zJO;G5EYrAgoT$5Ttf;$j41c5KY&9tUXyr>O|26W>w0!lJFK+o_em)zCXTL|jue67p
861
z`|p!eGa}HMM~%RE>ZlD4%w~y>a8U>u3LG`Zn=Dxf9cOiYEj7WFrk)I(o0?GCm8x|M
862
z$Xl;kfFp3<8Ondk6zUG#cM3I>xmwaE#RoGo=DMK4nrU+(qsW4rB+J}#Qu?TG@2fXj
863
zl&OxBXOq_C#%k2X8#mU{{~>Ccmzq)LwKP6I4nO@z@j=(*kK==y3&R(y?_EEz9!?!c
864
z2wKS+Yv=6(ja%GAYrjbG!7u7>WFBSSq|Cwb$i_K}IcSaElyA{=y`Ozds&mIPevYW+
865
zNak}~IMQ+)N{$B_;4VoN#nfF+t&iww%1^;vcul5$D}C|`)qTOMR&qEculG4BaPI?(
866
zJLwNd9i*aLCmP>-SDR~gqORz7?;R?8;T-55_ImEDu6T2EAaz+Tw}O1k8~>eYCaorQ
867
zXYMl9OUrdu>kp{4!s{>UE>;ia(;CXW-lsQuQ@YF*Tb-S`7pNhU&vnubo-}mFGb^d=
868
z^ftFhq0Jd5b;To#0&3~xSK!?c+}7LGlR7!iZAyy_XOvx>dUD6nsn5B<y0E)C)tOtB
869
z`Z992bBB7t#_eg(_%VMrN^MrjvmPPG^LqcBjk~kfLg9IZo^9$X5&cC6YP2zV!B4H+
870
zcPTfBngxrE#0wT%{6gY;TYWz;$X>LzmRMR#s&o6cQv27Qb%A?+t+cPcP7hR^_qBEV
871
zfK$*-fr?eBLvp!}nOGD15~DFyL2U2mb0Mf350$&rk-2Ru>-x=#+W2wqGfxi)tcN>0
872
zw<Vt^7yZi6bVsdS%lPTUlJBz4?SD%!TVhWWEp==r6hM;N^AS&%2GV}1=_=K6j+Mw|
873
zi|xrPQB8?0eu+tx$oeIQTM299<{kMqO1r!|Zg%-PO1rRV2buva|F3A5cjEKu7Ixg9
874
zP0-$Ydg}A3ZMjCDLZ`z0ju{}3TE}QiI(OBm%n1?Zz|`rkPq-J<64i$CTT>rM_D>x}
875
z&PVwTb-~m@t}Z+-JTx`d^-op167oD43nj}^;c7?NCl*P%HkS-Ggx0&Y5m(LZ8(9)@
876
z`?kNH%jHh@c@QZFWLZ~S+L>A~VDq{fHz-w`du}HfnsV*&Q<DAL`X$`VV)ab!5kYIS
877
zMxE;~s2Bf=*q@0Z+7n=CeYW@~sX1=nSd4y~<BAiJP+y+=B%+~ELnI-HYJe!ZBnm{G
878
zKs4CrC(57sntF2a?WsD-M?!AZcvqZ>g!(Wq*0~rl6(3bY*ZZm=T#>3aopfYsx(f^%
879
zh}0{EGE=RMSZYizSK6g~D;${20E-s1uR~lQJ}}}|IACqceQ0^dDpzS~cfXza9rYVL
880
z?iQawjce&Ojs1~rs%ad3G9<S>6%M&rDC&Hg4+O*HlB7rTu2reKb6rp^Fz9wPtRd35
881
zMXfXcOM39)X~^TU%p@LLXHH4D`blX=F9%YibDO=s%J-8G*Nxej$4_UX-{%@rRRgxr
882
zdy|0ZDt>LWaA<1XfGz5sD}A^=o*%kSf*;YYki<bZR5Jt5;hB?@1L`NY=CS)Q6G@ga
883
zSB=eW^|=RW-f<)PlekAb+?kV%dVug39ZzH%=r3_Pw9*(q^XtZWNAQmJLXXE4dtS(%
884
z57FPQe$e}S**P9w=e$hmi0D;Wd2I-K^+q^^))%AC-Ro)-XiQ2=M6(YLiqp%lOTvWP
885
zsC^Z%Pe?tC?pzg*Wba)&B_ho;y(I1S4UdyvYn(9>3jL(wQDpiewY}rraMjualgb%d
886
z5<*8^L&_lVOdzQ%871FC(*VyCqw8Jj$=uV15i<vP+#qf}vtGH-2$Qb%=>geahTPM=
887
zvM+{0K#+`wvcI*SK7`R;M(VnR%OLMu>(eg#zll)CYMz@r?skWwclUM!)-}7RI4XX3
888
zc3pf*cHPtPWzz9C5EV}Zk(ws?7w#~seTO!FX-~KA4zFNa*!jt@Eqwc54BMRs(WeWr
889
z&D$Nep7d6K!8db7*M%2b*;mBrqTAVj)Tmo>8+|)6RTV<2b&t4)P=fUcbYYFb$SYZU
890
zx{DV2u$(?DhnoYL(9|HS$i=Q=U6HHl7~u|Q=7)RH-|DR0ZJBKLGUL~})O0wfB0Mr4
891
z&EC0oYE&Fya`Tqv>|JXo+q-c{CM(|XqzQcc=j?eN-=2MKYFpP9jc!kaZ!69wV~Om_
892
zOl*A_dPl9>mztA_SoY3L)Q=g+6C4mvWLMJ*XbFskuR*WNTye*rH!c$28C}ptNjXt;
893
z@z(dLZQE}RFN7|?=hwvV>(8IQv20@*9QUTy@A2fuvcfvzWYXvGJ1C5<O+Clh`m!z6
894
zQg)g&&0b$X?=E+(jH3~z`L?E-%1*=@&^Oi6t1(p$-?gw#c%1ObGSmOgcvJQ4I28&P
895
zbqsdp%<|2yLXe*Es5cU5n>EwZ12&!)aq&gj_IUHg3!m<_@v?|CzA(Shl22#c@AKZ%
896
z$?kFSYBJQ(Kvm5hC+;>bPRu^dxOiIQBJmO9;*3=WS2-4f^Jv4Q&5l0d!N8egY=;G<
897
z2bs~PSa5g{Y&=incH?CsgO8E=uY!nGK`yubsXR2>f3|8kvsAMi{BMS1gu&5Lfa3~}
898
z0-5#dC+LH8>ZXB@e`t{>snjFWd2VK<DM>ZgBvobVawHYK5ieJdAiC(0=0M1$u7guX
899
zdy=ZL!`c=1S#NBgDK0sCpv4~65Zc%`JSlZBYyH7)3O`$;Hol1MhgF%kHuG29wmP;_
900
zBUZSL=K--dgG*Xgqzf~6JoMgq>lkg}x$Vu^V}73ca#pLlsaTmJ8kuO4#WUwOOOFbq
901
z<~!E2xeqmarfQ2ifw6+J17}WYcBy$TP(SHw(s^D5f;U-7MmC;@b~ed1qiHl%9Kcg7
902
z)l|NKFp_E-@I%57@8yJLsix3=gvEsaOBf*iK*q&iDPQB7Dg8A<N{8wRDP8^}LP`%f
903
znUK=u7ZOr>z)uN-<og^Uwe)`xE5zTZC2qBhB&3%9-yo!x{(}gqrQeH$l<t2NV>f45
904
zOV<J8c#SB93<c|W&BpWM<r~j$>k~n)+M36DXxqhbMhEzsjl$y+D1*h#X0WGietXr%
905
zNfms;FfPn!>;LY^ZHHIdKW^kM9Iw9JHkFoG>F_j>mf!k!Lvh9jYWu^Dc_==73n<?H
906
zw?olxQ2d|(#a%%0&c7Xsr3S?X1t`t|ig*9*P@G^;)D@r@2^6ea_{+MFze%&+{D0=o
907
zGlmI@t*_^y*t&t1xBR=IXtY^(>&gNY-(j|v&HCR;i^jD^i_;5GoD3A`SpQ}yu$0py
908
z`xc-W0u-|A|9fe1grL|Wd#OpSEzbaj_89)XP}oXp%Pj>c=!=ad|86Kwf6-`hd;yAM
909
zfueM0C_FtQTbM)q`6I+strd~xkLf(`s%KnhdPX~X2J=U&=^3rkGrrZWXPmy;TCXg$
910
zJ|J~#E|-bD_kykB#&lft-mMO8dQM_vAAcsFA9I??i_T5W*Nj*^Gc}(&n~MJLADJ~b
911
zKi`H{5}u(|%V$@jag4<F(XDaB6Q0HqFK8TE5A>N?!Fr#4mej$_?wz?e=0pq7O)B%C
912
zYfnuo7F0*4CItoM<kX}9VXx!RE1C(PB#aUNB4H%eR8ss8L4R2f=&$`(K<`4LZSnsA
913
z75Yr^@q}n3#X|_uXL?N{M4u^L^AAB=(*xSm{!wV*f)LypHLVV<EIg1^&tvFWP_yLg
914
zgiy2eWkNKnlD7%LqjUu!c$D-a1dp->gu-LcKZ3^xkM+PK{!ie++HDs+mID`f^!h8I
915
z@OXkyc+4jRk6xcA1dm>m2*D$;iV!^5>H7yX#t#-S()-$qrZ6YRo3jtcTeHt;CDB7;
916
z)I470Ym)yW&GEA(8u=d#VU_uGe)NA3LIS7%-ShJ)zYrwv7od3mH$bua-wuW8ZSUWh
917
zr^WkAQ-7M#$_l<u>Q6PLTFJA{e>v5(<BQ=@<T;GprAV9|QNh0X+X;3y^LrjU8kaY3
918
zggZ*_)|%}U_QJvL%spCt9nrpl5*Mfb@KLL;4Ii=k+WKi=@mF6P{MFZ=Z1pAhSoL^%
919
z-eH~vWAhyIGw9rW6Z{H<n;$SfZXuMFqIUEBe)?6$&!4bXl*~T)#niP1>kQ=fDTS5d
920
z?sA)zqLU@lhc)3+-_%NRnFp&z&kWbYw!GWQbW(VMR;DN4;;&3+r^<S?7ijiq6DZ6R
921
zvT#<=-auBSl{05GyVS|F7xz}CGegWBon52-aJVcud$uxOP+wRX|NZub?>pW2(teMX
922
z@t#oE!*{{By}<VozrEe?-J|ww<=^m90l$VG^!><{zkBlI@Y^GLT7NdI-3$Dd{0s0q
923
zw}9U#_g}-u;pg$qwkxGu*mKLar}v1)9?tXj9OuA;ABVFK!!kdd>4%5x1sq50IUEIE
924
z{>OOB!@Fe9+Y5~UIK1~9zmw8?(cYmS*WRA<@=440yuHHM`6uXk(uBQe@0pLoPnxC2
925
z!yo>BFKD|LZ5QRo(LaIfXMVC5xJvG8p4qKEZ;X6+k{^0wxAViJy!WlyJ;LAQ<Y%t)
926
z;gN;3d*1tKIhluNHw&rXZu>4_+Thru`S7HoJ*P|Hx6tJy=fgd3?=$Ut(VjHAf404Y
927
z_q@HJwB&!by(xR%Uf}M3zP%Ig*^BnN{srwlw-@bA{ui`&>|V5Y_1|sp6SPrp=i<bu
928
z-`*aK%Rm|JedNx?p38v~*6c-lS~q-Td*1lp^8B8U!xO&0=XCufJ$TDE{PrjAMf(f>
929
zh3y~jwZHi<tVSaC+_Gi%UchqZUce&nijR~LJ`C&p@EEO(JXkj0v*)lJ|JS{MMf1Yn
930
zgXK&gmJ9qaPp5~x_YZRDCR6ro-E{n-y?{&Ww2y>qFWPI~i}pT&4j=s9$A5~})5kxi
931
z_4M11raHGY>`A|9MSa56{)+lD_(OHi);0c$x~8ydobRtvh5ewJ`?I3PtFXStUs3PL
932
zDz(Jgo8`Bc*n{>GKDE8}`t)dz-AKc{W#hU%!j$#+2}4uoXC3SQ)vj{qwtY)#H?FLZ
933
zg9XYrV86gGE+9L`%v!9gHDA!m{AG{w8^5?G?S~Eb<Javu?g81}yJ_7M_dTOE7$1LO
934
z>aS*jh<!4?f#(XG4UQ>m@11T7!~)*}aSC?xLAzNX=7*1Hk2-hUn?8Q8?c83}vp{sy
935
z_Z8^-UD_K2FAbYHA?jHGdh*g-zrCYquX4Bc;vPMZd%i%=={<ONlFz%7dh%}I4ce<T
936
z-aQcB6@HU?@a~?qcVeNvPaG>jX$W3>8Y{c@-=4Mi<wAR(jNi0Ed;c(g^S2e+`$YUq
937
zWBw=coBw*Dy-&t(&d1^Bjl*~EvT?Xabe;d)UbOp}PiXhcd(rN3g?2xYzNVRcBz=8+
938
zM|t5p+xDXUz`w5jcmCwJ|G=KNpIE&Y?H^sB`>x}M{RV5h<(*siqV4}JwEc;^=CmsR
939
zNLk_ItUV528++&2y@27ey?|lFC%{nT!SeRIK1>yUIM|Qx@WU>%((KW=`1J1z@O?6W
940
zeysrCuKlxT^Aoy9V$@!=H;?u{em>kY{O%~U_sKjkxPad-^3<p6I6pk!59@pSZ6<z*
941
z-(~}zldBt|>qGbzCo>`6KXU{-BS}1t?=1LmR`J9RHM<f4X{^%WI%e2;oeIu<h1u<i
942
zWbbmzJN~>W<cdA-&0}UO*IzG{)|W7Uz&Fjq=PzyM&$*kw^wDoC|C{pvF^{Y_?^4P6
943
zw*T_x9ZLJlmwLiKKY+h<1Aef0pl6fyzK>}P&r`VR9Cmz)+alT9g^7p7oM=Q={VKfq
944
zqOPBZk3IKoh(yK<Gqv%z-{OY~KKP*)FgbdIQgU|*Zo#zh*QH(NXZ#di`cqu1d}0g!
945
zwC?%Svq^lQfhSzC_P}oc*@|*b<7`>svUlO7TM4~Z<Iz@y59wl8gO~1zZZBOtZ7+k0
946
zd0*WvY8R>;NA99bB*Iy-Of)f_I%0{aE553>7bhz4uEg6n6CtLyqXvK9zMiLU$G7BP
947
zo|+%PM?b>erweCVBkC^)B7;+R;kBFQT<7w2*SI8}h<D?a9dP|()vd+K&+cq_N4YD8
948
zUg-$*2=`i5+Lg=Tt1mC42olIojVd(}kK%p1YiukK?b{Hwx(52WW6B+y6zjiJ?hvtM
949
zbE2XC@(YL&8pPFTwbY5%B0IHiAMgkIIiX09Ga!K&p<!6?OQyyMz7J3fKT7ag5Q>z+
950
z3suy?NfDhkjo?M4_R;@bA`$}PgrMQP1~CCJmY4L$Qre^NRnE;)c`vv6r{jw3bZ6&X
951
zKK+>Za&0g8E~5QA`n9j?%h+-rT<flOaq|Mc3n*(ztspg$j5ygd7W4b!6T_4E+_Oh{
952
zt8?;drj>EzE1?&3BB9K<ahdk|s@oQ%$vZ2T6+{)cL7`EZ5Oo#f$IO0Q?vJ~|A<6*3
953
zk=<?M2fCOuF#jX$@e?gG+&XiA5`NxT5SHM#K_i><4>3F8*V1v5AflcJGtn5h>Ffi%
954
z1$?R1&NakhWeuU`zSvjY;Q7>WBEMPW=5!do*bk-PGh(Wj2hsyPuAr9&$IEe5mR)X5
955
zCK{s7hFGX9)ga!bcbal9t2Wj(e=rKnZHTniS#7h*M=XuF;Xq4I8npf?jlAD@JH$Ws
956
zeL>g`>o&fnmB1N+L?k^vRTaPw6z%>Hu-A!}^9dIOTstT=W|4KTwKGr}IYo)*_miAf
957
z!@t8#d^V7tv|jt2`xM%&!9#t$D3pn$kqMl+C>t~qx^9G*0v+X4(l0e8P$FM!M!QB8
958
zV|4e@;?dn>^LT*4bf~jZ63b{{=P3if@;LkUS&2}x4h$U9Os6k(;%5r^#~So!BkLty
959
z<GvKv*%?lf!K1Zpfh?!qz>ssF_(R}Hl@t!c*i~)`oIt2C^m#&^l;1}bIfm1Wx!mi|
960
z>+frK(SDG&bt-`omJD&uyTpeh;O$}qiM7W`Hm{{&(6WuTE{Uga|2BRT52&nPrWcUS
961
zp@i1AW0{8@sBg_aWbhRke5W@=vkx?c(r(>wH?p#ZzvYz!=}qCCFI%23t8&}_V&%qh
962
zmaI7SUBjY+(FMQfenGoMKJ3Clu-6hVZ>E#tvD>4-Aw9=vxcz59y%wnZ`eXE7PB**%
963
zdJ_2W$M56e@K8?f44`Crs!YE6*>=OIjFSoFiv*n{lQ7fDYiul?eKO{<zaYGya1DKd
964
zCyBv(qs^^%P}3pIQQkNk>5cw5q3jxFykD#uEKZ?BaVC*{(k(}_=>*0vn1x@F#Ma3f
965
zxD09D0368n_3?LNF7*-zk;*r?fsS?Ne#AOB62Fm11c@%WT$@Nlre`)FWoy+VvCsx;
966
zmCVIMKp2E#u~5+RD<;63(j{?7R~r1T7-SoNnT_BjPLMW4lG+oTn;03Y1OI^qidGw@
967
zGbPP@S$2BC?_q47hbS@WmST@{wg;@lnT(R@NY{(xk;-{2osHU=18eXRctX57$MlZZ
968
zuGI6<Y2(<-^?b}cd;XICW{$L+_gKt@meV{wUpvQg9%%86mUFVDT0d?3o;{zb_-(h@
969
z^9A;NlRcY<;<g*?Ico9O*fS@>$?w5)tvz4vodc7Ef->ACK>BaMNhj{sCPFpe&Lokn
970
z#fsmtV|irF_ZWw>;?Xrx(#J5;@do0)g+<I3ocZguMQ?}CMh}`yzM=G5Fg3T=mORb3
971
zZAtwoC+`O1>21$?@<tvMK=G!iDJbXcuhuee7{p(;=MDCJzdf7Z<E!^tPQx?vJ4-d+
972
z(9Eyw`J0yW=lc8VH#AEk$87!pPub0Ma_>&1Zaaz5^L=y-a0DBjQXWH}JK=H2`|)%-
973
zM$8O;<G>}L99HUPVk8g8@tbE-TXkKl(+--&lw$d|z%l4v4Ux3X7u&`g2T69rw~Vo|
974
zK$XqoeRP#tJz{BUwVjlD*N5BYcOULcsQG5q{NXka=Juou9QKn;G);YsQs<UG8%VmS
975
zP7o#ilP?vF&DD%48y%9l9kcmM?lco5+E=~3Gg`8Dy1|UwA{)1NHlS0b=H))9nv3pw
976
zmd0yGNNGSV?B{06qs8WfwsYM9)lIFz4n29b7Id|=W=VW^Gn1kYdLJTcLg)FJSekL3
977
zL9U`1!VS#po@Q7>yCXU(BunN*v)>n8(cX%|m;7@=;Ay&8G-x!rZ%&ArfEb^?^d;wW
978
z9U4S|w~o3*EzW)c*#NC{(y>5?V0f-aM`ZBQ)NQ1Ay+kef8q_23SKzR|9q(orAu%}@
979
ze;EF)FfGuBgp+g;9$am|SH1qrkmzbT*=*|$=>td2_eUG!oYVg&>u+Eib-B;JkU<bq
980
zS2WU>S@2V`(Yd~D!AM^)H~9v2dg<;MM%bhDakZd1^nWu^+9+-hu~vA%PKQ8u8qzoq
981
z9Qq><9{2?~h;c{t6}4WSCjH>5@*=xKW!{GtXLI`oJGa|?&Tifg!HZsTysguU+he)h
982
zFaH80C67%CIUp>z(><eI>8c6dS|)e>OwQL@YD?}tPXje5ni&o6s)yBD?#rT3{(PNx
983
zeib~=l=j)4<c^s!Iz_)~8M3}rr>m1LJbLZabm5#Jw?h;`g9GfIj21TrjZWvdYmoR>
984
zf95y&r)`I79J)%ix^*Gt0;Wy%O?`op*5dlZ10`;G)hM3J<X@J$I`@?3AWuHQg9RO{
985
z2fQ&PLM8CF#go}I;pfzkV@u7OZ*6K85^w^Z#I?8;t8M8Z_3>zHOg%8~Qstd>HuXns
986
zM2v$9CI`axOJlB&@-fb4S>8`u-cRqI*HS-asghC$YlIVyi8p5Nj3=_Ic|OV;`^q!^
987
z7S2_zrZw-z06Y0Luii@6d_>)F)V$t|gm=9DF~0qs&$o9_bDMW&%wVv)5@vRJ^R1`<
988
zy9?usT4TDOArsXsObN?%&_sFTopOR?Y^Iq<NkLgJO*_w>fR?im+RdUaWQAYX_|(_|
989
zy8UPpdDr@PK6tg2t$HZyhF+JigFJS=IT!WoiE!SNdOW_Zz95qZty&vnjF2QU#BV|4
990
zYf@@%QFA83xM8+)ZW?F5e64;IG+3XP(sO^J)S1_$&hw=7?&q&(*}SviYU;FEV1vdX
991
z3W&IG!{z$>=VM@e8)fj5cV7X39d!Wo_116L4$v@WaeFiCH<CoZ2U$JcPB>3eXX#6%
992
z7PE#gbM={62&||_`bbxg`g*HA%l)J$S8Pqzqi)se*YDTu)jHI#4Z5->_2gJ;OwpTq
993
zrapJdXIU4aZ@Y&zN(g^k+7+(!M>6u4dKa&&c2_n4dw9*z2YGKxJ(BCnMCkF>p=-G(
994
ztC3OlD8F)U=g_SSUxI6sgyOBE;*(m%$)iN+>Ghe=B0F`HbgtUZEqne^@tRhfr>9Rc
995
zX+BtKnV9m%ql<!tRL<C{)l5Vw)fM%;c{QGlM3Lr}iM<bxbX?SFee7f5=|f+C;`FE>
996
z5mamW-ONaiqFquSoRi}$CHNx&hcNU1gqbIpsZEnsT`_3Bqy}s0s>}$*q$ZMEI?)fp
997
zHQFyrvHwDjde)Y2g!8#;a~-S!)ZY0}?_AcwxlE{$(&0d*?(?{ob&%xMWlx;WJlEn5
998
zv$;zvzFg(xs)58@Wpf5F0#~jwV9<5C>fIoV1KBVSR=>0)={bJsa-9(cM)stDaV9Xn
999
z5*}z6vG<pI1DK#BP>uu2{RyYV(Z1DJ2VE$M>!pKbu(~F}dw7WEWc79GD^RGsRTTQ-
1000
zpv$lxTtDO*v~q3=Si&k=^N~O1n!6>gSqDBk<tyCqpjysHPQ7e8cxUbmtv-QCI}-;B
1001
zMvb?w2g&ic$H#^Kl^&?GT`l}-`CXElTO7{oe$zG+GnTrFwPIiJhGBP@w71}XP_=l_
1002
z7twf&p<=zp*K#BbBepiae(~UV<5h#f^;_{OC=m&PYkWkrYYRl6i{8NJz(Mq8po!AW
1003
zyq#)q31*6M^lv>WBMD~`UPU;K@cZ07lBeJ!qF_=KTr=n)aR2p?heCGOf+z^}A|_Es
1004
zfaL~BENXa~o_&;1oU@GZcl75U{2IZLKCHoBgcj%VbvzQn9_ieSg<u|N{TB1Zhz!dq
1005
zG)VM~_>5#Q)2ewS6Ke$u<(&3K?=~^Zf0gAej+c9<Ty6d-W{t(lEz}M57wL~x;9g|7
1006
zp9UprfsFAHm_<01mX0DU0n(Ok+}i@pB@JVe!9-+nnbp{n4s)pStFm-*!d%vZrrfzZ
1007
zl??bLL%Wq6N6FL0WgkJkN8m6~xr#i;P#<{Ex8w4?5g(!3A{Gy#Z+pTLB=@vWrtoxZ
1008
zO_K9HDV#gMo5BWZfyxIy?&bDq{ZUlTQ<&C2y>sjEa)s(8)SYI_y_(e@>c0b*dv(Uk
1009
z7Z29SWbe)6FK!v@>{@TN1;dBf7(Un)5l*3wVh?L94`tz+%s_GF;EGtNWw2=0bp<6K
1010
z@Jf=uCIhXIWRp34o~uU_Sy77TK&`u!dL$bjt&c3O%skr7*<Gho{-%$`W7J3BaX=oA
1011
zt9Hj@I<;Ns*M=nWxxpDFdh}fv7MQMv-ST-H+%sQ@e6zaq!J9>Xoqcz$bH|6|odAbP
1012
zpWJ19GXEFuVL5V!uV1ZXB)OCBHR*!}-+I1!Y3k#d$jVCOha`K2S^0G5&OS)2K*vD(
1013
zvR|q^@J;5Tett{LX_~(aD{JJ`jqRD}%0bjI=fFTLR^GQhQr;i#n?kA2#na^jR=6Z%
1014
zkQ)cWlZ#`l#u`E^ixZ)AkachgX~-g_P0Ob-dwOZ{=<T|Dh?~yP_oT11R#%4OX4xE_
1015
z+nOpjExWotln%5Vgslucl^TP}9iMbNC*-4=%}PjDyyp)wI@d{y%#ZF!LgpY>OL!{z
1016
zu<ou`%gS5amZLsz?CyeZs%~l^7AYT4A1yD(_8PcRHzzHRx85<hZ6@|R(>R@*^nXw}
1017
zry03Ek`7>zswZVeJd(EgY$|d+Eq!7Q(01m25^r5OxUIfN>Ga<#J>~VCN`JTK{3Ct(
1018
zh}q~t(tV}V$~NcF69dcMQEyLqNY6KH(Co78_0;r00L!amZ(`rJlF%@A4<gDn@Yl3o
1019
zLJhJE1(vaoMajEak0kSR8EM#Bh`lit4oENK2GNbLwgoml*cRA$JHPMqyMv#1!_ALb
1020
z)6AsKS*aO;saEG2l`enN;P_sq5wNlP!EJ-dRZgxsmJ6GN<GK&(A17Qi6D(V*xXPcQ
1021
zUDcU(^`_<{_`R_Iru1q1P{!85(@L&QyO7$s;p`!6Jv|_i=2o#MJUd%q-q!xJ*=z|H
1022
zYoyHkn_#%%*V;F1NUlN8b}ssROL^H+4!4+JTHWIq6L)8t!JrlkYGC<<_EyT)vMLGO
1023
zu)n{8!ZzJXy6KIzsq>s!7jmQ80*h>2`Qd*{r}$73$Y?vTANnLb&%7fos+>^!U1#XV
1024
z8}L9|uyJ@1w_QSkCx*kZEzax+H+&%5DKTO4pR~fIIYa0^E10i;-C%Ck+(6t}2K!4-
1025
z=zdW2K)kK)w3z3xJ%>GAobeDz$3*!Xj<mAuLp7_nLTh5e1&s8pJvqjokDDixfY8IZ
1026
zC!E4@tL{6j&E1gt0yAn$?lx!<U>sawRJ~d73Vu>n$D_2ZUg&LYR~imi+4C^Np(U4$
1027
zFUsBt%?`3OY@e)2y>&S^=4J1s-djo4{?J&suvnN}zfie)>C~rg4td9LZZIk|<*tCf
1028
z+bM;wTy6*9(LKkPjVNz)wdF_F4RPu=UYlH|ny#Oes$*QCmmp0du}GS+l^)i{1y*Xc
1029
zVpz|yb%XKHr0wlVa2$%&Jt=zx<+usK(;BH88y^zoMM;|*v~OCcodRz8OtzJ3yk(yg
1030
zO?UL!b&OqacY21VWfIJOgENikT}GG33qw5Hq(8c@e@Sf(WG8m#(UrGPNWRRfN^RR5
1031
zMjAYfewQ>I_W__fiyxY8x2`+s$`wI)vdMi-BjUR6KU<V8UZnR+<E`np$Spgs`oo=I
1032
z{V{2s^k8>s`0CWsTqSe&67t9zDlY_E$A75%Qd`_-R=7>SAtx)QO}}=nrk&j{3f_2$
1033
z*(zIQi9zSPgfK|HPcd?^-~<mMME45>jZ=*GuRom`&n2R88$8=q4DBO~g-$mr9_n20
1034
zSvhFEhP#KVb0MB2S7#s*9<)A*0Kso;ga&EvKyRc5`VrDTr!!e;vClbOyYpKckXCx`
1035
z({a&OMg}_cjI1+$8IBz{q;~CXaKn_x{s@J}3#04%ao?WJD)c!wyUGIP+=QgZ`)-i!
1036
z+F&UYR8Z5#%F_2N&-Yc^(znsPV$5h4l7lr1Wfyy6KhUi7WiJ}uMaaXCg;SF3y5G=#
1037
zDBkQrb=^-BjC*PnCw4=1q7PMxLDdrYV?1f?nlzhmgx~IohBsq+*|!D3b>D3(inxZ6
1038
zkNr^;$V8AQc602Y5~VJ^!qz&b%R<q9sV|f~%pJJxw0#6WtTM>tQ}IDqM`{J3te4o`
1039
zHa+RratO~)`OmXSf1Li`UpRj}zKo;hcr1M(9uE)3Bc0D^bZr@VZN!DylMSb8q;=#f
1040
z*|B?&)od|P%(Hb)v9wpqyF*->D=KhjQ<rYkJB`u(V7#^S8A^z&$K=~lna%H+ENZcv
1041
zTJxzfpfJnn=GO|Xqb*R*Qm8Wxr@`Sl?bHO8Zfjs-GpcpwXMXm+Tti~h!<PPbf*Dp6
1042
zoA{vRdR=mgEwX(ZB8yzl`G3Gp^Z!zt|0muZPj{}*k8j{NZkl+bKZXNKe;ki|@Jw6L
1043
z2d`NRHx=T4K>Yf)!2728OuWX|7skaxAE48JfUfX<3BTX*dye1l+X5dPKzM+t@?mmU
1044
znYMI=YVY@J;<X=K&=lYk(;<{vdArFa_FX)UVX57N8@jtKn6yz2-HL!;clkAoF4vmO
1045
zJD|U4a_zH>muB>8R_(5tT)HPMaP2Qu@Aw^-<4HfqcZH$m0647O8P5jgae?&cvRQcP
1046
z#D-|PQln?-1f%yD$r*2~w-Ro8SR4;eeu#{^(3d3Dxh`vQc|9xtHpiWo?02w^?Ny=s
1047
zSkEN)HgfCCSKwOi{xa!P=XO+9=oVdH?(~Z<vT<j&%<)UTapy|fion0KOZJI_eC%vy
1048
z8NZye&3>xpvgxFnBw6xX!~04>zvL-N63P$pXjk&E(k6V5nEH71z26$t(=317uWM*L
1049
zy2;{~+->m(LiyWOH?#V9<zMn$i=S`x-|E$$YxU>b{QguU?P+J|Vt$%u?o3^)6%Vsn
1050
zYe%JI>$NdPCO>>B+AB{;o#rGR4&gTzijA$9#ovQ?JDEKwq%YRI1@S?lfb49nb7trq
1051
zH2TRb!)Che6}7VR3@_zp>v8tJ<F_Xrx;oU${d^8{Z)(ipy8Ep{s|{+tPJ7{mYe@eg
1052
zH?}$`uDdvgdD<o^b?o$*md5iK&3LnatoFv;>)~Sd;2ycOT2Z~bm+v_b$L?ZXH{G+b
1053
zkb5M*CVr+Jjk^(Fgl{tIeGMLMaZAz7>hO(X#?*|Bjj2v^80(X&>b1zNqYAprUj^3z
1054
zceXd8Yh)TC>&xQRjlykuJQ?b1b0e!FWQOFP$@OuXosEyiok)w7nMPVDi&rEAYCC)v
1055
z{#SUX0mF&ZR%~xxJqw)fte3WX@TyNYn{8;H4e`e8!*EDQTG|b|FVbwa2V5wqN^VeI
1056
ze#enR`wW2_*jFb05Acus^vU!h`w~1Bd-B-oxYCR1_X@O}uJwYyyI#e4guC3n1$r=x
1057
zL66SdWkBgV4hH6(pe#Umqj>d(6Hac;KDg>|y8&=Urja%W=OvQC#hx*m-l^30VCq<O
1058
z4sLC*a?_21WB6`Em$%a=T(vs4QZ*_y{sXVqwVT!Pt~f)ho1XoCIDU?{+x$SAi|N*E
1059
zH){n{X;U57U1Db~YI$F!+Qwea(>UdcoocmTWYT~+G9Q1qH)hY|zEbh>TID@_f~5)?
1060
z-771dt2@7~5XT>-`%UxtW6?tX!@c~0gRM=$Ve`cJDU7>uVOv*C|4SjZ&d<HCa!-G$
1061
z5WlbG4u|96$*YcVZq+o$@fW0E5%+px=g#FG8@XP4U>zM-I=HK234gWMBJJ!D(P63G
1062
zp*^-%RA2g6)jq2z&fUI7qgRkLHV=+@%ktuV#TOnvV2tF})z}T6A4u0;`Ws2v>wZa{
1063
z@KxGdiHS0@Blbe;Y%;6Y<-poh&l;qDQL|fdxUEHw1h!x4j&X9^*ckI?Ry8hu4Kf<9
1064
zFx>#{)u_6W+J3FM7tN>gd5wQ~=YItK^{gD4S<9i7wz#)aKM*$s`dUh<W*c#o!TEu(
1065
zoT<C?152|iV_02|U1yl--&u|6>t54p*7E$xOIHs7#XM?1j~W6?pXSZ9?H#|-9Q@v7
1066
z{oV8uI&t`k;fn-C2~bF?JhH+y=HJERNFH*&gZA^J`<zz`A8fqa)`Ys1v^=~9z39*K
1067
z0PGm&X~i2O-CD6{Sq3(DnDySYz~9eF3&vYxu%dQ#6y7TM%0Xw>Zwwb(WeBPr=R(hK
1068
zibC}{!~W00zE1t`4*RK|5B%ldZ><5kdAz4pGCJ4k$jo6@{&!aXZd$m<lRS9|b{$#_
1069
zQobKG2R;Gg8?25ce;<ZI?Y4@&u2f~l{z<jd_UBEOppO`SSxak&67Tu*X~7<N*lm(H
1070
z&juoHy;etk<$Jp7@GY)#5>n1piMv0>)`!>q07{H~Vqiq_zb&4Q^p$TUasA<s(ei<0
1071
z#g8Spsu~{FKE{6JJET3vT>pKZjIXv2f*0^P%l*y2yZ1NZ=B2mTN+bZEcjlgaVqhyA
1072
zm3!Q3@8r%KuV(G0S95!__RPFmCEu*pZGW>`TXN6i%NRsDH0Ayx9=O)5I7`kIJ?a|a
1073
zO?eD!G%sh|X<vUj;l6~UeC>%F=+fMh&3xYnNPcd0m^Et2Y^&o_rrmEK?QMg578+e2
1074
ze`XZy=b+v6F%Hm3M1QA`e7%reQz&t5jdB#=UZxQUw7>AFafH`js=M`Q^ai|eGwBes
1075
z8od@H@1q^p!n7KHldycG%_`T)cMZ~M<~OC2Qri&#LwO!)%_{9@tmik=acwp&k33)s
1076
ziWa#ypn3qw7vQTLQOawF><XJB-#1<MBU5ZXD)7^xUjj0%S=#vB$?pN$ts|Vw-O)+4
1077
zHRgJ5g-g++VdRzRwfNiw-Q7SsKa<2qzl^_*T`T51ZmMTb2k2YT@vxC<7hrHDUs9++
1078
zY6jOuICIvN+lUwZO4Y^~loycZ0R7dzbq)9GM>IF%-xDIH8O^B7Rdm$Yo6^I%+z{O%
1079
zZC>-H73jGyH-y`4tFIVwProd)&j=#IU*_juFpYqj_HDKMyf_|>hSdu^>jvVGVXLn(
1080
z48?b)Kb~vvFr!q&8}VYT4V=ggMS&ZS>j=nm0spY|^hvwfPiAxk5`KR{vv%Uwd%ZMf
1081
zqPWey%1$&l0m7l$iF%jtU}k~gXfJ7tWknk3EsnWyil^^DUF8fTG1Ah9LQeOG@vWjx
1082
z{K&nx7IzGJJ)U7M%YD!>QgC&Ql!ln^xeDnEZPc_`wJ&=Y`Y-3rq)VCXvJ3dtuR8o{
1083
zvxr{zrtt55EpbQjv$fN8W^t^$j@^s?($I*nYmYJ$J#Bd}K-)>cciK_7$fG|H0P`+z
1084
zJP#ZTY58%eT%z*J?o#=>@0nlBE#P*k#cEYnLK`D3wbjP^ZBGn8C#-eYvKz@KF4c&z
1085
zd3i)i`N~e<y?{wP(r9VDwFhl@5Mx?WU0otgP0T0nQjWg~=vih@m(bFaP8zF~Et|L^
1086
z*jNQs-{Z#m&YWqD%k-^?P$o)W6vy#<SIeVwJ$kk&C(fCci6xPsJfUB+$9$}3ad2nz
1087
zJ%|a^Ra&5c#+d2Hb^F>_jtWoO9IqBr;VDz_s%6DaYtbyL^Q=*P^e;%&jK6C;)zm+h
1088
z`QmxWq1}5WHKxQgzp=6((G$6MQgcfpwr&s}*9kXjJqTKPn6;(Cy*SU%Se1veT)VRq
1089
zHTv+L1Cy?mCSf{r&g98OS$u05Uk&8f*v`$2L>#`*^4z)&xv(gE2dkyt@W8^<HH8@}
1090
zoaY^XeFYyGU0>3;p_^vdiosSYwci19jiwXO*v2A6L)dddv{XE(25a;mSO;ld(F#Mo
1091
zK3etcUlbpjy(4~4((YCkj>0&fTDM-lkXHJUa0M&IvidQNf%>XO?BGf1i^JW)=nO4x
1092
zpxtq)9kv?!XJvQ{^xXyWnGse@+=LlV5_aY~1c~}C-&XD8dTK+C3a;Ak#aAXJnI6`-
1093
zydi318ZRB>l*wi2m>|DN<c`@<wS`>PsP?=v#aY{bmy-P(yBRbXJ?M7$mmP<6x18C}
1094
zlQVWEAi`|Iw>PMLi(^GXZCYWE;dd0@h&j}YZ|~$wOG_1x?1qP#=jyssisxHD+dj>z
1095
zVYaGV8{-^JeJoM}yp6K?x8)+Ta33g2$0HHrq*0$|2O>=DG{t)RHfm|q8CIY9Ir;dm
1096
zB-dne6~)u$r)K)$sAJ;MWRb;2viFI4qh`T{y1nEOM#w#+l;!2!sDtPka7At=kwN!w
1097
zWUPAYuT}eYHG6wZwi78%ZKQ?=M9Ew`9y4Xk)8^Tg-&qoLrKReh>(AR&Dr*McNh%L2
1098
zNafJZQdx7e=4j2#c8*7H@^R-)^?NWePt^$`VOO^XK3_|}_69TgrrSzj|3^INfO%X`
1099
z2>tTga&tOH3Mx<TQeVvKy3Vhwmbzkvx^6a_;boxOlyCoU>2I&JQA3vKGMjm7kvwU7
1100
z&-!uyYk`10I}d{V%GUQQThID$f%T#X`<WfH(?GK`$8NjKIJU{1;Asf(r}%gO0<=?s
1101
zb|o>hc7pb>Rr}`9DHxILSJ4o=Qp|L<PY09z(mL;BayIw4dg{8Hype=ol~y(fSlrjW
1102
zI6PhRx|qM$g~p{X+Iaet@s0W=&ow69q(AMJV)|UI)qN6U_yz07ydSx^YNaqDG+WN-
1103
z|MmM|WlyYXpVo|a-4xQ6aN-TzfcI9>mRyp=)72xj|7RBUV(XV<Xwe<<3!8lhcpNF8
1104
z+im(@SKyjAGBJ`3s%u`O4s2{uQ7jgPR;vz$f||K%Z@wZTtxGH08e&MZx`(T^0Y?*S
1105
zvUb>2tV(FrxnWulHo5(j>#e@}+wsHvtl9B`&6<86&@r~(JM3AL-5c@ge?{0)dVkSs
1106
z>Cbl>MMJGuwAUjZ=(lRTMj;S3uR64=89ikr<+x?MhlcZ4e|-99sRUi|Nk+S3jc(&9
1107
z!)6Em(i+e7%|dSnlc$V&iScG0+Hh*DW41S5pprjokgaIf@I3qEl3!WI10*{pG-4ND
1108
zv?!xMobs-8Zr{G+**hsm-BIYcn4kReN9IS}$UpF=@qDmqt(oTY`n3G1I;h$QEh|90
1109
z=68*Qp~{V}Vb--8t;H&s`>L6j<jK^5?_^GX$%PV4xxd<JBKd!`xJo;JH;B79b>HY9
1110
ztxcg|4A^yk?+SfKja{tASw+?6-m6~6w|JOw;Vw7rGC?XRM;_!u`B{tqLO#CcTk2!C
1111
zkavAUa!&ZcRX<|Hh24IG)==B8HLs!}uZ2o+@=T}2M+sT!f%yz}QdTlAuLZN9QayVP
1112
zoV>xb!Fo<KwdC%mw$RWD(no9cpnL|A_Kl|V^Hz=jW4v}V@AZDX&HE##(Bsz;<7<l4
1113
zE#Cof53lWsJ$v^9pbK6*xh9`KOpmb>c-{=5wZdZi-qvkM#Z#Km3o1^`T+qzg1`a(P
1114
zD07u(h&l(pP0q2@E+0eLV~)01+npHwtJD*&zuqUx#wE*kFJTiIs8vzw8@XqReZ=zr
1115
zf+v&7Bfbpn7m`!Bn-{C?luotpYssoz&K(~In_X#aJlz<y(y2n}ldW`9F5{1yyst8?
1116
z4u1iB*8%B?<eq2cuHwl?{^(0dyT@;_nmjcX<??6KUIzHqTkiAnxraZ14XK#c<=Mb`
1117
z+YQ2Q5R|P9xCbzbJg813zu^?|^*Y|Ae^`sdms_33<liHor%#)5vNw#ilu1~9*CUP4
1118
z8HT^7m<e8*Fu4S1+ihGIzW;Ne{G}V|mr}k<^`tw5`JPiFsj}dRL6WP-t7nMEUQqfw
1119
zo<F;4VsoHMrzl4~8;E)~l^RaCYytPF@koNXkNv%wJ{4`3)%G6ya3b3qLBp7@np~-s
1120
z7T)E|9EE*j&6B(2_v)U-+Oy27L*F~gPTsjq=K=?Qe4D^FOZ?OS-H*@X@iS{yH+8j9
1121
zV-i>cWyB=}Wl^a#s9I6A{La!+ayU*em&9Tb7fVEf((FthwecXofvJ2~Y3m}&Fpu?m
1122
zM^X(5xza{7_I-ByzJu15CjB^BDzAB(C(UK-@u{Cle?7GzIFd3iq~-=k<YTd$pzqPE
1123
zfoooF+b6q$^jEA-{8ZLMJJ!grd28u_e0WQ!buxM0vOF=*gP%N`^11=(##zLD$P6$S
1124
zXlQ#&Q6{!oa{i(Z+C7O~(3?!>8u@!!jIa4N-d?6{jr<i)CUr;t!lN+n!JYK3g8gKw
1125
z{OKEQ4!%tD+%+fqXKj*`60Wj)<^{5`_MIut@f7CW<7wB;d=l!HFb{CvQ|)u>z)AMk
1126
zsf;jnfARf;hNCkf`?Y?uRUQ<A7rMRqRJI@Er#APRcdj(|HuVM=CC^Ep@o?!`!uOw|
1127
z54e3nx{KCOcc8lmtWO52^~kR^BHh<klrpa2bg*<YKW8?xyK~!pOW{$R%GoYU_SNqr
1128
z`IE?kQad^Q7+iN4yKcc%pSJy$czCo<iVm%*UdfCtDLTvzi9dt2u?5TgF!pu%W;H7h
1129
z>6tcP46DI5#t8QOmWaJTDVan$)WyR*7LSG^%qHx%Vo3+u^1pgt$j$xK!+4Wur1N4I
1130
zZCtOu7rb`jKrLt&ImBK_)bP|QMKLAlZ`Kd*6+yZ0dbHlP9&dahWwm0F{k%*(aP`+b
1131
zIi>Mo@0Z&9OZL1de-6V&P=2kP&v}+$7%urQPbc=rd%dGRxVk~S@LC_ubd0D8cE)`z
1132
zR2`{yB@ZY6+G;n6F#H4StB5%9YGhxiuPmiyg73?#CSLtAlCA|C+^{mqfKT~clwZqw
1133
zXGQQnuo3C%zhd=bF##^VKg_KBoZn{P>OPj%$I^amX`GFkGKKUY8r1id`t@zB&%SRt
1134
z?y(#XsXZwA6q?H>?OO_0;rR8pm8<y2tm@5613ujqrd>;TejOL=MTtk%M#*PBzJz*I
1135
zl$Shy^#iYez4Z-nR`Sz&x3A4Eo+O&YIFUrMy}Dsrd9t$wq7mh?-kde;ZPf&p!SUz#
1136
ztEC9fr^z#xUJ8ysDG`gho_<VfL8A-V5bQsPeNKI!+?j7{gmEHn6VHInu=~A~A8tv6
1137
zez-mLXo*XuavkdXCDZ5uRC?2?^DA3}$=6p4a(&Vo+KUK7vw1Esn<rl(Es8ubT;GWg
1138
z{LG*Xc^+}Z*h~?X1^jrOlw^h5CzDQKk;hKEPwEu(8NMJ->cUkMSuKQ|XT=SY8t~tE
1139
zGAnK%=AwO8lt+7$TfPBJ*g@ZIXpYJYCOGa_$ne$3@MXDN18W!3zH9M6Z;0?FD{w_P
1140
zUOA_#l9aDo%8wT`D_`)d_V!SC4zpiy++8Qd<h^cRDoV&=TUoEK7IJ2zMyF$fx5J4w
1141
z9rcdWq`+9uS*PBvUwhI8`z>A2l2m=4&$#u>^~kh+$T8c?;isMId;LpG(@hpJQj4%g
1142
zSGu6pC;PT)?u{Nd*d13jvSYU1b<!~Rk}PAyPU#rvw?2s{S_j&s&0b^G)A918s9i&>
1143
zZ~foT>=vwZl#lsjJ%dMlK~8o@RMuPVQEGDB?iA6v{DuTRjfw2T;+*}EzAB54rFQH~
1144
z;5XAxqtB7Q!g3&Sl_Sv{LISV{ce`|nsN@r0+b%2dY|~2VT9m;~U=WNY6`Lk;ry&`+
1145
z|0A%~KNq5JEpmrTD}2oCP|d1Er@V^Yd}ub)r&+B}Gu=Ys(Tp2p=rO#_TOBv2X!g;m
1146
zC9mw&^x6oc^<=-?$lc3D@b3YO!QN?Mdar{1fWpiTI=5{j2`H8)YF2GeT$yz7nq;wI
1147
zkG~T*k2ak3RRrNIi5~2Ijir1*+>!havA7nM*>{WhuJ@P1qw&n>ZzGsGUc-NhztwP$
1148
z>5{MMyb!iJ${MA%Z;e;2+G0Dz?2P!cbi$w4FY@dx-mKp>OZ+_cD77;7h=xQ$_mI$|
1149
z(Y}0vQzs9mvOg6Zdq_BZ5_=$a7eg&)0-D@+jmK{CdF-Z++l<4hrEgXIHsnl*b;*k!
1150
z-w4+2_r{a0;<$Qla)1MPf)Bx76!{8ohIc&DYBR&W|IPU=`4=3FUZE7jYR75F@LjP$
1151
za<Jd^YrYd&4ecdSjlYd{^UwzRn!fjftDVEiZ>=HOcX~G6I~L3Swldz(oDLytG;f7O
1152
zC2*Pyor9Sv=}MD50|(V|Cg%f23}>&Co;<2Z-Ge+jD7V#il)OEpX1f!sdq=54v(k_X
1153
zJCD!=7n_AUO@Hl>O({5LxhGYe{G5Vg7DFdwh$yd~AJbelu%Q{wY;pe$L?0<f_BqFs
1154
z6`YR$SUG|xlgHQpm>lWc@yDI|cm}uONQwdRKBMz}{HdG0K4u2)Z?Lxc95JS&&Bg@d
1155
zLHfjm=i|3A64(i*ha`27C+ef2Pr<oOU0GsQGnOTjJ9n&<3~NVP_IZ!DZ$Zm0>M!zU
1156
z`mUTHsM};?fmwC?754r&o0SG@eUVw8|8DDqFRdEJXR<3!#KwpJ#jvo>(78_?yd*|{
1157
zH@GV*XKN0v`(=GBRFs+%aIqL)qCG7XjN#3ch(w*$#G1ugc!&~=3?THzxV#43rz*WX
1158
z(#VEZc=NmEPIkj%@3$1-9c}N+c1dq3qz|$5ul7h!K)*`w%v`uey2gSCb4@K@PsxAb
1159
zw!!=mn(HIk6#gbDWWjLyK2{&%eYm|3@cDZLH*ZDIS-VzE$cf**@8#N4j})E8EaXgu
1160
zXNOqF`8VH0ih1sX))K@rUsfNB^v0vKZ=x|0@~qGKeNnCN4$wVOS^+%43_sA;&R;O>
1161
zB&FLVp9t@0a7daax9CK-Uj6|W66$WK1*!gann#{3!O<W3{w}?$l=moU40D=o4jaqf
1162
zQ6KF2mGq0JIV9*9X%4gH!6ePWw1!IOX$|$H#F<O=#*@wZ@l{vjQ*?xLRV~!MFSk3C
1163
zr0Ry--VCSy%fY?LeG40LZ(CbP^Sv7Rsr}T8O^&v>!=Z0sg}x?KSfO8(Uau7bP`Bh#
1164
zh7rEGaP#e2*IcDLG>V&L=?FdRlD(UI^R&;iMa_MaXi2VQforB5w-O<nY{lO%6WhIR
1165
z=nxFots2EzER@u_E$?*5%Y?eqXp#JqavNwVyuJ@l_wiJ{o^M6vRvTq!bCS02f(U%w
1166
zlw<D{IKQp-#E-zq_otJxb<E3|=L~!?OSG2U-h46XOE`6}^n*#SbW^auk%sfzQ>1;x
1167
zD@z~SzVB7lN~yY0wUa76yGZLszlEc6Z^cJ6Tj{F*wjMCL=dQAzs9@K>XkI88jD?zm
1168
z$cDgTWJ7K`R#desOPzGhp{s^qWhr)7pc`!z-wHRu8*j`eSve#Vk;V|5AK;#-2Q!gI
1169
ztQ8)vjeTRyjj|j{R^D!K9^z@Gjhygn)Vxw1XD>&qIMai~Un6NTxGn+@HRU$%=3h|b
1170
zdmH5a3o888s;qTm*aaO-$R09QjB^A7Z=0EKH_(Us7r1P&aamI?0G?lk_LHF%r|O_G
1171
zt4n&|Fprj9KmVw7dZD+U{zFM7Z(Xi&Ic_WCQuhiDwK3Ujb|%g0m-7@{uMu`BdkMi&
1172
zhd0Ec;RUf)@&D(sdf{y&eg{_R)+^zzFY+EF^)$h=Wu0UrD{a&E!Y@j;yPrLAc)CA1
1173
zkI~#V%0~03Qq6DDxvLhF5(Be2j7U#gmUgRohW1O}TQG^XTin`@oaLrk+RCu!mD{cR
1174
z#X3$f9d5R-!%4gLbU&RTnO{}m>&sWtZ#wNz7`Iv>+BoAxhPQiMF^kq0YMktUpWrXW
1175
zcP#{A@iO$Fy%JAD>3(xPy~8xa+J?q-|M+DQ={sgS4r7^xI@naxWyGDr&-7g{os_MX
1176
zUTyQDW=LEA$CrfAyy-41R?SWx7|mr3t*y378=}!@c7;T1bAM8d;zM3ZG&alPVE#RV
1177
z$?7$$MP7dFj-ye(#m8q(2fKt&KZ-xl4(rX!Y|b`3hHO-i=FX#s%arE9@7$18@$ic6
1178
zo`lZ*O6@CE^eVP7KV*d{SS-u?*h~!iRchWXw!NP%mng0Ghc>e6NYft64CB|rJvL+S
1179
z!;+L$zS?(K15D8g7&xmp`d~9X_5@%0L&g>?cjy-E@8Nf*wVp>o?*2^k{-CXZbSH>b
1180
z6>G8jnb-A@1F<hW2+W#4CS(#I@68{F?BV<&`5?>WBI=Qx`H|5b`PUOZgTKeT4<@pl
1181
zNHzv*`OaU2o=zQ(<^yeNTS(zXQXnaYL&1e7aEaA{0qZxvH=`lmJ&rBqRupQ`7r$Ab
1182
zC|>3Kd{#Q2ubboZF`nMySrU*83H$?S7o4=~7|r_!AiHk>X6+*n1y|h~XS_K07IMln
1183
zLHuAg`N7}eEhJjxcX|ik3@sv7=eYcCsL`X+^Jk;gnCH_*3*G)~<MHuGqTi=k>Byh0
1184
zjv73Fw&5Kk)2#l?GpH6HHu{{_jqgSKP1956$&mXC?MD4}JukLS?Y!(Bi#-MY8u@Fl
1185
zA58nopD`LjTp8X{_(jl01+bJd2Y4}kkOv-A<}qa!aDN}ZXa9~|y>tJL{PxH6Z)BJL
1186
z<vrg^JN2*f{bT)$*N(51-Jy9de23qs*#5e`cLv?dye{6OS2<l>=-EMO;-Ncnk^t;z
1187
zdOP`p?raOB;n$65KH>t;R^{1+jIKKGpuO=u>t}Jw9`*CaS^q#k$6Rp43mRo3erL8h
1188
z#@~n+GKrW2K4gI49r0^#uUkBBJ(nL><SFR6hLPsev15==ThK~^BQ}HwHpG%{XypPV
1189
zH*=VqUWzWeKiXb!#4}LlfhUGHYet*Y!JTBB0bt119jksAev|Z#1d<*qUIvAA-()&T
1190
zOe^<_X`ivQQ?`y&c@ewY_$GNiqR(oL=auN0bE)oj(kWQ)M$*w>>*_rH>wZoQ-3cT^
1191
zfTB+ucR0pFp}-0!iJJS6c%7PcV}=+^bCJdO`SyHIlV3@WoA|YeGMuNf73+v4%3axJ
1192
zl>5Bav1kRdzE32SwtS?<oPXoYI7&C9=CV^Z!`Te5=^e_sY3O;H>3A&Wglt)?HLbD5
1193
z8#u@YAggY0#PL8Qje4WCb%6TM%SF#=Unr7k429ib$<z^tNfK<mLpIM5aaxan%}*5f
1194
z_7|<REDXnypEgn#km}XY*UI9(K)xSZ*#js$m9lsEa?<RaaI$VZa-%P!mWxFRQN+py
1195
zp6-=h$y#1CDO1na=sZfWW`nm!VDuS>?~F&IANe%O+D(wRnmxnzz{-C_&DuM${hIRo
1196
ztJkV$Mjxtr%U2Wsv|6kAxxFXlO<Da|^;+qnP-Qmz<md;bzayVnPc|KrNjD2qZjnU$
1197
zEJGKGk!JF`{K|M^V;}$ghIDD|cTtLSznti`Qow8NTo_;5DE-fa>1@A@Y}6`ewGI4k
1198
zA^pVoTK2qvdX(+Jl^>IDL;N`E`9g`WTb}>377p>t1Zx`XeM*lq!J1<WWiAl)4?GX<
1199
znCtV2v@Lj~Choo42_I>6zAk6A^<_2@4|mhG$fN71R;7owleQ3OFyz{MCv+X*?GuH+
1200
zReei!o9NrkV>SCg=NaNcagTUr%LN|A*s%=Ol*A*E7@T7xFZ5f#?Kavl`h|X8tus1q
1201
z6g!Hv{kXjaBY(8Fhj^pDw}ysi$ZnNsw0=0)>|)1>Uj=34SG3Q4VqV*Co$B}2H{CR~
1202
zA6f6U-}R#DQw96{=#9p`jnMDM+@U0{pasV1S>n^kH-S(3JvXmG;!0^0yfvA2iq!^-
1203
z-PiT^#R>ZRhv&uNkwtSDvvZPZ7fT}FCfKO|8lj}XDcB{FD|%t0Z3%pexFU47gE@f`
1204
zj9fseK665gTzLMf&oCFw=GGQY-|2KumF^`vbk%@dt}21OyjVMYTI1>-pP*TxB9r}*
1205
z|773<v)_-^*I|%7t8IR#=i!a9h29rtRhDK_rDqA`=PtQB<~e-9jT+LY$FPFHA3W6%
1206
zv{4>QXmmq|FMV`dlo-lwM?)B6eem{P!}}MxYYzG2%x}RY1wB6CRFmQ@E<r!}x6TuL
1207
zoIfMarhI_%52fyOhl@}4w>$U-+}&eDxc#S6yN$bw5!^+$5-Gmk@|w5JfSc78{Lv>q
1208
z!rOhWxJg(Izt6iLCkDM9n}Xe?Ho&el9JXB8dhmf?FL?K}bLdeka}yHUsYFj{H+-qM
1209
zwfttwaZ$JI51i%6wZK<R_AfzaJy|sEIMFES$$wd_fgQi;w<zzXT&c5mUaxZBL>V_E
1210
za4Q`N>PcHSw?~0}e!o|&wS%z;Zt;3NXLj=82TCVW%<eskEqEW+)z$EMohyNho^)pQ
1211
z9zH~NMZXs9B)+T}H3m;w8z#|*mwQlf$Ge>uR_^df*4&+*SF3Uk+ge>~R+J~*czf@V
1212
z-O{gD_RBR1Zu-t}&ciL&$Q||)s~C2^a?jb#7OU9@?aY0TwV3YB=Jr$d;iy2SoS^u~
1213
zjkG&2*9jFy@|%U_0vB~wVa%V%jW@b`&aWSeZXYen{jdiOmLD}lW2_3~fs3Vvl@c^v
1214
zUOgF1`zA=Ks)0MNw7W%?%T^}em9EpQWUIG}&~=i%T?tN`eVnjX<c_r1ONrg;$8II|
1215
zP>a2Q*bn_!?j_1ive-sqxB0Q#h#h6IClb5ekJU{ZLoIe5u{-=&-MbOeUd6B@pEx~%
1216
z2DM`=_SnFn15>p-I%APVvM7!5MlBSYA};pEthj62?MCrxtCc&*L{sa_gW(qSY3B~(
1217
zs9}Th{G)MA?4ML(zYllQGHSYKfMI>q!uyM)DGckMTEc0P&aUef_t#HZ>6d_IcP&Hx
1218
z8{F?L%ePo%X=Mps&YfLf(0C*KG`#V_&<b(<em@V_SY1DtRXPu2K@ZLABe8Zz-uv2{
1219
z`THZwe}5u@KFK=FR!7kWS91bfX!jxk)f)+hqLo>}Tf%07+KkhxS+mD}-{uR}F2R4%
1220
zeZQ~AT%(iJ-tQ}g_#|%^h|l&rC)I!#e}YjXcu&=v?U-=acFac7erFrT=gEqW&K%tD
1221
zT;`L9br&}<gm^#8s4z!%pZ(^mZ}C>Rnc7_KrMj~~ve#-jCgIlOPsAACkR~zVT4ksA
1222
zcQGqt<Z&a`Xk1kN&14@w>Z0<8<7m}Qo@KKbdL}P6mp%6@r9Q{(mV_%Zk#c-M6tisr
1223
z(i;2A&av+vZ9bvJ4UuMdVgyRga^EK`CVc3L;jOYtT<Fz@rKC3Zs+XIc_~JRSMUFYA
1224
zc+kl33CNzwbE1tdb!;vd)=fT>G~=;*9~d;1G{04>RFaoA^LTKHvkjLSc_?VvoArvV
1225
z)wAs{C-1oPj=Gr(HqD{eQUQB@3pk1@Cv*2AGjQ&8qm*fRRVVI>=ZCF5TIkIEpT54~
1226
z(G2>ncE#S!INSrM{bM@^;OPo#f9s{Hd3b;8gF5Tw;wKJ=R?PZde$Bl|Xsyfbl#h2K
1227
ztyeQ+{skNJ-7S86&gVZVr%?=OYJMhY!mmJ?b~FMzSJI^!MY`B1ewXlj#`Y#{U#dLp
1228
z&%v(}e+0i7D&MykGij-KvgR@3Y}W0I-zqoBHn|_eZL;iH>^_SqFZ*c8ic^wW@0~~L
1229
zghJ{We(KAL#hPn=Vf%cBSnTiI?>WOwB(Ld+`y55Apge?>Rml8Oo~y8L4+OVzG|GpS
1230
z6aUxMcyE@rxsa_p_E|#g!DfxrdVCHNtVDgY;mwqH!b6Z2JX!xH4P^%2gVOBngz7%$
1231
z@no1(T*KFIWZ|fE+)lgkP1auAQ{(LHc%L1D4Y-!}gt*Tpp!+5%i>X6U&!g;ZJRc-X
1232
z<J?y1L5YN1Zr-`m;l`gSulT0M&Q*o`7TQ13zyJ1eOFcpTFl2`x_h7zM1Pdzh8w;hz
1233
z`#J7VsfevChP>*>*)8^w_pQVWg%Sh()TQ}4Ydo9k{}gfr{TyG;=ZI{wI<!tRT9t3~
1234
zbBKC|O~gDShO8>&*x=_l3BMqX&=z-Yo*(frJ=V^k{1DAosXIu0gK#_HnS|R2FDLwv
1235
z@O;9pgjW)7A-s)nGvPJiN@jKK_VqFyCrtbc)K^XTJn7pBp9|L#Gma4`YmGMowWjXm
1236
zCcQA_<l}k;Qr$)P>P56yf)#@C{29<PSbd~$F2BAVnO)6FOEQ=-`wd3cAIM##+`QjL
1237
zI$nN!d4_bg!AX^Hl<&|`ms0-frI7O`O8%I%ibC3^LfUfDen47zA?<}iS{rFe(gqgN
1238
zGKI8O(l~7v4HwehEu>vXS_^4I3Tf*LY1fl>DLU9Jq^@)@Agwt)Q%g{M<R(UzXfjfH
1239
z?CAuazGzR(`MC@2X*5sg+LKQCEwra;Je^95z2lJx6IY{FQ^#4#XBjsMQMKyZM%6*0
1240
zYSk?Ts@_b=2^ROu)bwa^BHHLO%zSt$Hb!Dr!~TUDE>{hqPRsqJLJhZ4LqFOcq;|1s
1241
z;rDIrouwX)+-7CIZ)Hv?lv#%M@g8Nk0mI6$-(h9UuRC&%m9hS>>hAv=DWm=$Y-R8t
1242
z;eIil6Y)wOV6A<{N?v5G)fQU2fs#M&UZ2WBNDs)5yiJy0!p})^ZR2|(c=6Y=+MQq{
1243
zBPP!cQe}6L{b3Aye0RnZ+0{0W*xcSV-=9<XQjksnaMw$*n*=T{a<5<+^oPPMRJa#i
1244
zHRf+mk9^s3u`=@KszNTS!zj)Tq<l%J8-B_^EgTqug6=Uv8NXybU*FLh-ZY+ws49&G
1245
z%?w=&7?X?<)_LSV8!gbW-dj|4HGe-(?+Rv<E@j?*SuO5@cq^;LarnO0xV3oE2cSyG
1246
ztiw8A7{NOD9y9&6%7LuFI31aL%V@2AVbWNcE0*15tuBH6Jv#$1nb?t}PN2m|p~Zek
1247
zam`|%*Bv%GhiH1j?lqC3nkeT<J+mJ6{(|lQ?UzX!e#LH`aKxWRdja0uUx)0=O7bvM
1248
zp;b`+8}Sj)iqV^|Yq-hj-gB%j-BllEebh_eiIV1#xt-4RC@71ucI3+`sokAP>btT<
1249
zR<0BpKWu(yF16J5FW1q=Bj74OL8ETzHw@RN-1UW)?^F$ylK;xBQyYfe@cXUioYg$7
1250
zLZ^|mYwV@1vNYQ#E8IQehTE-1Wp5O6ebZ`|okcZYsvS&vlli<SZb}8eGURJ#?yN%D
1251
zCTpSHS|38|ExF(R-SQzTKdVsQtZHRRmCvoS@;~~!<-=CKw&(tFWIs4Ok_l~W;dUQR
1252
z6q5t^@xptOxSK5wkE=|mW)3|R%Ra?3K7!<890JE$e$uzDW)@O!)d-`~!<l>jI7pOS
1253
zi8bOJ?z@ZeJSG$6CP}ngat!nC1c={lH$b}KM;jGK+r5)muoyQj?zK#0P0Y`)9rlH)
1254
z!%7d(cd*#C9|ae3x;HSFn#oDJ=~*T3;#K&hd63ODXq7UZAKZZ@<UyoQ1>@{;@O_F>
1255
z9<Nn1g7ucK<2Qwpb9XAe!Y}<<*4RbdV-Q``%kGIU*57U!Ky8u=iADIZbH6<2f+RPG
1256
zAvYEU?H+W4wBK((rj><$D`Of$YxG4c+1_rn8su&0VfodMDLc!`-f1U$6JW$Co&4$h
1257
z1)=OStZy_oxv{I!BsY7zW14@4+dVzQo)U!z>a>o&<W}SFNi3oF6WT{7Zc=<iv&%GY
1258
zyww%!+z;?zpMtLEAq!|PT+y>duP5O8qmXpQ1&q{*YNOX{P<{lZ?*g|F^Qkn}3Vtim
1259
zIjgW#{+8ZVKP3!r*~UD))uQ*bk9SU5o)&5Kg-PE`V;Tx)5^1A+I#2oI^QHP#roN2D
1260
zr7?+33h6CwR<G~W%iC9a^yilN3()NTEB6){)N7{LZ>?ajcv`+j#A(KN`#oZDc(_~K
1261
z5f*3qWX0ot+@aon0~qV3w<=%44|C&@IQ^h?x$y51%XtCw_4z;++tMzjrl#fI$lD2+
1262
z6L!ws-z5LQU25Up2iX^CvBd7?@67#$`FIN0j`V8k(c*N*Toc-6r`H$C-y_w(6A8Q3
1263
zV3jTGFE<J!>U)qjkP;9>GfEz-A-llCO;a9La7svPO)QDN*SU}32Jr-PaAS|UTHJx&
1264
zyhb|}o;An6F|VKYyX^LuC=9J{-_SBJ;&s7qHb0vWdJXVv{RPn9t=M>V+Ey+e9C;YL
1265
zx^u7Q<s*_&>q^PE-^-7Yn`|}PGsDLhWq-hZ1--Dt(Js7F1^%!1xVfOtMv89Ke^YZJ
1266
zBVvSjr1WBBwSSH>ye$u3$xR-7+@%^tyLq<|e+?sH+_jOyT?W1FHiGqFv64K8@SDfa
1267
z{5guh6R*zxApVGlm#oB$GmR8WE&Ci2*}KbNP5qelZpDPOdYiL(=|IIfJe6=eK>&Wf
1268
z&Fs|FO%0k)y}B>zSs%9)@O3-pV~u9P;pLef#`l_YoolJN&JAP5Qk%ORDVT&3#`U@N
1269
z#7BmX)rhzjPQfeL`K_J?te>SO>#d@PeQL;d-5q=1N77>6N77<Qo))@$SSwU8yNvpG
1270
z#!91JcP<z<MXwv=%+5erJftFIH<59N#Bj=1fxn&m=*pk_$lK`>)X}D!V2mOeAeU}>
1271
ztam0|oPy36L@vn=hm8DlHMgePUL`e3)0KyF2yHiMsb{9bUw5%kdYbOhBxH|(uNLaW
1272
zjdtxPvqNt?cfEcu`8|3)aadt^)ZV`4w=v#ZzgKuRTJ~86hevGRY=ijF%H1n2+jo*L
1273
z`RU2fz@2lIn*T&47BuRvl%(+1wX(YH>z(7*saM^9gU_d7evXg%Ir-CnitTlg=dt7A
1274
zj~`%v{AqsBO&k2T?@RU*j(=K)j$m{VErf~a18pLf`g|&Ujd=NBqmAdQVEZS%j`b<U
1275
zzB`mUy$7Wd27&ChZnQ=Ub~YYGDUE4tS$gZHRPU`j)4<9N5v7K%>88|xukD;Gzuw=9
1276
zMjb1oURg1&q7C)wn>?$J+xVGnu6Q$EN*m(Q<`Tgv_=?|Q=BhK9c@2D1h3rHN3|vHr
1277
zM&&qL*6q=@c@h2S-!Z&7s@}}=U1`dre&AQ4!pm=RlW$KR)2VWgj#J>iPXUeHwLxgJ
1278
zXz{&0Y53Y>@kMEIwfU_PdZYWBz<Drm*16%F8K_(0Rt<HH?CnoW)dd6fr15;L@TM*G
1279
zlvndb22WD)s<9A%iQ->dA}aXtUMuH{>Z8sgZu(BWwHsge9swkIkEq!0lzF~aHl0m-
1280
zenq->+q?IIdQDS#`yS|ptt&7S`8|Qt9XhL^mM3!CSCltyjudzBHkG%CxL_1}4e0}<
1281
zW01nP5ZvLbM(5fqE4?pT4dx_@?Z}MFW$Te^)IS1AI-NbdC*7&c7VU*~n`Yzl=wI!e
1282
z&Jty?1ByCEfuc7U9pufnbJM|iyXl~U{84V#E=#kshd0hh()=3<^7#Bo^V>r5?Q8UY
1283
z*tZJ~vNzqbFqyRev{e_6G={`?MViy#Nk-lzAVX6!Z}g&}D>+TSw&HGN_gzpVSP>MR
1284
zWtruKY@Yx6?aYP1&-WUwCrvvqYWbKNn~|jQ6VRBrCv{J5ld#XEwWeTPq@h<GZ>&IA
1285
zWwuLR0_SPqo6h4)E|ZgQKLJjXv)oZ3YRIce5Lk)XZNYTa6T^R`+wn*KeJ%lxv3Rz%
1286
ziw<uuP@ge3ziDrMR1$bIj2LcfH|!)ujIWFE3!?sc{<#*U74!QnmCI~mo@Hhu)hn;l
1287
zajw?RrB~h2El2vD?4@@NEcm`LS5W_SQ9?DnrPWiLo;sevs&b#FKkAkq)7<QK802#P
1288
zew;>ft4~cD<1?*Y>#%9lqPDHd+*!!3km<SwpRP<y8e7GzFelyYj@?}4fp$k=B^qX~
1289
zauV8LFZ)JR-)>FLG`P*4UivZZA8r<nKKM~ib^7vAE_^WeHk)=>bvrE$Qk>OZ=Etgi
1290
zyjDCr2zLOQ-s{1e*Um%%Szt18hGT1eJmT=#*6kLv(D^od`s@lvEUO9W$3rKF2Ub@I
1291
zZi|&i6zdsmm!?sB^fX^gyS<W9x@~1v>9US{vI*;pVs5m&EBpW2yZYd$uIqkR5=h8j
1292
z3&>;ve_Yv;0mDiwVGPJ7*6vCIg|9^*8(Vc?wfk1uu)A;B_f`m}84E%u$#f>w;CR|J
1293
zo-y{Ak&V+7=cBcqrluV?lT4GAIGrYGJF)AvGi}syq?FWYVzd37bMJk-65wXy{OLDZ
1294
z-FLsvJ@=e*&pr3^kv3aGb|%fKM_#<S%zH{Fr?vyv8Zj8a3@`T2)t6^DA5LR1MkmU@
1295
zV!HzvPHio}QyoX}>OWf@tM_|ioJciWvN%Aay`5M$E91uF6QX<h^^ib1*L_!MAMvZy
1296
z#OVeDq)RrV&FqJrfiVQ`wev0CgLI28lWs9?vM4vL1g+j;>ibs4K#x|=4Xi1Q*7KU?
1297
zg$MRjr$#!YLA!Wc(NEP?3@Vx_UMl*a7DSo5vA$StqMI1EP3=Y<==L5^4reIt=NfG(
1298
zE#Mkm&o#n#-;m-K*x}`-6?j{S^P-?1c59HlJh$>HU@Q$SmxChZUtE&kEx)c()5_-D
1299
z927zj@ZC9T+dn}2;dA;5Z&>@(ioSw6EoQAg3Ez`}D9+=!xc~10Y!bqv84%c(_x%;(
1300
zPpT0BX&&EKm#;y}7MfclD_YI3l|pC1F@hOr4qzV)GznS5bh?wEg`1jJw&-?Av-kRo
1301
zwo!RXM7v>0zegJ4fcJe`8izdv=tEQk-sMPTuIF~WQQx?+e(KMe1MT56XeG}=e#tgj
1302
zggF{m8BIKD=Xy}@f4r(*+m^3Jy*7s@Cw+Y15JA3$YKU1B$i9YNhqJ}}O@t~)v_J64
1303
zDoD4gnxdCcU$K2nkQMVZjjC8PRfR_VlO$(9QgSw@o}~Gyt<p%E*47>&EqQSPm4zSQ
1304
z{PONajI&<m*#**rD=?El>tat}9+vJ(c^2g#ho3CL&G^Aq2873GY=)Tu)C_g`x!zlB
1305
zG^Y2BcESjy_aH6J=PrqaFuu_3TxlUM{%X=!(LEs%*`u@-biuDE4e;p%E;onKlJSl?
1306
zEUW|8iG5Q;tW|o#8$u#H$hu6y@BxM|hH@~&z%UpCKu3@D>q|>e?NMWic|C4pF=}Hk
1307
zNU<mIT;Mb~dK1lK14C+IjdcGHsIu0yt`abYor8J>zE(o%oO40o6w3Q4OXU-2k1tl|
1308
zAi7{5&3VMqI2Bs<h0lNkwX|LYNm+rIO^8{Fc=5vLp{+KF1%XIl@6yHC5A)K^`{=~`
1309
z3x6VdmNfy&<2QFgD#?G#vSz{&d*h(H8P4O#xg2m>(DUD3ehoNOzBh?+8d;!phEL3x
1310
z_D$oKWj?g;n3kHez@eoiQL7fLkhMTYPaz4P;O6-fAGecLDuvb#`_V@B;I<5T{r%I8
1311
zF)Sd1U$|$X{GUu^7kleIihcC1IQ!_hBt3T=I-5@BhoCv=ds!qe58%FVItBI#+_g*V
1312
zg{g21vIa^`y)Xl5$6aTnE&W8RX`jH30i2Zb<K{s>PO(3QHQuXfMv<^4y*Q2I){sE#
1313
zT`w(osmwY?1PJ=A&~A<8^AX%8_~;@!F^E+{3VEDEmLmkx=9To!B_;KgzpL)`gSMwS
1314
zTqvL6{4Z7V<0P`d^xKGkR;5=xD=ey~5f($wTcao##r+;ctq7fA4556|>@-%mQ2xZD
1315
z<DdZbpyX$2m5*SYTa}YynAW&`SL2gXdYkxq{qicl{{1|@e&e!y#acSiQ1kV9Q2aUO
1316
z>kHG3XBA%uh_AT&Do8yBczO+6Kb$M-kNFTvbCtBW54ML0c=d9{#G~Vgr&aU{_x+rX
1317
zAmId`mVi%c2{;vwA$_$3sJ@RR;EDfN0?ud&xV>~*OTZb-!jJ?!F?9wKaH>iIDCBVt
1318
zQ4+9H_p&R>&s<UxBw$LlfjVlxMj9CEOBEQnfzx11Qt*uC&gU*84I9ET=J7N}(lFpr
1319
zts)IaH1(>b;qcs?S{epW-a)3@h4L3MUlD`l5;zC8$}PMCT*sE()u-D(Rf`s)Pjjo2
1320
zH&e?WrtdrO$&Pb=<bWoC!)F1^c%JXqTr#!NUw8ULYyqBBbIZ^*w94^iHKT#qt2)}D
1321
zb=Aj9*h9qgT<Af3^lhJ-tME-mDcA<6gNDcLO1>VHR&!On)Q!?;?x_haUcwH#4%loc
1322
z#rznBP1lM5_6cneeyobc{IpVVOw_{PfExjh;R_EjKjyjdwjsRKkDDC;X)>_)^nK--
1323
zK#}dm`<4s_z7Lsf!QC4Kw^qZ&v?A}<B)A7P+}QL&4L4R28twwjr^SHp5cJJo!(D<k
1324
zzO!&6@IOJj{(&!Psu9TaAS4ZEVPe!zq;Z!>K86~g%*1p(;Xj?CG7+k3aS)-Z77G!k
1325
zYEi!ex(+J_K0v<i)4;K*{`AK3%(776aKQKJyznEeA%YSjfF1G2Y9k_61O1Ns4ZEpF
1326
z!dd;2=q9>#aQ&buQKINpB`%!~=@OUX+wdrHSqI9Y+acD6qus<6s#OT-bqxUTAW{;%
1327
zrByYc@5&R+;|NtXSf=11Y$@8w48DAOqI{I#5_LS-J-A_-?6<>9j$jYwe?xY7e7x|#
1328
zcsHE{m!1!=fsDY`1HUd@d=)Z5`w*T}bjRE$Vc1iquauTbysAp}*~0IfgB&$(nZoW)
1329
zCAr|kBP^eFBzcYN!jQc1VuB2*gq|b#fYmY8auIV2l4`q6T-VfuIUIikeib&o9W=zg
1330
zXvFm5?Cs35rpQ@Yi%^`dp8h&&el?|ybW0z?abG0C4og`F+f7zx7|}Oh*R<vIU4RVf
1331
zM5*_OX;0nD<+oVwC#Q$Fl&6vEfzw-2N^j(>zc$j1vnzK=F{iX{KT7h~tX%ZD>p~*X
1332
zt;TAEAI|&-432?Vpd0>%PsdQA2-VW;OC*MoT6d^s9%iIv(U)oajcmQErk2l$Qb+qc
1333
zV)FDxaa{y&%7TM*Q+yCES($65ch5-hi1q@g`P@_R!TM5qAncz#h&QbFg)wsz?w&aX
1334
zAJ#~TTMPC8ixAp7S@-%zNbHoM6=GN|RppR<ux9$e%xbTkTIT5$%TZ;7W9k-mAN0zV
1335
z%TXt`sJ~o{d)lz7fzblyW*e}o$8*!(JT2+~DJ0vt7C#!nrQxpNmVbe@)>7Q(LA_rG
1336
zX<zVn<qMy}IRB~g1xWb`^oh#^?%1CJeX#O(3OSmwL*Xe{dly7(>I)>XkQ)kpHnLpO
1337
zo=duidkViUh6h-9UjqD6aGg>!X3i&RoKY^3jsEKzf)T)M+Z-rQm0#sDQ5%F~PJv{T
1338
zW>`QIvl8>L+MPhQ<fZtP|Aws1OH+F%-DqU^Bz|-gBA?o%z7FqSD@~q4eM<S+tr(Y|
1339
zpWUH$oc`*Yr~z)wM4bbyFG=5jjn-1(4k0g5?hq)~hn8`HSGVq3@xA3ij9Hpj26^mq
1340
zqwYIEX^dDlBmE~4yCjmwTpYFNx-jM>01fkZ@U>8ysoQwX7b6y;C2+@jE!Liz@fC!g
1341
z@|&pLycpm{<KVx8oy_OoN)r-rAs?o;w6gy>-t&KfzNSN^BBU8*tp?Op;OmO;T8z`a
1342
zE_|;*O^_y`G&E|^Sn2WD+jk=UTFffG>S5tC_)&W_{qDuHpxY}Y2~269!E2!P2_H!-
1343
zTA{B8?JUH5Z)n{fZEcq9!V{PSR8sp1@bx_Dy9v^8o1l3+unX=4?+L93&gdDCvKd(4
1344
zh?T-toU|rO?KZ$T9>Ey_@Q~<(d<sH1pZ9TC3&U~CKRzjtig2r28ALtKfg04R?b!*U
1345
zb2v781C62}=^dEgO#}88xJ9^|;f}+lZwT&(OYwQQLAVLHYv4L?Tj93C{TH~q;oive
1346
zANL3w?;j#O12013`qcQI`j)`6*co(2K-*z#c#}wCh5`F8an7j*n0+0;Gw3&7gM3b+
1347
z=5?UKWO(K54V=F&@{!pacoym&)Vf7{3B4Qk$$@vY|0sY~)J-`tw~A5!?2VA_P&c(I
1348
zqN_fw1A5a=kPl;wbE4+UaNFR1>7<<bSvWL%Bh5ks=f4E*bkh6taB1X-+0mJQgNs|6
1349
zX7xQJwAX}J;cGGTavpb(x8PPY$kJ>BxH*A#OFHQXpzA6%j*R$c>mOY-TVFcM9BZjL
1350
zhVS*g49&BYR;_V9{N+gVY$&jrFhHr#AosJV`=3Du{}k^V(T*M`>R}~gMfo}Og=?>G
1351
z3g<(<(nJV-Kcw^@0Lz@+K&7vJyR;Y%&Te$m+9v6VbMtubhpa#zMa#)nBT3<j34CSZ
1352
z;)|LCehIk=)47puywN@&npyJ^HBfu35@Wv*zIRp%&C;C&^p5i~GpBH7cs=n2?=OpG
1353
z=OoS)9mJd+_AJ2W@|V7XfQj&8v<uS4w93VMP*B@0%%Y#?_BzD-cCc3i{V~sAW3L9C
1354
z^S%)f6xOuTyS;P}`eFhW47IA;!yS`?H10cZDmrRfyX7I~NFDQuw86)9J^N6bh5%;p
1355
zi6_k43+1rFn#Tngl>@hLfd;^qa3Scwq&1;ogrh#>|HUoW4>KM4>oPYFlZHWx%~T(_
1356
zq<PkYi=E)$wI@MFm6kN2qW)B>{1(#CUC5ND12qR^zy~D={=1(w7=klD*M0fZ;Kp){
1357
zqE)ZObT(!3dPE&42`Gd&!XIF|(@rQuQJy_|hwk@<&PMGQ(QcY+X})PKQ<&*$==m<)
1358
zWUJF@TGJZ-S`+_HunNN`rv3=u4pdTp!bdadps=Ft#YYe~>c!O}4mZc>xIa*Ik4UtW
1359
zBHD?EKeu=6tlBTp_Rtf4Mq+faxV_Bs^*p$LLi{sYJ0$RA@GRX-z>-HCrLonux0X(!
1360
zO>)np=v{ge!4se_<d^8qD?@Y=Y%{-I%{-trojQ~TZt?yotm1&;Y3@HCP_juBU}+;-
1361
z%$3WJcydWI5t#~{EAfmVgR(y2S4HwGGVl)0WKfL)t6zZ>&b*{($TPM?X|&9D-vp+p
1362
z(Qn!!ulZxIMK=7lE%Mjjy`<)q7TEx4-58a#H=PWzZoLUO4yamyCK0sI3-A76REBCu
1363
zqhOta#@CLLg?As;;SKY`9qM=a#;X>x3$LNmjQjA5>RV{(<}KW+3=MDx`sd%;{uQ5x
1364
zwhV!mRkxu7-aRvzfg^hwC3Zr0`Of*V=O5>7SvH`{@P>97mawd8cPOn8p2HjZ8@8{}
1365
z_Nhe+A<~zF&(M0*>J+codREQ;vr6;)oZ2htln8oBmc7Tm%DL7c4C8x(54}}Ga)0&r
1366
zd7Q;(i5`0b<w1HVS7l`iscLG!gPgETk%4x+(D-3Vc(D}F21{!H7Fw$bz3f6Y2Z5P2
1367
zUde+#uc^iDMaV-v!cWz_7H%MrfJNLmiC+|7Oz+12=~H;e`Xj91LwF<HX~i#6l9QPH
1368
zpzz1`;(SMpb^hAv$LXX;J%3%WzFv%BpDjJ(^V}NY<M1P5LEHO$WL5sVSFip3+dO}B
1369
z%k69KY74e|0qa^1eE1&Ecd+Z$?p0fEX^Rghl2&SDG_7Mkb|{n0+4;i-lhSdEV@Jl1
1370
zK4kp!+;Ak?)7!UoTfYwf$o3sOckPbt88GSg?i;-KzWw(<p!}hZ&h>X}xO3yC&B{-7
1371
zXl$0EKQ|W7q?0m{I3iPaAsctaoUnK@S+E>OI8I_zrsC<0m6S))?kF;B5yHJ}XqOC)
1372
zr{+D4qJn{{x)6D{&{<sH*(LEJUE7wKcwxj6B9XRb(i%%AENK-AcA-&7={P`A3cMxw
1373
zmEKVJft<}@ZXpva=F+ZokLCfPKj$K6G4IL&%gNh0$C8nZoj4?W;%>Z);7Qq6%q85k
1374
zos&^ymR&*)?RDb?_d&oL+7{2?MGi$XR=hwVc*00MmUfR;(gSueYXxIgE}71aP<n<?
1375
z3DA%#0UBZ@fXWz+=W<pi$nY(K(!+K40tjx=$)gl2sc}I$Zqcb=63$o}bFO*TN~Ys3
1376
z!-^Hs*?8e7*J`houyaYz$1p0WP#smtQiCU&gk9Il5t$SOm1n1&OsCQoQ)Y<B7aRob
1377
zgS|P%Zzxi9P++BICS2Exy>f`NL`SW}Axf(Nj3=zTDvYqvl&PSDbg_axQix}RT&l-r
1378
zgI|9xVHXNk!VT`QawG02LH2T}qEv{BG{_Y6$~Rmf0l74kOY_olv8i~%QdoH5fRWBY
1379
z61@DVLn0sFqU0xEu*MFcnQakNH+MAcC|_^lP!e+KB;{U<1eGw5t5aE5cHR*jKI&S|
1380
z8c6JwQ?2i;q$0=)N)((<vv~Jq;v){rcQl&}4p<*U)rl@#i!sGq1RpM@3rfC-f5F{F
1381
zHyDc-An#snhI)}EpG6K61SoUqwR?=3ost#eMK+(YTr1dPXF(a3pqK?6lOq_t)U-KF
1382
z>!9GiLOgLO*q2pp5MmOvQ^Dxb3}L%FZx!OMT?p=UxTWo~fisw$4EEVYEq8s;PC>An
1383
zm`hcWL-(NqR<J)enjXfBlFt4tIFU#@7Rjq_x2V2J734gOS5(PTd>CNo*0V2NaC8lV
1384
zJ8U3?vU+o4Dpd>$6BT3{SC>Vp@IY&%lf`&OMuE6XA##g~iH#n0WKSVIX372@jxaG9
1385
z`-n^&%}A|{tMZIm@gxV!+vI4P6KQBlo4047z2hSmgEKK%H<+|oq2%15P;lderW{CJ
1386
zRm`Sf$A$-Wo;=!}j4Oqiu#*H&$3W6j>5(G1L&`LrOW7tS%L&_oSCEje!kWCm*Ta1%
1387
zWXicDrsIk+ofOljx+K?@kUJ&&pj|Y2q!Aq)E*iu~QbnB*9q{o}#xRUt;Fh)P`QMPr
1388
zJc#vT9osHuk}_wz@(9V03`e)`+I`=S-kz<!(oxzMWsceo`pdzbQ_Sb>0whe1r3;{g
1389
z?!JJ-d^kM={rC0`%m-0PHDb9kWkI_`h$Mv8se<6VM;zswQ?`VzukfV`%B3mq-7_z-
1390
zh@wkE)u}*45>KyGlLNcA&#%lSbdIk4@$n!0#U1~;sgt9G!ZVlybluG-ZPb=aRD^_j
1391
zwB*ik)Dw735?~R}al&{8{W<zLnYFTZ;V9WI63yD8#xq<@rK|#M7Au$RlF0&ek4zU1
1392
zJKBD!D!&V@u{sZ1Ax;*+**fZv?Ep~lBIn5FMzMGO=1^}8b-;?~1Xabj^zIW4#oVEs
1393
zeI%!h7SRZEMaq4B`(j=xN!jYi)vZanJ;Hh&@^PgUCIRJF0K1U6QS7keq_kvy+{&bL
1394
z#qqX8YD7ZYfCQ^romGIi-73JG&|zsuX45d3awEWhm*pO@3y0*eO}r&z2jMUW8wDzQ
1395
zVBh_*-UHF-ebO4wvjP>nY$H-ttV)r(t(FFKd2Sju<U^K3GA=-I6?Ge=lB*esN`yMc
1396
zyRP()EHmngEQe5I!6TED6w6pTE_=2`K}>o?LqkJrXnj&NZiP{Xq{Y09r(pC+P?wT{
1397
zZwv+`qqGf4J7+b{YX$u=BVWV^g=>Fo><$wOWRq>?k9p;#xw9$_iZHpETaHygH`qno
1398
zkATuC^hz=p&strELxv9?<x~xob=@Y(_$0=lL}IA~56L)Yv4r%bB^w3O&Sj3SL89BG
1399
z5ItV|v8*go%VA5#rLyeX`giS>goJ2Bht3S~g1Q=6sKibsBhtykszI~Q$GNiw1EiN0
1400
zU%>LD4&SIRy3$UW)(0Vy3EeVDzYGrc_p}M(a`i80Jn!*hk{DNbQk&6|Pn=xmiLX4w
1401
z;?7cB=?f^W+>L4%?5vSWkdq!?-2^#s{n~AiFMr{5Y46+rXk3g>Ybfr)8iBKU>Z$54
1402
z%I)}~9<HhD9T?a>(6wmMq6i8b9N2*tHaCoV2j={o7-+CnF2vKZGtgB@HjOxyT-^gs
1403
zDd{1mlRkv0LbimJTthG}C+o;kCF%-U>}C)*2;Y)BRDUKe>PjF)zfu3kp}Jl^>I}QO
1404
z=+_}yomS=>?rp*wHr{lFI0kf4PgHE6m-_E%|3dL0taIXKMN#9M6bn&$Bj(an;XYAA
1405
zWpHonYY+?Tgzr1*`7W-=;y##=AxJ-i`zpQr{%MRMtMoM{eFJG(Ja7e4_<H?VqQHYJ
1406
zl*@ZO1uKR#ha4y-VZ$JF(H@nyCw-BmfuNM4aR7!8+8=_r@fOG?(FA3og2n|G(fv!b
1407
zjYF2}kX8UMWHCpEAvLynebG9kRP9W)Xb7I0a`Rmfn?^}*MkQ18BAwpo1w3eis=}!0
1408
zlKL=Fjj%{;psVaV*&n;tQ${99Rqi%w&B}DXOstkZ4-XPRg*11l1RK~7?jqY~m!Mvt
1409
zm;;3pqf~VPo6xlrc4khXAVX+wNU9JYp<#nkb2-bxKvu?cP}F_E&J~VbEI{oP>>~Pe
1410
zRlMM~Q(c%ay=$dM6oTJXcTd^~j90pGj>;s{pw$sd52H<S4@SMI&L2-CU?Zc0u``UJ
1411
zNM|zE2n=+FZZq}J1Btm9xP^GmftdkQU5Fgia}g6HoTG>)tTCfG2NFQ&pb;CrB==;x
1412
zhK!Ge5wDd*CmkP8XNy?{zyr;)+aKK-ldNmxEv?Qi3Np`&NIQ`zVz>)pnyzmc(yQeZ
1413
zQp~1J@;!2B+kglMMZ*&%hAOHAlVF%<Pg;}fJnKNJpd)byxpmV+gQhpt9>4mIc7LMW
1414
zuMBJddF{S9FZ?OY)-^16#N_|R2^Ig1hqRm5Zc4kqr`>^Tu4F{9Fsy+DBgGY;YbdrN
1415
zR3sS4(dUgTs4=6NW4tb5aap>{#N1uHn8Bq<@nI_?R40V#S=d4aP$QnF(G^)qS&Vj*
1416
z-0>Tg?u`}Dck>t+^IzJSBXyrjkDDGpgJ#}r((HppOokhajpG(bV`(v`blhH(76y+L
1417
zLFTgo$`+y$e$pb`C8pgrQ61kd_7#p&#_B*e8XPD=VQ`oet8rb+$yh=06dvOo>fkQ^
1418
zivQ5FggW<E|4;^Zr!wrI`EWZ~RY=IYCG1;j2CKAUXl`7cG81>L&N?n!wvXCbtKA(f
1419
zx})u|J*`apVJll~&nJSzY1?UcV7CV`^MWZ^`h!j2wC~-qyRSWy9;P4kT6?8x>zK{5
1420
zHBEx!JtS);%>gnm4zOGt0D6MP83$N<6%L?RPbbn!)pf}^RuaH*%AA!R86Aesd+)^a
1421
z(#Df8DqT!lkS4tpvPP8qalE6Syp4j4EBe2=E4yj4nt3%dv8w(2q(Qm=e(L?Xujk%h
1422
z{wtOL=93EU8{c|w_-}miz0<uhdHMXN{-w7rA76^i4Zji|uaC`5SGrsC#5meQ(UuAl
1423
zQv~JF4qOF6JIaIqA=qH%c^Lj{ss+<TeBgdSfe$F~JEwqMzW56Tw1&qTcweCWwZ^|t
1424
z$DdU$#y;xVsNJiy8_@3c+BHtSdZ~R{2hi|_o*Cufs}}0v{5BRu$!ik9|Gzrkl&ihJ
1425
z8>fEa;`5h-RDaC(Lkh2-Xc%Splb`($c8~dfsr<(`v3vYHIXrGtenTemA^)+Edck!u
1426
z{NklF!5_H483lOC;{8z%xf93tCaB}_iI1Azh>B;p6i$!Ehr+l}?Z2EuX*jQmtUvL?
1427
zZ{a;={Flc6C}85ZMx$MF_10a3YviW34Q(OW8S3l^ZRof|t{%XkXItD=;lYme*hA6g
1428
zjKVB-<HMrOwZ>i1mZnAEylBHbiq$rfE4B?6)0t#2ofPaFjXR^FEqOHO9L*}%Er_;)
1429
zm5Eaz-fWs9;Fx$eoj@iVKvmc<R>a$|yhXNHRZV{TSJDxNPOMMrCk!yZet9KtLbPjC
1430
z0C^YVXYy;F)NuO)i?l1Q)A@{J(vu(im4wzqhNm^#R6^s57UlQ;*LiP3tb-o<AMH2g
1431
zYkWPuN%oM|ot&~7|2q+4^rXpuR>7;$t~duj(Z<M}$xrg~Vf<?GqesUZ{cK!e^s!1+
1432
zp%?l4@H6!>`JYw^J-s{w|K;#E@@nYG`RgYPzh2jL2)v=-dH)Um6tEvZ<~v-jM@8=%
1433
z{mbA@8p>nx`|%#f&y=t8m!GFZuqm}Gwkf~&-{dDZh2Px#$8<UqT9G3Iz~m=C)=NBm
1434
zRQbmUEj&Igf46>H(?JE}9v1UL?qU2)NulZpFF!uYHz&N3p7PPp@PBSHUyY>$9-15B
1435
Hl_&lWsQ8x_
1436
1437
literal 79688
1438
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
2141
CjQ7O=
2142
2143
--
2144
2.31.1
diff view generated by jsdifflib
1
From: Tony Krowiak <akrowiak@linux.ibm.com>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
This patch provides documentation describing the AP architecture and
3
There is nothing to distinguish this from DISAS_NORETURN.
4
design concepts behind the virtualization of AP devices. It also
5
includes an example of how to configure AP devices for exclusive
6
use of KVM guests.
7
4
8
Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
9
Reviewed-by: Pierre Morel <pmorel@linux.ibm.com>
6
Message-Id: <20220702060228.420454-2-richard.henderson@linaro.org>
10
Tested-by: Pierre Morel <pmorel@linux.ibm.com>
7
Signed-off-by: Thomas Huth <thuth@redhat.com>
11
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
12
Message-Id: <20181010170309.12045-7-akrowiak@linux.ibm.com>
13
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
14
---
8
---
15
MAINTAINERS | 2 +
9
target/s390x/tcg/translate.c | 8 ++------
16
docs/vfio-ap.txt | 825 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
10
1 file changed, 2 insertions(+), 6 deletions(-)
17
2 files changed, 827 insertions(+)
18
create mode 100644 docs/vfio-ap.txt
19
11
20
diff --git a/MAINTAINERS b/MAINTAINERS
12
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
21
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
22
--- a/MAINTAINERS
14
--- a/target/s390x/tcg/translate.c
23
+++ b/MAINTAINERS
15
+++ b/target/s390x/tcg/translate.c
24
@@ -XXX,XX +XXX,XX @@ F: include/hw/watchdog/wdt_diag288.h
16
@@ -XXX,XX +XXX,XX @@ typedef struct {
25
F: pc-bios/s390-ccw/
17
exiting the TB. */
26
F: pc-bios/s390-ccw.img
18
#define DISAS_PC_UPDATED DISAS_TARGET_0
27
F: target/s390x/
19
28
+F: docs/vfio-ap.txt
20
-/* We have emitted one or more goto_tb. No fixup required. */
29
K: ^Subject:.*(?i)s390x?
21
-#define DISAS_GOTO_TB DISAS_TARGET_1
30
T: git git://github.com/cohuck/qemu.git s390-next
22
-
31
L: qemu-s390x@nongnu.org
23
/* We have updated the PC and CC values. */
32
@@ -XXX,XX +XXX,XX @@ F: hw/s390x/ap-bridge.c
24
#define DISAS_PC_CC_UPDATED DISAS_TARGET_2
33
F: include/hw/s390x/ap-device.h
25
34
F: include/hw/s390x/ap-bridge.h
26
@@ -XXX,XX +XXX,XX @@ static DisasJumpType help_goto_direct(DisasContext *s, uint64_t dest)
35
F: hw/vfio/ap.c
27
tcg_gen_goto_tb(0);
36
+F: docs/vfio-ap.txt
28
tcg_gen_movi_i64(psw_addr, dest);
37
L: qemu-s390x@nongnu.org
29
tcg_gen_exit_tb(s->base.tb, 0);
38
30
- return DISAS_GOTO_TB;
39
vhost
31
+ return DISAS_NORETURN;
40
diff --git a/docs/vfio-ap.txt b/docs/vfio-ap.txt
32
} else {
41
new file mode 100644
33
tcg_gen_movi_i64(psw_addr, dest);
42
index XXXXXXX..XXXXXXX
34
per_branch(s, false);
43
--- /dev/null
35
@@ -XXX,XX +XXX,XX @@ static DisasJumpType help_branch(DisasContext *s, DisasCompare *c,
44
+++ b/docs/vfio-ap.txt
36
tcg_gen_movi_i64(psw_addr, dest);
45
@@ -XXX,XX +XXX,XX @@
37
tcg_gen_exit_tb(s->base.tb, 1);
46
+Adjunct Processor (AP) Device
38
47
+=============================
39
- ret = DISAS_GOTO_TB;
48
+
40
+ ret = DISAS_NORETURN;
49
+Contents:
41
} else {
50
+=========
42
/* Fallthru can use goto_tb, but taken branch cannot. */
51
+* Introduction
43
/* Store taken branch destination before the brcond. This
52
+* AP Architectural Overview
44
@@ -XXX,XX +XXX,XX @@ static void s390x_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
53
+* Start Interpretive Execution (SIE) Instruction
45
DisasContext *dc = container_of(dcbase, DisasContext, base);
54
+* AP Matrix Configuration on Linux Host
46
55
+* Starting a Linux Guest Configured with an AP Matrix
47
switch (dc->base.is_jmp) {
56
+* Example: Configure AP Matrices for Three Linux Guests
48
- case DISAS_GOTO_TB:
57
+
49
case DISAS_NORETURN:
58
+Introduction:
50
break;
59
+============
51
case DISAS_TOO_MANY:
60
+The IBM Adjunct Processor (AP) Cryptographic Facility is comprised
61
+of three AP instructions and from 1 to 256 PCIe cryptographic adapter cards.
62
+These AP devices provide cryptographic functions to all CPUs assigned to a
63
+linux system running in an IBM Z system LPAR.
64
+
65
+On s390x, AP adapter cards are exposed via the AP bus. This document
66
+describes how those cards may be made available to KVM guests using the
67
+VFIO mediated device framework.
68
+
69
+AP Architectural Overview:
70
+=========================
71
+In order understand the terminology used in the rest of this document, let's
72
+start with some definitions:
73
+
74
+* AP adapter
75
+
76
+ An AP adapter is an IBM Z adapter card that can perform cryptographic
77
+ functions. There can be from 0 to 256 adapters assigned to an LPAR depending
78
+ on the machine model. Adapters assigned to the LPAR in which a linux host is
79
+ running will be available to the linux host. Each adapter is identified by a
80
+ number from 0 to 255; however, the maximum adapter number allowed is
81
+ determined by machine model. When installed, an AP adapter is accessed by
82
+ AP instructions executed by any CPU.
83
+
84
+* AP domain
85
+
86
+ An adapter is partitioned into domains. Each domain can be thought of as
87
+ a set of hardware registers for processing AP instructions. An adapter can
88
+ hold up to 256 domains; however, the maximum domain number allowed is
89
+ determined by machine model. Each domain is identified by a number from 0 to
90
+ 255. Domains can be further classified into two types:
91
+
92
+ * Usage domains are domains that can be accessed directly to process AP
93
+ commands
94
+
95
+ * Control domains are domains that are accessed indirectly by AP
96
+ commands sent to a usage domain to control or change the domain; for
97
+ example, to set a secure private key for the domain.
98
+
99
+* AP Queue
100
+
101
+ An AP queue is the means by which an AP command-request message is sent to an
102
+ AP usage domain inside a specific AP. An AP queue is identified by a tuple
103
+ comprised of an AP adapter ID (APID) and an AP queue index (APQI). The
104
+ APQI corresponds to a given usage domain number within the adapter. This tuple
105
+ forms an AP Queue Number (APQN) uniquely identifying an AP queue. AP
106
+ instructions include a field containing the APQN to identify the AP queue to
107
+ which the AP command-request message is to be sent for processing.
108
+
109
+* AP Instructions:
110
+
111
+ There are three AP instructions:
112
+
113
+ * NQAP: to enqueue an AP command-request message to a queue
114
+ * DQAP: to dequeue an AP command-reply message from a queue
115
+ * PQAP: to administer the queues
116
+
117
+ AP instructions identify the domain that is targeted to process the AP
118
+ command; this must be one of the usage domains. An AP command may modify a
119
+ domain that is not one of the usage domains, but the modified domain
120
+ must be one of the control domains.
121
+
122
+Start Interpretive Execution (SIE) Instruction
123
+==============================================
124
+A KVM guest is started by executing the Start Interpretive Execution (SIE)
125
+instruction. The SIE state description is a control block that contains the
126
+state information for a KVM guest and is supplied as input to the SIE
127
+instruction. The SIE state description contains a satellite control block called
128
+the Crypto Control Block (CRYCB). The CRYCB contains three fields to identify
129
+the adapters, usage domains and control domains assigned to the KVM guest:
130
+
131
+* The AP Mask (APM) field is a bit mask that identifies the AP adapters assigned
132
+ to the KVM guest. Each bit in the mask, from left to right, corresponds to
133
+ an APID from 0-255. If a bit is set, the corresponding adapter is valid for
134
+ use by the KVM guest.
135
+
136
+* The AP Queue Mask (AQM) field is a bit mask identifying the AP usage domains
137
+ assigned to the KVM guest. Each bit in the mask, from left to right,
138
+ corresponds to an AP queue index (APQI) from 0-255. If a bit is set, the
139
+ corresponding queue is valid for use by the KVM guest.
140
+
141
+* The AP Domain Mask field is a bit mask that identifies the AP control domains
142
+ assigned to the KVM guest. The ADM bit mask controls which domains can be
143
+ changed by an AP command-request message sent to a usage domain from the
144
+ guest. Each bit in the mask, from left to right, corresponds to a domain from
145
+ 0-255. If a bit is set, the corresponding domain can be modified by an AP
146
+ command-request message sent to a usage domain.
147
+
148
+If you recall from the description of an AP Queue, AP instructions include
149
+an APQN to identify the AP adapter and AP queue to which an AP command-request
150
+message is to be sent (NQAP and PQAP instructions), or from which a
151
+command-reply message is to be received (DQAP instruction). The validity of an
152
+APQN is defined by the matrix calculated from the APM and AQM; it is the
153
+cross product of all assigned adapter numbers (APM) with all assigned queue
154
+indexes (AQM). For example, if adapters 1 and 2 and usage domains 5 and 6 are
155
+assigned to a guest, the APQNs (1,5), (1,6), (2,5) and (2,6) will be valid for
156
+the guest.
157
+
158
+The APQNs can provide secure key functionality - i.e., a private key is stored
159
+on the adapter card for each of its domains - so each APQN must be assigned to
160
+at most one guest or the linux host.
161
+
162
+ Example 1: Valid configuration:
163
+ ------------------------------
164
+ Guest1: adapters 1,2 domains 5,6
165
+ Guest2: adapter 1,2 domain 7
166
+
167
+ This is valid because both guests have a unique set of APQNs: Guest1 has
168
+ APQNs (1,5), (1,6), (2,5) and (2,6); Guest2 has APQNs (1,7) and (2,7).
169
+
170
+ Example 2: Valid configuration:
171
+ ------------------------------
172
+ Guest1: adapters 1,2 domains 5,6
173
+ Guest2: adapters 3,4 domains 5,6
174
+
175
+ This is also valid because both guests have a unique set of APQNs:
176
+ Guest1 has APQNs (1,5), (1,6), (2,5), (2,6);
177
+ Guest2 has APQNs (3,5), (3,6), (4,5), (4,6)
178
+
179
+ Example 3: Invalid configuration:
180
+ --------------------------------
181
+ Guest1: adapters 1,2 domains 5,6
182
+ Guest2: adapter 1 domains 6,7
183
+
184
+ This is an invalid configuration because both guests have access to
185
+ APQN (1,6).
186
+
187
+AP Matrix Configuration on Linux Host:
188
+=====================================
189
+A linux system is a guest of the LPAR in which it is running and has access to
190
+the AP resources configured for the LPAR. The LPAR's AP matrix is
191
+configured via its Activation Profile which can be edited on the HMC. When the
192
+linux system is started, the AP bus will detect the AP devices assigned to the
193
+LPAR and create the following in sysfs:
194
+
195
+/sys/bus/ap
196
+... [devices]
197
+...... xx.yyyy
198
+...... ...
199
+...... cardxx
200
+...... ...
201
+
202
+Where:
203
+ cardxx is AP adapter number xx (in hex)
204
+....xx.yyyy is an APQN with xx specifying the APID and yyyy specifying the
205
+ APQI
206
+
207
+For example, if AP adapters 5 and 6 and domains 4, 71 (0x47), 171 (0xab) and
208
+255 (0xff) are configured for the LPAR, the sysfs representation on the linux
209
+host system would look like this:
210
+
211
+/sys/bus/ap
212
+... [devices]
213
+...... 05.0004
214
+...... 05.0047
215
+...... 05.00ab
216
+...... 05.00ff
217
+...... 06.0004
218
+...... 06.0047
219
+...... 06.00ab
220
+...... 06.00ff
221
+...... card05
222
+...... card06
223
+
224
+A set of default device drivers are also created to control each type of AP
225
+device that can be assigned to the LPAR on which a linux host is running:
226
+
227
+/sys/bus/ap
228
+... [drivers]
229
+...... [cex2acard] for Crypto Express 2/3 accelerator cards
230
+...... [cex2aqueue] for AP queues served by Crypto Express 2/3
231
+ accelerator cards
232
+...... [cex4card] for Crypto Express 4/5/6 accelerator and coprocessor
233
+ cards
234
+...... [cex4queue] for AP queues served by Crypto Express 4/5/6
235
+ accelerator and coprocessor cards
236
+...... [pcixcccard] for Crypto Express 2/3 coprocessor cards
237
+...... [pcixccqueue] for AP queues served by Crypto Express 2/3
238
+ coprocessor cards
239
+
240
+Binding AP devices to device drivers
241
+------------------------------------
242
+There are two sysfs files that specify bitmasks marking a subset of the APQN
243
+range as 'usable by the default AP queue device drivers' or 'not usable by the
244
+default device drivers' and thus available for use by the alternate device
245
+driver(s). The sysfs locations of the masks are:
246
+
247
+ /sys/bus/ap/apmask
248
+ /sys/bus/ap/aqmask
249
+
250
+ The 'apmask' is a 256-bit mask that identifies a set of AP adapter IDs
251
+ (APID). Each bit in the mask, from left to right (i.e., from most significant
252
+ to least significant bit in big endian order), corresponds to an APID from
253
+ 0-255. If a bit is set, the APID is marked as usable only by the default AP
254
+ queue device drivers; otherwise, the APID is usable by the vfio_ap
255
+ device driver.
256
+
257
+ The 'aqmask' is a 256-bit mask that identifies a set of AP queue indexes
258
+ (APQI). Each bit in the mask, from left to right (i.e., from most significant
259
+ to least significant bit in big endian order), corresponds to an APQI from
260
+ 0-255. If a bit is set, the APQI is marked as usable only by the default AP
261
+ queue device drivers; otherwise, the APQI is usable by the vfio_ap device
262
+ driver.
263
+
264
+ Take, for example, the following mask:
265
+
266
+ 0x7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
267
+
268
+ It indicates:
269
+
270
+ 1, 2, 3, 4, 5, and 7-255 belong to the default drivers' pool, and 0 and 6
271
+ belong to the vfio_ap device driver's pool.
272
+
273
+ The APQN of each AP queue device assigned to the linux host is checked by the
274
+ AP bus against the set of APQNs derived from the cross product of APIDs
275
+ and APQIs marked as usable only by the default AP queue device drivers. If a
276
+ match is detected, only the default AP queue device drivers will be probed;
277
+ otherwise, the vfio_ap device driver will be probed.
278
+
279
+ By default, the two masks are set to reserve all APQNs for use by the default
280
+ AP queue device drivers. There are two ways the default masks can be changed:
281
+
282
+ 1. The sysfs mask files can be edited by echoing a string into the
283
+ respective sysfs mask file in one of two formats:
284
+
285
+ * An absolute hex string starting with 0x - like "0x12345678" - sets
286
+ the mask. If the given string is shorter than the mask, it is padded
287
+ with 0s on the right; for example, specifying a mask value of 0x41 is
288
+ the same as specifying:
289
+
290
+ 0x4100000000000000000000000000000000000000000000000000000000000000
291
+
292
+ Keep in mind that the mask reads from left to right (i.e., most
293
+ significant to least significant bit in big endian order), so the mask
294
+ above identifies device numbers 1 and 7 (01000001).
295
+
296
+ If the string is longer than the mask, the operation is terminated with
297
+ an error (EINVAL).
298
+
299
+ * Individual bits in the mask can be switched on and off by specifying
300
+ each bit number to be switched in a comma separated list. Each bit
301
+ number string must be prepended with a ('+') or minus ('-') to indicate
302
+ the corresponding bit is to be switched on ('+') or off ('-'). Some
303
+ valid values are:
304
+
305
+ "+0" switches bit 0 on
306
+ "-13" switches bit 13 off
307
+ "+0x41" switches bit 65 on
308
+ "-0xff" switches bit 255 off
309
+
310
+ The following example:
311
+ +0,-6,+0x47,-0xf0
312
+
313
+ Switches bits 0 and 71 (0x47) on
314
+ Switches bits 6 and 240 (0xf0) off
315
+
316
+ Note that the bits not specified in the list remain as they were before
317
+ the operation.
318
+
319
+ 2. The masks can also be changed at boot time via parameters on the kernel
320
+ command line like this:
321
+
322
+ ap.apmask=0xffff ap.aqmask=0x40
323
+
324
+ This would create the following masks:
325
+
326
+ apmask:
327
+ 0xffff000000000000000000000000000000000000000000000000000000000000
328
+
329
+ aqmask:
330
+ 0x4000000000000000000000000000000000000000000000000000000000000000
331
+
332
+ Resulting in these two pools:
333
+
334
+ default drivers pool: adapter 0-15, domain 1
335
+ alternate drivers pool: adapter 16-255, domains 0, 2-255
336
+
337
+Configuring an AP matrix for a linux guest.
338
+------------------------------------------
339
+The sysfs interfaces for configuring an AP matrix for a guest are built on the
340
+VFIO mediated device framework. To configure an AP matrix for a guest, a
341
+mediated matrix device must first be created for the /sys/devices/vfio_ap/matrix
342
+device. When the vfio_ap device driver is loaded, it registers with the VFIO
343
+mediated device framework. When the driver registers, the sysfs interfaces for
344
+creating mediated matrix devices is created:
345
+
346
+/sys/devices
347
+... [vfio_ap]
348
+......[matrix]
349
+......... [mdev_supported_types]
350
+............ [vfio_ap-passthrough]
351
+............... create
352
+............... [devices]
353
+
354
+A mediated AP matrix device is created by writing a UUID to the attribute file
355
+named 'create', for example:
356
+
357
+ uuidgen > create
358
+
359
+ or
360
+
361
+ echo $uuid > create
362
+
363
+When a mediated AP matrix device is created, a sysfs directory named after
364
+the UUID is created in the 'devices' subdirectory:
365
+
366
+/sys/devices
367
+... [vfio_ap]
368
+......[matrix]
369
+......... [mdev_supported_types]
370
+............ [vfio_ap-passthrough]
371
+............... create
372
+............... [devices]
373
+.................. [$uuid]
374
+
375
+There will also be three sets of attribute files created in the mediated
376
+matrix device's sysfs directory to configure an AP matrix for the
377
+KVM guest:
378
+
379
+/sys/devices
380
+... [vfio_ap]
381
+......[matrix]
382
+......... [mdev_supported_types]
383
+............ [vfio_ap-passthrough]
384
+............... create
385
+............... [devices]
386
+.................. [$uuid]
387
+..................... assign_adapter
388
+..................... assign_control_domain
389
+..................... assign_domain
390
+..................... matrix
391
+..................... unassign_adapter
392
+..................... unassign_control_domain
393
+..................... unassign_domain
394
+
395
+assign_adapter
396
+ To assign an AP adapter to the mediated matrix device, its APID is written
397
+ to the 'assign_adapter' file. This may be done multiple times to assign more
398
+ than one adapter. The APID may be specified using conventional semantics
399
+ as a decimal, hexadecimal, or octal number. For example, to assign adapters
400
+ 4, 5 and 16 to a mediated matrix device in decimal, hexadecimal and octal
401
+ respectively:
402
+
403
+ echo 4 > assign_adapter
404
+ echo 0x5 > assign_adapter
405
+ echo 020 > assign_adapter
406
+
407
+ In order to successfully assign an adapter:
408
+
409
+ * The adapter number specified must represent a value from 0 up to the
410
+ maximum adapter number allowed by the machine model. If an adapter number
411
+ higher than the maximum is specified, the operation will terminate with
412
+ an error (ENODEV).
413
+
414
+ * All APQNs that can be derived from the adapter ID being assigned and the
415
+ IDs of the previously assigned domains must be bound to the vfio_ap device
416
+ driver. If no domains have yet been assigned, then there must be at least
417
+ one APQN with the specified APID bound to the vfio_ap driver. If no such
418
+ APQNs are bound to the driver, the operation will terminate with an
419
+ error (EADDRNOTAVAIL).
420
+
421
+ No APQN that can be derived from the adapter ID and the IDs of the
422
+ previously assigned domains can be assigned to another mediated matrix
423
+ device. If an APQN is assigned to another mediated matrix device, the
424
+ operation will terminate with an error (EADDRINUSE).
425
+
426
+unassign_adapter
427
+ To unassign an AP adapter, its APID is written to the 'unassign_adapter'
428
+ file. This may also be done multiple times to unassign more than one adapter.
429
+
430
+assign_domain
431
+ To assign a usage domain, the domain number is written into the
432
+ 'assign_domain' file. This may be done multiple times to assign more than one
433
+ usage domain. The domain number is specified using conventional semantics as
434
+ a decimal, hexadecimal, or octal number. For example, to assign usage domains
435
+ 4, 8, and 71 to a mediated matrix device in decimal, hexadecimal and octal
436
+ respectively:
437
+
438
+ echo 4 > assign_domain
439
+ echo 0x8 > assign_domain
440
+ echo 0107 > assign_domain
441
+
442
+ In order to successfully assign a domain:
443
+
444
+ * The domain number specified must represent a value from 0 up to the
445
+ maximum domain number allowed by the machine model. If a domain number
446
+ higher than the maximum is specified, the operation will terminate with
447
+ an error (ENODEV).
448
+
449
+ * All APQNs that can be derived from the domain ID being assigned and the IDs
450
+ of the previously assigned adapters must be bound to the vfio_ap device
451
+ driver. If no domains have yet been assigned, then there must be at least
452
+ one APQN with the specified APQI bound to the vfio_ap driver. If no such
453
+ APQNs are bound to the driver, the operation will terminate with an
454
+ error (EADDRNOTAVAIL).
455
+
456
+ No APQN that can be derived from the domain ID being assigned and the IDs
457
+ of the previously assigned adapters can be assigned to another mediated
458
+ matrix device. If an APQN is assigned to another mediated matrix device,
459
+ the operation will terminate with an error (EADDRINUSE).
460
+
461
+unassign_domain
462
+ To unassign a usage domain, the domain number is written into the
463
+ 'unassign_domain' file. This may be done multiple times to unassign more than
464
+ one usage domain.
465
+
466
+assign_control_domain
467
+ To assign a control domain, the domain number is written into the
468
+ 'assign_control_domain' file. This may be done multiple times to
469
+ assign more than one control domain. The domain number may be specified using
470
+ conventional semantics as a decimal, hexadecimal, or octal number. For
471
+ example, to assign control domains 4, 8, and 71 to a mediated matrix device
472
+ in decimal, hexadecimal and octal respectively:
473
+
474
+ echo 4 > assign_domain
475
+ echo 0x8 > assign_domain
476
+ echo 0107 > assign_domain
477
+
478
+ In order to successfully assign a control domain, the domain number
479
+ specified must represent a value from 0 up to the maximum domain number
480
+ allowed by the machine model. If a control domain number higher than the
481
+ maximum is specified, the operation will terminate with an error (ENODEV).
482
+
483
+unassign_control_domain
484
+ To unassign a control domain, the domain number is written into the
485
+ 'unassign_domain' file. This may be done multiple times to unassign more than
486
+ one control domain.
487
+
488
+Notes: Hot plug/unplug is not currently supported for mediated AP matrix
489
+devices, so no changes to the AP matrix will be allowed while a guest using
490
+the mediated matrix device is running. Attempts to assign an adapter,
491
+domain or control domain will be rejected and an error (EBUSY) returned.
492
+
493
+Starting a Linux Guest Configured with an AP Matrix:
494
+===================================================
495
+To provide a mediated matrix device for use by a guest, the following option
496
+must be specified on the QEMU command line:
497
+
498
+ -device vfio_ap,sysfsdev=$path-to-mdev
499
+
500
+The sysfsdev parameter specifies the path to the mediated matrix device.
501
+There are a number of ways to specify this path:
502
+
503
+/sys/devices/vfio_ap/matrix/$uuid
504
+/sys/bus/mdev/devices/$uuid
505
+/sys/bus/mdev/drivers/vfio_mdev/$uuid
506
+/sys/devices/vfio_ap/matrix/mdev_supported_types/vfio_ap-passthrough/devices/$uuid
507
+
508
+When the linux guest is started, the guest will open the mediated
509
+matrix device's file descriptor to get information about the mediated matrix
510
+device. The vfio_ap device driver will update the APM, AQM, and ADM fields in
511
+the guest's CRYCB with the adapter, usage domain and control domains assigned
512
+via the mediated matrix device's sysfs attribute files. Programs running on the
513
+linux guest will then:
514
+
515
+1. Have direct access to the APQNs derived from the cross product of the AP
516
+ adapter numbers (APID) and queue indexes (APQI) specified in the APM and AQM
517
+ fields of the guests's CRYCB respectively. These APQNs identify the AP queues
518
+ that are valid for use by the guest; meaning, AP commands can be sent by the
519
+ guest to any of these queues for processing.
520
+
521
+2. Have authorization to process AP commands to change a control domain
522
+ identified in the ADM field of the guest's CRYCB. The AP command must be sent
523
+ to a valid APQN (see 1 above).
524
+
525
+CPU model features:
526
+
527
+Three CPU model features are available for controlling guest access to AP
528
+facilities:
529
+
530
+1. AP facilities feature
531
+
532
+ The AP facilities feature indicates that AP facilities are installed on the
533
+ guest. This feature will be exposed for use only if the AP facilities
534
+ are installed on the host system. The feature is s390-specific and is
535
+ represented as a parameter of the -cpu option on the QEMU command line:
536
+
537
+ qemu-system-s390x -cpu $model,ap=on|off
538
+
539
+ Where:
540
+
541
+ $model is the CPU model defined for the guest (defaults to the model of
542
+ the host system if not specified).
543
+
544
+ ap=on|off indicates whether AP facilities are installed (on) or not
545
+ (off). The default for CPU models zEC12 or newer
546
+ is ap=on. AP facilities must be installed on the guest if a
547
+ vfio-ap device (-device vfio-ap,sysfsdev=$path) is configured
548
+ for the guest, or the guest will fail to start.
549
+
550
+2. Query Configuration Information (QCI) facility
551
+
552
+ The QCI facility is used by the AP bus running on the guest to query the
553
+ configuration of the AP facilities. This facility will be available
554
+ only if the QCI facility is installed on the host system. The feature is
555
+ s390-specific and is represented as a parameter of the -cpu option on the
556
+ QEMU command line:
557
+
558
+ qemu-system-s390x -cpu $model,apqci=on|off
559
+
560
+ Where:
561
+
562
+ $model is the CPU model defined for the guest
563
+
564
+ apqci=on|off indicates whether the QCI facility is installed (on) or
565
+ not (off). The default for CPU models zEC12 or newer
566
+ is apqci=on; for older models, QCI will not be installed.
567
+
568
+ If QCI is installed (apqci=on) but AP facilities are not
569
+ (ap=off), an error message will be logged, but the guest
570
+ will be allowed to start. It makes no sense to have QCI
571
+ installed if the AP facilities are not; this is considered
572
+ an invalid configuration.
573
+
574
+ If the QCI facility is not installed, APQNs with an APQI
575
+ greater than 15 will not be detected by the AP bus
576
+ running on the guest.
577
+
578
+3. Adjunct Process Facility Test (APFT) facility
579
+
580
+ The APFT facility is used by the AP bus running on the guest to test the
581
+ AP facilities available for a given AP queue. This facility will be available
582
+ only if the APFT facility is installed on the host system. The feature is
583
+ s390-specific and is represented as a parameter of the -cpu option on the
584
+ QEMU command line:
585
+
586
+ qemu-system-s390x -cpu $model,apft=on|off
587
+
588
+ Where:
589
+
590
+ $model is the CPU model defined for the guest (defaults to the model of
591
+ the host system if not specified).
592
+
593
+ apft=on|off indicates whether the APFT facility is installed (on) or
594
+ not (off). The default for CPU models zEC12 and
595
+ newer is apft=on for older models, APFT will not be
596
+ installed.
597
+
598
+ If APFT is installed (apft=on) but AP facilities are not
599
+ (ap=off), an error message will be logged, but the guest
600
+ will be allowed to start. It makes no sense to have APFT
601
+ installed if the AP facilities are not; this is considered
602
+ an invalid configuration.
603
+
604
+ It also makes no sense to turn APFT off because the AP bus
605
+ running on the guest will not detect CEX4 and newer devices
606
+ without it. Since only CEX4 and newer devices are supported
607
+ for guest usage, no AP devices can be made accessible to a
608
+ guest started without APFT installed.
609
+
610
+Example: Configure AP Matrixes for Three Linux Guests:
611
+=====================================================
612
+Let's now provide an example to illustrate how KVM guests may be given
613
+access to AP facilities. For this example, we will show how to configure
614
+three guests such that executing the lszcrypt command on the guests would
615
+look like this:
616
+
617
+Guest1
618
+------
619
+CARD.DOMAIN TYPE MODE
620
+------------------------------
621
+05 CEX5C CCA-Coproc
622
+05.0004 CEX5C CCA-Coproc
623
+05.00ab CEX5C CCA-Coproc
624
+06 CEX5A Accelerator
625
+06.0004 CEX5A Accelerator
626
+06.00ab CEX5C CCA-Coproc
627
+
628
+Guest2
629
+------
630
+CARD.DOMAIN TYPE MODE
631
+------------------------------
632
+05 CEX5A Accelerator
633
+05.0047 CEX5A Accelerator
634
+05.00ff CEX5A Accelerator (5,4), (5,171), (6,4), (6,171),
635
+
636
+Guest3
637
+------
638
+CARD.DOMAIN TYPE MODE
639
+------------------------------
640
+06 CEX5A Accelerator
641
+06.0047 CEX5A Accelerator
642
+06.00ff CEX5A Accelerator
643
+
644
+These are the steps:
645
+
646
+1. Install the vfio_ap module on the linux host. The dependency chain for the
647
+ vfio_ap module is:
648
+ * iommu
649
+ * s390
650
+ * zcrypt
651
+ * vfio
652
+ * vfio_mdev
653
+ * vfio_mdev_device
654
+ * KVM
655
+
656
+ To build the vfio_ap module, the kernel build must be configured with the
657
+ following Kconfig elements selected:
658
+ * IOMMU_SUPPORT
659
+ * S390
660
+ * ZCRYPT
661
+ * S390_AP_IOMMU
662
+ * VFIO
663
+ * VFIO_MDEV
664
+ * VFIO_MDEV_DEVICE
665
+ * KVM
666
+
667
+ If using make menuconfig select the following to build the vfio_ap module:
668
+ -> Device Drivers
669
+ -> IOMMU Hardware Support
670
+ select S390 AP IOMMU Support
671
+ -> VFIO Non-Privileged userspace driver framework
672
+ -> Mediated device driver frramework
673
+ -> VFIO driver for Mediated devices
674
+ -> I/O subsystem
675
+ -> VFIO support for AP devices
676
+
677
+2. Secure the AP queues to be used by the three guests so that the host can not
678
+ access them. To secure the AP queues 05.0004, 05.0047, 05.00ab, 05.00ff,
679
+ 06.0004, 06.0047, 06.00ab, and 06.00ff for use by the vfio_ap device driver,
680
+ the corresponding APQNs must be removed from the default queue drivers pool
681
+ as follows:
682
+
683
+ echo -5,-6 > /sys/bus/ap/apmask
684
+
685
+ echo -4,-0x47,-0xab,-0xff > /sys/bus/ap/aqmask
686
+
687
+ This will result in AP queues 05.0004, 05.0047, 05.00ab, 05.00ff, 06.0004,
688
+ 06.0047, 06.00ab, and 06.00ff getting bound to the vfio_ap device driver. The
689
+ sysfs directory for the vfio_ap device driver will now contain symbolic links
690
+ to the AP queue devices bound to it:
691
+
692
+ /sys/bus/ap
693
+ ... [drivers]
694
+ ...... [vfio_ap]
695
+ ......... [05.0004]
696
+ ......... [05.0047]
697
+ ......... [05.00ab]
698
+ ......... [05.00ff]
699
+ ......... [06.0004]
700
+ ......... [06.0047]
701
+ ......... [06.00ab]
702
+ ......... [06.00ff]
703
+
704
+ Keep in mind that only type 10 and newer adapters (i.e., CEX4 and later)
705
+ can be bound to the vfio_ap device driver. The reason for this is to
706
+ simplify the implementation by not needlessly complicating the design by
707
+ supporting older devices that will go out of service in the relatively near
708
+ future, and for which there are few older systems on which to test.
709
+
710
+ The administrator, therefore, must take care to secure only AP queues that
711
+ can be bound to the vfio_ap device driver. The device type for a given AP
712
+ queue device can be read from the parent card's sysfs directory. For example,
713
+ to see the hardware type of the queue 05.0004:
714
+
715
+ cat /sys/bus/ap/devices/card05/hwtype
716
+
717
+ The hwtype must be 10 or higher (CEX4 or newer) in order to be bound to the
718
+ vfio_ap device driver.
719
+
720
+3. Create the mediated devices needed to configure the AP matrixes for the
721
+ three guests and to provide an interface to the vfio_ap driver for
722
+ use by the guests:
723
+
724
+ /sys/devices/vfio_ap/matrix/
725
+ --- [mdev_supported_types]
726
+ ------ [vfio_ap-passthrough] (passthrough mediated matrix device type)
727
+ --------- create
728
+ --------- [devices]
729
+
730
+ To create the mediated devices for the three guests:
731
+
732
+ uuidgen > create
733
+ uuidgen > create
734
+ uuidgen > create
735
+
736
+ or
737
+
738
+ echo $uuid1 > create
739
+ echo $uuid2 > create
740
+ echo $uuid3 > create
741
+
742
+ This will create three mediated devices in the [devices] subdirectory named
743
+ after the UUID used to create the mediated device. We'll call them $uuid1,
744
+ $uuid2 and $uuid3 and this is the sysfs directory structure after creation:
745
+
746
+ /sys/devices/vfio_ap/matrix/
747
+ --- [mdev_supported_types]
748
+ ------ [vfio_ap-passthrough]
749
+ --------- [devices]
750
+ ------------ [$uuid1]
751
+ --------------- assign_adapter
752
+ --------------- assign_control_domain
753
+ --------------- assign_domain
754
+ --------------- matrix
755
+ --------------- unassign_adapter
756
+ --------------- unassign_control_domain
757
+ --------------- unassign_domain
758
+
759
+ ------------ [$uuid2]
760
+ --------------- assign_adapter
761
+ --------------- assign_control_domain
762
+ --------------- assign_domain
763
+ --------------- matrix
764
+ --------------- unassign_adapter
765
+ ----------------unassign_control_domain
766
+ ----------------unassign_domain
767
+
768
+ ------------ [$uuid3]
769
+ --------------- assign_adapter
770
+ --------------- assign_control_domain
771
+ --------------- assign_domain
772
+ --------------- matrix
773
+ --------------- unassign_adapter
774
+ ----------------unassign_control_domain
775
+ ----------------unassign_domain
776
+
777
+4. The administrator now needs to configure the matrixes for the mediated
778
+ devices $uuid1 (for Guest1), $uuid2 (for Guest2) and $uuid3 (for Guest3).
779
+
780
+ This is how the matrix is configured for Guest1:
781
+
782
+ echo 5 > assign_adapter
783
+ echo 6 > assign_adapter
784
+ echo 4 > assign_domain
785
+ echo 0xab > assign_domain
786
+
787
+ Control domains can similarly be assigned using the assign_control_domain
788
+ sysfs file.
789
+
790
+ If a mistake is made configuring an adapter, domain or control domain,
791
+ you can use the unassign_xxx interfaces to unassign the adapter, domain or
792
+ control domain.
793
+
794
+ To display the matrix configuration for Guest1:
795
+
796
+ cat matrix
797
+
798
+ The output will display the APQNs in the format xx.yyyy, where xx is
799
+ the adapter number and yyyy is the domain number. The output for Guest1
800
+ will look like this:
801
+
802
+ 05.0004
803
+ 05.00ab
804
+ 06.0004
805
+ 06.00ab
806
+
807
+ This is how the matrix is configured for Guest2:
808
+
809
+ echo 5 > assign_adapter
810
+ echo 0x47 > assign_domain
811
+ echo 0xff > assign_domain
812
+
813
+ This is how the matrix is configured for Guest3:
814
+
815
+ echo 6 > assign_adapter
816
+ echo 0x47 > assign_domain
817
+ echo 0xff > assign_domain
818
+
819
+5. Start Guest1:
820
+
821
+ /usr/bin/qemu-system-s390x ... -cpu host,ap=on,apqci=on,apft=on \
822
+ -device vfio-ap,sysfsdev=/sys/devices/vfio_ap/matrix/$uuid1 ...
823
+
824
+7. Start Guest2:
825
+
826
+ /usr/bin/qemu-system-s390x ... -cpu host,ap=on,apqci=on,apft=on \
827
+ -device vfio-ap,sysfsdev=/sys/devices/vfio_ap/matrix/$uuid2 ...
828
+
829
+7. Start Guest3:
830
+
831
+ /usr/bin/qemu-system-s390x ... -cpu host,ap=on,apqci=on,apft=on \
832
+ -device vfio-ap,sysfsdev=/sys/devices/vfio_ap/matrix/$uuid3 ...
833
+
834
+When the guest is shut down, the mediated matrix devices may be removed.
835
+
836
+Using our example again, to remove the mediated matrix device $uuid1:
837
+
838
+ /sys/devices/vfio_ap/matrix/
839
+ --- [mdev_supported_types]
840
+ ------ [vfio_ap-passthrough]
841
+ --------- [devices]
842
+ ------------ [$uuid1]
843
+ --------------- remove
844
+
845
+
846
+ echo 1 > remove
847
+
848
+ This will remove all of the mdev matrix device's sysfs structures including
849
+ the mdev device itself. To recreate and reconfigure the mdev matrix device,
850
+ all of the steps starting with step 3 will have to be performed again. Note
851
+ that the remove will fail if a guest using the mdev is still running.
852
+
853
+ It is not necessary to remove an mdev matrix device, but one may want to
854
+ remove it if no guest will use it during the remaining lifetime of the linux
855
+ host. If the mdev matrix device is removed, one may want to also reconfigure
856
+ the pool of adapters and queues reserved for use by the default drivers.
857
+
858
+Limitations
859
+===========
860
+* The KVM/kernel interfaces do not provide a way to prevent restoring an APQN
861
+ to the default drivers pool of a queue that is still assigned to a mediated
862
+ device in use by a guest. It is incumbent upon the administrator to
863
+ ensure there is no mediated device in use by a guest to which the APQN is
864
+ assigned lest the host be given access to the private data of the AP queue
865
+ device, such as a private key configured specifically for the guest.
866
+
867
+* Dynamically modifying the AP matrix for a running guest (which would amount to
868
+ hot(un)plug of AP devices for the guest) is currently not supported
869
+
870
+* Live guest migration is not supported for guests using AP devices.
871
--
52
--
872
2.14.4
53
2.31.1
873
874
diff view generated by jsdifflib
1
From: Thomas Huth <thuth@redhat.com>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
Debug macros that are disabled by default should be avoided (since the
3
There is nothing to distinguish this from DISAS_TOO_MANY.
4
code bit-rots quite easily). Thus turn these debug prints into proper
5
qemu_log_mask(CPU_LOG_xxx, ...) statements instead. The DPRINTF statements
6
in do_[ext|io|mchk]_interrupt can even be removed completely since we can
7
log the information in a central place, s390_cpu_do_interrupt, instead.
8
4
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
Message-Id: <20220702060228.420454-3-richard.henderson@linaro.org>
9
Signed-off-by: Thomas Huth <thuth@redhat.com>
7
Signed-off-by: Thomas Huth <thuth@redhat.com>
10
Message-Id: <1538751601-7433-1-git-send-email-thuth@redhat.com>
11
Reviewed-by: David Hildenbrand <david@redhat.com>
12
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
13
---
8
---
14
target/s390x/excp_helper.c | 48 +++++++++++-----------------------------------
9
target/s390x/tcg/translate.c | 13 ++++---------
15
1 file changed, 11 insertions(+), 37 deletions(-)
10
1 file changed, 4 insertions(+), 9 deletions(-)
16
11
17
diff --git a/target/s390x/excp_helper.c b/target/s390x/excp_helper.c
12
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
18
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
19
--- a/target/s390x/excp_helper.c
14
--- a/target/s390x/tcg/translate.c
20
+++ b/target/s390x/excp_helper.c
15
+++ b/target/s390x/tcg/translate.c
21
@@ -XXX,XX +XXX,XX @@
16
@@ -XXX,XX +XXX,XX @@ typedef struct {
22
#include "hw/s390x/s390_flic.h"
17
/* We have updated the PC and CC values. */
18
#define DISAS_PC_CC_UPDATED DISAS_TARGET_2
19
20
-/* We are exiting the TB, but have neither emitted a goto_tb, nor
21
- updated the PC for the next instruction to be executed. */
22
-#define DISAS_PC_STALE DISAS_TARGET_3
23
-
24
/* We are exiting the TB to the main loop. */
25
#define DISAS_PC_STALE_NOCHAIN DISAS_TARGET_4
26
27
@@ -XXX,XX +XXX,XX @@ static DisasJumpType op_sacf(DisasContext *s, DisasOps *o)
28
{
29
gen_helper_sacf(cpu_env, o->in2);
30
/* Addressing mode has changed, so end the block. */
31
- return DISAS_PC_STALE;
32
+ return DISAS_TOO_MANY;
33
}
23
#endif
34
#endif
24
35
25
-/* #define DEBUG_S390 */
36
@@ -XXX,XX +XXX,XX @@ static DisasJumpType op_sam(DisasContext *s, DisasOps *o)
26
-/* #define DEBUG_S390_STDOUT */
37
tcg_temp_free_i64(tsam);
27
-
38
28
-#ifdef DEBUG_S390
39
/* Always exit the TB, since we (may have) changed execution mode. */
29
-#ifdef DEBUG_S390_STDOUT
40
- return DISAS_PC_STALE;
30
-#define DPRINTF(fmt, ...) \
41
+ return DISAS_TOO_MANY;
31
- do { fprintf(stderr, fmt, ## __VA_ARGS__); \
42
}
32
- if (qemu_log_separate()) { qemu_log(fmt, ##__VA_ARGS__); } } while (0)
43
33
-#else
44
static DisasJumpType op_sar(DisasContext *s, DisasOps *o)
34
-#define DPRINTF(fmt, ...) \
45
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(CPUS390XState *env, DisasContext *s)
35
- do { qemu_log(fmt, ## __VA_ARGS__); } while (0)
46
36
-#endif
47
/* io should be the last instruction in tb when icount is enabled */
37
-#else
48
if (unlikely(icount && ret == DISAS_NEXT)) {
38
-#define DPRINTF(fmt, ...) \
49
- ret = DISAS_PC_STALE;
39
- do { } while (0)
50
+ ret = DISAS_TOO_MANY;
40
-#endif
41
-
42
void QEMU_NORETURN tcg_s390_program_interrupt(CPUS390XState *env, uint32_t code,
43
int ilen, uintptr_t ra)
44
{
45
@@ -XXX,XX +XXX,XX @@ int s390_cpu_handle_mmu_fault(CPUState *cs, vaddr orig_vaddr, int size,
46
uint64_t asc;
47
int prot;
48
49
- DPRINTF("%s: address 0x%" VADDR_PRIx " rw %d mmu_idx %d\n",
50
- __func__, orig_vaddr, rw, mmu_idx);
51
+ qemu_log_mask(CPU_LOG_MMU, "%s: addr 0x%" VADDR_PRIx " rw %d mmu_idx %d\n",
52
+ __func__, orig_vaddr, rw, mmu_idx);
53
54
vaddr = orig_vaddr;
55
56
@@ -XXX,XX +XXX,XX @@ int s390_cpu_handle_mmu_fault(CPUState *cs, vaddr orig_vaddr, int size,
57
if (!address_space_access_valid(&address_space_memory, raddr,
58
TARGET_PAGE_SIZE, rw,
59
MEMTXATTRS_UNSPECIFIED)) {
60
- DPRINTF("%s: raddr %" PRIx64 " > ram_size %" PRIx64 "\n", __func__,
61
- (uint64_t)raddr, (uint64_t)ram_size);
62
+ qemu_log_mask(CPU_LOG_MMU,
63
+ "%s: raddr %" PRIx64 " > ram_size %" PRIx64 "\n",
64
+ __func__, (uint64_t)raddr, (uint64_t)ram_size);
65
trigger_pgm_exception(env, PGM_ADDRESSING, ILEN_AUTO);
66
return 1;
67
}
51
}
68
@@ -XXX,XX +XXX,XX @@ static void do_program_interrupt(CPUS390XState *env)
52
53
#ifndef CONFIG_USER_ONLY
54
if (s->base.tb->flags & FLAG_MASK_PER) {
55
/* An exception might be triggered, save PSW if not already done. */
56
- if (ret == DISAS_NEXT || ret == DISAS_PC_STALE) {
57
+ if (ret == DISAS_NEXT || ret == DISAS_TOO_MANY) {
58
tcg_gen_movi_i64(psw_addr, s->pc_tmp);
59
}
60
61
@@ -XXX,XX +XXX,XX @@ static void s390x_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
62
case DISAS_NORETURN:
69
break;
63
break;
70
}
64
case DISAS_TOO_MANY:
71
65
- case DISAS_PC_STALE:
72
- qemu_log_mask(CPU_LOG_INT, "%s: code=0x%x ilen=%d\n",
66
case DISAS_PC_STALE_NOCHAIN:
73
- __func__, env->int_pgm_code, ilen);
67
update_psw_addr(dc);
74
+ qemu_log_mask(CPU_LOG_INT,
68
/* FALLTHRU */
75
+ "%s: code=0x%x ilen=%d psw: %" PRIx64 " %" PRIx64 "\n",
76
+ __func__, env->int_pgm_code, ilen, env->psw.mask,
77
+ env->psw.addr);
78
79
lowcore = cpu_map_lowcore(env);
80
81
@@ -XXX,XX +XXX,XX @@ static void do_program_interrupt(CPUS390XState *env)
82
83
cpu_unmap_lowcore(lowcore);
84
85
- DPRINTF("%s: %x %x %" PRIx64 " %" PRIx64 "\n", __func__,
86
- env->int_pgm_code, ilen, env->psw.mask,
87
- env->psw.addr);
88
-
89
load_psw(env, mask, addr);
90
}
91
92
@@ -XXX,XX +XXX,XX @@ static void do_ext_interrupt(CPUS390XState *env)
93
94
cpu_unmap_lowcore(lowcore);
95
96
- DPRINTF("%s: %" PRIx64 " %" PRIx64 "\n", __func__,
97
- env->psw.mask, env->psw.addr);
98
-
99
load_psw(env, mask, addr);
100
}
101
102
@@ -XXX,XX +XXX,XX @@ static void do_io_interrupt(CPUS390XState *env)
103
cpu_unmap_lowcore(lowcore);
104
g_free(io);
105
106
- DPRINTF("%s: %" PRIx64 " %" PRIx64 "\n", __func__, env->psw.mask,
107
- env->psw.addr);
108
load_psw(env, mask, addr);
109
}
110
111
@@ -XXX,XX +XXX,XX @@ static void do_mchk_interrupt(CPUS390XState *env)
112
113
cpu_unmap_lowcore(lowcore);
114
115
- DPRINTF("%s: %" PRIx64 " %" PRIx64 "\n", __func__,
116
- env->psw.mask, env->psw.addr);
117
-
118
load_psw(env, mask, addr);
119
}
120
121
@@ -XXX,XX +XXX,XX @@ void s390_cpu_do_interrupt(CPUState *cs)
122
CPUS390XState *env = &cpu->env;
123
bool stopped = false;
124
125
- qemu_log_mask(CPU_LOG_INT, "%s: %d at pc=%" PRIx64 "\n",
126
- __func__, cs->exception_index, env->psw.addr);
127
+ qemu_log_mask(CPU_LOG_INT, "%s: %d at psw=%" PRIx64 ":%" PRIx64 "\n",
128
+ __func__, cs->exception_index, env->psw.mask, env->psw.addr);
129
130
try_deliver:
131
/* handle machine checks */
132
--
69
--
133
2.14.4
70
2.31.1
134
135
diff view generated by jsdifflib
1
From: Tony Krowiak <akrowiak@linux.ibm.com>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
A new CPU model feature and two new CPU model facilities are
3
Replace this with a flag: exit_to_mainloop.
4
introduced to support AP devices for a KVM guest.
4
We can now control the exit for each of DISAS_TOO_MANY,
5
DISAS_PC_UPDATED, and DISAS_PC_CC_UPDATED, and fold in
6
the check for PER.
5
7
6
CPU model features:
8
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
9
Message-Id: <20220702060228.420454-4-richard.henderson@linaro.org>
10
Signed-off-by: Thomas Huth <thuth@redhat.com>
11
---
12
target/s390x/tcg/translate.c | 21 +++++++++++----------
13
1 file changed, 11 insertions(+), 10 deletions(-)
7
14
8
1. The S390_FEAT_AP CPU model feature indicates whether AP
15
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
9
instructions are available to the guest. This feature will
10
be enabled only if the AP instructions are available on the
11
linux host as determined by the availability of the
12
KVM_S390_VM_CRYPTO_ENABLE_APIE VM attribute which is exposed
13
by KVM only if the AP instructions are available on the
14
host.
15
16
This feature must be turned on from userspace to execute AP
17
instructions on the KVM guest. The QEMU command line to turn
18
this feature on looks something like this:
19
20
    qemu-system-s390x ... -cpu xxx,ap=on ...
21
22
This feature will be supported for zEC12 and newer CPU models.
23
The feature will not be supported for older models because
24
there are few older systems on which to test and the older
25
crypto cards will be going out of service in the relatively
26
near future.
27
28
CPU model facilities:
29
30
1. The S390_FEAT_AP_QUERY_CONFIG_INFO feature indicates whether the
31
AP Query Configuration Information (QCI) facility is available
32
to the guest as determined by whether the facility is available
33
on the host. This feature will be exposed by KVM only if the
34
QCI facility is installed on the host.
35
36
2. The S390_FEAT_AP_FACILITY_TEST feature indicates whether the AP
37
Facility Test (APFT) facility is available to the guest as
38
determined by whether the facility is available on the host.
39
This feature will be exposed by KVM only if APFT is installed
40
on the host.
41
42
Signed-off-by: Tony Krowiak <akrowiak@linux.ibm.com>
43
Tested-by: Pierre Morel <pmorel@linux.ibm.com>
44
Reviewed-by: David Hildenbrand <david@redhat.com>
45
Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
46
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
47
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
48
Message-Id: <20181010170309.12045-3-akrowiak@linux.ibm.com>
49
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
50
---
51
target/s390x/cpu_features.c | 3 +++
52
target/s390x/cpu_features_def.h | 3 +++
53
target/s390x/cpu_models.c | 2 ++
54
target/s390x/gen-features.c | 3 +++
55
4 files changed, 11 insertions(+)
56
57
diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
58
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
59
--- a/target/s390x/cpu_features.c
17
--- a/target/s390x/tcg/translate.c
60
+++ b/target/s390x/cpu_features.c
18
+++ b/target/s390x/tcg/translate.c
61
@@ -XXX,XX +XXX,XX @@ static const S390FeatDef s390_features[] = {
19
@@ -XXX,XX +XXX,XX @@ struct DisasContext {
62
FEAT_INIT("srs", S390_FEAT_TYPE_STFL, 9, "Sense-running-status facility"),
20
uint64_t pc_tmp;
63
FEAT_INIT("csske", S390_FEAT_TYPE_STFL, 10, "Conditional-SSKE facility"),
21
uint32_t ilen;
64
FEAT_INIT("ctop", S390_FEAT_TYPE_STFL, 11, "Configuration-topology facility"),
22
enum cc_op cc_op;
65
+ FEAT_INIT("apqci", S390_FEAT_TYPE_STFL, 12, "Query AP Configuration Information facility"),
23
+ bool exit_to_mainloop;
66
FEAT_INIT("ipter", S390_FEAT_TYPE_STFL, 13, "IPTE-range facility"),
67
FEAT_INIT("nonqks", S390_FEAT_TYPE_STFL, 14, "Nonquiescing key-setting facility"),
68
+ FEAT_INIT("apft", S390_FEAT_TYPE_STFL, 15, "AP Facilities Test facility"),
69
FEAT_INIT("etf2", S390_FEAT_TYPE_STFL, 16, "Extended-translation facility 2"),
70
FEAT_INIT("msa-base", S390_FEAT_TYPE_STFL, 17, "Message-security-assist facility (excluding subfunctions)"),
71
FEAT_INIT("ldisp", S390_FEAT_TYPE_STFL, 18, "Long-displacement facility"),
72
@@ -XXX,XX +XXX,XX @@ static const S390FeatDef s390_features[] = {
73
74
FEAT_INIT_MISC("dateh2", "DAT-enhancement facility 2"),
75
FEAT_INIT_MISC("cmm", "Collaborative-memory-management facility"),
76
+ FEAT_INIT_MISC("ap", "AP instructions installed"),
77
78
FEAT_INIT("plo-cl", S390_FEAT_TYPE_PLO, 0, "PLO Compare and load (32 bit in general registers)"),
79
FEAT_INIT("plo-clg", S390_FEAT_TYPE_PLO, 1, "PLO Compare and load (64 bit in parameter list)"),
80
diff --git a/target/s390x/cpu_features_def.h b/target/s390x/cpu_features_def.h
81
index XXXXXXX..XXXXXXX 100644
82
--- a/target/s390x/cpu_features_def.h
83
+++ b/target/s390x/cpu_features_def.h
84
@@ -XXX,XX +XXX,XX @@ typedef enum {
85
S390_FEAT_SENSE_RUNNING_STATUS,
86
S390_FEAT_CONDITIONAL_SSKE,
87
S390_FEAT_CONFIGURATION_TOPOLOGY,
88
+ S390_FEAT_AP_QUERY_CONFIG_INFO,
89
S390_FEAT_IPTE_RANGE,
90
S390_FEAT_NONQ_KEY_SETTING,
91
+ S390_FEAT_AP_FACILITIES_TEST,
92
S390_FEAT_EXTENDED_TRANSLATION_2,
93
S390_FEAT_MSA,
94
S390_FEAT_LONG_DISPLACEMENT,
95
@@ -XXX,XX +XXX,XX @@ typedef enum {
96
/* Misc */
97
S390_FEAT_DAT_ENH_2,
98
S390_FEAT_CMM,
99
+ S390_FEAT_AP,
100
101
/* PLO */
102
S390_FEAT_PLO_CL,
103
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
104
index XXXXXXX..XXXXXXX 100644
105
--- a/target/s390x/cpu_models.c
106
+++ b/target/s390x/cpu_models.c
107
@@ -XXX,XX +XXX,XX @@ static void check_consistency(const S390CPUModel *model)
108
{ S390_FEAT_PRNO_TRNG_QRTCR, S390_FEAT_MSA_EXT_5 },
109
{ S390_FEAT_PRNO_TRNG, S390_FEAT_MSA_EXT_5 },
110
{ S390_FEAT_SIE_KSS, S390_FEAT_SIE_F2 },
111
+ { S390_FEAT_AP_QUERY_CONFIG_INFO, S390_FEAT_AP },
112
+ { S390_FEAT_AP_FACILITIES_TEST, S390_FEAT_AP },
113
};
114
int i;
115
116
diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
117
index XXXXXXX..XXXXXXX 100644
118
--- a/target/s390x/gen-features.c
119
+++ b/target/s390x/gen-features.c
120
@@ -XXX,XX +XXX,XX @@ static uint16_t full_GEN12_GA1[] = {
121
S390_FEAT_ADAPTER_INT_SUPPRESSION,
122
S390_FEAT_EDAT_2,
123
S390_FEAT_SIDE_EFFECT_ACCESS_ESOP2,
124
+ S390_FEAT_AP_QUERY_CONFIG_INFO,
125
+ S390_FEAT_AP_FACILITIES_TEST,
126
+ S390_FEAT_AP,
127
};
24
};
128
25
129
static uint16_t full_GEN12_GA2[] = {
26
/* Information carried about a condition to be evaluated. */
27
@@ -XXX,XX +XXX,XX @@ typedef struct {
28
/* We have updated the PC and CC values. */
29
#define DISAS_PC_CC_UPDATED DISAS_TARGET_2
30
31
-/* We are exiting the TB to the main loop. */
32
-#define DISAS_PC_STALE_NOCHAIN DISAS_TARGET_4
33
-
34
35
/* Instruction flags */
36
#define IF_AFP1 0x0001 /* r1 is a fp reg for HFP/FPS instructions */
37
@@ -XXX,XX +XXX,XX @@ static DisasJumpType op_lctl(DisasContext *s, DisasOps *o)
38
tcg_temp_free_i32(r1);
39
tcg_temp_free_i32(r3);
40
/* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */
41
- return DISAS_PC_STALE_NOCHAIN;
42
+ s->exit_to_mainloop = true;
43
+ return DISAS_TOO_MANY;
44
}
45
46
static DisasJumpType op_lctlg(DisasContext *s, DisasOps *o)
47
@@ -XXX,XX +XXX,XX @@ static DisasJumpType op_lctlg(DisasContext *s, DisasOps *o)
48
tcg_temp_free_i32(r1);
49
tcg_temp_free_i32(r3);
50
/* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */
51
- return DISAS_PC_STALE_NOCHAIN;
52
+ s->exit_to_mainloop = true;
53
+ return DISAS_TOO_MANY;
54
}
55
56
static DisasJumpType op_lra(DisasContext *s, DisasOps *o)
57
@@ -XXX,XX +XXX,XX @@ static DisasJumpType op_ssm(DisasContext *s, DisasOps *o)
58
{
59
tcg_gen_deposit_i64(psw_mask, psw_mask, o->in2, 56, 8);
60
/* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */
61
- return DISAS_PC_STALE_NOCHAIN;
62
+ s->exit_to_mainloop = true;
63
+ return DISAS_TOO_MANY;
64
}
65
66
static DisasJumpType op_stap(DisasContext *s, DisasOps *o)
67
@@ -XXX,XX +XXX,XX @@ static DisasJumpType op_stnosm(DisasContext *s, DisasOps *o)
68
}
69
70
/* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */
71
- return DISAS_PC_STALE_NOCHAIN;
72
+ s->exit_to_mainloop = true;
73
+ return DISAS_TOO_MANY;
74
}
75
76
static DisasJumpType op_stura(DisasContext *s, DisasOps *o)
77
@@ -XXX,XX +XXX,XX @@ static void s390x_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
78
79
dc->cc_op = CC_OP_DYNAMIC;
80
dc->ex_value = dc->base.tb->cs_base;
81
+ dc->exit_to_mainloop = (dc->base.tb->flags & FLAG_MASK_PER);
82
}
83
84
static void s390x_tr_tb_start(DisasContextBase *db, CPUState *cs)
85
@@ -XXX,XX +XXX,XX @@ static void s390x_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
86
case DISAS_NORETURN:
87
break;
88
case DISAS_TOO_MANY:
89
- case DISAS_PC_STALE_NOCHAIN:
90
update_psw_addr(dc);
91
/* FALLTHRU */
92
case DISAS_PC_UPDATED:
93
@@ -XXX,XX +XXX,XX @@ static void s390x_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
94
/* FALLTHRU */
95
case DISAS_PC_CC_UPDATED:
96
/* Exit the TB, either by raising a debug exception or by return. */
97
- if ((dc->base.tb->flags & FLAG_MASK_PER) ||
98
- dc->base.is_jmp == DISAS_PC_STALE_NOCHAIN) {
99
+ if (dc->exit_to_mainloop) {
100
tcg_gen_exit_tb(NULL, 0);
101
} else {
102
tcg_gen_lookup_and_goto_ptr();
130
--
103
--
131
2.14.4
104
2.31.1
132
133
diff view generated by jsdifflib
1
From: Thomas Huth <thuth@redhat.com>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
The device is required for running qtests, see hw/s390x/tod.c:
3
When EXECUTE sets ex_value to interrupt the constructed instruction,
4
we implicitly disable interrupts so that the value is not corrupted.
5
Exit to the main loop after execution, so that we re-evaluate any
6
pending interrupts.
4
7
5
void s390_init_tod(void)
8
Reported-by: Sven Schnelle <svens@linux.ibm.com>
6
{
9
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
Object *obj;
10
Message-Id: <20220702060228.420454-5-richard.henderson@linaro.org>
8
9
if (kvm_enabled()) {
10
obj = object_new(TYPE_KVM_S390_TOD);
11
} else {
12
obj = object_new(TYPE_QEMU_S390_TOD);
13
}
14
[...]
15
}
16
17
During qtests, we're running without kvm, so TYPE_QEMU_S390_TOD is
18
required to avoid that QEMU aborts here.
19
20
Fixes: 8046f374a6 ("s390x/tod: factor out TOD into separate device")
21
Signed-off-by: Thomas Huth <thuth@redhat.com>
11
Signed-off-by: Thomas Huth <thuth@redhat.com>
22
Message-Id: <1539264723-741-1-git-send-email-thuth@redhat.com>
23
Reviewed-by: David Hildenbrand <david@redhat.com>
24
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
25
---
12
---
26
hw/s390x/Makefile.objs | 2 +-
13
target/s390x/tcg/translate.c | 2 +-
27
1 file changed, 1 insertion(+), 1 deletion(-)
14
1 file changed, 1 insertion(+), 1 deletion(-)
28
15
29
diff --git a/hw/s390x/Makefile.objs b/hw/s390x/Makefile.objs
16
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
30
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
31
--- a/hw/s390x/Makefile.objs
18
--- a/target/s390x/tcg/translate.c
32
+++ b/hw/s390x/Makefile.objs
19
+++ b/target/s390x/tcg/translate.c
33
@@ -XXX,XX +XXX,XX @@ obj-$(call lnot,$(CONFIG_PCI)) += s390-pci-stub.o
20
@@ -XXX,XX +XXX,XX @@ static void s390x_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
34
obj-y += s390-skeys.o
21
35
obj-y += s390-stattrib.o
22
dc->cc_op = CC_OP_DYNAMIC;
36
obj-y += tod.o
23
dc->ex_value = dc->base.tb->cs_base;
37
+obj-y += tod-qemu.o
24
- dc->exit_to_mainloop = (dc->base.tb->flags & FLAG_MASK_PER);
38
obj-$(CONFIG_KVM) += tod-kvm.o
25
+ dc->exit_to_mainloop = (dc->base.tb->flags & FLAG_MASK_PER) || dc->ex_value;
39
-obj-$(CONFIG_TCG) += tod-qemu.o
26
}
40
obj-$(CONFIG_KVM) += s390-skeys-kvm.o
27
41
obj-$(CONFIG_KVM) += s390-stattrib-kvm.o
28
static void s390x_tr_tb_start(DisasContextBase *db, CPUState *cs)
42
obj-y += s390-ccw.o
43
--
29
--
44
2.14.4
30
2.31.1
45
46
diff view generated by jsdifflib