09 Dec, 2011

22 commits

  • Now all ARCH_POPULATES_NODE_MAP archs select HAVE_MEBLOCK_NODE_MAP -
    there's no user of early_node_map[] left. Kill early_node_map[] and
    replace ARCH_POPULATES_NODE_MAP with HAVE_MEMBLOCK_NODE_MAP. Also,
    relocate for_each_mem_pfn_range() and helper from mm.h to memblock.h
    as page_alloc.c would no longer host an alternative implementation.

    This change is ultimately one to one mapping and shouldn't cause any
    observable difference; however, after the recent changes, there are
    some functions which now would fit memblock.c better than page_alloc.c
    and dependency on HAVE_MEMBLOCK_NODE_MAP instead of HAVE_MEMBLOCK
    doesn't make much sense on some of them. Further cleanups for
    functions inside HAVE_MEMBLOCK_NODE_MAP in mm.h would be nice.

    -v2: Fix compile bug introduced by mis-spelling
    CONFIG_HAVE_MEMBLOCK_NODE_MAP to CONFIG_MEMBLOCK_HAVE_NODE_MAP in
    mmzone.h. Reported by Stephen Rothwell.

    Signed-off-by: Tejun Heo
    Cc: Stephen Rothwell
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu
    Cc: Tony Luck
    Cc: Ralf Baechle
    Cc: Martin Schwidefsky
    Cc: Chen Liqin
    Cc: Paul Mundt
    Cc: "David S. Miller"
    Cc: "H. Peter Anvin"

    Tejun Heo
     
  • score used early_node_map[] just to prime free_area_init_nodes(). Now
    memblock can be used for the same purpose and early_node_map[] is
    scheduled to be dropped. Use memblock instead.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu
    Cc: Chen Liqin
    Cc: Lennox Wu

    Tejun Heo
     
  • s390 used early_node_map[] just to prime free_area_init_nodes(). Now
    memblock can be used for the same purpose and early_node_map[] is
    scheduled to be dropped. Use memblock instead.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: linux-s390@vger.kernel.org

    Tejun Heo
     
  • mips used early_node_map[] just to prime free_area_init_nodes(). Now
    memblock can be used for the same purpose and early_node_map[] is
    scheduled to be dropped. Use memblock instead.

    Signed-off-by: Tejun Heo
    Acked-by: Ralf Baechle
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu
    Cc: linux-mips@linux-mips.org

    Tejun Heo
     
  • ia64 used early_node_map[] just to prime free_area_init_nodes(). Now
    memblock can be used for the same purpose and early_node_map[] is
    scheduled to be dropped. Use memblock instead.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu
    Cc: Tony Luck
    Cc: Fenghua Yu
    Cc: linux-ia64@vger.kernel.org

    Tejun Heo
     
  • sh doesn't access early_node_map[] directly and enabling
    HAVE_MEMBLOCK_NODE_MAP is trivial - replacing add_active_range() calls
    with memblock_set_node() and selecting HAVE_MEMBLOCK_NODE_MAP is
    enough.

    Signed-off-by: Tejun Heo
    Cc: Paul Mundt
    Cc: linux-sh@vger.kernel.org

    Tejun Heo
     
  • sparc doesn't access early_node_map[] directly and enabling
    HAVE_MEMBLOCK_NODE_MAP is trivial - replacing add_active_range() calls
    with memblock_set_node() and selecting HAVE_MEMBLOCK_NODE_MAP is
    enough.

    -v2: Use select in Kconfig instead as suggested by Sam Ravnborg.

    Signed-off-by: Tejun Heo
    Acked-by: "David S. Miller"
    Cc: Sam Ravnborg
    Cc: sparclinux@vger.kernel.org

    Tejun Heo
     
  • powerpc doesn't access early_node_map[] directly and enabling
    HAVE_MEMBLOCK_NODE_MAP is trivial - replacing add_active_range() calls
    with memblock_set_node() and selecting HAVE_MEMBLOCK_NODE_MAP is
    enough.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • Implement memblock_add_node() which can add a new memblock memory
    region with specific node ID.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • The only function of memblock_analyze() is now allowing resize of
    memblock region arrays. Rename it to memblock_allow_resize() and
    update its users.

    * The following users remain the same other than renaming.

    arm/mm/init.c::arm_memblock_init()
    microblaze/kernel/prom.c::early_init_devtree()
    powerpc/kernel/prom.c::early_init_devtree()
    openrisc/kernel/prom.c::early_init_devtree()
    sh/mm/init.c::paging_init()
    sparc/mm/init_64.c::paging_init()
    unicore32/mm/init.c::uc32_memblock_init()

    * In the following users, analyze was used to update total size which
    is no longer necessary.

    powerpc/kernel/machine_kexec.c::reserve_crashkernel()
    powerpc/kernel/prom.c::early_init_devtree()
    powerpc/mm/init_32.c::MMU_init()
    powerpc/mm/tlb_nohash.c::__early_init_mmu()
    powerpc/platforms/ps3/mm.c::ps3_mm_add_memory()
    powerpc/platforms/embedded6xx/wii.c::wii_memory_fixups()
    sh/kernel/machine_kexec.c::reserve_crashkernel()

    * x86/kernel/e820.c::memblock_x86_fill() was directly setting
    memblock_can_resize before populating memblock and calling analyze
    afterwards. Call memblock_allow_resize() before start populating.

    memblock_can_resize is now static inside memblock.c.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu
    Cc: Russell King
    Cc: Michal Simek
    Cc: Paul Mundt
    Cc: "David S. Miller"
    Cc: Guan Xuetao
    Cc: "H. Peter Anvin"

    Tejun Heo
     
  • Total size of memory regions was calculated by memblock_analyze()
    requiring explicitly calling the function between operations which can
    change memory regions and possible users of total size, which is
    cumbersome and fragile.

    This patch makes each memblock_type track total size automatically
    with minor modifications to memblock manipulation functions and remove
    requirements on calling memblock_analyze(). [__]memblock_dump_all()
    now also dumps the total size of reserved regions.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • * early_init_devtree(): Total memory size is aligned to PAGE_SIZE;
    however, alignment isn't enforced if memory_limit is explicitly
    specified. Simplify the logic and always apply PAGE_SIZE alignment.

    * MMU_init(): memblock regions is truncated by directly modifying
    memblock.memory.cnt. This is incomplete (reserved array is not
    truncated) and unnecessarily low level hindering further memblock
    improvments. Use memblock_enforce_memory_limit() instead.

    * wii_memory_fixups(): Unnecessarily low level direct manipulation of
    memblock regions. The same result can be achieved using properly
    abstracted operations. Reimplement using memblock API.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • With recent updates, the basic memblock operations are robust enough
    that there's no reason for memblock_enfore_memory_limit() to directly
    manipulate memblock region arrays. Reimplement it using
    __memblock_remove().

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • Allow memblock users to specify range where @base + @size overflows
    and automatically cap it at maximum. This makes the interface more
    robust and specifying till-the-end-of-memory easier.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • __memblock_remove()'s open coded region manipulation can be trivially
    replaced with memblock_islate_range(). This increases code sharing
    and eases improving region tracking.

    This pulls memblock_isolate_range() out of HAVE_MEMBLOCK_NODE_MAP.
    Make it use memblock_get_region_node() instead of assuming rgn->nid is
    available.

    -v2: Fixed build failure on !HAVE_MEMBLOCK_NODE_MAP caused by direct
    rgn->nid access.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • memblock_set_node() operates in three steps - break regions crossing
    boundaries, set nid and merge back regions. This patch separates the
    first part into a separate function - memblock_isolate_range(), which
    breaks regions crossing range boundaries and returns range index range
    for regions properly contained in the specified memory range.

    This doesn't introduce any behavior change and will be used to further
    unify region handling.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • memblock_init() initializes arrays for regions and memblock itself;
    however, all these can be done with struct initializers and
    memblock_init() can be removed. This patch kills memblock_init() and
    initializes memblock with struct initializer.

    The only difference is that the first dummy entries don't have .nid
    set to MAX_NUMNODES initially. This doesn't cause any behavior
    difference.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu
    Cc: Russell King
    Cc: Michal Simek
    Cc: Paul Mundt
    Cc: "David S. Miller"
    Cc: Guan Xuetao
    Cc: "H. Peter Anvin"

    Tejun Heo
     
  • memblock no longer depends on having one more entry at the end during
    addition making the sentinel entries at the end of region arrays not
    too useful. Remove the sentinels. This eases further updates.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • Add __memblock_dump_all() which dumps memblock configuration whether
    memblock_debug is enabled or not.

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • Make memblock_double_array(), __memblock_alloc_base() and
    memblock_alloc_nid() use memblock_reserve() instead of calling
    memblock_add_region() with reserved array directly. This eases
    debugging and updates to memblock_add_region().

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • memblock_{add|remove|free|reserve}() return either 0 or -errno but had
    long as return type. Chage it to int. Also, drop 'extern' from all
    prototypes in memblock.h - they are unnecessary and used
    inconsistently (especially if mm.h is included in the picture).

    Signed-off-by: Tejun Heo
    Cc: Benjamin Herrenschmidt
    Cc: Yinghai Lu

    Tejun Heo
     
  • 24aa07882b (memblock, x86: Replace memblock_x86_reserve/free_range()
    with generic ones) removed arch/x86/include/asm/memblock.h and dropped
    its inclusion from include/linux/memblock.h which breaks other
    architectures which depended on the generic memblock.h pulling in the
    arch specific one.

    However, the proper fix isn't adding back the asm inclusion. memblock
    doesn't have any arch dependent part and doesn't need arch specific
    header file and asm/memblock.h files are either practically empty or
    contain mostly unrelated arch specific stuff.

    * In microblaze, sh, powerpc, sparc and openrisc, asm/memblock.h is
    either empty or just contains unused MEMBLOCK_DBG() macro. Remove
    them.

    * In arm and unicore32, asm/memblock.h contains arch specific stuff.
    Include it directly from its users. It might be a good idea to
    rename the header file to avoid confusion.

    Signed-off-by: Tejun Heo
    Reported-by: "H. Peter Anvin"
    Cc: Yinghai Lu
    Cc: Russell King
    Cc: Michal Simek
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mundt
    Cc: "David S. Miller"
    Cc: Guan Xuetao

    Tejun Heo
     

