• Bernhard Walle's avatar
    sysfs: add /sys/firmware/memmap · 69ac9cd6
    Bernhard Walle authored
    This patch adds /sys/firmware/memmap interface that represents the BIOS
    (or Firmware) provided memory map. The tree looks like:
    
        /sys/firmware/memmap/0/start   (hex number)
                               end     (hex number)
                               type    (string)
        ...                 /1/start
                               end
                               type
    
    With the following shell snippet one can print the memory map in the same form
    the kernel prints itself when booting on x86 (the E820 map).
    
      --------- 8< --------------------------
        #!/bin/sh
        cd /sys/firmware/memmap
        for dir in * ; do
            start=$(cat $dir/start)
            end=$(cat $dir/end)
            type=$(cat $dir/type)
            printf "%016x-%016x (%s)\n" $start $[ $end +1] "$type"
        done
      --------- >8 --------------------------
    
    That patch only provides the needed interface:
    
     1. The sysfs interface.
     2. The structure and enumeration definition.
     3. The function firmware_map_add() and firmware_map_add_early()
        that should be called from architecture code (E820/EFI, for
        example) to add the contents to the interface.
    
    If the kernel is compiled without CONFIG_FIRMWARE_MEMMAP, the interface does
    nothing without cluttering the architecture-specific code with #ifdef's.
    
    The purpose of the new interface is kexec: While /proc/iomem represents
    the *used* memory map (e.g. modified via kernel parameters like 'memmap'
    and 'mem'), the /sys/firmware/memmap tree represents the unmodified memory
    map provided via the firmware. So kexec can:
    
     - use the original memory map for rebooting,
     - use the /proc/iomem for setting up the ELF core headers for kdump
       case that should only represent the memory of the system.
    
    The patch has been tested on i386 and x86_64.
    Signed-off-by: default avatarBernhard Walle <bwalle@suse.de>
    Acked-by: default avatarGreg KH <gregkh@suse.de>
    Acked-by: default avatarVivek Goyal <vgoyal@redhat.com>
    Cc: kexec@lists.infradead.org
    Cc: yhlu.kernel@gmail.com
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    69ac9cd6
memmap.c 5.51 KB