Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Jul 2010 09:27:00 +0000 (UTC)
From:      "Jayachandran C." <jchandra@FreeBSD.org>
To:        cvs-src-old@freebsd.org
Subject:   cvs commit: src/sys/mips/include vmparam.h src/sys/mips/mips pmap.c src/sys/vm vm_page.c vm_page.h vm_phys.c vm_phys.h
Message-ID:  <201007211833.o6LIXTk7099552@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
jchandra    2010-07-21 09:27:00 UTC

  FreeBSD src repository

  Modified files:
    sys/mips/include     vmparam.h 
    sys/mips/mips        pmap.c 
    sys/vm               vm_page.c vm_page.h vm_phys.c vm_phys.h 
  Log:
  SVN rev 210327 on 2010-07-21 09:27:00Z by jchandra
  
  Redo the page table page allocation on MIPS, as suggested by
  alc@.
  
  The UMA zone based allocation is replaced by a scheme that creates
  a new free page list for the KSEG0 region, and a new function
  in sys/vm that allocates pages from a specific free page list.
  
  This also fixes a race condition introduced by the UMA based page table
  page allocation code. Dropping the page queue and pmap locks before
  the call to uma_zfree, and re-acquiring them afterwards  will introduce
  a race condtion(noted by alc@).
  
  The changes are :
  - Revert the earlier changes in MIPS pmap.c that added UMA zone for
  page table pages.
  - Add a new freelist VM_FREELIST_HIGHMEM to MIPS vmparam.h for memory that
  is not directly mapped (in 32bit kernel). Normal page allocations will first
  try the HIGHMEM freelist and then the default(direct mapped) freelist.
  - Add a new function 'vm_page_t vm_page_alloc_freelist(int flind, int
  order, int req)' to vm/vm_page.c to allocate a page from a specified
  freelist. The MIPS page table pages will be allocated using this function
  from the freelist containing direct mapped pages.
  - Move the page initialization code from vm_phys_alloc_contig() to a
  new function vm_page_alloc_init(), and use this function to initialize
  pages in vm_page_alloc_freelist() too.
  - Split the  function vm_phys_alloc_pages(int pool, int order) to create
  vm_phys_alloc_freelist_pages(int flind, int pool, int order), and use
  this function from both vm_page_alloc_freelist() and vm_phys_alloc_pages().
  
  Reviewed by:    alc
  
  Revision  Changes    Path
  1.6       +14 -4     src/sys/mips/include/vmparam.h
  1.69      +34 -100   src/sys/mips/mips/pmap.c
  1.419     +89 -0     src/sys/vm/vm_page.c
  1.178     +3 -0      src/sys/vm/vm_page.h
  1.14      +61 -74    src/sys/vm/vm_phys.c
  1.7       +1 -0      src/sys/vm/vm_phys.h



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007211833.o6LIXTk7099552>