29 Nov, 2011

1 commit

  • Conflicts & resolutions:

    * arch/x86/xen/setup.c

    dc91c728fd "xen: allow extra memory to be in multiple regions"
    24aa07882b "memblock, x86: Replace memblock_x86_reserve/free..."

    conflicted on xen_add_extra_mem() updates. The resolution is
    trivial as the latter just want to replace
    memblock_x86_reserve_range() with memblock_reserve().

    * drivers/pci/intel-iommu.c

    166e9278a3f "x86/ia64: intel-iommu: move to drivers/iommu/"
    5dfe8660a3d "bootmem: Replace work_with_active_regions() with..."

    conflicted as the former moved the file under drivers/iommu/.
    Resolved by applying the chnages from the latter on the moved
    file.

    * mm/Kconfig

    6661672053a "memblock: add NO_BOOTMEM config symbol"
    c378ddd53f9 "memblock, x86: Make ARCH_DISCARD_MEMBLOCK a config option"

    conflicted trivially. Both added config options. Just
    letting both add their own options resolves the conflict.

    * mm/memblock.c

    d1f0ece6cdc "mm/memblock.c: small function definition fixes"
    ed7b56a799c "memblock: Remove memblock_memory_can_coalesce()"

    confliected. The former updates function removed by the
    latter. Resolution is trivial.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

