On 05.03.2024 10:31, Roger Pau Monné wrote: > On Mon, Mar 04, 2024 at 08:32:22AM +0100, Jan Beulich wrote: >> BARs of size 2Gb and up can't possibly fit below 4Gb: Both the bottom of >> the lower 2Gb range and the top of the higher 2Gb range have special >> purpose. Don't even have them influence whether to (perhaps) relocate >> low RAM. >> >> Reported-by: Neowutran <x...@neowutran.ovh> >> Signed-off-by: Jan Beulich <jbeul...@suse.com> > > Acked-by: Roger Pau Monné <roger....@citrix.com>
Thanks. >> --- a/tools/firmware/hvmloader/pci.c >> +++ b/tools/firmware/hvmloader/pci.c >> @@ -33,6 +33,13 @@ uint32_t pci_mem_start = HVM_BELOW_4G_MM >> const uint32_t pci_mem_end = RESERVED_MEMBASE; >> uint64_t pci_hi_mem_start = 0, pci_hi_mem_end = 0; >> >> +/* >> + * BARs larger than this value are put in 64-bit space unconditionally. >> That >> + * is, such BARs also don't play into the determination of how big the >> lowmem >> + * MMIO hole needs to be. >> + */ >> +#define HUGE_BAR_THRESH GB(1) > > I would maybe name this `BAR_RELOCATE_THRESH, `HUGE_BAR` is too > generic IMO. BAR_RELOC_THRESH it is then. > And also use 256Mb instead of 1GB, but just having a limit is good > enough, we can further tune it afterwards. As indicated in an earlier reply, I now firmly think that if we want to do so, it wants doing separately / incrementally. >> @@ -446,8 +455,9 @@ void pci_setup(void) >> * the code here assumes it to be.) >> * Should either of those two conditions change, this code will >> break. >> */ >> - using_64bar = bars[i].is_64bar && bar64_relocate >> - && (mmio_total > (mem_resource.max - mem_resource.base)); >> + using_64bar = bars[i].is_64bar && bar64_relocate && >> + (mmio_total > (mem_resource.max - mem_resource.base) || >> + bar_sz > HUGE_BAR_THRESH); > > There's a comment above this that starts with: > > "Relocate to high memory if the total amount of MMIO needed is more > than the low MMIO available." > > I would slightly reword it to: > > "Relocate to high memory if the total amount of MMIO needed is more > than the low MMIO available or BARs bigger that HUGE_BAR_THRESH are > present." Hmm, yes, done. Jan