10 Jan, 2019

2 commits

  • commit ff4dd232ec45a0e45ea69f28f069f2ab22b4908a upstream.

    ASIDs have always been stored as unsigned longs, ie. 32 bits on MIPS32
    kernels. This is problematic because it is feasible for the ASID version
    to overflow & wrap around to zero.

    We currently attempt to handle this overflow by simply setting the ASID
    version to 1, using asid_first_version(), but we make no attempt to
    account for the fact that there may be mm_structs with stale ASIDs that
    have versions which we now reuse due to the overflow & wrap around.

    Encountering this requires that:

    1) A struct mm_struct X is active on CPU A using ASID (V,n).

    2) That mm is not used on CPU A for the length of time that it takes
    for CPU A's asid_cache to overflow & wrap around to the same
    version V that the mm had in step 1. During this time tasks using
    the mm could either be sleeping or only scheduled on other CPUs.

    3) Some other mm Y becomes active on CPU A and is allocated the same
    ASID (V,n).

    4) mm X now becomes active on CPU A again, and now incorrectly has the
    same ASID as mm Y.

    Where struct mm_struct ASIDs are represented above in the format
    (version, EntryHi.ASID), and on a typical MIPS32 system version will be
    24 bits wide & EntryHi.ASID will be 8 bits wide.

    The length of time required in step 2 is highly dependent upon the CPU &
    workload, but for a hypothetical 2GHz CPU running a workload which
    generates a new ASID every 10000 cycles this period is around 248 days.
    Due to this long period of time & the fact that tasks need to be
    scheduled in just the right (or wrong, depending upon your inclination)
    way, this is obviously a difficult bug to encounter but it's entirely
    possible as evidenced by reports.

    In order to fix this, simply extend ASIDs to 64 bits even on MIPS32
    builds. This will extend the period of time required for the
    hypothetical system above to encounter the problem from 28 days to
    around 3 trillion years, which feels safely outside of the realms of
    possibility.

    The cost of this is slightly more generated code in some commonly
    executed paths, but this is pretty minimal:

    | Code Size Gain | Percentage
    -----------------------|----------------|-------------
    decstation_defconfig | +270 | +0.00%
    32r2el_defconfig | +652 | +0.01%
    32r6el_defconfig | +1000 | +0.01%

    I have been unable to measure any change in performance of the LMbench
    lat_ctx or lat_proc tests resulting from the 64b ASIDs on either
    32r2el_defconfig+interAptiv or 32r6el_defconfig+I6500 systems.

    Signed-off-by: Paul Burton
    Suggested-by: James Hogan
    References: https://lore.kernel.org/linux-mips/80B78A8B8FEE6145A87579E8435D78C30205D5F3@fzex.ruijie.com.cn/
    References: https://lore.kernel.org/linux-mips/1488684260-18867-1-git-send-email-jiwei.sun@windriver.com/
    Cc: Jiwei Sun
    Cc: Yu Huabing
    Cc: stable@vger.kernel.org # 2.6.12+
    Cc: linux-mips@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Paul Burton
     
  • commit bb53fdf395eed103f85061bfff3b116cee123895 upstream.

    For multi-node Loongson-3 (NUMA configuration), r4k_blast_scache() can
    only flush Node-0's scache. So we add r4k_blast_scache_node() by using
    (CAC_BASE | (node_id << NODE_ADDRSPACE_SHIFT)) instead of CKSEG0 as the
    start address.

    Signed-off-by: Huacai Chen
    [paul.burton@mips.com: Include asm/mmzone.h from asm/r4kcache.h for
    nid_to_addrbase(). Add asm/mach-generic/mmzone.h
    to allow inclusion for all platforms.]
    Signed-off-by: Paul Burton
    Patchwork: https://patchwork.linux-mips.org/patch/21129/
    Cc: Ralf Baechle
    Cc: James Hogan
    Cc: Steven J . Hill
    Cc: linux-mips@linux-mips.org
    Cc: Fuxin Zhang
    Cc: Zhangjin Wu
    Cc: # 3.15+
    Signed-off-by: Greg Kroah-Hartman

    Huacai Chen
     

20 Sep, 2018

1 commit

  • [ Upstream commit d4da0e97baea8768b3d66ccef3967bebd50dfc3b ]

    If a driver causes DMA cache maintenance with a zero length then we
    currently BUG and kill the kernel. As this is a scenario that we may
    well be able to recover from, WARN & return in the condition instead.

    Signed-off-by: Paul Burton
    Acked-by: Florian Fainelli
    Patchwork: https://patchwork.linux-mips.org/patch/14623/
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Paul Burton
     

17 Jul, 2018

