mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 17:23:55 +08:00
arm64 fixes for -rc7
- Fix false positive "sleeping while atomic" warning resulting from the kPTI rework taking a mutex too early. - Fix possible overflow in AMU frequency calculation - Fix incorrect shift in CMN PMU driver which causes problems with newer versions of the IP - Reduce alignment of the CFI jump table to avoid huge kernel images and link errors with !4KiB page size configurations -----BEGIN PGP SIGNATURE----- iQFEBAABCgAuFiEEPxTL6PPUbjXGY88ct6xw3ITBYzQFAmMtrWwQHHdpbGxAa2Vy bmVsLm9yZwAKCRC3rHDchMFjNJ/QCACnRX9+S83mixt+EEbqDMkCDqlKqpwYAP0a Fq7Yb4/iOqBCHY0n9of5SalpLc/ExAWDJiXoA0Y5g1E2hZMJnSvMx8aC6r92Ofdx uwx9PlWP6GhB7s1+kCNEHcSGHLDv4HT0nu/xbFHl64R+JwONeiB7tH3Mf9vXE05g As07ij7aLckMx19+SnezPawD55A6xKJ1KtoAF9NjWOuj79jJ7uTm9wCjAM29GPMT wC8axTaeqgHcI6fLqNpQ5cSQNHwN51f0PnPmj/fAeaJ8riAEubP1+ys4NNczrO0H uHQOnD0kArtjro/dNYZZZGa1u9BS+qYENgSwAl09cZ3r6orRrda4 =EiMW -----END PGP SIGNATURE----- Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux Pull arm64 fixes from Will Deacon: "These are all very simple and self-contained, although the CFI jump-table fix touches the generic linker script as that's where the problematic macro lives. - Fix false positive "sleeping while atomic" warning resulting from the kPTI rework taking a mutex too early. - Fix possible overflow in AMU frequency calculation - Fix incorrect shift in CMN PMU driver which causes problems with newer versions of the IP - Reduce alignment of the CFI jump table to avoid huge kernel images and link errors with !4KiB page size configurations" * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: vmlinux.lds.h: CFI: Reduce alignment of jump-table to function alignment perf/arm-cmn: Add more bits to child node address offset field arm64: topology: fix possible overflow in amu_fie_setup() arm64: mm: don't acquire mutex when rewriting swapper
This commit is contained in:
commit
a63f2e7cb1
@ -237,7 +237,7 @@ static void amu_fie_setup(const struct cpumask *cpus)
|
|||||||
for_each_cpu(cpu, cpus) {
|
for_each_cpu(cpu, cpus) {
|
||||||
if (!freq_counters_valid(cpu) ||
|
if (!freq_counters_valid(cpu) ||
|
||||||
freq_inv_set_max_ratio(cpu,
|
freq_inv_set_max_ratio(cpu,
|
||||||
cpufreq_get_hw_max_freq(cpu) * 1000,
|
cpufreq_get_hw_max_freq(cpu) * 1000ULL,
|
||||||
arch_timer_get_rate()))
|
arch_timer_get_rate()))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -331,12 +331,6 @@ static void alloc_init_pud(pgd_t *pgdp, unsigned long addr, unsigned long end,
|
|||||||
}
|
}
|
||||||
BUG_ON(p4d_bad(p4d));
|
BUG_ON(p4d_bad(p4d));
|
||||||
|
|
||||||
/*
|
|
||||||
* No need for locking during early boot. And it doesn't work as
|
|
||||||
* expected with KASLR enabled.
|
|
||||||
*/
|
|
||||||
if (system_state != SYSTEM_BOOTING)
|
|
||||||
mutex_lock(&fixmap_lock);
|
|
||||||
pudp = pud_set_fixmap_offset(p4dp, addr);
|
pudp = pud_set_fixmap_offset(p4dp, addr);
|
||||||
do {
|
do {
|
||||||
pud_t old_pud = READ_ONCE(*pudp);
|
pud_t old_pud = READ_ONCE(*pudp);
|
||||||
@ -368,15 +362,13 @@ static void alloc_init_pud(pgd_t *pgdp, unsigned long addr, unsigned long end,
|
|||||||
} while (pudp++, addr = next, addr != end);
|
} while (pudp++, addr = next, addr != end);
|
||||||
|
|
||||||
pud_clear_fixmap();
|
pud_clear_fixmap();
|
||||||
if (system_state != SYSTEM_BOOTING)
|
|
||||||
mutex_unlock(&fixmap_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __create_pgd_mapping(pgd_t *pgdir, phys_addr_t phys,
|
static void __create_pgd_mapping_locked(pgd_t *pgdir, phys_addr_t phys,
|
||||||
unsigned long virt, phys_addr_t size,
|
unsigned long virt, phys_addr_t size,
|
||||||
pgprot_t prot,
|
pgprot_t prot,
|
||||||
phys_addr_t (*pgtable_alloc)(int),
|
phys_addr_t (*pgtable_alloc)(int),
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
unsigned long addr, end, next;
|
unsigned long addr, end, next;
|
||||||
pgd_t *pgdp = pgd_offset_pgd(pgdir, virt);
|
pgd_t *pgdp = pgd_offset_pgd(pgdir, virt);
|
||||||
@ -400,8 +392,20 @@ static void __create_pgd_mapping(pgd_t *pgdir, phys_addr_t phys,
|
|||||||
} while (pgdp++, addr = next, addr != end);
|
} while (pgdp++, addr = next, addr != end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __create_pgd_mapping(pgd_t *pgdir, phys_addr_t phys,
|
||||||
|
unsigned long virt, phys_addr_t size,
|
||||||
|
pgprot_t prot,
|
||||||
|
phys_addr_t (*pgtable_alloc)(int),
|
||||||
|
int flags)
|
||||||
|
{
|
||||||
|
mutex_lock(&fixmap_lock);
|
||||||
|
__create_pgd_mapping_locked(pgdir, phys, virt, size, prot,
|
||||||
|
pgtable_alloc, flags);
|
||||||
|
mutex_unlock(&fixmap_lock);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
|
#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
|
||||||
extern __alias(__create_pgd_mapping)
|
extern __alias(__create_pgd_mapping_locked)
|
||||||
void create_kpti_ng_temp_pgd(pgd_t *pgdir, phys_addr_t phys, unsigned long virt,
|
void create_kpti_ng_temp_pgd(pgd_t *pgdir, phys_addr_t phys, unsigned long virt,
|
||||||
phys_addr_t size, pgprot_t prot,
|
phys_addr_t size, pgprot_t prot,
|
||||||
phys_addr_t (*pgtable_alloc)(int), int flags);
|
phys_addr_t (*pgtable_alloc)(int), int flags);
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#define CMN_CI_CHILD_COUNT GENMASK_ULL(15, 0)
|
#define CMN_CI_CHILD_COUNT GENMASK_ULL(15, 0)
|
||||||
#define CMN_CI_CHILD_PTR_OFFSET GENMASK_ULL(31, 16)
|
#define CMN_CI_CHILD_PTR_OFFSET GENMASK_ULL(31, 16)
|
||||||
|
|
||||||
#define CMN_CHILD_NODE_ADDR GENMASK(27, 0)
|
#define CMN_CHILD_NODE_ADDR GENMASK(29, 0)
|
||||||
#define CMN_CHILD_NODE_EXTERNAL BIT(31)
|
#define CMN_CHILD_NODE_EXTERNAL BIT(31)
|
||||||
|
|
||||||
#define CMN_MAX_DIMENSION 12
|
#define CMN_MAX_DIMENSION 12
|
||||||
|
@ -543,10 +543,9 @@
|
|||||||
*/
|
*/
|
||||||
#ifdef CONFIG_CFI_CLANG
|
#ifdef CONFIG_CFI_CLANG
|
||||||
#define TEXT_CFI_JT \
|
#define TEXT_CFI_JT \
|
||||||
. = ALIGN(PMD_SIZE); \
|
ALIGN_FUNCTION(); \
|
||||||
__cfi_jt_start = .; \
|
__cfi_jt_start = .; \
|
||||||
*(.text..L.cfi.jumptable .text..L.cfi.jumptable.*) \
|
*(.text..L.cfi.jumptable .text..L.cfi.jumptable.*) \
|
||||||
. = ALIGN(PMD_SIZE); \
|
|
||||||
__cfi_jt_end = .;
|
__cfi_jt_end = .;
|
||||||
#else
|
#else
|
||||||
#define TEXT_CFI_JT
|
#define TEXT_CFI_JT
|
||||||
|
Loading…
Reference in New Issue
Block a user