Linux 5.15.60
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.60 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/admin-guide/hw-vuln/spectre.rst | 8 Documentation/devicetree/bindings/net/broadcom-bluetooth.yaml | 1 Makefile | 2 arch/arm64/crypto/poly1305-glue.c | 2 arch/arm64/include/asm/kernel-pgtable.h | 4 arch/arm64/kernel/head.S | 2 arch/x86/Kconfig | 8 arch/x86/include/asm/cpufeatures.h | 2 arch/x86/include/asm/kvm_host.h | 3 arch/x86/include/asm/msr-index.h | 4 arch/x86/include/asm/nospec-branch.h | 21 ++ arch/x86/kernel/cpu/bugs.c | 86 +++++++--- arch/x86/kernel/cpu/common.c | 12 + arch/x86/kvm/svm/sev.c | 4 arch/x86/kvm/svm/svm.c | 2 arch/x86/kvm/vmx/vmenter.S | 8 arch/x86/kvm/vmx/vmx.c | 1 arch/x86/kvm/x86.c | 48 ++++- arch/x86/kvm/xen.h | 6 block/blk-ioc.c | 1 block/ioprio.c | 4 drivers/acpi/apei/bert.c | 31 ++- drivers/acpi/video_detect.c | 55 ++++-- drivers/bluetooth/btbcm.c | 2 drivers/bluetooth/btusb.c | 15 + drivers/bluetooth/hci_bcm.c | 2 drivers/macintosh/adb.c | 2 fs/btrfs/block-group.h | 1 fs/btrfs/extent-tree.c | 20 ++ fs/btrfs/extent_io.c | 3 fs/btrfs/inode.c | 2 fs/btrfs/zoned.c | 27 +++ fs/btrfs/zoned.h | 5 include/linux/ioprio.h | 2 tools/arch/x86/include/asm/cpufeatures.h | 1 tools/arch/x86/include/asm/msr-index.h | 4 tools/include/uapi/linux/bpf.h | 3 tools/kvm/kvm_stat/kvm_stat | 3 tools/testing/selftests/bpf/prog_tests/sock_fields.c | 58 ++++-- tools/testing/selftests/bpf/progs/test_sock_fields.c | 45 +++++ tools/testing/selftests/bpf/verifier/sock.c | 81 +++++++++ tools/testing/selftests/kvm/lib/aarch64/ucall.c | 9 - tools/testing/selftests/kvm/x86_64/hyperv_clock.c | 10 - tools/vm/slabinfo.c | 26 ++- 44 files changed, 514 insertions(+), 122 deletions(-)
Aaron Ma (1):
Bluetooth: btusb: Add support of IMC Networks PID 0x3568
Ahmad Fatoum (2):
Bluetooth: hci_bcm: Add BCM4349B1 variant
dt-bindings: bluetooth: broadcom: Add BCM4349B1 DT binding
Ben Hutchings (1):
x86/speculation: Make all RETbleed mitigations 64-bit only
Daniel Sneddon (1):
x86/speculation: Add RSB VM Exit protections
Dmitry Klochkov (1):
tools/kvm_stat: fix display of error when multiple processes are found
GUO Zihua (1):
crypto: arm64/poly1305 - fix a read out-of-bound
Greg Kroah-Hartman (1):
Linux 5.15.60
Hakan Jansson (1):
Bluetooth: hci_bcm: Add DT compatible for CYW55572
Hilda Wu (5):
Bluetooth: btusb: Add Realtek RTL8852C support ID 0x04CA:0x4007
Bluetooth: btusb: Add Realtek RTL8852C support ID 0x04C5:0x1675
Bluetooth: btusb: Add Realtek RTL8852C support ID 0x0CB8:0xC558
Bluetooth: btusb: Add Realtek RTL8852C support ID 0x13D3:0x3587
Bluetooth: btusb: Add Realtek RTL8852C support ID 0x13D3:0x3586Jakub Sitnicki (2):
selftests/bpf: Extend verifier and bpf_sock tests for dst_port loads selftests/bpf: Check dst_port only on the client socket
Jan Kara (1):
block: fix default IO priority handling again
Mingwei Zhang (1):
KVM: x86/svm: add __GFP_ACCOUNT to __sev_dbg_{en,de}crypt_user()Naohiro Aota (2):
btrfs: zoned: prevent allocation from previous data relocation BG
btrfs: zoned: fix critical section of relocation inode writeback
Ning Qiang (1):
macintosh/adb: fix oob read in do_adb_query() function
Paolo Bonzini (2):
KVM: x86: do not report a vCPU as preempted outside instruction boundaries
KVM: x86: do not set st->preempted when going back to user space
Pawan Gupta (1):
x86/speculation: Add LFENCE to RSB fill sequence
Peter Collingbourne (1):
arm64: set UXN on swapper page tables
Raghavendra Rao Ananta (1):
selftests: KVM: Handle compiler optimizations in ucall
Stéphane Graber (1):
tools/vm/slabinfo: Handle files in debugfs
Tony Luck (1):
ACPI: APEI: Better fix to avoid spamming the console with old error logs
Vitaly Kuznetsov (1):
KVM: selftests: Make hyperv_clock selftest more stable
Werner Sembach (2):
ACPI: video: Force backlight native for some TongFang devices
ACPI: video: Shortening quirk list by identifying Clevo by board_name only
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/hw-vuln/spectre.rst +8 -0
@@ -422,6 +422,14 @@ The possible values in this file are: 'RSB filling' Protection of RSB on context switch enabled ============= =========================================== + - EIBRS Post-barrier Return Stack Buffer (PBRSB) protection status: + + =========================== ======================================================= + 'PBRSB-eIBRS: SW sequence' CPU is affected and protection of RSB on VMEXIT enabled + 'PBRSB-eIBRS: Vulnerable' CPU is vulnerable + 'PBRSB-eIBRS: Not affected' CPU is not affected by PBRSB + =========================== ======================================================= + Full mitigation might require a microcode update from the CPU vendor. When the necessary microcode is not available, the kernel will report vulnerability.
Documentation/devicetree/bindings/net/broadcom-bluetooth.yaml +1 -0
@@ -23,6 +23,7 @@ properties: - brcm,bcm4345c5 - brcm,bcm43540-bt - brcm,bcm4335a0 + - brcm,bcm4349-bt shutdown-gpios: maxItems: 1
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 59 +SUBLEVEL = 60 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/crypto/poly1305-glue.c +1 -1
@@ -52,7 +52,7 @@ static void neon_poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src, {if (unlikely (!dctx->sset)) {if (!dctx->rset) { -poly1305_init_arch (dctx, src); +poly1305_init_arm64 (&dctx->h, src); src +=POLY1305_BLOCK_SIZE ; len -=POLY1305_BLOCK_SIZE ; dctx->rset =1 ;
arch/arm64/include/asm/kernel-pgtable.h +2 -2
@@ -103,8 +103,8 @@/* * Initial memory map attributes. */ -#define SWAPPER_PTE_FLAGS (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED) -#define SWAPPER_PMD_FLAGS (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S) +#define SWAPPER_PTE_FLAGS (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED | PTE_UXN) +#define SWAPPER_PMD_FLAGS (PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S | PMD_SECT_UXN)#if ARM64_KERNEL_USES_PMD_MAPS #define SWAPPER_MM_MMUFLAGS (PMD_ATTRINDX(MT_NORMAL) | SWAPPER_PMD_FLAGS)
arch/arm64/kernel/head.S +1 -1
@@ -285,7 +285,7 @@ SYM_FUNC_START_LOCAL(__create_page_tables) subs x1, x1, #64 b.ne 1b - mov x7, SWAPPER_MM_MMUFLAGS + mov_q x7, SWAPPER_MM_MMUFLAGS /* * Create the identity mapping.
arch/x86/Kconfig +4 -4
@@ -2427,7 +2427,7 @@ config RETPOLINE config RETHUNK bool "Enable return-thunks" depends on RETPOLINE && CC_HAS_RETURN_THUNK - default y + default y if X86_64 help Compile the kernel with the return-thunks compiler option to guard against kernel-to-user data leaks by avoiding return speculation.
@@ -2436,21 +2436,21 @@ config RETHUNK config CPU_UNRET_ENTRY bool "Enable UNRET on kernel entry" - depends on CPU_SUP_AMD && RETHUNK + depends on CPU_SUP_AMD && RETHUNK && X86_64 default y help Compile the kernel with support for the retbleed=unret mitigation. config CPU_IBPB_ENTRY bool "Enable IBPB on kernel entry" - depends on CPU_SUP_AMD + depends on CPU_SUP_AMD && X86_64 default y help Compile the kernel with support for the retbleed=ibpb mitigation. config CPU_IBRS_ENTRY bool "Enable IBRS on kernel entry" - depends on CPU_SUP_INTEL + depends on CPU_SUP_INTEL && X86_64 default y help Compile the kernel with support for the spectre_v2=ibrs mitigation.
arch/x86/include/asm/cpufeatures.h +2 -0
@@ -301,6 +301,7 @@#define X86_FEATURE_RETHUNK (11*32+14)/* "" Use REturn THUNK */ #define X86_FEATURE_UNRET (11*32+15)/* "" AMD BTB untrain return */ #define X86_FEATURE_USE_IBPB_FW (11*32+16)/* "" Use IBPB during runtime firmware calls */ +#define X86_FEATURE_RSB_VMEXIT_LITE (11*32+17)/* "" Fill RSB on VM exit when EIBRS is enabled */ /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */ #define X86_FEATURE_AVX_VNNI (12*32+ 4)/* AVX VNNI instructions */
@@ -446,5 +447,6 @@#define X86_BUG_SRBDS X86_BUG(24)/* CPU may leak RNG bits if not mitigated */ #define X86_BUG_MMIO_STALE_DATA X86_BUG(25)/* CPU is affected by Processor MMIO Stale Data vulnerabilities */ #define X86_BUG_RETBLEED X86_BUG(26)/* CPU is affected by RETBleed */ +#define X86_BUG_EIBRS_PBRSB X86_BUG(27)/* EIBRS is vulnerable to Post Barrier RSB Predictions */ #endif /* _ASM_X86_CPUFEATURES_H */
arch/x86/include/asm/kvm_host.h +3 -0
@@ -642,6 +642,7 @@ struct kvm_vcpu_arch {u64 ia32_misc_enable_msr;u64 smbase;u64 smi_count; +bool at_instruction_boundary;bool tpr_access_reporting;bool xsaves_enabled;u64 ia32_xss;
@@ -1271,6 +1272,8 @@ struct kvm_vcpu_stat {u64 nested_run;u64 directed_yield_attempted;u64 directed_yield_successful; +u64 preemption_reported; +u64 preemption_other;u64 guest_mode; };
arch/x86/include/asm/msr-index.h +4 -0
@@ -148,6 +148,10 @@* are restricted to targets in * kernel. */ +#define ARCH_CAP_PBRSB_NO BIT(24)/* +* Not susceptible to Post-Barrier +* Return Stack Buffer Predictions. +*/ #define MSR_IA32_FLUSH_CMD 0x0000010b#define L1D_FLUSH BIT(0)/*
arch/x86/include/asm/nospec-branch.h +19 -2
@@ -60,7 +60,9 @@ 774: \ add $(BITS_PER_LONG/8) * 2, sp; \ dec reg; \ - jnz 771b; + jnz 771b; \ +/* barrier for jnz misprediction */ \ + lfence;#ifdef __ASSEMBLY__
@@ -118,13 +120,28 @@#endif .endm +.macro ISSUE_UNBALANCED_RET_GUARD + ANNOTATE_INTRA_FUNCTION_CALL + call .Lunbalanced_ret_guard_\@ + int3 +.Lunbalanced_ret_guard_\@: + add $(BITS_PER_LONG/8), %_ASM_SP + lfence +.endm + /* * A simpler FILL_RETURN_BUFFER macro. Don't make people use the CPP * monstrosity above, manually. */ -.macro FILL_RETURN_BUFFER reg:req nr:req ftr:req +.macro FILL_RETURN_BUFFER reg:req nr:req ftr:req ftr2 +.ifb \ftr2 ALTERNATIVE "jmp .Lskip_rsb_\@", "", \ftr +.else + ALTERNATIVE_2 "jmp .Lskip_rsb_\@", "", \ftr, "jmp .Lunbalanced_\@", \ftr2 +.endif __FILL_RETURN_BUFFER(\reg,\nr,%_ASM_SP) +.Lunbalanced_\@: +ISSUE_UNBALANCED_RET_GUARD .Lskip_rsb_\@: .endm
arch/x86/kernel/cpu/bugs.c +63 -23
115 lines not on this page · raw message
arch/x86/kernel/cpu/common.c +10 -2
@@ -1027,6 +1027,7 @@ static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c)#define NO_SWAPGS BIT(6)#define NO_ITLB_MULTIHIT BIT(7)#define NO_SPECTRE_V2 BIT(8) +#define NO_EIBRS_PBRSB BIT(9)#define VULNWL (vendor, family, model, whitelist) \ X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, whitelist)
@@ -1067,7 +1068,7 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {VULNWL_INTEL (ATOM_GOLDMONT ,NO_MDS |NO_L1TF |NO_SWAPGS |NO_ITLB_MULTIHIT ),VULNWL_INTEL (ATOM_GOLDMONT_D ,NO_MDS |NO_L1TF |NO_SWAPGS |NO_ITLB_MULTIHIT ), - VULNWL_INTEL(ATOM_GOLDMONT_PLUS, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT), + VULNWL_INTEL(ATOM_GOLDMONT_PLUS, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_EIBRS_PBRSB),/* * Technically, swapgs isn't serializing on AMD (despite it previously
@@ -1077,7 +1078,9 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {* good enough for our purposes. */ -VULNWL_INTEL (ATOM_TREMONT_D ,NO_ITLB_MULTIHIT ), +VULNWL_INTEL (ATOM_TREMONT ,NO_EIBRS_PBRSB ), +VULNWL_INTEL (ATOM_TREMONT_L ,NO_EIBRS_PBRSB ), +VULNWL_INTEL (ATOM_TREMONT_D ,NO_ITLB_MULTIHIT |NO_EIBRS_PBRSB ),/* AMD Family 0xf - 0x12 */ VULNWL_AMD(0x0f, NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT),
@@ -1255,6 +1258,11 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)setup_force_cpu_bug (X86_BUG_RETBLEED ); } +if (cpu_has (c,X86_FEATURE_IBRS_ENHANCED ) && + !cpu_matches (cpu_vuln_whitelist,NO_EIBRS_PBRSB ) && + !(ia32_cap &ARCH_CAP_PBRSB_NO )) +setup_force_cpu_bug (X86_BUG_EIBRS_PBRSB ); +if (cpu_matches (cpu_vuln_whitelist,NO_MELTDOWN ))return ;
arch/x86/kvm/svm/sev.c +2 -2
@@ -832,7 +832,7 @@ static int __sev_dbg_encrypt_user(struct kvm *kvm, unsigned long paddr,/* If source buffer is not aligned then use an intermediate buffer */ if (!IS_ALIGNED ((unsigned long )vaddr,16 )) { - src_tpage =alloc_page (GFP_KERNEL ); + src_tpage =alloc_page (GFP_KERNEL_ACCOUNT );if (!src_tpage)return -ENOMEM ;
@@ -853,7 +853,7 @@ static int __sev_dbg_encrypt_user(struct kvm *kvm, unsigned long paddr,if (!IS_ALIGNED ((unsigned long )dst_vaddr,16 ) || !IS_ALIGNED (size,16 )) {int dst_offset; - dst_tpage =alloc_page (GFP_KERNEL ); + dst_tpage =alloc_page (GFP_KERNEL_ACCOUNT );if (!dst_tpage) { ret = -ENOMEM ; goto e_free;
arch/x86/kvm/svm/svm.c +2 -0
@@ -4263,6 +4263,8 @@ static int svm_check_intercept(struct kvm_vcpu *vcpu,static void svm_handle_exit_irqoff (struct kvm_vcpu *vcpu) { +if (to_svm (vcpu)->vmcb->control.exit_code ==SVM_EXIT_INTR ) + vcpu->arch.at_instruction_boundary = true; }static void svm_sched_in (struct kvm_vcpu *vcpu,int cpu)
arch/x86/kvm/vmx/vmenter.S +5 -3
@@ -197,11 +197,13 @@ SYM_INNER_LABEL(vmx_vmexit, SYM_L_GLOBAL) * entries and (in some cases) RSB underflow. * * eIBRS has its own protection against poisoned RSB, so it doesn't - * need the RSB filling sequence. But it does need to be enabled - * before the first unbalanced RET. + * need the RSB filling sequence. But it does need to be enabled, and a + * single call to retire, before the first unbalanced RET. */ - FILL_RETURN_BUFFER %_ASM_CX, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_VMEXIT + FILL_RETURN_BUFFER %_ASM_CX, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_VMEXIT,\ + X86_FEATURE_RSB_VMEXIT_LITE + pop %_ASM_ARG2 /* @flags */ pop %_ASM_ARG1 /* @vmx */
arch/x86/kvm/vmx/vmx.c +1 -0
@@ -6471,6 +6471,7 @@ static void handle_external_interrupt_irqoff(struct kvm_vcpu *vcpu)return ;handle_interrupt_nmi_irqoff (vcpu,gate_offset (desc)); + vcpu->arch.at_instruction_boundary = true; }static void vmx_handle_exit_irqoff (struct kvm_vcpu *vcpu)
arch/x86/kvm/x86.c +36 -12
73 lines not on this page · raw message
arch/x86/kvm/xen.h +4 -2
@@ -97,8 +97,10 @@ static inline void kvm_xen_runstate_set_preempted(struct kvm_vcpu *vcpu)* behalf of the vCPU. Only if the VMM does actually block * does it need to enter RUNSTATE_blocked. */ -if (vcpu->preempted) -kvm_xen_update_runstate_guest (vcpu, RUNSTATE_runnable); +if (WARN_ON_ONCE (!vcpu->preempted)) +return ; + +kvm_xen_update_runstate_guest (vcpu, RUNSTATE_runnable); }/* 32-bit compatibility definitions, also used natively in 32-bit build */
block/blk-ioc.c +1 -0
@@ -265,6 +265,7 @@ int create_task_io_context(struct task_struct *task, gfp_t gfp_flags, int node)INIT_RADIX_TREE (&ioc->icq_tree,GFP_ATOMIC );INIT_HLIST_HEAD (&ioc->icq_list);INIT_WORK (&ioc->release_work, ioc_release_fn); + ioc->ioprio =IOPRIO_DEFAULT ;/* * Try to install. ioc shouldn't be installed if someone else
block/ioprio.c +2 -2
@@ -189,9 +189,9 @@ static int get_task_ioprio(struct task_struct *p)int ioprio_best (unsigned short aprio,unsigned short bprio) {if (!ioprio_valid (aprio)) - aprio =IOPRIO_DEFAULT ; + aprio =IOPRIO_PRIO_VALUE (IOPRIO_CLASS_BE ,IOPRIO_BE_NORM );if (!ioprio_valid (bprio)) - bprio =IOPRIO_DEFAULT ; + bprio =IOPRIO_PRIO_VALUE (IOPRIO_CLASS_BE ,IOPRIO_BE_NORM );return min (aprio, bprio); }
drivers/acpi/apei/bert.c +23 -8
@@ -29,16 +29,26 @@#undef pr_fmt#define pr_fmt (fmt) "BERT: " fmt + +#define ACPI_BERT_PRINT_MAX_RECORDS 5#define ACPI_BERT_PRINT_MAX_LEN 1024static int bert_disable; +/* +* Print "all" the error records in the BERT table, but avoid huge spam to +* the console if the BIOS included oversize records, or too many records. +* Skipping some records here does not lose anything because the full +* data is available to user tools in: +* /sys/firmware/acpi/tables/data/BERT +*/ static void __init bert_print_all (struct acpi_bert_region *region,unsigned int region_len) {struct acpi_hest_generic_status *estatus = (struct acpi_hest_generic_status *)region;int remain = region_len; +int printed =0 , skipped =0 ;u32 estatus_len;while (remain >=sizeof (struct acpi_bert_region )) {
@@ -46,24 +56,26 @@ static void __init bert_print_all(struct acpi_bert_region *region,if (remain < estatus_len) {pr_err (FW_BUG "Truncated status block (length: %u).\n" , estatus_len); -return ; +break ; }/* No more error records. */ if (!estatus->block_status) -return ; +break ;if (cper_estatus_check (estatus)) {pr_err (FW_BUG "Invalid error record.\n" ); -return ; +break ; } -pr_info_once ("Error records from previous boot:\n" ); -if (region_len <ACPI_BERT_PRINT_MAX_LEN ) +if (estatus_len <ACPI_BERT_PRINT_MAX_LEN && + printed <ACPI_BERT_PRINT_MAX_RECORDS ) { +pr_info_once ("Error records from previous boot:\n" ); cper_estatus_print(KERN_INFO HW_ERR, estatus); -else -pr_info_once ("Max print length exceeded, table data is available at:\n" -"/sys/firmware/acpi/tables/data/BERT" ); + printed++; + }else { + skipped++; + }/* * Because the boot error source is "one-time polled" type,
@@ -75,6 +87,9 @@ static void __init bert_print_all(struct acpi_bert_region *region, estatus = (void *)estatus + estatus_len; remain -= estatus_len; } + +if (skipped) +pr_info (HW_ERR "Skipped %d error records\n" , skipped); }static int __init setup_bert_disable (char *str)
drivers/acpi/video_detect.c +35 -20
101 lines not on this page · raw message
drivers/bluetooth/btbcm.c +2 -0
@@ -453,6 +453,8 @@ static const struct bcm_subver_table bcm_uart_subver_table[] = { { 0x6606, "BCM4345C5" }, /* 003.006.006 */ { 0x230f, "BCM4356A2" }, /* 001.003.015 */ { 0x220e, "BCM20702A1" }, /* 001.002.014 */ + { 0x420d, "BCM4349B1" }, /* 002.002.013 */ + { 0x420e, "BCM4349B1" }, /* 002.002.014 */ { 0x4217, "BCM4329B1" }, /* 002.002.023 */ { 0x6106, "BCM4359C0" }, /* 003.001.006 */ { 0x4106, "BCM4335A0" }, /* 002.001.006 */
drivers/bluetooth/btusb.c +15 -0
@@ -420,6 +420,18 @@ static const struct usb_device_id blacklist_table[] = { { USB_DEVICE(0x04ca, 0x4006), .driver_info = BTUSB_REALTEK | BTUSB_WIDEBAND_SPEECH }, + /* Realtek 8852CE Bluetooth devices */ + { USB_DEVICE(0x04ca, 0x4007), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, + { USB_DEVICE(0x04c5, 0x1675), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, + { USB_DEVICE(0x0cb8, 0xc558), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, + { USB_DEVICE(0x13d3, 0x3587), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, + { USB_DEVICE(0x13d3, 0x3586), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, + /* Realtek Bluetooth devices */ { USB_VENDOR_AND_INTERFACE_INFO(0x0bda, 0xe0, 0x01, 0x01), .driver_info = BTUSB_REALTEK },
@@ -459,6 +471,9 @@ static const struct usb_device_id blacklist_table[] = { { USB_DEVICE(0x0489, 0xe0d9), .driver_info = BTUSB_MEDIATEK |BTUSB_WIDEBAND_SPEECH | BTUSB_VALID_LE_STATES }, + { USB_DEVICE(0x13d3, 0x3568), .driver_info = BTUSB_MEDIATEK | +BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, /* Additional Realtek 8723AE Bluetooth devices */ { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
drivers/bluetooth/hci_bcm.c +2 -0
@@ -1515,8 +1515,10 @@ static const struct of_device_id bcm_bluetooth_of_match[] = { { .compatible = "brcm,bcm4345c5" }, { .compatible = "brcm,bcm4330-bt" }, { .compatible = "brcm,bcm43438-bt", .data = &bcm43438_device_data }, + { .compatible = "brcm,bcm4349-bt", .data = &bcm43438_device_data }, { .compatible = "brcm,bcm43540-bt", .data = &bcm4354_device_data }, { .compatible = "brcm,bcm4335a0" }, + { .compatible = "infineon,cyw55572-bt" }, { }, };MODULE_DEVICE_TABLE (of, bcm_bluetooth_of_match);
drivers/macintosh/adb.c +1 -1
@@ -647,7 +647,7 @@ do_adb_query(struct adb_request *req)switch (req->data[1 ]) {case ADB_QUERY_GETDEVINFO : -if (req->nbytes <3 ) +if (req->nbytes <3 || req->data[2 ] >=16 )break ;mutex_lock (&adb_handler_mutex); req->reply[0 ] = adb_handler[req->data[2 ]].original_address;
fs/btrfs/block-group.h +1 -0
@@ -98,6 +98,7 @@ struct btrfs_block_group { unsigned int to_copy:1; unsigned int relocating_repair:1; unsigned int chunk_item_inserted:1; + unsigned int zoned_data_reloc_ongoing:1;int disk_cache_state;
fs/btrfs/extent-tree.c +18 -2
@@ -3804,7 +3804,7 @@ static int do_allocation_zoned(struct btrfs_block_group *block_group, block_group->start == fs_info->data_reloc_bg || fs_info->data_reloc_bg == 0); -if (block_group->ro) { +if (block_group->ro || block_group->zoned_data_reloc_ongoing) { ret =1 ; goto out; }
@@ -3865,8 +3865,24 @@ static int do_allocation_zoned(struct btrfs_block_group *block_group, out:if (ret && ffe_ctl->for_treelog) fs_info->treelog_bg =0 ; -if (ret && ffe_ctl->for_data_reloc) +if (ret && ffe_ctl->for_data_reloc && + fs_info->data_reloc_bg == block_group->start) { +/* +* Do not allow further allocations from this block group. +* Compared to increasing the ->ro, setting the +* ->zoned_data_reloc_ongoing flag still allows nocow +* writers to come in. See btrfs_inc_nocow_writers(). +* +* We need to disable an allocation to avoid an allocation of +* regular (non-relocation data) extent. With mix of relocation +* extents and regular extents, we can dispatch WRITE commands +* (for relocation extents) and ZONE APPEND commands (for +* regular extents) at the same time to the same zone, which +* easily break the write pointer. +*/ + block_group->zoned_data_reloc_ongoing =1 ; fs_info->data_reloc_bg =0 ; + }spin_unlock (&fs_info->relocation_bg_lock);spin_unlock (&fs_info->treelog_bg_lock);spin_unlock (&block_group->lock);
fs/btrfs/extent_io.c +2 -1
@@ -5152,13 +5152,14 @@ int extent_writepages(struct address_space *mapping,*/ btrfs_zoned_data_reloc_lock (BTRFS_I (inode)); ret =extent_write_cache_pages (mapping, wbc, &epd); -btrfs_zoned_data_reloc_unlock (BTRFS_I (inode));ASSERT (ret <=0 );if (ret <0 ) { +btrfs_zoned_data_reloc_unlock (BTRFS_I (inode));end_write_bio (&epd, ret);return ret; } ret =flush_write_bio (&epd); +btrfs_zoned_data_reloc_unlock (BTRFS_I (inode));return ret; }
fs/btrfs/inode.c +2 -0
@@ -3069,6 +3069,8 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent) ordered_extent->file_offset, ordered_extent->file_offset + logical_len); +btrfs_zoned_release_data_reloc_bg (fs_info, ordered_extent->disk_bytenr, + ordered_extent->disk_num_bytes); }else {BUG_ON (root == fs_info->tree_root); ret =insert_ordered_extent_file_extent (trans, ordered_extent);
fs/btrfs/zoned.c +27 -0
@@ -1623,3 +1623,30 @@ void btrfs_free_zone_cache(struct btrfs_fs_info *fs_info) }mutex_unlock (&fs_devices->device_list_mutex); } + +void btrfs_zoned_release_data_reloc_bg (struct btrfs_fs_info *fs_info,u64 logical, +u64 length) +{ +struct btrfs_block_group *block_group; + +if (!btrfs_is_zoned (fs_info)) +return ; + + block_group =btrfs_lookup_block_group (fs_info, logical); +/* It should be called on a previous data relocation block group. */ +ASSERT (block_group && (block_group->flags &BTRFS_BLOCK_GROUP_DATA )); + +spin_lock (&block_group->lock); +if (!block_group->zoned_data_reloc_ongoing) + goto out; + +/* All relocation extents are written. */ +if (block_group->start + block_group->alloc_offset == logical + length) { +/* Now, release this block group for further allocations. */ + block_group->zoned_data_reloc_ongoing =0 ; + } + +out: +spin_unlock (&block_group->lock); +btrfs_put_block_group (block_group); +}
fs/btrfs/zoned.h +5 -0
@@ -70,6 +70,8 @@ struct btrfs_device *btrfs_zoned_get_device(struct btrfs_fs_info *fs_info, u64 logical, u64 length);void btrfs_clear_data_reloc_bg (struct btrfs_block_group *bg);void btrfs_free_zone_cache (struct btrfs_fs_info *fs_info); +void btrfs_zoned_release_data_reloc_bg (struct btrfs_fs_info *fs_info,u64 logical, +u64 length);#else /* CONFIG_BLK_DEV_ZONED */ static inline int btrfs_get_dev_zone (struct btrfs_device *device,u64 pos,struct blk_zone *zone)
@@ -207,6 +209,9 @@ static inline struct btrfs_device *btrfs_zoned_get_device(static inline void btrfs_clear_data_reloc_bg (struct btrfs_block_group *bg) { }static inline void btrfs_free_zone_cache (struct btrfs_fs_info *fs_info) { } + +static inline void btrfs_zoned_release_data_reloc_bg (struct btrfs_fs_info *fs_info, +u64 logical,u64 length) { }#endif static inline bool btrfs_dev_is_sequential (struct btrfs_device *device,u64 pos)
include/linux/ioprio.h +1 -1
@@ -11,7 +11,7 @@/* * Default IO priority. */ -#define IOPRIO_DEFAULT IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, IOPRIO_BE_NORM) +#define IOPRIO_DEFAULT IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0)/* * Check that a priority value has a valid class.
tools/arch/x86/include/asm/cpufeatures.h +1 -0
@@ -300,6 +300,7 @@#define X86_FEATURE_RETPOLINE_LFENCE (11*32+13)/* "" Use LFENCE for Spectre variant 2 */ #define X86_FEATURE_RETHUNK (11*32+14)/* "" Use REturn THUNK */ #define X86_FEATURE_UNRET (11*32+15)/* "" AMD BTB untrain return */ +#define X86_FEATURE_RSB_VMEXIT_LITE (11*32+17)/* "" Fill RSB on VM-Exit when EIBRS is enabled */ /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */ #define X86_FEATURE_AVX_VNNI (12*32+ 4)/* AVX VNNI instructions */
tools/arch/x86/include/asm/msr-index.h +4 -0
@@ -148,6 +148,10 @@* are restricted to targets in * kernel. */ +#define ARCH_CAP_PBRSB_NO BIT(24)/* +* Not susceptible to Post-Barrier +* Return Stack Buffer Predictions. +*/ #define MSR_IA32_FLUSH_CMD 0x0000010b#define L1D_FLUSH BIT(0)/*
tools/include/uapi/linux/bpf.h +2 -1
@@ -5347,7 +5347,8 @@ struct bpf_sock {__u32 src_ip4;__u32 src_ip6[4 ];__u32 src_port;/* host byte order */ -__u32 dst_port;/* network byte order */ +__be16 dst_port;/* network byte order */ + __u16 :16 ;/* zero padding */ __u32 dst_ip4;__u32 dst_ip6[4 ];__u32 state;
tools/kvm/kvm_stat/kvm_stat +2 -1
@@ -1646,7 +1646,8 @@ Press any other key to refresh statistics immediately. .format(values)) if len(pids) > 1: sys.exit('Error: Multiple processes found (pids: {}). Use "-p"' - ' to specify the desired pid'.format(" ".join(pids))) + ' to specify the desired pid' + .format(" ".join(map(str, pids)))) namespace.pid = pids[0] argparser = argparse.ArgumentParser(description=description_text,
tools/testing/selftests/bpf/prog_tests/sock_fields.c +41 -17
121 lines not on this page · raw message
tools/testing/selftests/bpf/progs/test_sock_fields.c +45 -0
55 lines not on this page · raw message
tools/testing/selftests/bpf/verifier/sock.c +78 -3
99 lines not on this page · raw message
tools/testing/selftests/kvm/lib/aarch64/ucall.c +4 -5
@@ -73,20 +73,19 @@ void ucall_uninit(struct kvm_vm *vm)void ucall (uint64_t cmd,int nargs, ...) { -struct ucall uc = { - .cmd = cmd, - }; +struct ucall uc = {};va_list va;int i; +WRITE_ONCE (uc.cmd, cmd); nargs = nargs <=UCALL_MAX_ARGS ? nargs :UCALL_MAX_ARGS ;va_start (va, nargs);for (i =0 ; i < nargs; ++i) - uc.args[i] =va_arg (va, uint64_t); +WRITE_ONCE (uc.args[i],va_arg (va, uint64_t));va_end (va); - *ucall_exit_mmio_addr = (vm_vaddr_t)&uc; +WRITE_ONCE (*ucall_exit_mmio_addr, (vm_vaddr_t)&uc); }uint64_t get_ucall (struct kvm_vm *vm,uint32_t vcpu_id,struct ucall *uc)
tools/testing/selftests/kvm/x86_64/hyperv_clock.c +7 -3
@@ -44,7 +44,7 @@ static inline void nop_loop(void) {int i; -for (i =0 ; i <1000000 ; i++) +for (i =0 ; i <100000000 ; i++) asmvolatile ("nop" ); }
@@ -56,12 +56,14 @@ static inline void check_tsc_msr_rdtsc(void) tsc_freq =rdmsr (HV_X64_MSR_TSC_FREQUENCY );GUEST_ASSERT (tsc_freq >0 ); -/* First, check MSR-based clocksource */ +/* For increased accuracy, take mean rdtsc() before and afrer rdmsr() */ r1 =rdtsc (); t1 =rdmsr (HV_X64_MSR_TIME_REF_COUNT ); + r1 = (r1 +rdtsc ()) /2 ;nop_loop (); r2 =rdtsc (); t2 =rdmsr (HV_X64_MSR_TIME_REF_COUNT ); + r2 = (r2 +rdtsc ()) /2 ;GUEST_ASSERT (r2 > r1 && t2 > t1);
@@ -181,12 +183,14 @@ static void host_check_tsc_msr_rdtsc(struct kvm_vm *vm) tsc_freq =vcpu_get_msr (vm,VCPU_ID ,HV_X64_MSR_TSC_FREQUENCY );TEST_ASSERT (tsc_freq >0 ,"TSC frequency must be nonzero" ); -/* First, check MSR-based clocksource */ +/* For increased accuracy, take mean rdtsc() before and afrer ioctl */ r1 =rdtsc (); t1 =vcpu_get_msr (vm,VCPU_ID ,HV_X64_MSR_TIME_REF_COUNT ); + r1 = (r1 +rdtsc ()) /2 ;nop_loop (); r2 =rdtsc (); t2 =vcpu_get_msr (vm,VCPU_ID ,HV_X64_MSR_TIME_REF_COUNT ); + r2 = (r2 +rdtsc ()) /2 ;TEST_ASSERT (t2 > t1,"Time reference MSR is not monotonic (%ld <= %ld)" , t1, t2);
tools/vm/slabinfo.c +24 -2
@@ -233,6 +233,24 @@ static unsigned long read_slab_obj(struct slabinfo *s, const char *name)return l; } +static unsigned long read_debug_slab_obj (struct slabinfo *s,const char *name) +{ +char x[128 ]; +FILE *f; +size_t l; + +snprintf (x,128 ,"/sys/kernel/debug/slab/%s/%s" , s->name, name); + f =fopen (x,"r" ); +if (!f) { + buffer[0 ] =0 ; + l =0 ; + }else { + l =fread (buffer,1 ,sizeof (buffer), f); + buffer[l] =0 ; +fclose (f); + } +return l; +}/* * Put a size string together
@@ -409,14 +427,18 @@ static void show_tracking(struct slabinfo *s) {printf ("\n%s: Kernel object allocation\n" , s->name);printf ("-----------------------------------------------------------------------\n" ); -if (read_slab_obj (s,"alloc_calls" )) +if (read_debug_slab_obj (s,"alloc_traces" )) +printf ("%s" , buffer); +else if (read_slab_obj (s,"alloc_calls" ))printf ("%s" , buffer);else printf ("No Data\n" );printf ("\n%s: Kernel object freeing\n" , s->name);printf ("------------------------------------------------------------------------\n" ); -if (read_slab_obj (s,"free_calls" )) +if (read_debug_slab_obj (s,"free_traces" )) +printf ("%s" , buffer); +else if (read_slab_obj (s,"free_calls" ))printf ("%s" , buffer);else printf ("No Data\n" );