arm64: Add HAVE_IOREMAP_PROT support
With ioremap_prot() definition from generic ioremap, also move pte_pgprot() from hugetlbpage.c into pgtable.h, then arm64 could have HAVE_IOREMAP_PROT, which will enable generic_access_phys() code, it is useful for debug, eg, gdb. Acked-by: Catalin Marinas <catalin.marinas@arm.com> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> Link: https://lore.kernel.org/r/20220607125027.44946-7-wangkefeng.wang@huawei.com Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
Родитель
f23eab0bfa
Коммит
893dea9ccd
|
@ -9,7 +9,7 @@
|
||||||
| alpha: | TODO |
|
| alpha: | TODO |
|
||||||
| arc: | ok |
|
| arc: | ok |
|
||||||
| arm: | TODO |
|
| arm: | TODO |
|
||||||
| arm64: | TODO |
|
| arm64: | ok |
|
||||||
| csky: | TODO |
|
| csky: | TODO |
|
||||||
| hexagon: | TODO |
|
| hexagon: | TODO |
|
||||||
| ia64: | TODO |
|
| ia64: | TODO |
|
||||||
|
|
|
@ -189,6 +189,7 @@ config ARM64
|
||||||
select HAVE_FUNCTION_GRAPH_TRACER
|
select HAVE_FUNCTION_GRAPH_TRACER
|
||||||
select HAVE_GCC_PLUGINS
|
select HAVE_GCC_PLUGINS
|
||||||
select HAVE_HW_BREAKPOINT if PERF_EVENTS
|
select HAVE_HW_BREAKPOINT if PERF_EVENTS
|
||||||
|
select HAVE_IOREMAP_PROT
|
||||||
select HAVE_IRQ_TIME_ACCOUNTING
|
select HAVE_IRQ_TIME_ACCOUNTING
|
||||||
select HAVE_KVM
|
select HAVE_KVM
|
||||||
select HAVE_NMI
|
select HAVE_NMI
|
||||||
|
|
|
@ -427,6 +427,16 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte)
|
||||||
return clear_pte_bit(pte, __pgprot(PTE_SWP_EXCLUSIVE));
|
return clear_pte_bit(pte, __pgprot(PTE_SWP_EXCLUSIVE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Select all bits except the pfn
|
||||||
|
*/
|
||||||
|
static inline pgprot_t pte_pgprot(pte_t pte)
|
||||||
|
{
|
||||||
|
unsigned long pfn = pte_pfn(pte);
|
||||||
|
|
||||||
|
return __pgprot(pte_val(pfn_pte(pfn, __pgprot(0))) ^ pte_val(pte));
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA_BALANCING
|
#ifdef CONFIG_NUMA_BALANCING
|
||||||
/*
|
/*
|
||||||
* See the comment in include/linux/pgtable.h
|
* See the comment in include/linux/pgtable.h
|
||||||
|
|
|
@ -100,16 +100,6 @@ int pud_huge(pud_t pud)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Select all bits except the pfn
|
|
||||||
*/
|
|
||||||
static inline pgprot_t pte_pgprot(pte_t pte)
|
|
||||||
{
|
|
||||||
unsigned long pfn = pte_pfn(pte);
|
|
||||||
|
|
||||||
return __pgprot(pte_val(pfn_pte(pfn, __pgprot(0))) ^ pte_val(pte));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int find_num_contig(struct mm_struct *mm, unsigned long addr,
|
static int find_num_contig(struct mm_struct *mm, unsigned long addr,
|
||||||
pte_t *ptep, size_t *pgsize)
|
pte_t *ptep, size_t *pgsize)
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче