[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PatchV2] s390x: fix memory detection for guests > 64GB
From: |
Alexander Graf |
Subject: |
Re: [Qemu-devel] [PatchV2] s390x: fix memory detection for guests > 64GB |
Date: |
Thu, 12 May 2011 09:55:00 +0200 |
On 12.05.2011, at 09:50, Christian Borntraeger wrote:
> the s390 memory detection has a 16bit field that specifies the amount of
> increments. This patch adopts the memory size to always fit into that
> scheme. This also fixes virtio detection for these guests, since the
> descriptor page is located after the main memory.
>
> Signed-off-by: Christian Borntraeger <address@hidden>
>
> ---
> target-s390x/op_helper.c | 8 ++++++--
> vl.c | 11 +++++++++++
> 2 files changed, 17 insertions(+), 2 deletions(-)
>
> Index: b/target-s390x/op_helper.c
> ===================================================================
> --- a/target-s390x/op_helper.c
> +++ b/target-s390x/op_helper.c
> @@ -2361,6 +2361,7 @@ static void ext_interrupt(CPUState *env,
> int sclp_service_call(CPUState *env, uint32_t sccb, uint64_t code)
> {
> int r = 0;
> + int shift = 0;
>
> #ifdef DEBUG_HELPER
> printf("sclp(0x%x, 0x%" PRIx64 ")\n", sccb, code);
> @@ -2375,8 +2376,11 @@ int sclp_service_call(CPUState *env, uin
> switch(code) {
> case SCLP_CMDW_READ_SCP_INFO:
> case SCLP_CMDW_READ_SCP_INFO_FORCED:
> - stw_phys(sccb + SCP_MEM_CODE, ram_size >> 20);
> - stb_phys(sccb + SCP_INCREMENT, 1);
> + while ((ram_size >> (20 + shift)) > 65535) {
> + shift++;
> + }
> + stw_phys(sccb + SCP_MEM_CODE, ram_size >> (20 + shift));
> + stb_phys(sccb + SCP_INCREMENT, 1 << shift);
> stw_phys(sccb + SCP_RESPONSE_CODE, 0x10);
>
> if (kvm_enabled()) {
> Index: b/vl.c
> ===================================================================
> --- a/vl.c
> +++ b/vl.c
> @@ -2962,6 +2962,17 @@ int main(int argc, char **argv, char **e
> if (ram_size == 0)
> ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
>
> + /* s390x ram size detection needs a 16bit multiplier + an increment. So
> + guests > 64GB can be specified in 2MB steps etc */
> + if (strstr(machine->name, "s390")) {
> + int shift = 0;
> +
> + while ((ram_size >> (20 + shift)) > 65535) {
> + shift++;
> + }
> + ram_size = ram_size >> (20 + shift) << (20 + shift);
This one really belongs to hw/s390-virtio.c. Just move the same code to
s390_init there and it should work out. The less hacks we can have in generic
code, the better :).
Alex
- [Qemu-devel] s390x: fix memory detection for guests > 64GB, Christian Borntraeger, 2011/05/10
- Re: [Qemu-devel] s390x: fix memory detection for guests > 64GB, Alexander Graf, 2011/05/11
- [Qemu-devel] [PatchV2] s390x: fix memory detection for guests > 64GB, Christian Borntraeger, 2011/05/12
- Re: [Qemu-devel] [PatchV2] s390x: fix memory detection for guests > 64GB,
Alexander Graf <=
- Re: [Qemu-devel] [PatchV2] s390x: fix memory detection for guests > 64GB, Christian Borntraeger, 2011/05/12
- Re: [Qemu-devel] [PatchV2] s390x: fix memory detection for guests > 64GB, Alexander Graf, 2011/05/12
- Re: [Qemu-devel] [PatchV3] s390x: fix memory detection for guests > 64GB, Christian Borntraeger, 2011/05/12
- Re: [Qemu-devel] [PatchV3] s390x: fix memory detection for guests > 64GB, Alexander Graf, 2011/05/17
- Re: [Qemu-devel] [PatchV3] s390x: fix memory detection for guests > 64GB, Alexander Graf, 2011/05/17