mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
![Kirill A. Shutemov](/assets/img/avatar_default.png)
IOMMU and SVA-capable devices know nothing about LAM and only expect canonical addresses. An attempt to pass down tagged pointer will lead to address translation failure. By default do not allow to enable both LAM and use SVA in the same process. The new ARCH_FORCE_TAGGED_SVA arch_prctl() overrides the limitation. By using the arch_prctl() userspace takes responsibility to never pass tagged address to the device. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Ashok Raj <ashok.raj@intel.com> Reviewed-by: Jacob Pan <jacob.jun.pan@linux.intel.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/all/20230312112612.31869-12-kirill.shutemov%40linux.intel.com
45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_MMU_CONTEXT_H
|
|
#define _LINUX_MMU_CONTEXT_H
|
|
|
|
#include <asm/mmu_context.h>
|
|
#include <asm/mmu.h>
|
|
|
|
/* Architectures that care about IRQ state in switch_mm can override this. */
|
|
#ifndef switch_mm_irqs_off
|
|
# define switch_mm_irqs_off switch_mm
|
|
#endif
|
|
|
|
#ifndef leave_mm
|
|
static inline void leave_mm(int cpu) { }
|
|
#endif
|
|
|
|
/*
|
|
* CPUs that are capable of running user task @p. Must contain at least one
|
|
* active CPU. It is assumed that the kernel can run on all CPUs, so calling
|
|
* this for a kernel thread is pointless.
|
|
*
|
|
* By default, we assume a sane, homogeneous system.
|
|
*/
|
|
#ifndef task_cpu_possible_mask
|
|
# define task_cpu_possible_mask(p) cpu_possible_mask
|
|
# define task_cpu_possible(cpu, p) true
|
|
#else
|
|
# define task_cpu_possible(cpu, p) cpumask_test_cpu((cpu), task_cpu_possible_mask(p))
|
|
#endif
|
|
|
|
#ifndef mm_untag_mask
|
|
static inline unsigned long mm_untag_mask(struct mm_struct *mm)
|
|
{
|
|
return -1UL;
|
|
}
|
|
#endif
|
|
|
|
#ifndef arch_pgtable_dma_compat
|
|
static inline bool arch_pgtable_dma_compat(struct mm_struct *mm)
|
|
{
|
|
return true;
|
|
}
|
|
#endif
|
|
|
|
#endif
|