1. 23 11月, 2012 1 次提交
    • T
      arm: mvebu: fix address decoding armada_cfg_base() function · 9f3410ff
      Thomas Petazzoni 提交于
      The armada_cfg_base() function returns the base address of the
      registers that allow to configure the decoding for a particular
      address window. On Armada 370/XP, the lower windows have more
      configuration registers (4 registers) than the higher windows (2
      registers). This armada_cfg_base() takes this into account by doing a
      different offset calculation depending on the window number, but this
      offset calculation was wrong for the higher windows.
      
      Even though we were not using high window numbers until now (only
      window 0 is used to map the BootROM, needed for SMP), we use this
      function at boot time to disable all windows to ensure that nothing
      remains intialized from what the bootloader has done.
      
      Unfortunately, the U-Boot on the OpenBlocks AX3-4 uses a window with a
      high number (above 8) to remap the BootROM. And then when the kernel
      boots, it remaps the BootROM in window 0. Normally, this is not a
      problem, because all windows have previously been disabled. Except
      that due to our wrong offset calculation, the windows with high
      numbers were not properly disabled, leading to the BootROM being
      mapped twice. The visible result of this bug was that the kernel was
      unable to get the second CPU started on the OpenBlocks AX3-4
      platform. With this fix, all windows are properly cleared at boot
      time, the BootROM is remapped only once in window 0, and the second
      CPU boots fine.
      
      Thanks a lot to Lior Amsamlen <alior@marvell.com> for his help in
      debugging this problem.
      Signed-off-by: NThomas Petazzoni <thomas.petazzoni@free-electrons.com>
      ---
      Strictly speaking, this bug was introduced in 3.7, but since the only
      platforms supported in 3.7 were Armada 370 and Armada XP, and there
      was anyway no SMP support at this time, it isn't really worth the
      effort to push this patch in 3.7.
      9f3410ff
  2. 22 11月, 2012 8 次提交
  3. 21 11月, 2012 9 次提交
  4. 20 11月, 2012 21 次提交
  5. 17 11月, 2012 1 次提交
    • A
      revert "mm: fix-up zone present pages" · 5576646f
      Andrew Morton 提交于
      Revert commit 7f1290f2 ("mm: fix-up zone present pages")
      
      That patch tried to fix a issue when calculating zone->present_pages,
      but it caused a regression on 32bit systems with HIGHMEM.  With that
      change, reset_zone_present_pages() resets all zone->present_pages to
      zero, and fixup_zone_present_pages() is called to recalculate
      zone->present_pages when the boot allocator frees core memory pages into
      buddy allocator.  Because highmem pages are not freed by bootmem
      allocator, all highmem zones' present_pages becomes zero.
      
      Various options for improving the situation are being discussed but for
      now, let's return to the 3.6 code.
      
      Cc: Jianguo Wu <wujianguo@huawei.com>
      Cc: Jiang Liu <jiang.liu@huawei.com>
      Cc: Petr Tesarik <ptesarik@suse.cz>
      Cc: "Luck, Tony" <tony.luck@intel.com>
      Cc: Mel Gorman <mel@csn.ul.ie>
      Cc: Yinghai Lu <yinghai@kernel.org>
      Cc: Minchan Kim <minchan.kim@gmail.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Acked-by: NDavid Rientjes <rientjes@google.com>
      Tested-by: NChris Clayton <chris2553@googlemail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      5576646f