Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53313b2c authored by Steve Capper's avatar Steve Capper
Browse files

x86: mm: Remove general hugetlb code from x86.



huge_pte_alloc, huge_pte_offset and follow_huge_p[mu]d have
already been copied over to mm.

This patch removes the x86 copies of these functions and activates
the general ones by enabling:
CONFIG_ARCH_WANT_GENERAL_HUGETLB

Signed-off-by: default avatarSteve Capper <steve.capper@linaro.org>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Acked-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 9e5fc74c
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -210,6 +210,9 @@ config ARCH_SUSPEND_POSSIBLE
config ARCH_WANT_HUGE_PMD_SHARE
config ARCH_WANT_HUGE_PMD_SHARE
	def_bool y
	def_bool y


config ARCH_WANT_GENERAL_HUGETLB
	def_bool y

config ZONE_DMA32
config ZONE_DMA32
	bool
	bool
	default X86_64
	default X86_64
+0 −67
Original line number Original line Diff line number Diff line
@@ -16,49 +16,6 @@
#include <asm/tlbflush.h>
#include <asm/tlbflush.h>
#include <asm/pgalloc.h>
#include <asm/pgalloc.h>


pte_t *huge_pte_alloc(struct mm_struct *mm,
			unsigned long addr, unsigned long sz)
{
	pgd_t *pgd;
	pud_t *pud;
	pte_t *pte = NULL;

	pgd = pgd_offset(mm, addr);
	pud = pud_alloc(mm, pgd, addr);
	if (pud) {
		if (sz == PUD_SIZE) {
			pte = (pte_t *)pud;
		} else {
			BUG_ON(sz != PMD_SIZE);
			if (pud_none(*pud))
				pte = huge_pmd_share(mm, addr, pud);
			else
				pte = (pte_t *)pmd_alloc(mm, pud, addr);
		}
	}
	BUG_ON(pte && !pte_none(*pte) && !pte_huge(*pte));

	return pte;
}

pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
{
	pgd_t *pgd;
	pud_t *pud;
	pmd_t *pmd = NULL;

	pgd = pgd_offset(mm, addr);
	if (pgd_present(*pgd)) {
		pud = pud_offset(pgd, addr);
		if (pud_present(*pud)) {
			if (pud_large(*pud))
				return (pte_t *)pud;
			pmd = pmd_offset(pud, addr);
		}
	}
	return (pte_t *) pmd;
}

#if 0	/* This is just for testing */
#if 0	/* This is just for testing */
struct page *
struct page *
follow_huge_addr(struct mm_struct *mm, unsigned long address, int write)
follow_huge_addr(struct mm_struct *mm, unsigned long address, int write)
@@ -120,30 +77,6 @@ int pud_huge(pud_t pud)
	return !!(pud_val(pud) & _PAGE_PSE);
	return !!(pud_val(pud) & _PAGE_PSE);
}
}


struct page *
follow_huge_pmd(struct mm_struct *mm, unsigned long address,
		pmd_t *pmd, int write)
{
	struct page *page;

	page = pte_page(*(pte_t *)pmd);
	if (page)
		page += ((address & ~PMD_MASK) >> PAGE_SHIFT);
	return page;
}

struct page *
follow_huge_pud(struct mm_struct *mm, unsigned long address,
		pud_t *pud, int write)
{
	struct page *page;

	page = pte_page(*(pte_t *)pud);
	if (page)
		page += ((address & ~PUD_MASK) >> PAGE_SHIFT);
	return page;
}

#endif
#endif


/* x86_64 also uses this file */
/* x86_64 also uses this file */