28 Nov, 2011

2 commits

  • * 'fbdev-for-linus' of git://github.com/schandinat/linux-2.6:
    viafb: correct sync polarity for OLPC DCON
    video:da8xx-fb: Disable and reset sequence on version2 of LCDC
    OMAPDSS: DISPC: skip scaling calculations when not scaling
    OMAPFB: fix compilation warnings due to missing include
    OMAPDSS: HDMI: fix returned HDMI pixel clock

    Linus Torvalds
     
  • Revert a hunk in drivers/net/wireless/ath/ath9k/hw.c introduced by
    commit 2577c6e8f232 ("ath9k_hw: Add support for AR946/8x chipsets") that
    caused a nasty regression to appear on my Acer Ferrari One (the box
    locks up entirely at random times after the wireless has been started
    without any way to get debug information out of it).

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Felix Fietkau
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     

27 Nov, 2011

2 commits

  • Fix build failure in staging iio driver:

    .../drivers/staging/iio/industrialio-core.c: In function 'iio_event_getfd':
    .../drivers/staging/iio/industrialio-core.c:262:32: error:
    'ev_int' undeclared (first use in this function)

    Also convert the rest of the function to use the new variable.

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

    Andy Whitcroft
     
  • * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
    powerpc/44x: Add mtd ndfc to the ppx44x defconfig
    powerpc: Fix compiliation with hugetlbfs enabled
    arch/powerpc/sysdev/ehv_pic.c: add missing kfree
    powerpc/fsl-lbc: Fix for fsl_upm
    drivers/edac/mpc85xx_edac.c: fix memory controller compatible for edac
    powerpc/qe: Fixup QE_General4 errata
    powerpc/85xx: Fix compile error on p3060_qds.c
    powerpc/p3060qds: Fix select of 'MPC8xxx_GPIO'
    powerpc/p1023: set IRQ[4:6,11] to active-high level sensitive for PCIe

    Linus Torvalds
     

