lkml.org 
[lkml]   [2016]   [Feb]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 6/7] arm64: Add helper for extracting ASIDBits
    Date
    Add a helper to extract ASIDBits on the current cpu

    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    ---
    arch/arm64/mm/context.c | 36 +++++++++++++++++++++++-------------
    1 file changed, 23 insertions(+), 13 deletions(-)

    diff --git a/arch/arm64/mm/context.c b/arch/arm64/mm/context.c
    index e87f53f..643bf4b 100644
    --- a/arch/arm64/mm/context.c
    +++ b/arch/arm64/mm/context.c
    @@ -40,6 +40,28 @@ static cpumask_t tlb_flush_pending;
    #define ASID_FIRST_VERSION (1UL << asid_bits)
    #define NUM_USER_ASIDS ASID_FIRST_VERSION

    +/* Get the ASIDBits supported by the current CPU */
    +static u32 get_cpu_asid_bits(void)
    +{
    + u32 asid;
    + int fld = cpuid_feature_extract_field(read_cpuid(ID_AA64MMFR0_EL1),
    + ID_AA64MMFR0_ASID_SHIFT);
    +
    + switch (fld) {
    + default:
    + pr_warn("CPU%d: Unknown ASID size (%d); assuming 8-bit\n",
    + smp_processor_id(), fld);
    + /* Fallthrough */
    + case 0:
    + asid = 8;
    + break;
    + case 2:
    + asid = 16;
    + }
    +
    + return asid;
    +}
    +
    static void flush_context(unsigned int cpu)
    {
    int i;
    @@ -187,19 +209,7 @@ switch_mm_fastpath:

    static int asids_init(void)
    {
    - int fld = cpuid_feature_extract_field(read_cpuid(ID_AA64MMFR0_EL1), 4);
    -
    - switch (fld) {
    - default:
    - pr_warn("Unknown ASID size (%d); assuming 8-bit\n", fld);
    - /* Fallthrough */
    - case 0:
    - asid_bits = 8;
    - break;
    - case 2:
    - asid_bits = 16;
    - }
    -
    + asid_bits = get_cpu_asid_bits();
    /* If we end up with more CPUs than ASIDs, expect things to crash */
    WARN_ON(NUM_USER_ASIDS < num_possible_cpus());
    atomic64_set(&asid_generation, ASID_FIRST_VERSION);
    --
    1.7.9.5
    \
     
     \ /
      Last update: 2016-02-23 12:01    [W:5.063 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site