18 Aug, 2011

1 commit

  • This allows the cast in lowmem_page_address (introduced as a warning
    fixup to 33dd4e0ec911 "mm: make some struct page's const") to be
    removed.

    Propagate const'ness to page_to_section() as well since it is required
    by __page_to_pfn.

    Signed-off-by: Ian Campbell
    Acked-by: Rik van Riel
    Cc: Andrea Arcangeli
    Cc: Michel Lespinasse
    Cc: Mel Gorman
    Cc: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Campbell
     

04 Dec, 2009

1 commit

  • That is "success", "unknown", "through", "performance", "[re|un]mapping"
    , "access", "default", "reasonable", "[con]currently", "temperature"
    , "channel", "[un]used", "application", "example","hierarchy", "therefore"
    , "[over|under]flow", "contiguous", "threshold", "enough" and others.

    Signed-off-by: André Goddard Rosa
    Signed-off-by: Jiri Kosina

    André Goddard Rosa
     

07 Jan, 2009

1 commit


25 Dec, 2008

1 commit

  • For CONFIG_SPARSEMEM_VMEMMAP=y on s390 I get warnings like

    init/main.c: In function 'start_kernel':
    init/main.c:641: warning: format '%08lx' expects type 'long unsigned int', but argument 2 has type 'int'

    The warning can be suppressed with a cast to unsigned long in the
    CONFIG_SPARSEMEM_VMEMMAP=y version of __page_to_pfn.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     

09 Nov, 2008

1 commit

  • Fix the __pfn_to_page(pfn) macro so that it doesn't evaluate its
    argument twice in the CONFIG_DISCONTIGMEM=y case, because 'pfn' may
    be a result of a funtion call having side effects.

    For example, the hibernation code applies pfn_to_page(pfn) to the
    result of a function returning the pfn corresponding to the next set
    bit in a bitmap and the current bit position is modified on each
    call. This leads to "interesting" failures for CONFIG_DISCONTIGMEM=y
    due to the current behavior of __pfn_to_page(pfn).

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     

30 Apr, 2008

1 commit


17 Oct, 2007

1 commit

  • SPARSEMEM is a pretty nice framework that unifies quite a bit of code over all
    the arches. It would be great if it could be the default so that we can get
    rid of various forms of DISCONTIG and other variations on memory maps. So far
    what has hindered this are the additional lookups that SPARSEMEM introduces
    for virt_to_page and page_address. This goes so far that the code to do this
    has to be kept in a separate function and cannot be used inline.

    This patch introduces a virtual memmap mode for SPARSEMEM, in which the memmap
    is mapped into a virtually contigious area, only the active sections are
    physically backed. This allows virt_to_page page_address and cohorts become
    simple shift/add operations. No page flag fields, no table lookups, nothing
    involving memory is required.

    The two key operations pfn_to_page and page_to_page become:

    #define __pfn_to_page(pfn) (vmemmap + (pfn))
    #define __page_to_pfn(page) ((page) - vmemmap)

    By having a virtual mapping for the memmap we allow simple access without
    wasting physical memory. As kernel memory is typically already mapped 1:1
    this introduces no additional overhead. The virtual mapping must be big
    enough to allow a struct page to be allocated and mapped for all valid
    physical pages. This vill make a virtual memmap difficult to use on 32 bit
    platforms that support 36 address bits.

    However, if there is enough virtual space available and the arch already maps
    its 1-1 kernel space using TLBs (f.e. true of IA64 and x86_64) then this
    technique makes SPARSEMEM lookups even more efficient than CONFIG_FLATMEM.
    FLATMEM needs to read the contents of the mem_map variable to get the start of
    the memmap and then add the offset to the required entry. vmemmap is a
    constant to which we can simply add the offset.

    This patch has the potential to allow us to make SPARSMEM the default (and
    even the only) option for most systems. It should be optimal on UP, SMP and
    NUMA on most platforms. Then we may even be able to remove the other memory
    models: FLATMEM, DISCONTIG etc.

    [apw@shadowen.org: config cleanups, resplit code etc]
    [kamezawa.hiroyu@jp.fujitsu.com: Fix sparsemem_vmemmap init]
    [apw@shadowen.org: vmemmap: remove excess debugging]
    [apw@shadowen.org: simplify initialisation code and reduce duplication]
    [apw@shadowen.org: pull out the vmemmap code into its own file]
    Signed-off-by: Christoph Lameter
    Signed-off-by: Andy Whitcroft
    Acked-by: Mel Gorman
    Cc: "Luck, Tony"
    Cc: Andi Kleen
    Cc: "David S. Miller"
    Cc: Paul Mackerras
    Cc: Benjamin Herrenschmidt
    Cc: KAMEZAWA Hiroyuki
    Signed-off-by: KAMEZAWA Hiroyuki
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

12 Feb, 2007

1 commit


23 Jun, 2006

1 commit

  • We have architectures where the size of page_to_pfn and pfn_to_page are
    significant enough to overall image size that they wish to push them out of
    line. However, in the process we have grown a second copy of the
    implementation of each of these routines for each memory model. Share the
    implmentation exposing it either inline or out-of-line as required.

    Signed-off-by: Andy Whitcroft
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andy Whitcroft
     

28 Mar, 2006

2 commits

  • This patch removes zone_mem_map.

    pfn_to_page uses pgdat, page_to_pfn uses zone. page_to_pfn can use pgdat
    instead of zone, which is only one user of zone_mem_map. By modifing it,
    we can remove zone_mem_map.

    Signed-off-by: KAMEZAWA Hiroyuki
    Cc: Dave Hansen
    Cc: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • There are 3 memory models, FLATMEM, DISCONTIGMEM, SPARSEMEM.
    Each arch has its own page_to_pfn(), pfn_to_page() for each models.
    But most of them can use the same arithmetic.

    This patch adds asm-generic/memory_model.h, which includes generic
    page_to_pfn(), pfn_to_page() definitions for each memory model.

    When CONFIG_OUT_OF_LINE_PFN_TO_PAGE=y, out-of-line functions are
    used instead of macro. This is enabled by some archs and reduces
    text size.

    Signed-off-by: KAMEZAWA Hiroyuki
    Cc: Hugh Dickins
    Cc: Andi Kleen
    Cc: Paul Mackerras
    Cc: Benjamin Herrenschmidt
    Cc: Richard Henderson
    Cc: Ivan Kokshaysky
    Cc: Russell King
    Cc: Ian Molton
    Cc: Mikael Starvik
    Cc: David Howells
    Cc: Yoshinori Sato
    Cc: Hirokazu Takata
    Cc: Ralf Baechle
    Cc: Kyle McMartin
    Cc: Heiko Carstens
    Cc: Martin Schwidefsky
    Cc: Paul Mundt
    Cc: Kazumoto Kojima
    Cc: Richard Curnow
    Cc: William Lee Irwin III
    Cc: "David S. Miller"
    Cc: Jeff Dike
    Cc: Paolo 'Blaisorblade' Giarrusso
    Cc: Miles Bader
    Cc: Chris Zankel
    Cc: "Luck, Tony"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki