qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 00/86] refactor main RAM allocation to use hostmem backend


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH 00/86] refactor main RAM allocation to use hostmem backend
Date: Tue, 31 Dec 2019 16:58:10 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2

Hi Igor,

On 12/31/19 2:02 PM, Igor Mammedov wrote:
Series removes ad hoc RAM allocation API (memory_region_allocate_system_memory)
and consolidates it around hostmem backend. It allows to
  * resolve conflicts between global -mem-prealloc and hostmem's "policy" option
    fixing premature allocation before binding policy is applied
  * simplify complicated memory allocation routines which had to deal with 2 
ways
    to allocate RAM.
  * it allows to reuse hostmem backends of a choice for main RAM without adding
    extra CLI options to duplicate hostmem features.
    Recent case was -mem-shared, to enable vhost-user on targets that don't
    support hostmem backends [1] (ex: s390)
  * move RAM allocation from individual boards into generic machine code and
    provide them with prepared MemoryRegion.
  * clean up deprecated NUMA features which were tied to the old API (see 
patches)
     - "numa: remove deprecated -mem-path fallback to anonymous RAM"
     - "numa: remove deprecated implicit RAM distribution between nodes"
     - "forbid '-numa node,mem' for 5.0 and newer machine types"

Conversion introduces a new machine.ram-memdev property and wrapper code that
aliases global -mem-path and -mem-alloc into automatically created hostmem
backend properties (provided ram-memdev was not set explicitly by user).
And then follows bulk of trivial patches that incrementally convert individual
boards to using machine.ram-memdev provided MemoryRegion.

Board conversion typically involves:
  * providing MachineClass::default_ram_size and MachineClass::default_ram_id
    so generic code could create default backend if user didn't explicitly 
provide
    ram-memdev or -m options
  * dropping memory_region_allocate_system_memory() call
  * using covinience MachineState::ram MemoryRegion, which points to 
MemoryRegion
    allocated by ram-memdev
On top of that for some boards:
  * added missing ram_size checks (typically it were boards with fixed ram size)
  * ram_size fixups were replaced by checks and hard errors, forcing user to
    provide correct "-m" values instead of ignoring it and continuing running.
After all boards are converted the old API is removed and memory allocation
routines are cleaned up.

I'm replying to the cover because multiple patches are concerned.

Compiling arm/lm32/mips64el/ppc on 32-bit host I get:

  CC      hw/arm/digic_boards.o
hw/arm/digic_boards.c: In function 'digic4_board_init':
hw/arm/digic_boards.c:57:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/arm/digic_boards.o' failed
make: *** [hw/arm/digic_boards.o] Error 1
  CC      hw/arm/musicpal.o
hw/arm/musicpal.c: In function 'musicpal_init':
hw/arm/musicpal.c:1598:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/arm/musicpal.o' failed
make: *** [hw/arm/musicpal.o] Error 1
  CC      hw/arm/nseries.o
hw/arm/nseries.c: In function 'n8x0_init':
hw/arm/nseries.c:1316:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/arm/nseries.o' failed
make: *** [hw/arm/nseries.o] Error 1
  CC      hw/arm/omap_sx1.o
hw/arm/omap_sx1.c: In function 'sx1_init':
hw/arm/omap_sx1.c:119:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/arm/omap_sx1.o' failed
make: *** [hw/arm/omap_sx1.o] Error 1
  CC      hw/arm/palm.o
hw/arm/palm.c: In function 'palmte_init':
hw/arm/palm.c:202:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/arm/palm.o' failed
make: *** [hw/arm/palm.o] Error 1
  CC      hw/arm/collie.o
hw/arm/collie.c: In function 'collie_init':
hw/arm/collie.c:32:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/arm/collie.o' failed
make: *** [hw/arm/collie.o] Error 1
  CC      hw/arm/mps2.o
hw/arm/mps2.c: In function 'mps2_common_init':
hw/arm/mps2.c:121:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/arm/mps2.o' failed
make: *** [hw/arm/mps2.o] Error 1
  CC      hw/arm/mps2-tz.o
hw/arm/mps2-tz.c: In function 'mps2tz_common_init':
hw/arm/mps2-tz.c:391:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/arm/mps2-tz.o' failed
make: *** [hw/arm/mps2-tz.o] Error 1
  CC      hw/lm32/lm32_boards.o
hw/lm32/lm32_boards.c: In function 'lm32_evr_init':
hw/lm32/lm32_boards.c:89:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
hw/lm32/lm32_boards.c: In function 'lm32_uclinux_init':
hw/lm32/lm32_boards.c:179:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/lm32/lm32_boards.o' failed
make: *** [hw/lm32/lm32_boards.o] Error 1
  CC      hw/lm32/milkymist.o
hw/lm32/milkymist.c: In function 'milkymist_init':
hw/lm32/milkymist.c:100:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
  CC      hw/mips/mips_fulong2e.o
hw/mips/mips_fulong2e.c: In function 'mips_fulong2e_init':
hw/mips/mips_fulong2e.c:317:22: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'long long int' [-Werror=format=]
         error_report("Invalid RAM size, should be %ld", 256 * MiB);
                      ^
cc1: all warnings being treated as errors
  CC      hw/ppc/ppc405_boards.o
hw/ppc/ppc405_boards.c: In function 'ref405ep_init':
hw/ppc/ppc405_boards.c:165:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
hw/ppc/ppc405_boards.c: In function 'taihu_405ep_init':
hw/ppc/ppc405_boards.c:435:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=]
         error_report("Invalid RAM size, should be %" PRIi64 " Bytes",
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/ppc/ppc405_boards.o' failed
make: *** [hw/ppc/ppc405_boards.o] Error 1
  CC      hw/ppc/ppc4xx_devs.o
hw/ppc/ppc4xx_devs.c: In function 'ppc4xx_sdram_adjust':
hw/ppc/ppc4xx_devs.c:704:39: error: format '%lli' expects argument of type 'long long int', but argument 3 has type 'ram_addr_t {aka const unsigned int}' [-Werror=format=] char *t = g_strdup_printf("%s%" PRIi64 "%s", s, sdram_bank_sizes[i],
                                       ^
hw/ppc/ppc4xx_devs.c:709:22: error: format '%lli' expects argument of type 'long long int', but argument 2 has type 'ram_addr_t {aka unsigned int}' [-Werror=format=] error_report("Invalid RAM size, unable to fit all RAM into RAM banks"
                      ^
cc1: all warnings being treated as errors
rules.mak:69: recipe for target 'hw/ppc/ppc4xx_devs.o' failed
make: *** [hw/ppc/ppc4xx_devs.o] Error 1
  CC      hw/ppc/e500.o
hw/ppc/e500.c: In function 'ppce500_init':
hw/ppc/e500.c:909:22: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'long long int' [-Werror=format=]
         error_report("RAM size must be multiple of %ld", RAM_SIZES_ALIGN);
                      ^
cc1: all warnings being treated as errors




reply via email to

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