26 Nov, 2011

2 commits


25 Nov, 2011

2 commits


24 Nov, 2011

9 commits

  • At this point, ehv_pic has been allocated but not stored anywhere, so it
    should be freed before leaving the function.

    A simplified version of the semantic match that finds this problem is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @exists@
    local idexpression x;
    statement S,S1;
    expression E;
    identifier fl;
    expression *ptr != NULL;
    @@

    x = \(kmalloc\|kzalloc\|kcalloc\)(...);
    ...
    if (x == NULL) S
    }
    when any
    when != true x == NULL
    x->fl
    ...>
    (
    if (x == NULL) S1
    |
    if (...) { ... when != x
    when forall
    (
    return \(0\|\|ptr\);
    |
    * return ...;
    )
    }
    )
    //

    Signed-off-by: Julia Lawall
    Acked-by: Timur Tabi
    Signed-off-by: Kumar Gala

    Julia Lawall
     
  • If Freescale LBC driver fails to initialise itself from device tree, then
    internal structure is freed only but not NULL-fied. As result functions
    fsl_lbc_find() after checking the structure is not NULL are trying to
    access device registers.

    Signed-off-by: Alexandre Rusev
    Signed-off-by: Kumar Gala

    Alexandre Rusev
     
  • compatible in dts has been changed, so the driver needs to be updated
    accordingly.

    Signed-off-by: Shaohui Xie
    Cc: Grant Likely
    Cc: Benjamin Herrenschmidt
    Signed-off-by: Andrew Morton
    Signed-off-by: Kumar Gala

    Shaohui Xie
     
  • QE_General4 should only round up the divisor iff divisor is > 3.
    Rounding up lower divisors makes the error too big, causing USB
    on MPC832x to fail.

    Signed-off-by: Joakim Tjernlund
    Acked-by: Timur Tabi
    Signed-off-by: Kumar Gala

    Joakim Tjernlund
     
  • arch/powerpc/platforms/85xx/p3060_qds.c: In function '__machine_initcall_p3060_qds_declare_of_platform_devices':
    arch/powerpc/platforms/85xx/p3060_qds.c:73:1: error: implicit declaration of function 'declare_of_platform_devices'

    declare_of_platform_devices should have been corenet_ds_publish_devices.

    Signed-off-by: Kumar Gala

    Kumar Gala
     
  • The driver for the Freescale P3060 QDS got added by commit 96cc017c5b
    ("[...] Add support for P3060QDS board"). Its Kconfig entry selects
    MPC8xxx_GPIO. But at the time that driver got added MPC8xxx_GPIO was
    already renamed to GPIO_MPC8XXX, by commit c68308dd50c ("gpio: move
    mpc8xxx/512x gpio driver to drivers/gpio").

    So make this driver select GPIO_MPC8XXX.

    Signed-off-by: Paul Bolle
    Acked-by: Wolfram Sang
    Signed-off-by: Kumar Gala

    Paul Bolle
     
  • P1023 external IRQ[4:6, 11] are not pin out, but the interrupts are
    utilized by the PCIe controllers. As they are not exposed as pins we
    need to set them as active-high (internal to the SoC these interrupts
    are pulled down).

    IRQs[0:3,7:10] are pulled up on the board so we have them set as
    active-low.

    Signed-off-by: Roy Zang
    Signed-off-by: Kumar Gala

    Roy Zang
     
  • Linus Torvalds
     
  • * git://github.com/rustyrussell/linux:
    virtio-pci: make reset operation safer
    virtio-mmio: Correct the name of the guest features selector
    virtio: add HAS_IOMEM dependency to MMIO platform bus driver

    Linus Torvalds