From: Paul Davies <pauld@gelato.unsw.edu.au>
To: linux-mm@kvack.org
Cc: Paul Davies <pauld@gelato.unsw.edu.au>
Subject: [PATCH 0/18] PTI - Explanation
Date: Thu, 13 Jul 2006 14:26:30 +1000 [thread overview]
Message-ID: <20060713042630.9978.66924.sendpatchset@localhost.localdomain> (raw)
Linux currently uses the same page table format regardless of
architecture. Access to the page table is open-coded in a variety of
places. Architectures that walk a different page table format in
hardware set up a hardware-walkable cache in their native format, that
then has to be kept in step with Linux's page table.
The first step to allowing different page table formats is to split
the page table implementation into separate files from its use.
This patch series abstracts the page table implementation, and cleans
it up, so that:
1. All page table operations are in one place, making future
maintenance easier
2. Generic code no longer knows what format the page table is,
opening the way to experimentation with different
page table formats.
The interface is separated into two parts. The first part is
architecture independent. All architectures must run through
this interface regardless of whether or not that architecture
can or will ever want to change page tables.
This patch series provides the architectural independent interface.
TESTING on IA64
* Patch series has been booted on a NUMA machine with 2 nodes at UNSW
* Booted on UP and SMP machines at UNSW
* Passes relevant LTP test on an SMP machine on an IA64.
* Compiles on i386.
INSTRUCTIONS:
1) Apply to 2.6.17.2.
2) Turn off HugeTLB
PATCH SERIES GOAL:
This patch series is intended to provide a cleaner and clearer interface
for page table developers. It has the following enhancements against the patch
series fed to linux-mm on 30/05/06.
* Introduction of page table type and removal of references to pgds.
* Moved the majority of default page table implementation from headers
back to C files.
* Iterators no longer call functions using function pointers. Function
pointers will be used in the future in an attempt to create generic
read and build iterators but only for non performance critical iterators.
* Numerous bug fixes.
* File renaming and general cleaningup.
PAGE TABLE INTERFACE
int create_user_page_table(struct mm_struct *mm);
void destroy_user_page_table(struct mm_struct *mm);
pte_t *build_page_table(struct mm_struct *mm,
unsigned long address, pt_path_t *pt_path);
pte_t *lookup_page_table(struct mm_struct *mm,
unsigned long address, pt_path_t *pt_path);
pte_t *lookup_gate_area(struct mm_struct *mm,
unsigned long pg);
void coallesce_vmas(struct vm_area_struct **vma_p,
struct vm_area_struct **next_p);
void free_page_table_range(struct mmu_gather **tlb,
unsigned long addr, unsigned long end,
unsigned long floor, unsigned long ceiling);
/* memory.c iterators */
int copy_dual_iterator(struct mm_struct *dst_mm, struct mm_struct *src_mm,
unsigned long addr, unsigned long end, struct vm_area_struct *vma);
unsigned long unmap_page_range_iterator(struct mmu_gather *tlb,
struct vm_area_struct *vma, unsigned long addr, unsigned long end,
long *zap_work, struct zap_details *details);
int zeromap_build_iterator(struct mm_struct *mm,
unsigned long addr, unsigned long end, pgprot_t prot);
int remap_build_iterator(struct mm_struct *mm,
unsigned long addr, unsigned long end, unsigned long pfn,
pgprot_t prot);
/* vmalloc.c iterators */
void vunmap_read_iterator(unsigned long addr, unsigned long end);
int vmap_build_iterator(unsigned long addr,
unsigned long end, pgprot_t prot, struct page ***pages);
/* mprotect.c iterator */
void change_protection_read_iterator(struct vm_area_struct *vma,
unsigned long addr, unsigned long end, pgprot_t newprot);
/* msync.c iterator */
unsigned long msync_read_iterator(struct vm_area_struct *vma,
unsigned long addr, unsigned long end);
/* swapfile.c iterator */
int unuse_vma_read_iterator(struct vm_area_struct *vma,
unsigned long addr, unsigned long end, swp_entry_t entry,
struct page *page);
/* smaps */
void smaps_read_range(struct vm_area_struct *vma,
unsigned long addr, unsigned long end, struct mem_size_stats *mss);
/* movepagetables */
unsigned long move_page_tables(struct vm_area_struct *vma,
unsigned long old_addr, struct vm_area_struct *new_vma,
unsigned long new_addr, unsigned long len);
/* mempolicy.c */
int check_policy_read_iterator(struct vm_area_struct *vma,
unsigned long addr, unsigned long end,
const nodemask_t *nodes, unsigned long flags,
void *private);
I am keen to hear from anyone planning to put a
new page table implementation into the kernel. Is there
anything in my patch that could be changed to better
accommodate you?
Results and progress will be documented on the Gelato@UNSW wiki in the
very near future.
http://www.gelato.unsw.edu.au/IA64wiki/PageTableInterface
Paul Davies on behalf of Gelato@UNSW.
Signed-Off-By: Paul Davies <pauld@gelato.unsw.edu.au>
---
0 files changed
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2006-07-13 4:26 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-13 4:26 Paul Davies [this message]
2006-07-13 4:26 ` [PATCH 1/18] PTI - Introduce page table interface Paul Davies
2006-07-13 4:26 ` [PATCH 2/18] PTI - Page table type Paul Davies
2006-07-13 4:27 ` [PATCH 3/18] PTI - Abstract default page table Paul Davies
2006-07-13 4:27 ` [PATCH 4/18] " Paul Davies
2006-07-13 4:27 ` [PATCH 5/18] " Paul Davies
2006-07-13 4:27 ` [PATCH 6/18] " Paul Davies
2006-07-13 4:27 ` [PATCH 7/18] PTI - Page fault handler Paul Davies
2006-07-13 4:27 ` [PATCH 8/18] " Paul Davies
2006-07-13 4:28 ` [PATCH 9/18] PTI - Call interface Paul Davies
2006-07-13 4:28 ` [PATCH 10/18] PTI - Copy iterator abstraction Paul Davies
2006-07-13 4:28 ` [PATCH 11/18] PTI - Unmap page range abstraction Paul Davies
2006-07-13 4:28 ` [PATCH 12/18] PTI - Zeromap iterator abstraction Paul Davies
2006-07-13 4:28 ` [PATCH 13/18] PTI - Msync " Paul Davies
2006-07-13 4:29 ` [PATCH 14/18] PTI - Vmalloc iterators asbstractions Paul Davies
2006-07-13 4:29 ` [PATCH 15/18] PTI - Change protection iterator abstraction Paul Davies
2006-07-13 4:29 ` [PATCH 16/18] PTI - Mremap " Paul Davies
2006-07-13 4:29 ` [PATCH 17/18] PTI - Swapfile " Paul Davies
2006-07-13 4:29 ` [PATCH 18/18] PTI - Mempolicy " Paul Davies
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=20060713042630.9978.66924.sendpatchset@localhost.localdomain \
--to=pauld@gelato.unsw.edu.au \
--cc=linux-mm@kvack.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