68 lines
2.7 KiB
Diff
68 lines
2.7 KiB
Diff
From adf66c037e60d66f864960b24c746b767efb10b9 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Huth <thuth@redhat.com>
|
|
Date: Wed, 11 Nov 2020 12:03:10 -0500
|
|
Subject: [PATCH 10/18] s390/sclp: use cpu offset to locate cpu entries
|
|
|
|
RH-Author: Thomas Huth <thuth@redhat.com>
|
|
Message-id: <20201111120316.707489-7-thuth@redhat.com>
|
|
Patchwork-id: 99503
|
|
O-Subject: [RHEL-8.4.0 qemu-kvm PATCH v2 06/12] s390/sclp: use cpu offset to locate cpu entries
|
|
Bugzilla: 1798506
|
|
RH-Acked-by: Jens Freimann <jfreimann@redhat.com>
|
|
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
|
RH-Acked-by: David Hildenbrand <david@redhat.com>
|
|
|
|
From: Collin Walling <walling@linux.ibm.com>
|
|
|
|
The start of the CPU entry region in the Read SCP Info response data is
|
|
denoted by the offset_cpu field. As such, QEMU needs to begin creating
|
|
entries at this address.
|
|
|
|
This is in preparation for when Read SCP Info inevitably introduces new
|
|
bytes that push the start of the CPUEntry field further away.
|
|
|
|
Read CPU Info is unlikely to ever change, so let's not bother
|
|
accounting for the offset there.
|
|
|
|
Signed-off-by: Collin Walling <walling@linux.ibm.com>
|
|
Reviewed-by: Thomas Huth <thuth@redhat.com>
|
|
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
|
|
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
|
|
Message-Id: <20200915194416.107460-6-walling@linux.ibm.com>
|
|
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
|
|
(cherry picked from commit 1a7a568859473b1cda39a015493c5c82bb200281)
|
|
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
hw/s390x/sclp.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
|
|
index 2b4c6c5cfad..017989b3888 100644
|
|
--- a/hw/s390x/sclp.c
|
|
+++ b/hw/s390x/sclp.c
|
|
@@ -89,6 +89,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
|
|
int rnsize, rnmax;
|
|
IplParameterBlock *ipib = s390_ipl_get_iplb();
|
|
int required_len = SCCB_REQ_LEN(ReadInfo, machine->possible_cpus->len);
|
|
+ int offset_cpu = offsetof(ReadInfo, entries);
|
|
+ CPUEntry *entries_start = (void *)sccb + offset_cpu;
|
|
|
|
if (be16_to_cpu(sccb->h.length) < required_len) {
|
|
sccb->h.response_code = cpu_to_be16(SCLP_RC_INSUFFICIENT_SCCB_LENGTH);
|
|
@@ -96,9 +98,9 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
|
|
}
|
|
|
|
/* CPU information */
|
|
- prepare_cpu_entries(machine, read_info->entries, &cpu_count);
|
|
+ prepare_cpu_entries(machine, entries_start, &cpu_count);
|
|
read_info->entries_cpu = cpu_to_be16(cpu_count);
|
|
- read_info->offset_cpu = cpu_to_be16(offsetof(ReadInfo, entries));
|
|
+ read_info->offset_cpu = cpu_to_be16(offset_cpu);
|
|
read_info->highest_cpu = cpu_to_be16(machine->smp.max_cpus - 1);
|
|
|
|
read_info->ibc_val = cpu_to_be32(s390_get_ibc_val());
|
|
--
|
|
2.27.0
|
|
|