/[hurd]/hurd/libpager/data-return.c
ViewVC logotype

Diff of /hurd/libpager/data-return.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.21 by thomas, Tue Jul 25 19:40:27 2000 UTC revision 1.22 by roland, Wed May 8 09:22:14 2002 UTC
# Line 1  Line 1 
1  /* Implementation of memory_object_data_return for pager library  /* Implementation of memory_object_data_return for pager library
2     Copyright (C) 1994, 1995, 1996, 1999, 2000 Free Software Foundation     Copyright (C) 1994,95,96,99,2000,02 Free Software Foundation, Inc.
3    
4     This program is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or
5     modify it under the terms of the GNU General Public License as     modify it under the terms of the GNU General Public License as
# Line 45  _pager_do_write_request (mach_port_t obj Line 45  _pager_do_write_request (mach_port_t obj
45                      struct lock_list *next;} *lock_list, *ll;                      struct lock_list *next;} *lock_list, *ll;
46    int wakeup;    int wakeup;
47    int omitdata = 0;    int omitdata = 0;
48      
49    p = ports_lookup_port (0, object, _pager_class);    p = ports_lookup_port (0, object, _pager_class);
50    if (!p)    if (!p)
51      return EOPNOTSUPP;      return EOPNOTSUPP;
# Line 53  _pager_do_write_request (mach_port_t obj Line 53  _pager_do_write_request (mach_port_t obj
53    /* Acquire the right to meddle with the pagemap */    /* Acquire the right to meddle with the pagemap */
54    mutex_lock (&p->interlock);    mutex_lock (&p->interlock);
55    _pager_wait_for_seqno (p, seqno);    _pager_wait_for_seqno (p, seqno);
56      
57    /* sanity checks -- we don't do multi-page requests yet.  */    /* sanity checks -- we don't do multi-page requests yet.  */
58    if (control != p->memobjcntl)    if (control != p->memobjcntl)
59      {      {
# Line 62  _pager_do_write_request (mach_port_t obj Line 62  _pager_do_write_request (mach_port_t obj
62      }      }
63    if (length % __vm_page_size)    if (length % __vm_page_size)
64      {      {
65        printf ("incg data return: bad length size %d\n", length);        printf ("incg data return: bad length size %zd\n", length);
66        goto release_out;        goto release_out;
67      }      }
68    if (offset % __vm_page_size)    if (offset % __vm_page_size)
# Line 103  _pager_do_write_request (mach_port_t obj Line 103  _pager_do_write_request (mach_port_t obj
103          condition_wait (&p->wakeup, &p->interlock);          condition_wait (&p->wakeup, &p->interlock);
104          goto retry;          goto retry;
105        }        }
106      
107    /* Mark these pages as being paged out.  */    /* Mark these pages as being paged out.  */
108    if (initializing)    if (initializing)
109      {      {
# Line 150  _pager_do_write_request (mach_port_t obj Line 150  _pager_do_write_request (mach_port_t obj
150    
151    for (i = 0; i < npages; i++)    for (i = 0; i < npages; i++)
152      if (!(omitdata & (1 << i)))      if (!(omitdata & (1 << i)))
153        pagerrs[i] = pager_write_page (p->upi,        pagerrs[i] = pager_write_page (p->upi,
154                                       offset + (vm_page_size * i),                                       offset + (vm_page_size * i),
155                                       data + (vm_page_size * i));                                       data + (vm_page_size * i));
156    
157    /* Acquire the right to meddle with the pagemap */    /* Acquire the right to meddle with the pagemap */
# Line 164  _pager_do_write_request (mach_port_t obj Line 164  _pager_do_write_request (mach_port_t obj
164      {      {
165        if (omitdata & (1 << i))        if (omitdata & (1 << i))
166          continue;          continue;
167          
168        if (pm_entries[i] & PM_WRITEWAIT)        if (pm_entries[i] & PM_WRITEWAIT)
169          wakeup = 1;          wakeup = 1;
170          
171        if (pagerrs[i] && ! (pm_entries[i] & PM_PAGEINWAIT))        if (pagerrs[i] && ! (pm_entries[i] & PM_PAGEINWAIT))
172          /* The only thing we can do here is mark the page, and give          /* The only thing we can do here is mark the page, and give
173             errors from now on when it is to be read.  This is             errors from now on when it is to be read.  This is
# Line 179  _pager_do_write_request (mach_port_t obj Line 179  _pager_do_write_request (mach_port_t obj
179          pm_entries[i] |= PM_INVALID;          pm_entries[i] |= PM_INVALID;
180    
181        if (pm_entries[i] & PM_PAGEINWAIT)        if (pm_entries[i] & PM_PAGEINWAIT)
182          memory_object_data_supply (p->memobjcntl,          memory_object_data_supply (p->memobjcntl,
183                                     offset + (vm_page_size * i),                                     offset + (vm_page_size * i),
184                                     data + (vm_page_size * i),                                     data + (vm_page_size * i),
185                                     vm_page_size, 1,                                     vm_page_size, 1,
186                                     VM_PROT_NONE, 0, MACH_PORT_NULL);                                     VM_PROT_NONE, 0, MACH_PORT_NULL);
187        else        else
188          munmap ((caddr_t) (data + (vm_page_size * i)),          munmap ((caddr_t) (data + (vm_page_size * i)),
189                  vm_page_size);                  vm_page_size);
190    
191        pm_entries[i] &= ~(PM_PAGINGOUT | PM_PAGEINWAIT | PM_WRITEWAIT);        pm_entries[i] &= ~(PM_PAGINGOUT | PM_PAGEINWAIT | PM_WRITEWAIT);
# Line 214  _pager_do_write_request (mach_port_t obj Line 214  _pager_do_write_request (mach_port_t obj
214    
215  /* Implement pageout call back as described by <mach/memory_object.defs>. */  /* Implement pageout call back as described by <mach/memory_object.defs>. */
216  kern_return_t  kern_return_t
217  _pager_seqnos_memory_object_data_return (mach_port_t object,  _pager_seqnos_memory_object_data_return (mach_port_t object,
218                                           mach_port_seqno_t seqno,                                           mach_port_seqno_t seqno,
219                                           mach_port_t control,                                           mach_port_t control,
220                                           vm_offset_t offset,                                           vm_offset_t offset,

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26