From: Hugh Dickins <hugh@veritas.com>
To: Paul Mundt <lethal@linux-sh.org>
Cc: Andrew Morton <akpm@osdl.org>, linux-kernel@vger.kernel.org
Subject: [PATCH 20/21] mm: sh64 hugetlbpage.c
Date: Sun, 25 Sep 2005 17:11:58 +0100 (BST) [thread overview]
Message-ID: <Pine.LNX.4.61.0509251710200.3490@goblin.wat.veritas.com> (raw)
In-Reply-To: <Pine.LNX.4.61.0509251644100.3490@goblin.wat.veritas.com>
The sh64 hugetlbpage.c seems to be erroneous, left over from a bygone
age, clashing with the common hugetlb.c. Replace it by a copy of the
sh hugetlbpage.c. Except, delete that mk_pte_huge macro neither uses.
Signed-off-by: Hugh Dickins <hugh@veritas.com>
---
arch/sh/mm/hugetlbpage.c | 2
arch/sh64/mm/hugetlbpage.c | 188 ++-------------------------------------------
2 files changed, 12 insertions(+), 178 deletions(-)
--- mm19/arch/sh/mm/hugetlbpage.c 2005-08-29 00:41:01.000000000 +0100
+++ mm20/arch/sh/mm/hugetlbpage.c 2005-09-24 19:30:49.000000000 +0100
@@ -54,8 +54,6 @@ pte_t *huge_pte_offset(struct mm_struct
return pte;
}
-#define mk_pte_huge(entry) do { pte_val(entry) |= _PAGE_SZHUGE; } while (0)
-
void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t entry)
{
--- mm19/arch/sh64/mm/hugetlbpage.c 2005-08-29 00:41:01.000000000 +0100
+++ mm20/arch/sh64/mm/hugetlbpage.c 2005-09-24 19:30:49.000000000 +0100
@@ -54,41 +54,31 @@ pte_t *huge_pte_offset(struct mm_struct
return pte;
}
-#define mk_pte_huge(entry) do { pte_val(entry) |= _PAGE_SZHUGE; } while (0)
-
-static void set_huge_pte(struct mm_struct *mm, struct vm_area_struct *vma,
- struct page *page, pte_t * page_table, int write_access)
+void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
+ pte_t *ptep, pte_t entry)
{
- unsigned long i;
- pte_t entry;
-
- add_mm_counter(mm, rss, HPAGE_SIZE / PAGE_SIZE);
-
- if (write_access)
- entry = pte_mkwrite(pte_mkdirty(mk_pte(page,
- vma->vm_page_prot)));
- else
- entry = pte_wrprotect(mk_pte(page, vma->vm_page_prot));
- entry = pte_mkyoung(entry);
- mk_pte_huge(entry);
+ int i;
for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) {
- set_pte(page_table, entry);
- page_table++;
-
+ set_pte_at(mm, addr, ptep, entry);
+ ptep++;
+ addr += PAGE_SIZE;
pte_val(entry) += PAGE_SIZE;
}
}
-pte_t huge_ptep_get_and_clear(pte_t *ptep)
+pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
+ pte_t *ptep)
{
pte_t entry;
+ int i;
entry = *ptep;
for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) {
- pte_clear(pte);
- pte++;
+ pte_clear(mm, addr, ptep);
+ addr += PAGE_SIZE;
+ ptep++;
}
return entry;
@@ -106,79 +96,6 @@ int is_aligned_hugepage_range(unsigned l
return 0;
}
-int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
- struct vm_area_struct *vma)
-{
- pte_t *src_pte, *dst_pte, entry;
- struct page *ptepage;
- unsigned long addr = vma->vm_start;
- unsigned long end = vma->vm_end;
- int i;
-
- while (addr < end) {
- dst_pte = huge_pte_alloc(dst, addr);
- if (!dst_pte)
- goto nomem;
- src_pte = huge_pte_offset(src, addr);
- BUG_ON(!src_pte || pte_none(*src_pte));
- entry = *src_pte;
- ptepage = pte_page(entry);
- get_page(ptepage);
- for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) {
- set_pte(dst_pte, entry);
- pte_val(entry) += PAGE_SIZE;
- dst_pte++;
- }
- add_mm_counter(dst, rss, HPAGE_SIZE / PAGE_SIZE);
- addr += HPAGE_SIZE;
- }
- return 0;
-
-nomem:
- return -ENOMEM;
-}
-
-int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
- struct page **pages, struct vm_area_struct **vmas,
- unsigned long *position, int *length, int i)
-{
- unsigned long vaddr = *position;
- int remainder = *length;
-
- WARN_ON(!is_vm_hugetlb_page(vma));
-
- while (vaddr < vma->vm_end && remainder) {
- if (pages) {
- pte_t *pte;
- struct page *page;
-
- pte = huge_pte_offset(mm, vaddr);
-
- /* hugetlb should be locked, and hence, prefaulted */
- BUG_ON(!pte || pte_none(*pte));
-
- page = pte_page(*pte);
-
- WARN_ON(!PageCompound(page));
-
- get_page(page);
- pages[i] = page;
- }
-
- if (vmas)
- vmas[i] = vma;
-
- vaddr += PAGE_SIZE;
- --remainder;
- ++i;
- }
-
- *length = remainder;
- *position = vaddr;
-
- return i;
-}
-
struct page *follow_huge_addr(struct mm_struct *mm,
unsigned long address, int write)
{
@@ -195,84 +112,3 @@ struct page *follow_huge_pmd(struct mm_s
{
return NULL;
}
-
-void unmap_hugepage_range(struct vm_area_struct *vma,
- unsigned long start, unsigned long end)
-{
- struct mm_struct *mm = vma->vm_mm;
- unsigned long address;
- pte_t *pte;
- struct page *page;
- int i;
-
- BUG_ON(start & (HPAGE_SIZE - 1));
- BUG_ON(end & (HPAGE_SIZE - 1));
-
- for (address = start; address < end; address += HPAGE_SIZE) {
- pte = huge_pte_offset(mm, address);
- BUG_ON(!pte);
- if (pte_none(*pte))
- continue;
- page = pte_page(*pte);
- put_page(page);
- for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) {
- pte_clear(mm, address+(i*PAGE_SIZE), pte);
- pte++;
- }
- }
- add_mm_counter(mm, rss, -((end - start) >> PAGE_SHIFT));
- flush_tlb_range(vma, start, end);
-}
-
-int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma)
-{
- struct mm_struct *mm = current->mm;
- unsigned long addr;
- int ret = 0;
-
- BUG_ON(vma->vm_start & ~HPAGE_MASK);
- BUG_ON(vma->vm_end & ~HPAGE_MASK);
-
- spin_lock(&mm->page_table_lock);
- for (addr = vma->vm_start; addr < vma->vm_end; addr += HPAGE_SIZE) {
- unsigned long idx;
- pte_t *pte = huge_pte_alloc(mm, addr);
- struct page *page;
-
- if (!pte) {
- ret = -ENOMEM;
- goto out;
- }
- if (!pte_none(*pte))
- continue;
-
- idx = ((addr - vma->vm_start) >> HPAGE_SHIFT)
- + (vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT));
- page = find_get_page(mapping, idx);
- if (!page) {
- /* charge the fs quota first */
- if (hugetlb_get_quota(mapping)) {
- ret = -ENOMEM;
- goto out;
- }
- page = alloc_huge_page();
- if (!page) {
- hugetlb_put_quota(mapping);
- ret = -ENOMEM;
- goto out;
- }
- ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);
- if (! ret) {
- unlock_page(page);
- } else {
- hugetlb_put_quota(mapping);
- free_huge_page(page);
- goto out;
- }
- }
- set_huge_pte(mm, vma, page, pte, vma->vm_flags & VM_WRITE);
- }
-out:
- spin_unlock(&mm->page_table_lock);
- return ret;
-}
next prev parent reply other threads:[~2005-09-25 16:12 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-25 15:46 [PATCH 00/21] mm: page fault scalability prep Hugh Dickins
2005-09-25 15:47 ` [PATCH 01/21] mm: hugetlb truncation fixes Hugh Dickins
2005-09-25 15:48 ` [PATCH 02/21] mm: copy_pte_range progress fix Hugh Dickins
2005-09-25 15:49 ` [PATCH 03/21] mm: msync_pte_range progress Hugh Dickins
2005-09-25 15:49 ` [PATCH 04/21] mm: zap_pte_range dont dirty anon Hugh Dickins
2005-09-25 22:26 ` Andrew Morton
2005-09-26 6:02 ` Hugh Dickins
2005-09-26 6:14 ` Andrew Morton
2005-09-26 7:20 ` Hugh Dickins
2005-09-25 15:51 ` [PATCH 05/21] mm: anon is already wrprotected Hugh Dickins
2005-09-25 15:52 ` [PATCH 06/21] mm: vm_stat_account unshackled Hugh Dickins
2005-09-25 15:53 ` [PATCH 07/21] mm: remove_vma_list consolidation Hugh Dickins
2005-09-25 15:53 ` [PATCH 08/21] mm: unlink_file_vma, remove_vma Hugh Dickins
2005-09-25 15:54 ` [PATCH 09/21] mm: exit_mmap need not reset Hugh Dickins
2005-09-25 15:56 ` [PATCH 10/21] mm: page fault handlers tidyup Hugh Dickins
2005-09-25 15:57 ` [PATCH 11/21] mm: move_page_tables by extents Hugh Dickins
2005-09-25 15:59 ` [PATCH 12/21] mm: tlb_gather_mmu get_cpu_var Hugh Dickins
2005-09-25 16:01 ` [PATCH 13/21] mm: tlb_is_full_mm was obscure Hugh Dickins
2005-09-25 16:03 ` [PATCH 14/21] mm: tlb_finish_mmu forget rss Hugh Dickins
2005-09-25 16:06 ` [PATCH 15/21] mm: mm_init set_mm_counters Hugh Dickins
2005-09-25 16:07 ` [PATCH 16/21] mm: rss = file_rss + anon_rss Hugh Dickins
2005-09-25 16:08 ` [PATCH 17/21] mm: batch updating mm_counters Hugh Dickins
2005-09-26 7:25 ` Nick Piggin
2005-09-26 8:42 ` Hugh Dickins
2005-09-25 16:09 ` [PATCH 18/21] mm: dup_mmap use oldmm more Hugh Dickins
2005-09-25 16:10 ` [PATCH 19/21] mm: dup_mmap down new mmap_sem Hugh Dickins
2005-09-25 16:11 ` Hugh Dickins [this message]
2005-09-29 7:00 ` [PATCH 20/21] mm: sh64 hugetlbpage.c Paul Mundt
2005-09-25 16:15 ` [PATCH 21/21] mm: m68k kill stram swap Hugh Dickins
2005-09-28 0:05 ` [PATCH 00/21] mm: page fault scalability prep Christoph Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.61.0509251710200.3490@goblin.wat.veritas.com \
--to=hugh@veritas.com \
--cc=akpm@osdl.org \
--cc=lethal@linux-sh.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®