Linux 5.4.125
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.125 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/core-api/xarray.rst | 16 - Makefile | 2 arch/arm/boot/dts/imx6dl-yapp4-common.dtsi | 6 arch/arm/boot/dts/imx6q-dhcom-som.dtsi | 12 + arch/arm/boot/dts/imx6qdl-emcon-avari.dtsi | 2 arch/arm/boot/dts/imx7d-meerkat96.dts | 2 arch/arm/boot/dts/imx7d-pico.dtsi | 2 arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 4 arch/arm64/boot/dts/freescale/imx8mq-zii-ultra.dtsi | 4 arch/arm64/kvm/sys_regs.c | 42 ++-- arch/x86/include/asm/apic.h | 1 arch/x86/include/asm/kvm_para.h | 10 arch/x86/kernel/apic/apic.c | 1 arch/x86/kernel/apic/vector.c | 20 + arch/x86/kernel/kvm.c | 92 ++++++-- arch/x86/kernel/kvmclock.c | 26 -- arch/x86/kvm/svm.c | 8 drivers/acpi/acpica/utdelete.c | 8 drivers/bus/ti-sysc.c | 4 drivers/firmware/efi/cper.c | 4 drivers/firmware/efi/memattr.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 16 - drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 1 drivers/hid/hid-magicmouse.c | 2 drivers/hid/hid-multitouch.c | 10 drivers/hid/i2c-hid/i2c-hid-core.c | 13 - drivers/hid/usbhid/hid-pidff.c | 1 drivers/hwmon/dell-smm-hwmon.c | 4 drivers/i2c/busses/i2c-qcom-geni.c | 21 +- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 1 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 7 drivers/net/ethernet/intel/i40e/i40e_xsk.c | 15 + drivers/net/ethernet/intel/ice/ice_hw_autogen.h | 1 drivers/net/ethernet/intel/ice/ice_txrx.c | 5 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 14 - drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 3 drivers/net/usb/cdc_ncm.c | 12 + drivers/usb/dwc2/core_intr.c | 4 drivers/vfio/pci/Kconfig | 1 drivers/vfio/pci/vfio_pci_config.c | 2 drivers/vfio/platform/vfio_platform_common.c | 2 drivers/xen/xen-pciback/vpci.c | 14 - fs/btrfs/extent-tree.c | 12 - fs/btrfs/file-item.c | 10 fs/btrfs/inode.c | 12 + fs/btrfs/tree-checker.c | 16 - fs/btrfs/tree-log.c | 13 - fs/ext4/extents.c | 43 ++-- fs/ocfs2/file.c | 55 ++++- include/linux/huge_mm.h | 19 + include/linux/usb/usbnet.h | 2 include/linux/xarray.h | 22 ++ include/net/caif/caif_dev.h | 2 include/net/caif/cfcnfg.h | 2 include/net/caif/cfserl.h | 1 init/main.c | 2 lib/lz4/lz4_decompress.c | 6 lib/lz4/lz4defs.h | 2 lib/test_xarray.c | 65 ++++++ lib/xarray.c | 208 +++++++++++++++++++- mm/filemap.c | 37 ++- mm/hugetlb.c | 14 + net/bluetooth/hci_core.c | 7 net/bluetooth/hci_sock.c | 4 net/caif/caif_dev.c | 13 - net/caif/caif_usb.c | 14 + net/caif/cfcnfg.c | 16 + net/caif/cfserl.c | 5 net/core/neighbour.c | 1 net/ieee802154/nl-mac.c | 4 net/ieee802154/nl-phy.c | 4 net/ipv6/route.c | 8 net/netfilter/ipvs/ip_vs_ctl.c | 2 net/netfilter/nf_conntrack_proto.c | 2 net/netfilter/nfnetlink_cthelper.c | 8 net/netfilter/nft_ct.c | 2 net/nfc/llcp_sock.c | 2 net/sched/act_ct.c | 3 net/tipc/bearer.c | 94 ++++++--- net/wireless/core.h | 2 net/wireless/nl80211.c | 7 net/wireless/util.c | 39 +++ samples/vfio-mdev/mdpy-fb.c | 13 - sound/core/timer.c | 3 sound/pci/hda/patch_realtek.c | 1 sound/usb/mixer_quirks.c | 2 86 files changed, 925 insertions(+), 294 deletions(-)
Ahelenia Ziemiańska (1):
HID: multitouch: require Finger field to mark Win8 reports as MT
Anand Jain (1):
btrfs: fix unmountable seed device after fstrim
Anant Thazhemadam (1):
nl80211: validate key indexes for cfg80211_registered_device
Ariel Levkovich (1):
net/sched: act_ct: Fix ct template allocation for zone 0
Armin Wolf (1):
hwmon: (dell-smm-hwmon) Fix index values
Arnd Bergmann (1):
HID: i2c-hid: fix format string mismatch
Brett Creeley (1):
ice: Fix VFR issues for AVF drivers that expect ATQLEN cleared
Carlos M (1):
ALSA: hda: Fix for mute key LED for HP Pavilion 15-CK0xx
Coco Li (1):
ipv6: Fix KASAN: slab-out-of-bounds Read in fib6_nh_flush_exceptions
Dave Ertman (1):
ice: Allow all LLDP packets from PF to Tx
David Ahern (1):
neighbour: allow NUD_NOARP entries to be forced GCed
Erik Kaneda (1):
ACPICA: Clean up context mutex during object deletion
Fabio Estevam (2):
ARM: dts: imx7d-meerkat96: Fix the 'tuning-step' property
ARM: dts: imx7d-pico: Fix the 'tuning-step' property
Florian Westphal (1):
netfilter: conntrack: unregister ipv4 sockopts on error unwind
Gao Xiang (1):
lib/lz4: explicitly support in-place decompression
Geert Uytterhoeven (1):
ARM: dts: imx: emcon-avari: Fix nxp,pca8574 #gpio-cells
Grant Grundler (1):
net: usb: cdc_ncm: don't spew notifications
Greg Kroah-Hartman (1):
Linux 5.4.125
Heiner Kallweit (1):
efi: Allow EFI_MEMORY_XP and EFI_MEMORY_RO both to be cleared
Hoang Le (2):
tipc: add extack messages for bearer/media failure
tipc: fix unique bearer names sanity check
Jan Beulich (1):
xen-pciback: redo VF placement in the virtual topology
Johan Hovold (1):
HID: magicmouse: fix NULL-deref on disconnect
Johnny Chuang (1):
HID: i2c-hid: Skip ELAN power-on command after reset
Josef Bacik (5):
btrfs: tree-checker: do not error out if extent ref hash doesn't match
btrfs: mark ordered extent and inode with error if we fail to finish
btrfs: fix error handling in btrfs_del_csums
btrfs: return errors from btrfs_del_csums in cleanup_ref_head
btrfs: fixup error handling in fixup_inode_link_counts
Julian Anastasov (1):
ipvs: ignore IP_VS_SVC_F_HASHED flag when adding service
Junxiao Bi (1):
ocfs2: fix data corruption by fallocate
Krzysztof Kozlowski (1):
nfc: fix NULL ptr dereference in llcp_sock_getname() after failed connect
Lin Ma (2):
Bluetooth: fix the erroneous flush_work() order
Bluetooth: use correct lock to prevent UAF of hdev object
Luben Tuikov (1):
drm/amdgpu: Don't query CE and UE errors
Lucas Stach (1):
arm64: dts: zii-ultra: fix 12V_MAIN voltage
Magnus Karlsson (3):
ixgbevf: add correct exception tracing for XDP
i40e: optimize for XDP_REDIRECT in xsk path
i40e: add correct exception tracing for XDP
Marc Zyngier (1):
KVM: arm64: Fix debug register indexing
Marek Vasut (1):
ARM: dts: imx6q-dhcom: Add PU,VDD1P1,VDD2P5 regulators
Mark Rutland (1):
pid: take a reference when initializing cad_pid
Matthew Wilcox (Oracle) (4):
mm: add thp_order
XArray: add xa_get_order
XArray: add xas_split
mm/filemap: fix storing to a THP shadow entry
Max Gurtovoy (1):
vfio/platform: fix module_put call in error flow
Michael Chan (1):
bnxt_en: Remove the setting of dev_port.
Michael Walle (1):
arm64: dts: ls1028a: fix memory node
Michal Vokáč (1):
ARM: dts: imx6dl-yapp4: Fix RGMII connection to QCA8334 switch
Mina Almasry (1):
mm, hugetlb: fix simple resv_huge_pages underflow on UFFDIO_COPY
Mitch Williams (1):
ice: write register with correct offset
Nirmoy Das (1):
drm/amdgpu: make sure we unpin the UVD BO
Pablo Neira Ayuso (2):
netfilter: nft_ct: skip expectations for confirmed conntrack
netfilter: nfnetlink_cthelper: hit EBUSY on updates if size mismatches
Pavel Skripkin (4):
net: caif: added cfserl_release function
net: caif: add proper error handling
net: caif: fix memory leak in caif_device_notify
net: caif: fix memory leak in cfusbl_device_notify
Phil Elwell (1):
usb: dwc2: Fix build in periphal-only mode
Pierre-Louis Bossart (1):
ALSA: usb: update old-style static const declaration
Randy Dunlap (1):
vfio/pci: zap_vma_ptes() needs MMU
Rasmus Villemoes (1):
efi: cper: fix snprintf() use in cper_dimm_err_location()
Roja Rani Yarubandi (2):
i2c: qcom-geni: Add shutdown callback for i2c
i2c: qcom-geni: Suspend and resume the bus during SYSTEM_SLEEP_PM ops
Sean Christopherson (1):
KVM: SVM: Truncate GPR value for DR and CR accesses in !64-bit mode
Takashi Iwai (1):
ALSA: timer: Fix master timer notification
Thomas Gleixner (1):
x86/apic: Mark _all_ legacy interrupts when IO/APIC is missing
Tony Lindgren (1):
bus: ti-sysc: Fix flakey idling of uarts and stop using swsup_sidle_act
Vitaly Kuznetsov (3):
x86/kvm: Teardown PV features on boot CPU as well x86/kvm: Disable kvmclock on all CPUs on shutdown x86/kvm: Disable all PV features on crash
Wei Yongjun (2):
samples: vfio-mdev: fix error handing in mdpy_fb_probe()
ieee802154: fix error return code in ieee802154_llsec_getparams()
Ye Bin (1):
ext4: fix bug on in ext4_es_cache_extent as ext4_split_extent_at failed
Zhen Lei (3):
vfio/pci: Fix error return code in vfio_ecap_init()
HID: pidff: fix error return code in hid_pidff_init()
ieee802154: fix error return code in ieee802154_add_iface()
Greg Kroah-Hartman
maintainerDocumentation/core-api/xarray.rst +9 -7
@@ -461,13 +461,15 @@ or iterations will move the index to the first index in the range. Each entry will only be returned once, no matter how many indices it occupies. -Using xas_next() or xas_prev() with a multi-index xa_state -is not supported. Using either of these functions on a multi-index entry -will reveal sibling entries; these should be skipped over by the caller. - -Storing ``NULL`` into any index of a multi-index entry will set the entry -at every index to ``NULL`` and dissolve the tie. Splitting a multi-index -entry into entries occupying smaller ranges is not yet supported. +Using xas_next() or xas_prev() with a multi-index xa_state is not +supported. Using either of these functions on a multi-index entry will +reveal sibling entries; these should be skipped over by the caller. + +Storing ``NULL`` into any index of a multi-index entry will set the +entry at every index to ``NULL`` and dissolve the tie. A multi-index +entry can be split into entries occupying smaller ranges by calling +xas_split_alloc() without the xa_lock held, followed by taking the lock +and calling xas_split(). Functions and structures ========================
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 124 +SUBLEVEL = 125 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/boot/dts/imx6dl-yapp4-common.dtsi +5 -1
@@ -99,9 +99,13 @@ phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>; phy-reset-duration = <20>; phy-supply = <&sw2_reg>; - phy-handle = <ðphy0>; status = "okay"; + fixed-link { + speed = <1000>; + full-duplex; + }; + mdio { #address-cells = <1>; #size-cells = <0>;
arch/arm/boot/dts/imx6q-dhcom-som.dtsi +12 -0
@@ -408,6 +408,18 @@ vin-supply = <&sw1_reg>; }; +®_pu { + vin-supply = <&sw1_reg>; +}; + +®_vdd1p1 { + vin-supply = <&sw2_reg>; +}; + +®_vdd2p5 { + vin-supply = <&sw2_reg>; +}; + &uart1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart1>;
arch/arm/boot/dts/imx6qdl-emcon-avari.dtsi +1 -1
@@ -126,7 +126,7 @@ compatible = "nxp,pca8574"; reg = <0x3a>; gpio-controller; - #gpio-cells = <1>; + #gpio-cells = <2>; }; };
arch/arm/boot/dts/imx7d-meerkat96.dts +1 -1
@@ -193,7 +193,7 @@ pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usdhc1>; keep-power-in-suspend; - tuning-step = <2>; + fsl,tuning-step = <2>; vmmc-supply = <®_3p3v>; no-1-8-v; broken-cd;
arch/arm/boot/dts/imx7d-pico.dtsi +1 -1
@@ -307,7 +307,7 @@ pinctrl-2 = <&pinctrl_usdhc1_200mhz>; cd-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>; bus-width = <4>; - tuning-step = <2>; + fsl,tuning-step = <2>; vmmc-supply = <®_3p3v>; wakeup-source; no-1-8-v;
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi +2 -2
@@ -151,8 +151,8 @@ ddr: memory-controller@1080000 { compatible = "fsl,qoriq-memory-controller"; reg = <0x0 0x1080000 0x0 0x1000>; - interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>; - big-endian; + interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; + little-endian; }; dcfg: syscon@1e00000 {
arch/arm64/boot/dts/freescale/imx8mq-zii-ultra.dtsi +2 -2
@@ -45,8 +45,8 @@ reg_12p0_main: regulator-12p0-main { compatible = "regulator-fixed"; regulator-name = "12V_MAIN"; - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; + regulator-min-microvolt = <12000000>; + regulator-max-microvolt = <12000000>; regulator-always-on; };
arch/arm64/kvm/sys_regs.c +21 -21
162 lines not on this page · raw message
arch/x86/include/asm/apic.h +1 -0
@@ -174,6 +174,7 @@ static inline int apic_is_clustered_box(void)extern int setup_APIC_eilvt (u8 lvt_off,u8 vector,u8 msg_type,u8 mask);extern void lapic_assign_system_vectors (void );extern void lapic_assign_legacy_vector (unsigned int isairq,bool replace); +extern void lapic_update_legacy_vectors (void );extern void lapic_online (void );extern void lapic_offline (void );extern bool apic_needs_pit (void );
arch/x86/include/asm/kvm_para.h +2 -8
@@ -6,8 +6,6 @@#include <asm/alternative.h> #include <uapi/asm/kvm_para.h> -extern void kvmclock_init (void ); -#ifdef CONFIG_KVM_GUEST bool kvm_check_and_clear_guest_paused (void );#else
@@ -85,13 +83,14 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1, }#ifdef CONFIG_KVM_GUEST +void kvmclock_init (void ); +void kvmclock_disable (void );bool kvm_para_available (void );unsigned int kvm_arch_para_features (void );unsigned int kvm_arch_para_hints (void );void kvm_async_pf_task_wait (u32 token,int interrupt_kernel);void kvm_async_pf_task_wake (u32 token);u32 kvm_read_and_reset_pf_reason (void ); -extern void kvm_disable_steal_time (void );void do_async_page_fault (struct pt_regs *regs,unsigned long error_code,unsigned long address);#ifdef CONFIG_PARAVIRT_SPINLOCKS
@@ -125,11 +124,6 @@ static inline u32 kvm_read_and_reset_pf_reason(void) {return 0 ; } - -static inline void kvm_disable_steal_time (void ) -{ -return ; -}#endif #endif /* _ASM_X86_KVM_PARA_H */
arch/x86/kernel/apic/apic.c +1 -0
@@ -2579,6 +2579,7 @@ static void __init apic_bsp_setup(bool upmode)end_local_APIC_setup ();irq_remap_enable_fault_handling ();setup_IO_APIC (); +lapic_update_legacy_vectors (); }#ifdef CONFIG_UP_LATE_INIT
arch/x86/kernel/apic/vector.c +20 -0
@@ -680,6 +680,26 @@ void lapic_assign_legacy_vector(unsigned int irq, bool replace)irq_matrix_assign_system (vector_matrix,ISA_IRQ_VECTOR (irq), replace); } +void __init lapic_update_legacy_vectors (void ) +{ +unsigned int i; + +if (IS_ENABLED (CONFIG_X86_IO_APIC ) && nr_ioapics >0 ) +return ; + +/* +* If the IO/APIC is disabled via config, kernel command line or +* lack of enumeration then all legacy interrupts are routed +* through the PIC. Make sure that they are marked as legacy +* vectors. PIC_CASCADE_IRQ has already been marked in +* lapic_assign_system_vectors(). +*/ +for (i =0 ; i <nr_legacy_irqs (); i++) { +if (i !=PIC_CASCADE_IR ) +lapic_assign_legacy_vector (i, true); + } +} +void __init lapic_assign_system_vectors (void ) {unsigned int i, vector =0 ;
arch/x86/kernel/kvm.c +69 -23
142 lines not on this page · raw message
arch/x86/kernel/kvmclock.c +1 -25
@@ -20,7 +20,6 @@#include <asm/hypervisor.h> #include <asm/mem_encrypt.h> #include <asm/x86_init.h> -#include <asm/reboot.h> #include <asm/kvmclock.h> static int kvmclock__initdata =1 ;
@@ -197,28 +196,9 @@ static void kvm_setup_secondary_clock(void) }#endif -/* -* After the clock is registered, the host will keep writing to the -* registered memory location. If the guest happens to shutdown, this memory -* won't be valid. In cases like kexec, in which you install a new kernel, this -* means a random memory location will be kept being written. So before any -* kind of shutdown from our side, we unregister the clock by writing anything -* that does not have the 'enable' bit set in the msr -*/ -#ifdef CONFIG_KEXEC_CORE -static void kvm_crash_shutdown (struct pt_regs *regs) -{ -native_write_msr (msr_kvm_system_time,0 ,0 ); -kvm_disable_steal_time (); -native_machine_crash_shutdown (regs); -} -#endif - -static void kvm_shutdown (void ) +void kvmclock_disable (void ) {native_write_msr (msr_kvm_system_time,0 ,0 ); -kvm_disable_steal_time (); -native_machine_shutdown (); }static void __init kvmclock_init_mem (void )
@@ -346,10 +326,6 @@ void __init kvmclock_init(void)#endif x86_platform.save_sched_clock_state = kvm_save_sched_clock_state; x86_platform.restore_sched_clock_state = kvm_restore_sched_clock_state; - machine_ops.shutdown = kvm_shutdown; -#ifdef CONFIG_KEXEC_CORE - machine_ops.crash_shutdown = kvm_crash_shutdown; -#endif kvm_get_preset_lpj ();/*
arch/x86/kvm/svm.c +4 -4
@@ -4057,7 +4057,7 @@ static int cr_interception(struct vcpu_svm *svm) err =0 ;if (cr >=16 ) {/* mov to cr */ cr -=16 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg);switch (cr) {case 0 :if (!check_selective_cr0_intercepted (svm, val))
@@ -4102,7 +4102,7 @@ static int cr_interception(struct vcpu_svm *svm)kvm_queue_exception (&svm->vcpu,UD_VECTOR );return 1 ; } -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val); }return kvm_complete_insn_gp (&svm->vcpu, err); }
@@ -4132,13 +4132,13 @@ static int dr_interception(struct vcpu_svm *svm)if (dr >=16 ) {/* mov to DRn */ if (!kvm_require_dr (&svm->vcpu, dr -16 ))return 1 ; - val =kvm_register_read (&svm->vcpu, reg); + val =kvm_register_readl (&svm->vcpu, reg);kvm_set_dr (&svm->vcpu, dr -16 , val); }else {if (!kvm_require_dr (&svm->vcpu, dr))return 1 ;kvm_get_dr (&svm->vcpu, dr, &val); -kvm_register_write (&svm->vcpu, reg, val); +kvm_register_writel (&svm->vcpu, reg, val); }return kvm_skip_emulated_instruction (&svm->vcpu);
drivers/acpi/acpica/utdelete.c +8 -0
@@ -285,6 +285,14 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object) }break ; +case ACPI_TYPE_LOCAL_ADDRESS_HANDLER : + +ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS , +"***** Address handler %p\n" , object)); + +acpi_os_delete_mutex (object->address_space.context_mutex); +break ; +default :break ;
drivers/bus/ti-sysc.c +2 -2
@@ -1376,9 +1376,9 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE),/* Uarts on omap4 and later */ SYSC_QUIRK ("uart" ,0 ,0x50 ,0x54 ,0x58 ,0x50411e03 ,0xffff00ff , -SYSC_QUIRK_SWSUP_SIDLE_ACT |SYSC_QUIRK_LEGACY_IDLE ), +SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_LEGACY_IDLE ),SYSC_QUIRK ("uart" ,0 ,0x50 ,0x54 ,0x58 ,0x47422e03 ,0xffffffff , -SYSC_QUIRK_SWSUP_SIDLE_ACT |SYSC_QUIRK_LEGACY_IDLE ), +SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_LEGACY_IDLE ),/* Quirks that need to be set based on the module address */ SYSC_QUIRK("mcpdm", 0x40132000, 0, 0x10, -ENODEV, 0x50000800, 0xffffffff,
drivers/firmware/efi/cper.c +1 -3
@@ -263,8 +263,7 @@ static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg)if (!msg || !(mem->validation_bits &CPER_MEM_VALID_MODULE_HANDLE ))return 0 ; - n =0 ; - len =CPER_REC_LEN -1 ; + len =CPER_REC_LEN ;dmi_memdev_name (mem->mem_dev_handle, &bank, &device);if (bank && device) n =snprintf (msg, len,"DIMM location: %s %s " , bank, device);
@@ -273,7 +272,6 @@ static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg)"DIMM location: not present. DMI handle: 0x%.4x " , mem->mem_dev_handle); - msg[n] ='\0' ;return n; }
drivers/firmware/efi/memattr.c +0 -5
@@ -66,11 +66,6 @@ static bool entry_is_valid(const efi_memory_desc_t *in, efi_memory_desc_t *out)return false; } -if (!(in->attribute & (EFI_MEMORY_RO |EFI_MEMORY_XP ))) { -pr_warn ("Entry attributes invalid: RO and XP bits both cleared\n" ); -return false; - } -if (PAGE_SIZE >EFI_PAGE_SIZE && (!PAGE_ALIGNED (in->phys_addr) || !PAGE_ALIGNED (in->num_pages <<EFI_PAGE_SHIFT ))) {
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c +0 -16
@@ -351,7 +351,6 @@ static int amdgpu_ctx_query2(struct amdgpu_device *adev, {struct amdgpu_ctx *ctx;struct amdgpu_ctx_mgr *mgr; -unsigned long ras_counter;if (!fpriv)return -EINVAL ;
@@ -376,21 +375,6 @@ static int amdgpu_ctx_query2(struct amdgpu_device *adev,if (atomic_read (&ctx->guilty)) out->state.flags |=AMDGPU_CTX_QUERY2_FLAGS_GUILTY ; -/*query ue count*/ - ras_counter =amdgpu_ras_query_error_count (adev, false); -/*ras counter is monotonic increasing*/ -if (ras_counter != ctx->ras_counter_ue) { - out->state.flags |=AMDGPU_CTX_QUERY2_FLAGS_RAS_UE ; - ctx->ras_counter_ue = ras_counter; - } - -/*query ce count*/ - ras_counter =amdgpu_ras_query_error_count (adev, true); -if (ras_counter != ctx->ras_counter_ce) { - out->state.flags |=AMDGPU_CTX_QUERY2_FLAGS_RAS_CE ; - ctx->ras_counter_ce = ras_counter; - } -mutex_unlock (&mgr->lock);return 0 ; }
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c +1 -0
@@ -354,6 +354,7 @@ static int uvd_v6_0_enc_ring_test_ib(struct amdgpu_ring *ring, long timeout) error:dma_fence_put (fence); +amdgpu_bo_unpin (bo);amdgpu_bo_unreserve (bo);amdgpu_bo_unref (&bo);return r;
drivers/hid/hid-magicmouse.c +1 -1
@@ -597,7 +597,7 @@ static int magicmouse_probe(struct hid_device *hdev,if (id->vendor ==USB_VENDOR_ID_APPLE && id->product ==USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 && hdev->type !=HID_TYPE_USBMOUSE ) -return 0 ; +return -ENODEV ; msc =devm_kzalloc (&hdev->dev,sizeof (*msc),GFP_KERNEL );if (msc ==NULL ) {
drivers/hid/hid-multitouch.c +7 -3
@@ -611,9 +611,13 @@ static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,if (!(HID_MAIN_ITEM_VARIABLE & field->flags))continue ; -for (n =0 ; n < field->report_count; n++) { -if (field->usage[n].hid ==HID_DG_CONTACTID ) - rdata->is_mt_collection = true; +if (field->logical ==HID_DG_FINGER || td->hdev->group !=HID_GROUP_MULTITOUCH_WIN_8 ) { +for (n =0 ; n < field->report_count; n++) { +if (field->usage[n].hid ==HID_DG_CONTACTID ) { + rdata->is_mt_collection = true; +break ; + } + } } }
drivers/hid/i2c-hid/i2c-hid-core.c +10 -3
@@ -50,6 +50,7 @@#define I2C_HID_QUIRK_BOGUS_IRQ BIT(4)#define I2C_HID_QUIRK_RESET_ON_RESUME BIT(5)#define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(6) +#define I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET BIT(7)/* flags */
@@ -185,6 +186,11 @@ static const struct i2c_hid_quirks { I2C_HID_QUIRK_RESET_ON_RESUME }, {USB_VENDOR_ID_ITE ,I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720 , I2C_HID_QUIRK_BAD_INPUT_SIZE }, +/* +* Sending the wakeup after reset actually break ELAN touchscreen controller +*/ + { USB_VENDOR_ID_ELAN, HID_ANY_ID, + I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET }, { 0, 0 } };
@@ -468,7 +474,8 @@ static int i2c_hid_hwreset(struct i2c_client *client) }/* At least some SIS devices need this after reset */ - ret =i2c_hid_set_power (client,I2C_HID_PWR_ON ); +if (!(ihid->quirks &I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET )) + ret =i2c_hid_set_power (client,I2C_HID_PWR_ON ); out_unlock:mutex_unlock (&ihid->reset_lock);
@@ -1114,8 +1121,8 @@ static int i2c_hid_probe(struct i2c_client *client, hid->vendor =le16_to_cpu (ihid->hdesc.wVendorID); hid->product =le16_to_cpu (ihid->hdesc.wProductID); -snprintf (hid->name,sizeof (hid->name),"%s %04hX:%04hX" , - client->name, hid->vendor, hid->product); +snprintf (hid->name,sizeof (hid->name),"%s %04X:%04X" , + client->name, (u16 )hid->vendor, (u16 )hid->product);strlcpy (hid->phys,dev_name (&client->dev),sizeof (hid->phys)); ihid->quirks =i2c_hid_lookup_quirk (hid->vendor, hid->product);
drivers/hid/usbhid/hid-pidff.c +1 -0
@@ -1292,6 +1292,7 @@ int hid_pidff_init(struct hid_device *hid)if (pidff->pool[PID_DEVICE_MANAGED_POOL ].value && pidff->pool[PID_DEVICE_MANAGED_POOL ].value[0 ] ==0 ) { + error = -EPERM ;hid_notice (hid,"device does not support device managed pool\n" ); goto fail;
drivers/hwmon/dell-smm-hwmon.c +2 -2
@@ -792,10 +792,10 @@ static struct attribute *i8k_attrs[] = {static umode_t i8k_is_visible (struct kobject *kobj,struct attribute *attr,int index) { -if (disallow_fan_support && index >=8 ) +if (disallow_fan_support && index >=20 )return 0 ;if (disallow_fan_type_call && - (index ==9 || index ==12 || index ==15 )) + (index ==21 || index ==25 || index ==28 ))return 0 ;if (index >=0 && index <=1 && !(i8k_hwmon_flags &I8K_HWMON_HAVE_TEMP1 ))
drivers/i2c/busses/i2c-qcom-geni.c +20 -1
@@ -641,6 +641,14 @@ static int geni_i2c_remove(struct platform_device *pdev)return 0 ; } +static void geni_i2c_shutdown (struct platform_device *pdev) +{ +struct geni_i2c_dev *gi2c =platform_get_drvdata (pdev); + +/* Make client i2c transfers start failing */ +i2c_mark_adapter_suspended (&gi2c->adap); +} +static int __maybe_unused geni_i2c_runtime_suspend (struct device *dev) {int ret;
@@ -677,6 +685,8 @@ static int __maybe_unused geni_i2c_suspend_noirq(struct device *dev) {struct geni_i2c_dev *gi2c =dev_get_drvdata (dev); +i2c_mark_adapter_suspended (&gi2c->adap); +if (!gi2c->suspended) {geni_i2c_runtime_suspend (dev);pm_runtime_disable (dev);
@@ -686,8 +696,16 @@ static int __maybe_unused geni_i2c_suspend_noirq(struct device *dev)return 0 ; } +static int __maybe_unused geni_i2c_resume_noirq (struct device *dev) +{ +struct geni_i2c_dev *gi2c =dev_get_drvdata (dev); + +i2c_mark_adapter_resumed (&gi2c->adap); +return 0 ; +} +static const struct dev_pm_ops geni_i2c_pm_ops = { - SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(geni_i2c_suspend_noirq, NULL) + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(geni_i2c_suspend_noirq, geni_i2c_resume_noirq)SET_RUNTIME_PM_OPS (geni_i2c_runtime_suspend, geni_i2c_runtime_resume,NULL ) };
@@ -701,6 +719,7 @@ MODULE_DEVICE_TABLE(of, geni_i2c_dt_match);static struct platform_driver geni_i2c_driver = { .probe = geni_i2c_probe, .remove = geni_i2c_remove, + .shutdown = geni_i2c_shutdown, .driver = { .name ="geni_i2c" , .pm = &geni_i2c_pm_ops,
drivers/net/ethernet/broadcom/bnxt/bnxt.c +0 -1
@@ -7003,7 +7003,6 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp) pf->fw_fid =le16_to_cpu (resp->fid); pf->port_id =le16_to_cpu (resp->port_id); - bp->dev->dev_port = pf->port_id;memcpy (pf->mac_addr, resp->mac_address,ETH_ALEN ); pf->first_vf_id =le16_to_cpu (resp->first_vf_id); pf->max_vfs =le16_to_cpu (resp->max_vfs);
drivers/net/ethernet/intel/i40e/i40e_txrx.c +6 -1
@@ -2233,15 +2233,20 @@ static struct sk_buff *i40e_run_xdp(struct i40e_ring *rx_ring,case XDP_TX : xdp_ring = rx_ring->vsi->xdp_rings[rx_ring->queue_index]; result =i40e_xmit_xdp_tx_ring (xdp, xdp_ring); +if (result ==I40E_XDP_CONSUMED ) + goto out_failure;break ;case XDP_REDIRECT : err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); - result = !err ?I40E_XDP_REDIR :I40E_XDP_CONSUMED ; +if (err) + goto out_failure; + result =I40E_XDP_REDIR ;break ;default :bpf_warn_invalid_xdp_action (act);/* fall through */ case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act);/* fall through -- handle aborts by dropping packet */ case XDP_DROP :
drivers/net/ethernet/intel/i40e/i40e_xsk.c +11 -4
@@ -212,21 +212,28 @@ static int i40e_run_xdp_zc(struct i40e_ring *rx_ring, struct xdp_buff *xdp) xdp->handle =xsk_umem_adjust_offset (umem, xdp->handle, offset); +if (likely (act ==XDP_REDIRECT )) { + err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); +if (err) + goto out_failure; +rcu_read_unlock (); +return I40E_XDP_REDIR ; + } +switch (act) {case XDP_PASS :break ;case XDP_TX : xdp_ring = rx_ring->vsi->xdp_rings[rx_ring->queue_index]; result =i40e_xmit_xdp_tx_ring (xdp, xdp_ring); -break ; -case XDP_REDIRECT : - err =xdp_do_redirect (rx_ring->netdev, xdp, xdp_prog); - result = !err ?I40E_XDP_REDIR :I40E_XDP_CONSUMED ; +if (result ==I40E_XDP_CONSUMED ) + goto out_failure;break ;default :bpf_warn_invalid_xdp_action (act);/* fall through */ case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act);/* fallthrough -- handle aborts by dropping packet */ case XDP_DROP :
drivers/net/ethernet/intel/ice/ice_hw_autogen.h +1 -0
@@ -34,6 +34,7 @@#define PF_FW_ATQLEN_ATQOVFL_M BIT(29)#define PF_FW_ATQLEN_ATQCRIT_M BIT(30)#define VF_MBX_ARQLEN (_VF) (0x0022BC00 + ((_VF) * 4)) +#define VF_MBX_ATQLEN (_VF) (0x0022A800 + ((_VF) * 4))#define PF_FW_ATQLEN_ATQENABLE_M BIT(31)#define PF_FW_ATQT 0x00080400#define PF_MBX_ARQBAH 0x0022E400
drivers/net/ethernet/intel/ice/ice_txrx.c +4 -1
@@ -2109,6 +2109,7 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_ring *tx_ring)struct ice_tx_offload_params offload = {0 };struct ice_vsi *vsi = tx_ring->vsi;struct ice_tx_buf *first; +struct ethhdr *eth;unsigned int count;int tso, csum;
@@ -2156,7 +2157,9 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_ring *tx_ring) goto out_drop;/* allow CONTROL frames egress from main VSI if FW LLDP disabled */ -if (unlikely (skb->priority ==TC_PRIO_CONTROL && + eth = (struct ethhdr *)skb_mac_header (skb); +if (unlikely ((skb->priority ==TC_PRIO_CONTROL || + eth->h_proto ==htons (ETH_P_LLDP )) && vsi->type ==ICE_VSI_PF && vsi->port_info->is_sw_lldp)) offload.cd_qw1 |= (u64)(ICE_TX_DESC_DTYPE_CTX |
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c +8 -6
@@ -384,13 +384,15 @@ static void ice_trigger_vf_reset(struct ice_vf *vf, bool is_vflr, bool is_pfr)*/ clear_bit (ICE_VF_STATE_INIT , vf->vf_states); -/* VF_MBX_ARQLEN is cleared by PFR, so the driver needs to clear it -* in the case of VFR. If this is done for PFR, it can mess up VF -* resets because the VF driver may already have started cleanup -* by the time we get here. +/* VF_MBX_ARQLEN and VF_MBX_ATQLEN are cleared by PFR, so the driver +* needs to clear them in the case of VFR/VFLR. If this is done for +* PFR, it can mess up VF resets because the VF driver may already +* have started cleanup by the time we get here. */ -if (!is_pfr) -wr32 (hw,VF_MBX_ARQLEN (vf_abs_id),0 ); +if (!is_pfr) { +wr32 (hw,VF_MBX_ARQLEN (vf->vf_id),0 ); +wr32 (hw,VF_MBX_ATQLEN (vf->vf_id),0 ); + }/* In the case of a VFLR, the HW has already reset the VF and we * just need to clean up, so don't hit the VFRTRIG register.
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +3 -0
@@ -1079,11 +1079,14 @@ static struct sk_buff *ixgbevf_run_xdp(struct ixgbevf_adapter *adapter,case XDP_TX : xdp_ring = adapter->xdp_ring[rx_ring->queue_index]; result =ixgbevf_xmit_xdp_ring (xdp_ring, xdp); +if (result ==IXGBEVF_XDP_CONSUMED ) + goto out_failure;break ;default :bpf_warn_invalid_xdp_action (act);/* fallthrough */ case XDP_ABORTED : +out_failure:trace_xdp_exception (rx_ring->netdev, xdp_prog, act);/* fallthrough -- handle aborts by dropping packet */ case XDP_DROP :
drivers/net/usb/cdc_ncm.c +11 -1
@@ -1589,6 +1589,15 @@ cdc_ncm_speed_change(struct usbnet *dev,uint32_t rx_speed =le32_to_cpu (data->DLBitRRate);uint32_t tx_speed =le32_to_cpu (data->ULBitRate); +/* if the speed hasn't changed, don't report it. +* RTL8156 shipped before 2021 sends notification about every 32ms. +*/ +if (dev->rx_speed == rx_speed && dev->tx_speed == tx_speed) +return ; + + dev->rx_speed = rx_speed; + dev->tx_speed = tx_speed; +/* * Currently the USB-NET API does not support reporting the actual * device speed. Do print it instead.
@@ -1629,7 +1638,8 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)* USB_CDC_NOTIFY_NETWORK_CONNECTION notification shall be * sent by device after USB_CDC_NOTIFY_SPEED_CHANGE. */ -usbnet_link_change (dev, !!event->wValue,0 ); +if (netif_carrier_ok (dev->net) != !!event->wValue) +usbnet_link_change (dev, !!event->wValue,0 );break ;case USB_CDC_NOTIFY_SPEED_CHANGE :
drivers/usb/dwc2/core_intr.c +4 -0
@@ -712,7 +712,11 @@ static inline void dwc_handle_gpwrdn_disc_det(struct dwc2_hsotg *hsotg,dwc2_writel (hsotg, gpwrdn_tmp,GPWRDN ); hsotg->hibernated =0 ; + +#if IS_ENABLED (CONFIG_USB_DWC2_HOST ) || \ +IS_ENABLED (CONFIG_USB_DWC2_DUAL_ROLE ) hsotg->bus_suspended =0 ; +#endif if (gpwrdn &GPWRDN_IDSTS ) { hsotg->op_state =OTG_STATE_B_PERIPHERAL ;
drivers/vfio/pci/Kconfig +1 -0
@@ -2,6 +2,7 @@ config VFIO_PCI tristate "VFIO support for PCI devices" depends on VFIO && PCI && EVENTFD + depends on MMU select VFIO_VIRQFD select IRQ_BYPASS_MANAGER help
drivers/vfio/pci/vfio_pci_config.c +1 -1
@@ -1576,7 +1576,7 @@ static int vfio_ecap_init(struct vfio_pci_device *vdev)if (len ==0xFF ) { len =vfio_ext_cap_len (vdev, ecap, epos);if (len <0 ) -return ret; +return len; } }
drivers/vfio/platform/vfio_platform_common.c +1 -1
@@ -289,7 +289,7 @@ static int vfio_platform_open(void *device_data)vfio_platform_regions_cleanup (vdev); err_reg:mutex_unlock (&driver_lock); -module_put (THIS_MODULE ); +module_put (vdev->parent_module);return ret; }
drivers/xen/xen-pciback/vpci.c +8 -6
@@ -69,7 +69,7 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, struct pci_dev *dev, int devid, publish_pci_dev_cb publish_cb) { - int err = 0, slot, func = -1; + int err = 0, slot, func = PCI_FUNC(dev->devfn);struct pci_dev_entry *t, *dev_entry;struct vpci_dev_data *vpci_dev = pdev->pci_dev_data;
@@ -94,23 +94,26 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev,/* * Keep multi-function devices together on the virtual PCI bus, except -* virtual functions. +* that we want to keep virtual functions at func 0 on their own. They +* aren't multi-function devices and hence their presence at func 0 +* may cause guests to not scan the other functions. */ -if (!dev->is_virtfn) { +if (!dev->is_virtfn || func) {for (slot =0 ; slot <PCI_SLOT_MAX ; slot++) {if (list_empty (&vpci_dev->dev_list[slot]))continue ; t =list_entry (list_first (&vpci_dev->dev_list[slot]), struct pci_dev_entry, list); +if (t->dev->is_virtfn && !PCI_FUNC (t->dev->devfn)) +continue ;if (match_slot (dev, t->dev)) {pr_info ("vpci: %s: assign to virtual slot %d func %d\n" ,pci_name (dev), slot, -PCI_FUNC (dev->devfn)); + func);list_add_tail (&dev_entry->list, &vpci_dev->dev_list[slot]); - func =PCI_FUNC (dev->devfn); goto unlock; } }
@@ -123,7 +126,6 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, pci_name(dev), slot);list_add_tail (&dev_entry->list, &vpci_dev->dev_list[slot]); - func = dev->is_virtfn ?0 :PCI_FUNC (dev->devfn); goto unlock; } }
fs/btrfs/extent-tree.c +8 -4
@@ -1338,16 +1338,20 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,for (i =0 ; i < bbio->num_stripes; i++, stripe++) {u64 bytes;struct request_queue *req_q; +struct btrfs_device *device = stripe->dev; -if (!stripe->dev->bdev) { +if (!device->bdev) {ASSERT (btrfs_test_opt (fs_info,DEGRADED ));continue ; } - req_q =bdev_get_queue (stripe->dev->bdev); + req_q =bdev_get_queue (device->bdev);if (!blk_queue_discard (req_q))continue ; - ret =btrfs_issue_discard (stripe->dev->bdev, +if (!test_bit (BTRFS_DEV_STATE_WRITEABLE , &device->dev_state)) +continue ; + + ret =btrfs_issue_discard (device->bdev, stripe->physical, stripe->length, &bytes);
@@ -1879,7 +1883,7 @@ static int cleanup_ref_head(struct btrfs_trans_handle *trans,trace_run_delayed_ref_head (fs_info, head,0 );btrfs_delayed_ref_unlock (head);btrfs_put_delayed_ref_head (head); -return 0 ; +return ret; } static struct btrfs_delayed_ref_head *btrfs_obtain_ref_head(
fs/btrfs/file-item.c +5 -5
@@ -599,7 +599,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans,u64 end_byte = bytenr + len;u64 csum_end;struct extent_buffer *leaf; -int ret; +int ret =0 ;u16 csum_size =btrfs_super_csum_size (fs_info->super_copy);int blocksize_bits = fs_info->sb->s_blocksize_bits;
@@ -618,6 +618,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, path->leave_spinning =1 ; ret =btrfs_search_slot (trans, root, &key, path,-1 ,1 );if (ret >0 ) { + ret =0 ;if (path->slots[0 ] ==0 )break ; path->slots[0 ]--;
@@ -674,7 +675,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, ret =btrfs_del_items (trans, root, path, path->slots[0 ], del_nr);if (ret) - goto out; +break ;if (key.offset == bytenr)break ; }else if (key.offset < bytenr && csum_end > end_byte) {
@@ -718,8 +719,9 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, ret =btrfs_split_item (trans, root, path, &key, offset);if (ret && ret != -EAGAIN ) {btrfs_abort_transaction (trans, ret); - goto out; +break ; } + ret =0 ; key.offset = end_byte -1 ; }else {
@@ -729,8 +731,6 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, }btrfs_release_path (path); } - ret =0 ; -out:btrfs_free_path (path);return ret; }
fs/btrfs/inode.c +12 -0
@@ -3359,6 +3359,18 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent)if (ret || truncated) {u64 start, end; +/* +* If we failed to finish this ordered extent for any reason we +* need to make sure BTRFS_ORDERED_IOERR is set on the ordered +* extent, and mark the inode with the error if it wasn't +* already set. Any error during writeback would have already +* set the mapping error, so we need to set it if we're the ones +* marking this ordered extent as failed. +*/ +if (ret && !test_and_set_bit (BTRFS_ORDERED_IOERR , + &ordered_extent->flags)) +mapping_set_error (ordered_extent->inode->i_mapping, -EIO ); +if (truncated) start = ordered_extent->file_offset + logical_len;else
fs/btrfs/tree-checker.c +4 -12
@@ -1285,22 +1285,14 @@ static int check_extent_data_ref(struct extent_buffer *leaf,return -EUCLEAN ; }for (; ptr < end; ptr +=sizeof (*dref)) { -u64 root_objectid; -u64 owner;u64 offset; -u64 hash; +/* +* We cannot check the extent_data_ref hash due to possible +* overflow from the leaf due to hash collisions. +*/ dref = (struct btrfs_extent_data_ref *)ptr; - root_objectid =btrfs_extent_data_ref_root (leaf, dref); - owner =btrfs_extent_data_ref_objectid (leaf, dref); offset =btrfs_extent_data_ref_offset (leaf, dref); - hash =hash_extent_data_ref (root_objectid, owner, offset); -if (hash != key->offset) { -extent_err (leaf, slot, -"invalid extent data ref hash, item has 0x%016llx key has 0x%016llx" , - hash, key->offset); -return -EUCLEAN ; - }if (!IS_ALIGNED (offset, leaf->fs_info->sectorsize)) { extent_err(leaf, slot, "invalid extent data backref offset, have %llu expect aligned to %u",
fs/btrfs/tree-log.c +7 -6
@@ -1775,6 +1775,7 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,break ;if (ret ==1 ) { + ret =0 ;if (path->slots[0 ] ==0 )break ; path->slots[0 ]--;
@@ -1787,17 +1788,19 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans, ret =btrfs_del_item (trans, root, path);if (ret) - goto out; +break ;btrfs_release_path (path); inode =read_one_inode (root, key.offset); -if (!inode) -return -EIO ; +if (!inode) { + ret = -EIO ; +break ; + } ret =fixup_inode_link_count (trans, root, inode);iput (inode);if (ret) - goto out; +break ;/* * fixup on a directory may create new entries,
@@ -1806,8 +1809,6 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,*/ key.offset = (u64)-1 ; } - ret =0 ; -out:btrfs_release_path (path);return ret; }
fs/ext4/extents.c +23 -20
60 lines not on this page · raw message
fs/ocfs2/file.c +50 -5
91 lines not on this page · raw message
include/linux/huge_mm.h +19 -0
@@ -231,6 +231,19 @@ static inline spinlock_t *pud_trans_huge_lock(pud_t *pud,else return NULL ; } + +/** +* thp_order - Order of a transparent huge page. +* @page: Head page of a transparent huge page. +*/ +static inline unsigned int thp_order (struct page *page) +{ +VM_BUG_ON_PGFLAGS (PageTail (page), page); +if (PageHead (page)) +return HPAGE_PMD_ORDER ; +return 0 ; +} +static inline int hpage_nr_pages (struct page *page) {if (unlikely (PageTransHuge (page)))
@@ -290,6 +303,12 @@ static inline struct list_head *page_deferred_list(struct page *page)#define HPAGE_PUD_MASK ({ BUILD_BUG(); 0; })#define HPAGE_PUD_SIZE ({ BUILD_BUG(); 0; }) +static inline unsigned int thp_order (struct page *page) +{ +VM_BUG_ON_PGFLAGS (PageTail (page), page); +return 0 ; +} +#define hpage_nr_pages (x) 1static inline bool __transparent_hugepage_enabled (struct vm_area_struct *vma)
include/linux/usb/usbnet.h +2 -0
@@ -83,6 +83,8 @@ struct usbnet {# define EVENT_LINK_CHANGE 11# define EVENT_SET_RX_MODE 12# define EVENT_NO_IP_ALIGN 13 +u32 rx_speed;/* in bps - NOT Mbps */ +u32 tx_speed;/* in bps - NOT Mbps */ };static inline struct usb_driver *driver_of (struct usb_interface *intf)
include/linux/xarray.h +22 -0
@@ -1470,6 +1470,28 @@ void xas_pause(struct xa_state *);void xas_create_range (struct xa_state *); +#ifdef CONFIG_XARRAY_MULTI +int xa_get_order (struct xarray *,unsigned long index); +void xas_split (struct xa_state *,void *entry,unsigned int order); +void xas_split_alloc (struct xa_state *,void *entry,unsigned int order,gfp_t ); +#else +static inline int xa_get_order (struct xarray *xa,unsigned long index) +{ +return 0 ; +} + +static inline void xas_split (struct xa_state *xas,void *entry, +unsigned int order) +{ +xas_store (xas, entry); +} + +static inline void xas_split_alloc (struct xa_state *xas,void *entry, +unsigned int order,gfp_t gfp) +{ +} +#endif +/** * xas_reload() - Refetch an entry from the xarray. * @xas: XArray operation state.
include/net/caif/caif_dev.h +1 -1
@@ -119,7 +119,7 @@ void caif_free_client(struct cflayer *adap_layer);* The link_support layer is used to add any Link Layer specific * framing. */ -void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, +int caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, struct cflayer *link_support, int head_room, struct cflayer **layer, int (**rcv_func)( struct sk_buff *, struct net_device *,
include/net/caif/cfcnfg.h +1 -1
@@ -62,7 +62,7 @@ void cfcnfg_remove(struct cfcnfg *cfg);* @fcs: Specify if checksum is used in CAIF Framing Layer. * @head_room: Head space needed by link specific protocol. */ -void +int cfcnfg_add_phy_layer(struct cfcnfg *cnfg, struct net_device *dev, struct cflayer *phy_layer, enum cfcnfg_phy_preference pref,
include/net/caif/cfserl.h +1 -0
@@ -9,4 +9,5 @@#include <net/caif/caif_layer.h> struct cflayer *cfserl_create (int instance,bool use_stx); +void cfserl_release (struct cflayer *layer);#endif
init/main.c +1 -1
@@ -1174,7 +1174,7 @@ static noinline void __init kernel_init_freeable(void)*/ set_mems_allowed (node_states[N_MEMORY ]); - cad_pid =task_pid (current); + cad_pid =get_pid (task_pid (current));smp_prepare_cpus (setup_max_cpus);
lib/lz4/lz4_decompress.c +5 -1
@@ -260,7 +260,11 @@ static FORCE_INLINE int LZ4_decompress_generic( } } -memcpy (op, ip, length); +/* +* supports overlapping memory regions; only matters +* for in-place decompression scenarios +*/ +LZ4_memmove (op, ip, length); ip += length; op += length;
lib/lz4/lz4defs.h +2 -0
@@ -137,6 +137,8 @@ static FORCE_INLINE void LZ4_writeLE16(void *memPtr, U16 value)return put_unaligned_le16 (value, memPtr); } +#define LZ4_memmove (dst, src, size) __builtin_memmove(dst, src, size) + static FORCE_INLINE void LZ4_copy8(void *dst, const void *src) {#if LZ4_ARCH64
lib/test_xarray.c +65 -0
89 lines not on this page · raw message
lib/xarray.c +199 -9
257 lines not on this page · raw message
mm/filemap.c +28 -9
@@ -856,7 +856,6 @@ noinline int __add_to_page_cache_locked(struct page *page,int huge =PageHuge (page);struct mem_cgroup *memcg;int error; -void *old;VM_BUG_ON_PAGE (!PageLocked (page), page);VM_BUG_ON_PAGE (PageSwapBacked (page), page);
@@ -872,21 +871,41 @@ noinline int __add_to_page_cache_locked(struct page *page,get_page (page); page->mapping = mapping; page->index = offset; + gfp_mask &=GFP_RECLAIM_MASK ; do { + unsigned int order = xa_get_order(xas.xa, xas.xa_index); + void *entry, *old = NULL; + + if (order > thp_order(page)) + xas_split_alloc(&xas, xa_load(xas.xa, xas.xa_index), + order, gfp_mask); xas_lock_irq(&xas); - old = xas_load(&xas); - if (old && !xa_is_value(old)) - xas_set_err(&xas, -EEXIST); + xas_for_each_conflict(&xas, entry) { + old = entry; + if (!xa_is_value(entry)) { + xas_set_err(&xas, -EEXIST); + goto unlock; + } + } + + if (old) { + if (shadowp) + *shadowp = old; + /* entry may have been split before we acquired lock */ + order = xa_get_order(xas.xa, xas.xa_index); + if (order > thp_order(page)) { + xas_split(&xas, old, order); + xas_reset(&xas); + } + } + xas_store(&xas, page); if (xas_error(&xas)) goto unlock; - if (xa_is_value(old)) { + if (old) mapping->nrexceptional--; - if (shadowp) - *shadowp = old; - } mapping->nrpages++; /* hugetlb pages do not participate in page cache accounting */
@@ -894,7 +913,7 @@ noinline int __add_to_page_cache_locked(struct page *page,__inc_node_page_state (page,NR_FILE_PAGES ); unlock:xas_unlock_irq (&xas); - }while (xas_nomem (&xas, gfp_mask &GFP_RECLAIM_MASK )); + }while (xas_nomem (&xas, gfp_mask));if (xas_error (&xas)) goto error;
mm/hugetlb.c +12 -2
@@ -4338,10 +4338,20 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,struct page *page;if (!*pagep) { - ret = -ENOMEM ; +/* If a page already exists, then it's UFFDIO_COPY for +* a non-missing case. Return -EEXIST. +*/ +if (vm_shared && +hugetlbfs_pagecache_present (h, dst_vma, dst_addr)) { + ret = -EEXIST ; + goto out; + } + page =alloc_huge_page (dst_vma, dst_addr,0 ); -if (IS_ERR (page)) +if (IS_ERR (page)) { + ret = -ENOMEM ; goto out; + } ret = copy_huge_page_from_user(page, (const void __user *) src_addr,
net/bluetooth/hci_core.c +6 -1
@@ -1561,8 +1561,13 @@ static int hci_dev_do_open(struct hci_dev *hdev) }else {/* Init failed, cleanup */ flush_work (&hdev->tx_work); -flush_work (&hdev->cmd_work); + +/* Since hci_rx_work() is possible to awake new cmd_work +* it should be flushed first to avoid unexpected call of +* hci_cmd_work() +*/ flush_work (&hdev->rx_work); +flush_work (&hdev->cmd_work);skb_queue_purge (&hdev->cmd_q);skb_queue_purge (&hdev->rx_q);
net/bluetooth/hci_sock.c +2 -2
@@ -755,7 +755,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event)/* Detach sockets from device */ read_lock (&hci_sk_list.lock);sk_for_each (sk, &hci_sk_list.head) { -bh_lock_sock_nested (sk); +lock_sock (sk);if (hci_pi (sk)->hdev == hdev) {hci_pi (sk)->hdev =NULL ; sk->sk_err =EPIPE ;
@@ -764,7 +764,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event)hci_dev_put (hdev); } -bh_unlock_sock (sk); +release_sock (sk); }read_unlock (&hci_sk_list.lock); }
net/caif/caif_dev.c +9 -4
@@ -307,7 +307,7 @@ static void dev_flowctrl(struct net_device *dev, int on)caifd_put (caifd); } -void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, +int caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, struct cflayer *link_support, int head_room, struct cflayer **layer, int (**rcv_func)(struct sk_buff *, struct net_device *,
@@ -318,11 +318,12 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev,enum cfcnfg_phy_preference pref;struct cfcnfg *cfg =get_cfcnfg (dev_net (dev));struct caif_device_entry_list *caifdevs; +int res; caifdevs =caif_device_list (dev_net (dev)); caifd =caif_device_alloc (dev);if (!caifd) -return ; +return -ENOMEM ; *layer = &caifd->layer;spin_lock_init (&caifd->flow_lock);
@@ -343,7 +344,7 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev,strlcpy (caifd->layer.name, dev->name,sizeof (caifd->layer.name)); caifd->layer.transmit = transmit; - cfcnfg_add_phy_layer(cfg, + res = cfcnfg_add_phy_layer(cfg, dev, &caifd->layer, pref,
@@ -353,6 +354,7 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev,mutex_unlock (&caifdevs->lock);if (rcv_func) *rcv_func = receive; +return res; }EXPORT_SYMBOL (caif_enroll_dev);
@@ -367,6 +369,7 @@ static int caif_device_notify(struct notifier_block *me, unsigned long what,struct cflayer *layer, *link_support;int head_room =0 ;struct caif_device_entry_list *caifdevs; +int res; cfg =get_cfcnfg (dev_net (dev)); caifdevs =caif_device_list (dev_net (dev));
@@ -392,8 +395,10 @@ static int caif_device_notify(struct notifier_block *me, unsigned long what,break ; } } -caif_enroll_dev (dev, caifdev, link_support, head_room, + res =caif_enroll_dev (dev, caifdev, link_support, head_room, &layer,NULL ); +if (res) +cfserl_release (link_support); caifdev->flowctrl = dev_flowctrl;break ;
net/caif/caif_usb.c +13 -1
@@ -115,6 +115,11 @@ static struct cflayer *cfusbl_create(int phyid, u8 ethaddr[ETH_ALEN],return (struct cflayer *) this; } +static void cfusbl_release (struct cflayer *layer) +{ +kfree (layer); +} +static struct packet_type caif_usb_type__read_mostly = { .type =cpu_to_be16 (ETH_P_802_EX1 ), };
@@ -127,6 +132,7 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what,struct cflayer *layer, *link_support;struct usbnet *usbnet;struct usb_device *usbdev; +int res;/* Check whether we have a NCM device, and find its VID/PID. */ if (!(dev->dev.parent && dev->dev.parent->driver &&
@@ -169,8 +175,11 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what,if (dev->num_tx_queues >1 )pr_warn ("USB device uses more than one tx queue\n" ); -caif_enroll_dev (dev, &common, link_support,CFUSB_MAX_HEADLEN , + res =caif_enroll_dev (dev, &common, link_support,CFUSB_MAX_HEADLEN , &layer, &caif_usb_type.func); +if (res) + goto err; +if (!pack_added)dev_add_pack (&caif_usb_type); pack_added = true;
@@ -178,6 +187,9 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what,strlcpy (layer->name, dev->name,sizeof (layer->name));return 0 ; +err: +cfusbl_release (link_support); +return res; }static struct notifier_block caif_device_notifier = {
net/caif/cfcnfg.c +11 -5
@@ -450,7 +450,7 @@ cfcnfg_linkup_rsp(struct cflayer *layer, u8 channel_id, enum cfctrl_srv serv,rcu_read_unlock (); } -void +int cfcnfg_add_phy_layer(struct cfcnfg *cnfg, struct net_device *dev, struct cflayer *phy_layer, enum cfcnfg_phy_preference pref,
@@ -459,7 +459,7 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg, {struct cflayer *frml;struct cfcnfg_phyinfo *phyinfo =NULL ; -int i; +int i, res =0 ;u8 phyid;mutex_lock (&cnfg->lock);
@@ -473,12 +473,15 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg, goto got_phyid; }pr_warn ("Too many CAIF Link Layers (max 6)\n" ); + res = -EEXIST ; goto out; got_phyid: phyinfo =kzalloc (sizeof (struct cfcnfg_phyinfo ),GFP_ATOMIC ); -if (!phyinfo) +if (!phyinfo) { + res = -ENOMEM ; goto out_err; + } phy_layer->id = phyid; phyinfo->pref = pref;
@@ -492,8 +495,10 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg, frml =cffrml_create (phyid, fcs); -if (!frml) +if (!frml) { + res = -ENOMEM ; goto out_err; + } phyinfo->frm_layer = frml;layer_set_up (frml, cnfg->mux);
@@ -511,11 +516,12 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg,list_add_rcu (&phyinfo->node, &cnfg->phys); out:mutex_unlock (&cnfg->lock); -return ; +return res; out_err:kfree (phyinfo);mutex_unlock (&cnfg->lock); +return res; }EXPORT_SYMBOL (cfcnfg_add_phy_layer);
net/caif/cfserl.c +5 -0
@@ -31,6 +31,11 @@ static int cfserl_transmit(struct cflayer *layr, struct cfpkt *pkt);static void cfserl_ctrlcmd (struct cflayer *layr,enum caif_ctrlcmd ctrl,int phyid); +void cfserl_release (struct cflayer *layer) +{ +kfree (layer); +} +struct cflayer *cfserl_create (int instance,bool use_stx) {struct cfserl *this =kzalloc (sizeof (struct cfserl ),GFP_ATOMIC );
net/core/neighbour.c +1 -0
@@ -239,6 +239,7 @@ static int neigh_forced_gc(struct neigh_table *tbl)write_lock (&n->lock);if ((n->nud_state ==NUD_FAILED ) || + (n->nud_state ==NUD_NOARP ) || (tbl->is_multicast && tbl->is_multicast (n->primary_key)) ||time_after (tref, n->updated))
net/ieee802154/nl-mac.c +3 -1
@@ -680,8 +680,10 @@ int ieee802154_llsec_getparams(struct sk_buff *skb, struct genl_info *info)nla_put_u8 (msg,IEEE802154_ATTR_LLSEC_SECLEVEL , params.out_level) ||nla_put_u32 (msg,IEEE802154_ATTR_LLSEC_FRAME_COUNTER ,be32_to_cpu (params.frame_counter)) || - ieee802154_llsec_fill_key_id(msg, ¶ms.out_key)) + ieee802154_llsec_fill_key_id(msg, ¶ms.out_key)) { + rc = -ENOBUFS; goto out_free; + }dev_put (dev);
net/ieee802154/nl-phy.c +3 -1
@@ -241,8 +241,10 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info) }if (nla_put_string (msg,IEEE802154_ATTR_PHY_NAME ,wpan_phy_name (phy)) || -nla_put_string (msg,IEEE802154_ATTR_DEV_NAME , dev->name)) +nla_put_string (msg,IEEE802154_ATTR_DEV_NAME , dev->name)) { + rc = -EMSGSIZE ; goto nla_put_failure; + }dev_put (dev);wpan_phy_put (phy);
net/ipv6/route.c +6 -2
@@ -3688,11 +3688,11 @@ static struct fib6_info *ip6_route_info_create(struct fib6_config *cfg,if (nh) {if (rt->fib6_src.plen) {NL_SET_ERR_MSG (extack,"Nexthops can not be used with source routing" ); - goto out; + goto out_free; }if (!nexthop_get (nh)) {NL_SET_ERR_MSG (extack,"Nexthop has been deleted" ); - goto out; + goto out_free; } rt->nh = nh; fib6_nh =nexthop_fib6_nh (rt->nh);
@@ -3729,6 +3729,10 @@ static struct fib6_info *ip6_route_info_create(struct fib6_config *cfg, out:fib6_info_release (rt);return ERR_PTR (err); +out_free: +ip_fib_metrics_put (rt->fib6_metrics); +kfree (rt); +return ERR_PTR (err); } int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags,
net/netfilter/ipvs/ip_vs_ctl.c +1 -1
@@ -1340,7 +1340,7 @@ ip_vs_add_service(struct netns_ipvs *ipvs, struct ip_vs_service_user_kern *u,ip_vs_addr_copy (svc->af, &svc->addr, &u->addr); svc->port = u->port; svc->fwmark = u->fwmark; - svc->flags = u->flags; + svc->flags = u->flags & ~IP_VS_SVC_F_HASHED ; svc->timeout = u->timeout *HZ ; svc->netmask = u->netmask; svc->ipvs = ipvs;
net/netfilter/nf_conntrack_proto.c +1 -1
@@ -660,7 +660,7 @@ int nf_conntrack_proto_init(void)#if IS_ENABLED (CONFIG_IPV6 ) cleanup_sockopt: -nf_unregister_sockopt (&so_getorigdst6); +nf_unregister_sockopt (&so_getorigdst);#endif return ret; }
net/netfilter/nfnetlink_cthelper.c +6 -2
@@ -380,10 +380,14 @@ static int nfnl_cthelper_update(const struct nlattr * const tb[], struct nf_conntrack_helper *helper) { + u32 size;int ret; -if (tb[NFCTH_PRIV_DATA_LEN ]) -return -EBUSY ; +if (tb[NFCTH_PRIV_DATA_LEN ]) { + size =ntohl (nla_get_be32 (tb[NFCTH_PRIV_DATA_LEN ])); +if (size != helper->data_len) +return -EBUSY ; + }if (tb[NFCTH_POLICY ]) { ret =nfnl_cthelper_update_policy (helper, tb[NFCTH_POLICY ]);
net/netfilter/nft_ct.c +1 -1
@@ -1218,7 +1218,7 @@ static void nft_ct_expect_obj_eval(struct nft_object *obj,struct nf_conn *ct; ct =nf_ct_get (pkt->skb, &ctinfo); -if (!ct || ctinfo ==IP_CT_UNTRACKED ) { +if (!ct ||nf_ct_is_confirmed (ct) ||nf_ct_is_template (ct)) { regs->verdict.code =NFT_BREAK ;return ; }
net/nfc/llcp_sock.c +2 -0
@@ -110,6 +110,7 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)if (!llcp_sock->service_name) {nfc_llcp_local_put (llcp_sock->local); llcp_sock->local =NULL ; + llcp_sock->dev =NULL ; ret = -ENOMEM ; goto put_dev; }
@@ -119,6 +120,7 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) llcp_sock->local =NULL ;kfree (llcp_sock->service_name); llcp_sock->service_name =NULL ; + llcp_sock->dev =NULL ; ret = -EADDRINUSE ; goto put_dev; }
net/sched/act_ct.c +0 -3
@@ -648,9 +648,6 @@ static int tcf_ct_fill_params(struct net *net, sizeof(p->zone)); } -if (p->zone ==NF_CT_DEFAULT_ZONE_ID ) -return 0 ; -nf_ct_zone_init (&zone, p->zone,NF_CT_DEFAULT_ZONE_DIR ,0 ); tmpl =nf_ct_tmpl_alloc (net, &zone,GFP_KERNEL );if (!tmpl) {
net/tipc/bearer.c +66 -28
212 lines not on this page · raw message
net/wireless/core.h +2 -0
@@ -433,6 +433,8 @@ void cfg80211_sme_abandon_assoc(struct wireless_dev *wdev);/* internal helpers */ bool cfg80211_supported_cipher_suite (struct wiphy *wiphy,u32 cipher); +bool cfg80211_valid_key_idx (struct cfg80211_registered_device *rdev, +int key_idx,bool pairwise);int cfg80211_validate_key_settings (struct cfg80211_registered_device *rdev,struct key_params *params,int key_idx,bool pairwise,const u8 *mac_addr);
net/wireless/nl80211.c +4 -3
@@ -3979,9 +3979,6 @@ static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info)if (err)return err; -if (key.idx <0 ) -return -EINVAL ; -if (info->attrs[NL80211_ATTR_MAC ]) mac_addr =nla_data (info->attrs[NL80211_ATTR_MAC ]);
@@ -3997,6 +3994,10 @@ static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info) key.type != NL80211_KEYTYPE_GROUP)return -EINVAL ; +if (!cfg80211_valid_key_idx (rdev, key.idx, + key.type ==NL80211_KEYTYPE_PAIRWISE )) +return -EINVAL ; +if (!rdev->ops->del_key)return -EOPNOTSUPP ;
net/wireless/util.c +38 -1
@@ -229,11 +229,48 @@ bool cfg80211_supported_cipher_suite(struct wiphy *wiphy, u32 cipher)return false; } +static bool +cfg80211_igtk_cipher_supported (struct cfg80211_registered_device *rdev) +{ +struct wiphy *wiphy = &rdev->wiphy; +int i; + +for (i =0 ; i < wiphy->n_cipher_suites; i++) { +switch (wiphy->cipher_suites[i]) { +case WLAN_CIPHER_SUITE_AES_CMAC : +case WLAN_CIPHER_SUITE_BIP_CMAC_256 : +case WLAN_CIPHER_SUITE_BIP_GMAC_128 : +case WLAN_CIPHER_SUITE_BIP_GMAC_256 : +return true; + } + } + +return false; +} + +bool cfg80211_valid_key_idx (struct cfg80211_registered_device *rdev, +int key_idx,bool pairwise) +{ +int max_key_idx; + +if (pairwise) + max_key_idx =3 ; +else if (cfg80211_igtk_cipher_supported (rdev)) + max_key_idx =5 ; +else + max_key_idx =3 ; + +if (key_idx <0 || key_idx > max_key_idx) +return false; + +return true; +} +int cfg80211_validate_key_settings (struct cfg80211_registered_device *rdev,struct key_params *params,int key_idx,bool pairwise,const u8 *mac_addr) { -if (key_idx <0 || key_idx >5 ) +if (!cfg80211_valid_key_idx (rdev, key_idx, pairwise))return -EINVAL ;if (!pairwise && mac_addr && !(rdev->wiphy.flags &WIPHY_FLAG_IBSS_RSN ))
samples/vfio-mdev/mdpy-fb.c +9 -4
@@ -117,22 +117,27 @@ static int mdpy_fb_probe(struct pci_dev *pdev,if (format !=DRM_FORMAT_XRGB8888 ) {pci_err (pdev,"format mismatch (0x%x != 0x%x)\n" , format,DRM_FORMAT_XRGB8888 ); -return -EINVAL ; + ret = -EINVAL ; + goto err_release_regions; }if (width <100 || width >10000 ) {pci_err (pdev,"width (%d) out of range\n" , width); -return -EINVAL ; + ret = -EINVAL ; + goto err_release_regions; }if (height <100 || height >10000 ) {pci_err (pdev,"height (%d) out of range\n" , height); -return -EINVAL ; + ret = -EINVAL ; + goto err_release_regions; }pci_info (pdev,"mdpy found: %dx%d framebuffer\n" , width, height); info =framebuffer_alloc (sizeof (struct mdpy_fb_par ), &pdev->dev); -if (!info) +if (!info) { + ret = -ENOMEM ; goto err_release_regions; + }pci_set_drvdata (pdev, info); par = info->par;
sound/core/timer.c +2 -1
@@ -491,9 +491,10 @@ static void snd_timer_notify1(struct snd_timer_instance *ti, int event)return ;if (timer->hw.flags &SNDRV_TIMER_HW_SLAVE )return ; + event +=10 ;/* convert to SNDRV_TIMER_EVENT_MXXX */ list_for_each_entry (ts, &ti->slave_active_head, active_list)if (ts->ccallback) - ts->ccallback (ts, event +100 , &tstamp, resolution); + ts->ccallback (ts, event, &tstamp, resolution); }/* start/continue a master timer */
sound/pci/hda/patch_realtek.c +1 -0
@@ -8062,6 +8062,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x82bf ,"HP G3 mini" ,ALC221_FIXUP_HP_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x103c ,0x82c0 ,"HP G3 mini premium" ,ALC221_FIXUP_HP_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x103c ,0x83b9 ,"HP Spectre x360" ,ALC269_FIXUP_HP_MUTE_LED_MIC3 ), +SND_PCI_QUIRK (0x103c ,0x841c ,"HP Pavilion 15-CK0xx" ,ALC269_FIXUP_HP_MUTE_LED_MIC3 ),SND_PCI_QUIRK (0x103c ,0x8497 ,"HP Envy x360" ,ALC269_FIXUP_HP_MUTE_LED_MIC3 ),SND_PCI_QUIRK (0x103c ,0x84da ,"HP OMEN dc0019-ur" ,ALC295_FIXUP_HP_OMEN ), SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
sound/usb/mixer_quirks.c +1 -1
@@ -1697,7 +1697,7 @@ static struct snd_kcontrol_new snd_microii_mixer_spdif[] = {static int snd_microii_controls_create (struct usb_mixer_interface *mixer) {int err, i; -const static usb_mixer_elem_resume_func_t resume_funcs[] = { +static const usb_mixer_elem_resume_func_t resume_funcs[] = { snd_microii_spdif_default_update,NULL , snd_microii_spdif_switch_update
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.4.125 kernel.
All users of the 5.4 kernel series must upgrade.
Quoted 9 lines
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-5.4.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=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.4.125,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.4.y
Version: 5.4.125
Commit: 3909e2374335335c9504467caabc906d3f7487e4
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8905
passed: 8905
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8905
passed: 8905
failed: 0
timeout: 0
--------------------------------------------------------------------