Linux 5.10.49
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.49 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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
------------
Makefile | 2 arch/hexagon/Makefile | 6 +- arch/hexagon/include/asm/futex.h | 4 - arch/hexagon/include/asm/timex.h | 3 - arch/hexagon/kernel/hexagon_ksyms.c | 8 +-- arch/hexagon/kernel/ptrace.c | 4 - arch/hexagon/lib/Makefile | 3 - arch/hexagon/lib/divsi3.S | 67 +++++++++++++++++++++++++++++++ arch/hexagon/lib/memcpy_likely_aligned.S | 56 +++++++++++++++++++++++++ arch/hexagon/lib/modsi3.S | 46 +++++++++++++++++++++ arch/hexagon/lib/udivsi3.S | 38 +++++++++++++++++ arch/hexagon/lib/umodsi3.S | 36 ++++++++++++++++ arch/powerpc/kvm/book3s_hv.c | 4 + drivers/media/usb/uvc/uvc_driver.c | 32 ++++++++++++++ drivers/xen/events/events_base.c | 23 ++++++++-- 15 files changed, 314 insertions(+), 18 deletions(-)
Fabiano Rosas (1):
KVM: PPC: Book3S HV: Save and restore FSCR in the P9 path
Greg Kroah-Hartman (1):
Linux 5.10.49
Juergen Gross (1):
xen/events: reset active flag for lateeoi events later
Laurent Pinchart (1):
media: uvcvideo: Support devices that report an OT as an entity source
Sid Manning (3):
Hexagon: fix build errors
Hexagon: add target builtins to kernel
Hexagon: change jumps to must-extend in futex_atomic_*
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 48 +SUBLEVEL = 49 EXTRAVERSION = NAME = Dare mighty things
arch/hexagon/Makefile +3 -3
@@ -10,6 +10,9 @@ LDFLAGS_vmlinux += -G0 # Do not use single-byte enums; these will overflow. KBUILD_CFLAGS += -fno-short-enums +# We must use long-calls: +KBUILD_CFLAGS += -mlong-calls + # Modules must use either long-calls, or use pic/plt. # Use long-calls for now, it's easier. And faster. # KBUILD_CFLAGS_MODULE += -fPIC
@@ -30,9 +33,6 @@ TIR_NAME := r19 KBUILD_CFLAGS += -ffixed-$(TIR_NAME) -DTHREADINFO_REG=$(TIR_NAME) -D__linux__ KBUILD_AFLAGS += -DTHREADINFO_REG=$(TIR_NAME) -LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name 2>/dev/null) -libs-y += $(LIBGCC) - head-y := arch/hexagon/kernel/head.o core-y += arch/hexagon/kernel/ \
arch/hexagon/include/asm/futex.h +2 -2
@@ -21,7 +21,7 @@"3:\n" \".section .fixup,\"ax\"\n" \"4: %1 = #%5;\n" \ -" jump 3b\n" \ +" jump ##3b\n" \".previous\n" \".section __ex_table,\"a\"\n" \".long 1b,4b,2b,4b\n" \
@@ -90,7 +90,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, u32 oldval,"3:\n" ".section .fixup,\"ax\"\n" "4: %0 = #%6\n" -" jump 3b\n" +" jump ##3b\n" ".previous\n" ".section __ex_table,\"a\"\n" ".long 1b,4b,2b,4b\n"
arch/hexagon/include/asm/timex.h +2 -1
@@ -8,6 +8,7 @@#include <asm-generic/timex.h> #include <asm/timer-regs.h> +#include <asm/hexagon_vm.h> /* Using TCX0 as our clock. CLOCK_TICK_RATE scheduled to be removed. */ #define CLOCK_TICK_RATE TCX0_CLK_RATE
@@ -16,7 +17,7 @@static inline int read_current_timer (unsigned long *timer_val) { - *timer_val = (unsigned long )__vmgettime (); + *timer_val =__vmgettime ();return 0 ; }
arch/hexagon/kernel/hexagon_ksyms.c +4 -4
@@ -35,8 +35,8 @@ EXPORT_SYMBOL(_dflt_cache_att);DECLARE_EXPORT (__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes);/* Additional functions */ -DECLARE_EXPORT (__divsi3); -DECLARE_EXPORT (__modsi3); -DECLARE_EXPORT (__udivsi3); -DECLARE_EXPORT (__umodsi3); +DECLARE_EXPORT (__hexagon_divsi3); +DECLARE_EXPORT (__hexagon_modsi3); +DECLARE_EXPORT (__hexagon_udivsi3); +DECLARE_EXPORT (__hexagon_umodsi3);DECLARE_EXPORT (csum_tcpudp_magic);
arch/hexagon/kernel/ptrace.c +2 -2
@@ -35,7 +35,7 @@ void user_disable_single_step(struct task_struct *child)static int genregs_get (struct task_struct *target,const struct user_regset *regset, - srtuct membuf to) +struct membuf to) {struct pt_regs *regs =task_pt_regs (target);
@@ -54,7 +54,7 @@ static int genregs_get(struct task_struct *target,membuf_store (&to, regs->m0);membuf_store (&to, regs->m1);membuf_store (&to, regs->usr); -membuf_store (&to, regs->p3_0); +membuf_store (&to, regs->preds);membuf_store (&to, regs->gp);membuf_store (&to, regs->ugp);membuf_store (&to,pt_elr (regs));// pc
arch/hexagon/lib/Makefile +2 -1
@@ -2,4 +2,5 @@ # # Makefile for hexagon-specific library files. # -obj-y = checksum.o io.o memcpy.o memset.o +obj-y = checksum.o io.o memcpy.o memset.o memcpy_likely_aligned.o \ + divsi3.o modsi3.o udivsi3.o umodsi3.o
arch/hexagon/lib/divsi3.S new file +67 -0
67 lines not on this page · raw message
arch/hexagon/lib/memcpy_likely_aligned.S new file +56 -0
56 lines not on this page · raw message
arch/hexagon/lib/modsi3.S new file +46 -0
46 lines not on this page · raw message
arch/hexagon/lib/udivsi3.S new file +38 -0
@@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2021, The Linux Foundation. All rights reserved. + */ + +#include <linux/linkage.h> + +SYM_FUNC_START(__hexagon_udivsi3) + { + r2 = cl0(r0) + r3 = cl0(r1) + r5:4 = combine(#1,#0) + p0 = cmp.gtu(r1,r0) + } + { + r6 = sub(r3,r2) + r4 = r1 + r1:0 = combine(r0,r4) + if (p0) jumpr r31 + } + { + r3:2 = vlslw(r5:4,r6) + loop0(1f,r6) + } + .falign +1: + { + p0 = cmp.gtu(r2,r1) + if (!p0.new) r1 = sub(r1,r2) + if (!p0.new) r0 = add(r0,r3) + r3:2 = vlsrw(r3:2,#1) + }:endloop0 + { + p0 = cmp.gtu(r2,r1) + if (!p0.new) r0 = add(r0,r3) + jumpr r31 + } +SYM_FUNC_END(__hexagon_udivsi3)
arch/hexagon/lib/umodsi3.S new file +36 -0
@@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2021, The Linux Foundation. All rights reserved. + */ + +#include <linux/linkage.h> + +SYM_FUNC_START(__hexagon_umodsi3) + { + r2 = cl0(r0) + r3 = cl0(r1) + p0 = cmp.gtu(r1,r0) + } + { + r2 = sub(r3,r2) + if (p0) jumpr r31 + } + { + loop0(1f,r2) + p1 = cmp.eq(r2,#0) + r2 = lsl(r1,r2) + } + .falign +1: + { + p0 = cmp.gtu(r2,r0) + if (!p0.new) r0 = sub(r0,r2) + r2 = lsr(r2,#1) + if (p1) r1 = #0 + }:endloop0 + { + p0 = cmp.gtu(r2,r0) + if (!p0.new) r0 = sub(r0,r1) + jumpr r31 + } +SYM_FUNC_END(__hexagon_umodsi3)
arch/powerpc/kvm/book3s_hv.c +4 -0
@@ -3583,6 +3583,7 @@ static int kvmhv_p9_guest_entry(struct kvm_vcpu *vcpu, u64 time_limit,unsigned long host_tidr =mfspr (SPRN_TIDR );unsigned long host_iamr =mfspr (SPRN_IAMR );unsigned long host_amr =mfspr (SPRN_AMR ); +unsigned long host_fscr =mfspr (SPRN_FSCR );s64 dec;u64 tb;int trap, save_pmu;
@@ -3726,6 +3727,9 @@ static int kvmhv_p9_guest_entry(struct kvm_vcpu *vcpu, u64 time_limit,if (host_amr != vcpu->arch.amr)mtspr (SPRN_AMR , host_amr); +if (host_fscr != vcpu->arch.fscr) +mtspr (SPRN_FSCR , host_fscr); +msr_check_and_set (MSR_FP |MSR_VEC |MSR_VSX );store_fp_state (&vcpu->arch.fp);#ifdef CONFIG_ALTIVEC
drivers/media/usb/uvc/uvc_driver.c +32 -0
@@ -1588,6 +1588,31 @@ static int uvc_scan_chain_forward(struct uvc_video_chain *chain,return -EINVAL ; } +/* +* Some devices reference an output terminal as the +* source of extension units. This is incorrect, as +* output terminals only have an input pin, and thus +* can't be connected to any entity in the forward +* direction. The resulting topology would cause issues +* when registering the media controller graph. To +* avoid this problem, connect the extension unit to +* the source of the output terminal instead. +*/ +if (UVC_ENTITY_IS_OTERM (entity)) { +struct uvc_entity *source; + + source =uvc_entity_by_id (chain->dev, + entity->baSourceID[0 ]); +if (!source) { +uvc_trace (UVC_TRACE_DESCR , +"Can't connect extension unit %u in chain\n" , + forward->id); +break ; + } + + forward->baSourceID[0 ] = source->id; + } +list_add_tail (&forward->chain, &chain->entities);if (uvc_trace_param &UVC_TRACE_PROBE ) {if (!found)
@@ -1608,6 +1633,13 @@ static int uvc_scan_chain_forward(struct uvc_video_chain *chain,return -EINVAL ; } +if (UVC_ENTITY_IS_OTERM (entity)) { +uvc_trace (UVC_TRACE_DESCR , +"Unsupported connection between output terminals %u and %u\n" , + entity->id, forward->id); +break ; + } +list_add_tail (&forward->chain, &chain->entities);if (uvc_trace_param &UVC_TRACE_PROBE ) {if (!found)
drivers/xen/events/events_base.c +19 -4
@@ -583,6 +583,9 @@ static void xen_irq_lateeoi_locked(struct irq_info *info, bool spurious) } info->eoi_time =0 ; + +/* is_active hasn't been reset yet, do it now. */ +smp_store_release (&info->is_active,0 );do_unmask (info,EVT_MASK_REASON_EOI_PENDING ); }
@@ -1807,10 +1810,22 @@ static void lateeoi_ack_dynirq(struct irq_data *data)struct irq_info *info =info_for_irq (data->irq);evtchn_port_t evtchn = info ? info->evtchn :0 ; -if (VALID_EVTCHN (evtchn)) { -do_mask (info,EVT_MASK_REASON_EOI_PENDING ); -ack_dynirq (data); - } +if (!VALID_EVTCHN (evtchn)) +return ; + +do_mask (info,EVT_MASK_REASON_EOI_PENDING ); + +if (unlikely (irqd_is_setaffinity_pending (data)) && +likely (!irqd_irq_disabled (data))) { +do_mask (info,EVT_MASK_REASON_TEMPORARY ); + +clear_evtchn (evtchn); + +irq_move_masked_irq (data); + +do_unmask (info,EVT_MASK_REASON_TEMPORARY ); + }else +clear_evtchn (evtchn); }static void lateeoi_mask_ack_dynirq (struct irq_data *data)