Changeset d9ee2ea in mainline for kernel/arch/ia64/include/mm/asid.h


Ignore:
Timestamp:
2010-01-10T20:48:38Z (15 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
52cdcbc
Parents:
0ff9e67
Message:

Change the way how RIDs are mapped onto ASIDs. Instead of 7 RIDs per ASID, now
there will be 8 RIDs per one ASID. This will slightly reduce the number of
available ASIDs, but not significantly.

The kernel will now have all 8 RIDs instead of only one. RID 0 - 7 belong to the
kernel, but only RID 7 accessible from VRN 7 is actually used by the kernel.
This allows us to use RID 0 for VRN 0 and differentiate thus between
0x0000000000000000 and 0xe000000000000000 in a more elegant way. test fault1
will now associate the kernel bad trap with RID 0 which maps to ASID_KERNEL.

User tasks will also be given 8 RIDs, but will use only the lower 7 that fit
into VRN 0 - 6, because the last VRN needs to be reserved for the kernel. The
eighth RID will be unused for now. It can be used for something completely
different one day or if the task needs to establish some special mappings.

So with this change, the kernel now has a 64-bit address space compared to
previous 61 bits, but still makes use only of the highest 1/8 (i.e. 61-bits).
Applications continue to have an address space composed of 7 61-bit blocks which
are arranged in a consecutive way. Each application now has one hidden and
currently unused 61-bit segment.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/include/mm/asid.h

    r0ff9e67 rd9ee2ea  
    5050 * but those extra bits are not used by the kernel.
    5151 */
    52 #define RIDS_PER_ASID           7
     52#define RIDS_PER_ASID           8
    5353
    5454#define RID_MAX                 262143          /* 2^18 - 1 */
    55 #define RID_KERNEL              0
    56 #define RID_INVALID             1
     55#define RID_KERNEL7             7
    5756
    58 #define ASID2RID(asid, vrn)     (((asid)>RIDS_PER_ASID)?(((asid)*RIDS_PER_ASID)+(vrn)):(asid))
    59 #define RID2ASID(rid)           ((rid)/RIDS_PER_ASID)
     57#define ASID2RID(asid, vrn) \
     58        ((asid) * RIDS_PER_ASID + (vrn))
    6059
    61 #define ASID_MAX_ARCH           (RID_MAX/RIDS_PER_ASID)
     60#define RID2ASID(rid) \
     61        ((rid) / RIDS_PER_ASID)
     62
     63#define ASID_MAX_ARCH           (RID_MAX / RIDS_PER_ASID)
    6264
    6365#endif
Note: See TracChangeset for help on using the changeset viewer.