qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 22/23] s390/sclp: store the increment_size in the sc


From: Cornelia Huck
Subject: [Qemu-devel] [PATCH 22/23] s390/sclp: store the increment_size in the sclp device
Date: Mon, 31 Aug 2015 13:14:02 +0200

From: David Hildenbrand <address@hidden>

Let's calculate it once and reuse it.

Suggested-by: Matthew Rosato <address@hidden>
Reviewed-by: Matthew Rosato <address@hidden>
Signed-off-by: David Hildenbrand <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
 hw/s390x/sclp.c         | 20 +++-----------------
 include/hw/s390x/sclp.h |  1 +
 2 files changed, 4 insertions(+), 17 deletions(-)

diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
index ac582e8..0a7f4dd 100644
--- a/hw/s390x/sclp.c
+++ b/hw/s390x/sclp.c
@@ -36,7 +36,6 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
     CPUState *cpu;
     int cpu_count = 0;
     int i = 0;
-    int increment_size = 20;
     int rnsize, rnmax;
     int slots = MIN(machine->ram_slots, s390_get_memslot_count(kvm_state));
 
@@ -57,23 +56,9 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
     read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
                                         SCLP_HAS_PCI_RECONFIG);
 
-    /*
-     * The storage increment size is a multiple of 1M and is a power of 2.
-     * The number of storage increments must be MAX_STORAGE_INCREMENTS or 
fewer.
-     */
-    while ((ram_size >> increment_size) > MAX_STORAGE_INCREMENTS) {
-        increment_size++;
-    }
-    rnmax = ram_size >> increment_size;
-
+    rnmax = ram_size >> sclp->increment_size;
     /* Memory Hotplug is only supported for the ccw machine type */
     if (mhd) {
-        while ((mhd->standby_mem_size >> increment_size) >
-               MAX_STORAGE_INCREMENTS) {
-            increment_size++;
-        }
-        assert(increment_size == mhd->increment_size);
-
         mhd->standby_subregion_size = MEM_SECTION_SIZE;
         /* Deduct the memory slot already used for core */
         if (slots > 0) {
@@ -105,7 +90,7 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
         read_info->facilities |= cpu_to_be64(SCLP_FC_ASSIGN_ATTACH_READ_STOR);
     }
 
-    rnsize = 1 << (increment_size - 20);
+    rnsize = 1 << (sclp->increment_size - 20);
     if (rnsize <= 128) {
         read_info->rnsize = rnsize;
     } else {
@@ -518,6 +503,7 @@ static void sclp_memory_init(SCLPDevice *sclp)
             increment_size++;
         }
     }
+    sclp->increment_size = increment_size;
 
     /* The core and standby memory areas need to be aligned with
      * the increment size.  In effect, this can cause the
diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
index 50094eb..b0c71b5 100644
--- a/include/hw/s390x/sclp.h
+++ b/include/hw/s390x/sclp.h
@@ -174,6 +174,7 @@ typedef struct SCLPDevice {
     /* private */
     DeviceState parent_obj;
     SCLPEventFacility *event_facility;
+    int increment_size;
 
     /* public */
 } SCLPDevice;
-- 
2.5.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]