[Barrelfish-users] Question about mm_alloc_range for PCIe MMCONFIG

Wang Wei Bessel.Wang at huawei.com
Thu Feb 28 13:59:31 CET 2013


Hi all,

I am trying to boot Barrelfish on a X86 server. However it doesn't work successfully. I get the following information.

acpi_service: acpi service get connection
acpi_service: get_pcie_confspace
acpi_service: AcpiOsMapMemory where=2041519488, length=60
acpi_service: PCIe enhanced configuration region at 0x80000000 (segment 0, buses 0-255)
acpi_service: mm_alloc_range_proxy_handler: sizebits: 28, minbase: 2147483648 maxlimit: 2415919104
ERROR: acpi.0 in mm_alloc_range_proxy_handler() ../usr/acpi/acpi_service.c:35
ERROR: mm realloc range failed...

Address range(0x80000000-0x90000000) is used by PCI MMCONIFG(Linux information:80000000-8fffffff : PCI MMCONFIG 0000 [bus 00-ff]).
The PCIe MMCONFIG can't be initialized because the mmnode(80000000-8fffffff) of pci_mm_physaddr is chunked during the acpi initialization.

usr/acpi/acpi_service.c
static void mm_alloc_range_proxy_handler(struct acpi_binding* b, uint8_t sizebits,
genpaddr_t minbase, genpaddr_t maxlimit)
{
ACPI_DEBUG("mm_alloc_range_proxy_handler: sizebits: %d, minbase: %lu maxlimit: %lu\n",
sizebits, minbase, maxlimit);

struct capref devframe = NULL_CAP;
errval_t err = mm_alloc_range(&pci_mm_physaddr, sizebits, minbase, maxlimit, &devframe, NULL);
if (err_is_fail(err)) {
DEBUG_ERR(err, "mm realloc range failed...\n");
}

err = b->tx_vtbl.mm_alloc_range_proxy_response(b, NOP_CONT, devframe, err);
assert(err_is_ok(err));
}

It use mm_alloc_range to request physaddr, but the DEBUG_ERR indicates "mm realloc rang failed".
Is mm_alloc_range or mm_realloc_range the right one here? Does anything else result in the bug?

Thanks




More information about the Barrelfish-users mailing list