Ignore:
Timestamp:
Aug 2, 2017, 3:24:57 PM (5 years ago)
Author:
alain
Message:

RSeveral modifs in the page-fault handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/syscalls/sys_read.c

    r265 r313  
    4141{
    4242    error_t      error;
    43     paddr_t      paddr;
    44     char         kbuf[CONFIG_VFS_KBUF_SIZE];
    45 
     43    paddr_t      paddr;       // required for user space checking
    4644        xptr_t       file_xp;     // remote file extended pointer
    47     uint32_t     nbytes;      // number of bytes in one iteration
    4845
    4946        thread_t  *  this    = CURRENT_THREAD;
     
    9491                return -1;
    9592        }
    96    
    97     // transfer at most CONFIG_VFS_KBUF_SIZE bytes per iteration
    98     while( count )
     93   
     94    // transfer count bytes directly from mapper to user buffer
     95    error = vfs_user_move( true,               // to_buffer
     96                           file_xp ,
     97                           buf,
     98                           count );
     99
     100    if( error )
    99101    {
    100         if( count <= CONFIG_VFS_KBUF_SIZE )
    101         {
    102             nbytes = count;
    103             count  = 0;
    104         }
    105         else
    106         {
    107             nbytes = CONFIG_VFS_KBUF_SIZE;
    108             count  = count - CONFIG_VFS_KBUF_SIZE;
    109         }
    110 
    111         // transfer nbytes to kernel buffer
    112         error = vfs_move( true,               // to_buffer
    113                           true,               // is_user
    114                           file_xp ,
    115                           kbuf ,
    116                           nbytes );
    117 
    118         if( error )
    119         {
    120             printk("\n[ERROR] in %s cannot read data from file %d\n",
    121                    __FUNCTION__ , file_id );
    122             this->errno = error;
    123             return -1;
    124         }
    125 
    126         // copy kernel buffer to user space
    127         hal_copy_to_uspace( buf , kbuf , nbytes );
     102        printk("\n[ERROR] in %s cannot read data from file %d\n",
     103               __FUNCTION__ , file_id );
     104        this->errno = error;
     105        return -1;
    128106    }
    129107
Note: See TracChangeset for help on using the changeset viewer.