Skip to content

Commit 0f638f4

Browse files
committed
Merge remote-tracking branch 'stable/linux-6.12.y' into rpi-6.12.y
2 parents d3fdb9a + dcbeffa commit 0f638f4

File tree

237 files changed

+1336
-28204
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

237 files changed

+1336
-28204
lines changed

MAINTAINERS

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22014,11 +22014,6 @@ S: Maintained
2201422014
W: http://wiki.laptop.org/go/DCON
2201522015
F: drivers/staging/olpc_dcon/
2201622016

22017-
STAGING - REALTEK RTL8712U DRIVERS
22018-
M: Florian Schilhabel <[email protected]>.
22019-
S: Odd Fixes
22020-
F: drivers/staging/rtl8712/
22021-
2202222017
STAGING - SEPS525 LCD CONTROLLER DRIVERS
2202322018
M: Michael Hennerich <[email protected]>
2202422019

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 6
33
PATCHLEVEL = 12
4-
SUBLEVEL = 60
4+
SUBLEVEL = 61
55
EXTRAVERSION =
66
NAME = Baby Opossum Posse
77

arch/arm/boot/dts/nxp/imx/imx6ul.dtsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@
333333
#sound-dai-cells = <0>;
334334
compatible = "fsl,imx6ul-sai", "fsl,imx6sx-sai";
335335
reg = <0x02030000 0x4000>;
336-
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
336+
interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
337337
clocks = <&clks IMX6UL_CLK_SAI3_IPG>,
338338
<&clks IMX6UL_CLK_SAI3>,
339339
<&clks IMX6UL_CLK_DUMMY>, <&clks IMX6UL_CLK_DUMMY>;

arch/arm64/boot/dts/freescale/imx8dxl-ss-conn.dtsi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
compatible = "nxp,imx8dxl-dwmac-eqos", "snps,dwmac-5.10a";
2828
reg = <0x5b050000 0x10000>;
2929
interrupt-parent = <&gic>;
30-
interrupts = <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>,
31-
<GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
30+
interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>,
31+
<GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>;
3232
interrupt-names = "macirq", "eth_wake_irq";
3333
clocks = <&eqos_lpcg IMX_LPCG_CLK_4>,
3434
<&eqos_lpcg IMX_LPCG_CLK_6>,

arch/arm64/boot/dts/freescale/imx8qm-mek.dts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@
114114
compatible = "nxp,cbdtu02043", "gpio-sbu-mux";
115115
pinctrl-names = "default";
116116
pinctrl-0 = <&pinctrl_typec_mux>;
117-
select-gpios = <&lsio_gpio4 6 GPIO_ACTIVE_LOW>;
118-
enable-gpios = <&lsio_gpio4 19 GPIO_ACTIVE_HIGH>;
117+
select-gpios = <&lsio_gpio4 6 GPIO_ACTIVE_HIGH>;
118+
enable-gpios = <&lsio_gpio4 19 GPIO_ACTIVE_LOW>;
119119
orientation-switch;
120120

