Ignore:
Timestamp:
Jul 21, 2017, 7:36:08 AM (7 years ago)
Author:
alain
Message:

Fix several bugs in VFS.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/mm/mapper.c

    r246 r265  
    169169        if ( page == NULL )   // missing page => create it and load it from file system
    170170        {
    171             mapper_dmsg("\n[INFO] %s : missing page => load from FS\n", __FUNCTION__ );
     171            mapper_dmsg("\n[INFO] %s : missing page => load from device\n", __FUNCTION__ );
    172172
    173173            // allocate one page from PPM
     
    298298}  // end mapper_release_page()
    299299
    300 /////////////////////////////////////////
    301 error_t mapper_move( mapper_t  *  mapper,
    302                      bool_t       to_buffer,
    303                      uint32_t     file_offset,
    304                      void      *  buffer,
    305                      uint32_t     size )
     300////////////////////////////////////////////////
     301error_t mapper_move_buffer( mapper_t  *  mapper,
     302                            bool_t       to_buffer,
     303                            bool_t       is_user,
     304                            uint32_t     file_offset,
     305                            void      *  buffer,
     306                            uint32_t     size )
    306307{
    307308    uint32_t   page_offset;    // first byte to move to/from a mapper page
     
    313314    uint8_t  * buf_ptr;        // current buffer  address
    314315 
    315     mapper_dmsg("\n[INFO] %s : enter / to_buf = %d / buffer = %x\n",
     316    mapper_dmsg("\n[INFO] %s : enters / to_buf = %d / buffer = %x\n",
    316317                __FUNCTION__ , to_buffer , buffer );
    317318
     
    339340        else                       page_count = CONFIG_PPM_PAGE_SIZE;
    340341
     342        mapper_dmsg("\n[INFO] %s : index = %d / offset = %d / count = %d\n",
     343                    __FUNCTION__ , index , page_offset , page_count );
     344
    341345        // get page descriptor
    342346        page = mapper_get_page( mapper , index );
     
    350354        buf_ptr = (uint8_t *)buffer + done;
    351355
     356        mapper_dmsg("\n[INFO] %s : index = %d / buf_ptr = %x / map_ptr = %x\n",
     357                    __FUNCTION__ , index , buf_ptr , map_ptr );
     358
    352359        // move fragment
    353360        if( to_buffer )
    354361        {
    355             hal_copy_to_uspace( buf_ptr , map_ptr , page_count );
    356         }
    357         else
     362            if( is_user ) hal_copy_to_uspace( buf_ptr , map_ptr , page_count );
     363            else          memcpy( buf_ptr , map_ptr , page_count );
     364        }
     365        else                 
    358366        {
    359367            page_do_dirty( page );
    360             hal_copy_from_uspace( map_ptr , buf_ptr , page_count );
     368            if( is_user ) hal_copy_from_uspace( map_ptr , buf_ptr , page_count );
     369            else          memcpy( map_ptr , buf_ptr , page_count );
    361370        }
    362371
     
    369378    return 0;
    370379
    371 }  // end mapper_move()
    372 
     380}  // end mapper_move_buffer()
     381
Note: See TracChangeset for help on using the changeset viewer.