Ignore:
Timestamp:
2023-01-30T18:24:15Z (15 months ago)
Author:
Jakub Jermář <jakub@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
64e9cf4, 95658c9
Parents:
0161d16
git-author:
Colin V. Parker <cvparker@…> (2023-01-29 16:30:57)
git-committer:
Jakub Jermář <jakub@…> (2023-01-30 18:24:15)
Message:

Change amd64 pte_t bitfields to have a 40-bit address field and 11-bit reserved field.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/include/arch/mm/page.h

    r0161d16 rf114d40  
    9393/* Get PTE address accessors for each level. */
    9494#define GET_PTL1_ADDRESS_ARCH(ptl0, i) \
    95         ((pte_t *) ((((uint64_t) ((pte_t *) (ptl0))[(i)].addr_12_31) << 12) | \
    96             (((uint64_t) ((pte_t *) (ptl0))[(i)].addr_32_62) << 32)))
     95        ((pte_t *) (((uint64_t) ((pte_t *) (ptl0))[(i)].addr_12_51) << 12))
    9796#define GET_PTL2_ADDRESS_ARCH(ptl1, i) \
    98         ((pte_t *) ((((uint64_t) ((pte_t *) (ptl1))[(i)].addr_12_31) << 12) | \
    99             (((uint64_t) ((pte_t *) (ptl1))[(i)].addr_32_62) << 32)))
     97        ((pte_t *) (((uint64_t) ((pte_t *) (ptl1))[(i)].addr_12_51) << 12))
    10098#define GET_PTL3_ADDRESS_ARCH(ptl2, i) \
    101         ((pte_t *) ((((uint64_t) ((pte_t *) (ptl2))[(i)].addr_12_31) << 12) | \
    102             (((uint64_t) ((pte_t *) (ptl2))[(i)].addr_32_62) << 32)))
     99        ((pte_t *) (((uint64_t) ((pte_t *) (ptl2))[(i)].addr_12_51) << 12))
    103100#define GET_FRAME_ADDRESS_ARCH(ptl3, i) \
    104         ((uintptr_t *) \
    105             ((((uint64_t) ((pte_t *) (ptl3))[(i)].addr_12_31) << 12) | \
    106             (((uint64_t) ((pte_t *) (ptl3))[(i)].addr_32_62) << 32)))
     101        ((uintptr_t *) (((uint64_t) ((pte_t *) (ptl3))[(i)].addr_12_51) << 12))
    107102
    108103/* Set PTE address accessors for each level. */
     
    154149        ((p)->present != 0)
    155150#define PTE_GET_FRAME_ARCH(p) \
    156         ((((uintptr_t) (p)->addr_12_31) << 12) | \
    157             ((uintptr_t) (p)->addr_32_62 << 32))
     151        (((uintptr_t) (p)->addr_12_51) << 12)
    158152#define PTE_WRITABLE_ARCH(p) \
    159153        ((p)->writeable != 0)
     
    202196        unsigned int soft_valid : 1;  /**< Valid content even if present bit is cleared. */
    203197        unsigned int avl : 2;
    204         unsigned int addr_12_31 : 20;
    205         unsigned int addr_32_62 : 31;
     198        unsigned long addr_12_51 : 40;
     199        unsigned int reserved : 11;
    206200        unsigned int no_execute : 1;
    207201} __attribute__((packed)) pte_t;
     
    224218        pte_t *p = &pt[i];
    225219
    226         p->addr_12_31 = (a >> 12) & UINT32_C(0xfffff);
    227         p->addr_32_62 = a >> 32;
     220        p->addr_12_51 = (a >> 12) & UINT64_C(0xffffffffff);
    228221}
    229222
Note: See TracChangeset for help on using the changeset viewer.