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

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

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

revision 1.21 by neal, Tue Apr 2 02:06:59 2002 UTC revision 1.22 by roland, Wed May 8 09:22:14 2002 UTC
# Line 22  Line 22 
22    
23  /* Implement pagein callback as described in <mach/memory_object.defs>. */  /* Implement pagein callback as described in <mach/memory_object.defs>. */
24  kern_return_t  kern_return_t
25  _pager_seqnos_memory_object_data_request (mach_port_t object,  _pager_seqnos_memory_object_data_request (mach_port_t object,
26                                            mach_port_seqno_t seqno,                                            mach_port_seqno_t seqno,
27                                            mach_port_t control,                                            mach_port_t control,
28                                            vm_offset_t offset,                                            vm_offset_t offset,
# Line 43  _pager_seqnos_memory_object_data_request Line 43  _pager_seqnos_memory_object_data_request
43    /* Acquire the right to meddle with the pagemap */    /* Acquire the right to meddle with the pagemap */
44    mutex_lock (&p->interlock);    mutex_lock (&p->interlock);
45    _pager_wait_for_seqno (p, seqno);    _pager_wait_for_seqno (p, seqno);
46      
47    /* sanity checks -- we don't do multi-page requests yet.  */    /* sanity checks -- we don't do multi-page requests yet.  */
48    if (control != p->memobjcntl)    if (control != p->memobjcntl)
49      {      {
# Line 52  _pager_seqnos_memory_object_data_request Line 52  _pager_seqnos_memory_object_data_request
52      }      }
53    if (length != __vm_page_size)    if (length != __vm_page_size)
54      {      {
55        printf ("incg data request: bad length size %d\n", length);        printf ("incg data request: bad length size %zd\n", length);
56        goto release_out;        goto release_out;
57      }      }
58    if (offset % __vm_page_size)    if (offset % __vm_page_size)
# Line 61  _pager_seqnos_memory_object_data_request Line 61  _pager_seqnos_memory_object_data_request
61        goto release_out;        goto release_out;
62      }      }
63    
64    _pager_block_termination (p); /* prevent termination until    _pager_block_termination (p); /* prevent termination until
65                                     mark_object_error is done */                                     mark_object_error is done */
66    
67    if (p->pager_state != NORMAL)    if (p->pager_state != NORMAL)
# Line 99  _pager_seqnos_memory_object_data_request Line 99  _pager_seqnos_memory_object_data_request
99    
100    if (PM_NEXTERROR (*pm_entry) != PAGE_NOERR && (access & VM_PROT_WRITE))    if (PM_NEXTERROR (*pm_entry) != PAGE_NOERR && (access & VM_PROT_WRITE))
101      {      {
102        memory_object_data_error (control, offset, length,        memory_object_data_error (control, offset, length,
103                                  _pager_page_errors[PM_NEXTERROR (*pm_entry)]);                                  _pager_page_errors[PM_NEXTERROR (*pm_entry)]);
104        _pager_mark_object_error (p, offset, length,        _pager_mark_object_error (p, offset, length,
105                                  _pager_page_errors[PM_NEXTERROR (*pm_entry)]);                                  _pager_page_errors[PM_NEXTERROR (*pm_entry)]);
106        *pm_entry = SET_PM_NEXTERROR (*pm_entry, PAGE_NOERR);        *pm_entry = SET_PM_NEXTERROR (*pm_entry, PAGE_NOERR);
107        doread = 0;        doread = 0;
# Line 119  _pager_seqnos_memory_object_data_request Line 119  _pager_seqnos_memory_object_data_request
119    err = pager_read_page (p->upi, offset, &page, &write_lock);    err = pager_read_page (p->upi, offset, &page, &write_lock);
120    if (err)    if (err)
121      goto error_read;      goto error_read;
122      
123    memory_object_data_supply (p->memobjcntl, offset, page, length, 1,    memory_object_data_supply (p->memobjcntl, offset, page, length, 1,
124                               write_lock ? VM_PROT_WRITE : VM_PROT_NONE, 0,                               write_lock ? VM_PROT_WRITE : VM_PROT_NONE, 0,
125                               MACH_PORT_NULL);                               MACH_PORT_NULL);

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