bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH v2] biosmem: Narrow or widen e820 memory regions as appropria


From: Samuel Thibault
Subject: Re: [PATCH v2] biosmem: Narrow or widen e820 memory regions as appropriate
Date: Mon, 14 Feb 2022 19:56:00 +0100
User-agent: NeoMutt/20170609 (1.8.3)

Damien Zammit, le lun. 14 févr. 2022 06:57:40 +0000, a ecrit:
> ---
>  i386/i386at/biosmem.c | 40 +++++++++++++++++++++++++++++++++-------
>  1 file changed, 33 insertions(+), 7 deletions(-)
> 
> diff --git a/i386/i386at/biosmem.c b/i386/i386at/biosmem.c
> index 4f0914ca..354d0529 100644
> --- a/i386/i386at/biosmem.c
> +++ b/i386/i386at/biosmem.c
> @@ -73,14 +73,22 @@ static unsigned int biosmem_nr_boot_data __bootdata;
>  #define BIOSMEM_MAX_MAP_SIZE 128
> 
>  /*
> - * Memory range types.
> + * Memory range types (as bitmask)
>   */
> -#define BIOSMEM_TYPE_AVAILABLE  1
> -#define BIOSMEM_TYPE_RESERVED   2
> -#define BIOSMEM_TYPE_ACPI       3
> -#define BIOSMEM_TYPE_NVS        4
> -#define BIOSMEM_TYPE_UNUSABLE   5
> -#define BIOSMEM_TYPE_DISABLED   6
> +#define BIOSMEM_TYPE_AVAILABLE  (1u << 0)
> +#define BIOSMEM_TYPE_RESERVED   (1u << 1)
> +#define BIOSMEM_TYPE_ACPI       (1u << 2)
> +#define BIOSMEM_TYPE_NVS        (1u << 3)
> +#define BIOSMEM_TYPE_UNUSABLE   (1u << 4)
> +#define BIOSMEM_TYPE_DISABLED   (1u << 5)

Err, reading this again: that can't be right :)
The entry type is not something you can choose the representation if,
it's the e820 interface that decides it :)

> +static void __boot
> +biosmem_map_adjust_alignment(struct biosmem_map_entry *e)
> +{
> +    uint64_t end = e->base_addr + e->length;
> +
> +    if (e->type & BIOSMEM_MASK_NARROW) {
> +        e->base_addr = vm_page_round (e->base_addr);
> +        e->length = vm_page_trunc (end) - e->base_addr;
> +    } else {
> +        e->base_addr = vm_page_trunc (e->base_addr);
> +        e->length = vm_page_round (end) - e->base_addr;
> +    }
> +}

Thinking again about it, I don't think we want to extend areas: think
about the situation:

biosmem: 000000000000000000:00000000000009fc00, available
biosmem: 00000000000009fc00:0000000000000a0000, reserved
biosmem: 0000000000000a0000:0000000000000a0100, reserved
biosmem: 0000000000000a0100:0000000000000f0000, reserved

you end up with two zones that span a0000:a1000. I'd say for now just
narrow RAM/NVS/PMEM and not touch the rest. That won't be a problem for
memmap anyway, we'll just be ignoring some small pieces of available
memory.

Samuel



reply via email to

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