Linux 5.10.153
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.153 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/include/asm/io.h | 2 arch/arc/mm/ioremap.c | 2 arch/arm64/include/asm/cpufeature.h | 9 - arch/arm64/include/asm/cputype.h | 4 arch/arm64/include/asm/sysreg.h | 36 +++-- arch/arm64/kernel/head.S | 6 arch/arm64/kernel/proton-pack.c | 6 arch/arm64/kvm/reset.c | 10 - arch/s390/include/asm/futex.h | 3 arch/s390/pci/pci_mmio.c | 8 - arch/x86/events/intel/lbr.c | 2 arch/x86/kernel/unwind_orc.c | 2 drivers/base/power/domain.c | 4 drivers/counter/microchip-tcb-capture.c | 18 ++ drivers/firmware/efi/libstub/arm64-stub.c | 2 drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c | 5 drivers/gpu/drm/msm/dp/dp_display.c | 2 drivers/gpu/drm/msm/dsi/dsi.c | 6 drivers/gpu/drm/msm/hdmi/hdmi.c | 5 drivers/iio/light/tsl2583.c | 2 drivers/iio/temperature/ltc2983.c | 13 - drivers/media/test-drivers/vivid/vivid-core.c | 38 +++++ drivers/media/test-drivers/vivid/vivid-core.h | 2 drivers/media/test-drivers/vivid/vivid-vid-cap.c | 27 +++- drivers/media/v4l2-core/v4l2-dv-timings.c | 14 ++ drivers/mmc/core/sdio_bus.c | 3 drivers/mmc/host/Kconfig | 3 drivers/mtd/nand/raw/marvell_nand.c | 2 drivers/net/can/mscan/mpc5xxx_can.c | 8 - drivers/net/can/rcar/rcar_canfd.c | 6 drivers/net/can/spi/mcp251x.c | 5 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/aquantia/atlantic/aq_macsec.c | 96 ++++++++++---- drivers/net/ethernet/aquantia/atlantic/aq_nic.h | 2 drivers/net/ethernet/freescale/enetc/enetc.c | 5 drivers/net/ethernet/freescale/fec_main.c | 46 ++++++ drivers/net/ethernet/huawei/hinic/hinic_debugfs.c | 18 +- drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c | 2 drivers/net/ethernet/huawei/hinic/hinic_hw_dev.c | 2 drivers/net/ethernet/huawei/hinic/hinic_sriov.c | 1 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/cmd.c | 10 - drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 3 drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c | 6 drivers/net/ethernet/micrel/ksz884x.c | 2 drivers/net/ethernet/socionext/netsec.c | 2 drivers/scsi/qla2xxx/qla_attr.c | 28 +++- drivers/scsi/sd.c | 3 drivers/tty/serial/8250/8250_omap.c | 3 drivers/tty/serial/8250/8250_pci.c | 9 - drivers/tty/serial/8250/8250_port.c | 12 + drivers/tty/serial/fsl_lpuart.c | 8 - drivers/tty/serial/imx.c | 8 - drivers/tty/serial/serial_core.c | 61 +++++++-- 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 | 12 + drivers/usb/host/xhci.c | 10 + drivers/usb/host/xhci.h | 1 drivers/video/fbdev/smscufx.c | 55 ++++---- drivers/xen/gntdev.c | 30 +++- fs/binfmt_elf.c | 3 fs/exec.c | 4 fs/kernfs/dir.c | 5 include/linux/mlx5/driver.h | 2 include/media/v4l2-common.h | 3 include/uapi/linux/videodev2.h | 3 kernel/power/hibernate.c | 2 mm/hugetlb.c | 2 mm/memory.c | 11 + net/can/j1939/transport.c | 4 net/core/net_namespace.c | 7 + net/ieee802154/socket.c | 4 net/ipv4/nexthop.c | 2 net/ipv4/tcp_input.c | 3 net/ipv4/tcp_ipv4.c | 7 - net/ipv6/ip6_gre.c | 12 + net/ipv6/ip6_tunnel.c | 11 - net/ipv6/sit.c | 8 - net/kcm/kcmsock.c | 23 ++- net/mac802154/rx.c | 5 net/openvswitch/datapath.c | 3 net/tipc/topsrv.c | 16 +- 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/pci/rme9652/hdsp.c | 26 +-- sound/pci/rme9652/rme9652.c | 22 +-- sound/soc/qcom/lpass-cpu.c | 10 + sound/synth/emux/emux.c | 7 - tools/iio/iio_utils.c | 4 tools/perf/util/auxtrace.c | 10 + 103 files changed, 804 insertions(+), 336 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 Stein (1):
media: v4l2: Fix v4l2_i2c_subdev_set_name function documentation
Anshuman Khandual (1):
arm64/kexec: Test page size support with new TGRAN range values
Anssi Hannula (1):
can: kvaser_usb: Fix possible completions during init_completion
Bernd Edlinger (1):
exec: Copy oldsighand->action under spin-lock
Biju Das (1):
can: rcar_canfd: rcar_canfd_handle_global_receive(): fix IRQ storm on global FIFO receive
Brian Norris (1):
mmc: sdhci_am654: 'select', not 'depends' REGMAP_MMIO
Chen Zhongjin (1):
x86/unwind/orc: Fix unreliable stack dump with gcov
Christian A. Ehrhardt (1):
kernfs: fix use-after-free in __kernfs_remove
Cosmin Tanislav (1):
iio: temperature: ltc2983: allocate iio channels once
D Scott Phillips (1):
arm64: Add AMPERE1 to the Spectre-BHB affected list
Dongliang Mu (2):
can: mscan: mpc5xxx: mpc5xxx_can_probe(): add missing put_clock() in error path
can: mcp251x: mcp251x_can_probe(): add missing unregister_candev() in error path
Eric Dumazet (4):
kcm: annotate data-races around kcm->rx_psock
kcm: annotate data-races around kcm->rx_wait
tcp: minor optimization in tcp_add_backlog()
ipv6: ensure sane device mtu in tunnels
Greg Kroah-Hartman (1):
Linux 5.10.153
Hannu Hartikainen (1):
USB: add RESET_RESUME quirk for NVIDIA Jetson devices in RCM
Hans Verkuil (5):
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'
media: vivid: set num_in/outputs to 0 if not supported
Heiko Carstens (2):
s390/futex: add missing EX_TABLE entry to __futex_atomic_op() s390/pci: add missing EX_TABLE entries to __pcistg_mio_inuser()/__pcilg_mio_inuser()
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/mm: Fix __enable_mmu() for new TGRAN range values
Jan Beulich (1):
Xen/gntdev: don't ignore kernel unmapping error
Jason A. Donenfeld (2):
ALSA: au88x0: use explicitly signed char
ALSA: rme9652: use explicitly signed char
Jens Glathe (1):
usb: xhci: add XHCI_SPURIOUS_SUCCESS to ASM1042 despite being a V0.96 controller
Johan Hovold (3):
drm/msm/dsi: fix memory corruption with too many bridges drm/msm/hdmi: fix memory corruption with too many bridges drm/msm/dp: fix IRQ lifetime
Juergen Borleis (1):
net: fec: limit register access on i.MX6UL
Justin Chen (1):
usb: bdc: change state when port disconnected
Li Zetao (1):
fs/binfmt_elf: Fix memory leak in load_elf_binary()
Lino Sanfilippo (1):
serial: core: move RS485 configuration tasks from drivers into core
Lu Wei (1):
tcp: fix a signed-integer-overflow bug in tcp_add_backlog()
Lukas Wunner (1):
serial: Deassert Transmit Enable on probe in driver-specific way
M. Vefa Bicakci (1):
xen/gntdev: Prevent leaking grants
Manish Rangankar (1):
scsi: qla2xxx: Use transport-defined speed mask for supported_speeds
Mario Limonciello (1):
PM: hibernate: Allow hybrid sleep to work with s2idle
Mathias Nyman (2):
xhci: Add quirk to reset host back to default state at shutdown
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
Maxim Levitsky (1):
perf/x86/intel/lbr: Use setup_clear_cpu_cap() instead of clear_cpu_cap()
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
Nicolas Dichtel (1):
nh: fix scope used to find saddr when adding non gw nh
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
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
Srinivasa Rao Mandadapu (2):
ASoC: qcom: lpass-cpu: mark HDMI TX registers as volatile
ASoC: qcom: lpass-cpu: Mark HDMI TX parity register as volatile
Steven Rostedt (Google) (1):
ALSA: Use del_timer_sync() before freeing timer
Sudeep Holla (1):
PM: domains: Fix handling of unavailable/disabled idle states
Suresh Devarakonda (1):
net/mlx5: Fix crash during sync firmware reset
Sylwester Dziedziuch (1):
i40e: Fix VF hang when reset is triggered on another VF
Takashi Iwai (1):
ALSA: aoa: Fix I2S device accounting
Tariq Toukan (1):
net/mlx5: Fix possible use-after-free in async command interface
Thinh Nguyen (2):
usb: dwc3: gadget: Stop processing more requests on IMI
usb: dwc3: gadget: Don't set IMI for no_interrupt
Tony O'Brien (1):
mtd: rawnand: marvell: Use correct logic for nand-keep-config
Vladimir Oltean (1):
net: enetc: survive memory pressure without crashing
Wei Yongjun (1):
net: ieee802154: fix error return code in dgram_bind()
William Breathitt Gray (1):
counter: microchip-tcb-capture: Handle Signal1 read and Synapse
Xin Long (1):
tipc: fix a null-ptr-deref in tipc_topsrv_accept
Yang Yingliang (6):
can: j1939: transport: j1939_session_skb_drop_old(): spin_unlock_irqrestore() before kfree_skb()
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()
Yu Kuai (1):
scsi: sd: Revert "scsi: sd: Remove a local variable"
Yuanzheng Song (1):
mm/memory: add non-anonymous page check in the copy_present_page()
Zhang Changzhong (1):
net: lantiq_etop: don't free skb when returning NETDEV_TX_BUSY
Zhengchao Shao (5):
net: hinic: fix incorrect assignment issue in hinic_set_interrupt_cfg()
net: hinic: fix memory leak when reading function table
net: hinic: fix the issue of CMDQ memory leaks
net: hinic: fix the issue of double release MBOX callback of VF
net: fix UAF issue in nfqnl_nf_hook_drop() when ops_init() failed
Íñigo Huguet (1):
atlantic: fix deadlock at aq_nic_stop
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 152 +SUBLEVEL = 153 EXTRAVERSION = NAME = Dare mighty things
arch/arc/include/asm/io.h +1 -1
@@ -32,7 +32,7 @@ static inline void ioport_unmap(void __iomem *addr) { } -extern void iounmap (const void __iomem *addr); +extern void iounmap (const volatile void __iomem *addr);/* * io{read,write}{16,32}be() macros
arch/arc/mm/ioremap.c +1 -1
@@ -93,7 +93,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/include/asm/cpufeature.h +6 -3
@@ -648,7 +648,8 @@ static inline bool system_supports_4kb_granule(void) val =cpuid_feature_extract_unsigned_field (mmfr0,ID_AA64MMFR0_TGRAN4_SHIFT ); -return val ==ID_AA64MMFR0_TGRAN4_SUPPORTED ; +return (val >=ID_AA64MMFR0_TGRAN4_SUPPORTED_MIN ) && + (val <=ID_AA64MMFR0_TGRAN4_SUPPORTED_MAX ); }static inline bool system_supports_64kb_granule (void )
@@ -660,7 +661,8 @@ static inline bool system_supports_64kb_granule(void) val =cpuid_feature_extract_unsigned_field (mmfr0,ID_AA64MMFR0_TGRAN64_SHIFT ); -return val ==ID_AA64MMFR0_TGRAN64_SUPPORTED ; +return (val >=ID_AA64MMFR0_TGRAN64_SUPPORTED_MIN ) && + (val <=ID_AA64MMFR0_TGRAN64_SUPPORTED_MAX ); }static inline bool system_supports_16kb_granule (void )
@@ -672,7 +674,8 @@ static inline bool system_supports_16kb_granule(void) val =cpuid_feature_extract_unsigned_field (mmfr0,ID_AA64MMFR0_TGRAN16_SHIFT ); -return val ==ID_AA64MMFR0_TGRAN16_SUPPORTED ; +return (val >=ID_AA64MMFR0_TGRAN16_SUPPORTED_MIN ) && + (val <=ID_AA64MMFR0_TGRAN16_SUPPORTED_MAX ); }static inline bool system_supports_mixed_endian_el0 (void )
arch/arm64/include/asm/cputype.h +4 -0
@@ -60,6 +60,7 @@#define ARM_CPU_IMP_FUJITSU 0x46#define ARM_CPU_IMP_HISI 0x48#define ARM_CPU_IMP_APPLE 0x61 +#define ARM_CPU_IMP_AMPERE 0xC0#define ARM_CPU_PART_AEM_V8 0xD0F#define ARM_CPU_PART_FOUNDATION 0xD00
@@ -112,6 +113,8 @@#define APPLE_CPU_PART_M1_ICESTORM 0x022#define APPLE_CPU_PART_M1_FIRESTORM 0x023 +#define AMPERE_CPU_PART_AMPERE1 0xAC3 +#define MIDR_CORTEX_A53 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)#define MIDR_CORTEX_A57 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)#define MIDR_CORTEX_A72 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A72)
@@ -151,6 +154,7 @@#define MIDR_HISI_TSV110 MIDR_CPU_MODEL(ARM_CPU_IMP_HISI, HISI_CPU_PART_TSV110)#define MIDR_APPLE_M1_ICESTORM MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_ICESTORM)#define MIDR_APPLE_M1_FIRESTORM MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM) +#define MIDR_AMPERE1 MIDR_CPU_MODEL(ARM_CPU_IMP_AMPERE, AMPERE_CPU_PART_AMPERE1)/* Fujitsu Erratum 010001 affects A64FX 1.0 and 1.1, (v0r0 and v1r0) */ #define MIDR_FUJITSU_ERRATUM_010001 MIDR_FUJITSU_A64FX
arch/arm64/include/asm/sysreg.h +24 -12
@@ -786,15 +786,24 @@#define ID_AA64MMFR0_ASID_SHIFT 4#define ID_AA64MMFR0_PARANGE_SHIFT 0 -#define ID_AA64MMFR0_TGRAN4_NI 0xf -#define ID_AA64MMFR0_TGRAN4_SUPPORTED 0x0 -#define ID_AA64MMFR0_TGRAN64_NI 0xf -#define ID_AA64MMFR0_TGRAN64_SUPPORTED 0x0 -#define ID_AA64MMFR0_TGRAN16_NI 0x0 -#define ID_AA64MMFR0_TGRAN16_SUPPORTED 0x1 +#define ID_AA64MMFR0_TGRAN4_NI 0xf +#define ID_AA64MMFR0_TGRAN4_SUPPORTED_MIN 0x0 +#define ID_AA64MMFR0_TGRAN4_SUPPORTED_MAX 0x7 +#define ID_AA64MMFR0_TGRAN64_NI 0xf +#define ID_AA64MMFR0_TGRAN64_SUPPORTED_MIN 0x0 +#define ID_AA64MMFR0_TGRAN64_SUPPORTED_MAX 0x7 +#define ID_AA64MMFR0_TGRAN16_NI 0x0 +#define ID_AA64MMFR0_TGRAN16_SUPPORTED_MIN 0x1 +#define ID_AA64MMFR0_TGRAN16_SUPPORTED_MAX 0xf +#define ID_AA64MMFR0_PARANGE_48 0x5#define ID_AA64MMFR0_PARANGE_52 0x6 +#define ID_AA64MMFR0_TGRAN_2_SUPPORTED_DEFAULT 0x0 +#define ID_AA64MMFR0_TGRAN_2_SUPPORTED_NONE 0x1 +#define ID_AA64MMFR0_TGRAN_2_SUPPORTED_MIN 0x2 +#define ID_AA64MMFR0_TGRAN_2_SUPPORTED_MAX 0x7 +#ifdef CONFIG_ARM64_PA_BITS_52 #define ID_AA64MMFR0_PARANGE_MAX ID_AA64MMFR0_PARANGE_52#else
@@ -955,14 +964,17 @@#define ID_PFR1_PROGMOD_SHIFT 0#if defined(CONFIG_ARM64_4K_PAGES ) -#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN4_SHIFT -#define ID_AA64MMFR0_TGRAN_SUPPORTED ID_AA64MMFR0_TGRAN4_SUPPORTED +#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN4_SHIFT +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN4_SUPPORTED_MIN +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN4_SUPPORTED_MAX#elif defined(CONFIG_ARM64_16K_PAGES ) -#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN16_SHIFT -#define ID_AA64MMFR0_TGRAN_SUPPORTED ID_AA64MMFR0_TGRAN16_SUPPORTED +#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN16_SHIFT +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN16_SUPPORTED_MIN +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN16_SUPPORTED_MAX#elif defined(CONFIG_ARM64_64K_PAGES ) -#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN64_SHIFT -#define ID_AA64MMFR0_TGRAN_SUPPORTED ID_AA64MMFR0_TGRAN64_SUPPORTED +#define ID_AA64MMFR0_TGRAN_SHIFT ID_AA64MMFR0_TGRAN64_SHIFT +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MIN ID_AA64MMFR0_TGRAN64_SUPPORTED_MIN +#define ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ID_AA64MMFR0_TGRAN64_SUPPORTED_MAX#endif #define MVFR2_FPMISC_SHIFT 4
arch/arm64/kernel/head.S +4 -2
@@ -797,8 +797,10 @@ SYM_FUNC_END(__secondary_too_slow) SYM_FUNC_START(__enable_mmu) mrs x2, ID_AA64MMFR0_EL1 ubfx x2, x2, #ID_AA64MMFR0_TGRAN_SHIFT, 4 - cmp x2, #ID_AA64MMFR0_TGRAN_SUPPORTED - b.ne __no_granule_support + cmp x2, #ID_AA64MMFR0_TGRAN_SUPPORTED_MIN + b.lt __no_granule_support + cmp x2, #ID_AA64MMFR0_TGRAN_SUPPORTED_MAX + b.gt __no_granule_support update_early_cpu_boot_status 0, x2, x3 adrp x2, idmap_pg_dir phys_to_ttbr x1, x1
arch/arm64/kernel/proton-pack.c +6 -0
@@ -876,6 +876,10 @@ u8 spectre_bhb_loop_affected(int scope) MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1), {}, }; +static const struct midr_range spectre_bhb_k11_list[] = { +MIDR_ALL_VERSIONS (MIDR_AMPERE1 ), + {}, + };static const struct midr_range spectre_bhb_k8_list[] = {MIDR_ALL_VERSIONS (MIDR_CORTEX_A72 ),MIDR_ALL_VERSIONS (MIDR_CORTEX_A57 ),
@@ -886,6 +890,8 @@ u8 spectre_bhb_loop_affected(int scope) k =32 ; else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k24_list)) k =24 ; + else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k11_list)) + k =11 ; else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k8_list)) k =8 ;
arch/arm64/kvm/reset.c +6 -4
@@ -397,16 +397,18 @@ int kvm_set_ipa_limit(void) }switch (cpuid_feature_extract_unsigned_field (mmfr0, tgran_2)) { -default : -case 1 : +case ID_AA64MMFR0_TGRAN_2_SUPPORTED_NONE :kvm_err ("PAGE_SIZE not supported at Stage-2, giving up\n" );return -EINVAL ; -case 0 : +case ID_AA64MMFR0_TGRAN_2_SUPPORTED_DEFAULT :kvm_debug ("PAGE_SIZE supported at Stage-2 (default)\n" );break ; -case 2 : + case ID_AA64MMFR0_TGRAN_2_SUPPORTED_MIN ... ID_AA64MMFR0_TGRAN_2_SUPPORTED_MAX:kvm_debug ("PAGE_SIZE supported at Stage-2 (advertised)\n" );break ; +default : +kvm_err ("Unsupported value for TGRAN_2, giving up\n" ); +return -EINVAL ; } kvm_ipa_limit =id_aa64mmfr0_parange_to_phys_shift (parange);
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/s390/pci/pci_mmio.c +4 -4
@@ -64,7 +64,7 @@ static inline int __pcistg_mio_inuser( asmvolatile (" sacf 256\n" "0: llgc %[tmp],0(%[src])\n" -" sllg %[val],%[val],8\n" +"4: sllg %[val],%[val],8\n" " aghi %[src],1\n" " ogr %[val],%[tmp]\n" " brctg %[cnt],0b\n"
@@ -72,7 +72,7 @@ static inline int __pcistg_mio_inuser("2: ipm %[cc]\n" " srl %[cc],28\n" "3: sacf 768\n" - EX_TABLE(0b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b) + EX_TABLE(0b, 3b) EX_TABLE(4b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b) : [src] "+a" (src), [cnt] "+d" (cnt), [val] "+d" (val), [tmp] "=d" (tmp),
@@ -222,10 +222,10 @@ static inline int __pcilg_mio_inuser("2: ahi %[shift],-8\n" " srlg %[tmp],%[val],0(%[shift])\n" "3: stc %[tmp],0(%[dst])\n" -" aghi %[dst],1\n" +"5: aghi %[dst],1\n" " brctg %[cnt],2b\n" "4: sacf 768\n" - EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b) + EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b) EX_TABLE(5b, 4b) : [cc] "+d" (cc), [val] "=d" (val), [len] "+d" (len), [dst] "+a" (dst), [cnt] "+d" (cnt), [tmp] "=d" (tmp),
arch/x86/events/intel/lbr.c +1 -1
@@ -1847,7 +1847,7 @@ void __init intel_pmu_arch_lbr_init(void)return ; clear_arch_lbr: -clear_cpu_cap (&boot_cpu_data,X86_FEATURE_ARCH_LBR ); +setup_clear_cpu_cap (X86_FEATURE_ARCH_LBR ); }/**
arch/x86/kernel/unwind_orc.c +1 -1
@@ -697,7 +697,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/base/power/domain.c +4 -0
@@ -2789,6 +2789,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/counter/microchip-tcb-capture.c +14 -4
@@ -29,7 +29,6 @@ struct mchp_tc_data {int qdec_mode;int num_channels;int channel[2 ]; -bool trig_inverted; };enum mchp_tc_count_function {
@@ -163,7 +162,7 @@ static int mchp_tc_count_signal_read(struct counter_device *counter,regmap_read (priv->regmap,ATMEL_TC_REG (priv->channel[0 ],SR ), &sr); -if (priv->trig_inverted) +if (signal->id ==1 ) sigstatus = (sr &ATMEL_TC_MTIOB );else sigstatus = (sr &ATMEL_TC_MTIOA );
@@ -181,6 +180,17 @@ static int mchp_tc_count_action_get(struct counter_device *counter,struct mchp_tc_data *const priv = counter->priv;u32 cmr; +if (priv->qdec_mode) { + *action =COUNTER_SYNAPSE_ACTION_BOTH_EDGES ; +return 0 ; + } + +/* Only TIOA signal is evaluated in non-QDEC mode */ +if (synapse->signal->id !=0 ) { + *action =COUNTER_SYNAPSE_ACTION_NONE ; +return 0 ; + } +regmap_read (priv->regmap,ATMEL_TC_REG (priv->channel[0 ],CMR ), &cmr);switch (cmr &ATMEL_TC_ETRGEDG ) {
@@ -209,8 +219,8 @@ static int mchp_tc_count_action_set(struct counter_device *counter,struct mchp_tc_data *const priv = counter->priv;u32 edge =ATMEL_TC_ETRGEDG_NONE ; -/* QDEC mode is rising edge only */ -if (priv->qdec_mode) +/* QDEC mode is rising edge only; only TIOA handled in non-QDEC mode */ +if (priv->qdec_mode || synapse->signal->id !=0 )return -EINVAL ;switch (action) {
drivers/firmware/efi/libstub/arm64-stub.c +1 -1
@@ -24,7 +24,7 @@ efi_status_t check_platform_features(void)return EFI_SUCCESS ; tg = (read_cpuid (ID_AA64MMFR0_EL1 ) >>ID_AA64MMFR0_TGRAN_SHIFT ) &0xf ; -if (tg !=ID_AA64MMFR0_TGRAN_SUPPORTED ) { +if (tg <ID_AA64MMFR0_TGRAN_SUPPORTED_MIN || tg >ID_AA64MMFR0_TGRAN_SUPPORTED_MAX ) {if (IS_ENABLED (CONFIG_ARM64_64K_PAGES ))efi_err ("This 64 KB granular kernel is not supported by your CPU\n" );else
drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c +3 -2
@@ -56,8 +56,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/dp/dp_display.c +1 -1
@@ -1201,7 +1201,7 @@ int dp_display_request_irq(struct msm_dp *dp_display)return -EINVAL ; } - rc =devm_request_irq (&dp->pdev->dev, dp->irq, + rc =devm_request_irq (dp_display->drm_dev->dev, dp->irq, dp_display_irq_handler,IRQF_TRIGGER_HIGH ,"dp_display_isr" , dp);if (rc <0 ) {
drivers/gpu/drm/msm/dsi/dsi.c +6 -0
@@ -205,6 +205,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
@@ -293,6 +293,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/iio/light/tsl2583.c +1 -1
@@ -856,7 +856,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/iio/temperature/ltc2983.c +6 -7
@@ -1376,13 +1376,6 @@ static int ltc2983_setup(struct ltc2983_data *st, bool assign_iio)return ret; } - st->iio_chan =devm_kzalloc (&st->spi->dev, - st->iio_channels *sizeof (*st->iio_chan), -GFP_KERNEL ); - -if (!st->iio_chan) -return -ENOMEM ; - ret =regmap_update_bits (st->regmap,LTC2983_GLOBAL_CONFIG_REG ,LTC2983_NOTCH_FREQ_MASK ,LTC2983_NOTCH_FREQ (st->filter_notch_freq));
@@ -1494,6 +1487,12 @@ static int ltc2983_probe(struct spi_device *spi)if (ret)return ret; + st->iio_chan =devm_kzalloc (&spi->dev, + st->iio_channels *sizeof (*st->iio_chan), +GFP_KERNEL ); +if (!st->iio_chan) +return -ENOMEM ; + ret =ltc2983_setup (st, true);if (ret)return ret;
drivers/media/test-drivers/vivid/vivid-core.c +34 -4
@@ -330,6 +330,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);
@@ -850,8 +872,12 @@ static int vivid_detect_feature_set(struct vivid_dev *dev, int inst,/* how many inputs do we have and of what type? */ dev->num_inputs = num_inputs[inst]; -if (dev->num_inputs <1 ) - dev->num_inputs =1 ; +if (node_type &0x20007 ) { +if (dev->num_inputs <1 ) + dev->num_inputs =1 ; + }else { + dev->num_inputs =0 ; + }if (dev->num_inputs >=MAX_INPUTS ) dev->num_inputs =MAX_INPUTS ;for (i =0 ; i < dev->num_inputs; i++) {
@@ -868,8 +894,12 @@ static int vivid_detect_feature_set(struct vivid_dev *dev, int inst,/* how many outputs do we have and of what type? */ dev->num_outputs = num_outputs[inst]; -if (dev->num_outputs <1 ) - dev->num_outputs =1 ; +if (node_type &0x40300 ) { +if (dev->num_outputs <1 ) + dev->num_outputs =1 ; + }else { + dev->num_outputs =0 ; + }if (dev->num_outputs >=MAX_OUTPUTS ) dev->num_outputs =MAX_OUTPUTS ;for (i =0 ; i < dev->num_outputs; i++) {
drivers/media/test-drivers/vivid/vivid-core.h +2 -0
@@ -609,4 +609,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/test-drivers/vivid/vivid-vid-cap.c +21 -6
@@ -452,6 +452,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 ;
@@ -909,6 +915,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;
@@ -1025,17 +1033,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 ; }
@@ -1276,7 +1284,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/mmc/core/sdio_bus.c +2 -1
@@ -292,7 +292,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/mmc/host/Kconfig +2 -1
@@ -1079,9 +1079,10 @@ config MMC_SDHCI_OMAP config MMC_SDHCI_AM654 tristate "Support for the SDHCI Controller in TI's AM654 SOCs" - depends on MMC_SDHCI_PLTFM && OF && REGMAP_MMIO + depends on MMC_SDHCI_PLTFM && OF select MMC_SDHCI_IO_ACCESSORS select MMC_CQHCI + select REGMAP_MMIO help This selects the Secure Digital Host Controller Interface (SDHCI) support present in TI's AM654 SOCs. The controller supports
drivers/mtd/nand/raw/marvell_nand.c +1 -1
@@ -2672,7 +2672,7 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc, chip->controller = &nfc->controller;nand_set_flash_node (chip, np); -if (!of_property_read_bool (np,"marvell,nand-keep-config" )) +if (of_property_read_bool (np,"marvell,nand-keep-config" )) chip->options |=NAND_KEEP_TIMINGS ; mtd =nand_to_mtd (chip);
drivers/net/can/mscan/mpc5xxx_can.c +5 -3
@@ -325,14 +325,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",
@@ -340,7 +340,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
@@ -1075,7 +1075,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
@@ -1093,7 +1093,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/spi/mcp251x.c +4 -1
@@ -1419,11 +1419,14 @@ static int mcp251x_can_probe(struct spi_device *spi) ret =mcp251x_gpio_setup (priv);if (ret) - goto error_probe; + goto out_unregister_candev;netdev_info (net,"MCP%x successfully initialized.\n" , priv->model);return 0 ; +out_unregister_candev: +unregister_candev (net); + error_probe:destroy_workqueue (priv->wq); priv->wq =NULL ;
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
@@ -239,6 +239,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
@@ -284,6 +285,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 ];
@@ -834,7 +837,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;
@@ -1151,7 +1158,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 ;
@@ -1167,9 +1177,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/aquantia/atlantic/aq_macsec.c +72 -24
171 lines not on this page · raw message
drivers/net/ethernet/aquantia/atlantic/aq_nic.h +2 -0
@@ -152,6 +152,8 @@ struct aq_nic_s {struct mutex fwreq_mutex;#if IS_ENABLED (CONFIG_MACSEC )struct aq_macsec_cfg *macsec_cfg; +/* mutex to protect data in macsec_cfg */ +struct mutex macsec_mutex;#endif /* PTP support */ struct aq_ptp_s *aq_ptp;
drivers/net/ethernet/freescale/enetc/enetc.c +5 -0
@@ -1241,7 +1241,12 @@ static void enetc_setup_rxbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)enetc_rxbdr_wr (hw, idx,ENETC_RBBSR ,ENETC_RXB_DMA_SIZE ); +/* Also prepare the consumer index in case page allocation never +* succeeds. In that case, hardware will never advance producer index +* to match consumer index, and will drop all frames. +*/ enetc_rxbdr_wr (hw, idx,ENETC_RBPIR ,0 ); +enetc_rxbdr_wr (hw, idx,ENETC_RBCIR ,1 );/* enable Rx ints by setting pkt thr to 1 */ enetc_rxbdr_wr (hw, idx,ENETC_RBICR0 ,ENETC_RBICR0_ICEN |0x1 );
drivers/net/ethernet/freescale/fec_main.c +44 -2
65 lines not on this page · raw message
drivers/net/ethernet/huawei/hinic/hinic_debugfs.c +12 -6
@@ -85,6 +85,7 @@ static int hinic_dbg_get_func_table(struct hinic_dev *nic_dev, int idx)struct tag_sml_funcfg_tbl *funcfg_table_elem;struct hinic_cmd_lt_rd *read_data;u16 out_size =sizeof (*read_data); +int ret = ~0 ;int err; read_data =kzalloc (sizeof (*read_data),GFP_KERNEL );
@@ -111,20 +112,25 @@ static int hinic_dbg_get_func_table(struct hinic_dev *nic_dev, int idx)switch (idx) {case VALID : -return funcfg_table_elem->dw0.bs.valid; + ret = funcfg_table_elem->dw0.bs.valid; +break ;case RX_MODE : -return funcfg_table_elem->dw0.bs.nic_rx_mode; + ret = funcfg_table_elem->dw0.bs.nic_rx_mode; +break ;case MTU : -return funcfg_table_elem->dw1.bs.mtu; + ret = funcfg_table_elem->dw1.bs.mtu; +break ;case RQ_DEPTH : -return funcfg_table_elem->dw13.bs.cfg_rq_depth; + ret = funcfg_table_elem->dw13.bs.cfg_rq_depth; +break ;case QUEUE_NUM : -return funcfg_table_elem->dw13.bs.cfg_q_num; + ret = funcfg_table_elem->dw13.bs.cfg_q_num; +break ; }kfree (read_data); -return ~0 ; +return ret; } static ssize_t hinic_dbg_cmd_read(struct file *filp, char __user *buffer, size_t count,
drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c +1 -1
@@ -929,7 +929,7 @@ int hinic_init_cmdqs(struct hinic_cmdqs *cmdqs, struct hinic_hwif *hwif, err_set_cmdq_depth:hinic_ceq_unregister_cb (&func_to_io->ceqs,HINIC_CEQ_CMDQ ); - +free_cmdq (&cmdqs->cmdq[HINIC_CMDQ_SYNC ]); err_cmdq_ctxt:hinic_wqs_cmdq_free (&cmdqs->cmdq_pages, cmdqs->saved_wqs,HINIC_MAX_CMDQ_TYPES );
drivers/net/ethernet/huawei/hinic/hinic_hw_dev.c +1 -1
@@ -892,7 +892,7 @@ int hinic_set_interrupt_cfg(struct hinic_hwdev *hwdev,if (err)return -EINVAL ; - interrupt_info->lli_credit_cnt = temp_info.lli_timer_cnt; + interrupt_info->lli_credit_cnt = temp_info.lli_credit_cnt; interrupt_info->lli_timer_cnt = temp_info.lli_timer_cnt; err = hinic_msg_to_mgmt(&pfhwdev->pf_to_mgmt, HINIC_MOD_COMM,
drivers/net/ethernet/huawei/hinic/hinic_sriov.c +0 -1
@@ -1178,7 +1178,6 @@ int hinic_vf_func_init(struct hinic_hwdev *hwdev)dev_err (&hwdev->hwif->pdev->dev,"Failed to register VF, err: %d, status: 0x%x, out size: 0x%x\n" , err, register_info.status, out_size); -hinic_unregister_vf_mbox_cb (hwdev,HINIC_MOD_L2NIC );return -EIO ; } }else {
drivers/net/ethernet/ibm/ehea/ehea_main.c +1 -0
@@ -2897,6 +2897,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
@@ -1404,6 +1404,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
@@ -39,6 +39,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
@@ -466,7 +466,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/cmd.c +5 -5
@@ -1853,7 +1853,7 @@ void mlx5_cmd_init_async_ctx(struct mlx5_core_dev *dev, ctx->dev = dev;/* Starts at 1 to avoid doing wake_up if we are not cleaning up */ atomic_set (&ctx->num_inflight,1 ); -init_waitqueue_head (&ctx->wait); +init_completion (&ctx->inflight_done); }EXPORT_SYMBOL (mlx5_cmd_init_async_ctx);
@@ -1867,8 +1867,8 @@ EXPORT_SYMBOL(mlx5_cmd_init_async_ctx);*/ void mlx5_cmd_cleanup_async_ctx (struct mlx5_async_ctx *ctx) { -atomic_dec (&ctx->num_inflight); -wait_event (ctx->wait,atomic_read (&ctx->num_inflight) ==0 ); +if (!atomic_dec_and_test (&ctx->num_inflight)) +wait_for_completion (&ctx->inflight_done); }EXPORT_SYMBOL (mlx5_cmd_cleanup_async_ctx);
@@ -1879,7 +1879,7 @@ static void mlx5_cmd_exec_cb_handler(int status, void *_work) work->user_callback (status, work);if (atomic_dec_and_test (&ctx->num_inflight)) -wake_up (&ctx->wait); +complete (&ctx->inflight_done); } int mlx5_cmd_exec_cb(struct mlx5_async_ctx *ctx, void *in, int in_size,
@@ -1895,7 +1895,7 @@ int mlx5_cmd_exec_cb(struct mlx5_async_ctx *ctx, void *in, int in_size, ret =cmd_exec (ctx->dev, in, in_size, out, out_size, mlx5_cmd_exec_cb_handler, work, false);if (ret &&atomic_dec_and_test (&ctx->num_inflight)) -wake_up (&ctx->wait); +complete (&ctx->inflight_done);return ret; }
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +0 -3
@@ -113,7 +113,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 =0 ;u8 overlap; -u32 *esn;if (!(sa_entry->x->props.flags &XFRM_STATE_ESN )) { sa_entry->esn_state.trigger =0 ;
@@ -128,11 +127,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/mellanox/mlx5/core/lib/mpfs.c +3 -3
@@ -122,7 +122,7 @@ void mlx5_mpfs_cleanup(struct mlx5_core_dev *dev) {struct mlx5_mpfs *mpfs = dev->priv.mpfs; -if (!MLX5_ESWITCH_MANAGER (dev)) +if (!mpfs)return ;WARN_ON (!hlist_empty (mpfs->hash));
@@ -137,7 +137,7 @@ int mlx5_mpfs_add_mac(struct mlx5_core_dev *dev, u8 *mac)int err =0 ;u32 index; -if (!MLX5_ESWITCH_MANAGER (dev)) +if (!mpfs)return 0 ;mutex_lock (&mpfs->lock);
@@ -185,7 +185,7 @@ int mlx5_mpfs_del_mac(struct mlx5_core_dev *dev, u8 *mac)int err =0 ;u32 index; -if (!MLX5_ESWITCH_MANAGER (dev)) +if (!mpfs)return 0 ;mutex_lock (&mpfs->lock);
drivers/net/ethernet/micrel/ksz884x.c +1 -1
@@ -6923,7 +6923,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
@@ -1958,11 +1958,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/scsi/qla2xxx/qla_attr.c +26 -2
@@ -3262,11 +3262,34 @@ struct fc_function_template qla2xxx_transport_vport_functions = { .bsg_timeout = qla24xx_bsg_timeout, }; +static uint +qla2x00_get_host_supported_speeds (scsi_qla_host_t *vha,uint speeds) +{ +uint supported_speeds =FC_PORTSPEED_UNKNOWN ; + +if (speeds &FDMI_PORT_SPEED_64GB ) + supported_speeds |=FC_PORTSPEED_64GBIT ; +if (speeds &FDMI_PORT_SPEED_32GB ) + supported_speeds |=FC_PORTSPEED_32GBIT ; +if (speeds &FDMI_PORT_SPEED_16GB ) + supported_speeds |=FC_PORTSPEED_16GBIT ; +if (speeds &FDMI_PORT_SPEED_8GB ) + supported_speeds |=FC_PORTSPEED_8GBIT ; +if (speeds &FDMI_PORT_SPEED_4GB ) + supported_speeds |=FC_PORTSPEED_4GBIT ; +if (speeds &FDMI_PORT_SPEED_2GB ) + supported_speeds |=FC_PORTSPEED_2GBIT ; +if (speeds &FDMI_PORT_SPEED_1GB ) + supported_speeds |=FC_PORTSPEED_1GBIT ; + +return supported_speeds; +} +void qla2x00_init_host_attr (scsi_qla_host_t *vha) {struct qla_hw_data *ha = vha->hw; -u32 speeds =FC_PORTSPEED_UNKNOWN ; +u32 speeds =0 , fdmi_speed =0 ;fc_host_dev_loss_tmo (vha->host) = ha->port_down_retry_count;fc_host_node_name (vha->host) =wwn_to_u64 (vha->node_name);
@@ -3276,7 +3299,8 @@ qla2x00_init_host_attr(scsi_qla_host_t *vha)fc_host_max_npiv_vports (vha->host) = ha->max_npiv_vports;fc_host_npiv_vports_inuse (vha->host) = ha->cur_vport_count; - speeds =qla25xx_fdmi_port_speed_capability (ha); + fdmi_speed =qla25xx_fdmi_port_speed_capability (ha); + speeds =qla2x00_get_host_supported_speeds (vha, fdmi_speed);fc_host_supported_speeds (vha->host) = speeds; }
drivers/scsi/sd.c +2 -1
@@ -1074,6 +1074,7 @@ static blk_status_t sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)struct bio *bio = rq->bio;u64 lba =sectors_to_logical (sdp,blk_rq_pos (rq));u32 nr_blocks =sectors_to_logical (sdp,blk_rq_sectors (rq)); +unsigned int nr_bytes =blk_rq_bytes (rq);blk_status_t ret;if (sdkp->device->no_write_same)
@@ -1110,7 +1111,7 @@ static blk_status_t sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)*/ rq->__data_len = sdp->sector_size; ret =scsi_alloc_sgtables (cmd); - rq->__data_len =blk_rq_bytes (rq); + rq->__data_len = nr_bytes;return ret; }
drivers/tty/serial/8250/8250_omap.c +3 -0
@@ -342,6 +342,9 @@ static void omap8250_restore_regs(struct uart_8250_port *up)omap8250_update_mdr1 (up, priv); up->port.ops->set_mctrl (&up->port, up->port.mctrl); + +if (up->port.rs485.flags &SER_RS485_ENABLED ) +serial8250_em485_stop_tx (up); }/*
drivers/tty/serial/8250/8250_pci.c +1 -8
@@ -1531,7 +1531,6 @@ static int pci_fintek_init(struct pci_dev *dev)resource_size_t bar_data[3 ];u8 config_base;struct serial_private *priv =pci_get_drvdata (dev); -struct uart_8250_port *port; if (!(pci_resource_flags(dev, 5) & IORESOURCE_IO) || !(pci_resource_flags(dev, 4) & IORESOURCE_IO) ||
@@ -1578,13 +1577,7 @@ static int pci_fintek_init(struct pci_dev *dev)pci_write_config_byte (dev, config_base +0x06 , dev->irq); -if (priv) { -/* re-apply RS232/485 mode when -* pciserial_resume_ports() -*/ - port =serial8250_get_port (priv->line[i]); -pci_fintek_rs485_config (&port->port,NULL ); - }else { +if (!priv) {/* First init without port data * force init to RS232 Mode */
drivers/tty/serial/8250/8250_port.c +7 -5
@@ -592,7 +592,7 @@ EXPORT_SYMBOL_GPL(serial8250_rpm_put);static int serial8250_em485_init (struct uart_8250_port *p) {if (p->em485) -return 0 ; + goto deassert_rts; p->em485 =kmalloc (sizeof (struct uart_8250_em485 ),GFP_ATOMIC );if (!p->em485)
@@ -608,7 +608,9 @@ static int serial8250_em485_init(struct uart_8250_port *p) p->em485->active_timer =NULL ; p->em485->tx_stopped = true; - p->rs485_stop_tx (p); +deassert_rts: +if (p->em485->tx_stopped) + p->rs485_stop_tx (p);return 0 ; }
@@ -2030,6 +2032,9 @@ EXPORT_SYMBOL_GPL(serial8250_do_set_mctrl);static void serial8250_set_mctrl (struct uart_port *port,unsigned int mctrl) { +if (port->rs485.flags &SER_RS485_ENABLED ) +return ; +if (port->set_mctrl) port->set_mctrl (port, mctrl);else
@@ -3161,9 +3166,6 @@ static void serial8250_config_port(struct uart_port *port, int flags)if (flags &UART_CONFIG_TYPE )autoconfig (up); -if (port->rs485.flags &SER_RS485_ENABLED ) - port->rs485_config (port, &port->rs485); -/* if access method is AU, it is a 16550 with a quirk */ if (port->type ==PORT_16550A && port->iotype ==UPIO_AU ) up->bugs |=UART_BUG_NOMSR ;
drivers/tty/serial/fsl_lpuart.c +3 -5
@@ -2669,10 +2669,6 @@ static int lpuart_probe(struct platform_device *pdev)if (ret) goto failed_irq_request; - ret =uart_add_one_port (&lpuart_reg, &sport->port); -if (ret) - goto failed_attach_port; - ret =uart_get_rs485_mode (&sport->port);if (ret) goto failed_get_rs485;
@@ -2684,7 +2680,9 @@ static int lpuart_probe(struct platform_device *pdev) sport->port.rs485.delay_rts_after_send)dev_err (&pdev->dev,"driver doesn't support RTS delays\n" ); - sport->port.rs485_config (&sport->port, &sport->port.rs485); + ret =uart_add_one_port (&lpuart_reg, &sport->port); +if (ret) + goto failed_attach_port;return 0 ;
drivers/tty/serial/imx.c +2 -6
@@ -398,8 +398,7 @@ static void imx_uart_rts_active(struct imx_port *sport, u32 *ucr2) { *ucr2 &= ~(UCR2_CTSC |UCR2_CTS ); - sport->port.mctrl |=TIOCM_RTS ; -mctrl_gpio_set (sport->gpios, sport->port.mctrl); +mctrl_gpio_set (sport->gpios, sport->port.mctrl |TIOCM_RTS ); }/* called with port.lock taken and irqs caller dependent */
@@ -408,8 +407,7 @@ static void imx_uart_rts_inactive(struct imx_port *sport, u32 *ucr2) *ucr2 &= ~UCR2_CTSC ; *ucr2 |=UCR2_CTS ; - sport->port.mctrl &= ~TIOCM_RTS ; -mctrl_gpio_set (sport->gpios, sport->port.mctrl); +mctrl_gpio_set (sport->gpios, sport->port.mctrl & ~TIOCM_RTS ); }static void start_hrtimer_ms (struct hrtimer *hrt,unsigned long msec)
@@ -2381,8 +2379,6 @@ static int imx_uart_probe(struct platform_device *pdev)dev_err (&pdev->dev,"low-active RTS not possible when receiver is off, enabling receiver\n" ); -imx_uart_rs485_config (&sport->port, &sport->port.rs485); -/* Disable interrupts before requesting them */ ucr1 =imx_uart_readl (sport,UCR1 ); ucr1 &= ~(UCR1_ADEN |UCR1_TRDYEN |UCR1_IDEN |UCR1_RRDYEN |UCR1_RTSDEN );
drivers/tty/serial/serial_core.c +49 -12
102 lines not on this page · raw message
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
@@ -1064,8 +1064,8 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, 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 :
@@ -2800,6 +2800,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
@@ -915,15 +915,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 +11 -1
@@ -253,6 +253,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == PCI_DEVICE_ID_INTEL_DNV_XHCI)) xhci->quirks |= XHCI_MISSING_CAS; +if (pdev->vendor ==PCI_VENDOR_ID_INTEL && + pdev->device ==PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI ) + xhci->quirks |=XHCI_RESET_TO_DEFAULT ; + if (pdev->vendor == PCI_VENDOR_ID_INTEL && (pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_XHCI || pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_XHCI ||
@@ -302,8 +306,14 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) }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/usb/host/xhci.c +8 -2
@@ -794,9 +794,15 @@ void xhci_shutdown(struct usb_hcd *hcd)spin_lock_irq (&xhci->lock);xhci_halt (xhci); -/* Workaround for spurious wakeups at shutdown with HSW */ -if (xhci->quirks &XHCI_SPURIOUS_WAKEUP ) + +/* +* Workaround for spurious wakeps at shutdown with HSW, and for boot +* firmware delay in ADL-P PCH if port are left in U3 at shutdown +*/ +if (xhci->quirks &XHCI_SPURIOUS_WAKEUP || + xhci->quirks &XHCI_RESET_TO_DEFAULT )xhci_reset (xhci,XHCI_RESET_SHORT_USEC ); +spin_unlock_irq (&xhci->lock);xhci_cleanup_msix (xhci);
drivers/usb/host/xhci.h +1 -0
@@ -1889,6 +1889,7 @@ struct xhci_hcd {#define XHCI_NO_SOFT_RETRY BIT_ULL(40)#define XHCI_EP_CTX_BROKEN_DCS BIT_ULL(42)#define XHCI_SUSPEND_RESUME_CLKS BIT_ULL(43) +#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)unsigned int num_active_eps;unsigned int limit_active_eps;
drivers/video/fbdev/smscufx.c +30 -25
131 lines not on this page · raw message
drivers/xen/gntdev.c +25 -5
@@ -360,8 +360,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 ;
@@ -370,8 +369,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 ;
@@ -387,20 +385,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/binfmt_elf.c +2 -1
@@ -907,7 +907,7 @@ static int load_elf_binary(struct linux_binprm *bprm) interp_elf_ex =kmalloc (sizeof (*interp_elf_ex),GFP_KERNEL );if (!interp_elf_ex) { retval = -ENOMEM ; - goto out_free_ph; + goto out_free_file; }/* Get the exec headers */
@@ -1328,6 +1328,7 @@ static int load_elf_binary(struct linux_binprm *bprm) out_free_dentry:kfree (interp_elf_ex);kfree (interp_elf_phdata); +out_free_file:allow_write_access (interpreter);if (interpreter)fput (interpreter);
fs/exec.c +2 -2
@@ -1198,11 +1198,11 @@ static int unshare_sighand(struct task_struct *me)return -ENOMEM ;refcount_set (&newsighand->count,1 ); -memcpy (newsighand->action, oldsighand->action, -sizeof (newsighand->action));write_lock_irq (&tasklist_lock);spin_lock (&oldsighand->siglock); +memcpy (newsighand->action, oldsighand->action, +sizeof (newsighand->action));rcu_assign_pointer (me->sighand, newsighand);spin_unlock (&oldsighand->siglock);write_unlock_irq (&tasklist_lock);
fs/kernfs/dir.c +4 -1
@@ -1519,8 +1519,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);
include/linux/mlx5/driver.h +1 -1
@@ -899,7 +899,7 @@ void mlx5_cmd_allowed_opcode(struct mlx5_core_dev *dev, u16 opcode);struct mlx5_async_ctx {struct mlx5_core_dev *dev;atomic_t num_inflight; -struct wait_queue_head wait; +struct completion inflight_done; };struct mlx5_async_work ;
include/media/v4l2-common.h +2 -1
@@ -175,7 +175,8 @@ struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,* * @sd: pointer to &struct v4l2_subdev * @client: pointer to struct i2c_client -* @devname: the name of the device; if NULL, the I²C device's name will be used +* @devname: the name of the device; if NULL, the I²C device drivers's name +* will be used * @postfix: sub-device specific string to put right after the I²C device name; * may be NULL */
include/uapi/linux/videodev2.h +2 -1
@@ -1552,7 +1552,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
@@ -637,7 +637,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
@@ -2387,11 +2387,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_add (&page->lru, &h->hugepage_activelist);/* Fall through */ }
mm/memory.c +11 -0
@@ -823,6 +823,17 @@ copy_present_page(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vmaif (likely (!page_maybe_dma_pinned (page)))return 1 ; +/* +* The vma->anon_vma of the child process may be NULL +* because the entire vma does not contain anonymous pages. +* A BUG will occur when the copy_present_page() passes +* a copy of a non-anonymous page of that vma to the +* page_add_new_anon_rmap() to set up new anonymous rmap. +* Return 1 if the page is not an anonymous page. +*/ +if (!PageAnon (page)) +return 1 ; + new_page = *prealloc;if (!new_page)return -EAGAIN ;
net/can/j1939/transport.c +3 -1
@@ -338,10 +338,12 @@ static void j1939_session_skb_drop_old(struct j1939_session *session)__skb_unlink (do_skb, &session->skb_queue);/* drop ref taken in j1939_session_skb_queue() */ skb_unref (do_skb); +spin_unlock_irqrestore (&session->skb_queue.lock, flags);kfree_skb (do_skb); + }else { +spin_unlock_irqrestore (&session->skb_queue.lock, flags); } -spin_unlock_irqrestore (&session->skb_queue.lock, flags); } void j1939_session_skb_queue(struct j1939_session *session,
net/core/net_namespace.c +7 -0
@@ -135,6 +135,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 ;
@@ -153,7 +154,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
@@ -503,8 +503,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/nexthop.c +1 -1
@@ -1346,7 +1346,7 @@ static int nh_create_ipv4(struct net *net, struct nexthop *nh,if (!err) { nh->nh_flags = fib_nh->fib_nh_flags;fib_info_update_nhc_saddr (net, &fib_nh->nh_common, - fib_nh->fib_nh_scope); + !fib_nh->fib_nh_scope ?0 : fib_nh->fib_nh_scope -1 ); }else {fib_nh_release (net, fib_nh); }
net/ipv4/tcp_input.c +2 -1
@@ -2175,7 +2175,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/ipv4/tcp_ipv4.c +4 -3
@@ -1770,8 +1770,7 @@ int tcp_v4_early_demux(struct sk_buff *skb)bool tcp_add_backlog (struct sock *sk,struct sk_buff *skb) { -u32 limit =READ_ONCE (sk->sk_rcvbuf) +READ_ONCE (sk->sk_sndbuf); -u32 tail_gso_size, tail_gso_segs; +u32 limit, tail_gso_size, tail_gso_segs;struct skb_shared_info *shinfo;const struct tcphdr *th;struct tcphdr *thtail;
@@ -1874,11 +1873,13 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)__skb_push (skb, hdrlen); no_coalesce: + limit = (u32 )READ_ONCE (sk->sk_rcvbuf) + (u32)(READ_ONCE (sk->sk_sndbuf) >>1 ); +/* Only socket owner can try to collapse/prune rx queues * to reduce memory overhead, so add a little headroom here. * Few sockets backlog are possibly concurrently non empty. */ - limit +=64 *1024 ; + limit +=64 *1024 ;if (unlikely (sk_add_backlog (sk, skb, limit))) {bh_unlock_sock (sk);
net/ipv6/ip6_gre.c +7 -5
@@ -1153,14 +1153,16 @@ static void ip6gre_tnl_link_config_route(struct ip6_tnl *t, int set_mtu, dev->needed_headroom = dst_len;if (set_mtu) { - dev->mtu = rt->dst.dev->mtu - t_hlen; +int mtu = rt->dst.dev->mtu - t_hlen; +if (!(t->parms.flags &IP6_TNL_F_IGN_ENCAP_LIMIT )) - dev->mtu -=8 ; + mtu -=8 ;if (dev->type ==ARPHRD_ETHER ) - dev->mtu -=ETH_HLEN ; + mtu -=ETH_HLEN ; -if (dev->mtu <IPV6_MIN_MTU ) - dev->mtu =IPV6_MIN_MTU ; +if (mtu <IPV6_MIN_MTU ) + mtu =IPV6_MIN_MTU ; +WRITE_ONCE (dev->mtu, mtu); } }ip6_rt_put (rt);
net/ipv6/ip6_tunnel.c +6 -5
@@ -1476,8 +1476,8 @@ static void ip6_tnl_link_config(struct ip6_tnl *t)struct net_device *tdev =NULL ;struct __ip6_tnl_parm *p = &t->parms;struct flowi6 *fl6 = &t->fl.u.ip6; -unsigned int mtu;int t_hlen; +int mtu;memcpy (dev->dev_addr, &p->laddr,sizeof (struct in6_addr ));memcpy (dev->broadcast, &p->raddr,sizeof (struct in6_addr ));
@@ -1524,12 +1524,13 @@ static void ip6_tnl_link_config(struct ip6_tnl *t) dev->hard_header_len = tdev->hard_header_len + t_hlen; mtu = min_t(unsigned int, tdev->mtu, IP6_MAX_MTU); - dev->mtu = mtu - t_hlen; + mtu = mtu - t_hlen;if (!(t->parms.flags &IP6_TNL_F_IGN_ENCAP_LIMIT )) - dev->mtu -=8 ; + mtu -=8 ; -if (dev->mtu <IPV6_MIN_MTU ) - dev->mtu =IPV6_MIN_MTU ; +if (mtu <IPV6_MIN_MTU ) + mtu =IPV6_MIN_MTU ; +WRITE_ONCE (dev->mtu, mtu); } } }
net/ipv6/sit.c +5 -3
@@ -1123,10 +1123,12 @@ static void ipip6_tunnel_bind_dev(struct net_device *dev)if (tdev && !netif_is_l3_master (tdev)) {int t_hlen = tunnel->hlen +sizeof (struct iphdr ); +int mtu; - dev->mtu = tdev->mtu - t_hlen; -if (dev->mtu <IPV6_MIN_MTU ) - dev->mtu =IPV6_MIN_MTU ; + mtu = tdev->mtu - t_hlen; +if (mtu <IPV6_MIN_MTU ) + mtu =IPV6_MIN_MTU ; +WRITE_ONCE (dev->mtu, mtu); } }
net/kcm/kcmsock.c +15 -8
@@ -161,7 +161,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)
@@ -177,7 +178,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);
@@ -236,7 +237,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 ();
@@ -279,10 +281,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);
@@ -309,7 +313,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
@@ -1239,7 +1244,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);
@@ -1792,7 +1798,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
@@ -132,7 +132,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);
@@ -294,8 +294,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
@@ -1592,7 +1592,8 @@ static void ovs_dp_reset_user_features(struct sk_buff *skb,if (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/tipc/topsrv.c +12 -4
@@ -450,12 +450,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 )
@@ -489,7 +496,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); }
@@ -699,8 +706,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
@@ -147,6 +147,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
@@ -1946,6 +1946,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
@@ -141,7 +141,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 */
@@ -235,8 +235,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
@@ -1998,7 +1998,7 @@ static const 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/pci/rme9652/hdsp.c +13 -13
@@ -436,7 +436,7 @@ struct hdsp_midi {struct snd_rawmidi *rmidi;struct snd_rawmidi_substream *input;struct snd_rawmidi_substream *output; -char istimer;/* timer in use */ +signed char istimer;/* timer in use */ struct timer_list timer;spinlock_t lock;int pending;
@@ -479,7 +479,7 @@ struct hdsp {pid_t playback_pid;int running;int system_sample_rate; -const char *channel_map; +const signed char *channel_map;int dev;int irq;unsigned long port;
@@ -501,7 +501,7 @@ struct hdsp {where the data for that channel can be read/written from/to. */ -static const char channel_map_df_ss[HDSP_MAX_CHANNELS ] = { +static const signed char channel_map_df_ss[HDSP_MAX_CHANNELS ] = {0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 };
@@ -516,7 +516,7 @@ static const char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 }; -static const char channel_map_ds[HDSP_MAX_CHANNELS ] = { +static const signed char channel_map_ds[HDSP_MAX_CHANNELS ] = {/* ADAT channels are remapped */ 1 ,3 ,5 ,7 ,9 ,11 ,13 ,15 ,17 ,19 ,21 ,23 , /* channels 12 and 13 are S/PDIF */
@@ -525,7 +525,7 @@ static const char channel_map_ds[HDSP_MAX_CHANNELS] = {-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 }; -static const char channel_map_H9632_ss[HDSP_MAX_CHANNELS ] = { +static const signed char channel_map_H9632_ss[HDSP_MAX_CHANNELS ] = {/* ADAT channels */ 0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 , /* SPDIF */
@@ -539,7 +539,7 @@ static const char channel_map_H9632_ss[HDSP_MAX_CHANNELS] = {-1 ,-1 }; -static const char channel_map_H9632_ds[HDSP_MAX_CHANNELS ] = { +static const signed char channel_map_H9632_ds[HDSP_MAX_CHANNELS ] = {/* ADAT */ 1 ,3 ,5 ,7 , /* SPDIF */
@@ -553,7 +553,7 @@ static const char channel_map_H9632_ds[HDSP_MAX_CHANNELS] = {-1 ,-1 ,-1 ,-1 ,-1 ,-1 }; -static const char channel_map_H9632_qs[HDSP_MAX_CHANNELS ] = { +static const signed char channel_map_H9632_qs[HDSP_MAX_CHANNELS ] = {/* ADAT is disabled in this mode */ /* SPDIF */ 8, 9,
@@ -3869,7 +3869,7 @@ static snd_pcm_uframes_t snd_hdsp_hw_pointer(struct snd_pcm_substream *substreamreturn hdsp_hw_pointer (hdsp); } -static char *hdsp_channel_buffer_location (struct hdsp *hdsp, +static signed char *hdsp_channel_buffer_location (struct hdsp *hdsp,int stream,int channel)
@@ -3893,7 +3893,7 @@ static int snd_hdsp_playback_copy(struct snd_pcm_substream *substream, void __user *src, unsigned long count) {struct hdsp *hdsp =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf;if (snd_BUG_ON (pos + count >HDSP_CHANNEL_BUFFER_BYTES ))return -EINVAL ;
@@ -3911,7 +3911,7 @@ static int snd_hdsp_playback_copy_kernel(struct snd_pcm_substream *substream, void *src, unsigned long count) {struct hdsp *hdsp =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf; channel_buf =hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);if (snd_BUG_ON (!channel_buf))
@@ -3925,7 +3925,7 @@ static int snd_hdsp_capture_copy(struct snd_pcm_substream *substream, void __user *dst, unsigned long count) {struct hdsp *hdsp =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf;if (snd_BUG_ON (pos + count >HDSP_CHANNEL_BUFFER_BYTES ))return -EINVAL ;
@@ -3943,7 +3943,7 @@ static int snd_hdsp_capture_copy_kernel(struct snd_pcm_substream *substream, void *dst, unsigned long count) {struct hdsp *hdsp =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf; channel_buf =hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);if (snd_BUG_ON (!channel_buf))
@@ -3957,7 +3957,7 @@ static int snd_hdsp_hw_silence(struct snd_pcm_substream *substream, unsigned long count) {struct hdsp *hdsp =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf; channel_buf =hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);if (snd_BUG_ON (!channel_buf))
sound/pci/rme9652/rme9652.c +11 -11
@@ -229,7 +229,7 @@ struct snd_rme9652 {int last_spdif_sample_rate;/* so that we can catch externally ... */ int last_adat_sample_rate;/* ... induced rate changes */ -const char *channel_map; +const signed char *channel_map;struct snd_card *card;struct snd_pcm *pcm;
@@ -246,12 +246,12 @@ struct snd_rme9652 {where the data for that channel can be read/written from/to. */ -static const char channel_map_9652_ss[26 ] = { +static const signed char channel_map_9652_ss[26 ] = {0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 }; -static const char channel_map_9636_ss[26 ] = { +static const signed char channel_map_9636_ss[26 ] = {0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,/* channels 16 and 17 are S/PDIF */ 24 ,25 ,
@@ -259,7 +259,7 @@ static const char channel_map_9636_ss[26] = {-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 }; -static const char channel_map_9652_ds[26 ] = { +static const signed char channel_map_9652_ds[26 ] = {/* ADAT channels are remapped */ 1 ,3 ,5 ,7 ,9 ,11 ,13 ,15 ,17 ,19 ,21 ,23 , /* channels 12 and 13 are S/PDIF */
@@ -268,7 +268,7 @@ static const char channel_map_9652_ds[26] = {-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 }; -static const char channel_map_9636_ds[26 ] = { +static const signed char channel_map_9636_ds[26 ] = {/* ADAT channels are remapped */ 1 ,3 ,5 ,7 ,9 ,11 ,13 ,15 , /* channels 8 and 9 are S/PDIF */
@@ -1841,7 +1841,7 @@ static snd_pcm_uframes_t snd_rme9652_hw_pointer(struct snd_pcm_substream *substrreturn rme9652_hw_pointer (rme9652); } -static char *rme9652_channel_buffer_location (struct snd_rme9652 *rme9652, +static signed char *rme9652_channel_buffer_location (struct snd_rme9652 *rme9652,int stream,int channel)
@@ -1869,7 +1869,7 @@ static int snd_rme9652_playback_copy(struct snd_pcm_substream *substream, void __user *src, unsigned long count) {struct snd_rme9652 *rme9652 =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf;if (snd_BUG_ON (pos + count >RME9652_CHANNEL_BUFFER_BYTES ))return -EINVAL ;
@@ -1889,7 +1889,7 @@ static int snd_rme9652_playback_copy_kernel(struct snd_pcm_substream *substream, void *src, unsigned long count) {struct snd_rme9652 *rme9652 =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf; channel_buf = rme9652_channel_buffer_location(rme9652, substream->pstr->stream,
@@ -1905,7 +1905,7 @@ static int snd_rme9652_capture_copy(struct snd_pcm_substream *substream, void __user *dst, unsigned long count) {struct snd_rme9652 *rme9652 =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf;if (snd_BUG_ON (pos + count >RME9652_CHANNEL_BUFFER_BYTES ))return -EINVAL ;
@@ -1925,7 +1925,7 @@ static int snd_rme9652_capture_copy_kernel(struct snd_pcm_substream *substream, void *dst, unsigned long count) {struct snd_rme9652 *rme9652 =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf; channel_buf = rme9652_channel_buffer_location(rme9652, substream->pstr->stream,
@@ -1941,7 +1941,7 @@ static int snd_rme9652_hw_silence(struct snd_pcm_substream *substream, unsigned long count) {struct snd_rme9652 *rme9652 =snd_pcm_substream_chip (substream); -char *channel_buf; +signed char *channel_buf; channel_buf = rme9652_channel_buffer_location (rme9652, substream->pstr->stream,
sound/soc/qcom/lpass-cpu.c +10 -0
@@ -745,10 +745,20 @@ static bool lpass_hdmi_regmap_volatile(struct device *dev, unsigned int reg)return true;if (reg ==LPASS_HDMI_TX_LEGACY_ADDR (v))return true; +if (reg ==LPASS_HDMI_TX_VBIT_CTL_ADDR (v)) +return true; +if (reg ==LPASS_HDMI_TX_PARITY_ADDR (v)) +return true;for (i =0 ; i < v->hdmi_rdma_channels; ++i) {if (reg ==LPAIF_HDMI_RDMACURR_REG (v, i))return true; +if (reg ==LPASS_HDMI_TX_DMA_ADDR (v, i)) +return true; +if (reg ==LPASS_HDMI_TX_CH_LSB_ADDR (v, i)) +return true; +if (reg ==LPASS_HDMI_TX_CH_MSB_ADDR (v, i)) +return true; }return false; }
sound/synth/emux/emux.c +1 -6
@@ -125,15 +125,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
@@ -543,6 +543,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
@@ -2164,11 +2164,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));