Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux

Pull arm64 fixes from Catalin Marinas:

- Do not return false if !preemptible() in current_in_efi(). EFI
runtime services can now run with preemption enabled

- Fix uninitialised variable in the arm MPAM driver, reported by sparse

- Fix partial kasan_reset_tag() use in change_memory_common() when
calculating page indices or comparing ranges

- Save/restore TCR2_EL1 during suspend/resume, otherwise the E0POE bit
is lost

* tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
arm64: Fix cleared E0POE bit after cpu_suspend()/resume()
arm64: mm: Fix incomplete tag reset in change_memory_common()
arm_mpam: Stop using uninitialized variables in __ris_msmon_read()
arm64/efi: Don't fail check current_in_efi() if preemptible

Changed files
+18 -7
arch
arm64
include
mm
drivers
resctrl
+1 -1
arch/arm64/include/asm/efi.h
··· 45 45 * switching to the EFI runtime stack. 46 46 */ 47 47 #define current_in_efi() \ 48 - (!preemptible() && efi_rt_stack_top != NULL && \ 48 + (efi_rt_stack_top != NULL && \ 49 49 on_task_stack(current, READ_ONCE(efi_rt_stack_top[-1]), 1)) 50 50 51 51 #define ARCH_EFI_IRQ_FLAGS_MASK (PSR_D_BIT | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT)
+1 -1
arch/arm64/include/asm/suspend.h
··· 2 2 #ifndef __ASM_SUSPEND_H 3 3 #define __ASM_SUSPEND_H 4 4 5 - #define NR_CTX_REGS 13 5 + #define NR_CTX_REGS 14 6 6 #define NR_CALLEE_SAVED_REGS 12 7 7 8 8 /*
+4 -2
arch/arm64/mm/pageattr.c
··· 171 171 */ 172 172 area = find_vm_area((void *)addr); 173 173 if (!area || 174 - end > (unsigned long)kasan_reset_tag(area->addr) + area->size || 174 + ((unsigned long)kasan_reset_tag((void *)end) > 175 + (unsigned long)kasan_reset_tag(area->addr) + area->size) || 175 176 ((area->flags & (VM_ALLOC | VM_ALLOW_HUGE_VMAP)) != VM_ALLOC)) 176 177 return -EINVAL; 177 178 ··· 185 184 */ 186 185 if (rodata_full && (pgprot_val(set_mask) == PTE_RDONLY || 187 186 pgprot_val(clear_mask) == PTE_RDONLY)) { 188 - unsigned long idx = (start - (unsigned long)kasan_reset_tag(area->addr)) 187 + unsigned long idx = ((unsigned long)kasan_reset_tag((void *)start) - 188 + (unsigned long)kasan_reset_tag(area->addr)) 189 189 >> PAGE_SHIFT; 190 190 for (; numpages; idx++, numpages--) { 191 191 ret = __change_memory_common((u64)page_address(area->pages[idx]),
+8
arch/arm64/mm/proc.S
··· 110 110 * call stack. 111 111 */ 112 112 str x18, [x0, #96] 113 + alternative_if ARM64_HAS_TCR2 114 + mrs x2, REG_TCR2_EL1 115 + str x2, [x0, #104] 116 + alternative_else_nop_endif 113 117 ret 114 118 SYM_FUNC_END(cpu_do_suspend) 115 119 ··· 148 144 msr tcr_el1, x8 149 145 msr vbar_el1, x9 150 146 msr mdscr_el1, x10 147 + alternative_if ARM64_HAS_TCR2 148 + ldr x2, [x0, #104] 149 + msr REG_TCR2_EL1, x2 150 + alternative_else_nop_endif 151 151 152 152 msr sctlr_el1, x12 153 153 set_this_cpu_offset x13
+4 -3
drivers/resctrl/mpam_devices.c
··· 1072 1072 u64 now; 1073 1073 bool nrdy = false; 1074 1074 bool config_mismatch; 1075 - bool overflow; 1075 + bool overflow = false; 1076 1076 struct mon_read *m = arg; 1077 1077 struct mon_cfg *ctx = m->ctx; 1078 1078 bool reset_on_next_read = false; ··· 1176 1176 } 1177 1177 mpam_mon_sel_unlock(msc); 1178 1178 1179 - if (nrdy) { 1179 + if (nrdy) 1180 1180 m->err = -EBUSY; 1181 + 1182 + if (m->err) 1181 1183 return; 1182 - } 1183 1184 1184 1185 *m->val += now; 1185 1186 }