diff mbox

[12/15] s390x: reduce TARGET_PHYS_ADDR_SPACE_BITS to 62

Message ID 1369414987-8839-13-git-send-email-pbonzini@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini May 24, 2013, 5:03 p.m. UTC
With the next patch, the memory API will complain if the
TARGET_PHYS_ADDR_SPACE_BITS gets dangerously close to an
overflow.  s390x can handle up to 64 bit of physical address
space from its page tables, but we never use that much.  Just
decrease the value.

Cc: Alexander Graf <agraf@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 target-s390x/cpu.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Andreas Färber May 26, 2013, 2:14 p.m. UTC | #1
Am 24.05.2013 19:03, schrieb Paolo Bonzini:
> With the next patch, the memory API will complain if the
> TARGET_PHYS_ADDR_SPACE_BITS gets dangerously close to an
> overflow.  s390x can handle up to 64 bit of physical address
> space from its page tables, but we never use that much.  Just
> decrease the value.
> 
> Cc: Alexander Graf <agraf@suse.de>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Didn't Avi introduce 128-bit arithmetic into QEMU to avoid 64-bit values
overflowing? Why are you limiting Memory API to 62-bit now?

Andreas

> ---
>  target-s390x/cpu.h | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
> index 0ce82cf..6304c4d 100644
> --- a/target-s390x/cpu.h
> +++ b/target-s390x/cpu.h
> @@ -34,7 +34,10 @@
>  #include "exec/cpu-defs.h"
>  #define TARGET_PAGE_BITS 12
>  
> -#define TARGET_PHYS_ADDR_SPACE_BITS 64
> +/* Actually 64-bits, limited by the memory API to 62 bits.  We
> + * never use that much.
> + */
> +#define TARGET_PHYS_ADDR_SPACE_BITS 62
>  #define TARGET_VIRT_ADDR_SPACE_BITS 64
>  
>  #include "exec/cpu-all.h"
>
Paolo Bonzini May 26, 2013, 7:07 p.m. UTC | #2
Il 26/05/2013 16:14, Andreas Färber ha scritto:
> > With the next patch, the memory API will complain if the
> > TARGET_PHYS_ADDR_SPACE_BITS gets dangerously close to an
> > overflow.  s390x can handle up to 64 bit of physical address
> > space from its page tables, but we never use that much.  Just
> > decrease the value.
> > 
> > Cc: Alexander Graf <agraf@suse.de>
> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> 
> Didn't Avi introduce 128-bit arithmetic into QEMU to avoid 64-bit values
> overflowing? Why are you limiting Memory API to 62-bit now?

The next patch makes a difference between artificial memory regions
(containers and aliases) which can have arbitrary placement and width,
and the final view of the address space which cannot have a full 64-bit
size.

63 bits probably would work, but I preferred to be safe since 62 is the
largest used by other targets.

It should be fixable, but if it is not a problem I wouldn't worry much
about it.

Paolo
Christian Borntraeger May 26, 2013, 9:08 p.m. UTC | #3
On 26/05/13 21:07, Paolo Bonzini wrote:
> Il 26/05/2013 16:14, Andreas Färber ha scritto:
>>> With the next patch, the memory API will complain if the
>>> TARGET_PHYS_ADDR_SPACE_BITS gets dangerously close to an
>>> overflow.  s390x can handle up to 64 bit of physical address
>>> space from its page tables, but we never use that much.  Just
>>> decrease the value.
>>>
>>> Cc: Alexander Graf <agraf@suse.de>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>
>> Didn't Avi introduce 128-bit arithmetic into QEMU to avoid 64-bit values
>> overflowing? Why are you limiting Memory API to 62-bit now?
> 
> The next patch makes a difference between artificial memory regions
> (containers and aliases) which can have arbitrary placement and width,
> and the final view of the address space which cannot have a full 64-bit
> size.
> 
> 63 bits probably would work, but I preferred to be safe since 62 is the
> largest used by other targets.
> 
> It should be fixable, but if it is not a problem I wouldn't worry much
> about it.

I would prefer to allow 64bit of address space. Memory on s390x can be 
discontiguous. It is currently not used under KVM and it might not make
a lot of sense, but the current KVM code  would allow a guest that has a 
layout of lets say 0...1GB + 16EB-1GB...16EB. 

Furthermore, I know of some (prototype only) hw memory devices that actually
populated the upper memory addresses. If such a thing becomes reality in the
future we cannot provide virtualization of those.


