Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux-aarch64
Pull arm64 fixes from Catalin Marinas: - correct argument type (pgprot_t) when calling __ioremap() - PCI_IOBASE virtual address change - use architected event for CPU cycle counter - fix ELF core dumping - select CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION - missing completion for secondary CPU boot - booting on systems with all memory beyond 4GB * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux-aarch64: arm64: mm: fix booting on systems with no memory below 4GB arm64: smp: add missing completion for secondary boot arm64: compat: select CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION arm64: elf: fix core dumping definitions for GP and FP registers arm64: perf: use architected event for CPU cycle counter arm64: Move PCI_IOBASE closer to MODULES_VADDR arm64: Use pgprot_t as the last argument when invoking __ioremap()
This commit is contained in:
@@ -27,17 +27,17 @@ Start End Size Use
|
|||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
0000000000000000 0000007fffffffff 512GB user
|
0000000000000000 0000007fffffffff 512GB user
|
||||||
|
|
||||||
ffffff8000000000 ffffffbbfffcffff ~240GB vmalloc
|
ffffff8000000000 ffffffbbfffeffff ~240GB vmalloc
|
||||||
|
|
||||||
ffffffbbfffd0000 ffffffbcfffdffff 64KB [guard page]
|
ffffffbbffff0000 ffffffbbffffffff 64KB [guard page]
|
||||||
|
|
||||||
ffffffbbfffe0000 ffffffbcfffeffff 64KB PCI I/O space
|
|
||||||
|
|
||||||
ffffffbbffff0000 ffffffbcffffffff 64KB [guard page]
|
|
||||||
|
|
||||||
ffffffbc00000000 ffffffbdffffffff 8GB vmemmap
|
ffffffbc00000000 ffffffbdffffffff 8GB vmemmap
|
||||||
|
|
||||||
ffffffbe00000000 ffffffbffbffffff ~8GB [guard, future vmmemap]
|
ffffffbe00000000 ffffffbffbbfffff ~8GB [guard, future vmmemap]
|
||||||
|
|
||||||
|
ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O space
|
||||||
|
|
||||||
|
ffffffbbffff0000 ffffffbcffffffff ~2MB [guard]
|
||||||
|
|
||||||
ffffffbffc000000 ffffffbfffffffff 64MB modules
|
ffffffbffc000000 ffffffbfffffffff 64MB modules
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
config ARM64
|
config ARM64
|
||||||
def_bool y
|
def_bool y
|
||||||
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
||||||
|
select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select GENERIC_HARDIRQS_NO_DEPRECATED
|
select GENERIC_HARDIRQS_NO_DEPRECATED
|
||||||
select GENERIC_IOMAP
|
select GENERIC_IOMAP
|
||||||
|
@@ -25,12 +25,10 @@
|
|||||||
#include <asm/user.h>
|
#include <asm/user.h>
|
||||||
|
|
||||||
typedef unsigned long elf_greg_t;
|
typedef unsigned long elf_greg_t;
|
||||||
typedef unsigned long elf_freg_t[3];
|
|
||||||
|
|
||||||
#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t))
|
#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t))
|
||||||
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
||||||
|
typedef struct user_fpsimd_state elf_fpregset_t;
|
||||||
typedef struct user_fp elf_fpregset_t;
|
|
||||||
|
|
||||||
#define EM_AARCH64 183
|
#define EM_AARCH64 183
|
||||||
|
|
||||||
@@ -87,7 +85,6 @@ typedef struct user_fp elf_fpregset_t;
|
|||||||
#define R_AARCH64_MOVW_PREL_G2_NC 292
|
#define R_AARCH64_MOVW_PREL_G2_NC 292
|
||||||
#define R_AARCH64_MOVW_PREL_G3 293
|
#define R_AARCH64_MOVW_PREL_G3 293
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are used to set parameters in the core dumps.
|
* These are used to set parameters in the core dumps.
|
||||||
*/
|
*/
|
||||||
|
@@ -25,9 +25,8 @@
|
|||||||
* - FPSR and FPCR
|
* - FPSR and FPCR
|
||||||
* - 32 128-bit data registers
|
* - 32 128-bit data registers
|
||||||
*
|
*
|
||||||
* Note that user_fp forms a prefix of this structure, which is relied
|
* Note that user_fpsimd forms a prefix of this structure, which is
|
||||||
* upon in the ptrace FP/SIMD accessors. struct user_fpsimd_state must
|
* relied upon in the ptrace FP/SIMD accessors.
|
||||||
* form a prefix of struct fpsimd_state.
|
|
||||||
*/
|
*/
|
||||||
struct fpsimd_state {
|
struct fpsimd_state {
|
||||||
union {
|
union {
|
||||||
|
@@ -114,7 +114,7 @@ static inline u64 __raw_readq(const volatile void __iomem *addr)
|
|||||||
* I/O port access primitives.
|
* I/O port access primitives.
|
||||||
*/
|
*/
|
||||||
#define IO_SPACE_LIMIT 0xffff
|
#define IO_SPACE_LIMIT 0xffff
|
||||||
#define PCI_IOBASE ((void __iomem *)0xffffffbbfffe0000UL)
|
#define PCI_IOBASE ((void __iomem *)(MODULES_VADDR - SZ_2M))
|
||||||
|
|
||||||
static inline u8 inb(unsigned long addr)
|
static inline u8 inb(unsigned long addr)
|
||||||
{
|
{
|
||||||
@@ -225,9 +225,9 @@ extern void __iounmap(volatile void __iomem *addr);
|
|||||||
#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_XN | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_XN | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
||||||
#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC))
|
#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC))
|
||||||
|
|
||||||
#define ioremap(addr, size) __ioremap((addr), (size), PROT_DEVICE_nGnRE)
|
#define ioremap(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
|
||||||
#define ioremap_nocache(addr, size) __ioremap((addr), (size), PROT_DEVICE_nGnRE)
|
#define ioremap_nocache(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
|
||||||
#define ioremap_wc(addr, size) __ioremap((addr), (size), PROT_NORMAL_NC)
|
#define ioremap_wc(addr, size) __ioremap((addr), (size), __pgprot(PROT_NORMAL_NC))
|
||||||
#define iounmap __iounmap
|
#define iounmap __iounmap
|
||||||
|
|
||||||
#define ARCH_HAS_IOREMAP_WC
|
#define ARCH_HAS_IOREMAP_WC
|
||||||
|
@@ -43,6 +43,8 @@
|
|||||||
#else
|
#else
|
||||||
#define STACK_TOP STACK_TOP_MAX
|
#define STACK_TOP STACK_TOP_MAX
|
||||||
#endif /* CONFIG_COMPAT */
|
#endif /* CONFIG_COMPAT */
|
||||||
|
|
||||||
|
#define ARCH_LOW_ADDRESS_LIMIT PHYS_MASK
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
struct debug_info {
|
struct debug_info {
|
||||||
|
@@ -14,7 +14,6 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
#define __ARCH_WANT_COMPAT_IPC_PARSE_VERSION
|
|
||||||
#define __ARCH_WANT_COMPAT_STAT64
|
#define __ARCH_WANT_COMPAT_STAT64
|
||||||
#define __ARCH_WANT_SYS_GETHOSTNAME
|
#define __ARCH_WANT_SYS_GETHOSTNAME
|
||||||
#define __ARCH_WANT_SYS_PAUSE
|
#define __ARCH_WANT_SYS_PAUSE
|
||||||
|
@@ -613,17 +613,11 @@ enum armv8_pmuv3_perf_types {
|
|||||||
ARMV8_PMUV3_PERFCTR_BUS_ACCESS = 0x19,
|
ARMV8_PMUV3_PERFCTR_BUS_ACCESS = 0x19,
|
||||||
ARMV8_PMUV3_PERFCTR_MEM_ERROR = 0x1A,
|
ARMV8_PMUV3_PERFCTR_MEM_ERROR = 0x1A,
|
||||||
ARMV8_PMUV3_PERFCTR_BUS_CYCLES = 0x1D,
|
ARMV8_PMUV3_PERFCTR_BUS_CYCLES = 0x1D,
|
||||||
|
|
||||||
/*
|
|
||||||
* This isn't an architected event.
|
|
||||||
* We detect this event number and use the cycle counter instead.
|
|
||||||
*/
|
|
||||||
ARMV8_PMUV3_PERFCTR_CPU_CYCLES = 0xFF,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* PMUv3 HW events mapping. */
|
/* PMUv3 HW events mapping. */
|
||||||
static const unsigned armv8_pmuv3_perf_map[PERF_COUNT_HW_MAX] = {
|
static const unsigned armv8_pmuv3_perf_map[PERF_COUNT_HW_MAX] = {
|
||||||
[PERF_COUNT_HW_CPU_CYCLES] = ARMV8_PMUV3_PERFCTR_CPU_CYCLES,
|
[PERF_COUNT_HW_CPU_CYCLES] = ARMV8_PMUV3_PERFCTR_CLOCK_CYCLES,
|
||||||
[PERF_COUNT_HW_INSTRUCTIONS] = ARMV8_PMUV3_PERFCTR_INSTR_EXECUTED,
|
[PERF_COUNT_HW_INSTRUCTIONS] = ARMV8_PMUV3_PERFCTR_INSTR_EXECUTED,
|
||||||
[PERF_COUNT_HW_CACHE_REFERENCES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS,
|
[PERF_COUNT_HW_CACHE_REFERENCES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS,
|
||||||
[PERF_COUNT_HW_CACHE_MISSES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL,
|
[PERF_COUNT_HW_CACHE_MISSES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL,
|
||||||
@@ -1106,7 +1100,7 @@ static int armv8pmu_get_event_idx(struct pmu_hw_events *cpuc,
|
|||||||
unsigned long evtype = event->config_base & ARMV8_EVTYPE_EVENT;
|
unsigned long evtype = event->config_base & ARMV8_EVTYPE_EVENT;
|
||||||
|
|
||||||
/* Always place a cycle counter into the cycle counter. */
|
/* Always place a cycle counter into the cycle counter. */
|
||||||
if (evtype == ARMV8_PMUV3_PERFCTR_CPU_CYCLES) {
|
if (evtype == ARMV8_PMUV3_PERFCTR_CLOCK_CYCLES) {
|
||||||
if (test_and_set_bit(ARMV8_IDX_CYCLE_COUNTER, cpuc->used_mask))
|
if (test_and_set_bit(ARMV8_IDX_CYCLE_COUNTER, cpuc->used_mask))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
|
|
||||||
|
@@ -309,24 +309,6 @@ struct task_struct *__switch_to(struct task_struct *prev,
|
|||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Fill in the task's elfregs structure for a core dump.
|
|
||||||
*/
|
|
||||||
int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs)
|
|
||||||
{
|
|
||||||
elf_core_copy_regs(elfregs, task_pt_regs(t));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* fill in the fpe structure for a core dump...
|
|
||||||
*/
|
|
||||||
int dump_fpu (struct pt_regs *regs, struct user_fp *fp)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(dump_fpu);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Shuffle the argument into the correct register before calling the
|
* Shuffle the argument into the correct register before calling the
|
||||||
* thread function. x1 is the thread argument, x2 is the pointer to
|
* thread function. x1 is the thread argument, x2 is the pointer to
|
||||||
|
@@ -211,8 +211,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
|
|||||||
* before we continue.
|
* before we continue.
|
||||||
*/
|
*/
|
||||||
set_cpu_online(cpu, true);
|
set_cpu_online(cpu, true);
|
||||||
while (!cpu_active(cpu))
|
complete(&cpu_running);
|
||||||
cpu_relax();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OK, it's off to the idle thread for us
|
* OK, it's off to the idle thread for us
|
||||||
|
@@ -80,7 +80,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max)
|
|||||||
#ifdef CONFIG_ZONE_DMA32
|
#ifdef CONFIG_ZONE_DMA32
|
||||||
/* 4GB maximum for 32-bit only capable devices */
|
/* 4GB maximum for 32-bit only capable devices */
|
||||||
max_dma32 = min(max, MAX_DMA32_PFN);
|
max_dma32 = min(max, MAX_DMA32_PFN);
|
||||||
zone_size[ZONE_DMA32] = max_dma32 - min;
|
zone_size[ZONE_DMA32] = max(min, max_dma32) - min;
|
||||||
#endif
|
#endif
|
||||||
zone_size[ZONE_NORMAL] = max - max_dma32;
|
zone_size[ZONE_NORMAL] = max - max_dma32;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user