Diff for /src/sys/vm/vm_map.c between versions 1.26 and 1.27

version 1.26, 2004/04/26 20:26:59 version 1.27, 2004/05/13 17:40:19
Line 2489  vm_map_split(vm_map_entry_t entry) Line 2489  vm_map_split(vm_map_entry_t entry)
   
         for (idx = 0; idx < size; idx++) {          for (idx = 0; idx < size; idx++) {
                 vm_page_t m;                  vm_page_t m;
                   int ss;         /* s used */
   
                   /*
                    * splvm protection is required to avoid a race between
                    * the lookup and an interrupt/unbusy/free and our busy
                    * check.
                    */
                   ss = splvm();
         retry:          retry:
                 m = vm_page_lookup(orig_object, offidxstart + idx);                  m = vm_page_lookup(orig_object, offidxstart + idx);
                if (m == NULL)                if (m == NULL) {
                         splx(ss);
                         continue;                          continue;
                   }
   
                 /*                  /*
                  * We must wait for pending I/O to complete before we can                   * We must wait for pending I/O to complete before we can
Line 2504  vm_map_split(vm_map_entry_t entry) Line 2513  vm_map_split(vm_map_entry_t entry)
                  */                   */
                 if (vm_page_sleep_busy(m, TRUE, "spltwt"))                  if (vm_page_sleep_busy(m, TRUE, "spltwt"))
                         goto retry;                          goto retry;
                           
                 vm_page_busy(m);                  vm_page_busy(m);
                 vm_page_rename(m, new_object, idx);                  vm_page_rename(m, new_object, idx);
                 /* page automatically made dirty by rename and cache handled */                  /* page automatically made dirty by rename and cache handled */
                 vm_page_busy(m);                  vm_page_busy(m);
                   splx(ss);
         }          }
   
         if (orig_object->type == OBJT_SWAP) {          if (orig_object->type == OBJT_SWAP) {
Line 2522  vm_map_split(vm_map_entry_t entry) Line 2531  vm_map_split(vm_map_entry_t entry)
                 vm_object_pip_wakeup(orig_object);                  vm_object_pip_wakeup(orig_object);
         }          }
   
           /*
            * Wakeup the pages we played with.  No spl protection is needed
            * for a simple wakeup.
            */
         for (idx = 0; idx < size; idx++) {          for (idx = 0; idx < size; idx++) {
                 m = vm_page_lookup(new_object, idx);                  m = vm_page_lookup(new_object, idx);
                if (m) {                if (m)
                         vm_page_wakeup(m);                          vm_page_wakeup(m);
                 }  
         }          }
   
         entry->object.vm_object = new_object;          entry->object.vm_object = new_object;
Line 3262  vm_map_lookup_done(vm_map_t map, vm_map_ Line 3274  vm_map_lookup_done(vm_map_t map, vm_map_
  * Implement uiomove with VM operations.  This handles (and collateral changes)   * Implement uiomove with VM operations.  This handles (and collateral changes)
  * support every combination of source object modification, and COW type   * support every combination of source object modification, and COW type
  * operations.   * operations.
    *
    * XXX this is extremely dangerous, enabling this option is NOT recommended.
  */   */
 int  int
 vm_uiomove(vm_map_t mapa, vm_object_t srcobject, off_t cp, int cnta,  vm_uiomove(vm_map_t mapa, vm_object_t srcobject, off_t cp, int cnta,
Line 3278  vm_uiomove(vm_map_t mapa, vm_object_t sr Line 3292  vm_uiomove(vm_map_t mapa, vm_object_t sr
         off_t ooffset;          off_t ooffset;
         int cnt;          int cnt;
         int count;          int count;
           int s;
   
         if (npages)          if (npages)
                 *npages = 0;                  *npages = 0;
Line 3315  vm_uiomove(vm_map_t mapa, vm_object_t sr Line 3330  vm_uiomove(vm_map_t mapa, vm_object_t sr
                 oindex = OFF_TO_IDX(cp);                  oindex = OFF_TO_IDX(cp);
                 if (npages) {                  if (npages) {
                         vm_pindex_t idx;                          vm_pindex_t idx;
   
                           /*
                            * spl protection is needed to avoid a race between
                            * the lookup and an interrupt/unbusy/free occuring
                            * prior to our busy check.
                            */
                           s = splvm();
                         for (idx = 0; idx < osize; idx++) {                          for (idx = 0; idx < osize; idx++) {
                                 vm_page_t m;                                  vm_page_t m;
                                 if ((m = vm_page_lookup(srcobject, oindex + idx)) == NULL) {                                  if ((m = vm_page_lookup(srcobject, oindex + idx)) == NULL) {
                                           splx(s);
                                         vm_map_lookup_done(map, entry, count);                                          vm_map_lookup_done(map, entry, count);
                                         return 0;                                          return 0;
                                 }                                  }
Line 3327  vm_uiomove(vm_map_t mapa, vm_object_t sr Line 3350  vm_uiomove(vm_map_t mapa, vm_object_t sr
                                  */                                   */
                                 if ((m->flags & PG_BUSY) ||                                  if ((m->flags & PG_BUSY) ||
                                         ((m->valid & VM_PAGE_BITS_ALL) != VM_PAGE_BITS_ALL)) {                                          ((m->valid & VM_PAGE_BITS_ALL) != VM_PAGE_BITS_ALL)) {
                                           splx(s);
                                         vm_map_lookup_done(map, entry, count);                                          vm_map_lookup_done(map, entry, count);
                                         return 0;                                          return 0;
                                 }                                  }
                         }                          }
                           splx(s);
                 }                  }
   
 /*  /*
Line 3511  vm_freeze_copyopts(vm_object_t object, v Line 3536  vm_freeze_copyopts(vm_object_t object, v
         if (object->shadow_count > object->ref_count)          if (object->shadow_count > object->ref_count)
                 panic("vm_freeze_copyopts: sc > rc");                  panic("vm_freeze_copyopts: sc > rc");
   
        while((robject = LIST_FIRST(&object->shadow_head)) != NULL) {        while ((robject = LIST_FIRST(&object->shadow_head)) != NULL) {
                 vm_pindex_t bo_pindex;                  vm_pindex_t bo_pindex;
                 vm_page_t m_in, m_out;                  vm_page_t m_in, m_out;
   

Removed from v.1.26  
changed lines
  Added in v.1.27