Christian
Paolo Bonzini May 27, 2013, 7:28 a.m. UTC | #4
Il 26/05/2013 23:08, Christian Borntraeger ha scritto:
> On 26/05/13 21:07, Paolo Bonzini wrote:
>> Il 26/05/2013 16:14, Andreas Färber ha scritto:
>>>> With the next patch, the memory API will complain if the
>>>> TARGET_PHYS_ADDR_SPACE_BITS gets dangerously close to an
>>>> overflow.  s390x can handle up to 64 bit of physical address
>>>> space from its page tables, but we never use that much.  Just
>>>> decrease the value.
>>>>
>>>> Cc: Alexander Graf <agraf@suse.de>
>>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>>
>>> Didn't Avi introduce 128-bit arithmetic into QEMU to avoid 64-bit values
>>> overflowing? Why are you limiting Memory API to 62-bit now?
>>
>> The next patch makes a difference between artificial memory regions
>> (containers and aliases) which can have arbitrary placement and width,
>> and the final view of the address space which cannot have a full 64-bit
>> size.
>>
>> 63 bits probably would work, but I preferred to be safe since 62 is the
>> largest used by other targets.
>>
>> It should be fixable, but if it is not a problem I wouldn't worry much
>> about it.
> 
> I would prefer to allow 64bit of address space. Memory on s390x can be 
> discontiguous. It is currently not used under KVM and it might not make
> a lot of sense, but the current KVM code  would allow a guest that has a 
> layout of lets say 0...1GB + 16EB-1GB...16EB. 
> 
> Furthermore, I know of some (prototype only) hw memory devices that actually
> populated the upper memory addresses. If such a thing becomes reality in the
> future we cannot provide virtualization of those.

Ok, I'll drop this patch and the next one from the pull request.

Paolo
Andreas Färber May 27, 2013, 12:52 p.m. UTC | #5
Am 27.05.2013 09:28, schrieb Paolo Bonzini:
> Il 26/05/2013 23:08, Christian Borntraeger ha scritto:
>> On 26/05/13 21:07, Paolo Bonzini wrote:
>>> Il 26/05/2013 16:14, Andreas Färber ha scritto:
>>>>> With the next patch, the memory API will complain if the
>>>>> TARGET_PHYS_ADDR_SPACE_BITS gets dangerously close to an
>>>>> overflow.  s390x can handle up to 64 bit of physical address
>>>>> space from its page tables, but we never use that much.  Just
>>>>> decrease the value.
>>>>>
>>>>> Cc: Alexander Graf <agraf@suse.de>
>>>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
[...]
>> I would prefer to allow 64bit of address space. Memory on s390x can be 
>> discontiguous. It is currently not used under KVM and it might not make
>> a lot of sense, but the current KVM code  would allow a guest that has a 
>> layout of lets say 0...1GB + 16EB-1GB...16EB. 
>>
>> Furthermore, I know of some (prototype only) hw memory devices that actually
>> populated the upper memory addresses. If such a thing becomes reality in the
>> future we cannot provide virtualization of those.
> 
> Ok, I'll drop this patch and the next one from the pull request.

It has already been merged, that's how I became aware of it:

http://git.qemu.org/?p=qemu.git;a=commit;h=fd469df97ab4277411ecdd4032a2f045a3a87b2a

Note that Alex is currently absent, so please CC some of the other s390x
folks or wait for an ack if you plan alternative changes.

Cheers,
Andreas
Paolo Bonzini May 27, 2013, 1:13 p.m. UTC | #6
Il 27/05/2013 14:52, Andreas Färber ha scritto:
>> > Ok, I'll drop this patch and the next one from the pull request.
> It has already been merged, that's how I became aware of it:
> 
> http://git.qemu.org/?p=qemu.git;a=commit;h=fd469df97ab4277411ecdd4032a2f045a3a87b2a
> 
> Note that Alex is currently absent, so please CC some of the other s390x
> folks or wait for an ack if you plan alternative changes.

I just plan to revert these two patches.  The fix will be in the memory
API, not in s390.

Paolo
diff mbox

Patch

diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index 0ce82cf..6304c4d 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -34,7 +34,10 @@ 
 #include "exec/cpu-defs.h"
 #define TARGET_PAGE_BITS 12
 
-#define TARGET_PHYS_ADDR_SPACE_BITS 64
+/* Actually 64-bits, limited by the memory API to 62 bits.  We
+ * never use that much.
+ */
+#define TARGET_PHYS_ADDR_SPACE_BITS 62
 #define TARGET_VIRT_ADDR_SPACE_BITS 64
 
 #include "exec/cpu-all.h"