Linux 4.19.264
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.264 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.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/arm64/silicon-errata.txt | 2 Makefile | 6 arch/arc/include/asm/io.h | 2 arch/arc/mm/ioremap.c | 2 arch/arm64/Kconfig | 16 ++ arch/arm64/include/asm/cpucaps.h | 3 arch/arm64/kernel/cpu_errata.c | 17 ++ arch/arm64/kernel/cpufeature.c | 13 + arch/s390/include/asm/futex.h | 3 arch/x86/kernel/cpu/microcode/amd.c | 16 +- arch/x86/kernel/unwind_orc.c | 2 drivers/acpi/acpi_extlog.c | 33 +++- drivers/acpi/video_detect.c | 64 +++++++++ drivers/ata/ahci.h | 2 drivers/ata/ahci_imx.c | 2 drivers/base/power/domain.c | 4 drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c | 5 drivers/gpu/drm/msm/dsi/dsi.c | 6 drivers/gpu/drm/msm/hdmi/hdmi.c | 5 drivers/hid/hid-magicmouse.c | 2 drivers/hwmon/coretemp.c | 56 ++++++-- drivers/iio/light/tsl2583.c | 2 drivers/iommu/intel-iommu.c | 5 drivers/media/platform/qcom/venus/vdec.c | 2 drivers/media/platform/vivid/vivid-core.c | 22 +++ drivers/media/platform/vivid/vivid-core.h | 2 drivers/media/platform/vivid/vivid-vid-cap.c | 27 +++- drivers/media/v4l2-core/v4l2-dv-timings.c | 14 ++ drivers/media/v4l2-core/v4l2-mem2mem.c | 62 ++++++--- drivers/mmc/core/sdio_bus.c | 3 drivers/net/can/mscan/mpc5xxx_can.c | 8 - drivers/net/can/rcar/rcar_canfd.c | 6 drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 4 drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 4 drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 17 +- drivers/net/ethernet/hisilicon/hns/hnae.c | 4 drivers/net/ethernet/ibm/ehea/ehea_main.c | 1 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 100 +++++++++------ drivers/net/ethernet/intel/i40e/i40e_type.h | 4 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 43 ++++-- drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h | 1 drivers/net/ethernet/lantiq_etop.c | 1 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 3 drivers/net/ethernet/micrel/ksz884x.c | 2 drivers/net/ethernet/socionext/netsec.c | 2 drivers/net/hyperv/hyperv_net.h | 3 drivers/net/hyperv/netvsc.c | 4 drivers/net/hyperv/netvsc_drv.c | 20 +++ drivers/net/usb/cdc_ether.c | 7 + drivers/net/usb/r8152.c | 1 drivers/usb/core/quirks.c | 9 + drivers/usb/dwc3/gadget.c | 8 - drivers/usb/gadget/udc/bdc/bdc_udc.c | 1 drivers/usb/host/xhci-mem.c | 20 +-- drivers/usb/host/xhci-pci.c | 8 + drivers/video/fbdev/smscufx.c | 55 ++++---- drivers/xen/gntdev.c | 30 +++- fs/btrfs/backref.c | 46 ++++-- fs/kernfs/dir.c | 5 fs/ocfs2/namei.c | 23 +-- fs/proc/task_mmu.c | 2 include/uapi/linux/videodev2.h | 3 kernel/power/hibernate.c | 2 mm/hugetlb.c | 2 net/atm/mpoa_proc.c | 3 net/core/net_namespace.c | 7 + net/ieee802154/socket.c | 4 net/ipv4/tcp_input.c | 3 net/kcm/kcmsock.c | 23 ++- net/mac802154/rx.c | 5 net/openvswitch/datapath.c | 3 net/sched/sch_cake.c | 4 net/tipc/discover.c | 2 net/tipc/topsrv.c | 18 +- sound/aoa/soundbus/i2sbus/core.c | 7 - sound/pci/ac97/ac97_codec.c | 1 sound/pci/au88x0/au88x0.h | 6 sound/pci/au88x0/au88x0_core.c | 2 sound/synth/emux/emux.c | 7 - tools/iio/iio_utils.c | 4 tools/perf/util/auxtrace.c | 10 + virt/kvm/arm/vgic/vgic-its.c | 5 82 files changed, 717 insertions(+), 246 deletions(-)
Aaron Conole (1):
openvswitch: switch from WARN to pr_warn
Adrian Hunter (1):
perf auxtrace: Fix address filter symbol name match for modules
Alexander Potapenko (1):
tipc: fix an information leak in tipc_topsrv_kern_subscr
Alexander Stein (1):
ata: ahci-imx: Fix MODULE_ALIAS
Anssi Hannula (1):
can: kvaser_usb: Fix possible completions during init_completion
Biju Das (1):
can: rcar_canfd: rcar_canfd_handle_global_receive(): fix IRQ storm on global FIFO receive
Borislav Petkov (1):
x86/microcode/AMD: Apply the patch early on every logical thread
Bryan O'Donoghue (1):
media: venus: dec: Handle the case where find_format fails
Chen Zhongjin (1):
x86/unwind/orc: Fix unreliable stack dump with gcov
Chen-Yu Tsai (1):
media: v4l2-mem2mem: Apply DST_QUEUE_OFF_BASE on MMAP buffers across ioctls
Christian A. Ehrhardt (1):
kernfs: fix use-after-free in __kernfs_remove
Dongliang Mu (1):
can: mscan: mpc5xxx: mpc5xxx_can_probe(): add missing put_clock() in error path
Eric Dumazet (2):
kcm: annotate data-races around kcm->rx_psock
kcm: annotate data-races around kcm->rx_waitEric Ren (1):
KVM: arm64: vgic: Fix exit condition in scan_its_table()
Filipe Manana (2):
btrfs: fix processing of delayed data refs during backref walking
btrfs: fix processing of delayed tree block refs during backref walking
Gaurav Kohli (1):
hv_netvsc: Fix race between VF offering and VF association message from host
Greg Kroah-Hartman (1):
Linux 4.19.264
Hannu Hartikainen (1):
USB: add RESET_RESUME quirk for NVIDIA Jetson devices in RCM
Hans Verkuil (4):
media: vivid: s_fbuf: add more sanity checks
media: vivid: dev->bitmap_cap wasn't freed in all cases
media: v4l2-dv-timings: add sanity checks for blanking values
media: videodev2.h: V4L2_DV_BT_BLANKING_HEIGHT should check 'interlaced'
Heiko Carstens (1):
s390/futex: add missing EX_TABLE entry to __futex_atomic_op()
Hyong Youb Kim (1):
net/mlx5e: Do not increment ESN when updating IPsec ESN state
Hyunwoo Kim (1):
fbdev: smscufx: Fix several use-after-free bugs
James Morse (1):
arm64: errata: Remove AES hwcap for COMPAT tasks
Jan Beulich (1):
Xen/gntdev: don't ignore kernel unmapping error
Jason A. Donenfeld (1):
ALSA: au88x0: use explicitly signed char
Jean-Francois Le Fillatre (1):
r8152: add PID for the Lenovo OneLink+ Dock
Jens Glathe (1):
usb: xhci: add XHCI_SPURIOUS_SUCCESS to ASM1042 despite being a V0.96 controller
Jerry Snitselaar (1):
iommu/vt-d: Clean up si_domain in the init_dmars() error path
Johan Hovold (2):
drm/msm/dsi: fix memory corruption with too many bridges drm/msm/hdmi: fix memory corruption with too many bridges
Joseph Qi (2):
ocfs2: clear dinode links count in case of error
ocfs2: fix BUG when iput after ocfs2_mknod fails
José Expósito (1):
HID: magicmouse: Do not set BTN_MOUSE on double report
Justin Chen (1):
usb: bdc: change state when port disconnected
Kai-Heng Feng (1):
ata: ahci: Match EM_MAX_SLOTS with SATA_PMP_MAX_PORTS
M. Vefa Bicakci (1):
xen/gntdev: Prevent leaking grants
Mario Limonciello (1):
PM: hibernate: Allow hybrid sleep to work with s2idle
Mark Tomlinson (1):
tipc: Fix recognition of trial period
Mathias Nyman (1):
xhci: Remove device endpoints from bandwidth list when freeing the device
Matthew Ma (1):
mmc: core: Fix kernel panic when remove non-standard SDIO card
Matti Vaittinen (1):
tools: iio: iio_utils: fix digit calculation
Miquel Raynal (1):
mac802154: Fix LQI recording
Nathan Huckleberry (1):
drm/msm: Fix return type of mdp4_lvds_connector_mode_valid
Neal Cardwell (1):
tcp: fix indefinite deferral of RTO with SACK reneging
Nick Desaulniers (1):
Makefile.debug: re-enable debug info for .S files
Raju Rangoju (2):
amd-xgbe: fix the SFP compliance codes check for DAC cables
amd-xgbe: add the bit rate quirk for Molex cables
Randy Dunlap (1):
arc: iounmap() arg is volatile
Rik van Riel (1):
mm,hugetlb: take hugetlb_lock before decrementing h->resv_huge_pages
Seth Jenkins (1):
mm: /proc/pid/smaps_rollup: fix no vma's null-deref
Shreeya Patel (1):
iio: light: tsl2583: Fix module unloading
Slawomir Laba (2):
i40e: Fix ethtool rx-flow-hash setting for X722
i40e: Fix flow-type by setting GL_HASH_INSET registers
Steven Rostedt (Google) (1):
ALSA: Use del_timer_sync() before freeing timer
Sudeep Holla (1):
PM: domains: Fix handling of unavailable/disabled idle states
Sylwester Dziedziuch (1):
i40e: Fix VF hang when reset is triggered on another VF
Takashi Iwai (1):
ALSA: aoa: Fix I2S device accounting
Thinh Nguyen (2):
usb: dwc3: gadget: Stop processing more requests on IMI
usb: dwc3: gadget: Don't set IMI for no_interrupt
Tony Luck (1):
ACPI: extlog: Handle multiple records
Wei Yongjun (1):
net: ieee802154: fix error return code in dgram_bind()
Werner Sembach (1):
ACPI: video: Force backlight native for more TongFang devices
Xiaobo Liu (1):
net/atm: fix proc_mpc_write incorrect return value
Xin Long (1):
tipc: fix a null-ptr-deref in tipc_topsrv_accept
Yang Yingliang (6):
net: hns: fix possible memory leak in hnae_ae_register()
ALSA: ac97: fix possible memory leak in snd_ac97_dev_register()
net: netsec: fix error handling in netsec_register_mdio()
net: ksz884x: fix missing pci_disable_device() on error in pcidev_init()
ALSA: aoa: i2sbus: fix possible memory leak in i2sbus_add_dev()
net: ehea: fix possible memory leak in ehea_register_port()
Zhang Changzhong (1):
net: lantiq_etop: don't free skb when returning NETDEV_TX_BUSY
Zhang Rui (1):
hwmon/coretemp: Handle large core ID value
Zhengchao Shao (2):
net: sched: cake: fix null pointer access issue when cake_init() fails
net: fix UAF issue in nfqnl_nf_hook_drop() when ops_init() failed
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.txt +2 -0
@@ -55,7 +55,9 @@ stable kernels. | ARM | Cortex-A57 | #832075 | ARM64_ERRATUM_832075 | | ARM | Cortex-A57 | #852523 | N/A | | ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 | +| ARM | Cortex-A57 | #1742098 | ARM64_ERRATUM_1742098 | | ARM | Cortex-A72 | #853709 | N/A | +| ARM | Cortex-A72 | #1655431 | ARM64_ERRATUM_1742098 | | ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 | | ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 | | ARM | Cortex-A76 | #1463225 | ARM64_ERRATUM_1463225 |
Makefile +4 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 263 +SUBLEVEL = 264 EXTRAVERSION = NAME = "People's Front"
@@ -744,7 +744,9 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g) else KBUILD_CFLAGS += -g endif -ifneq ($(LLVM_IAS),1) +ifeq ($(LLVM_IAS),1) +KBUILD_AFLAGS += -g +else KBUILD_AFLAGS += -Wa,-gdwarf-2 endif endif
arch/arc/include/asm/io.h +1 -1
@@ -35,7 +35,7 @@ static inline void ioport_unmap(void __iomem *addr) { } -extern void iounmap (const void __iomem *addr); +extern void iounmap (const volatile void __iomem *addr);#define ioremap_nocache (phy, sz) ioremap(phy, sz)#define ioremap_wc (phy, sz) ioremap(phy, sz)
arch/arc/mm/ioremap.c +1 -1
@@ -95,7 +95,7 @@ void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,EXPORT_SYMBOL (ioremap_prot); -void iounmap (const void __iomem *addr) +void iounmap (const volatile void __iomem *addr) {/* weird double cast to handle phys_addr_t > 32 bits */ if (arc_uncached_addr_space ((phys_addr_t )(u32 )addr))
arch/arm64/Kconfig +16 -0
@@ -515,6 +515,22 @@ config ARM64_ERRATUM_1542419 If unsure, say Y. +config ARM64_ERRATUM_1742098 + bool "Cortex-A57/A72: 1742098: ELR recorded incorrectly on interrupt taken between cryptographic instructions in a sequence" + depends on COMPAT + default y + help + This option removes the AES hwcap for aarch32 user-space to + workaround erratum 1742098 on Cortex-A57 and Cortex-A72. + + Affected parts may corrupt the AES state if an interrupt is + taken between a pair of AES instructions. These instructions + are only present if the cryptography extensions are present. + All software should have a fallback implementation for CPUs + that don't implement the cryptography extensions. + + If unsure, say Y. + config CAVIUM_ERRATUM_22375 bool "Cavium erratum 22375, 24313" default y
arch/arm64/include/asm/cpucaps.h +2 -1
@@ -55,7 +55,8 @@#define ARM64_SSBS 34#define ARM64_WORKAROUND_1542419 35#define ARM64_SPECTRE_BHB 36 +#define ARM64_WORKAROUND_1742098 37 -#define ARM64_NCAPS 37 +#define ARM64_NCAPS 38#endif /* __ASM_CPUCAPS_H */
arch/arm64/kernel/cpu_errata.c +17 -0
@@ -683,6 +683,15 @@ static const struct midr_range arm64_harden_el2_vectors[] = {#endif +#ifdef CONFIG_ARM64_ERRATUM_1742098 +static struct midr_range broken_aarch32_aes[] = { +MIDR_RANGE (MIDR_CORTEX_A57 ,0 ,1 ,0xf ,0xf ), +MIDR_ALL_VERSIONS (MIDR_CORTEX_A72 ), + {}, +}; +#endif + + const struct arm64_cpu_capabilities arm64_errata[] = { #if defined(CONFIG_ARM64_ERRATUM_826319) || \ defined(CONFIG_ARM64_ERRATUM_827319) || \
@@ -883,6 +892,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = { .matches = has_neoverse_n1_erratum_1542419, .cpu_enable = cpu_enable_trap_ctr_access, }, +#endif +#ifdef CONFIG_ARM64_ERRATUM_1742098 + { + .desc = "ARM erratum 1742098", + .capability = ARM64_WORKAROUND_1742098, + CAP_MIDR_RANGE_LIST(broken_aarch32_aes), + .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, + }, #endif { }
arch/arm64/kernel/cpufeature.c +12 -1
@@ -31,6 +31,7 @@#include <asm/cpufeature.h> #include <asm/cpu_ops.h> #include <asm/fpsimd.h> +#include <asm/hwcap.h> #include <asm/mmu_context.h> #include <asm/processor.h> #include <asm/sysreg.h>
@@ -1154,6 +1155,14 @@ static void cpu_enable_ssbs(const struct arm64_cpu_capabilities *__unused) }#endif /* CONFIG_ARM64_SSBD */ +static void elf_hwcap_fixup (void ) +{ +#ifdef CONFIG_ARM64_ERRATUM_1742098 +if (cpus_have_const_cap (ARM64_WORKAROUND_1742098 )) + compat_elf_hwcap2 &= ~COMPAT_HWCAP2_AES ; +#endif /* ARM64_ERRATUM_1742098 */ +} +static const struct arm64_cpu_capabilities arm64_features[] = { { .desc ="GIC system register CPU interface" ,
@@ -1802,8 +1811,10 @@ void __init setup_cpu_features(void)mark_const_caps_ready ();setup_elf_hwcaps (arm64_elf_hwcaps); -if (system_supports_32bit_el0 ()) +if (system_supports_32bit_el0 ()) {setup_elf_hwcaps (compat_elf_hwcaps); +elf_hwcap_fixup (); + }if (system_uses_ttbr0_pan ())pr_info ("emulated: Privileged Access Never (PAN) using TTBR0_EL1 switching\n" );
arch/s390/include/asm/futex.h +2 -1
@@ -16,7 +16,8 @@"3: jl 1b\n" \" lhi %0,0\n" \"4: sacf 768\n" \ - EX_TABLE(0b,4b) EX_TABLE(2b,4b) EX_TABLE(3b,4b) \ + EX_TABLE(0b,4b) EX_TABLE(1b,4b) \ + EX_TABLE(2b,4b) EX_TABLE(3b,4b) \ : "=d" (ret), "=&d" (oldval), "=&d" (newval), \" =m" (*uaddr) \ : "0" (-EFAULT), "d" (oparg), "a" (uaddr), \
arch/x86/kernel/cpu/microcode/amd.c +13 -3
@@ -222,7 +222,13 @@ apply_microcode_early_amd(u32 cpuid_1_eax, void *ucode, size_t size, bool save_preturn ret;native_rdmsr (MSR_AMD64_PATCH_LEVEL , rev, dummy); -if (rev >= mc->hdr.patch_id) + +/* +* Allow application of the same revision to pick up SMT-specific +* changes even if the revision of the other SMT thread is already +* up-to-date. +*/ +if (rev > mc->hdr.patch_id)return ret;if (!__apply_microcode_amd (mc)) {
@@ -304,8 +310,12 @@ void load_ucode_amd_ap(unsigned int cpuid_1_eax)native_rdmsr (MSR_AMD64_PATCH_LEVEL , rev, dummy); -/* Check whether we have saved a new patch already: */ -if (*new_rev && rev < mc->hdr.patch_id) { +/* +* Check whether a new patch has been saved already. Also, allow application of +* the same revision in order to pick up SMT-thread-specific configuration even +* if the sibling SMT thread already has an up-to-date revision. +*/ +if (*new_rev && rev <= mc->hdr.patch_id) {if (!__apply_microcode_amd (mc)) { *new_rev = mc->hdr.patch_id;return ;
arch/x86/kernel/unwind_orc.c +1 -1
@@ -668,7 +668,7 @@ void __unwind_start(struct unwind_state *state, struct task_struct *task,/* Otherwise, skip ahead to the user-specified starting frame: */ while (!unwind_done (state) && (!on_stack (&state->stack_info, first_frame,sizeof (long )) || - state->sp < (unsigned long )first_frame)) + state->sp <= (unsigned long )first_frame))unwind_next_frame (state);return ;
drivers/acpi/acpi_extlog.c +20 -13
@@ -13,6 +13,7 @@#include <linux/ratelimit.h> #include <linux/edac.h> #include <linux/ras.h> +#include <acpi/ghes.h> #include <asm/cpu.h> #include <asm/mce.h>
@@ -141,8 +142,8 @@ static int extlog_print(struct notifier_block *nb, unsigned long val,int cpu = mce->extcpu;struct acpi_hest_generic_status *estatus, *tmp;struct acpi_hest_generic_data *gdata; -const guid_t *fru_id = &guid_null; -char *fru_text ="" ; +const guid_t *fru_id; +char *fru_text;guid_t *sec_type;static u32 err_seq;
@@ -163,17 +164,23 @@ static int extlog_print(struct notifier_block *nb, unsigned long val,/* log event via trace */ err_seq++; - gdata = (struct acpi_hest_generic_data *)(tmp +1 ); -if (gdata->validation_bits &CPER_SEC_VALID_FRU_ID ) - fru_id = (guid_t *)gdata->fru_id; -if (gdata->validation_bits &CPER_SEC_VALID_FRU_TEXT ) - fru_text = gdata->fru_text; - sec_type = (guid_t *)gdata->section_type; -if (guid_equal (sec_type, &CPER_SEC_PLATFORM_MEM )) { -struct cper_sec_mem_err *mem = (void *)(gdata +1 ); -if (gdata->error_data_length >=sizeof (*mem)) -trace_extlog_mem_event (mem, err_seq, fru_id, fru_text, - (u8 )gdata->error_severity); +apei_estatus_for_each_section (tmp, gdata) { +if (gdata->validation_bits &CPER_SEC_VALID_FRU_ID ) + fru_id = (guid_t *)gdata->fru_id; +else + fru_id = &guid_null; +if (gdata->validation_bits &CPER_SEC_VALID_FRU_TEXT ) + fru_text = gdata->fru_text; +else + fru_text ="" ; + sec_type = (guid_t *)gdata->section_type; +if (guid_equal (sec_type, &CPER_SEC_PLATFORM_MEM )) { +struct cper_sec_mem_err *mem = (void *)(gdata +1 ); + +if (gdata->error_data_length >=sizeof (*mem)) +trace_extlog_mem_event (mem, err_seq, fru_id, fru_text, + (u8 )gdata->error_severity); + } } out:
drivers/acpi/video_detect.c +64 -0
70 lines not on this page · raw message
drivers/ata/ahci.h +1 -1
@@ -265,7 +265,7 @@ enum {PCS_7 =0x94 ,/* 7+ port PCS (Denverton) */ /* em constants */ -EM_MAX_SLOTS =8 , +EM_MAX_SLOTS =SATA_PMP_MAX_PORTS , EM_MAX_RETRY = 5,/* em_ctl bits */
drivers/ata/ahci_imx.c +1 -1
@@ -1250,4 +1250,4 @@ module_platform_driver(imx_ahci_driver);MODULE_DESCRIPTION ("Freescale i.MX AHCI SATA platform driver" );MODULE_AUTHOR ("Richard Zhu <[email protected]>" );MODULE_LICENSE ("GPL" ); -MODULE_ALIAS ("ahci:imx" ); +MODULE_ALIAS ("platform:" DRV_NAME );
drivers/base/power/domain.c +4 -0
@@ -2459,6 +2459,10 @@ static int genpd_iterate_idle_states(struct device_node *dn, np = it.node;if (!of_match_node (idle_state_match, np))continue ; + +if (!of_device_is_available (np)) +continue ; +if (states) { ret =genpd_parse_state (&states[i], np);if (ret) {
drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c +3 -2
@@ -74,8 +74,9 @@ static int mdp4_lvds_connector_get_modes(struct drm_connector *connector)return ret; } -static int mdp4_lvds_connector_mode_valid (struct drm_connector *connector, -struct drm_display_mode *mode) +static enum drm_mode_status +mdp4_lvds_connector_mode_valid (struct drm_connector *connector, +struct drm_display_mode *mode) {struct mdp4_lvds_connector *mdp4_lvds_connector =to_mdp4_lvds_connector (connector);
drivers/gpu/drm/msm/dsi/dsi.c +6 -0
@@ -200,6 +200,12 @@ int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev,return -EINVAL ; priv = dev->dev_private; + +if (priv->num_bridges ==ARRAY_SIZE (priv->bridges)) { +DRM_DEV_ERROR (dev->dev,"too many bridges\n" ); +return -ENOSPC ; + } + msm_dsi->dev = dev; ret =msm_dsi_host_modeset_init (msm_dsi->host, dev);
drivers/gpu/drm/msm/hdmi/hdmi.c +5 -0
@@ -299,6 +299,11 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi,struct platform_device *pdev = hdmi->pdev;int ret; +if (priv->num_bridges ==ARRAY_SIZE (priv->bridges)) { +DRM_DEV_ERROR (dev->dev,"too many bridges\n" ); +return -ENOSPC ; + } + hdmi->dev = dev; hdmi->encoder = encoder;
drivers/hid/hid-magicmouse.c +1 -1
@@ -343,7 +343,7 @@ static int magicmouse_raw_event(struct hid_device *hdev,magicmouse_raw_event (hdev, report, data +2 , data[1 ]);magicmouse_raw_event (hdev, report, data +2 + data[1 ], size -2 - data[1 ]); -break ; +return 0 ;default :return 0 ; }
drivers/hwmon/coretemp.c +41 -15
127 lines not on this page · raw message
drivers/iio/light/tsl2583.c +1 -1
@@ -866,7 +866,7 @@ static int tsl2583_probe(struct i2c_client *clientp, TSL2583_POWER_OFF_DELAY_MS);pm_runtime_use_autosuspend (&clientp->dev); - ret =devm_iio_device_register (indio_dev->dev.parent, indio_dev); + ret =iio_device_register (indio_dev);if (ret) {dev_err (&clientp->dev,"%s: iio registration failed\n" , __func__);
drivers/iommu/intel-iommu.c +5 -0
@@ -2800,6 +2800,7 @@ static int __init si_domain_init(int hw)if (md_domain_init (si_domain,DEFAULT_DOMAIN_ADDRESS_WIDTH )) {domain_exit (si_domain); + si_domain =NULL ;return -EFAULT ; }
@@ -3502,6 +3503,10 @@ static int __init init_dmars(void)disable_dmar_iommu (iommu);free_dmar_iommu (iommu); } +if (si_domain) { +domain_exit (si_domain); + si_domain =NULL ; + }kfree (g_iommus);
drivers/media/platform/qcom/venus/vdec.c +2 -0
@@ -155,6 +155,8 @@ vdec_try_fmt_common(struct venus_inst *inst, struct v4l2_format *f)else return NULL ; fmt =find_format (inst, pixmp->pixelformat, f->type); +if (!fmt) +return NULL ; } pixmp->width = clamp(pixmp->width, frame_width_min(inst),
drivers/media/platform/vivid/vivid-core.c +22 -0
@@ -297,6 +297,28 @@ static int vidioc_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *areturn vivid_vid_out_g_fbuf (file, fh, a); } +/* +* Only support the framebuffer of one of the vivid instances. +* Anything else is rejected. +*/ +bool vivid_validate_fb (const struct v4l2_framebuffer *a) +{ +struct vivid_dev *dev; +int i; + +for (i =0 ; i < n_devs; i++) { + dev = vivid_devs[i]; +if (!dev || !dev->video_pbase) +continue ; +if ((unsigned long )a->base == dev->video_pbase && + a->fmt.width <= dev->display_width && + a->fmt.height <= dev->display_height && + a->fmt.bytesperline <= dev->display_byte_stride) +return true; + } +return false; +} +static int vidioc_s_fbuf (struct file *file,void *fh,const struct v4l2_framebuffer *a) {struct video_device *vdev =video_devdata (file);
drivers/media/platform/vivid/vivid-core.h +2 -0
@@ -551,4 +551,6 @@ static inline bool vivid_is_hdmi_out(const struct vivid_dev *dev) return dev->output_type[dev->output] == HDMI; } +bool vivid_validate_fb (const struct v4l2_framebuffer *a); +#endif
drivers/media/platform/vivid/vivid-vid-cap.c +21 -6
@@ -441,6 +441,12 @@ void vivid_update_format_cap(struct vivid_dev *dev, bool keep_controls)tpg_reset_source (&dev->tpg, dev->src_rect.width, dev->src_rect.height, dev->field_cap); dev->crop_cap = dev->src_rect; dev->crop_bounds_cap = dev->src_rect; +if (dev->bitmap_cap && + (dev->compose_cap.width != dev->crop_cap.width || + dev->compose_cap.height != dev->crop_cap.height)) { +vfree (dev->bitmap_cap); + dev->bitmap_cap =NULL ; + } dev->compose_cap = dev->crop_cap;if (V4L2_FIELD_HAS_T_OR_B (dev->field_cap)) dev->compose_cap.height /=2 ;
@@ -871,6 +877,8 @@ int vivid_vid_cap_s_selection(struct file *file, void *fh, struct v4l2_selectionstruct vivid_dev *dev =video_drvdata (file);struct v4l2_rect *crop = &dev->crop_cap;struct v4l2_rect *compose = &dev->compose_cap; +unsigned orig_compose_w = compose->width; +unsigned orig_compose_h = compose->height;unsigned factor =V4L2_FIELD_HAS_T_OR_B (dev->field_cap) ?2 :1 ;int ret;
@@ -987,17 +995,17 @@ int vivid_vid_cap_s_selection(struct file *file, void *fh, struct v4l2_selection s->r.height /= factor; }v4l2_rect_map_inside (&s->r, &dev->fmt_cap_rect); -if (dev->bitmap_cap && (compose->width != s->r.width || - compose->height != s->r.height)) { -vfree (dev->bitmap_cap); - dev->bitmap_cap =NULL ; - } *compose = s->r;break ;default :return -EINVAL ; } +if (dev->bitmap_cap && (compose->width != orig_compose_w || + compose->height != orig_compose_h)) { +vfree (dev->bitmap_cap); + dev->bitmap_cap =NULL ; + }tpg_s_crop_compose (&dev->tpg, crop, compose);return 0 ; }
@@ -1240,7 +1248,14 @@ int vivid_vid_cap_s_fbuf(struct file *file, void *fh,return -EINVAL ;if (a->fmt.bytesperline < (a->fmt.width * fmt->bit_depth[0 ]) /8 )return -EINVAL ; -if (a->fmt.height * a->fmt.bytesperline < a->fmt.sizeimage) +if (a->fmt.bytesperline > a->fmt.sizeimage / a->fmt.height) +return -EINVAL ; + +/* +* Only support the framebuffer of one of the vivid instances. +* Anything else is rejected. +*/ +if (!vivid_validate_fb (a))return -EINVAL ; dev->fb_vbase_cap =phys_to_virt ((unsigned long )a->base);
drivers/media/v4l2-core/v4l2-dv-timings.c +14 -0
@@ -161,6 +161,20 @@ bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t, (bt->interlaced && !(caps &V4L2_DV_BT_CAP_INTERLACED )) || (!bt->interlaced && !(caps & V4L2_DV_BT_CAP_PROGRESSIVE))) return false; + +/* sanity checks for the blanking timings */ +if (!bt->interlaced && + (bt->il_vbackporch || bt->il_vsync || bt->il_vfrontporch)) +return false; +if (bt->hfrontporch >2 * bt->width || + bt->hsync >1024 || bt->hbackporch >1024 ) +return false; +if (bt->vfrontporch >4096 || + bt->vsync >128 || bt->vbackporch >4096 ) +return false; +if (bt->interlaced && (bt->il_vfrontporch >4096 || + bt->il_vsync >128 || bt->il_vbackporch >4096 )) +return false;return fnc ==NULL ||fnc (t, fnc_handle); }EXPORT_SYMBOL_GPL (v4l2_valid_dv_timings);
drivers/media/v4l2-core/v4l2-mem2mem.c +45 -17
101 lines not on this page · raw message
drivers/mmc/core/sdio_bus.c +2 -1
@@ -264,7 +264,8 @@ static void sdio_release_func(struct device *dev) {struct sdio_func *func =dev_to_sdio_func (dev); -sdio_free_func_cis (func); +if (!(func->card->quirks &MMC_QUIRK_NONSTD_SDIO )) +sdio_free_func_cis (func);kfree (func->info);kfree (func->tmpbuf);
drivers/net/can/mscan/mpc5xxx_can.c +5 -3
@@ -336,14 +336,14 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev) &mscan_clksrc);if (!priv->can.clock.freq) {dev_err (&ofdev->dev,"couldn't get MSCAN clock properties\n" ); - goto exit_free_mscan; + goto exit_put_clock; } err =register_mscandev (dev, mscan_clksrc);if (err) {dev_err (&ofdev->dev,"registering %s failed (err=%d)\n" ,DRV_NAME , err); - goto exit_free_mscan; + goto exit_put_clock; } dev_info(&ofdev->dev, "MSCAN at 0x%p, irq %d, clock %d Hz\n",
@@ -351,7 +351,9 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev)return 0 ; -exit_free_mscan: +exit_put_clock: +if (data->put_clock) + data->put_clock (ofdev);free_candev (dev); exit_dispose_irq:irq_dispose_mapping (irq);
drivers/net/can/rcar/rcar_canfd.c +4 -2
@@ -1079,7 +1079,7 @@ static irqreturn_t rcar_canfd_global_interrupt(int irq, void *dev_id)struct rcar_canfd_global *gpriv = dev_id;struct net_device *ndev;struct rcar_canfd_channel *priv; -u32 sts, gerfl; +u32 sts, cc, gerfl;u32 ch, ridx;/* Global error interrupts still indicate a condition specific
@@ -1097,7 +1097,9 @@ static irqreturn_t rcar_canfd_global_interrupt(int irq, void *dev_id)/* Handle Rx interrupts */ sts =rcar_canfd_read (priv->base,RCANFD_RFSTS (ridx)); -if (likely (sts &RCANFD_RFSTS_RFIF )) { + cc =rcar_canfd_read (priv->base,RCANFD_RFCC (ridx)); +if (likely (sts &RCANFD_RFSTS_RFIF && + cc &RCANFD_RFCC_RFIE )) {if (napi_schedule_prep (&priv->napi)) {/* Disable Rx FIFO interrupts */ rcar_canfd_clear_bit(priv->base,
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +2 -2
@@ -1845,7 +1845,7 @@ static int kvaser_usb_hydra_start_chip(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->start_comp); +reinit_completion (&priv->start_comp); err =kvaser_usb_hydra_send_simple_cmd (priv->dev,CMD_START_CHIP_REQ , priv->channel);
@@ -1863,7 +1863,7 @@ static int kvaser_usb_hydra_stop_chip(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->stop_comp); +reinit_completion (&priv->stop_comp);/* Make sure we do not report invalid BUS_OFF from CMD_CHIP_STATE_EVENT * see comment in kvaser_usb_hydra_update_state()
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +2 -2
@@ -1324,7 +1324,7 @@ static int kvaser_usb_leaf_start_chip(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->start_comp); +reinit_completion (&priv->start_comp); err =kvaser_usb_leaf_send_simple_cmd (priv->dev,CMD_START_CHIP , priv->channel);
@@ -1342,7 +1342,7 @@ static int kvaser_usb_leaf_stop_chip(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->stop_comp); +reinit_completion (&priv->stop_comp); err =kvaser_usb_leaf_send_simple_cmd (priv->dev,CMD_STOP_CHIP , priv->channel);
drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +12 -5
@@ -238,6 +238,7 @@ enum xgbe_sfp_speed {#define XGBE_SFP_BASE_BR_1GBE_MAX 0x0d#define XGBE_SFP_BASE_BR_10GBE_MIN 0x64#define XGBE_SFP_BASE_BR_10GBE_MAX 0x68 +#define XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX 0x78#define XGBE_SFP_BASE_CU_CABLE_LEN 18
@@ -283,6 +284,8 @@ struct xgbe_sfp_eeprom {#define XGBE_BEL_FUSE_VENDOR "BEL-FUSE "#define XGBE_BEL_FUSE_PARTNO "1GBT-SFP06 " +#define XGBE_MOLEX_VENDOR "Molex Inc. " +struct xgbe_sfp_ascii {union {char vendor[XGBE_SFP_BASE_VENDOR_NAME_LEN +1 ];
@@ -833,7 +836,11 @@ static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom,break ;case XGBE_SFP_SPEED_10000 : min =XGBE_SFP_BASE_BR_10GBE_MIN ; - max =XGBE_SFP_BASE_BR_10GBE_MAX ; +if (memcmp (&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME ], +XGBE_MOLEX_VENDOR ,XGBE_SFP_BASE_VENDOR_NAME_LEN ) ==0 ) + max =XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX ; +else + max =XGBE_SFP_BASE_BR_10GBE_MAX ;break ;default :return false;
@@ -1138,7 +1145,10 @@ static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata) }/* Determine the type of SFP */ -if (sfp_base[XGBE_SFP_BASE_10GBE_CC ] &XGBE_SFP_BASE_10GBE_CC_SR ) +if (phy_data->sfp_cable ==XGBE_SFP_CABLE_PASSIVE && +xgbe_phy_sfp_bit_rate (sfp_eeprom,XGBE_SFP_SPEED_10000 )) + phy_data->sfp_base =XGBE_SFP_BASE_10000_CR ; +else if (sfp_base[XGBE_SFP_BASE_10GBE_CC ] &XGBE_SFP_BASE_10GBE_CC_SR ) phy_data->sfp_base =XGBE_SFP_BASE_10000_SR ;else if (sfp_base[XGBE_SFP_BASE_10GBE_CC ] &XGBE_SFP_BASE_10GBE_CC_LR ) phy_data->sfp_base =XGBE_SFP_BASE_10000_LR ;
@@ -1154,9 +1164,6 @@ static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata) phy_data->sfp_base =XGBE_SFP_BASE_1000_CX ; else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_T) phy_data->sfp_base = XGBE_SFP_BASE_1000_T; - else if ((phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE) && - xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000)) - phy_data->sfp_base = XGBE_SFP_BASE_10000_CR;switch (phy_data->sfp_base) {case XGBE_SFP_BASE_1000_T :
drivers/net/ethernet/hisilicon/hns/hnae.c +3 -1
@@ -423,8 +423,10 @@ int hnae_ae_register(struct hnae_ae_dev *hdev, struct module *owner) hdev->cls_dev.release = hnae_release; (void )dev_set_name (&hdev->cls_dev,"hnae%d" , hdev->id); ret =device_register (&hdev->cls_dev); -if (ret) +if (ret) { +put_device (&hdev->cls_dev);return ret; + }__module_get (THIS_MODULE );
drivers/net/ethernet/ibm/ehea/ehea_main.c +1 -0
@@ -2916,6 +2916,7 @@ static struct device *ehea_register_port(struct ehea_port *port, ret =of_device_register (&port->ofdev);if (ret) {pr_err ("failed to register device. ret=%d\n" , ret); +put_device (&port->ofdev.dev); goto out; }
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +60 -40
158 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_type.h +4 -0
@@ -1462,6 +1462,10 @@ struct i40e_lldp_variables {#define I40E_PFQF_CTL_0_HASHLUTSIZE_512 0x00010000/* INPUT SET MASK for RSS, flow director, and flexible payload */ +#define I40E_X722_L3_SRC_SHIFT 49 +#define I40E_X722_L3_SRC_MASK (0x3ULL << I40E_X722_L3_SRC_SHIFT) +#define I40E_X722_L3_DST_SHIFT 41 +#define I40E_X722_L3_DST_MASK (0x3ULL << I40E_X722_L3_DST_SHIFT)#define I40E_L3_SRC_SHIFT 47#define I40E_L3_SRC_MASK (0x3ULL << I40E_L3_SRC_SHIFT)#define I40E_L3_V6_SRC_SHIFT 43
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +32 -11
86 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h +1 -0
@@ -37,6 +37,7 @@ enum i40e_vf_states {I40E_VF_STATE_MC_PROMISC ,I40E_VF_STATE_UC_PROMISC ,I40E_VF_STATE_PRE_ENABLE , + I40E_VF_STATE_RESETTING };/* VF capabilities */
drivers/net/ethernet/lantiq_etop.c +0 -1
@@ -480,7 +480,6 @@ ltq_etop_tx(struct sk_buff *skb, struct net_device *dev) len = skb->len <ETH_ZLEN ?ETH_ZLEN : skb->len;if ((desc->ctl & (LTQ_DMA_OWN |LTQ_DMA_C )) || ch->skb[ch->dma.desc]) { -dev_kfree_skb_any (skb);netdev_err (dev,"tx ring full\n" );netif_tx_stop_queue (txq);return NETDEV_TX_BUSY ;
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +0 -3
@@ -117,7 +117,6 @@ static bool mlx5e_ipsec_update_esn_state(struct mlx5e_ipsec_sa_entry *sa_entry)struct xfrm_replay_state_esn *replay_esn;u32 seq_bottom;u8 overlap; -u32 *esn;if (!(sa_entry->x->props.flags &XFRM_STATE_ESN )) { sa_entry->esn_state.trigger =0 ;
@@ -130,11 +129,9 @@ static bool mlx5e_ipsec_update_esn_state(struct mlx5e_ipsec_sa_entry *sa_entry) sa_entry->esn_state.esn =xfrm_replay_seqhi (sa_entry->x,htonl (seq_bottom)); - esn = &sa_entry->esn_state.esn; sa_entry->esn_state.trigger =1 ;if (unlikely (overlap && seq_bottom <MLX5E_IPSEC_ESN_SCOPE_MID )) { - ++(*esn); sa_entry->esn_state.overlap =0 ;return true; } else if (unlikely(!overlap &&
drivers/net/ethernet/micrel/ksz884x.c +1 -1
@@ -6936,7 +6936,7 @@ static int pcidev_init(struct pci_dev *pdev, const struct pci_device_id *id)char banner[sizeof (version)];struct ksz_switch *sw =NULL ; - result =pci_enable_device (pdev); + result =pcim_enable_device (pdev);if (result)return result;
drivers/net/ethernet/socionext/netsec.c +2 -0
@@ -1549,11 +1549,13 @@ static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr) ret =PTR_ERR (priv->phydev);dev_err (priv->dev,"get_phy_device err(%d)\n" , ret); priv->phydev =NULL ; +mdiobus_unregister (bus);return -ENODEV ; } ret =phy_device_register (priv->phydev);if (ret) { +phy_device_free (priv->phydev);mdiobus_unregister (bus);dev_err (priv->dev,"phy_device_register err(%d)\n" , ret);
drivers/net/hyperv/hyperv_net.h +3 -0
@@ -950,6 +950,9 @@ struct net_device_context {u32 vf_alloc;/* Serial number of the VF to team with */ u32 vf_serial; + +/* completion variable to confirm vf association */ +struct completion vf_add; };/* Per channel data */
drivers/net/hyperv/netvsc.c +4 -0
@@ -1227,6 +1227,10 @@ static void netvsc_send_vf(struct net_device *ndev, net_device_ctx->vf_alloc = nvmsg->msg.v4_msg.vf_assoc.allocated; net_device_ctx->vf_serial = nvmsg->msg.v4_msg.vf_assoc.serial; + +if (net_device_ctx->vf_alloc) +complete (&net_device_ctx->vf_add); +netdev_info (ndev,"VF slot %u %s\n" , net_device_ctx->vf_serial, net_device_ctx->vf_alloc ?"added" :"removed" );
drivers/net/hyperv/netvsc_drv.c +20 -0
@@ -2121,6 +2121,7 @@ static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev) {struct device *parent = vf_netdev->dev.parent;struct net_device_context *ndev_ctx; +struct net_device *ndev;struct pci_dev *pdev;u32 serial;
@@ -2147,6 +2148,18 @@ static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev)return hv_get_drvdata (ndev_ctx->device_ctx); } +/* Fallback path to check synthetic vf with +* help of mac addr +*/ +list_for_each_entry (ndev_ctx, &netvsc_dev_list, list) { + ndev =hv_get_drvdata (ndev_ctx->device_ctx); +if (ether_addr_equal (vf_netdev->perm_addr, ndev->perm_addr)) { +netdev_notice (vf_netdev, +"falling back to mac addr based matching\n" ); +return ndev; + } + } +netdev_notice (vf_netdev,"no netdev found for vf serial:%u\n" , serial);return NULL ;
@@ -2216,6 +2229,11 @@ static int netvsc_vf_changed(struct net_device *vf_netdev)if (!netvsc_dev)return NOTIFY_DONE ; +if (vf_is_up && !net_device_ctx->vf_alloc) { +netdev_info (ndev,"Waiting for the VF association from host\n" ); +wait_for_completion (&net_device_ctx->vf_add); + } +netvsc_switch_datapath (ndev, vf_is_up);netdev_info (ndev,"Data path switched %s VF: %s\n" , vf_is_up ?"to" :"from" , vf_netdev->name);
@@ -2237,6 +2255,7 @@ static int netvsc_unregister_vf(struct net_device *vf_netdev)netdev_info (ndev,"VF unregistering: %s\n" , vf_netdev->name); +reinit_completion (&net_device_ctx->vf_add);netdev_rx_handler_unregister (vf_netdev);netdev_upper_dev_unlink (vf_netdev, ndev);RCU_INIT_POINTER (net_device_ctx->vf_netdev,NULL );
@@ -2274,6 +2293,7 @@ static int netvsc_probe(struct hv_device *dev,INIT_DELAYED_WORK (&net_device_ctx->dwork, netvsc_link_change); +init_completion (&net_device_ctx->vf_add);spin_lock_init (&net_device_ctx->lock);INIT_LIST_HEAD (&net_device_ctx->reconfig_events);INIT_DELAYED_WORK (&net_device_ctx->vf_takeover, netvsc_vf_setup);
drivers/net/usb/cdc_ether.c +7 -0
@@ -777,6 +777,13 @@ static const struct usb_device_id products[] = { },#endif +/* Lenovo ThinkPad OneLink+ Dock (based on Realtek RTL8153) */ +{ +USB_DEVICE_AND_INTERFACE_INFO (LENOVO_VENDOR_ID ,0x3054 ,USB_CLASS_COMM , + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info =0 , +}, + /* ThinkPad USB-C Dock (based on Realtek RTL8153) */ { USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0x3062, USB_CLASS_COMM,
drivers/net/usb/r8152.c +1 -0
@@ -5327,6 +5327,7 @@ static const struct usb_device_id rtl8152_table[] = { {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0927)}, {REALTEK_USB_DEVICE(VENDOR_ID_SAMSUNG, 0xa101)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x304f)}, + {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3054)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3062)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3069)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7205)},
drivers/usb/core/quirks.c +9 -0
@@ -388,6 +388,15 @@ static const struct usb_device_id usb_quirk_list[] = {/* Kingston DataTraveler 3.0 */ { USB_DEVICE(0x0951, 0x1666), .driver_info = USB_QUIRK_NO_LPM }, + /* NVIDIA Jetson devices in Force Recovery mode */ + { USB_DEVICE(0x0955, 0x7018), .driver_info = USB_QUIRK_RESET_RESUME }, + { USB_DEVICE(0x0955, 0x7019), .driver_info = USB_QUIRK_RESET_RESUME }, + { USB_DEVICE(0x0955, 0x7418), .driver_info = USB_QUIRK_RESET_RESUME }, + { USB_DEVICE(0x0955, 0x7721), .driver_info = USB_QUIRK_RESET_RESUME }, + { USB_DEVICE(0x0955, 0x7c18), .driver_info = USB_QUIRK_RESET_RESUME }, + { USB_DEVICE(0x0955, 0x7e19), .driver_info = USB_QUIRK_RESET_RESUME }, + { USB_DEVICE(0x0955, 0x7f21), .driver_info = USB_QUIRK_RESET_RESUME }, + /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF },
drivers/usb/dwc3/gadget.c +6 -2
@@ -981,8 +981,8 @@ static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb, trb->ctrl =DWC3_TRBCTL_ISOCHRONOUS ; } -/* always enable Interrupt on Missed ISOC */ - trb->ctrl |=DWC3_TRB_CTRL_ISP_IMI ; +if (!no_interrupt && !chain) + trb->ctrl |=DWC3_TRB_CTRL_ISP_IMI ;break ;case USB_ENDPOINT_XFER_BULK :
@@ -2363,6 +2363,10 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep,if (event->status &DEPEVT_STATUS_SHORT && !chain)return 1 ; +if ((trb->ctrl &DWC3_TRB_CTRL_ISP_IMI ) && +DWC3_TRB_SIZE_TRBSTS (trb->size) ==DWC3_TRBSTS_MISSED_ISOC ) +return 1 ; +if ((trb->ctrl &DWC3_TRB_CTRL_IOC ) || (trb->ctrl &DWC3_TRB_CTRL_LST ))return 1 ;
drivers/usb/gadget/udc/bdc/bdc_udc.c +1 -0
@@ -151,6 +151,7 @@ static void bdc_uspc_disconnected(struct bdc *bdc, bool reinit) bdc->delayed_status = false; bdc->reinit = reinit; bdc->test_mode = false; +usb_gadget_set_state (&bdc->gadget,USB_STATE_NOTATTACHED ); }/* TNotify wkaeup timer */
drivers/usb/host/xhci-mem.c +12 -8
@@ -906,15 +906,19 @@ void xhci_free_virt_device(struct xhci_hcd *xhci, int slot_id)if (dev->eps[i].stream_info)xhci_free_stream_info (xhci, dev->eps[i].stream_info); -/* Endpoints on the TT/root port lists should have been removed -* when usb_disable_device() was called for the device. -* We can't drop them anyway, because the udev might have gone -* away by this point, and we can't tell what speed it was. +/* +* Endpoints are normally deleted from the bandwidth list when +* endpoints are dropped, before device is freed. +* If host is dying or being removed then endpoints aren't +* dropped cleanly, so delete the endpoint from list here. +* Only applicable for hosts with software bandwidth checking. */ -if (!list_empty (&dev->eps[i].bw_endpoint_list)) -xhci_warn (xhci,"Slot %u endpoint %u " -"not removed from BW list!\n" , - slot_id, i); + +if (!list_empty (&dev->eps[i].bw_endpoint_list)) { +list_del_init (&dev->eps[i].bw_endpoint_list); +xhci_dbg (xhci,"Slot %u endpoint %u not removed from BW list!\n" , + slot_id, i); + } }/* If this is a hub, free the TT(s) from the TT list */ xhci_free_tt_info (xhci, dev, slot_id);
drivers/usb/host/xhci-pci.c +7 -1
@@ -242,8 +242,14 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) xhci->quirks |=XHCI_BROKEN_STREAMS ;if (pdev->vendor ==PCI_VENDOR_ID_ASMEDIA && - pdev->device ==PCI_DEVICE_ID_ASMEDIA_1042_XHCI ) + pdev->device ==PCI_DEVICE_ID_ASMEDIA_1042_XHCI ) { +/* +* try to tame the ASMedia 1042 controller which reports 0.96 +* but appears to behave more like 1.0 +*/ + xhci->quirks |=XHCI_SPURIOUS_SUCCESS ; xhci->quirks |=XHCI_BROKEN_STREAMS ; + }if (pdev->vendor ==PCI_VENDOR_ID_ASMEDIA && pdev->device ==PCI_DEVICE_ID_ASMEDIA_1042A_XHCI ) { xhci->quirks |=XHCI_TRUST_TX_LENGTH ;
drivers/video/fbdev/smscufx.c +30 -25
131 lines not on this page · raw message
drivers/xen/gntdev.c +25 -5
@@ -387,8 +387,7 @@ int gntdev_map_grant_pages(struct gntdev_grant_map *map)for (i =0 ; i < map->count; i++) {if (map->map_ops[i].status == GNTST_okay) { map->unmap_ops[i].handle = map->map_ops[i].handle; -if (!use_ptemod) - alloced++; + alloced++; }else if (!err) err = -EINVAL ;
@@ -397,8 +396,7 @@ int gntdev_map_grant_pages(struct gntdev_grant_map *map)if (use_ptemod) {if (map->kmap_ops[i].status == GNTST_okay) { -if (map->map_ops[i].status == GNTST_okay) - alloced++; + alloced++; map->kunmap_ops[i].handle = map->kmap_ops[i].handle; }else if (!err) err = -EINVAL ;
@@ -414,20 +412,42 @@ static void __unmap_grant_pages_done(int result,unsigned int i;struct gntdev_grant_map *map = data->data;unsigned int offset = data->unmap_ops - map->unmap_ops; +int successful_unmaps =0 ; +int live_grants;for (i =0 ; i < data->count; i++) { +if (map->unmap_ops[offset + i].status == GNTST_okay && + map->unmap_ops[offset + i].handle !=-1 ) + successful_unmaps++; +WARN_ON (map->unmap_ops[offset+i].status && map->unmap_ops[offset+i].handle !=-1 );pr_debug ("unmap handle=%d st=%d\n" , map->unmap_ops[offset+i].handle, map->unmap_ops[offset+i].status); map->unmap_ops[offset+i].handle =-1 ; +if (use_ptemod) { +if (map->kunmap_ops[offset + i].status == GNTST_okay && + map->kunmap_ops[offset + i].handle !=-1 ) + successful_unmaps++; + +WARN_ON (map->kunmap_ops[offset+i].status && + map->kunmap_ops[offset+i].handle !=-1 ); +pr_debug ("kunmap handle=%u st=%d\n" , + map->kunmap_ops[offset+i].handle, + map->kunmap_ops[offset+i].status); + map->kunmap_ops[offset+i].handle =-1 ; + } } +/* * Decrease the live-grant counter. This must happen after the loop to * prevent premature reuse of the grants by gnttab_mmap(). */ -atomic_sub (data->count, &map->live_grants); + live_grants =atomic_sub_return (successful_unmaps, &map->live_grants); +if (WARN_ON (live_grants <0 )) +pr_err ("%s: live_grants became negative (%d) after unmapping %d pages!\n" , + __func__, live_grants, successful_unmaps);/* Release reference taken by __unmap_grant_pages */ gntdev_put_map (NULL , map);
fs/btrfs/backref.c +31 -15
115 lines not on this page · raw message
fs/kernfs/dir.c +4 -1
@@ -1513,8 +1513,11 @@ int kernfs_remove_by_name_ns(struct kernfs_node *parent, const char *name,mutex_lock (&kernfs_mutex); kn =kernfs_find_ns (parent, name, ns); -if (kn) +if (kn) { +kernfs_get (kn);__kernfs_remove (kn); +kernfs_put (kn); + }mutex_unlock (&kernfs_mutex);
fs/ocfs2/namei.c +11 -12
@@ -245,6 +245,7 @@ static int ocfs2_mknod(struct inode *dir,handle_t *handle =NULL ;struct ocfs2_super *osb;struct ocfs2_dinode *dirfe; +struct ocfs2_dinode *fe =NULL ;struct buffer_head *new_fe_bh =NULL ;struct inode *inode =NULL ;struct ocfs2_alloc_context *inode_ac =NULL ;
@@ -395,6 +396,7 @@ static int ocfs2_mknod(struct inode *dir, goto leave; } + fe = (struct ocfs2_dinode *) new_fe_bh->b_data;if (S_ISDIR (mode)) { status =ocfs2_fill_new_dir (osb, handle, dir, inode, new_fe_bh, data_ac, meta_ac);
@@ -460,8 +462,11 @@ static int ocfs2_mknod(struct inode *dir, leave:if (status <0 && did_quota_inode)dquot_free_inode (inode); -if (handle) +if (handle) { +if (status <0 && fe) +ocfs2_set_links_count (fe,0 );ocfs2_commit_trans (osb, handle); + }ocfs2_inode_unlock (dir,1 );if (did_block_signals)
@@ -639,18 +644,9 @@ static int ocfs2_mknod_locked(struct ocfs2_super *osb,return status; } - status =__ocfs2_mknod_locked (dir, inode, dev, new_fe_bh, +return __ocfs2_mknod_locked (dir, inode, dev, new_fe_bh, parent_fe_bh, handle, inode_ac, fe_blkno, suballoc_loc, suballoc_bit); -if (status <0 ) { -u64 bg_blkno =ocfs2_which_suballoc_group (fe_blkno, suballoc_bit); -int tmp =ocfs2_free_suballoc_bits (handle, inode_ac->ac_inode, - inode_ac->ac_bh, suballoc_bit, bg_blkno,1 ); -if (tmp) -mlog_errno (tmp); - } - -return status; } static int ocfs2_mkdir(struct inode *dir,
@@ -2031,8 +2027,11 @@ static int ocfs2_symlink(struct inode *dir, ocfs2_clusters_to_bytes(osb->sb, 1));if (status <0 && did_quota_inode)dquot_free_inode (inode); -if (handle) +if (handle) { +if (status <0 && fe) +ocfs2_set_links_count (fe,0 );ocfs2_commit_trans (osb, handle); + }ocfs2_inode_unlock (dir,1 );if (did_block_signals)
fs/proc/task_mmu.c +1 -1
@@ -843,7 +843,7 @@ static int show_smaps_rollup(struct seq_file *m, void *v) last_vma_end = vma->vm_end; } -show_vma_header_prefix (m, priv->mm->mmap->vm_start, +show_vma_header_prefix (m, priv->mm->mmap ? priv->mm->mmap->vm_start :0 , last_vma_end,0 ,0 ,0 ,0 );seq_pad (m,' ' );seq_puts (m,"[rollup]\n" );
include/uapi/linux/videodev2.h +2 -1
@@ -1418,7 +1418,8 @@ struct v4l2_bt_timings { ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))#define V4L2_DV_BT_BLANKING_HEIGHT (bt) \ ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \ - (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch) + ((bt)->interlaced ? \ + ((bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch) : 0))#define V4L2_DV_BT_FRAME_HEIGHT (bt) \ ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
kernel/power/hibernate.c +1 -1
@@ -626,7 +626,7 @@ static void power_down(void)int error;if (hibernation_mode ==HIBERNATION_SUSPEND ) { - error =suspend_devices_and_enter (PM_SUSPEND_MEM ); + error =suspend_devices_and_enter (mem_sleep_current);if (error) { hibernation_mode = hibernation_ops ? HIBERNATION_PLATFORM :
mm/hugetlb.c +1 -1
@@ -2116,11 +2116,11 @@ struct page *alloc_huge_page(struct vm_area_struct *vma, page =alloc_buddy_huge_page_with_mpol (h, vma, addr);if (!page) goto out_uncharge_cgroup; +spin_lock (&hugetlb_lock);if (!avoid_reserve &&vma_has_reserves (vma, gbl_chg)) {SetPagePrivate (page); h->resv_huge_pages--; } -spin_lock (&hugetlb_lock);list_move (&page->lru, &h->hugepage_activelist);/* Fall through */ }
net/atm/mpoa_proc.c +2 -1
@@ -222,11 +222,12 @@ static ssize_t proc_mpc_write(struct file *file, const char __user *buff,if (!page)return -ENOMEM ; -for (p = page, len =0 ; len < nbytes; p++, len++) { +for (p = page, len =0 ; len < nbytes; p++) {if (get_user (*p, buff++)) {free_page ((unsigned long )page);return -EFAULT ; } + len +=1 ;if (*p =='\0' || *p =='\n' )break ; }
net/core/net_namespace.c +7 -0
@@ -112,6 +112,7 @@ static int net_assign_generic(struct net *net, unsigned int id, void *data)static int ops_init (const struct pernet_operations *ops,struct net *net) { +struct net_generic *ng;int err = -ENOMEM ;void *data =NULL ;
@@ -130,7 +131,13 @@ static int ops_init(const struct pernet_operations *ops, struct net *net)if (!err)return 0 ; +if (ops->id && ops->size) { cleanup: + ng =rcu_dereference_protected (net->gen, +lockdep_is_held (&pernet_ops_rwsem)); + ng->ptr[*ops->id] =NULL ; + } +kfree (data); out:
net/ieee802154/socket.c +3 -1
@@ -518,8 +518,10 @@ static int dgram_bind(struct sock *sk, struct sockaddr *uaddr, int len)if (err <0 ) goto out; -if (addr->family !=AF_IEEE802154 ) +if (addr->family !=AF_IEEE802154 ) { + err = -EINVAL ; goto out; + }ieee802154_addr_from_sa (&haddr, &addr->addr); dev =ieee802154_get_dev (sock_net (sk), &haddr);
net/ipv4/tcp_input.c +2 -1
@@ -2035,7 +2035,8 @@ void tcp_enter_loss(struct sock *sk)*/ static bool tcp_check_sack_reneging (struct sock *sk,int flag) { -if (flag &FLAG_SACK_RENEGING ) { +if (flag &FLAG_SACK_RENEGING && + flag &FLAG_SND_UNA_ADVANCED ) {struct tcp_sock *tp =tcp_sk (sk);unsigned long delay =max (usecs_to_jiffies (tp->srtt_us >>4 ),msecs_to_jiffies (10 ));
net/kcm/kcmsock.c +15 -8
@@ -164,7 +164,8 @@ static void kcm_rcv_ready(struct kcm_sock *kcm)/* Buffer limit is okay now, add to ready list */ list_add_tail (&kcm->wait_rx_list, &kcm->mux->kcm_rx_waiters); - kcm->rx_wait = true; +/* paired with lockless reads in kcm_rfree() */ +WRITE_ONCE (kcm->rx_wait, true); }static void kcm_rfree (struct sk_buff *skb)
@@ -180,7 +181,7 @@ static void kcm_rfree(struct sk_buff *skb)/* For reading rx_wait and rx_psock without holding lock */ smp_mb__after_atomic (); -if (!kcm->rx_wait && !kcm->rx_psock && +if (!READ_ONCE (kcm->rx_wait) && !READ_ONCE (kcm->rx_psock) &&sk_rmem_alloc_get (sk) < sk->sk_rcvlowat) {spin_lock_bh (&mux->rx_lock);kcm_rcv_ready (kcm);
@@ -239,7 +240,8 @@ static void requeue_rx_msgs(struct kcm_mux *mux, struct sk_buff_head *head)if (kcm_queue_rcv_skb (&kcm->sk, skb)) {/* Should mean socket buffer full */ list_del (&kcm->wait_rx_list); - kcm->rx_wait = false; +/* paired with lockless reads in kcm_rfree() */ +WRITE_ONCE (kcm->rx_wait, false);/* Commit rx_wait to read in kcm_free */ smp_wmb ();
@@ -282,10 +284,12 @@ static struct kcm_sock *reserve_rx_kcm(struct kcm_psock *psock, kcm =list_first_entry (&mux->kcm_rx_waiters, struct kcm_sock, wait_rx_list);list_del (&kcm->wait_rx_list); - kcm->rx_wait = false; +/* paired with lockless reads in kcm_rfree() */ +WRITE_ONCE (kcm->rx_wait, false); psock->rx_kcm = kcm; - kcm->rx_psock = psock; +/* paired with lockless reads in kcm_rfree() */ +WRITE_ONCE (kcm->rx_psock, psock);spin_unlock_bh (&mux->rx_lock);
@@ -312,7 +316,8 @@ static void unreserve_rx_kcm(struct kcm_psock *psock,spin_lock_bh (&mux->rx_lock); psock->rx_kcm =NULL ; - kcm->rx_psock =NULL ; +/* paired with lockless reads in kcm_rfree() */ +WRITE_ONCE (kcm->rx_psock,NULL );/* Commit kcm->rx_psock before sk_rmem_alloc_get to sync with * kcm_rfree
@@ -1240,7 +1245,8 @@ static void kcm_recv_disable(struct kcm_sock *kcm)if (!kcm->rx_psock) {if (kcm->rx_wait) {list_del (&kcm->wait_rx_list); - kcm->rx_wait = false; +/* paired with lockless reads in kcm_rfree() */ +WRITE_ONCE (kcm->rx_wait, false); }requeue_rx_msgs (mux, &kcm->sk.sk_receive_queue);
@@ -1793,7 +1799,8 @@ static void kcm_done(struct kcm_sock *kcm)if (kcm->rx_wait) {list_del (&kcm->wait_rx_list); - kcm->rx_wait = false; +/* paired with lockless reads in kcm_rfree() */ +WRITE_ONCE (kcm->rx_wait, false); }/* Move any pending receive messages to other kcm sockets */ requeue_rx_msgs (mux, &sk->sk_receive_queue);
net/mac802154/rx.c +3 -2
@@ -140,7 +140,7 @@ static int ieee802154_parse_frame_start(struct sk_buff *skb, struct ieee802154_hdr *hdr) { int hlen; -struct ieee802154_mac_cb *cb =mac_cb_init (skb); +struct ieee802154_mac_cb *cb =mac_cb (skb);skb_reset_mac_header (skb);
@@ -302,8 +302,9 @@ void ieee802154_rx_irqsafe(struct ieee802154_hw *hw, struct sk_buff *skb, u8 lqi) { struct ieee802154_local *local = hw_to_local(hw); +struct ieee802154_mac_cb *cb =mac_cb_init (skb); -mac_cb (skb)->lqi = lqi; + cb->lqi = lqi; skb->pkt_type =IEEE802154_RX_MSG ;skb_queue_tail (&local->skb_queue, skb);tasklet_schedule (&local->tasklet);
net/openvswitch/datapath.c +2 -1
@@ -1551,7 +1551,8 @@ static void ovs_dp_reset_user_features(struct sk_buff *skb, struct genl_info *inif (IS_ERR (dp))return ; -WARN (dp->user_features,"Dropping previously announced user features\n" ); +pr_warn ("%s: Dropping previously announced user features\n" , +ovs_dp_name (dp)); dp->user_features =0 ; }
net/sched/sch_cake.c +4 -0
@@ -2149,8 +2149,12 @@ static struct sk_buff *cake_dequeue(struct Qdisc *sch)static void cake_reset (struct Qdisc *sch) { +struct cake_sched_data *q =qdisc_priv (sch);u32 c; +if (!q->tins) +return ; +for (c =0 ; c <CAKE_MAX_TINS ; c++)cake_clear_tin (sch, c); }
net/tipc/discover.c +1 -1
@@ -146,8 +146,8 @@ static bool tipc_disc_addr_trial_msg(struct tipc_discoverer *d, {struct net *net = d->net;struct tipc_net *tn =tipc_net (net); -bool trial =time_before (jiffies, tn->addr_trial_end);u32 self =tipc_own_addr (net); +bool trial =time_before (jiffies, tn->addr_trial_end) && !self;if (mtyp ==DSC_TRIAL_FAIL_MSG ) {if (!trial)
net/tipc/topsrv.c +13 -5
@@ -457,12 +457,19 @@ static void tipc_conn_data_ready(struct sock *sk)static void tipc_topsrv_accept (struct work_struct *work) { struct tipc_topsrv *srv = container_of(work, struct tipc_topsrv, awork); -struct socket *lsock = srv->listener; -struct socket *newsock; +struct socket *newsock, *lsock;struct tipc_conn *con;struct sock *newsk;int ret; +spin_lock_bh (&srv->idr_lock); +if (!srv->listener) { +spin_unlock_bh (&srv->idr_lock); +return ; + } + lsock = srv->listener; +spin_unlock_bh (&srv->idr_lock); +while (1 ) { ret =kernel_accept (lsock, &newsock,O_NONBLOCK );if (ret <0 )
@@ -496,7 +503,7 @@ static void tipc_topsrv_listener_data_ready(struct sock *sk)read_lock_bh (&sk->sk_callback_lock); srv = sk->sk_user_data; -if (srv->listener) +if (srv)queue_work (srv->rcv_wq, &srv->awork);read_unlock_bh (&sk->sk_callback_lock); }
@@ -575,7 +582,7 @@ bool tipc_topsrv_kern_subscr(struct net *net, u32 port, u32 type, u32 lower, sub.seq.upper = upper; sub.timeout =TIPC_WAIT_FOREVER ; sub.filter = filter; - *(u32 *)&sub.usr_handle = port; + *(u64 *)&sub.usr_handle = (u64 )port; con =tipc_conn_alloc (tipc_topsrv (net));if (IS_ERR (con))
@@ -706,8 +713,9 @@ static void tipc_topsrv_stop(struct net *net)__module_get (lsock->sk->sk_prot_creator->owner); srv->listener =NULL ;spin_unlock_bh (&srv->idr_lock); -sock_release (lsock); +tipc_topsrv_work_stop (srv); +sock_release (lsock);idr_destroy (&srv->conn_idr);kfree (srv); }
sound/aoa/soundbus/i2sbus/core.c +6 -1
@@ -148,6 +148,7 @@ static int i2sbus_get_and_fixup_rsrc(struct device_node *np, int index,return rc; } +/* Returns 1 if added, 0 for otherwise; don't return a negative value! */ /* FIXME: look at device node refcounting */ static int i2sbus_add_dev(struct macio_dev *macio, struct i2sbus_control *control,
@@ -213,7 +214,7 @@ static int i2sbus_add_dev(struct macio_dev *macio,* either as the second one in that case is just a modem. */ if (!ok) {kfree (dev); -return -ENODEV ; +return 0 ; }mutex_init (&dev->lock);
@@ -302,6 +303,10 @@ static int i2sbus_add_dev(struct macio_dev *macio,if (soundbus_add_one (&dev->sound)) {printk (KERN_DEBUG "i2sbus: device registration error!\n" ); +if (dev->sound.ofdev.dev.kobj.state_initialized) { +soundbus_dev_put (&dev->sound); +return 0 ; + } goto err; }
sound/pci/ac97/ac97_codec.c +1 -0
@@ -1965,6 +1965,7 @@ static int snd_ac97_dev_register(struct snd_device *device) snd_ac97_get_short_name(ac97));if ((err =device_register (&ac97->dev)) <0 ) {ac97_err (ac97,"Can't register ac97 bus\n" ); +put_device (&ac97->dev); ac97->dev.bus =NULL ;return err; }
sound/pci/au88x0/au88x0.h +3 -3
@@ -153,7 +153,7 @@ struct snd_vortex {#ifndef CHIP_AU8810 stream_t dma_wt[NR_WT ];wt_voice_t wt_voice[NR_WT ];/* WT register cache. */ -char mixwt[(NR_WT /NR_WTPB ) *6 ];/* WT mixin objects */ +s8 mixwt[(NR_WT /NR_WTPB ) *6 ];/* WT mixin objects */ #endif /* Global resources */
@@ -247,8 +247,8 @@ static int vortex_alsafmt_aspfmt(snd_pcm_format_t alsafmt, vortex_t *v);static void vortex_connect_default (vortex_t * vortex,int en);static int vortex_adb_allocroute (vortex_t * vortex,int dma,int nr_ch,int dir,int type,int subdev); -static char vortex_adb_checkinout (vortex_t * vortex,int resmap[],int out, -int restype); +static int vortex_adb_checkinout (vortex_t * vortex,int resmap[],int out, +int restype);#ifndef CHIP_AU8810 static int vortex_wt_allocroute (vortex_t * vortex,int dma,int nr_ch);static void vortex_wt_connect (vortex_t * vortex,int en);
sound/pci/au88x0/au88x0_core.c +1 -1
@@ -2004,7 +2004,7 @@ static int resnum[VORTEX_RESOURCE_LAST] =out: Mean checkout if != 0. Else mean Checkin resource. restype: Indicates type of resource to be checked in or out. */ -static char +static int vortex_adb_checkinout (vortex_t * vortex,int resmap[],int out,int restype) {int i, qty = resnum[restype], resinuse =0 ;
sound/synth/emux/emux.c +1 -6
@@ -138,15 +138,10 @@ EXPORT_SYMBOL(snd_emux_register);*/ int snd_emux_free (struct snd_emux *emu) { -unsigned long flags; -if (! emu)return -EINVAL ; -spin_lock_irqsave (&emu->voice_lock, flags); -if (emu->timer_active) -del_timer (&emu->tlist); -spin_unlock_irqrestore (&emu->voice_lock, flags); +del_timer_sync (&emu->tlist);snd_emux_proc_free (emu);snd_emux_delete_virmidi (emu);
tools/iio/iio_utils.c +4 -0
@@ -546,6 +546,10 @@ static int calc_digits(int num) {int count =0 ; +/* It takes a digit to represent zero */ +if (!num) +return 1 ; +while (num !=0 ) { num /=10 ; count++;
tools/perf/util/auxtrace.c +9 -1
@@ -1678,11 +1678,19 @@ struct sym_args {bool near; }; +static bool kern_sym_name_match (const char *kname,const char *name) +{ +size_t n =strlen (name); + +return !strcmp (kname, name) || + (!strncmp (kname, name, n) && kname[n] =='\t' ); +} +static bool kern_sym_match (struct sym_args *args,const char *name,char type) {/* A function with the same name, and global or the n'th found or any */ return kallsyms__is_function (type) && - !strcmp (name, args->name) && +kern_sym_name_match (name, args->name) && ((args->global &&isupper (type)) || (args->selected && ++(args->cnt) == args->idx) || (!args->global && !args->selected));
virt/kvm/arm/vgic/vgic-its.c +4 -1
@@ -1915,7 +1915,7 @@ static int scan_its_table(struct vgic_its *its, gpa_t base, int size, u32 esz,memset (entry,0 , esz); -while (len >0 ) { +while (true) {int next_offset;size_t byte_offset;
@@ -1928,6 +1928,9 @@ static int scan_its_table(struct vgic_its *its, gpa_t base, int size, u32 esz,return next_offset; byte_offset = next_offset * esz; +if (byte_offset >= len) +break ; + id += next_offset; gpa += byte_offset; len -= byte_offset;