All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Paul Davies <pauld@gelato.unsw.edu.au>
Cc: linux-mm@kvack.org
Subject: Re: [PATCH 0/29] Page Table Interface Explanation
Date: Sat, 13 Jan 2007 20:29:01 +0100	[thread overview]
Message-ID: <1168716541.5975.23.camel@lappy> (raw)
In-Reply-To: <20070113024540.29682.27024.sendpatchset@weill.orchestra.cse.unsw.EDU.AU>

>                 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);



> void free_pt_range(struct mmu_gather **tlb, unsigned long addr,
> 		unsigned long end, unsigned long floor, unsigned long ceiling);
> 
> 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);
> 
> void change_protection_read_iterator(struct vm_area_struct *vma,
> 		unsigned long addr, unsigned long end, pgprot_t newprot,
> 		int dirty_accountable);
> 
> 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);
> 
> int unuse_vma_read_iterator(struct vm_area_struct *vma,
> 		unsigned long addr, unsigned long end, swp_entry_t entry, struct page *page);
> 
> void smaps_read_iterator(struct vm_area_struct *vma,
> 		unsigned long addr, unsigned long end, struct mem_size_stats *mss);
> 
> 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);
> 
> 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);
> 

weird naming, functions are not iterators, if named after what they do
it should be *_iteration.

But still, I would have expected an iterator based interface; something
along the lines of:

typedef struct pti_struct {
  struct mm_struct *mm;
  pgd_t *pgd;
  pud_t *pud;
  pmd_t *pmd;
  pte_t *pte;
  spinlock_t *ptl;
  unsigned long address;
} pti_t

with accessors like:

#define pti_address(pti) (pti).address
#define pti_pte(pti) (pti).pte

and methods like:

bool pti_valid(pti_t *pti);
pti_t pti_lookup(struct mm_struct *mm, unsigned long address);
pti_t pti_acquire(struct mm_struct *mm, unsigned long address);
void pti_release(pti_t *pti);

bool pti_next(pti_t *pti);

so that you could write the typical loops like:

  int ret = 0;

  pti_t *pri = pti_lookup(mm, start);
  do_for_each_pti_range(pti, end) {
    if (per_pte_op(pti_pte(pti))) {
      ret = -EFOO;
      break;
    }
  } while_for_each_pti_range(pti, end);
  pti_release(pti);

  return ret;

where do_for_each_pti_range() and while_for_each_pti_range() look
something like:

#define do_for_each_pti_range(pti, end) \
  if (pti_valid(pti) && pti_address(pti) < end) do

#define while_for_each_pti_range(pti, end) \
  while (pti_next(pti) && pti_valid(pti) && pti_address(pti) < end)



--
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>

  parent reply	other threads:[~2007-01-13 19:29 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-13  2:45 [PATCH 0/29] Page Table Interface Explanation Paul Davies
2007-01-13  2:45 ` [PATCH 1/29] Abstract current page table implementation Paul Davies
2007-01-13  2:45 ` [PATCH 2/29] " Paul Davies
2007-01-13  2:45 ` [PATCH 3/29] " Paul Davies
2007-01-16 18:55   ` Christoph Lameter
2007-01-13  2:46 ` [PATCH 4/29] Introduce Page Table Interface (PTI) Paul Davies
2007-01-16 19:02   ` Christoph Lameter
2007-01-13  2:46 ` [PATCH 5/29] Start calling simple PTI functions Paul Davies
2007-01-16 19:04   ` Christoph Lameter
2007-01-18  6:43     ` Paul Cameron Davies
2007-01-13  2:46 ` [PATCH 6/29] Tweak IA64 arch dependent files to work with PTI Paul Davies
2007-01-16 19:05   ` Christoph Lameter
2007-01-13  2:46 ` [PATCH 7/29] Continue calling simple PTI functions Paul Davies
2007-01-16 19:08   ` Christoph Lameter
2007-01-13  2:46 ` [PATCH 8/29] Clean up page fault handers Paul Davies
2007-01-13  2:46 ` [PATCH 9/29] Clean up page fault handlers Paul Davies
2007-01-13  2:46 ` [PATCH 10/29] Call simple PTI functions Paul Davies
2007-01-13  2:46 ` [PATCH 11/29] Call simple PTI functions cont Paul Davies
2007-01-13  2:46 ` [PATCH 12/29] Abstract page table tear down Paul Davies
2007-01-13  2:46 ` [PATCH 13/29] Finish abstracting " Paul Davies
2007-01-13  2:46 ` [PATCH 14/29] Abstract copy page range iterator Paul Davies
2007-01-13  2:46 ` [PATCH 15/29] Finish abstracting copy page range Paul Davies
2007-01-13  2:47 ` [PATCH 16/29] Abstract unmap page range iterator Paul Davies
2007-01-13  2:47 ` [PATCH 17/29] Finish abstracting unmap page range Paul Davies
2007-01-13  2:47 ` [PATCH 18/29] Abstract zeromap " Paul Davies
2007-01-13  2:47 ` [PATCH 19/29] Abstract remap pfn range Paul Davies
2007-01-13  2:47 ` [PATCH 20/29] Abstract change protection iterator Paul Davies
2007-01-13  2:47 ` [PATCH 21/29] Abstract unmap vm area Paul Davies
2007-01-13  2:47 ` [PATCH 22/29] Abstract map " Paul Davies
2007-01-13  2:47 ` [PATCH 23/29] Abstract unuse_vma Paul Davies
2007-01-13  2:47 ` [PATCH 24/29] Abstract smaps iterator Paul Davies
2007-01-13  2:47 ` [PATCH 25/29] Abstact mempolicy iterator Paul Davies
2007-01-13  2:47 ` [PATCH 26/29] Abstract mempolicy iterator cont Paul Davies
2007-01-13  2:48 ` [PATCH 27/29] Abstract implementation dependent code for mremap Paul Davies
2007-01-13  2:48 ` [PATCH 28/29] Abstract ioremap iterator Paul Davies
2007-01-13  2:48 ` [PATCH 29/29] Tweak i386 arch dependent files to work with PTI Paul Davies
2007-01-13  2:48 ` [PATCH 1/5] Introduce IA64 page table interface Paul Davies
2007-01-13  2:48 ` [PATCH 2/5] Abstract pgtable Paul Davies
2007-01-13  2:48 ` [PATCH 3/5] Abstact pgtable continued Paul Davies
2007-01-13  2:48 ` [PATCH 4/5] Abstract assembler lookup Paul Davies
2007-01-13  2:48 ` [PATCH 5/5] Abstract pgalloc Paul Davies
2007-01-13  2:48 ` [PATCH 1/12] Alternate page table implementation (GPT) Paul Davies
2007-01-13  2:48 ` [PATCH 2/12] Alternate page table implementation cont Paul Davies
2007-01-13  2:48 ` [PATCH 3/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 4/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 5/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 6/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 7/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 8/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 9/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 10/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 11/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 12/12] " Paul Davies
2007-01-13 19:29 ` Peter Zijlstra [this message]
2007-01-14 10:06   ` [PATCH 0/29] Page Table Interface Explanation Paul Cameron Davies
2007-01-16 18:49 ` Christoph Lameter
2007-01-18  6:22   ` Paul Cameron Davies
2007-01-16 18:51 ` Christoph Lameter
2007-01-18  6:53   ` Paul Cameron Davies
2007-01-16 19:14 ` 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=1168716541.5975.23.camel@lappy \
    --to=a.p.zijlstra@chello.nl \
    --cc=linux-mm@kvack.org \
    --cc=pauld@gelato.unsw.edu.au \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.