1 commit

  • commit 523402fa9101090c91d2033b7ebdfdcf65880488 upstream.

    We currently attempt to check whether a physical address range provided
    to __ioremap() may be in use by the page allocator by examining the
    value of PageReserved for each page in the region - lowmem pages not
    marked reserved are presumed to be in use by the page allocator, and
    requests to ioremap them fail.

    The way we check this has been broken since commit 92923ca3aace ("mm:
    meminit: only set page reserved in the memblock region"), because
    memblock will typically not have any knowledge of non-RAM pages and
    therefore those pages will not have the PageReserved flag set. Thus when
    we attempt to ioremap a region outside of RAM we incorrectly fail
    believing that the region is RAM that may be in use.

    In most cases ioremap() on MIPS will take a fast-path to use the
    unmapped kseg1 or xkphys virtual address spaces and never hit this path,
    so the only way to hit it is for a MIPS32 system to attempt to ioremap()
    an address range in lowmem with flags other than _CACHE_UNCACHED.
    Perhaps the most straightforward way to do this is using
    ioremap_uncached_accelerated(), which is how the problem was discovered.

    Fix this by making use of walk_system_ram_range() to test the address
    range provided to __ioremap() against only RAM pages, rather than all
    lowmem pages. This means that if we have a lowmem I/O region, which is
    very common for MIPS systems, we're free to ioremap() address ranges
    within it. A nice bonus is that the test is no longer limited to lowmem.

    The approach here matches the way x86 performed the same test after
    commit c81c8a1eeede ("x86, ioremap: Speed up check for RAM pages") until
    x86 moved towards a slightly more complicated check using walk_mem_res()
    for unrelated reasons with commit 0e4c12b45aa8 ("x86/mm, resource: Use
    PAGE_KERNEL protection for ioremap of memory pages").

    Signed-off-by: Paul Burton
    Reported-by: Serge Semin
    Tested-by: Serge Semin
    Fixes: 92923ca3aace ("mm: meminit: only set page reserved in the memblock region")
    Cc: James Hogan
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: stable@vger.kernel.org # v4.2+
    Patchwork: https://patchwork.linux-mips.org/patch/19786/
    Signed-off-by: Greg Kroah-Hartman

    Paul Burton
     

30 May, 2018

1 commit

  • commit 55a2aa08b3af519a9693f99cdf7fa6d8b62d9f65 upstream.

    When DMA will be performed to a MIPS32 1004K CPS, the L1-cache for the
    range needs to be flushed and invalidated first.
    The code currently takes one of two approaches.
    1/ If the range is less than the size of the dcache, then HIT type
    requests flush/invalidate cache lines for the particular addresses.
    HIT-type requests a globalised by the CPS so this is safe on SMP.

    2/ If the range is larger than the size of dcache, then INDEX type
    requests flush/invalidate the whole cache. INDEX type requests affect
    the local cache only. CPS does not propagate them in any way. So this
    invalidation is not safe on SMP CPS systems.

    Data corruption due to '2' can quite easily be demonstrated by
    repeatedly "echo 3 > /proc/sys/vm/drop_caches" and then sha1sum a file
    that is several times the size of available memory. Dropping caches
    means that large contiguous extents (large than dcache) are more likely.

    This was not a problem before Linux-4.8 because option 2 was never used
    if CONFIG_MIPS_CPS was defined. The commit which removed that apparently
    didn't appreciate the full consequence of the change.

    We could, in theory, globalize the INDEX based flush by sending an IPI
    to other cores. These cache invalidation routines can be called with
    interrupts disabled and synchronous IPI require interrupts to be
    enabled. Asynchronous IPI may not trigger writeback soon enough. So we
    cannot use IPI in practice.

    We can already test if IPI would be needed for an INDEX operation with
    r4k_op_needs_ipi(R4K_INDEX). If this is true then we mustn't try the
    INDEX approach as we cannot use IPI. If this is false (e.g. when there
    is only one core and hence one L1 cache) then it is safe to use the
    INDEX approach without IPI.

    This patch avoids options 2 if r4k_op_needs_ipi(R4K_INDEX), and so
    eliminates the corruption.

    Fixes: c00ab4896ed5 ("MIPS: Remove cpu_has_safe_index_cacheops")
    Signed-off-by: NeilBrown
    Cc: Ralf Baechle
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: # 4.8+
    Patchwork: https://patchwork.linux-mips.org/patch/19259/
    Signed-off-by: James Hogan
    Signed-off-by: Greg Kroah-Hartman

    NeilBrown
     

05 Nov, 2017

1 commit

  • Pull MIPS fixes from James Hogan:
    "A selection of important MIPS fixes for 4.14, and some MAINTAINERS /
    email address updates:

    Maintainership updates:
    - imgtec.com -> mips.com email addresses (this trivially updates
    comments in quite a few files, as well as MAINTAINERS)
    - Pistachio SoC maintainership update

    Fixes:
    - NI 169445 build (new platform in 4.14)
    - EVA regression (4.14)
    - SMP-CPS build & preemption regressions (4.14)
    - SMP/hotplug deadlock & race (deadlock reintroduced 4.13)
    - ebpf_jit error return (4.13)
    - SMP-CMP build regressions (4.11 and 4.14)
    - bad UASM microMIPS encoding (3.16)
    - CM definitions (3.15)"

    [ I had taken the email address updates separately, because I didn't
    expect James to send a pull request, so those got applied twice. - Linus]

    * tag 'mips_fixes_4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/mips:
    MIPS: Update email address for Marcin Nowakowski
    MIPS: smp-cmp: Fix vpe_id build error
    MAINTAINERS: Update Pistachio platform maintainers
    MIPS: smp-cmp: Use right include for task_struct
    MIPS: Update Goldfish RTC driver maintainer email address
    MIPS: Update RINT emulation maintainer email address
    MIPS: CPS: Fix use of current_cpu_data in preemptible code
    MIPS: SMP: Fix deadlock & online race
    MIPS: bpf: Fix a typo in build_one_insn()
    MIPS: microMIPS: Fix incorrect mask in insn_table_MM
    MIPS: Fix CM region target definitions
    MIPS: generic: Fix compilation error from include asm/mips-cpc.h
    MIPS: Fix exception entry when CONFIG_EVA enabled
    MIPS: generic: Fix NI 169445 its build
    Update MIPS email addresses

    Linus Torvalds
     

04 Nov, 2017

1 commit

  • MIPS will soon not be a part of Imagination Technologies, and as such
    many @imgtec.com email addresses will no longer be valid. This patch
    updates the addresses for those who:

    - Have 10 or more patches in mainline authored using an @imgtec.com
    email address, or any patches dated within the past year.

    - Are still with Imagination but leaving as part of the MIPS business
    unit, as determined from an internal email address list.

    - Haven't already updated their email address (ie. JamesH) or expressed
    a desire to be excluded (ie. Maciej).

    - Acked v2 or earlier of this patch, which leaves Deng-Cheng, Matt &
    myself.

    New addresses are of the form firstname.lastname@mips.com, and all
    verified against an internal email address list. An entry is added to
    .mailmap for each person such that get_maintainer.pl will report the new
    addresses rather than @imgtec.com addresses which will soon be dead.

    Instances of the affected addresses throughout the tree are then
    mechanically replaced with the new @mips.com address.

    Signed-off-by: Paul Burton
    Cc: Deng-Cheng Zhu
    Cc: Deng-Cheng Zhu
    Acked-by: Dengcheng Zhu
    Cc: Matt Redfearn
    Cc: Matt Redfearn
    Acked-by: Matt Redfearn
    Cc: Andrew Morton
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Cc: trivial@kernel.org
    Signed-off-by: Linus Torvalds

    Paul Burton
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

01 Nov, 2017

2 commits

  • It seems that this is a typo error and the proper bit masking is
    "RT | RS" instead of "RS | RS".

    This issue was detected with the help of Coccinelle.

    Fixes: d6b3314b49e1 ("MIPS: uasm: Add lh uam instruction")
    Reported-by: Julia Lawall
    Signed-off-by: Gustavo A. R. Silva
    Reviewed-by: James Hogan
    Cc: # 3.16+
    Patchwork: https://patchwork.linux-mips.org/patch/17551/
    Signed-off-by: James Hogan

    Gustavo A. R. Silva
     
  • MIPS will soon not be a part of Imagination Technologies, and as such
    many @imgtec.com email addresses will no longer be valid. This patch
    updates the addresses for those who:

    - Have 10 or more patches in mainline authored using an @imgtec.com
    email address, or any patches dated within the past year.

    - Are still with Imagination but leaving as part of the MIPS business
    unit, as determined from an internal email address list.

    - Haven't already updated their email address (ie. JamesH) or expressed
    a desire to be excluded (ie. Maciej).

    - Acked v2 or earlier of this patch, which leaves Deng-Cheng, Matt &
    myself.

    New addresses are of the form firstname.lastname@mips.com, and all
    verified against an internal email address list. An entry is added to
    .mailmap for each person such that get_maintainer.pl will report the new
    addresses rather than @imgtec.com addresses which will soon be dead.

    Instances of the affected addresses throughout the tree are then
    mechanically replaced with the new @mips.com address.

    Signed-off-by: Paul Burton
    Cc: Deng-Cheng Zhu
    Cc: Deng-Cheng Zhu
    Acked-by: Dengcheng Zhu
    Cc: Matt Redfearn
    Cc: Matt Redfearn
    Acked-by: Matt Redfearn
    Cc: Andrew Morton
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Cc: trivial@kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/17540/
    Signed-off-by: James Hogan

    Paul Burton
     

06 Sep, 2017

1 commit

  • This will allow kdump dumps to work correclty with MIPS and
    future DWARF unwinding of the stack to give accurate tracebacks.

    Signed-off-by: Corey Minyard
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/16990/
    Signed-off-by: Ralf Baechle

    Corey Minyard
     

30 Aug, 2017

2 commits

  • With Coherence Manager (CM) 3.5 information about the topology of the
    system, which has previously only been available through & accessed from
    the CM, is now also provided by the Cluster Power Controller (CPC). This
    includes a new CPC_CONFIG register mirroring GCR_CONFIG, and similarly a
    new CPC_Cx_CONFIG register mirroring GCR_Cx_CONFIG.

    In preparation for adjusting functions such as mips_cm_numcores(), which
    have previously only needed to access the CM, to also access the CPC
    this patch modifies the way we use the various CPS headers. Rather than
    having users include asm/mips-cm.h or asm/mips-cpc.h individually we
    instead have users include asm/mips-cps.h which in turn includes
    asm/mips-cm.h & asm/mips-cpc.h. This means that users will gain access
    to both CM & CPC registers by including one header, and most importantly
    it makes asm/mips-cps.h an ideal location for helper functions which
    need to access the various components of the CPS.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17015/
    Patchwork: https://patchwork.linux-mips.org/patch/17217/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Make use of the new change_*, set_* & clear_* accessor functions for CPS
    (CM, CPC & GIC) registers where doing so makes the code easier to read
    or shortens it without adversely affecting readability.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17005/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

29 Aug, 2017

8 commits

  • There's no reason for us not to use BIT() & GENMASK() in asm/mips-cm.h
    when declaring macros corresponding to register fields. This patch
    modifies our definitions to do so.

    The *_SHF definitions are removed entirely - they duplicate information
    found in the masks, are infrequently used & can be replaced with use of
    __ffs() where needed.

    The *_MSK definitions then lose their _MSK suffix which is now somewhat
    redundant, and users are modified to match.

    The field definitions are moved to follow the appropriate register's
    accessor functions, which helps to keep the field definitions in order &
    to find the appropriate fields for a given register. Whilst here a
    comment is added describing each register & including its name, which is
    helpful both for linking the register back to hardware documentation &
    for grepping purposes.

    This also cleans up a couple of issues that became obvious as a result
    of making the changes described above:

    - We previously had definitions for GCR_Cx_RESET_EXT_BASE & a phony
    copy of that named GCR_RESET_EXT_BASE - a register which does not
    exist. The bad definitions were added by commit 497e803ebf98 ("MIPS:
    smp-cps: Ensure secondary cores start with EVA disabled") and made
    use of from boot_core(), which is now modified to use the
    GCR_Cx_RESET_EXT_BASE definitions.

    - We had a typo in CM_GCR_ERROR_CAUSE_ERRINGO_MSK - we now correctly
    define this as inFo rather than inGo.

    Now that we don't duplicate field information between _SHF & _MSK
    definitions, and keep the fields next to the register accessors, it will
    be much easier to spot & prevent any similar oddities being introduced
    in the future.

    Signed-off-by: Paul Burton
    Acked-by: Thomas Gleixner

    Paul Burton
     
  • We currently have various variables & functions which are only used
    within a single translation unit, but which we don't declare static.
    This causes various sparse warnings of the form:

    arch/mips/kernel/mips-r2-to-r6-emul.c:49:1: warning: symbol
    'mipsr2emustats' was not declared. Should it be static?

    arch/mips/kernel/unaligned.c:1381:11: warning: symbol 'reg16to32st'
    was not declared. Should it be static?

    arch/mips/mm/mmap.c:146:15: warning: symbol 'arch_mmap_rnd' was not
    declared. Should it be static?

    Fix these & others by declaring various affected variables & functions
    static, avoiding the sparse warnings & redundant symbols.

    [ralf@linux-mips.org: Add Marcin's build fix.]

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: trivial@kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/17176/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • The __invalidate_kernel_vmap_range function pointer global variable
    isn't used anywhere. Remove it.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: trivial@kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/17174/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • arch/mips/mm/init.c provides our implementation of free_initrd_mem(),
    but doesn't include the linux/initrd.h header which declares them. This
    leads to a warning from sparse:

    arch/mips/mm/init.c:501:6: warning: symbol 'free_initrd_mem' was not
    declared. Should it be static?

    Fix this by including linux/initrd.h to get the declaration of
    free_initrd_mem().

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: trivial@kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/17172/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • arch/mips/mm/mmap.c provides our implementations of the arch_mmap_rnd()
    & arch_randomize_brk() functions, but doesn't include the
    linux/elf-randomize.h header which declares them. This leads to warnings
    from sparse:

    arch/mips/mm/mmap.c:146:15: warning: symbol 'arch_mmap_rnd' was not
    declared. Should it be static?
    arch/mips/mm/mmap.c:190:15: warning: symbol 'arch_randomize_brk' was
    not declared. Should it be static?

    Fix this by including linux/elf-randomize.h to get the declarations of
    arch_mmap_rnd() & arch_randomize_brk().

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: trivial@kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/17171/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • arch/mips/mm/cache.c provides our implementation of the cpu_cache_init()
    function, but doesn't include the asm/setup.h header which declares it.
    This leads to a warning from sparse:

    arch/mips/mm/cache.c:274:6: warning: symbol 'cpu_cache_init' was not
    declared. Should it be static?

    Fix this by including asm/setup.h to get the declaration of
    cpu_cache_init().

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: trivial@kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/17168/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Besides eliminating lots of duplication this also allows allocations with
    the DMA_ATTR_NON_CONSISTENT to use the CMA allocator.

    Signed-off-by: Christoph Hellwig
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/17181/
    Signed-off-by: Ralf Baechle

    Christoph Hellwig
     
  • The kernel contains a small amount of incomplete code aimed at
    supporting old R6000 CPUs. This is:

    - Unused, as no machine selects CONFIG_SYS_HAS_CPU_R6000.

    - Broken, since there are glaring errors such as r6000_fpu.S moving
    the FCSR register to t1, then ignoring it & instead saving t0 into
    struct sigcontext...

    - A maintenance headache, since it's code that nobody can test which
    nevertheless imposes constraints on code which it shares with other
    machines.

    Remove this incomplete & broken R6000 CPU support in order to clean up
    and in preparation for changes which will no longer need to consider
    dragging the pretense of R6000 support along with them.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16236/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

07 Aug, 2017

1 commit

  • Fixes the following gcc 7.x build error:

    arch/mips/mm/uasm-mips.c:51:26: error: duplicate ‘const’ declaration specifier [-Werror=duplicate-decl-specifier]
    static const struct insn const insn_table[insn_invalid] = {

    Signed-off-by: Thomas Petazzoni
    Fixes: ce807d5f67ed ("MIPS: Optimize uasm insn lookup.")
    Cc: David Daney
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/16926/
    Signed-off-by: Ralf Baechle

    Thomas Petazzoni
     

20 Jul, 2017

1 commit

  • Christoph noticed [1] that default DMA pool in current form overload
    the DMA coherent infrastructure. In reply, Robin suggested [2] to
    split the per-device vs. global pool interfaces, so allocation/release
    from default DMA pool is driven by dma ops implementation.

    This patch implements Robin's idea and provide interface to
    allocate/release/mmap the default (aka global) DMA pool.

    To make it clear that existing *_from_coherent routines work on
    per-device pool rename them to *_from_dev_coherent.

    [1] https://lkml.org/lkml/2017/7/7/370
    [2] https://lkml.org/lkml/2017/7/7/431

    Cc: Vineet Gupta
    Cc: Russell King
    Cc: Catalin Marinas
    Cc: Will Deacon
    Cc: Ralf Baechle
    Suggested-by: Robin Murphy
    Tested-by: Andras Szemzo
    Reviewed-by: Robin Murphy
    Signed-off-by: Vladimir Murzin
    Signed-off-by: Christoph Hellwig

    Vladimir Murzin
     

16 Jul, 2017

1 commit

  • Pull MIPS updates from Ralf Baechle:
    "Boston platform support:
    - Document DT bindings
    - Add CLK driver for board clocks

    CM:
    - Avoid per-core locking with CM3 & higher
    - WARN on attempt to lock invalid VP, not BUG

    CPS:
    - Select CONFIG_SYS_SUPPORTS_SCHED_SMT for MIPSr6
    - Prevent multi-core with dcache aliasing
    - Handle cores not powering down more gracefully
    - Handle spurious VP starts more gracefully

    DSP:
    - Add lwx & lhx missaligned access support

    eBPF:
    - Add MIPS support along with many supporting change to add the
    required infrastructure

    Generic arch code:
    - Misc sysmips MIPS_ATOMIC_SET fixes
    - Drop duplicate HAVE_SYSCALL_TRACEPOINTS
    - Negate error syscall return in trace
    - Correct forced syscall errors
    - Traced negative syscalls should return -ENOSYS
    - Allow samples/bpf/tracex5 to access syscall arguments for sane
    traces
    - Cleanup from old Kconfig options in defconfigs
    - Fix PREF instruction usage by memcpy for MIPS R6
    - Fix various special cases in the FPU eulation
    - Fix some special cases in MIPS16e2 support
    - Fix MIPS I ISA /proc/cpuinfo reporting
    - Sort MIPS Kconfig alphabetically
    - Fix minimum alignment requirement of IRQ stack as required by
    ABI / GCC
    - Fix special cases in the module loader
    - Perform post-DMA cache flushes on systems with MAARs
    - Probe the I6500 CPU
    - Cleanup cmpxchg and add support for 1 and 2 byte operations
    - Use queued read/write locks (qrwlock)
    - Use queued spinlocks (qspinlock)
    - Add CPU shared FTLB feature detection
    - Handle tlbex-tlbp race condition
    - Allow storing pgd in C0_CONTEXT for MIPSr6
    - Use current_cpu_type() in m4kc_tlbp_war()
    - Support Boston in the generic kernel

    Generic platform:
    - yamon-dt: Pull YAMON DT shim code out of SEAD-3 board
    - yamon-dt: Support > 256MB of RAM
    - yamon-dt: Use serial* rather than uart* aliases
    - Abstract FDT fixup application
    - Set RTC_ALWAYS_BCD to 0
    - Add a MAINTAINERS entry

    core kernel:
    - qspinlock.c: include linux/prefetch.h

    Loongson 3:
    - Add support

    Perf:
    - Add I6500 support

    SEAD-3:
    - Remove GIC timer from DT
    - Set interrupt-parent per-device, not at root node
    - Fix GIC interrupt specifiers

    SMP:
    - Skip IPI setup if we only have a single CPU

    VDSO:
    - Make comment match reality
    - Improvements to time code in VDSO"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (86 commits)
    locking/qspinlock: Include linux/prefetch.h
    MIPS: Fix MIPS I ISA /proc/cpuinfo reporting
    MIPS: Fix minimum alignment requirement of IRQ stack
    MIPS: generic: Support MIPS Boston development boards
    MIPS: DTS: img: Don't attempt to build-in all .dtb files
    clk: boston: Add a driver for MIPS Boston board clocks
    dt-bindings: Document img,boston-clock binding
    MIPS: Traced negative syscalls should return -ENOSYS
    MIPS: Correct forced syscall errors
    MIPS: Negate error syscall return in trace
    MIPS: Drop duplicate HAVE_SYSCALL_TRACEPOINTS select
    MIPS16e2: Provide feature overrides for non-MIPS16 systems
    MIPS: MIPS16e2: Report ASE presence in /proc/cpuinfo
    MIPS: MIPS16e2: Subdecode extended LWSP/SWSP instructions
    MIPS: MIPS16e2: Identify ASE presence
    MIPS: VDSO: Fix a mismatch between comment and preprocessor constant
    MIPS: VDSO: Add implementation of gettimeofday() fallback
    MIPS: VDSO: Add implementation of clock_gettime() fallback
    MIPS: VDSO: Fix conversions in do_monotonic()/do_monotonic_coarse()
    MIPS: Use current_cpu_type() in m4kc_tlbp_war()
    ...

    Linus Torvalds
     

07 Jul, 2017

1 commit

  • A poisoned or migrated hugepage is stored as a swap entry in the page
    tables. On architectures that support hugepages consisting of
    contiguous page table entries (such as on arm64) this leads to ambiguity
    in determining the page table entry to return in huge_pte_offset() when
    a poisoned entry is encountered.

    Let's remove the ambiguity by adding a size parameter to convey
    additional information about the requested address. Also fixup the
    definition/usage of huge_pte_offset() throughout the tree.

    Link: http://lkml.kernel.org/r/20170522133604.11392-4-punit.agrawal@arm.com
    Signed-off-by: Punit Agrawal
    Acked-by: Steve Capper
    Cc: Catalin Marinas
    Cc: Will Deacon
    Cc: Tony Luck
    Cc: Fenghua Yu
    Cc: James Hogan (odd fixer:METAG ARCHITECTURE)
    Cc: Ralf Baechle (supporter:MIPS)
    Cc: "James E.J. Bottomley"
    Cc: Helge Deller
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Michael Ellerman
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: Yoshinori Sato
    Cc: Rich Felker
    Cc: "David S. Miller"
    Cc: Chris Metcalf
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Cc: Alexander Viro
    Cc: Michal Hocko
    Cc: Mike Kravetz
    Cc: Naoya Horiguchi
    Cc: "Aneesh Kumar K.V"
    Cc: "Kirill A. Shutemov"
    Cc: Hillf Danton
    Cc: Mark Rutland
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Punit Agrawal
     

30 Jun, 2017

1 commit

  • Recent CPUs from Imagination Technologies such as the I6400 or P6600 are
    able to speculatively fetch data from memory into caches. This means
    that if used in a system with non-coherent DMA they require that caches
    be invalidated after a device performs DMA, and before the CPU reads the
    DMA'd data, in order to ensure that stale values weren't speculatively
    prefetched.

    Such CPUs also introduced Memory Accessibility Attribute Registers
    (MAARs) in order to control the regions in which they are allowed to
    speculate. Thus we can use the presence of MAARs as a good indication
    that the CPU requires the above cache maintenance. Use the presence of
    MAARs to determine the result of cpu_needs_post_dma_flush() in the
    default case, in order to handle these recent CPUs correctly.

    Note that the return type of cpu_needs_post_dma_flush() is changed to
    bool, such that it's clearer what's happening when cpu_has_maar is cast
    to bool for the return value. If this patch were backported to a
    pre-v4.7 kernel then MIPS_CPU_MAAR was 1ull<<
    Reviewed-by: Bryan O'Donoghue
    Tested-by: Bryan O'Donoghue
    Cc: Ed Blake
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16363/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

29 Jun, 2017

2 commits

  • Use current_cpu_type() to check for 4Kc processors instead of checking
    the PRID directly. This will allow for the 4Kc case to be optimised out
    of kernels that can't run on 4KC processors, thanks to __get_cpu_type()
    and its unreachable() call.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16205/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • In systems where there are multiple actors updating the TLB, the
    potential exists for a race condition wherein a CPU hits a TLB exception
    but by the time it reaches a TLBP instruction the affected TLB entry may
    have been replaced. This can happen if, for example, a CPU shares the
    TLB between hardware threads (VPs) within a core and one of them
    replaces the entry that another has just taken a TLB exception for.

    We handle this race in the case of the Hardware Table Walker (HTW) being
    the other actor already, but didn't take into account the potential for
    multiple threads racing. Include the code for aborting TLB exception
    handling in affected multi-threaded systems, those being the I6400 &
    I6500 CPUs which share TLB entries between VPs.

    In the case of using RiXi without dedicated exceptions we have never
    handled this race even for HTW. This patch adds WARN()s to these cases
    which ought never to be hit because all CPUs with either HTW or shared
    FTLB RAMs also include dedicated RiXi exceptions, but the WARN()s will
    ensure this is always the case.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16203/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

28 Jun, 2017

4 commits

  • Introduce the I6500 PRID & probe it just the same way as I6400. The MIPS
    I6500 is the latest in Imagination Technologies' I-Class range of CPUs,
    with a focus on scalability & heterogeneity. It introduces the notion of
    multiple clusters to the MIPS Coherent Processing System, allowing for a
    far higher total number of cores & threads in a system when compared
    with its predecessors. Clusters don't need to be identical, and may
    contain differing numbers of cores & IOCUs, or cores with differing
    properties.

    This patch alone adds the basic support for booting Linux on an I6500
    CPU without support for any of its new functionality, for which support
    will be introduced in further patches.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16190/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Recent CPUs from Imagination Technologies such as the I6400 or P6600 are
    able to speculatively fetch data from memory into caches. This means
    that if used in a system with non-coherent DMA they require that caches
    be invalidated after a device performs DMA, and before the CPU reads the
    DMA'd data, in order to ensure that stale values weren't speculatively
    prefetched.

    Such CPUs also introduced Memory Accessibility Attribute Registers
    (MAARs) in order to control the regions in which they are allowed to
    speculate. Thus we can use the presence of MAARs as a good indication
    that the CPU requires the above cache maintenance. Use the presence of
    MAARs to determine the result of cpu_needs_post_dma_flush() in the
    default case, in order to handle these recent CPUs correctly.

    Note that the return type of cpu_needs_post_dma_flush() is changed to
    bool, such that it's clearer what's happening when cpu_has_maar is cast
    to bool for the return value. If this patch were backported to a
    pre-v4.7 kernel then MIPS_CPU_MAAR was 1ull<<
    Reviewed-by: Bryan O'Donoghue
    Tested-by: Bryan O'Donoghue
    Cc: Ed Blake
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16363/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Follow on patches for eBPF JIT require these additional instructions:

    insn_bgtz, insn_blez, insn_break, insn_ddivu, insn_dmultu,
    insn_dsbh, insn_dshd, insn_dsllv, insn_dsra32, insn_dsrav,
    insn_dsrlv, insn_lbu, insn_movn, insn_movz, insn_multu, insn_nor,
    insn_sb, insn_sh, insn_slti, insn_dinsu, insn_lwu

    ... so, add them.

    Sort the insn_* enumeration values alphabetically.

    Signed-off-by: David Daney
    Cc: Alexei Starovoitov
    Cc: Daniel Borkmann
    Cc: Matt Redfearn
    Cc: netdev@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16367/
    Signed-off-by: Ralf Baechle

    David Daney
     
  • Instead of doing a linear search through the insn_table for each
    instruction, use the opcode as direct index into the table. This will
    give constant time lookup performance as the number of supported
    opcodes increases. Make the tables const as they are only ever read.
    For uasm-mips.c sort the table alphabetically, and remove duplicate
    entries, uasm-micromips.c was already sorted and duplicate free.
    There is a small savings in object size as struct insn loses a field:

    $ size arch/mips/mm/uasm-mips.o arch/mips/mm/uasm-mips.o.save
    text data bss dec hex filename
    10040 0 0 10040 2738 arch/mips/mm/uasm-mips.o
    9240 1120 0 10360 2878 arch/mips/mm/uasm-mips.o.save

    Signed-off-by: David Daney
    Cc: Alexei Starovoitov
    Cc: Daniel Borkmann
    Cc: Matt Redfearn
    Cc: netdev@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16365/
    Signed-off-by: Ralf Baechle

    David Daney
     

19 Jun, 2017

1 commit

  • Stack guard page is a useful feature to reduce a risk of stack smashing
    into a different mapping. We have been using a single page gap which
    is sufficient to prevent having stack adjacent to a different mapping.
    But this seems to be insufficient in the light of the stack usage in
    userspace. E.g. glibc uses as large as 64kB alloca() in many commonly
    used functions. Others use constructs liks gid_t buffer[NGROUPS_MAX]
    which is 256kB or stack strings with MAX_ARG_STRLEN.

    This will become especially dangerous for suid binaries and the default
    no limit for the stack size limit because those applications can be
    tricked to consume a large portion of the stack and a single glibc call
    could jump over the guard page. These attacks are not theoretical,
    unfortunatelly.

    Make those attacks less probable by increasing the stack guard gap
    to 1MB (on systems with 4k pages; but make it depend on the page size
    because systems with larger base pages might cap stack allocations in
    the PAGE_SIZE units) which should cover larger alloca() and VLA stack
    allocations. It is obviously not a full fix because the problem is
    somehow inherent, but it should reduce attack space a lot.

    One could argue that the gap size should be configurable from userspace,
    but that can be done later when somebody finds that the new 1MB is wrong
    for some special case applications. For now, add a kernel command line
    option (stack_guard_gap) to specify the stack gap size (in page units).

    Implementation wise, first delete all the old code for stack guard page:
    because although we could get away with accounting one extra page in a
    stack vma, accounting a larger gap can break userspace - case in point,
    a program run with "ulimit -S -v 20000" failed when the 1MB gap was
    counted for RLIMIT_AS; similar problems could come with RLIMIT_MLOCK
    and strict non-overcommit mode.

    Instead of keeping gap inside the stack vma, maintain the stack guard
    gap as a gap between vmas: using vm_start_gap() in place of vm_start
    (or vm_end_gap() in place of vm_end if VM_GROWSUP) in just those few
    places which need to respect the gap - mainly arch_get_unmapped_area(),
    and and the vma tree's subtree_gap support for that.

    Original-patch-by: Oleg Nesterov
    Original-patch-by: Michal Hocko
    Signed-off-by: Hugh Dickins
    Acked-by: Michal Hocko
    Tested-by: Helge Deller # parisc
    Signed-off-by: Linus Torvalds

    Hugh Dickins
     

08 Jun, 2017

1 commit

  • fixrange_init operates at PMD-granularity and expects the addresses to
    be PMD-size aligned, but currently that might not be the case for
    PKMAP_BASE unless it is defined properly, so ensure a correct alignment
    is used before passing the address to fixrange_init.

    fixed mappings: only align the start address that is passed to
    fixrange_init rather than the value before adding the size, as we may
    end up with uninitialised upper part of the range.

    Signed-off-by: Marcin Nowakowski
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/15948/
    Signed-off-by: Ralf Baechle

    Marcin Nowakowski
     

13 May, 2017

1 commit

  • Pull MIPS updates from James Hogan:
    "math-emu:
    - Add missing clearing of BLTZALL and BGEZALL emulation counters
    - Fix BC1EQZ and BC1NEZ condition handling
    - Fix BLEZL and BGTZL identification

    BPF:
    - Add JIT support for SKF_AD_HATYPE
    - Use unsigned access for unsigned SKB fields
    - Quit clobbering callee saved registers in JIT code
    - Fix multiple problems in JIT skb access helpers

    Loongson 3:
    - Select MIPS_L1_CACHE_SHIFT_6

    Octeon:
    - Remove vestiges of CONFIG_CAVIUM_OCTEON_2ND_KERNEL
    - Remove unused L2C types and macros.
    - Remove unused SLI types and macros.
    - Fix compile error when USB is not enabled.
    - Octeon: Remove unused PCIERCX types and macros.
    - Octeon: Clean up platform code.

    SNI:
    - Remove recursive include of cpu-feature-overrides.h

    Sibyte:
    - Export symbol periph_rev to sb1250-mac network driver.
    - Fix Kconfig warning.

    Generic platform:
    - Enable Root FS on NFS in generic_defconfig

    SMP-MT:
    - Use CPU interrupt controller IPI IRQ domain support

    UASM:
    - Add support for LHU for uasm.
    - Remove needless ISA abstraction

    mm:
    - Add 48-bit VA space and 4-level page tables for 4K pages.

    PCI:
    - Add controllers before the specified head

    irqchip driver for MIPS CPU:
    - Replace magic 0x100 with IE_SW0
    - Prepare for non-legacy IRQ domains
    - Introduce IPI IRQ domain support

    MAINTAINERS:
    - Update email-id of Rahul Bedarkar

    NET:
    - sb1250-mac: Add missing MODULE_LICENSE()

    CPUFREQ:
    - Loongson2: drop set_cpus_allowed_ptr()

    Misc:
    - Disable Werror when W= is set
    - Opt into HAVE_COPY_THREAD_TLS
    - Enable GENERIC_CPU_AUTOPROBE
    - Use common outgoing-CPU-notification code
    - Remove dead define of ST_OFF
    - Remove CONFIG_ARCH_HAS_ILOG2_U{32,64}
    - Stengthen IPI IRQ domain sanity check
    - Remove confusing else statement in __do_page_fault()
    - Don't unnecessarily include kmalloc.h into .
    - Delete unused definition of SMP_CACHE_SHIFT.
    - Delete redundant definition of SMP_CACHE_BYTES"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (39 commits)
    MIPS: Sibyte: Fix Kconfig warning.
    MIPS: Sibyte: Export symbol periph_rev to sb1250-mac network driver.
    NET: sb1250-mac: Add missing MODULE_LICENSE()
    MAINTAINERS: Update email-id of Rahul Bedarkar
    MIPS: Remove confusing else statement in __do_page_fault()
    MIPS: Stengthen IPI IRQ domain sanity check
    MIPS: smp-mt: Use CPU interrupt controller IPI IRQ domain support
    irqchip: mips-cpu: Introduce IPI IRQ domain support
    irqchip: mips-cpu: Prepare for non-legacy IRQ domains
    irqchip: mips-cpu: Replace magic 0x100 with IE_SW0
    MIPS: Remove CONFIG_ARCH_HAS_ILOG2_U{32,64}
    MIPS: generic: Enable Root FS on NFS in generic_defconfig
    MIPS: mach-rm: Remove recursive include of cpu-feature-overrides.h
    MIPS: Opt into HAVE_COPY_THREAD_TLS
    CPUFREQ: Loongson2: drop set_cpus_allowed_ptr()
    MIPS: uasm: Remove needless ISA abstraction
    MIPS: Remove dead define of ST_OFF
    MIPS: Use common outgoing-CPU-notification code
    MIPS: math-emu: Fix BC1EQZ and BC1NEZ condition handling
    MIPS: r2-on-r6-emu: Clear BLTZALL and BGEZALL debugfs counters
    ...

    Linus Torvalds
     

09 May, 2017

1 commit

  • Pull KVM updates from Paolo Bonzini:
    "ARM:
    - HYP mode stub supports kexec/kdump on 32-bit
    - improved PMU support
    - virtual interrupt controller performance improvements
    - support for userspace virtual interrupt controller (slower, but
    necessary for KVM on the weird Broadcom SoCs used by the Raspberry
    Pi 3)

    MIPS:
    - basic support for hardware virtualization (ImgTec P5600/P6600/I6400
    and Cavium Octeon III)

    PPC:
    - in-kernel acceleration for VFIO

    s390:
    - support for guests without storage keys
    - adapter interruption suppression

    x86:
    - usual range of nVMX improvements, notably nested EPT support for
    accessed and dirty bits
    - emulation of CPL3 CPUID faulting

    generic:
    - first part of VCPU thread request API
    - kvm_stat improvements"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (227 commits)
    kvm: nVMX: Don't validate disabled secondary controls
    KVM: put back #ifndef CONFIG_S390 around kvm_vcpu_kick
    Revert "KVM: Support vCPU-based gfn->hva cache"
    tools/kvm: fix top level makefile
    KVM: x86: don't hold kvm->lock in KVM_SET_GSI_ROUTING
    KVM: Documentation: remove VM mmap documentation
    kvm: nVMX: Remove superfluous VMX instruction fault checks
    KVM: x86: fix emulation of RSM and IRET instructions
    KVM: mark requests that need synchronization
    KVM: return if kvm_vcpu_wake_up() did wake up the VCPU
    KVM: add explicit barrier to kvm_vcpu_kick
    KVM: perform a wake_up in kvm_make_all_cpus_request
    KVM: mark requests that do not need a wakeup
    KVM: remove #ifndef CONFIG_S390 around kvm_vcpu_wake_up
    KVM: x86: always use kvm_make_request instead of set_bit
    KVM: add kvm_{test,clear}_request to replace {test,clear}_bit
    s390: kvm: Cpu model support for msa6, msa7 and msa8
    KVM: x86: remove irq disablement around KVM_SET_CLOCK/KVM_GET_CLOCK
    kvm: better MWAIT emulation for guests
    KVM: x86: virtualize cpuid faulting
    ...

    Linus Torvalds
     

13 Apr, 2017

1 commit

  • Commit 41c594ab65fc ("[MIPS] MT: Improved multithreading support.")
    added an else case to an if statement in do_page_fault() (which has
    since gained 2 leading underscores) for some unclear reason. If the
    condition in the if statement evaluates true then we execute a goto &
    branch elsewhere anyway, so the else has no effect. Combined with an #if
    0 block with misleading indentation introduced in the same commit it
    makes the code less clear than it could be.

    Remove the unnecessary else statement & de-indent the printk within
    the #if 0 block in order to make the code easier for humans to parse.

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: trivial@kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/15842/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

12 Apr, 2017

1 commit

  • We always either target MIPS32/MIPS64 or microMIPS, and always include
    one & only one of uasm-mips.c or uasm-micromips.c. Therefore the
    abstraction of the ISA in asm/uasm.h declaring functions for either ISA
    is redundant & needless. Remove it to simplify the code.

    This is largely the result of the following:

    :%s/ISAOPC(\(.\{-}\))/uasm_i##\1/
    :%s/ISAFUNC(\(.\{-}\))/\1/

    Signed-off-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: Paul Burton
    Patchwork: https://patchwork.linux-mips.org/patch/15844/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

10 Apr, 2017

2 commits

  • Some users must have 4K pages while needing a 48-bit VA space size.
    The cleanest way do do this is to go to a 4-level page table for this
    case. Each page table level using order-0 pages adds 9 bits to the
    VA size (at 4K pages, so for four levels we get 9 * 4 + 12 == 48-bits.

    For the 4K page size case only we add support functions for the PUD
    level of the page table tree, also the TLB exception handlers get an
    extra level of tree walk.

    [david.daney@cavium.com: Forward port to v4.10.]
    [david.daney@cavium.com: Forward port to v4.11.]

    Signed-off-by: Alex Belits
    Signed-off-by: David Daney
    Cc: James Hogan
    Cc: Alex Belits
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/15312/
    Signed-off-by: Ralf Baechle

    Alex Belits
     
  • The follow-on BPF JIT patches use the LHU instruction, so add it.

    Signed-off-by: David Daney
    Cc: James Hogan
    Cc: Alexei Starovoitov
    Cc: Steven J. Hill
    Cc: linux-mips@linux-mips.org
    Cc: netdev@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/15743/
    Signed-off-by: Ralf Baechle

    David Daney