19 Jan, 2010

6 commits


18 Jan, 2010

12 commits

  • The mem_init_done test makes sure that this path is only entered in
    __init cases, so leaving ioremap_fixed() as __init and flagging the
    caller __init_refok is sufficient.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • iounmap() should balance whatever is done by ioremap(). Presently
    ioremap() can do any of fixed mappings, PMB mappings, or page table
    mappings. Presently only the latter two are handled through the standard
    unmap path, so tie in the fixed unmapping, too.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • This converts iounmap_fixed() to return success/error if it handled the
    unmap request or not. At the same time, drop the __init label, as this
    can be called in to later.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • There is nothing of interest in the _64 version anymore, so the _32 one
    can be renamed and used unconditionally.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • Presently the fixed ioremap API is only defined when CONFIG_IOREMAP_FIXED
    is set. As we want to call in to it unconditionally, provide a stubbed
    out interface.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • This adds in a mem_init_done to work out when a standard ioremap() is
    possible, falling back to the fixmap based ioremap otherwise.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • Paul Mundt
     
  • Paul Mundt
     
  • This tosses in a local_irq_enable()/disable() pair around the init_fpu()
    callsite in the FPU state restore exception handler. Fixes up a slab BUG
    triggered by making a slab cache allocation that can sleep whilst
    irqs_disabled(). This follows the behaviour undertaken by the x86
    implementation.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • More and more boards are going to start shipping that boot with the MMU
    in 32BIT mode by default. Previously we relied on the bootloader to
    setup PMB mappings for use by the kernel but we also need to cater for
    boards whose bootloaders don't set them up.

    If CONFIG_PMB_LEGACY is not enabled we have full control over our PMB
    mappings and can compress our address space. Usually, the distance
    between the the cached and uncached mappings of RAM is always 512MB,
    however we can compress the distance to be the amount of RAM on the
    board.

    pmb_init() now becomes much simpler. It no longer has to calculate any
    mappings, it just has to synchronise the software PMB table with the
    hardware.

    Tested on SDK7786 and SH7785LCR.

    Signed-off-by: Matt Fleming
    Signed-off-by: Paul Mundt

    Matt Fleming
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
    do_add_mount() should sanitize mnt_flags
    CIFS shouldn't make mountpoints shrinkable
    mnt_flags fixes in do_remount()
    attach_recursive_mnt() needs to hold vfsmount_lock over set_mnt_shared()
    may_umount() needs namespace_sem
    Fix configfs leak
    Fix the -ESTALE handling in do_filp_open()
    ecryptfs: Fix refcnt leak on ecryptfs_follow_link() error path
    Fix ACC_MODE() for real
    Unrot uml mconsole a bit
    hppfs: handle ->put_link()
    Kill 9p readlink()
    fix autofs/afs/etc. magic mountpoint breakage

    Linus Torvalds
     
  • The sym_is() compares a symbol in an attempt to automatically skip symbol
    prefixes. It does this first by searching the real symbol with the normal
    unprefixed symbol. But then it uses the length of the original symbol to
    check the end of the substring instead of the length of the symbol it is
    looking for. On non-prefixed arches, this is effectively the same thing,
    so there is no problem. On prefixed-arches, since this is exceeds by just
    one byte, a crash is rare and it is usually a NUL byte anyways. But every
    once in a blue moon, you get the right page alignment and it segfaults.

    For example, on the Blackfin arch, sym_is() will be called with the real
    symbol "___mod_usb_device_table" as "symbol" when looking for the normal
    symbol "__mod_usb_device_table" as "name". The substring will thus return
    one byte into "symbol" and store it into "match". But then "match" will
    be indexed with the length of "symbol" instead of "name" and so we will
    exceed the storage. i.e. the code ends up doing:
    char foo[] = "abc"; return foo[strlen(foo)+1] == '\0';

    Signed-off-by: Mike Frysinger
    Signed-off-by: Rusty Russell
    Signed-off-by: Linus Torvalds

    Mike Frysinger
     

