get memory size from fwcfg
PATCH 1/1 get memory size from fwcfg
Upstream test device does not implement port 0xd1.
Signed-off-by Gleb Natapov <[email protected]>
lib/x86/vm.c +2 -8
@@ -1,3 +1,4 @@ +#include "fwcfg.h" #include "vm.h" #include "libcflat.h"
@@ -185,16 +186,9 @@ static void setup_mmu(unsigned long len)printf ("cr4 = %x\n" ,read_cr4 ()); } -static unsigned int inl (unsigned short port) -{ -unsigned int val; - asmvolatile ("inl %w1, %0" :"=a" (val) :"Nd" (port)); -return val; -} -void setup_vm () { - end_of_memory =inl (0xd1 ); + end_of_memory =fwcfg_get_u64 (FW_CFG_RAM_SIZE );free_memory (&edata, end_of_memory - (unsigned long )&edata);setup_mmu (end_of_memory); }
x86/rmap_chain.c +2 -1
@@ -1,6 +1,7 @@/* test long rmap chains */ #include "libcflat.h" +#include "fwcfg.h" #include "vm.h" #include "smp.h"
@@ -21,7 +22,7 @@ int main (void)setup_vm (); - nr_pages =inl (0xd1 ) /PAGE_SIZE ; + nr_pages =fwcfg_get_u64 (FW_CFG_RAM_SIZE ) /PAGE_SIZE ; nr_pages -=1000 ; target_page =alloc_page ();
--
Gleb.
Quoted 1 line · Gleb Natapov
Upstream test device does not implement port
0xd1.
I remember sending a similar patch a while ago, but it seems like it didn't get applied.
One thing that does occur to me - we will have to keep testing RHEL5, RHEL6 and Fedora with their old test devices. This change seems backwards compatible, since instead of using port 0xd1 we're getting RAM size from the firmware, which should work for both cases.
Given all that, this patch looks good to me. ACK.
Reviewed-by Lucas Meneghel Rodrigues <[email protected]>
Quoted 52 lines
Signed-off-by Gleb Natapov <[email protected]>lib/x86/vm.c +2
-8@@ -1,3 +1,4 @@ +#include "fwcfg.h" #include "vm.h" #include "libcflat.h" @@ -185,16 +186,9 @@ static void setup_mmu(unsigned long len)printf ("cr4 = %x\n" ,read_cr4 ()); } -static unsigned int inl (unsigned short port) -{ -unsigned int val; - asmvolatile ("inl %w1, %0" :"=a" (val) :"Nd" (port)); -return val; -} -void setup_vm () { - end_of_memory =inl (0xd1 ); + end_of_memory =fwcfg_get_u64 (FW_CFG_RAM_SIZE );free_memory (&edata, end_of_memory - (unsigned long )&edata);setup_mmu (end_of_memory); }x86/rmap_chain.c +2
-2@@ -1,6 +1,7 @@/* test long rmap chains */ #include "libcflat.h" +#include "fwcfg.h" #include "vm.h" #include "smp.h" @@ -21,7 +22,7 @@ int main (void)setup_vm (); - nr_pages =inl (0xd1 ) /PAGE_SIZE ; + nr_pages =fwcfg_get_u64 (FW_CFG_RAM_SIZE ) /PAGE_SIZE ; nr_pages -=1000 ; target_page =alloc_page (); --Gleb.