Re: svn commit: r243030 - in head/sys/mips: include mips

2012-11-15 Thread Aleksandr Rybalko
On Wed, 14 Nov 2012 17:33:01 + (UTC)
Alan Cox a...@freebsd.org wrote:

 Author: alc
 Date: Wed Nov 14 17:33:00 2012
 New Revision: 243030
 URL: http://svnweb.freebsd.org/changeset/base/243030
 
 Log:
   The function pmap_alloc_direct_page() unconditionally zeroes the returned
   page.  Therefore, it is really inappropriate for use by the function
   uma_small_alloc().  The effect of using it was that every page was zeroed
   at least once and possibly twice if M_ZERO was passed as a wait flag.

Many thanks Alan!

No I able to store 8MB fw image on tmpfs. Bot only once :)

 
 Modified:
   head/sys/mips/include/pmap.h
   head/sys/mips/mips/pmap.c
   head/sys/mips/mips/uma_machdep.c
 
 Modified: head/sys/mips/include/pmap.h
 ==
 --- head/sys/mips/include/pmap.h  Wed Nov 14 17:23:48 2012
 (r243029)
 +++ head/sys/mips/include/pmap.h  Wed Nov 14 17:33:00 2012
 (r243030)
 @@ -179,7 +179,6 @@ void pmap_kenter_temporary_free(vm_paddr
  void pmap_flush_pvcache(vm_page_t m);
  int pmap_emulate_modified(pmap_t pmap, vm_offset_t va);
  void pmap_grow_direct_page_cache(void);
 -vm_page_t pmap_alloc_direct_page(unsigned int index, int req);
  
  #endif   /* _KERNEL */
  
 
 Modified: head/sys/mips/mips/pmap.c
 ==
 --- head/sys/mips/mips/pmap.c Wed Nov 14 17:23:48 2012(r243029)
 +++ head/sys/mips/mips/pmap.c Wed Nov 14 17:33:00 2012(r243030)
 @@ -163,6 +163,7 @@ static vm_page_t pmap_pv_reclaim(pmap_t 
  static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va);
  static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap,
  vm_offset_t va);
 +static vm_page_t pmap_alloc_direct_page(unsigned int index, int req);
  static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va,
  vm_page_t m, vm_prot_t prot, vm_page_t mpte);
  static int pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t 
 va,
 @@ -1041,7 +1042,7 @@ pmap_grow_direct_page_cache()
  #endif
  }
  
 -vm_page_t
 +static vm_page_t
  pmap_alloc_direct_page(unsigned int index, int req)
  {
   vm_page_t m;
 
 Modified: head/sys/mips/mips/uma_machdep.c
 ==
 --- head/sys/mips/mips/uma_machdep.c  Wed Nov 14 17:23:48 2012
 (r243029)
 +++ head/sys/mips/mips/uma_machdep.c  Wed Nov 14 17:33:00 2012
 (r243030)
 @@ -50,12 +50,14 @@ uma_small_alloc(uma_zone_t zone, int byt
   *flags = UMA_SLAB_PRIV;
  
   if ((wait  (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT)
 - pflags = VM_ALLOC_INTERRUPT;
 + pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED;
   else
 - pflags = VM_ALLOC_SYSTEM;
 + pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED;
 + if (wait  M_ZERO)
 + pflags |= VM_ALLOC_ZERO;
  
   for (;;) {
 - m = pmap_alloc_direct_page(0, pflags);
 + m = vm_page_alloc_freelist(VM_FREELIST_DIRECT, pflags);
   if (m == NULL) {
   if (wait  M_NOWAIT)
   return (NULL);


-- 
Aleksandr Rybalko r...@ddteam.net
___
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org


svn commit: r243030 - in head/sys/mips: include mips

2012-11-14 Thread Alan Cox
Author: alc
Date: Wed Nov 14 17:33:00 2012
New Revision: 243030
URL: http://svnweb.freebsd.org/changeset/base/243030

Log:
  The function pmap_alloc_direct_page() unconditionally zeroes the returned
  page.  Therefore, it is really inappropriate for use by the function
  uma_small_alloc().  The effect of using it was that every page was zeroed
  at least once and possibly twice if M_ZERO was passed as a wait flag.

Modified:
  head/sys/mips/include/pmap.h
  head/sys/mips/mips/pmap.c
  head/sys/mips/mips/uma_machdep.c

Modified: head/sys/mips/include/pmap.h
==
--- head/sys/mips/include/pmap.hWed Nov 14 17:23:48 2012
(r243029)
+++ head/sys/mips/include/pmap.hWed Nov 14 17:33:00 2012
(r243030)
@@ -179,7 +179,6 @@ void pmap_kenter_temporary_free(vm_paddr
 void pmap_flush_pvcache(vm_page_t m);
 int pmap_emulate_modified(pmap_t pmap, vm_offset_t va);
 void pmap_grow_direct_page_cache(void);
-vm_page_t pmap_alloc_direct_page(unsigned int index, int req);
 
 #endif /* _KERNEL */
 

Modified: head/sys/mips/mips/pmap.c
==
--- head/sys/mips/mips/pmap.c   Wed Nov 14 17:23:48 2012(r243029)
+++ head/sys/mips/mips/pmap.c   Wed Nov 14 17:33:00 2012(r243030)
@@ -163,6 +163,7 @@ static vm_page_t pmap_pv_reclaim(pmap_t 
 static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va);
 static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap,
 vm_offset_t va);
+static vm_page_t pmap_alloc_direct_page(unsigned int index, int req);
 static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va,
 vm_page_t m, vm_prot_t prot, vm_page_t mpte);
 static int pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t va,
@@ -1041,7 +1042,7 @@ pmap_grow_direct_page_cache()
 #endif
 }
 
-vm_page_t
+static vm_page_t
 pmap_alloc_direct_page(unsigned int index, int req)
 {
vm_page_t m;

Modified: head/sys/mips/mips/uma_machdep.c
==
--- head/sys/mips/mips/uma_machdep.cWed Nov 14 17:23:48 2012
(r243029)
+++ head/sys/mips/mips/uma_machdep.cWed Nov 14 17:33:00 2012
(r243030)
@@ -50,12 +50,14 @@ uma_small_alloc(uma_zone_t zone, int byt
*flags = UMA_SLAB_PRIV;
 
if ((wait  (M_NOWAIT|M_USE_RESERVE)) == M_NOWAIT)
-   pflags = VM_ALLOC_INTERRUPT;
+   pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_WIRED;
else
-   pflags = VM_ALLOC_SYSTEM;
+   pflags = VM_ALLOC_SYSTEM | VM_ALLOC_WIRED;
+   if (wait  M_ZERO)
+   pflags |= VM_ALLOC_ZERO;
 
for (;;) {
-   m = pmap_alloc_direct_page(0, pflags);
+   m = vm_page_alloc_freelist(VM_FREELIST_DIRECT, pflags);
if (m == NULL) {
if (wait  M_NOWAIT)
return (NULL);
___
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org