[PATCH v4 2/4] x86: Store memory ranges globally used for crash kernel to boot into

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

 



>  
> +static void exclude_ram(struct memory_range *mr, int *nr_mr)
> +{
> +	int ranges, i, j, m;
> +
> +	ranges = *nr_mr;
> +	for (i = 0, j = 0; i < ranges; i++) {
> +		if (mr[j].type == RANGE_RAM) {
> +			dbgprintf("Remove RAM %016llx-%016llxx: (%d)\n", mr[j].start, mr[j].end, mr[j].type);
> +			for (m = j; m < *nr_mr; m++)
> +				mr[m] = mr[m+1];
> +			(*nr_mr)--;
> +		} else {
> +			j++;
> +		}
> +	}
> +
> +	dbgprint_mem_range("After remove RAM", mr, *nr_mr);
> +}

This is probably not necessary, what I understand you are doing is below:

get_crash_memory_ranges()
 -> collect all SYSTEM_RAM, ACPI, ACPI_NVS ranges, exclude crash reserved ranges.
 -> the system ram ranges are used to create elf header
 -> the ACPI, ACPI_NVS ranges are used by cmdline_add_memmap_acpi etc.

memmap_p
 -> contains all the crash reserved ranges
 -> to be used by cmdline_add_memmap

The several memory ranges are twisted and somehow the funcions are duplicate.

So how about just keep one memory ranges array which contains all the ranges which
include system_ram, acpi, acpi_nvs, crash_reserved range.

In the crashdump-elf.c the function for creating elf headers will check the
range type, it will just skip the range which is not ram.

Ditto for other functions they can also just select what range type they need instead
of creating these different arrays which is confusing.

Thanks
Dave



[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux