Changeset 437 for trunk/kernel/mm


Ignore:
Timestamp:
Mar 28, 2018, 2:40:29 PM (7 years ago)
Author:
alain
Message:

Fix various bugs

Location:
trunk/kernel/mm
Files:
5 edited

Legend:

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

    r435 r437  
    33 *
    44 * Author  Ghassan Almaless (2008,2009,2010,2011,2012)
    5  *         Alain Greiner    (2016,2017)
     5 *         Alain Greiner    (2016,2017,2018)
    66 *
    77 * Copyright (c) UPMC Sorbonne Universites
     
    239239        uint32_t  blocks_nr = (CONFIG_PPM_PAGE_SIZE - CONFIG_KCM_SLOT_SIZE) / block_size;
    240240        kcm->blocks_nr = blocks_nr;
    241 
    242         kcm_dmsg("\n[DBG] %s : KCM %s initialised / block_size = %d / blocks_nr = %d\n",
    243                  __FUNCTION__ , kmem_type_str( type ) , kcm->block_size , kcm->blocks_nr );
    244241}
    245242
  • trunk/kernel/mm/kcm.h

    r188 r437  
    33 *
    44 * Authors  Ghassan Almaless (2008,2009,2010,2011,2012)
    5  *          Alain Greiner    (2016)
     5 *          Alain Greiner    (2016,2017,2018)
    66 *
    77 * Copyright (c) UPMC Sorbonne Universites
  • trunk/kernel/mm/ppm.c

    r433 r437  
    5454
    5555    cxy_t    page_cxy = GET_CXY( page_xp );
    56     page_t * page_ptr = (page_t *)GET_PTR( page_xp );
     56    page_t * page_ptr = GET_PTR( page_xp );
    5757
    5858   void   * base_ptr = ppm->vaddr_base +
     
    6969
    7070    cxy_t    base_cxy = GET_CXY( base_xp );
    71     void   * base_ptr = (void *)GET_PTR( base_xp );
     71    void   * base_ptr = GET_PTR( base_xp );
    7272
    7373        page_t * page_ptr = ppm->pages_tbl +
     
    8686
    8787    cxy_t    page_cxy = GET_CXY( page_xp );
    88     page_t * page_ptr = (page_t *)GET_PTR( page_xp );
     88    page_t * page_ptr = GET_PTR( page_xp );
    8989
    9090    paddr_t  paddr    = PADDR( page_cxy , (page_ptr - ppm->pages_tbl)<<CONFIG_PPM_PAGE_SHIFT );
    9191
    92     return paddr >> CONFIG_PPM_PAGE_SHIFT;
     92    return (ppn_t)(paddr >> CONFIG_PPM_PAGE_SHIFT);
    9393
    9494}  // end hal_page2ppn()
     
    9797inline xptr_t ppm_ppn2page( ppn_t ppn )
    9898{
    99         ppm_t  * ppm      = &LOCAL_CLUSTER->ppm;
    100 
    101     paddr_t  paddr    = ppn << CONFIG_PPM_PAGE_SHIFT;
    102 
    103     cxy_t    page_cxy = CXY_FROM_PADDR( paddr );
    104     lpa_t    page_lpa = LPA_FROM_PADDR( paddr );
    105 
    106     return XPTR( page_cxy , &ppm->pages_tbl[page_lpa>>CONFIG_PPM_PAGE_SHIFT] );
     99        ppm_t   * ppm  = &LOCAL_CLUSTER->ppm;
     100
     101    paddr_t  paddr = ((paddr_t)ppn) << CONFIG_PPM_PAGE_SHIFT;
     102
     103    cxy_t    cxy  = CXY_FROM_PADDR( paddr );
     104    lpa_t    lpa  = LPA_FROM_PADDR( paddr );
     105
     106    return XPTR( cxy , &ppm->pages_tbl[lpa>>CONFIG_PPM_PAGE_SHIFT] );
    107107
    108108}  // end hal_ppn2page
     
    113113inline xptr_t ppm_ppn2base( ppn_t ppn )
    114114{
    115         ppm_t  * ppm      = &LOCAL_CLUSTER->ppm;
     115        ppm_t  * ppm   = &LOCAL_CLUSTER->ppm;
    116116   
    117     paddr_t  paddr    = ppn << CONFIG_PPM_PAGE_SHIFT;
    118 
    119     cxy_t    page_cxy = CXY_FROM_PADDR( paddr );
    120     lpa_t    page_lpa = LPA_FROM_PADDR( paddr );
    121 
    122     void   * base_ptr = (void *)ppm->vaddr_base + (page_lpa & ~CONFIG_PPM_PAGE_SHIFT);
    123  
    124         return XPTR( page_cxy , base_ptr );
     117    paddr_t  paddr = ((paddr_t)ppn) << CONFIG_PPM_PAGE_SHIFT;
     118
     119    cxy_t    cxy   = CXY_FROM_PADDR( paddr );
     120    lpa_t    lpa   = LPA_FROM_PADDR( paddr );
     121
     122        return XPTR( cxy , (void *)ppm->vaddr_base + lpa );
    125123
    126124}  // end ppm_ppn2base()
     
    132130
    133131    cxy_t    base_cxy = GET_CXY( base_xp );
    134     void   * base_ptr = (void *)GET_PTR( base_xp );
     132    void   * base_ptr = GET_PTR( base_xp );
    135133
    136134    paddr_t  paddr    = PADDR( base_cxy , (base_ptr - ppm->vaddr_base) );
    137135
    138     return paddr >> CONFIG_PPM_PAGE_SHIFT;
     136    return (ppn_t)(paddr >> CONFIG_PPM_PAGE_SHIFT);
    139137
    140138}  // end ppm_base2ppn()
  • trunk/kernel/mm/vmm.c

    r435 r437  
    673673#endif
    674674
     675#if (CONFIG_DEBUG_VMM_DESTROY & 1 )
     676vmm_display( process , true );
     677#endif
     678
    675679    // get pointer on local VMM
    676680    vmm_t  * vmm = &process->vmm;
     
    690694        vseg    = GET_PTR( vseg_xp );
    691695
    692         // unmap rand release physical pages if required)
     696#if( CONFIG_DEBUG_VMM_DESTROY & 1 )
     697if( CONFIG_DEBUG_VMM_DESTROY < cycle )
     698printk("\n[DBG] %s : %s / vpn_base %x / vpn_size %d\n",
     699__FUNCTION__ , vseg_type_str( vseg->type ), vseg->vpn_base, vseg->vpn_size );
     700#endif
     701
     702        // unmap and release physical pages
    693703        vmm_unmap_vseg( process , vseg );
    694704
     
    11201130        if( attr & GPT_MAPPED )  // entry is mapped
    11211131        {
     1132
     1133#if( CONFIG_DEBUG_VMM_UNMAP_VSEG & 1 )
     1134if( CONFIG_DEBUG_VMM_UNMAP_VSEG < cycle )
     1135printk("- vpn %x / ppn %x\n" , vpn , ppn );
     1136#endif
     1137
    11221138            // check small page
    11231139            assert( (attr & GPT_SMALL) , __FUNCTION__ ,
     
    11401156                // FIXME lock the physical page
    11411157
    1142                 // get extended pointer on pending forks counter
    1143                 forks_xp = XPTR( page_cxy , &page_ptr->forks );
    1144 
    11451158                // get pending forks counter
    1146                 count = hal_remote_lw( forks_xp );
     1159                count = hal_remote_lw( XPTR( page_cxy , &page_ptr->forks ) );
    11471160               
    11481161                if( count )  // decrement pending forks counter
    11491162                {
     1163                    forks_xp = XPTR( page_cxy , &page_ptr->forks );
    11501164                    hal_remote_atomic_add( forks_xp , -1 );
    11511165                } 
  • trunk/kernel/mm/vmm.h

    r433 r437  
    44 * Authors   Ghassan Almaless (2008,2009,2010,2011, 2012)
    55 *           Mohamed Lamine Karaoui (2015)
    6  *           Alain Greiner (2016,2017)
     6 *           Alain Greiner (2016,2017,2018)
    77 *
    88 * Copyright (c) UPMC Sorbonne Universites
Note: See TracChangeset for help on using the changeset viewer.