Changeset 437 for trunk/kernel/mm/ppm.c


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

Fix various bugs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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()
Note: See TracChangeset for help on using the changeset viewer.