17 Jan, 2010

22 commits

  • commit f2260e6b (page allocator: update NR_FREE_PAGES only as necessary)
    made one minor regression. if __rmqueue() was failed, NR_FREE_PAGES stat
    go wrong. this patch fixes it.

    Signed-off-by: KOSAKI Motohiro
    Cc: Mel Gorman
    Reviewed-by: Minchan Kim
    Reported-by: Huang Shijie
    Reviewed-by: Christoph Lameter
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KOSAKI Motohiro
     
  • * 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
    i2c: Do not use device name after device_unregister
    i2c/pca: Don't use *_interruptible
    i2c-ali1563: Remove sparse warnings
    i2c: Test off by one in {piix4,vt596}_transaction()
    i2c-core: Storage class should be before const qualifier

    Linus Torvalds
     
  • …git/tip/linux-2.6-tip

    * 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    x86, uv: Ensure hub revision set for all ACPI modes.
    x86, uv: Add function retrieving node controller revision number
    x86: xen: 64-bit kernel RPL should be 0
    x86: kernel_thread() -- initialize SS to a known state
    x86/agp: Fix agp_amd64_init and agp_amd64_cleanup
    x86: SGI UV: Fix mapping of MMIO registers
    x86: mce.h: Fix warning in header checks

    Linus Torvalds
     
  • …/git/tip/linux-2.6-tip

    * 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    futexes: Remove rw parameter from get_futex_key()

    Linus Torvalds
     
  • …/git/tip/linux-2.6-tip

    * 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    perf tools: Check if /dev/null can be used as the -o gcc argument
    perf tools: Move QUIET_STDERR def to before first use
    perf: Stop stack frame walking off kernel addresses boundaries

    Linus Torvalds
     
  • …nel/git/tip/linux-2.6-tip

    * 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    tracing/filters: Add comment for match callbacks
    tracing/filters: Fix MATCH_FULL filter matching for PTR_STRING
    tracing/filters: Fix MATCH_MIDDLE_ONLY filter matching
    lib: Introduce strnstr()
    tracing/filters: Fix MATCH_END_ONLY filter matching
    tracing/filters: Fix MATCH_FRONT_ONLY filter matching
    ftrace: Fix MATCH_END_ONLY function filter
    tracing/x86: Derive arch from bits argument in recordmcount.pl
    ring-buffer: Add rb_list_head() wrapper around new reader page next field
    ring-buffer: Wrap a list.next reference with rb_list_head()

    Linus Torvalds
     
  • Fix divide by zero and broken output. Commit 600ce1a0fa ("fix clock
    setting for Samsung SoC Framebuffer") introduced a mandatory refresh
    parameter to the platform data for the S3C framebuffer but did not
    introduce any validation code, causing existing platforms (none of which
    have refresh set) to divide by zero whenever the framebuffer is
    configured, generating warnings and unusable output.

    Ben Dooks noted several problems with the patch:

    - The platform data supplies the pixclk directly and should already
    have taken care of the refresh rate.
    - The addition of a window ID parameter doesn't help since only the
    root framebuffer can control the pixclk.
    - pixclk is specified in picoseconds (rather than Hz) as the patch
    assumed.

    and suggests reverting the commit so do that. Without fixing this no
    mainline user of the driver will produce output.

    [akpm@linux-foundation.org: don't revert the correct bit]
    Signed-off-by: Mark Brown
    Cc: InKi Dae
    Cc: Kyungmin Park
    Cc: Krzysztof Helt
    Cc: Marek Szyprowski
    Cc: Ben Dooks
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mark Brown
     
  • Fix a problem in NOMMU mmap with ramfs whereby a shared mmap can happen
    over the end of a truncation. The problem is that
    ramfs_nommu_check_mappings() checks that the reduced file size against the
    VMA tree, but not the vm_region tree.

    The following sequence of events can cause the problem:

    fd = open("/tmp/x", O_RDWR|O_TRUNC|O_CREAT, 0600);
    ftruncate(fd, 32 * 1024);
    a = mmap(NULL, 32 * 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    b = mmap(NULL, 16 * 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    munmap(a, 32 * 1024);
    ftruncate(fd, 16 * 1024);
    c = mmap(NULL, 32 * 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

    Mapping 'a' creates a vm_region covering 32KB of the file. Mapping 'b'
    sees that the vm_region from 'a' is covering the region it wants and so
    shares it, pinning it in memory.

    Mapping 'a' then goes away and the file is truncated to the end of VMA
    'b'. However, the region allocated by 'a' is still in effect, and has
    _not_ been reduced.

    Mapping 'c' is then created, and because there's a vm_region covering the
    desired region, get_unmapped_area() is _not_ called to repeat the check,
    and the mapping is granted, even though the pages from the latter half of
    the mapping have been discarded.

    However:

    d = mmap(NULL, 16 * 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

    Mapping 'd' should work, and should end up sharing the region allocated by
    'a'.

    To deal with this, we shrink the vm_region struct during the truncation,
    lest do_mmap_pgoff() take it as licence to share the full region
    automatically without calling the get_unmapped_area() file op again.

    Signed-off-by: David Howells
    Acked-by: Al Viro
    Cc: Greg Ungerer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • Fix the race between the truncation of a ramfs file and an attempt to make
    a shared mmap of region of that file.

    The problem is that do_mmap_pgoff() calls f_op->get_unmapped_area() to
    verify that the file region is made of contiguous pages and to find its
    base address - but there isn't any locking to guarantee this region until
    vma_prio_tree_insert() is called by add_vma_to_mm().

    Note that moving the functionality into f_op->mmap() doesn't help as that
    is also called before vma_prio_tree_insert().

    Instead make ramfs_nommu_check_mappings() grab nommu_region_sem whilst it
    does its checks. This means that this function will wait whilst mmaps
    take place.

    Signed-off-by: David Howells
    Acked-by: Al Viro
    Cc: Greg Ungerer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • get_unmapped_area() is unnecessary for NOMMU as no-one calls it.

    Signed-off-by: David Howells
    Acked-by: Al Viro
    Cc: Greg Ungerer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • In split_vma(), there's no need to check if the VMA being split has a
    region that's in use by more than one VMA because:

    (1) The preceding test prohibits splitting of non-anonymous VMAs and regions
    (eg: file or chardev backed VMAs).

    (2) Anonymous regions can't be mapped multiple times because there's no handle
    by which to refer to the already existing region.

    (3) If a VMA has previously been split, then the region backing it has also
    been split into two regions, each of usage 1.

    Signed-off-by: David Howells
    Acked-by: Al Viro
    Cc: Greg Ungerer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • The vm_usage count field in struct vm_region does not need to be atomic as
    it's only even modified whilst nommu_region_sem is write locked.

    Signed-off-by: David Howells
    Acked-by: Al Viro
    Cc: Greg Ungerer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • Commit c4caa778157dbbf04116f0ac2111e389b5cd7a29 ("file
    ->get_unmapped_area() shouldn't duplicate work of get_unmapped_area()")
    broke SYSV SHM for NOMMU by taking away the pointer to
    shm_get_unmapped_area() from shm_file_operations.

    Put it back conditionally on CONFIG_MMU=n.

    file->f_ops->get_unmapped_area() is used to find out the base address for a
    mapping of a mappable chardev device or mappable memory-based file (such as a
    ramfs file). It needs to be called prior to file->f_ops->mmap() being called.

    Signed-off-by: David Howells
    Acked-by: Al Viro
    Cc: Greg Ungerer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • The function prototype mismatches in call stack:

    [] print_block_size+0x58/0x60
    [] sysdev_class_show+0x1f/0x30
    [] sysfs_read_file+0xcb/0x1f0
    [] vfs_read+0xc8/0x180

    Due to prototype mismatch, print_block_size() will sprintf() into
    *attribute instead of *buf, hence user space will read the initial
    zeros from *buf:
    $ hexdump /sys/devices/system/memory/block_size_bytes
    0000000 0000 0000 0000 0000
    0000008

    After patch:
    cat /sys/devices/system/memory/block_size_bytes
    0x8000000

    This complements commits c29af9636 and 4a0b2b4dbe.

    Signed-off-by: Wu Fengguang
    Cc: Andi Kleen
    Cc: Greg Kroah-Hartman
    Cc: "Zheng, Shaohui"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wu Fengguang
     
  • Signed-off-by: Wu Fengguang
    Cc: Andi Kleen
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wu Fengguang
     
  • Current mem_cgroup_force_empty() only ensures mem->res.usage == 0 on
    success. But this doesn't guarantee memcg's LRU is really empty, because
    there are some cases in which !PageCgrupUsed pages exist on memcg's LRU.

    For example:
    - Pages can be uncharged by its owner process while they are on LRU.
    - race between mem_cgroup_add_lru_list() and __mem_cgroup_uncharge_common().

    So there can be a case in which the usage is zero but some of the LRUs are not empty.

    OTOH, mem_cgroup_del_lru_list(), which can be called asynchronously with
    rmdir, accesses the mem_cgroup, so this access can cause a problem if it
    races with rmdir because the mem_cgroup might have been freed by rmdir.

    Actually, I saw a bug which seems to be caused by this race.

    [1530745.949906] BUG: unable to handle kernel NULL pointer dereference at 0000000000000230
    [1530745.950651] IP: [] mem_cgroup_del_lru_list+0x30/0x80
    [1530745.950651] PGD 3863de067 PUD 3862c7067 PMD 0
    [1530745.950651] Oops: 0002 [#1] SMP
    [1530745.950651] last sysfs file: /sys/devices/system/cpu/cpu7/cache/index1/shared_cpu_map
    [1530745.950651] CPU 3
    [1530745.950651] Modules linked in: configs ipt_REJECT xt_tcpudp iptable_filter ip_tables x_tables bridge stp nfsd nfs_acl auth_rpcgss exportfs autofs4 hidp rfcomm l2cap crc16 bluetooth lockd sunrpc ib_iser rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr iscsi_tcp bnx2i cnic uio ipv6 cxgb3i cxgb3 mdio libiscsi_tcp libiscsi scsi_transport_iscsi dm_mirror dm_multipath scsi_dh video output sbs sbshc battery ac lp kvm_intel kvm sg ide_cd_mod cdrom serio_raw tpm_tis tpm tpm_bios acpi_memhotplug button parport_pc parport rtc_cmos rtc_core rtc_lib e1000 i2c_i801 i2c_core pcspkr dm_region_hash dm_log dm_mod ata_piix libata shpchp megaraid_mbox sd_mod scsi_mod megaraid_mm ext3 jbd uhci_hcd ohci_hcd ehci_hcd [last unloaded: freq_table]
    [1530745.950651] Pid: 19653, comm: shmem_test_02 Tainted: G M 2.6.32-mm1-00701-g2b04386 #3 Express5800/140Rd-4 [N8100-1065]
    [1530745.950651] RIP: 0010:[] [] mem_cgroup_del_lru_list+0x30/0x80
    [1530745.950651] RSP: 0018:ffff8803863ddcb8 EFLAGS: 00010002
    [1530745.950651] RAX: 00000000000001e0 RBX: ffff8803abc02238 RCX: 00000000000001e0
    [1530745.950651] RDX: 0000000000000000 RSI: ffff88038611a000 RDI: ffff8803abc02238
    [1530745.950651] RBP: ffff8803863ddcc8 R08: 0000000000000002 R09: ffff8803a04c8643
    [1530745.950651] R10: 0000000000000000 R11: ffffffff810c7333 R12: 0000000000000000
    [1530745.950651] R13: ffff880000017f00 R14: 0000000000000092 R15: ffff8800179d0310
    [1530745.950651] FS: 0000000000000000(0000) GS:ffff880017800000(0000) knlGS:0000000000000000
    [1530745.950651] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    [1530745.950651] CR2: 0000000000000230 CR3: 0000000379d87000 CR4: 00000000000006e0
    [1530745.950651] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [1530745.950651] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    [1530745.950651] Process shmem_test_02 (pid: 19653, threadinfo ffff8803863dc000, task ffff88038612a8a0)
    [1530745.950651] Stack:
    [1530745.950651] ffffea00040c2fe8 0000000000000000 ffff8803863ddd98 ffffffff810c739a
    [1530745.950651] 00000000863ddd18 000000000000000c 0000000000000000 0000000000000000
    [1530745.950651] 0000000000000002 0000000000000000 ffff8803863ddd68 0000000000000046
    [1530745.950651] Call Trace:
    [1530745.950651] [] release_pages+0x142/0x1e7
    [1530745.950651] [] ? pagevec_move_tail+0x6e/0x112
    [1530745.950651] [] pagevec_move_tail+0xfd/0x112
    [1530745.950651] [] lru_add_drain+0x76/0x94
    [1530745.950651] [] exit_mmap+0x6e/0x145
    [1530745.950651] [] mmput+0x5e/0xcf
    [1530745.950651] [] exit_mm+0x11c/0x129
    [1530745.950651] [] ? audit_free+0x196/0x1c9
    [1530745.950651] [] do_exit+0x1f5/0x6b7
    [1530745.950651] [] ? up_read+0x2b/0x2f
    [1530745.950651] [] ? lockdep_sys_exit_thunk+0x35/0x67
    [1530745.950651] [] do_group_exit+0x83/0xb0
    [1530745.950651] [] sys_exit_group+0x17/0x1b
    [1530745.950651] [] system_call_fastpath+0x16/0x1b
    [1530745.950651] Code: 54 53 0f 1f 44 00 00 83 3d cc 29 7c 00 00 41 89 f4 75 63 eb 4e 48 83 7b 08 00 75 04 0f 0b eb fe 48 89 df e8 18 f3 ff ff 44 89 e2 ff 4c d0 50 48 8b 05 2b 2d 7c 00 48 39 43 08 74 39 48 8b 4b
    [1530745.950651] RIP [] mem_cgroup_del_lru_list+0x30/0x80
    [1530745.950651] RSP
    [1530745.950651] CR2: 0000000000000230
    [1530745.950651] ---[ end trace c3419c1bb8acc34f ]---
    [1530745.950651] Fixing recursive fault but reboot is needed!

    The problem here is pages on LRU may contain pointer to stale memcg. To
    make res->usage to be 0, all pages on memcg must be uncharged or moved to
    another(parent) memcg. Moved page_cgroup have already removed from
    original LRU, but uncharged page_cgroup contains pointer to memcg withou
    PCG_USED bit. (This asynchronous LRU work is for improving performance.)
    If PCG_USED bit is not set, page_cgroup will never be added to memcg's
    LRU. So, about pages not on LRU, they never access stale pointer. Then,
    what we have to take care of is page_cgroup _on_ LRU list. This patch
    fixes this problem by making mem_cgroup_force_empty() visit all LRUs
    before exiting its loop and guarantee there are no pages on its LRU.

    Signed-off-by: Daisuke Nishimura
    Acked-by: KAMEZAWA Hiroyuki
    Cc: Balbir Singh
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daisuke Nishimura
     
  • Fix fixes the following warnings by renaming the driver structures to be
    suffixed with _driver.

    WARNING: drivers/virtio/virtio_balloon.o(.data+0x88): Section mismatch in reference from the variable virtio_balloon to the function .devexit.text:virtballoon_remove()

    WARNING: drivers/char/hw_random/virtio-rng.o(.data+0x88): Section mismatch in reference from the variable virtio_rng to the function .devexit.text:virtrng_remove()

    Signed-off-by: Jeff Mahoney
    Acked-by: Rusty Russell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     
  • Commit f50de2d3 (vmscan: have kswapd sleep for a short interval and double
    check it should be asleep) can cause kswapd to enter an infinite loop if
    running on a single-CPU system. If all zones are unreclaimble,
    sleeping_prematurely return 1 and kswapd will call balance_pgdat() again.
    but it's totally meaningless, balance_pgdat() doesn't anything against
    unreclaimable zone!

    Signed-off-by: KOSAKI Motohiro
    Cc: Mel Gorman
    Reported-by: Will Newton
    Reviewed-by: Minchan Kim
    Reviewed-by: Rik van Riel
    Tested-by: Will Newton
    Reviewed-by: Wu Fengguang
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KOSAKI Motohiro
     
  • The change in acpi_cpufreq to use smp_call_function_any causes a warning
    when it is called since the function erroneously passes the cpu id to
    cpumask_of_node rather than the node that the cpu is on. Fix this.

    cpumask_of_node(3): node > nr_node_ids(1)
    Pid: 1, comm: swapper Not tainted 2.6.33-rc3-00097-g2c1f189 #223
    Call Trace:
    [] cpumask_of_node+0x23/0x58
    [] smp_call_function_any+0x65/0xfa
    [] ? do_drv_read+0x0/0x2f
    [] get_cur_val+0xb0/0x102
    [] get_cur_freq_on_cpu+0x74/0xc5
    [] acpi_cpufreq_cpu_init+0x417/0x515
    [] ? __down_write+0xb/0xd
    [] cpufreq_add_dev+0x278/0x922

    Signed-off-by: David John
    Cc: Suresh Siddha
    Cc: Rusty Russell
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David John
     
  • Add BUILD_BUG_ON_NOT_POWER_OF_2()

    When code relies on a constant being a power of 2:

    #define FOO 512 /* must be a power of 2 */

    it would be nice to be able to do:

    BUILD_BUG_ON(!is_power_of_2(FOO));

    However applying an inline function does not result in a compile-time
    constant that can be used with BUILD_BUG_ON(), so trying that gives
    results in:

    error: bit-field '' width not an integer constant

    As suggested by akpm, rather than monkeying around with is_power_of_2()
    and risking gcc warts about constant expressions, just create a macro
    BUILD_BUG_ON_NOT_POWER_OF_2() to encapsulate this common requirement.

    Signed-off-by: Roland Dreier
    Cc: Bart Van Assche
    Cc: David Dillow
    Cc: "Robert P. J. Day"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roland Dreier
     
  • The current check for 'backward merging' within add_active_range() does
    not seem correct. start_pfn must be compared against
    early_node_map[i].start_pfn (and NOT against .end_pfn) to find out whether
    the new region is backward-mergeable with the existing range.

    Signed-off-by: Kazuhisa Ichikawa
    Acked-by: David Rientjes
    Cc: KOSAKI Motohiro
    Cc: Mel Gorman
    Cc: Christoph Lameter
    Cc: Johannes Weiner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kazuhisa Ichikawa
     
  • On my first try using them I missed that the fifos need to be power of
    two, resulting in a runtime bug. Document that requirement everywhere
    (and fix one grammar bug)

    Signed-off-by: Andi Kleen
    Acked-by: Stefani Seibold
    Cc: Roland Dreier
    Cc: Dmitry Torokhov
    Cc: Andy Walls
    Cc: Vikram Dhillon
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andi Kleen