121121
port {

arch/arm64/kernel/acpi.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,6 @@ static int __init acpi_fadt_sanity_check(void)
197197
*/
198198
void __init acpi_boot_table_init(void)
199199
{
200-
int ret;
201-
202200
/*
203201
* Enable ACPI instead of device tree unless
204202
* - ACPI has been disabled explicitly (acpi=off), or
@@ -252,12 +250,10 @@ void __init acpi_boot_table_init(void)
252250
* behaviour, use acpi=nospcr to disable console in ACPI SPCR
253251
* table as default serial console.
254252
*/
255-
ret = acpi_parse_spcr(earlycon_acpi_spcr_enable,
253+
acpi_parse_spcr(earlycon_acpi_spcr_enable,
256254
!param_acpi_nospcr);
257-
if (!ret || param_acpi_nospcr || !IS_ENABLED(CONFIG_ACPI_SPCR_TABLE))
258-
pr_info("Use ACPI SPCR as default console: No\n");
259-
else
260-
pr_info("Use ACPI SPCR as default console: Yes\n");
255+
pr_info("Use ACPI SPCR as default console: %s\n",
256+
param_acpi_nospcr ? "No" : "Yes");
261257

262258
if (IS_ENABLED(CONFIG_ACPI_BGRT))
263259
acpi_table_parse(ACPI_SIG_BGRT, acpi_parse_bgrt);

arch/mips/mm/tlb-r4k.c

Lines changed: 78 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
#include <linux/init.h>
1313
#include <linux/sched.h>
1414
#include <linux/smp.h>
15+
#include <linux/memblock.h>
1516
#include <linux/mm.h>
1617
#include <linux/hugetlb.h>
1718
#include <linux/export.h>
19+
#include <linux/sort.h>
1820

1921
#include <asm/cpu.h>
2022
#include <asm/cpu-type.h>
@@ -508,58 +510,95 @@ static int __init set_ntlb(char *str)
508510

509511
__setup("ntlb=", set_ntlb);
510512

511-
/* Initialise all TLB entries with unique values */
512-
static void r4k_tlb_uniquify(void)
513+
514+
/* Comparison function for EntryHi VPN fields. */
515+
static int r4k_vpn_cmp(const void *a, const void *b)
513516
{
514-
int entry = num_wired_entries();
517+
long v = *(unsigned long *)a - *(unsigned long *)b;
518+
int s = sizeof(long) > sizeof(int) ? sizeof(long) * 8 - 1: 0;
519+
return s ? (v != 0) | v >> s : v;
520+
}
521+
522+
/*
523+
* Initialise all TLB entries with unique values that do not clash with
524+
* what we have been handed over and what we'll be using ourselves.
525+
*/
526+
static void __ref r4k_tlb_uniquify(void)
527+
{
528+
int tlbsize = current_cpu_data.tlbsize;
529+
bool use_slab = slab_is_available();
530+
int start = num_wired_entries();
531+
phys_addr_t tlb_vpn_size;
532+
unsigned long *tlb_vpns;
533+
unsigned long vpn_mask;
534+
int cnt, ent, idx, i;
535+
536+
vpn_mask = GENMASK(cpu_vmbits - 1, 13);
537+
vpn_mask |= IS_ENABLED(CONFIG_64BIT) ? 3ULL << 62 : 1 << 31;
538+
539+
tlb_vpn_size = tlbsize * sizeof(*tlb_vpns);
540+
tlb_vpns = (use_slab ?
541+
kmalloc(tlb_vpn_size, GFP_KERNEL) :
542+
memblock_alloc_raw(tlb_vpn_size, sizeof(*tlb_vpns)));
543+
if (WARN_ON(!tlb_vpns))
544+
return; /* Pray local_flush_tlb_all() is good enough. */
515545

516546
htw_stop();
547+
548+
for (i = start, cnt = 0; i < tlbsize; i++, cnt++) {
549+
unsigned long vpn;
550+
551+
write_c0_index(i);
552+
mtc0_tlbr_hazard();
553+
tlb_read();
554+
tlb_read_hazard();
555+
vpn = read_c0_entryhi();
556+
vpn &= vpn_mask & PAGE_MASK;
557+
tlb_vpns[cnt] = vpn;
558+
559+
/* Prevent any large pages from overlapping regular ones. */
560+
write_c0_pagemask(read_c0_pagemask() & PM_DEFAULT_MASK);
561+
mtc0_tlbw_hazard();
562+
tlb_write_indexed();
563+
tlbw_use_hazard();
564+
}
565+
566+
sort(tlb_vpns, cnt, sizeof(tlb_vpns[0]), r4k_vpn_cmp, NULL);
567+
568+
write_c0_pagemask(PM_DEFAULT_MASK);
517569
write_c0_entrylo0(0);
518570
write_c0_entrylo1(0);
519571

520-
while (entry < current_cpu_data.tlbsize) {
521-
unsigned long asid_mask = cpu_asid_mask(&current_cpu_data);
522-
unsigned long asid = 0;
523-
int idx;
572+
idx = 0;
573+
ent = tlbsize;
574+
for (i = start; i < tlbsize; i++)
575+
while (1) {
576+
unsigned long entryhi, vpn;
524577

525-
/* Skip wired MMID to make ginvt_mmid work */
526-
if (cpu_has_mmid)
527-
asid = MMID_KERNEL_WIRED + 1;
578+
entryhi = UNIQUE_ENTRYHI(ent);
579+
vpn = entryhi & vpn_mask & PAGE_MASK;
528580

529-
/* Check for match before using UNIQUE_ENTRYHI */
530-
do {
531-
if (cpu_has_mmid) {
532-
write_c0_memorymapid(asid);
533-
write_c0_entryhi(UNIQUE_ENTRYHI(entry));
581+
if (idx >= cnt || vpn < tlb_vpns[idx]) {
582+
write_c0_entryhi(entryhi);
583+
write_c0_index(i);
584+
mtc0_tlbw_hazard();
585+
tlb_write_indexed();
586+
ent++;
587+
break;
588+
} else if (vpn == tlb_vpns[idx]) {
589+
ent++;
534590
} else {
535-
write_c0_entryhi(UNIQUE_ENTRYHI(entry) | asid);
591+
idx++;
536592
}
537-
mtc0_tlbw_hazard();
538-
tlb_probe();
539-
tlb_probe_hazard();
540-
idx = read_c0_index();
541-
/* No match or match is on current entry */
542-
if (idx < 0 || idx == entry)
543-
break;
544-
/*
545-
* If we hit a match, we need to try again with
546-
* a different ASID.
547-
*/
548-
asid++;
549-
} while (asid < asid_mask);
550-
551-
if (idx >= 0 && idx != entry)
552-
panic("Unable to uniquify TLB entry %d", idx);
553-
554-
write_c0_index(entry);
555-
mtc0_tlbw_hazard();
556-
tlb_write_indexed();
557-
entry++;
558-
}
593+
}
559594

560595
tlbw_use_hazard();
561596
htw_start();
562597
flush_micro_tlb();
598+
if (use_slab)
599+
kfree(tlb_vpns);
600+
else
601+
memblock_free(tlb_vpns, tlb_vpn_size);
563602
}
564603

565604
/*
@@ -602,6 +641,7 @@ static void r4k_tlb_configure(void)
602641

603642
/* From this point on the ARC firmware is dead. */
604643
r4k_tlb_uniquify();
644+
local_flush_tlb_all();
605645

606646
/* Did I tell you that ARC SUCKS? */
607647
}

arch/x86/events/core.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2769,13 +2769,13 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
27692769
return;
27702770
}
27712771

2772-
if (perf_callchain_store(entry, regs->ip))
2773-
return;
2774-
2775-
if (perf_hw_regs(regs))
2772+
if (perf_hw_regs(regs)) {
2773+
if (perf_callchain_store(entry, regs->ip))
2774+
return;
27762775
unwind_start(&state, current, regs, NULL);
2777-
else
2776+
} else {
27782777
unwind_start(&state, current, NULL, (void *)regs->sp);
2778+
}
27792779

27802780
for (; !unwind_done(&state); unwind_next_frame(&state)) {
27812781
addr = unwind_get_return_address(&state);

arch/x86/kvm/svm/nested.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -602,11 +602,10 @@ static void nested_vmcb02_prepare_save(struct vcpu_svm *svm, struct vmcb *vmcb12
602602
*/
603603
svm_copy_lbrs(vmcb02, vmcb12);
604604
vmcb02->save.dbgctl &= ~DEBUGCTL_RESERVED_BITS;
605-
svm_update_lbrv(&svm->vcpu);
606-
607-
} else if (unlikely(vmcb01->control.virt_ext & LBR_CTL_ENABLE_MASK)) {
605+
} else {
608606
svm_copy_lbrs(vmcb02, vmcb01);
609607
}
608+
svm_update_lbrv(&svm->vcpu);
610609
}
611610

612611
static inline bool is_evtinj_soft(u32 evtinj)
@@ -731,11 +730,7 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm,
731730
svm->soft_int_next_rip = vmcb12_rip;
732731
}
733732

734-
vmcb02->control.virt_ext = vmcb01->control.virt_ext &
735-
LBR_CTL_ENABLE_MASK;
736-
if (guest_can_use(vcpu, X86_FEATURE_LBRV))
737-
vmcb02->control.virt_ext |=
738-
(svm->nested.ctl.virt_ext & LBR_CTL_ENABLE_MASK);
733+
/* LBR_CTL_ENABLE_MASK is controlled by svm_update_lbrv() */
739734

740735
if (!nested_vmcb_needs_vls_intercept(svm))
741736
vmcb02->control.virt_ext |= VIRTUAL_VMLOAD_VMSAVE_ENABLE_MASK;
@@ -1066,13 +1061,12 @@ int nested_svm_vmexit(struct vcpu_svm *svm)
10661061
kvm_make_request(KVM_REQ_EVENT, &svm->vcpu);
10671062

10681063
if (unlikely(guest_can_use(vcpu, X86_FEATURE_LBRV) &&
1069-
(svm->nested.ctl.virt_ext & LBR_CTL_ENABLE_MASK))) {
1064+
(svm->nested.ctl.virt_ext & LBR_CTL_ENABLE_MASK)))
10701065
svm_copy_lbrs(vmcb12, vmcb02);
1071-
svm_update_lbrv(vcpu);
1072-
} else if (unlikely(vmcb01->control.virt_ext & LBR_CTL_ENABLE_MASK)) {
1066+
else
10731067
svm_copy_lbrs(vmcb01, vmcb02);
1074-
svm_update_lbrv(vcpu);
1075-
}
1068+
1069+
svm_update_lbrv(vcpu);
10761070

10771071
if (vnmi) {
10781072
if (vmcb02->control.int_ctl & V_NMI_BLOCKING_MASK)

0 commit comments

Comments
 (0)