linux/arch/arm
Naoya Horiguchi 61f77eda9b mm/hugetlb: reduce arch dependent code around follow_huge_*
Currently we have many duplicates in definitions around
follow_huge_addr(), follow_huge_pmd(), and follow_huge_pud(), so this
patch tries to remove the m.  The basic idea is to put the default
implementation for these functions in mm/hugetlb.c as weak symbols
(regardless of CONFIG_ARCH_WANT_GENERAL_HUGETL B), and to implement
arch-specific code only when the arch needs it.

For follow_huge_addr(), only powerpc and ia64 have their own
implementation, and in all other architectures this function just returns
ERR_PTR(-EINVAL).  So this patch sets returning ERR_PTR(-EINVAL) as
default.

As for follow_huge_(pmd|pud)(), if (pmd|pud)_huge() is implemented to
always return 0 in your architecture (like in ia64 or sparc,) it's never
called (the callsite is optimized away) no matter how implemented it is.
So in such architectures, we don't need arch-specific implementation.

In some architecture (like mips, s390 and tile,) their current
arch-specific follow_huge_(pmd|pud)() are effectively identical with the
common code, so this patch lets these architecture use the common code.

One exception is metag, where pmd_huge() could return non-zero but it
expects follow_huge_pmd() to always return NULL.  This means that we need
arch-specific implementation which returns NULL.  This behavior looks
strange to me (because non-zero pmd_huge() implies that the architecture
supports PMD-based hugepage, so follow_huge_pmd() can/should return some
relevant value,) but that's beyond this cleanup patch, so let's keep it.

Justification of non-trivial changes:
- in s390, follow_huge_pmd() checks !MACHINE_HAS_HPAGE at first, and this
  patch removes the check. This is OK because we can assume MACHINE_HAS_HPAGE
  is true when follow_huge_pmd() can be called (note that pmd_huge() has
  the same check and always returns 0 for !MACHINE_HAS_HPAGE.)
