Linux 5.10.89
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.89 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
------------
Documentation/admin-guide/kernel-parameters.txt | 8 Documentation/hwmon/lm90.rst | 10 Documentation/networking/bonding.rst | 11 Documentation/sound/hd-audio/models.rst | 2 Makefile | 2 arch/arm/boot/dts/imx6qdl-wandboard.dtsi | 1 arch/arm/kernel/entry-armv.S | 8 arch/arm64/Kconfig | 3 arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-zero-plus.dts | 2 arch/arm64/kernel/vdso32/Makefile | 25 - arch/parisc/include/asm/futex.h | 4 arch/parisc/kernel/syscall.S | 2 arch/x86/include/asm/pgtable.h | 4 arch/x86/kvm/vmx/vmx.c | 3 drivers/char/ipmi/ipmi_msghandler.c | 21 - drivers/char/ipmi/ipmi_ssif.c | 7 drivers/gpio/gpio-dln2.c | 19 - drivers/hid/hid-holtek-mouse.c | 15 drivers/hid/hid-vivaldi.c | 3 drivers/hwmon/Kconfig | 2 drivers/hwmon/lm90.c | 171 ++++++---- drivers/infiniband/hw/hns/hns_roce_srq.c | 2 drivers/infiniband/hw/qib/qib_user_sdma.c | 2 drivers/input/mouse/elantech.c | 8 drivers/input/touchscreen/atmel_mxt_ts.c | 2 drivers/input/touchscreen/elants_i2c.c | 46 ++ drivers/input/touchscreen/goodix.c | 1 drivers/mmc/core/core.c | 7 drivers/mmc/core/core.h | 1 drivers/mmc/core/host.c | 9 drivers/mmc/host/meson-mx-sdhc-mmc.c | 16 drivers/mmc/host/mmci_stm32_sdmmc.c | 2 drivers/mmc/host/sdhci-tegra.c | 43 +- drivers/net/bonding/bond_options.c | 2 drivers/net/ethernet/intel/igb/igb_main.c | 19 - drivers/net/ethernet/marvell/prestera/prestera_main.c | 16 drivers/net/ethernet/micrel/ks8851_par.c | 2 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h | 2 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 12 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c | 4 drivers/net/ethernet/sfc/falcon/rx.c | 5 drivers/net/ethernet/sfc/rx_common.c | 5 drivers/net/ethernet/smsc/smc911x.c | 5 drivers/net/fjes/fjes_main.c | 5 drivers/net/hamradio/mkiss.c | 5 drivers/net/usb/lan78xx.c | 6 drivers/pinctrl/bcm/pinctrl-bcm2835.c | 29 - drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 8 drivers/pinctrl/stm32/pinctrl-stm32.c | 8 drivers/platform/x86/intel_pmc_core_pltdrv.c | 2 drivers/spi/spi-armada-3700.c | 2 drivers/tee/optee/shm_pool.c | 6 drivers/tee/tee_shm.c | 171 +++------- drivers/usb/gadget/function/u_ether.c | 15 fs/ceph/file.c | 18 - fs/ext4/extents.c | 93 +++-- fs/f2fs/xattr.c | 11 include/linux/tee_drv.h | 4 include/linux/virtio_net.h | 25 + mm/memory-failure.c | 1 mm/mempolicy.c | 4 net/ax25/af_ax25.c | 4 net/mac80211/cfg.c | 3 net/netfilter/nfnetlink_log.c | 3 net/netfilter/nfnetlink_queue.c | 3 net/phonet/pep.c | 2 sound/core/jack.c | 4 sound/drivers/opl3/opl3_midi.c | 2 sound/pci/hda/patch_realtek.c | 28 + sound/soc/codecs/rt5682.c | 4 sound/soc/codecs/tas2770.c | 4 sound/soc/meson/aiu-encoder-i2s.c | 33 - sound/soc/meson/aiu-fifo-i2s.c | 19 + sound/soc/meson/aiu-fifo.c | 6 74 files changed, 669 insertions(+), 393 deletions(-)
Andrea Righi (1):
Input: elantech - fix stack out of bound access in elantech_change_report_id()
Andrew Cooper (1):
x86/pkey: Fix undefined behaviour with PKRU_WD_BIT
Andrey Ryabinin (1):
mm: mempolicy: fix THP allocations escaping mempolicy restrictions
Ard Biesheuvel (1):
ARM: 9169/1: entry: fix Thumb2 bug in iWMMXt exception handling
Benjamin Tissoires (1):
HID: holtek: fix mouse probing
Bradley Scott (2):
ALSA: hda/realtek: Amp init fixup for HP ZBook 15 G6
ALSA: hda/realtek: Add new alc285-hp-amp-init model
Chao Yu (1):
f2fs: fix to do sanity check on last xattr entry in __f2fs_setxattr()
Christian Brauner (1):
ceph: fix up non-directory creation in SGID directories
Colin Ian King (1):
ALSA: drivers: opl3: Fix incorrect use of vp->state
Derek Fang (1):
ASoC: rt5682: fix the wrong jack type detected
Dongliang Mu (1):
spi: change clk_disable_unprepare to clk_unprepare
Fabien Dessenne (1):
pinctrl: stm32: consider the GPIO offset to expose all the GPIO lines
Fernando Fernandez Mancera (1):
bonding: fix ad_actor_system option setting to default
Greg Jesionowski (1):
net: usb: lan78xx: add Allied Telesis AT29M2-AF
Greg Kroah-Hartman (1):
Linux 5.10.89
Guenter Roeck (6):
hwmon: (lm90) Fix usage of CONFIG2 register in detect function
hwmon: (lm90) Add basic support for TI TMP461
hwmon: (lm90) Introduce flag indicating extended temperature support
hwmon: (lm90) Drop critical attribute support for MAX6654
hwmom: (lm90) Fix citical alarm status for MAX6680/MAX6681
hwmon: (lm90) Do not report 'busy' status bit as alarm
Guodong Liu (1):
pinctrl: mediatek: fix global-out-of-bounds issue
Hans de Goede (1):
Input: goodix - add id->model mapping for the "9111" model
Heiner Kallweit (1):
igb: fix deadlock caused by taking RTNL in RPM resume path
Ignacy Gawędzki (1):
netfilter: fix regression in looped (broad|multi)cast's MAC handling
Jens Wiklander (1):
tee: handle lookup of shm with reference count 0
Jiacheng Shi (1):
RDMA/hns: Replace kfree() with kvfree()
Jiasheng Jiang (7):
HID: potential dereference of null pointer
qlcnic: potential dereference null pointer of rx_queue->page_ring
fjes: Check for error irq
drivers: net: smc911x: Check for error irq
net: ks8851: Check for error irq
sfc: Check null pointer of rx_queue->page_ring
sfc: falcon: Check null pointer of rx_queue->page_ring
Johan Hovold (1):
platform/x86: intel_pmc_core: fix memleak on registration failure
Johannes Berg (1):
mac80211: fix locking in ieee80211_start_ap error path
John David Anglin (2):
parisc: Correct completer in lws start
parisc: Fix mask used to select futex spinlock
Johnny Chuang (1):
Input: elants_i2c - do not check Remark ID on eKTH3900/eKTH5312
José Expósito (2):
IB/qib: Fix memory leak in qib_user_sdma_queue_pkts()
Input: atmel_mxt_ts - fix double free in mxt_read_info_block
Lin Ma (3):
ax25: NPD bug when detaching AX25 device
hamradio: defer ax25 kfree after unregister_netdev
hamradio: improve the incomplete fix to avoid NPD
Liu Shixin (1):
mm/hwpoison: clear MF_COUNT_INCREASED before retrying get_any_page()
Marian Postevca (1):
usb: gadget: u_ether: fix race in setting MAC address in setup phase
Martin Blumenstingl (3):
ASoC: meson: aiu: fifo: Add missing dma_coerce_mask_and_coherent()
ASoC: meson: aiu: Move AIU_I2S_MISC hold setting to aiu-fifo-i2s
mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands
Martin Haaß (1):
ARM: dts: imx6qdl-wandboard: Fix Ethernet support
Martin Povišer (1):
ASoC: tas2770: Fix setting of high sample rates
Mian Yousaf Kaukab (1):
ipmi: ssif: initialize ssif_info->client early
Nick Desaulniers (2):
arm64: vdso32: drop -no-integrated-as flag
arm64: vdso32: require CROSS_COMPILE_COMPAT for gcc+bfd
Noralf Trønnes (1):
gpio: dln2: Fix interrupts when replugging the device
Phil Elwell (1):
pinctrl: bcm2835: Change init order for gpio hogs
Prathamesh Shete (1):
mmc: sdhci-tegra: Fix switch to HS400ES mode
Robert Marko (1):
arm64: dts: allwinner: orangepi-zero-plus: fix PHY mode
Rémi Denis-Courmont (1):
phonet/pep: refuse to enable an unbound pipe
Sean Christopherson (2):
KVM: VMX: Wake vCPU when delivering posted IRQ even if vCPU == this vCPU
KVM: VMX: Fix stale docs for kvm-intel.emulate_invalid_guest_state
Sumit Garg (1):
tee: optee: Fix incorrect page free bug
Thadeu Lima de Souza Cascardo (2):
ipmi: bail out if init_srcu_struct fails
ipmi: fix initialization when workqueue allocation fails
Ulf Hansson (1):
mmc: core: Disable card detect during shutdown
Werner Sembach (1):
ALSA: hda/realtek: Fix quirk for Clevo NJ51CU
Willem de Bruijn (2):
net: accept UFOv6 packages in virtio_net_hdr_to_skb
net: skip virtio_net_hdr_set_proto if protocol already set
Wu Bo (1):
ipmi: Fix UAF when uninstall ipmi_si and ipmi_msghandler module
Xiaoke Wang (1):
ALSA: jack: Check the return value of kstrdup()
Yann Gautier (1):
mmc: mmci: stm32: clear DLYB_CR after sending tuning command
Yevhen Orlov (1):
net: marvell: prestera: fix incorrect return of port_find
Zhang Yi (3):
ext4: prevent partial update of the extent blocks
ext4: check for out-of-order index extents in ext4_valid_extent_entries()
ext4: check for inconsistent extents between index and leaf block
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +6 -2
@@ -2294,8 +2294,12 @@ Default is 1 (enabled) kvm-intel.emulate_invalid_guest_state= - [KVM,Intel] Enable emulation of invalid guest states - Default is 0 (disabled) + [KVM,Intel] Disable emulation of invalid guest state. + Ignored if kvm-intel.enable_unrestricted_guest=1, as + guest state is never invalid for unrestricted guests. + This param doesn't apply to nested guests (L2), as KVM + never emulates invalid L2 guest state. + Default is 1 (enabled) kvm-intel.flexpriority= [KVM,Intel] Disable FlexPriority feature (TPR shadow).
Documentation/hwmon/lm90.rst +10 -0
@@ -265,6 +265,16 @@ Supported chips: https://www.ti.com/litv/pdf/sbos686 + * Texas Instruments TMP461 + + Prefix: 'tmp461' + + Addresses scanned: I2C 0x48 through 0x4F + + Datasheet: Publicly available at TI website + + https://www.ti.com/lit/gpn/tmp461 + Author: Jean Delvare <[email protected]>
Documentation/networking/bonding.rst +6 -5
@@ -196,11 +196,12 @@ ad_actor_sys_prio ad_actor_system In an AD system, this specifies the mac-address for the actor in - protocol packet exchanges (LACPDUs). The value cannot be NULL or - multicast. It is preferred to have the local-admin bit set for this - mac but driver does not enforce it. If the value is not given then - system defaults to using the masters' mac address as actors' system - address. + protocol packet exchanges (LACPDUs). The value cannot be a multicast + address. If the all-zeroes MAC is specified, bonding will internally + use the MAC of the bond itself. It is preferred to have the + local-admin bit set for this mac but driver does not enforce it. If + the value is not given then system defaults to using the masters' + mac address as actors' system address. This parameter has effect only in 802.3ad mode and is available through SysFs interface.
Documentation/sound/hd-audio/models.rst +2 -0
@@ -326,6 +326,8 @@ usi-headset Headset support on USI machines dual-codecs Lenovo laptops with dual codecs +alc285-hp-amp-init + HP laptops which require speaker amplifier initialization (ALC285) ALC680 ======
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 88 +SUBLEVEL = 89 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/imx6qdl-wandboard.dtsi +1 -0
@@ -289,6 +289,7 @@ mdio { ethphy: ethernet-phy@1 { reg = <1>; + qca,clk-out-frequency = <125000000>; }; }; };
arch/arm/kernel/entry-armv.S +3 -5
@@ -596,11 +596,9 @@ call_fpe: tstne r0, #0x04000000 @ bit 26 set on both ARM and Thumb-2 reteq lr and r8, r0, #0x00000f00 @ mask out CP number - THUMB( lsr r8, r8, #8 ) mov r7, #1 - add r6, r10, #TI_USED_CP - ARM( strb r7, [r6, r8, lsr #8] ) @ set appropriate used_cp[] - THUMB( strb r7, [r6, r8] ) @ set appropriate used_cp[] + add r6, r10, r8, lsr #8 @ add used_cp[] array offset first + strb r7, [r6, #TI_USED_CP] @ set appropriate used_cp[] #ifdef CONFIG_IWMMXT @ Test if we need to give access to iWMMXt coprocessors ldr r5, [r10, #TI_FLAGS]
@@ -609,7 +607,7 @@ call_fpe: bcs iwmmxt_task_enable #endif ARM( add pc, pc, r8, lsr #6 ) - THUMB( lsl r8, r8, #2 ) + THUMB( lsr r8, r8, #6 ) THUMB( add pc, r8 ) nop
arch/arm64/Kconfig +2 -1
@@ -1265,7 +1265,8 @@ config KUSER_HELPERS config COMPAT_VDSO bool "Enable vDSO for 32-bit applications" - depends on !CPU_BIG_ENDIAN && "$(CROSS_COMPILE_COMPAT)" != "" + depends on !CPU_BIG_ENDIAN + depends on (CC_IS_CLANG && LD_IS_LLD) || "$(CROSS_COMPILE_COMPAT)" != "" select GENERIC_COMPAT_VDSO default y help
arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-zero-plus.dts +1 -1
@@ -69,7 +69,7 @@ &emac { pinctrl-0 = <&emac_rgmii_pins>; phy-supply = <®_gmac_3v3>; phy-handle = <&ext_rgmii_phy>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; status = "okay"; };
arch/arm64/kernel/vdso32/Makefile +5 -20
@@ -10,26 +10,15 @@ include $(srctree)/lib/vdso/Makefile # Same as cc-*option, but using CC_COMPAT instead of CC ifeq ($(CONFIG_CC_IS_CLANG), y) -COMPAT_GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE_COMPAT)elfedit)) -COMPAT_GCC_TOOLCHAIN := $(realpath $(COMPAT_GCC_TOOLCHAIN_DIR)/..) - -CC_COMPAT_CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%)) -CC_COMPAT_CLANG_FLAGS += --prefix=$(COMPAT_GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE_COMPAT)) -CC_COMPAT_CLANG_FLAGS += -no-integrated-as -Qunused-arguments -ifneq ($(COMPAT_GCC_TOOLCHAIN),) -CC_COMPAT_CLANG_FLAGS += --gcc-toolchain=$(COMPAT_GCC_TOOLCHAIN) -endif - CC_COMPAT ?= $(CC) -CC_COMPAT += $(CC_COMPAT_CLANG_FLAGS) - -ifneq ($(LLVM),) -LD_COMPAT ?= $(LD) +CC_COMPAT += --target=arm-linux-gnueabi else -LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld +CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc endif + +ifeq ($(CONFIG_LD_IS_LLD), y) +LD_COMPAT ?= $(LD) else -CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld endif
@@ -55,10 +44,6 @@ VDSO_CPPFLAGS += $(LINUXINCLUDE) # Common C and assembly flags # From top-level Makefile VDSO_CAFLAGS := $(VDSO_CPPFLAGS) -ifneq ($(shell $(CC_COMPAT) --version 2>&1 | head -n 1 | grep clang),) -VDSO_CAFLAGS += --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%)) -endif - VDSO_CAFLAGS += $(call cc32-option,-fno-PIE) ifdef CONFIG_DEBUG_INFO VDSO_CAFLAGS += -g
arch/parisc/include/asm/futex.h +2 -2
@@ -16,7 +16,7 @@ static inline void _futex_spin_lock_irqsave(u32 __user *uaddr, unsigned long int *flags) {extern u32 lws_lock_start[]; -long index = ((long )uaddr &0x3f8 ) >>1 ; +long index = ((long )uaddr &0x7f8 ) >>1 ;arch_spinlock_t *s = (arch_spinlock_t *)&lws_lock_start[index];local_irq_save (*flags);arch_spin_lock (s);
@@ -26,7 +26,7 @@ static inline void _futex_spin_unlock_irqrestore(u32 __user *uaddr, unsigned long int *flags) {extern u32 lws_lock_start[]; -long index = ((long )uaddr &0x3f8 ) >>1 ; +long index = ((long )uaddr &0x7f8 ) >>1 ;arch_spinlock_t *s = (arch_spinlock_t *)&lws_lock_start[index];arch_spin_unlock (s);local_irq_restore (*flags);
arch/parisc/kernel/syscall.S +1 -1
@@ -478,7 +478,7 @@ lws_start: extrd,u %r1,PSW_W_BIT,1,%r1 /* sp must be aligned on 4, so deposit the W bit setting into * the bottom of sp temporarily */ - or,ev %r1,%r30,%r30 + or,od %r1,%r30,%r30 /* Clip LWS number to a 32-bit value for 32-bit processes */ depdi 0, 31, 32, %r20
arch/x86/include/asm/pgtable.h +2 -2
@@ -1360,8 +1360,8 @@ static inline pmd_t pmd_swp_clear_uffd_wp(pmd_t pmd) }#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */ -#define PKRU_AD_BIT 0x1 -#define PKRU_WD_BIT 0x2 +#define PKRU_AD_BIT 0x1u +#define PKRU_WD_BIT 0x2u#define PKRU_BITS_PER_PKEY 2#ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
arch/x86/kvm/vmx/vmx.c +1 -2
@@ -4007,8 +4007,7 @@ static int vmx_deliver_posted_interrupt(struct kvm_vcpu *vcpu, int vector)if (pi_test_and_set_on (&vmx->pi_desc))return 0 ; -if (vcpu !=kvm_get_running_vcpu () && - !kvm_vcpu_trigger_posted_interrupt (vcpu, false)) +if (!kvm_vcpu_trigger_posted_interrupt (vcpu, false))kvm_vcpu_kick (vcpu);return 0 ;
drivers/char/ipmi/ipmi_msghandler.c +13 -8
@@ -2945,7 +2945,7 @@ cleanup_bmc_device(struct kref *ref)* with removing the device attributes while reading a device * attribute. */ -schedule_work (&bmc->remove_work); +queue_work (remove_work_wq, &bmc->remove_work); }/*
@@ -5161,22 +5161,27 @@ static int ipmi_init_msghandler(void)if (initialized) goto out; -init_srcu_struct (&ipmi_interfaces_srcu); - -timer_setup (&ipmi_timer, ipmi_timeout,0 ); -mod_timer (&ipmi_timer, jiffies +IPMI_TIMEOUT_JIFFIES ); - -atomic_notifier_chain_register (&panic_notifier_list, &panic_block); + rv =init_srcu_struct (&ipmi_interfaces_srcu); +if (rv) + goto out; remove_work_wq =create_singlethread_workqueue ("ipmi-msghandler-remove-wq" );if (!remove_work_wq) {pr_err ("unable to create ipmi-msghandler-remove-wq workqueue" ); rv = -ENOMEM ; - goto out; + goto out_wq; } +timer_setup (&ipmi_timer, ipmi_timeout,0 ); +mod_timer (&ipmi_timer, jiffies +IPMI_TIMEOUT_JIFFIES ); + +atomic_notifier_chain_register (&panic_notifier_list, &panic_block); + initialized = true; +out_wq: +if (rv) +cleanup_srcu_struct (&ipmi_interfaces_srcu); out:mutex_unlock (&ipmi_interfaces_mutex);return rv;
drivers/char/ipmi/ipmi_ssif.c +4 -3
@@ -1700,6 +1700,9 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id) } } + ssif_info->client = client; +i2c_set_clientdata (client, ssif_info); + rv =ssif_check_and_remove (client, ssif_info);/* If rv is 0 and addr source is not SI_ACPI, continue probing */ if (!rv && ssif_info->addr_source ==SI_ACPI ) {
@@ -1720,9 +1723,6 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)ipmi_addr_src_to_str (ssif_info->addr_source), client->addr, client->adapter->name, slave_addr); - ssif_info->client = client; -i2c_set_clientdata (client, ssif_info); -/* Now check for system interface capabilities */ msg[0 ] =IPMI_NETFN_APP_REQUEST <<2 ; msg[1 ] =IPMI_GET_SYSTEM_INTERFACE_CAPABILITIES_CMD ;
@@ -1922,6 +1922,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)dev_err (&ssif_info->client->dev,"Unable to start IPMI SSIF: %d\n" , rv); +i2c_set_clientdata (client,NULL );kfree (ssif_info); }kfree (resp);
drivers/gpio/gpio-dln2.c +9 -10
@@ -46,6 +46,7 @@struct dln2_gpio {struct platform_device *pdev;struct gpio_chip gpio; +struct irq_chip irqchip;/* * Cache pin direction to save us one transfer, since the hardware has
@@ -383,15 +384,6 @@ static void dln2_irq_bus_unlock(struct irq_data *irqd)mutex_unlock (&dln2->irq_lock); } -static struct irq_chip dln2_gpio_irqchip = { - .name ="dln2-irq" , - .irq_mask = dln2_irq_mask, - .irq_unmask = dln2_irq_unmask, - .irq_set_type = dln2_irq_set_type, - .irq_bus_lock = dln2_irq_bus_lock, - .irq_bus_sync_unlock = dln2_irq_bus_unlock, -}; -static void dln2_gpio_event (struct platform_device *pdev,u16 echo,const void *data,int len) {
@@ -477,8 +469,15 @@ static int dln2_gpio_probe(struct platform_device *pdev) dln2->gpio.direction_output = dln2_gpio_direction_output; dln2->gpio.set_config = dln2_gpio_set_config; + dln2->irqchip.name ="dln2-irq" , + dln2->irqchip.irq_mask = dln2_irq_mask, + dln2->irqchip.irq_unmask = dln2_irq_unmask, + dln2->irqchip.irq_set_type = dln2_irq_set_type, + dln2->irqchip.irq_bus_lock = dln2_irq_bus_lock, + dln2->irqchip.irq_bus_sync_unlock = dln2_irq_bus_unlock, + girq = &dln2->gpio.irq; - girq->chip = &dln2_gpio_irqchip; + girq->chip = &dln2->irqchip;/* The event comes from the outside so no parent handler */ girq->parent_handler =NULL ; girq->num_parents =0 ;
drivers/hid/hid-holtek-mouse.c +15 -0
@@ -65,8 +65,23 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc,static int holtek_mouse_probe (struct hid_device *hdev,const struct hid_device_id *id) { +int ret; +if (!hid_is_usb (hdev))return -EINVAL ; + + ret =hid_parse (hdev); +if (ret) { +hid_err (hdev,"hid parse failed: %d\n" , ret); +return ret; + } + + ret =hid_hw_start (hdev,HID_CONNECT_DEFAULT ); +if (ret) { +hid_err (hdev,"hw start failed: %d\n" , ret); +return ret; + } +return 0 ; }
drivers/hid/hid-vivaldi.c +3 -0
@@ -57,6 +57,9 @@ static int vivaldi_probe(struct hid_device *hdev,int ret; drvdata =devm_kzalloc (&hdev->dev,sizeof (*drvdata),GFP_KERNEL ); +if (!drvdata) +return -ENOMEM ; +hid_set_drvdata (hdev, drvdata); ret =hid_parse (hdev);
drivers/hwmon/Kconfig +1 -1
@@ -1275,7 +1275,7 @@ config SENSORS_LM90 Maxim MAX6646, MAX6647, MAX6648, MAX6649, MAX6654, MAX6657, MAX6658, MAX6659, MAX6680, MAX6681, MAX6692, MAX6695, MAX6696, ON Semiconductor NCT1008, Winbond/Nuvoton W83L771W/G/AWG/ASG, - Philips SA56004, GMT G781, and Texas Instruments TMP451 + Philips SA56004, GMT G781, Texas Instruments TMP451 and TMP461 sensor chips. This driver can also be built as a module. If so, the module
drivers/hwmon/lm90.c +107 -64
381 lines not on this page · raw message
drivers/infiniband/hw/hns/hns_roce_srq.c +1 -1
@@ -277,7 +277,7 @@ static int alloc_srq_wrid(struct hns_roce_dev *hr_dev, struct hns_roce_srq *srq)static void free_srq_wrid (struct hns_roce_srq *srq) { -kfree (srq->wrid); +kvfree (srq->wrid); srq->wrid =NULL ; }
drivers/infiniband/hw/qib/qib_user_sdma.c +1 -1
@@ -941,7 +941,7 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd, &addrlimit) || addrlimit > type_max(typeof(pkt->addrlimit))) { ret = -EINVAL ; - goto free_pbc; + goto free_pkt; } pkt->addrlimit = addrlimit;
drivers/input/mouse/elantech.c +7 -1
@@ -1588,7 +1588,13 @@ static const struct dmi_system_id no_hw_res_dmi_table[] = {*/ static int elantech_change_report_id (struct psmouse *psmouse) { -unsigned char param[2 ] = {0x10 ,0x03 }; +/* +* NOTE: the code is expecting to receive param[] as an array of 3 +* items (see __ps2_command()), even if in this case only 2 are +* actually needed. Make sure the array size is 3 to avoid potential +* stack out-of-bound accesses. +*/ +unsigned char param[3 ] = {0x10 ,0x03 }; if (elantech_write_reg_params(psmouse, 0x7, param) || elantech_read_reg_params(psmouse, 0x7, param) ||
drivers/input/touchscreen/atmel_mxt_ts.c +1 -1
@@ -1839,7 +1839,7 @@ static int mxt_read_info_block(struct mxt_data *data)if (error) {dev_err (&client->dev,"Error %d parsing object table\n" , error);mxt_free_object_table (data); - goto err_free_mem; +return error; } data->object_table = (struct mxt_object *)(id_buf +MXT_OBJECT_START );
drivers/input/touchscreen/elants_i2c.c +45 -1
64 lines not on this page · raw message
drivers/input/touchscreen/goodix.c +1 -0
@@ -162,6 +162,7 @@ static const struct goodix_chip_id goodix_chip_ids[] = { { .id = "911", .data = >911_chip_data }, { .id = "9271", .data = >911_chip_data }, { .id = "9110", .data = >911_chip_data }, + { .id = "9111", .data = >911_chip_data }, { .id = "927", .data = >911_chip_data }, { .id = "928", .data = >911_chip_data },
drivers/mmc/core/core.c +6 -1
@@ -2327,7 +2327,7 @@ void mmc_start_host(struct mmc_host *host)_mmc_detect_change (host,0 , false); } -void mmc_stop_host (struct mmc_host *host) +void __mmc_stop_host (struct mmc_host *host) {if (host->slot.cd_irq >=0 ) {mmc_gpio_set_cd_wake (host, false);
@@ -2336,6 +2336,11 @@ void mmc_stop_host(struct mmc_host *host) host->rescan_disable =1 ;cancel_delayed_work_sync (&host->detect); +} + +void mmc_stop_host (struct mmc_host *host) +{ +__mmc_stop_host (host);/* clear pm flags now and let card drivers set them as needed */ host->pm_flags =0 ;
drivers/mmc/core/core.h +1 -0
@@ -69,6 +69,7 @@ static inline void mmc_delay(unsigned int ms)void mmc_rescan (struct work_struct *work);void mmc_start_host (struct mmc_host *host); +void __mmc_stop_host (struct mmc_host *host);void mmc_stop_host (struct mmc_host *host); void _mmc_detect_change(struct mmc_host *host, unsigned long delay,
drivers/mmc/core/host.c +9 -0
@@ -79,9 +79,18 @@ static void mmc_host_classdev_release(struct device *dev)kfree (host); } +static int mmc_host_classdev_shutdown (struct device *dev) +{ +struct mmc_host *host =cls_dev_to_mmc_host (dev); + +__mmc_stop_host (host); +return 0 ; +} +static struct class mmc_host_class = { .name ="mmc_host" , .dev_release = mmc_host_classdev_release, + .shutdown_pre = mmc_host_classdev_shutdown, .pm =MMC_HOST_CLASS_DEV_PM_OPS , };
drivers/mmc/host/meson-mx-sdhc-mmc.c +16 -0
@@ -135,6 +135,7 @@ static void meson_mx_sdhc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) {struct meson_mx_sdhc_host *host =mmc_priv (mmc); +bool manual_stop = false;u32 ictl, send;int pack_len;
@@ -172,12 +173,27 @@ static void meson_mx_sdhc_start_cmd(struct mmc_host *mmc,else /* software flush: */ ictl |=MESON_SDHC_ICTL_DATA_XFER_OK ; + +/* +* Mimic the logic from the vendor driver where (only) +* SD_IO_RW_EXTENDED commands with more than one block set the +* MESON_SDHC_MISC_MANUAL_STOP bit. This fixes the firmware +* download in the brcmfmac driver for a BCM43362/1 card. +* Without this sdio_memcpy_toio() (with a size of 219557 +* bytes) times out if MESON_SDHC_MISC_MANUAL_STOP is not set. +*/ + manual_stop = cmd->data->blocks >1 && + cmd->opcode ==SD_IO_RW_EXTENDED ; }else { pack_len =0 ; ictl |=MESON_SDHC_ICTL_RESP_OK ; } +regmap_update_bits (host->regmap,MESON_SDHC_MISC , +MESON_SDHC_MISC_MANUAL_STOP , + manual_stop ?MESON_SDHC_MISC_MANUAL_STOP :0 ); +if (cmd->opcode ==MMC_STOP_TRANSMISSION ) send |=MESON_SDHC_SEND_DATA_STOP ;
drivers/mmc/host/mmci_stm32_sdmmc.c +2 -0
@@ -441,6 +441,8 @@ static int sdmmc_dlyb_phase_tuning(struct mmci_host *host, u32 opcode)return -EINVAL ; } +writel_relaxed (0 , dlyb->base +DLYB_CR ); + phase = end_of_len - max_len /2 ;sdmmc_dlyb_set_cfgr (dlyb, dlyb->unit, phase, false);
drivers/mmc/host/sdhci-tegra.c +26 -17
55 lines not on this page · raw message
drivers/net/bonding/bond_options.c +1 -1
@@ -1466,7 +1466,7 @@ static int bond_option_ad_actor_system_set(struct bonding *bond, mac = (u8 *)&newval->value; } -if (!is_valid_ether_addr (mac)) +if (is_multicast_ether_addr (mac)) goto err;netdev_dbg (bond->dev,"Setting ad_actor_system to %pM\n" , mac);
drivers/net/ethernet/intel/igb/igb_main.c +13 -6
@@ -9260,7 +9260,7 @@ static int __maybe_unused igb_suspend(struct device *dev)return __igb_shutdown (to_pci_dev (dev),NULL ,0 ); } -static int __maybe_unused igb_resume (struct device *dev) +static int __maybe_unused __igb_resume (struct device *dev,bool rpm) {struct pci_dev *pdev =to_pci_dev (dev);struct net_device *netdev =pci_get_drvdata (pdev);
@@ -9303,17 +9303,24 @@ static int __maybe_unused igb_resume(struct device *dev)wr32 (E1000_WUS , ~0 ); -rtnl_lock (); +if (!rpm) +rtnl_lock ();if (!err &&netif_running (netdev)) err =__igb_open (netdev, true);if (!err)netif_device_attach (netdev); -rtnl_unlock (); +if (!rpm) +rtnl_unlock ();return err; } +static int __maybe_unused igb_resume (struct device *dev) +{ +return __igb_resume (dev, false); +} +static int __maybe_unused igb_runtime_idle (struct device *dev) {struct net_device *netdev =dev_get_drvdata (dev);
@@ -9332,7 +9339,7 @@ static int __maybe_unused igb_runtime_suspend(struct device *dev)static int __maybe_unused igb_runtime_resume (struct device *dev) { -return igb_resume (dev); +return __igb_resume (dev, true); }static void igb_shutdown (struct pci_dev *pdev)
@@ -9448,7 +9455,7 @@ static pci_ers_result_t igb_io_error_detected(struct pci_dev *pdev,* @pdev: Pointer to PCI device * * Restart the card from scratch, as if from a cold-boot. Implementation -* resembles the first-half of the igb_resume routine. +* resembles the first-half of the __igb_resume routine. **/ static pci_ers_result_t igb_io_slot_reset (struct pci_dev *pdev) {
@@ -9488,7 +9495,7 @@ static pci_ers_result_t igb_io_slot_reset(struct pci_dev *pdev)* * This callback is called when the error recovery driver tells us that * its OK to resume normal operation. Implementation resembles the -* second-half of the igb_resume routine. +* second-half of the __igb_resume routine. */ static void igb_io_resume (struct pci_dev *pdev) {
drivers/net/ethernet/marvell/prestera/prestera_main.c +10 -6
@@ -50,12 +50,14 @@ int prestera_port_pvid_set(struct prestera_port *port, u16 vid)struct prestera_port *prestera_port_find_by_hwid (struct prestera_switch *sw,u32 dev_id,u32 hw_id) { -struct prestera_port *port =NULL ; +struct prestera_port *port =NULL , *tmp;read_lock (&sw->port_list_lock); -list_for_each_entry (port, &sw->port_list, list) { -if (port->dev_id == dev_id && port->hw_id == hw_id) +list_for_each_entry (tmp, &sw->port_list, list) { +if (tmp->dev_id == dev_id && tmp->hw_id == hw_id) { + port = tmp;break ; + } }read_unlock (&sw->port_list_lock);
@@ -64,12 +66,14 @@ struct prestera_port *prestera_port_find_by_hwid(struct prestera_switch *sw,struct prestera_port *prestera_find_port (struct prestera_switch *sw,u32 id) { -struct prestera_port *port =NULL ; +struct prestera_port *port =NULL , *tmp;read_lock (&sw->port_list_lock); -list_for_each_entry (port, &sw->port_list, list) { -if (port->id == id) +list_for_each_entry (tmp, &sw->port_list, list) { +if (tmp->id == id) { + port = tmp;break ; + } }read_unlock (&sw->port_list_lock);
drivers/net/ethernet/micrel/ks8851_par.c +2 -0
@@ -323,6 +323,8 @@ static int ks8851_probe_par(struct platform_device *pdev)return ret; netdev->irq =platform_get_irq (pdev,0 ); +if (netdev->irq <0 ) +return netdev->irq;return ks8851_probe_common (netdev, dev, msg_enable); }
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h +1 -1
@@ -201,7 +201,7 @@ int qlcnic_sriov_get_vf_vport_info(struct qlcnic_adapter *, struct qlcnic_info *, u16);int qlcnic_sriov_cfg_vf_guest_vlan (struct qlcnic_adapter *,u16 ,u8 );void qlcnic_sriov_free_vlans (struct qlcnic_adapter *); -void qlcnic_sriov_alloc_vlans (struct qlcnic_adapter *); +int qlcnic_sriov_alloc_vlans (struct qlcnic_adapter *);bool qlcnic_sriov_check_any_vlan (struct qlcnic_vf_info *);void qlcnic_sriov_del_vlan_id (struct qlcnic_sriov *,struct qlcnic_vf_info *,u16 );
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +9 -3
@@ -432,7 +432,7 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter, struct qlcnic_cmd_args *cmd) {struct qlcnic_sriov *sriov = adapter->ahw->sriov; -int i, num_vlans; +int i, num_vlans, ret;u16 *vlans;if (sriov->allowed_vlans)
@@ -443,7 +443,9 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter,dev_info (&adapter->pdev->dev,"Number of allowed Guest VLANs = %d\n" , sriov->num_allowed_vlans); -qlcnic_sriov_alloc_vlans (adapter); + ret =qlcnic_sriov_alloc_vlans (adapter); +if (ret) +return ret;if (!sriov->any_vlan)return 0 ;
@@ -2159,7 +2161,7 @@ static int qlcnic_sriov_vf_resume(struct qlcnic_adapter *adapter)return err; } -void qlcnic_sriov_alloc_vlans (struct qlcnic_adapter *adapter) +int qlcnic_sriov_alloc_vlans (struct qlcnic_adapter *adapter) {struct qlcnic_sriov *sriov = adapter->ahw->sriov;struct qlcnic_vf_info *vf;
@@ -2169,7 +2171,11 @@ void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter) vf = &sriov->vf_info[i]; vf->sriov_vlans =kcalloc (sriov->num_allowed_vlans,sizeof (*vf->sriov_vlans),GFP_KERNEL ); +if (!vf->sriov_vlans) +return -ENOMEM ; } + +return 0 ; }void qlcnic_sriov_free_vlans (struct qlcnic_adapter *adapter)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c +3 -1
@@ -597,7 +597,9 @@ static int __qlcnic_pci_sriov_enable(struct qlcnic_adapter *adapter,if (err) goto del_flr_queue; -qlcnic_sriov_alloc_vlans (adapter); + err =qlcnic_sriov_alloc_vlans (adapter); +if (err) + goto del_flr_queue;return err;
drivers/net/ethernet/sfc/falcon/rx.c +4 -1
@@ -728,7 +728,10 @@ static void ef4_init_rx_recycle_ring(struct ef4_nic *efx, efx->rx_bufs_per_page); rx_queue->page_ring =kcalloc (page_ring_size,sizeof (*rx_queue->page_ring),GFP_KERNEL ); - rx_queue->page_ptr_mask = page_ring_size -1 ; +if (!rx_queue->page_ring) + rx_queue->page_ptr_mask =0 ; +else + rx_queue->page_ptr_mask = page_ring_size -1 ; }void ef4_init_rx_queue (struct ef4_rx_queue *rx_queue)
drivers/net/ethernet/sfc/rx_common.c +4 -1
@@ -150,7 +150,10 @@ static void efx_init_rx_recycle_ring(struct efx_rx_queue *rx_queue) efx->rx_bufs_per_page); rx_queue->page_ring =kcalloc (page_ring_size,sizeof (*rx_queue->page_ring),GFP_KERNEL ); - rx_queue->page_ptr_mask = page_ring_size -1 ; +if (!rx_queue->page_ring) + rx_queue->page_ptr_mask =0 ; +else + rx_queue->page_ptr_mask = page_ring_size -1 ; }static void efx_fini_rx_recycle_ring (struct efx_rx_queue *rx_queue)
drivers/net/ethernet/smsc/smc911x.c +5 -0
@@ -2069,6 +2069,11 @@ static int smc911x_drv_probe(struct platform_device *pdev) ndev->dma = (unsigned char )-1 ; ndev->irq =platform_get_irq (pdev,0 ); +if (ndev->irq <0 ) { + ret = ndev->irq; + goto release_both; + } + lp =netdev_priv (ndev); lp->netdev = ndev;#ifdef SMC_DYNAMIC_BUS_CONFIG
drivers/net/fjes/fjes_main.c +5 -0
@@ -1269,6 +1269,11 @@ static int fjes_probe(struct platform_device *plat_dev) hw->hw_res.start = res->start; hw->hw_res.size =resource_size (res); hw->hw_res.irq =platform_get_irq (plat_dev,0 ); +if (hw->hw_res.irq <0 ) { + err = hw->hw_res.irq; + goto err_free_control_wq; + } + err =fjes_hw_init (&adapter->hw);if (err) goto err_free_control_wq;
drivers/net/hamradio/mkiss.c +3 -2
@@ -792,13 +792,14 @@ static void mkiss_close(struct tty_struct *tty)*/ netif_stop_queue (ax->dev); -/* Free all AX25 frame buffers. */ +unregister_netdev (ax->dev); + +/* Free all AX25 frame buffers after unreg. */ kfree (ax->rbuff);kfree (ax->xbuff); ax->tty =NULL ; -unregister_netdev (ax->dev);free_netdev (ax->dev); }
drivers/net/usb/lan78xx.c +6 -0
@@ -64,6 +64,8 @@#define LAN7801_USB_PRODUCT_ID (0x7801)#define LAN78XX_EEPROM_MAGIC (0x78A5)#define LAN78XX_OTP_MAGIC (0x78F3) +#define AT29M2AF_USB_VENDOR_ID (0x07C9) +#define AT29M2AF_USB_PRODUCT_ID (0x0012)#define MII_READ 1#define MII_WRITE 0
@@ -4142,6 +4144,10 @@ static const struct usb_device_id products[] = {/* LAN7801 USB Gigabit Ethernet Device */ USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7801_USB_PRODUCT_ID), }, + { +/* ATM2-AF USB Gigabit Ethernet Device */ + USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID), + }, {}, };MODULE_DEVICE_TABLE (usb, products);
drivers/pinctrl/bcm/pinctrl-bcm2835.c +16 -13
@@ -1244,6 +1244,18 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)raw_spin_lock_init (&pc->irq_lock[i]); } + pc->pctl_desc = *pdata->pctl_desc; + pc->pctl_dev =devm_pinctrl_register (dev, &pc->pctl_desc, pc); +if (IS_ERR (pc->pctl_dev)) { +gpiochip_remove (&pc->gpio_chip); +return PTR_ERR (pc->pctl_dev); + } + + pc->gpio_range = *pdata->gpio_range; + pc->gpio_range.base = pc->gpio_chip.base; + pc->gpio_range.gc = &pc->gpio_chip; +pinctrl_add_gpio_range (pc->pctl_dev, &pc->gpio_range); + girq = &pc->gpio_chip.irq; girq->chip = &bcm2835_gpio_irq_chip; girq->parent_handler = bcm2835_gpio_irq_handler;
@@ -1251,8 +1263,10 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) girq->parents =devm_kcalloc (dev,BCM2835_NUM_IRQS ,sizeof (*girq->parents),GFP_KERNEL ); -if (!girq->parents) +if (!girq->parents) { +pinctrl_remove_gpio_range (pc->pctl_dev, &pc->gpio_range);return -ENOMEM ; + }if (is_7211) { pc->wake_irq = devm_kcalloc(dev, BCM2835_NUM_IRQS,
@@ -1303,21 +1317,10 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) err =gpiochip_add_data (&pc->gpio_chip, pc);if (err) {dev_err (dev,"could not add GPIO chip\n" ); +pinctrl_remove_gpio_range (pc->pctl_dev, &pc->gpio_range);return err; } - pc->pctl_desc = *pdata->pctl_desc; - pc->pctl_dev =devm_pinctrl_register (dev, &pc->pctl_desc, pc); -if (IS_ERR (pc->pctl_dev)) { -gpiochip_remove (&pc->gpio_chip); -return PTR_ERR (pc->pctl_dev); - } - - pc->gpio_range = *pdata->gpio_range; - pc->gpio_range.base = pc->gpio_chip.base; - pc->gpio_range.gc = &pc->gpio_chip; -pinctrl_add_gpio_range (pc->pctl_dev, &pc->gpio_range); -return 0 ; }
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c +6 -2
@@ -280,8 +280,12 @@ static int mtk_xt_get_gpio_n(void *data, unsigned long eint_n, desc = (const struct mtk_pin_desc *)hw->soc->pins; *gpio_chip = &hw->chip; -/* Be greedy to guess first gpio_n is equal to eint_n */ -if (desc[eint_n].eint.eint_n == eint_n) +/* +* Be greedy to guess first gpio_n is equal to eint_n. +* Only eint virtual eint number is greater than gpio number. +*/ +if (hw->soc->npins > eint_n && + desc[eint_n].eint.eint_n == eint_n) *gpio_n = eint_n;else *gpio_n =mtk_xt_find_eint_num (hw, eint_n);
drivers/pinctrl/stm32/pinctrl-stm32.c +4 -4
@@ -1255,10 +1255,10 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, bank_nr = args.args[1 ] /STM32_GPIO_PINS_PER_BANK ; bank->gpio_chip.base = args.args[1 ]; - npins = args.args[2 ]; -while (!of_parse_phandle_with_fixed_args (np,"gpio-ranges" ,3 , - ++i, &args)) - npins += args.args[2 ]; +/* get the last defined gpio line (offset + nb of pins) */ + npins = args.args[0 ] + args.args[2 ]; +while (!of_parse_phandle_with_fixed_args (np,"gpio-ranges" ,3 , ++i, &args)) + npins =max (npins, (int )(args.args[0 ] + args.args[2 ])); }else { bank_nr = pctl->nbanks; bank->gpio_chip.base = bank_nr *STM32_GPIO_PINS_PER_BANK ;
drivers/platform/x86/intel_pmc_core_pltdrv.c +1 -1
@@ -65,7 +65,7 @@ static int __init pmc_core_platform_init(void) retval =platform_device_register (pmc_core_device);if (retval) -kfree (pmc_core_device); +platform_device_put (pmc_core_device);return retval; }
drivers/spi/spi-armada-3700.c +1 -1
@@ -901,7 +901,7 @@ static int a3700_spi_probe(struct platform_device *pdev)return 0 ; error_clk: -clk_disable_unprepare (spi->clk); +clk_unprepare (spi->clk); error:spi_master_put (master); out:
drivers/tee/optee/shm_pool.c +2 -4
@@ -41,10 +41,8 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, goto err; } -for (i =0 ; i < nr_pages; i++) { - pages[i] = page; - page++; - } +for (i =0 ; i < nr_pages; i++) + pages[i] = page + i; shm->flags |=TEE_SHM_REGISTER ; rc = optee_shm_register(shm->ctx, shm, pages, nr_pages,
drivers/tee/tee_shm.c +66 -105
260 lines not on this page · raw message
drivers/usb/gadget/function/u_ether.c +5 -10
@@ -860,19 +860,23 @@ int gether_register_netdev(struct net_device *net) {struct eth_dev *dev;struct usb_gadget *g; -struct sockaddr sa;int status;if (!net->dev.parent)return -EINVAL ; dev =netdev_priv (net); g = dev->gadget; + +memcpy (net->dev_addr, dev->dev_mac,ETH_ALEN ); + net->addr_assign_type =NET_ADDR_RANDOM ; + status =register_netdev (net);if (status <0 ) {dev_dbg (&g->dev,"register_netdev failed, %d\n" , status);return status; }else {INFO (dev,"HOST MAC %pM\n" , dev->host_mac); +INFO (dev,"MAC %pM\n" , dev->dev_mac);/* two kinds of host-initiated state changes: * - iff DATA transfer is active, carrier is "on"
@@ -880,15 +884,6 @@ int gether_register_netdev(struct net_device *net)*/ netif_carrier_off (net); } - sa.sa_family = net->type; -memcpy (sa.sa_data, dev->dev_mac,ETH_ALEN ); -rtnl_lock (); - status =dev_set_mac_address (net, &sa,NULL ); -rtnl_unlock (); -if (status) -pr_warn ("cannot set self ethernet address: %d\n" , status); -else -INFO (dev,"MAC %pM\n" , dev->dev_mac);return status; }
fs/ceph/file.c +15 -3
@@ -603,13 +603,25 @@ static int ceph_finish_async_create(struct inode *dir, struct dentry *dentry, in.cap.realm =cpu_to_le64 (ci->i_snap_realm->ino); in.cap.flags =CEPH_CAP_FLAG_AUTH ; in.ctime = in.mtime = in.atime = iinfo.btime; - in.mode =cpu_to_le32 ((u32 )mode); in.truncate_seq =cpu_to_le32 (1 ); in.truncate_size =cpu_to_le64 (-1ULL ); in.xattr_version =cpu_to_le64 (1 ); in.uid =cpu_to_le32 (from_kuid (&init_user_ns,current_fsuid ())); - in.gid =cpu_to_le32 (from_kgid (&init_user_ns, dir->i_mode &S_ISGID ? - dir->i_gid :current_fsgid ())); +if (dir->i_mode &S_ISGID ) { + in.gid =cpu_to_le32 (from_kgid (&init_user_ns, dir->i_gid)); + +/* Directories always inherit the setgid bit. */ +if (S_ISDIR (mode)) + mode |=S_ISGID ; +else if ((mode & (S_ISGID |S_IXGRP )) == (S_ISGID |S_IXGRP ) && + !in_group_p (dir->i_gid) && + !capable_wrt_inode_uidgid (dir,CAP_FSETID )) + mode &= ~S_ISGID ; + }else { + in.gid =cpu_to_le32 (from_kgid (&init_user_ns,current_fsgid ())); + } + in.mode =cpu_to_le32 ((u32 )mode); + in.nlink =cpu_to_le32 (1 ); in.max_size =cpu_to_le64 (lo->stripe_unit);
fs/ext4/extents.c +63 -30
228 lines not on this page · raw message
fs/f2fs/xattr.c +10 -1
@@ -680,8 +680,17 @@ static int __f2fs_setxattr(struct inode *inode, int index, } last = here; -while (!IS_XATTR_LAST_ENTRY (last)) +while (!IS_XATTR_LAST_ENTRY (last)) { +if ((void *)(last) +sizeof (__u32) > last_base_addr || + (void *)XATTR_NEXT_ENTRY (last) > last_base_addr) { +f2fs_err (F2FS_I_SB (inode),"inode (%lu) has invalid last xattr entry, entry_size: %zu" , + inode->i_ino,ENTRY_SIZE (last)); +set_sbi_flag (F2FS_I_SB (inode),SBI_NEED_FSCK ); + error = -EFSCORRUPTED ; + goto exit; + } last =XATTR_NEXT_ENTRY (last); + } newsize =XATTR_ALIGN (sizeof (struct f2fs_xattr_entry ) + len + size);
include/linux/tee_drv.h +2 -2
@@ -195,7 +195,7 @@ int tee_session_calc_client_uuid(uuid_t *uuid, u32 connection_method,* @offset: offset of buffer in user space * @pages: locked pages from userspace * @num_pages: number of locked pages -* @dmabuf: dmabuf used to for exporting to user space +* @refcount: reference counter * @flags: defined by TEE_SHM_* in tee_drv.h * @id: unique id of a shared memory object on this device *
@@ -210,7 +210,7 @@ struct tee_shm {unsigned int offset;struct page **pages;size_t num_pages; -struct dma_buf *dmabuf; +refcount_t refcount;u32 flags;int id; };
include/linux/virtio_net.h +23 -2
@@ -7,9 +7,27 @@#include <uapi/linux/udp.h> #include <uapi/linux/virtio_net.h> +static inline bool virtio_net_hdr_match_proto (__be16 protocol,__u8 gso_type) +{ +switch (gso_type & ~VIRTIO_NET_HDR_GSO_ECN ) { +case VIRTIO_NET_HDR_GSO_TCPV4 : +return protocol ==cpu_to_be16 (ETH_P_IP ); +case VIRTIO_NET_HDR_GSO_TCPV6 : +return protocol ==cpu_to_be16 (ETH_P_IPV6 ); +case VIRTIO_NET_HDR_GSO_UDP : +return protocol ==cpu_to_be16 (ETH_P_IP ) || + protocol ==cpu_to_be16 (ETH_P_IPV6 ); +default : +return false; + } +} +static inline int virtio_net_hdr_set_proto (struct sk_buff *skb,const struct virtio_net_hdr *hdr) { +if (skb->protocol) +return 0 ; +switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN ) {case VIRTIO_NET_HDR_GSO_TCPV4 :case VIRTIO_NET_HDR_GSO_UDP :
@@ -88,9 +106,12 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,if (!skb->protocol) {__be16 protocol =dev_parse_header_protocol (skb); -virtio_net_hdr_set_proto (skb, hdr); -if (protocol && protocol != skb->protocol) +if (!protocol) +virtio_net_hdr_set_proto (skb, hdr); +else if (!virtio_net_hdr_match_proto (protocol, hdr->gso_type))return -EINVAL ; +else + skb->protocol = protocol; } retry: if (!skb_flow_dissect_flow_keys_basic(NULL, skb, &keys,
mm/memory-failure.c +1 -0
@@ -1938,6 +1938,7 @@ int soft_offline_page(unsigned long pfn, int flags)else if (ret ==0 )if (soft_offline_free_page (page) && try_again) { try_again = false; + flags &= ~MF_COUNT_INCREASED ; goto retry; }
mm/mempolicy.c +2 -2
@@ -2222,8 +2222,8 @@ alloc_pages_vma(gfp_t gfp, int order, struct vm_area_struct *vma,* memory with both reclaim and compact as well. */ if (!page && (gfp & __GFP_DIRECT_RECLAIM)) - page =__alloc_pages_node (hpage_node, - gfp, order); + page =__alloc_pages_nodemask (gfp, order, + hpage_node, nmask); goto out; }
net/ax25/af_ax25.c +3 -1
@@ -85,8 +85,10 @@ static void ax25_kill_by_device(struct net_device *dev) again:ax25_for_each (s, &ax25_list) {if (s->ax25_dev == ax25_dev) { - s->ax25_dev =NULL ;spin_unlock_bh (&ax25_list_lock); +lock_sock (s->sk); + s->ax25_dev =NULL ; +release_sock (s->sk);ax25_disconnect (s,ENETUNREACH );spin_lock_bh (&ax25_list_lock);
net/mac80211/cfg.c +3 -0
@@ -1217,7 +1217,10 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,return 0 ; error: +mutex_lock (&local->mtx);ieee80211_vif_release_channel (sdata); +mutex_unlock (&local->mtx); +return err; }
net/netfilter/nfnetlink_log.c +2 -1
@@ -557,7 +557,8 @@ __build_packet_message(struct nfnl_log_net *log, goto nla_put_failure;if (indev && skb->dev && - skb->mac_header != skb->network_header) { +skb_mac_header_was_set (skb) && +skb_mac_header_len (skb) !=0 ) {struct nfulnl_msg_packet_hw phw;int len;
net/netfilter/nfnetlink_queue.c +2 -1
@@ -562,7 +562,8 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, goto nla_put_failure;if (indev && entskb->dev && -skb_mac_header_was_set (entskb)) { +skb_mac_header_was_set (entskb) && +skb_mac_header_len (entskb) !=0 ) {struct nfqnl_msg_packet_hw phw;int len;
net/phonet/pep.c +2 -0
@@ -946,6 +946,8 @@ static int pep_ioctl(struct sock *sk, int cmd, unsigned long arg) ret = -EBUSY ; else if (sk->sk_state == TCP_ESTABLISHED) ret = -EISCONN ; + else if (!pn->pn_sk.sobject) + ret = -EADDRNOTAVAIL ; else ret =pep_sock_enable (sk,NULL ,0 );release_sock (sk);
sound/core/jack.c +4 -0
@@ -220,6 +220,10 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,return -ENOMEM ; jack->id =kstrdup (id,GFP_KERNEL ); +if (jack->id ==NULL ) { +kfree (jack); +return -ENOMEM ; + }/* don't creat input device for phantom jack */ if (!phantom_jack) {
sound/drivers/opl3/opl3_midi.c +1 -1
@@ -398,7 +398,7 @@ void snd_opl3_note_on(void *p, int note, int vel, struct snd_midi_channel *chan) }if (instr_4op) { vp2 = &opl3->voices[voice +3 ]; -if (vp->state >0 ) { +if (vp2->state >0 ) { opl3_reg = reg_side | (OPL3_REG_KEYON_BLOCK + voice_offset +3 ); reg_val = vp->keyon_reg & ~OPL3_KEYON_BIT ;
sound/pci/hda/patch_realtek.c +27 -1
@@ -6492,6 +6492,23 @@ static void alc233_fixup_no_audio_jack(struct hda_codec *codec,alc_process_coef_fw (codec, alc233_fixup_no_audio_jack_coefs); } +static void alc256_fixup_mic_no_presence_and_resume (struct hda_codec *codec, +const struct hda_fixup *fix, +int action) +{ +/* +* The Clevo NJ51CU comes either with the ALC293 or the ALC256 codec, +* but uses the 0x8686 subproduct id in both cases. The ALC256 codec +* needs an additional quirk for sound working after suspend and resume. +*/ +if (codec->core.vendor_id ==0x10ec0256 ) { +alc_update_coef_idx (codec,0x10 ,1 <<9 ,0 ); +snd_hda_codec_set_pincfg (codec,0x19 ,0x04a11120 ); + }else { +snd_hda_codec_set_pincfg (codec,0x1a ,0x04a1113c ); + } +} +enum {ALC269_FIXUP_GPIO2 ,ALC269_FIXUP_SONY_VAIO ,
@@ -6711,6 +6728,7 @@ enum {ALC256_FIXUP_SET_COEF_DEFAULTS ,ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE ,ALC233_FIXUP_NO_AUDIO_JACK , + ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME, }; static const struct hda_fixup alc269_fixups[] = {
@@ -8429,6 +8447,12 @@ static const struct hda_fixup alc269_fixups[] = { .type = HDA_FIXUP_FUNC, .v.func = alc233_fixup_no_audio_jack, }, + [ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME] = { + .type = HDA_FIXUP_FUNC, + .v.func = alc256_fixup_mic_no_presence_and_resume, + .chained = true, + .chain_id =ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC + }, };static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -8599,6 +8623,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {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 ),SND_PCI_QUIRK (0x103c ,0x8519 ,"HP Spectre x360 15-df0xxx" ,ALC285_FIXUP_HP_SPECTRE_X360 ), +SND_PCI_QUIRK (0x103c ,0x860f ,"HP ZBook 15 G6" ,ALC285_FIXUP_HP_GPIO_AMP_INIT ),SND_PCI_QUIRK (0x103c ,0x861f ,"HP Elite Dragonfly G1" ,ALC285_FIXUP_HP_GPIO_AMP_INIT ),SND_PCI_QUIRK (0x103c ,0x869d ,"HP" ,ALC236_FIXUP_HP_MUTE_LED ), SND_PCI_QUIRK(0x103c, 0x86c7, "HP Envy AiO 32", ALC274_FIXUP_HP_ENVY_GPIO),
@@ -8766,7 +8791,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1558 ,0x8562 ,"Clevo NH[5|7][0-9]RZ[Q]" ,ALC269_FIXUP_DMIC ),SND_PCI_QUIRK (0x1558 ,0x8668 ,"Clevo NP50B[BE]" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1558 ,0x8680 ,"Clevo NJ50LU" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ), -SND_PCI_QUIRK (0x1558 ,0x8686 ,"Clevo NH50[CZ]U" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ), +SND_PCI_QUIRK (0x1558 ,0x8686 ,"Clevo NH50[CZ]U" ,ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME ),SND_PCI_QUIRK (0x1558 ,0x8a20 ,"Clevo NH55DCQ-Y" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1558 ,0x8a51 ,"Clevo NH70RCQ-Y" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ), SND_PCI_QUIRK(0x1558, 0x8d50, "Clevo NH55RCQ-M", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
@@ -9060,6 +9085,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = { {.id = ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP, .name = "alc287-ideapad-bass-spk-amp"}, {.id = ALC623_FIXUP_LENOVO_THINKSTATION_P340, .name = "alc623-lenovo-thinkstation-p340"}, {.id = ALC255_FIXUP_ACER_HEADPHONE_AND_MIC, .name = "alc255-acer-headphone-and-mic"}, + {.id = ALC285_FIXUP_HP_GPIO_AMP_INIT, .name = "alc285-hp-amp-init"}, {} };#define ALC225_STANDARD_PINS \
sound/soc/codecs/rt5682.c +4 -0
@@ -924,6 +924,8 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)unsigned int val, count;if (jack_insert) { +snd_soc_dapm_mutex_lock (dapm); +snd_soc_component_update_bits (component,RT5682_PWR_ANLG_1 ,RT5682_PWR_VREF2 |RT5682_PWR_MB ,RT5682_PWR_VREF2 |RT5682_PWR_MB );
@@ -968,6 +970,8 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)snd_soc_component_update_bits (component,RT5682_MICBIAS_2 ,RT5682_PWR_CLK25M_MASK |RT5682_PWR_CLK1M_MASK ,RT5682_PWR_CLK25M_PU |RT5682_PWR_CLK1M_PU ); + +snd_soc_dapm_mutex_unlock (dapm); }else {rt5682_enable_push_button_irq (component, false); snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1,
sound/soc/codecs/tas2770.c +2 -2
@@ -291,11 +291,11 @@ static int tas2770_set_samplerate(struct tas2770_priv *tas2770, int samplerate) ramp_rate_val =TAS2770_TDM_CFG_REG0_SMP_44_1KHZ |TAS2770_TDM_CFG_REG0_31_88_2_96KHZ ;break ; -case 19200 : +case 192000 : ramp_rate_val =TAS2770_TDM_CFG_REG0_SMP_48KHZ |TAS2770_TDM_CFG_REG0_31_176_4_192KHZ ;break ; -case 17640 : +case 176400 : ramp_rate_val =TAS2770_TDM_CFG_REG0_SMP_44_1KHZ |TAS2770_TDM_CFG_REG0_31_176_4_192KHZ ;break ;
sound/soc/meson/aiu-encoder-i2s.c +0 -33
@@ -18,7 +18,6 @@#define AIU_RST_SOFT_I2S_FAST BIT(0)#define AIU_I2S_DAC_CFG_MSB_FIRST BIT(2) -#define AIU_I2S_MISC_HOLD_EN BIT(2)#define AIU_CLK_CTRL_I2S_DIV_EN BIT(0)#define AIU_CLK_CTRL_I2S_DIV GENMASK(3, 2)#define AIU_CLK_CTRL_AOCLK_INVERT BIT(6)
@@ -36,37 +35,6 @@ static void aiu_encoder_i2s_divider_enable(struct snd_soc_component *component, enable ? AIU_CLK_CTRL_I2S_DIV_EN : 0); } -static void aiu_encoder_i2s_hold (struct snd_soc_component *component, -bool enable) -{ -snd_soc_component_update_bits (component,AIU_I2S_MISC , -AIU_I2S_MISC_HOLD_EN , - enable ?AIU_I2S_MISC_HOLD_EN :0 ); -} - -static int aiu_encoder_i2s_trigger (struct snd_pcm_substream *substream,int cmd, -struct snd_soc_dai *dai) -{ -struct snd_soc_component *component = dai->component; - -switch (cmd) { -case SNDRV_PCM_TRIGGER_START : -case SNDRV_PCM_TRIGGER_RESUME : -case SNDRV_PCM_TRIGGER_PAUSE_RELEASE : -aiu_encoder_i2s_hold (component, false); -return 0 ; - -case SNDRV_PCM_TRIGGER_STOP : -case SNDRV_PCM_TRIGGER_SUSPEND : -case SNDRV_PCM_TRIGGER_PAUSE_PUSH : -aiu_encoder_i2s_hold (component, true); -return 0 ; - -default : -return -EINVAL ; - } -} -static int aiu_encoder_i2s_setup_desc (struct snd_soc_component *component,struct snd_pcm_hw_params *params) {
@@ -353,7 +321,6 @@ static void aiu_encoder_i2s_shutdown(struct snd_pcm_substream *substream, }const struct snd_soc_dai_ops aiu_encoder_i2s_dai_ops = { - .trigger = aiu_encoder_i2s_trigger, .hw_params = aiu_encoder_i2s_hw_params, .hw_free = aiu_encoder_i2s_hw_free, .set_fmt = aiu_encoder_i2s_set_fmt,
sound/soc/meson/aiu-fifo-i2s.c +19 -0
@@ -20,6 +20,8 @@#define AIU_MEM_I2S_CONTROL_MODE_16BIT BIT(6)#define AIU_MEM_I2S_BUF_CNTL_INIT BIT(0)#define AIU_RST_SOFT_I2S_FAST BIT(0) +#define AIU_I2S_MISC_HOLD_EN BIT(2) +#define AIU_I2S_MISC_FORCE_LEFT_RIGHT BIT(4)#define AIU_FIFO_I2S_BLOCK 256
@@ -90,6 +92,10 @@ static int aiu_fifo_i2s_hw_params(struct snd_pcm_substream *substream,unsigned int val;int ret; +snd_soc_component_update_bits (component,AIU_I2S_MISC , +AIU_I2S_MISC_HOLD_EN , +AIU_I2S_MISC_HOLD_EN ); + ret =aiu_fifo_hw_params (substream, params, dai);if (ret)return ret;
@@ -117,6 +123,19 @@ static int aiu_fifo_i2s_hw_params(struct snd_pcm_substream *substream,snd_soc_component_update_bits (component,AIU_MEM_I2S_MASKS ,AIU_MEM_I2S_MASKS_IRQ_BLOCK , val); +/* +* Most (all?) supported SoCs have this bit set by default. The vendor +* driver however sets it manually (depending on the version either +* while un-setting AIU_I2S_MISC_HOLD_EN or right before that). Follow +* the same approach for consistency with the vendor driver. +*/ +snd_soc_component_update_bits (component,AIU_I2S_MISC , +AIU_I2S_MISC_FORCE_LEFT_RIGHT , +AIU_I2S_MISC_FORCE_LEFT_RIGHT ); + +snd_soc_component_update_bits (component,AIU_I2S_MISC , +AIU_I2S_MISC_HOLD_EN ,0 ); +return 0 ; }
sound/soc/meson/aiu-fifo.c +6 -0
@@ -5,6 +5,7 @@#include <linux/bitfield.h> #include <linux/clk.h> +#include <linux/dma-mapping.h> #include <sound/pcm_params.h> #include <sound/soc.h> #include <sound/soc-dai.h>
@@ -192,6 +193,11 @@ int aiu_fifo_pcm_new(struct snd_soc_pcm_runtime *rtd,struct snd_card *card = rtd->card->snd_card;struct aiu_fifo *fifo = dai->playback_dma_data;size_t size = fifo->pcm->buffer_bytes_max; +int ret; + + ret =dma_coerce_mask_and_coherent (card->dev,DMA_BIT_MASK (32 )); +if (ret) +return ret; snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV,