• Mark Rutland's avatar
    arm64: mm: allow preemption in copy_to_user_page · 691b1e2e
    Mark Rutland authored
    Currently we disable preemption in copy_to_user_page; a behaviour that
    we inherited from the 32-bit arm code. This was necessary for older
    cores without broadcast data cache maintenance, and ensured that cache
    lines were dirtied and cleaned by the same CPU. On these systems dirty
    cache line migration was not possible, so this was sufficient to
    guarantee coherency.
    
    On contemporary systems, cache coherence protocols permit (dirty) cache
    lines to migrate between CPUs as a result of speculation, prefetching,
    and other behaviours. To account for this, in ARMv8 data cache
    maintenance operations are broadcast and affect all data caches in the
    domain associated with the VA (i.e. ISH for kernel and user mappings).
    
    In __switch_to we ensure that tasks can be safely migrated in the middle
    of a maintenance sequence, using a dsb(ish) to ensure prior explicit
    memory accesses are observed and cache maintenance operations are
    completed before a task can be run on another CPU.
    
    Given the above, it is not necessary to disable preemption in
    copy_to_user_page. This patch removes the preempt_{disable,enable}
    calls, permitting preemption.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    691b1e2e
flush.c 2.67 KB