- in s390 and mips, we use HPAGE_MASK instead of PMD_MASK as done in common
  code. This patch forces these archs use PMD_MASK, but it's OK because
  they are identical in both archs.
  In s390, both of HPAGE_SHIFT and PMD_SHIFT are 20.
  In mips, HPAGE_SHIFT is defined as (PAGE_SHIFT + PAGE_SHIFT - 3) and
  PMD_SHIFT is define as (PAGE_SHIFT + PAGE_SHIFT + PTE_ORDER - 3), but
  PTE_ORDER is always 0, so these are identical.

Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Acked-by: Hugh Dickins <hughd@google.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Rik van Riel <riel@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Luiz Capitulino <lcapitulino@redhat.com>
Cc: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
Cc: Lee Schermerhorn <lee.schermerhorn@hp.com>
Cc: Steve Capper <steve.capper@linaro.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-02-11 17:06:01 -08:00
..
boot Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2015-02-11 09:32:08 -08:00
common Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
configs Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-01-27 16:59:56 -08:00
crypto crypto: arm - replace memset by memzero_explicit 2014-12-02 22:55:51 +08:00
firmware
include Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2015-02-10 20:01:30 -08:00
kernel ACPI and power management updates for v3.20-rc1 2015-02-10 15:09:41 -08:00
kvm Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-02-09 14:28:42 -08:00
lib ARM: 8225/1: Add unwinding support for memory copy functions 2014-11-27 16:00:25 +00:00
mach-asm9260 ARM: add mach-asm9260 2014-11-28 15:06:38 +01:00
mach-at91 ARM: at91: board-dt-sama5: add phy_fixup to override NAND_Tree 2015-01-12 15:50:23 +01:00
mach-axxia
mach-bcm Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-10 08:38:57 -08:00
mach-berlin
mach-clps711x
mach-cns3xxx Merge branch 'pci/config' into next 2015-02-02 14:49:29 -06:00
mach-davinci More ACPI and power management updates for 3.19-rc1 2014-12-18 20:28:33 -08:00
mach-dove
mach-ebsa110
mach-efm32
mach-ep93xx arm: ep93xx: add dma_masks for the M2P and M2M DMA controllers 2014-11-28 12:34:08 +01:00
mach-exynos More ACPI and power management updates for 3.19-rc1 2014-12-18 20:28:33 -08:00
mach-footbridge
mach-gemini
mach-highbank
mach-hisi
mach-imx Revert "ARM: imx: add FEC sleep mode callback function" 2015-01-08 20:05:19 -08:00
mach-integrator ARM: integrator: Convert PCI to use generic config accessors 2015-01-29 08:34:42 -06:00
mach-iop13xx PCI/MSI: Rename mask/unmask_msi_irq treewide 2014-11-23 13:01:45 +01:00
mach-iop32x
mach-iop33x
mach-ixp4xx
mach-keystone ARM / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM 2014-12-13 00:42:49 +01:00
mach-ks8695 ARM: ks8695: Convert PCI to use generic config accessors 2015-01-30 16:14:43 -06:00
mach-lpc32xx
mach-mediatek ARM: SoC DT updates for 3.19 2014-12-09 14:57:37 -08:00
mach-meson
mach-mmp Please consider pulling the clk framework changes toward 3.19. It is 2014-12-20 16:42:36 -08:00
mach-moxart
mach-msm
mach-mv78xx0
mach-mvebu ARM: mvebu: don't set the PL310 in I/O coherency mode when I/O coherency is disabled 2015-01-28 11:23:56 -06:00
mach-mxs
mach-netx
mach-nomadik
mach-nspire
mach-omap1 ARM / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM 2014-12-13 00:42:49 +01:00
mach-omap2 MMC core: 2015-02-11 10:56:48 -08:00
mach-orion5x
mach-picoxcell
mach-prima2
mach-pxa Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
mach-qcom
mach-realview
mach-rockchip ARM: rockchip: disable jtag/sdmmc autoswitching on rk3288 2015-01-16 19:10:39 -08:00
mach-rpc
mach-s3c24xx Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
mach-s3c64xx
mach-s5pv210
mach-sa1100 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2015-02-10 20:01:30 -08:00
mach-shmobile Third Round of Renesas ARM Based SoC Fixes for v3.19 2015-02-01 08:51:12 -08:00
mach-socfpga
mach-spear
mach-sti
mach-sunxi
mach-tegra ACPI and power management updates for 3.19-rc1 2014-12-10 21:17:00 -08:00
mach-u300 Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
mach-ux500
mach-versatile
mach-vexpress ARM: vexpress: Enable regulator framework when MMCI is in use 2014-11-28 21:57:07 +01:00
mach-vt8500
mach-w90x900
mach-zynq ARM: zynq: Remove secondary_startup() declaration from header 2014-12-01 09:32:22 +01:00
mm mm/hugetlb: reduce arch dependent code around follow_huge_* 2015-02-11 17:06:01 -08:00
net
nwfpe ARM: drop nwfpe initialisation message from warning to info level 2014-11-21 15:24:54 +00:00
oprofile
plat-iop
plat-omap
plat-orion ACPI and power management updates for 3.19-rc1 2014-12-10 21:17:00 -08:00
plat-pxa
plat-samsung Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
plat-versatile ARM: vexpress: Remove non-DT code 2014-11-28 16:08:16 +01:00
tools
vfp ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
xen xen/grant-table: pre-populate kernel unmap ops for xen_gnttab_unmap_refs() 2015-01-28 14:03:10 +00:00
Kconfig ARM/PCI: Move to generic PCI domains 2014-12-27 18:19:18 -07:00
Kconfig-nommu
Kconfig.debug Char/Misc driver patches for 3.19-rc1 2014-12-14 16:43:47 -08:00
Makefile