Linux 5.10.83
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.83 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/networking/ipvs-sysctl.rst | 3 Makefile | 2 arch/arm/boot/dts/bcm2711.dtsi | 8 arch/arm/boot/dts/bcm5301x.dtsi | 4 arch/arm/mach-socfpga/core.h | 2 arch/arm/mach-socfpga/platsmp.c | 8 arch/mips/Kconfig | 2 arch/mips/kernel/cpu-probe.c | 4 arch/parisc/kernel/vmlinux.lds.S | 3 arch/powerpc/kernel/head_32.h | 6 arch/powerpc/kvm/book3s_hv_builtin.c | 5 arch/s390/mm/pgtable.c | 13 drivers/acpi/property.c | 11 drivers/android/binder.c | 2 drivers/block/xen-blkfront.c | 126 +++-- drivers/firmware/arm_scmi/scmi_pm_domain.c | 4 drivers/firmware/smccc/soc_id.c | 2 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 46 +- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c | 6 drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c | 6 drivers/gpu/drm/vc4/vc4_bo.c | 2 drivers/hid/wacom_wac.c | 8 drivers/hid/wacom_wac.h | 1 drivers/iommu/amd/iommu_v2.c | 6 drivers/media/cec/core/cec-adap.c | 1 drivers/mmc/host/sdhci-esdhc-imx.c | 2 drivers/mmc/host/sdhci.c | 21 drivers/mmc/host/sdhci.h | 4 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 4 drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 30 + drivers/net/ethernet/intel/ice/ice_lib.c | 9 drivers/net/ethernet/intel/ice/ice_main.c | 18 drivers/net/ethernet/intel/igb/igb_main.c | 2 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 14 drivers/net/ethernet/marvell/prestera/prestera_switchdev.c | 6 drivers/net/ethernet/mellanox/mlxsw/minimal.c | 4 drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 5 drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c | 3 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 3 drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 4 drivers/net/ethernet/microchip/lan743x_main.c | 12 drivers/net/ethernet/mscc/ocelot.c | 11 drivers/net/ethernet/netronome/nfp/nfp_net.h | 3 drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c | 2 drivers/net/ethernet/stmicro/stmmac/stmmac.h | 1 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 139 +++--- drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 44 ++ drivers/net/mdio/mdio-aspeed.c | 7 drivers/net/phy/phylink.c | 26 + drivers/net/xen-netfront.c | 272 +++++++----- drivers/nvme/target/io-cmd-file.c | 4 drivers/nvme/target/tcp.c | 7 drivers/pci/controller/pci-aardvark.c | 235 ++++------ drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 drivers/scsi/scsi_debug.c | 5 drivers/scsi/scsi_sysfs.c | 2 drivers/staging/fbtft/fb_ssd1351.c | 4 drivers/staging/fbtft/fbtft-core.c | 9 drivers/staging/greybus/audio_helper.c | 8 drivers/staging/rtl8192e/rtl8192e/rtl_core.c | 3 drivers/tty/hvc/hvc_xen.c | 17 drivers/usb/chipidea/ci_hdrc_imx.c | 18 drivers/usb/core/hub.c | 24 - drivers/usb/dwc2/gadget.c | 17 drivers/usb/dwc2/hcd_queue.c | 2 drivers/usb/dwc3/gadget.c | 39 + drivers/usb/serial/option.c | 5 drivers/usb/typec/tcpm/fusb302.c | 6 drivers/vhost/vsock.c | 2 drivers/xen/xenbus/xenbus_probe.c | 27 + fs/ceph/super.c | 11 fs/cifs/file.c | 35 + fs/erofs/utils.c | 8 fs/f2fs/node.c | 1 fs/fuse/dev.c | 10 fs/nfs/nfs42xdr.c | 3 fs/proc/vmcore.c | 16 include/linux/bpf.h | 3 include/linux/ipc_namespace.h | 15 include/linux/sched/task.h | 2 include/net/ip6_fib.h | 1 include/net/ipv6_stubs.h | 1 include/net/nl802154.h | 7 include/xen/interface/io/ring.h | 278 +++++++------ ipc/shm.c | 189 ++++++-- kernel/bpf/syscall.c | 57 +- kernel/bpf/verifier.c | 17 kernel/cpu.c | 7 kernel/power/hibernate.c | 6 kernel/sched/core.c | 4 kernel/trace/trace.h | 24 - kernel/trace/trace_events.c | 10 kernel/trace/trace_uprobe.c | 1 net/8021q/vlan.c | 3 net/8021q/vlan_dev.c | 3 net/ipv4/nexthop.c | 35 + net/ipv4/tcp.c | 4 net/ipv4/tcp_cubic.c | 5 net/ipv6/af_inet6.c | 1 net/ipv6/ip6_output.c | 2 net/ipv6/route.c | 19 net/mptcp/options.c | 3 net/ncsi/ncsi-cmd.c | 24 - net/netfilter/ipvs/ip_vs_core.c | 8 net/netfilter/nf_conntrack_netlink.c | 6 net/netfilter/nf_flow_table_offload.c | 4 net/sched/sch_ets.c | 8 net/smc/af_smc.c | 12 net/smc/smc_close.c | 6 net/smc/smc_core.c | 35 - net/tls/tls_main.c | 47 +- net/tls/tls_sw.c | 23 - sound/hda/intel-dsp-config.c | 9 sound/pci/ctxfi/ctamixer.c | 14 sound/pci/ctxfi/ctdaio.c | 16 sound/pci/ctxfi/ctresource.c | 7 sound/pci/ctxfi/ctresource.h | 4 sound/pci/ctxfi/ctsrc.c | 7 sound/pci/hda/patch_realtek.c | 28 + sound/soc/codecs/wcd934x.c | 3 sound/soc/qcom/qdsp6/q6asm-dai.c | 19 sound/soc/qcom/qdsp6/q6routing.c | 6 sound/soc/soc-topology.c | 3 124 files changed, 1596 insertions(+), 841 deletions(-)
Adrian Hunter (1):
mmc: sdhci: Fix ADMA for PAGE_SIZE >= 64KiB
Albert Wang (1):
usb: dwc3: gadget: Fix null pointer exception
Alex Deucher (1):
drm/amdgpu/gfx9: switch to golden tsc registers for renoir+
Alexander Aring (1):
net: ieee802154: handle iftypes as u32
Alexander Mikhalitsyn (1):
shm: extend forced shm destroy to support objects from several IPC nses
Amit Cohen (1):
mlxsw: spectrum: Protect driver from buggy firmware
Arjun Roy (1):
tcp: correctly handle increased zerocopy args struct size
Christophe Leroy (1):
powerpc/32: Fix hardlockup on vmap stack overflow
Dan Carpenter (4):
usb: chipidea: ci_hdrc_imx: fix potential error pointer dereference in probe
staging: rtl8192e: Fix use after free in _rtl92e_pci_disconnect() drm/nouveau/acr: fix a couple NULL vs IS_ERR() checks
drm/vc4: fix error code in vc4_create_object()
Daniel Borkmann (1):
bpf: Fix toctou on read-only map's constant scalar tracking
Daniele Palmas (1):
USB: serial: option: add Telit LE910S1 0x9200 composition
Danielle Ratson (1):
mlxsw: Verify the accessed index doesn't exceed the array length
David Hildenbrand (2):
proc/vmcore: fix clearing user buffer by properly using clear_user() s390/mm: validate VMA in PGSTE manipulation functions
Davide Caratti (1):
net/sched: sch_ets: don't peek at classes beyond 'nbands'
Diana Wang (1):
nfp: checking parameter process for rx-usecs/tx-usecs is invalid
Dylan Hung (1):
mdio: aspeed: Fix "Link is Down" issue
Eric Dumazet (3):
mptcp: fix delack timer
ipv6: fix typos in __ip6_finish_output()
tcp_cubic: fix spurious Hystart ACK train detections for not-cwnd-limited flows
Florent Fourcot (2):
netfilter: ctnetlink: fix filtering with CTA_TUPLE_REPLY
netfilter: ctnetlink: do not erase error code with EINVAL
Florian Fainelli (3):
ARM: dts: BCM5301X: Fix I2C controller interrupt
ARM: dts: BCM5301X: Add interrupt properties to GPIO node
ARM: dts: bcm2711: Fix PCIe interrupts
Greg Kroah-Hartman (1):
Linux 5.10.83
Guangbin Huang (1):
net: hns3: fix VF RSS failed problem after PF enable multi-TCs
Guo DaXing (1):
net/smc: Fix loop in smc_listen
Hans Verkuil (1):
media: cec: copy sequence field for the reply
Heiner Kallweit (1):
lan743x: fix deadlock in lan743x_phy_link_status_change()
Helge Deller (1):
Revert "parisc: Fix backtrace to always include init funtion names"
Holger Assmann (1):
net: stmmac: retain PTP clock time during SIOCSHWTSTAMP ioctls
Huang Jianan (1):
erofs: fix deadlock when shrink erofs slab
Huang Pei (2):
MIPS: loongson64: fix FTLB configuration
MIPS: use 3-level pgtable for 64KB page size on MIPS_VA_BITS_48
Jakub Kicinski (2):
tls: splice_read: fix record type check
tls: fix replacing proto_ops
Jason Gerecke (1):
HID: wacom: Use "Confidence" flag to prevent reporting invalid contacts
Jeff Layton (1):
ceph: properly handle statfs on multifs setups
Jesse Brandeburg (1):
igb: fix netpoll exit with traffic
Jiri Olsa (1):
tracing/uprobe: Fix uprobe_perf_open probes iteration
Joakim Zhang (2):
net: stmmac: fix system hang caused by eee_ctrl_timer during suspend/resume
net: stmmac: platform: fix build warning when with !CONFIG_PM_SLEEP
Joerg Roedel (1):
iommu/amd: Clarify AMD IOMMUv2 initialization messages
Juergen Gross (9):
xen: sync include/xen/interface/io/ring.h with Xen's newest version xen/blkfront: read response from backend only once xen/blkfront: don't take local copy of a request from the ring page xen/blkfront: don't trust the backend response data blindly xen/netfront: read response from backend only once xen/netfront: don't read data from request on the ring page xen/netfront: disentangle tx_skb_freelist
xen/netfront: don't trust the backend response data blindly
tty: hvc: replace BUG_ON() with negative return value
Karsten Graul (1):
net/smc: Fix NULL pointer dereferencing in smc_vlan_by_tcpsk()
Kumar Thangavel (1):
net/ncsi : Add payload to be 32-bit aligned to fix dropped packets
Maciej Fijalkowski (1):
ice: fix vsi->txq_map sizing
Marek Behún (2):
PCI: aardvark: Deduplicate code in advk_pcie_rd_conf()
net: marvell: mvpp2: increase MTU limit when XDP enabled
Mark Rutland (1):
sched/scs: Reset task stack state in bringup_cpu()
Marta Plantykow (1):
ice: avoid bpf_prog refcount underflow
Mathias Nyman (2):
usb: hub: Fix usb enumeration issue due to address0 race
usb: hub: Fix locking issues with address0_mutex
Maurizio Lombardi (1):
nvmet: use IOCB_NOWAIT only if the filesystem supports it
Michael Kelley (1):
firmware: smccc: Fix check for ARCH_SOC_ID not implemented
Mike Christie (1):
scsi: core: sysfs: Fix setting device state to SDEV_RUNNING
Miklos Szeredi (1):
fuse: release pipe buf after last use
Minas Harutyunyan (1):
usb: dwc2: gadget: Fix ISOC flow for elapsed frames
Mingjie Zhang (1):
USB: serial: option: add Fibocom FM101-GL variants
Nathan Chancellor (1):
usb: dwc2: hcd_queue: Fix use of floating point literal
Nicholas Kazlauskas (1):
drm/amd/display: Set plane update flags for all planes in reset
Nicholas Piggin (1):
KVM: PPC: Book3S HV: Prevent POWER7/8 TLB flush flushing SLB
Nikolay Aleksandrov (3):
net: nexthop: fix null pointer dereference when IPv6 is not enabled
net: ipv6: add fib6_nh_release_dsts stub
net: nexthop: release IPv6 per-cpu dsts when replacing a nexthop group
Nitesh B Venkatesh (1):
iavf: Prevent changing static ITR values if adaptive moderation is on
Noralf Trønnes (1):
staging/fbtft: Fix backlight
Ondrej Jirman (1):
usb: typec: fusb302: Fix masking of comparator and bc_lvl interrupts
Pali Rohár (4):
PCI: aardvark: Update comment about disabling link training
PCI: aardvark: Implement re-issuing config requests on CRS response
PCI: aardvark: Simplify initialization of rootcap on virtual bridge
PCI: aardvark: Fix link training
Peng Fan (1):
firmware: arm_scmi: pm: Propagate return value to caller
Pierre-Louis Bossart (1):
ALSA: intel-dsp-config: add quirk for JSL devices based on ES8336 codec
Russell King (Oracle) (2):
net: phylink: Force link down and retrigger resolve on interface change
net: phylink: Force retrigger in case of latched link-fail indicator
Sakari Ailus (1):
ACPI: Get acpi_device's parent from the parent field
Shin'ichiro Kawasaki (1):
scsi: scsi_debug: Zero clear zones at reset write pointer
Sreekanth Reddy (1):
scsi: mpt3sas: Fix kernel panic during drive powercycle test
Srinivas Kandagatla (3):
ASoC: qdsp6: q6routing: Conditionally reset FrontEnd Mixer
ASoC: qdsp6: q6asm: fix q6asm_dai_prepare error handling
ASoC: codecs: wcd934x: return error code correctly from hw_params
Stefano Garzarella (1):
vhost/vsock: fix incorrect used length reported to the guest
Stefano Stabellini (2):
xen: don't continue xenstore initialization in case of errors
xen: detect uninitialized xenbus in xenbus_init
Steve French (1):
smb3: do not error on fsync when readonly
Steven Rostedt (VMware) (2):
tracing: Fix pid filtering when triggers are attached
tracing: Check pid filtering when creating events
Takashi Iwai (5):
ALSA: ctxfi: Fix out-of-range access
ALSA: hda/realtek: Fix LED on HP ProBook 435 G7
staging: greybus: Add missing rwsem around snd_ctl_remove() calls
ASoC: topology: Add missing rwsem around snd_ctl_remove() calls
ARM: socfpga: Fix crash with CONFIG_FORTIRY_SOURCE
Thinh Nguyen (2):
usb: dwc3: gadget: Ignore NoStream after End Transfer
usb: dwc3: gadget: Check for L1/L2/U3 for Start Transfer
Thomas Zeitlhofer (1):
PM: hibernate: use correct mode for swsusp_close()
Tim Harvey (1):
mmc: sdhci-esdhc-imx: disable CMDQ support
Todd Kjos (1):
binder: fix test regression due to sender_euid change
Tony Lu (2):
net/smc: Ensure the active closing peer first closes clcsock net/smc: Don't call clcsock shutdown twice when smc shutdown
Trond Myklebust (1):
NFSv42: Don't fail clone() unless the OP_CLONE operation failed
Varun Prakash (1):
nvmet-tcp: fix incomplete data digest send
Vladimir Oltean (2):
net: mscc: ocelot: don't downgrade timestamping RX filters in SIOCSHWTSTAMP
net: mscc: ocelot: correctly report the timestamping RX filters in ethtool
Volodymyr Mytnyk (1):
net: marvell: prestera: fix double free issue on err path
Weichao Guo (1):
f2fs: set SBI_NEED_FSCK flag when inconsistent node block found
Werner Sembach (1):
ALSA: hda/realtek: Add quirk for ASRock NUC Box 1100
Will Mortensen (1):
netfilter: flowtable: fix IPv6 tunnel addr match
Ziyang Xuan (1):
net: vlan: fix underflow for the real_dev refcnt
yangxingwu (1):
netfilter: ipvs: Fix reuse connection if RS weight is 0
Greg Kroah-Hartman
maintainerDocumentation/networking/ipvs-sysctl.rst +1 -2
@@ -37,8 +37,7 @@ conn_reuse_mode - INTEGER 0: disable any special handling on port reuse. The new connection will be delivered to the same real server that was - servicing the previous connection. This will effectively - disable expire_nodest_conn. + servicing the previous connection. bit 1: enable rescheduling of new connections when it is safe. That is, whenever expire_nodest_conn and for TCP sockets, when
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 82 +SUBLEVEL = 83 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/bcm2711.dtsi +7 -1
@@ -480,11 +480,17 @@ pcie0: pcie@7d500000 { #address-cells = <3>; #interrupt-cells = <1>; #size-cells = <2>; - interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>, + interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "pcie", "msi"; interrupt-map-mask = <0x0 0x0 0x0 0x7>; interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143 + IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 2 &gicv2 GIC_SPI 144 + IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 3 &gicv2 GIC_SPI 145 + IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 4 &gicv2 GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>; msi-controller; msi-parent = <&pcie0>;
arch/arm/boot/dts/bcm5301x.dtsi +3 -1
@@ -242,6 +242,8 @@ chipcommon: chipcommon@0 { gpio-controller; #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; }; pcie0: pcie@12000 {
@@ -408,7 +410,7 @@ uart2: serial@18008000 { i2c0: i2c@18009000 { compatible = "brcm,iproc-i2c"; reg = <0x18009000 0x50>; - interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; #address-cells = <1>; #size-cells = <0>; clock-frequency = <100000>;
arch/arm/mach-socfpga/core.h +1 -1
@@ -33,7 +33,7 @@ extern void __iomem *sdr_ctl_base_addr;u32 socfpga_sdram_self_refresh (u32 sdr_base);extern unsigned int socfpga_sdram_self_refresh_sz; -extern char secondary_trampoline, secondary_trampoline_end; +extern char secondary_trampoline[], secondary_trampoline_end[];extern unsigned long socfpga_cpu1start_addr;
arch/arm/mach-socfpga/platsmp.c +4 -4
@@ -20,14 +20,14 @@static int socfpga_boot_secondary (unsigned int cpu,struct task_struct *idle) { -int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; +int trampoline_size = secondary_trampoline_end - secondary_trampoline;if (socfpga_cpu1start_addr) {/* This will put CPU #1 into reset. */ writel (RSTMGR_MPUMODRST_CPU1 , rst_manager_base_addr +SOCFPGA_RSTMGR_MODMPURST ); -memcpy (phys_to_virt (0 ), &secondary_trampoline, trampoline_size); +memcpy (phys_to_virt (0 ), secondary_trampoline, trampoline_size);writel (__pa_symbol (secondary_startup), sys_manager_base_addr + (socfpga_cpu1start_addr &0x000000ff ));
@@ -45,12 +45,12 @@ static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)static int socfpga_a10_boot_secondary (unsigned int cpu,struct task_struct *idle) { -int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; +int trampoline_size = secondary_trampoline_end - secondary_trampoline;if (socfpga_cpu1start_addr) {writel (RSTMGR_MPUMODRST_CPU1 , rst_manager_base_addr +SOCFPGA_A10_RSTMGR_MODMPURST ); -memcpy (phys_to_virt (0 ), &secondary_trampoline, trampoline_size); +memcpy (phys_to_virt (0 ), secondary_trampoline, trampoline_size);writel (__pa_symbol (secondary_startup), sys_manager_base_addr + (socfpga_cpu1start_addr &0x00000fff ));
arch/mips/Kconfig +1 -1
@@ -3189,7 +3189,7 @@ config STACKTRACE_SUPPORT config PGTABLE_LEVELS int default 4 if PAGE_SIZE_4KB && MIPS_VA_BITS_48 - default 3 if 64BIT && !PAGE_SIZE_64KB + default 3 if 64BIT && (!PAGE_SIZE_64KB || MIPS_VA_BITS_48) default 2 config MIPS_AUTO_PFN_OFFSET
arch/mips/kernel/cpu-probe.c +2 -2
@@ -1721,8 +1721,6 @@ static inline void decode_cpucfg(struct cpuinfo_mips *c)static inline void cpu_probe_loongson (struct cpuinfo_mips *c,unsigned int cpu) { -decode_configs (c); -/* All Loongson processors covered here define ExcCode 16 as GSExc. */ c->options |=MIPS_CPU_GSEXCEX ;
@@ -1783,6 +1781,8 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)panic ("Unknown Loongson Processor ID!" ); break; } + +decode_configs (c); }#else static inline void cpu_probe_loongson (struct cpuinfo_mips *c,unsigned int cpu) { }
arch/parisc/kernel/vmlinux.lds.S +1 -2
@@ -57,8 +57,6 @@ SECTIONS { . = KERNEL_BINARY_TEXT_START; - _stext = .; /* start of kernel text, includes init code & data */ - __init_begin = .; HEAD_TEXT_SECTION MLONGCALL_DISCARD(INIT_TEXT_SECTION(8))
@@ -82,6 +80,7 @@ SECTIONS /* freed after init ends here */ _text = .; /* Text and read-only data */ + _stext = .; MLONGCALL_KEEP(INIT_TEXT_SECTION(8)) .text ALIGN(PAGE_SIZE) : { TEXT_TEXT
arch/powerpc/kernel/head_32.h +3 -3
@@ -333,11 +333,11 @@mfspr r1,SPRN_SPRG_THREAD lwz r1, TASK_CPU - THREAD(r1) slwi r1, r1, 3 - addis r1, r1, emergency_ctx@ha + addis r1, r1, emergency_ctx-PAGE_OFFSET@ha #else - lis r1, emergency_ctx@ha + lis r1, emergency_ctx-PAGE_OFFSET@ha #endif - lwz r1, emergency_ctx@l(r1) + lwz r1, emergency_ctx-PAGE_OFFSET@l(r1) addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE EXCEPTION_PROLOG_2SAVE_NVGPRS (r11 )
arch/powerpc/kvm/book3s_hv_builtin.c +4 -1
@@ -867,6 +867,7 @@ static void flush_guest_tlb(struct kvm *kvm) "r" (0) : "memory"); } asmvolatile ("ptesync" : : :"memory" ); +// POWER9 congruence-class TLBIEL leaves ERAT. Flush it now. asm volatile(PPC_RADIX_INVALIDATE_ERAT_GUEST : : :"memory"); }else {for (set =0 ; set < kvm->arch.tlb_sets; ++set) {
@@ -877,7 +878,9 @@ static void flush_guest_tlb(struct kvm *kvm) rb +=PPC_BIT (51 );/* increment set number */ } asmvolatile ("ptesync" : : :"memory" ); - asm volatile(PPC_ISA_3_0_INVALIDATE_ERAT : : :"memory"); +// POWER9 congruence-class TLBIEL leaves ERAT. Flush it now. +if (cpu_has_feature (CPU_FTR_ARCH_300 )) + asm volatile(PPC_ISA_3_0_INVALIDATE_ERAT : : :"memory"); } }
arch/s390/mm/pgtable.c +13 -0
@@ -988,6 +988,7 @@ EXPORT_SYMBOL(get_guest_storage_key);int pgste_perform_essa (struct mm_struct *mm,unsigned long hva,int orc,unsigned long *oldpte,unsigned long *oldpgste) { +struct vm_area_struct *vma;unsigned long pgstev;spinlock_t *ptl;pgste_t pgste;
@@ -997,6 +998,10 @@ int pgste_perform_essa(struct mm_struct *mm, unsigned long hva, int orc,WARN_ON_ONCE (orc >ESSA_MAX );if (unlikely (orc >ESSA_MAX ))return -EINVAL ; + + vma =find_vma (mm, hva); +if (!vma || hva < vma->vm_start ||is_vm_hugetlb_page (vma)) +return -EFAULT ; ptep =get_locked_pte (mm, hva, &ptl);if (unlikely (!ptep))return -EFAULT ;
@@ -1089,10 +1094,14 @@ EXPORT_SYMBOL(pgste_perform_essa);int set_pgste_bits (struct mm_struct *mm,unsigned long hva,unsigned long bits,unsigned long value) { +struct vm_area_struct *vma;spinlock_t *ptl;pgste_t new;pte_t *ptep; + vma =find_vma (mm, hva); +if (!vma || hva < vma->vm_start ||is_vm_hugetlb_page (vma)) +return -EFAULT ; ptep =get_locked_pte (mm, hva, &ptl);if (unlikely (!ptep))return -EFAULT ;
@@ -1117,9 +1126,13 @@ EXPORT_SYMBOL(set_pgste_bits);*/ int get_pgste (struct mm_struct *mm,unsigned long hva,unsigned long *pgstep) { +struct vm_area_struct *vma;spinlock_t *ptl;pte_t *ptep; + vma =find_vma (mm, hva); +if (!vma || hva < vma->vm_start ||is_vm_hugetlb_page (vma)) +return -EFAULT ; ptep =get_locked_pte (mm, hva, &ptl);if (unlikely (!ptep))return -EFAULT ;
drivers/acpi/property.c +3 -8
@@ -1110,15 +1110,10 @@ struct fwnode_handle *acpi_node_get_parent(const struct fwnode_handle *fwnode)/* All data nodes have parent pointer so just return that */ return to_acpi_data_node (fwnode)->parent; }else if (is_acpi_device_node (fwnode)) { -acpi_handle handle, parent_handle; +struct device *dev =to_acpi_device_node (fwnode)->dev.parent; - handle =to_acpi_device_node (fwnode)->handle; -if (ACPI_SUCCESS (acpi_get_parent (handle, &parent_handle))) { -struct acpi_device *adev; - -if (!acpi_bus_get_device (parent_handle, &adev)) -return acpi_fwnode_handle (adev); - } +if (dev) +return acpi_fwnode_handle (to_acpi_device (dev)); }return NULL ;
drivers/android/binder.c +1 -1
@@ -3091,7 +3091,7 @@ static void binder_transaction(struct binder_proc *proc, t->from = thread; else t->from = NULL; - t->sender_euid = proc->cred->euid; + t->sender_euid =task_euid (proc->tsk); t->to_proc = target_proc; t->to_thread = target_thread; t->code = tr->code;
drivers/block/xen-blkfront.c +84 -42
261 lines not on this page · raw message
drivers/firmware/arm_scmi/scmi_pm_domain.c +1 -3
@@ -106,9 +106,7 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev) scmi_pd_data->domains = domains; scmi_pd_data->num_domains = num_domains; -of_genpd_add_provider_onecell (np, scmi_pd_data); - -return 0 ; +return of_genpd_add_provider_onecell (np, scmi_pd_data); }static const struct scmi_device_id scmi_id_table[] = {
drivers/firmware/smccc/soc_id.c +1 -1
@@ -50,7 +50,7 @@ static int __init smccc_soc_init(void)arm_smccc_1_1_invoke (ARM_SMCCC_ARCH_FEATURES_FUNC_ID ,ARM_SMCCC_ARCH_SOC_ID , &res); -if (res.a0 ==SMCCC_RET_NOT_SUPPORTED ) { +if ((int )res.a0 ==SMCCC_RET_NOT_SUPPORTED ) {pr_info ("ARCH_SOC_ID not implemented, skipping ....\n" );return 0 ; }
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +35 -11
60 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +2 -2
@@ -1963,8 +1963,8 @@ static int dm_resume(void *handle)for (i =0 ; i < dc_state->stream_count; i++) { dc_state->streams[i]->mode_changed = true; -for (j =0 ; j < dc_state->stream_status->plane_count; j++) { - dc_state->stream_status->plane_states[j]->update_flags.raw +for (j =0 ; j < dc_state->stream_status[i].plane_count; j++) { + dc_state->stream_status[i].plane_states[j]->update_flags.raw =0xffffffff ; } }
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.c +4 -2
@@ -207,11 +207,13 @@ int gm200_acr_wpr_parse(struct nvkm_acr *acr) {const struct wpr_header *hdr = (void *)acr->wpr_fw->data; +struct nvkm_acr_lsfw *lsfw;while (hdr->falcon_id !=WPR_HEADER_V0_FALCON_ID_INVALID ) {wpr_header_dump (&acr->subdev, hdr); -if (!nvkm_acr_lsfw_add (NULL , acr,NULL , (hdr++)->falcon_id)) -return -ENOMEM ; + lsfw =nvkm_acr_lsfw_add (NULL , acr,NULL , (hdr++)->falcon_id); +if (IS_ERR (lsfw)) +return PTR_ERR (lsfw); }return 0 ;
drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.c +4 -2
@@ -161,11 +161,13 @@ int gp102_acr_wpr_parse(struct nvkm_acr *acr) {const struct wpr_header_v1 *hdr = (void *)acr->wpr_fw->data; +struct nvkm_acr_lsfw *lsfw;while (hdr->falcon_id !=WPR_HEADER_V1_FALCON_ID_INVALID ) {wpr_header_v1_dump (&acr->subdev, hdr); -if (!nvkm_acr_lsfw_add (NULL , acr,NULL , (hdr++)->falcon_id)) -return -ENOMEM ; + lsfw =nvkm_acr_lsfw_add (NULL , acr,NULL , (hdr++)->falcon_id); +if (IS_ERR (lsfw)) +return PTR_ERR (lsfw); }return 0 ;
drivers/gpu/drm/vc4/vc4_bo.c +1 -1
@@ -389,7 +389,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size) bo =kzalloc (sizeof (*bo),GFP_KERNEL );if (!bo) -return ERR_PTR (-ENOMEM ); +return NULL ; bo->madv =VC4_MADV_WILLNEED ;refcount_set (&bo->usecnt,0 );
drivers/hid/wacom_wac.c +7 -1
@@ -2578,6 +2578,9 @@ static void wacom_wac_finger_event(struct hid_device *hdev,return ;switch (equivalent_usage) { +case HID_DG_CONFIDENCE : + wacom_wac->hid_data.confidence = value; +break ;case HID_GD_X : wacom_wac->hid_data.x = value;break ;
@@ -2610,7 +2613,8 @@ static void wacom_wac_finger_event(struct hid_device *hdev, }if (usage->usage_index +1 == field->report_count) { -if (equivalent_usage == wacom_wac->hid_data.last_slot_field) +if (equivalent_usage == wacom_wac->hid_data.last_slot_field && + wacom_wac->hid_data.confidence)wacom_wac_finger_slot (wacom_wac, wacom_wac->touch_input); } }
@@ -2625,6 +2629,8 @@ static void wacom_wac_finger_pre_report(struct hid_device *hdev, wacom_wac->is_invalid_bt_frame = false; + hid_data->confidence = true; +for (i =0 ; i < report->maxfield; i++) {struct hid_field *field = report->field[i];int j;
drivers/hid/wacom_wac.h +1 -0
@@ -300,6 +300,7 @@ struct hid_data {bool tipswitch;bool barrelswitch;bool barrelswitch2; +bool confidence;int x;int y;int pressure;
drivers/iommu/amd/iommu_v2.c +3 -3
@@ -927,10 +927,8 @@ static int __init amd_iommu_v2_init(void) {int ret; -pr_info ("AMD IOMMUv2 driver by Joerg Roedel <[email protected]>\n" ); -if (!amd_iommu_v2_supported ()) { -pr_info ("AMD IOMMUv2 functionality not available on this system\n" ); +pr_info ("AMD IOMMUv2 functionality not available on this system - This is not a bug.\n" );/* * Load anyway to provide the symbols to other modules * which may use AMD IOMMUv2 optionally.
@@ -947,6 +945,8 @@ static int __init amd_iommu_v2_init(void)amd_iommu_register_ppr_notifier (&ppr_nb); +pr_info ("AMD IOMMUv2 loaded and initialized\n" ); +return 0 ; out:
drivers/media/cec/core/cec-adap.c +1 -0
@@ -1199,6 +1199,7 @@ void cec_received_msg_ts(struct cec_adapter *adap,if (abort) dst->rx_status |=CEC_RX_STATUS_FEATURE_ABORT ; msg->flags = dst->flags; + msg->sequence = dst->sequence;/* Remove it from the wait_queue */ list_del_init (&data->list);
drivers/mmc/host/sdhci-esdhc-imx.c +0 -2
@@ -263,7 +263,6 @@ static struct esdhc_soc_data usdhc_imx8qxp_data = { .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING |ESDHC_FLAG_HAVE_CAP1 |ESDHC_FLAG_HS200 |ESDHC_FLAG_HS400 |ESDHC_FLAG_HS400_ES - |ESDHC_FLAG_CQHCI |ESDHC_FLAG_STATE_LOST_IN_LPMODE | ESDHC_FLAG_CLK_RATE_LOST_IN_PM_RUNTIME, };
@@ -272,7 +271,6 @@ static struct esdhc_soc_data usdhc_imx8mm_data = { .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING |ESDHC_FLAG_HAVE_CAP1 |ESDHC_FLAG_HS200 |ESDHC_FLAG_HS400 |ESDHC_FLAG_HS400_ES - |ESDHC_FLAG_CQHCI | ESDHC_FLAG_STATE_LOST_IN_LPMODE, };
drivers/mmc/host/sdhci.c +18 -3
@@ -772,7 +772,19 @@ static void sdhci_adma_table_pre(struct sdhci_host *host, len -= offset; } -BUG_ON (len >65536 ); +/* +* The block layer forces a minimum segment size of PAGE_SIZE, +* so 'len' can be too big here if PAGE_SIZE >= 64KiB. Write +* multiple descriptors, noting that the ADMA table is sized +* for 4KiB chunks anyway, so it will be big enough. +*/ +while (len > host->max_adma) { +int n =32 *1024 ;/* 32KiB*/ + +__sdhci_adma_write_desc (host, &desc, addr, n,ADMA2_TRAN_VALID ); + addr += n; + len -= n; + }/* tran, valid */ if (len)
@@ -3948,6 +3960,7 @@ struct sdhci_host *sdhci_alloc_host(struct device *dev,* descriptor for each segment, plus 1 for a nop end descriptor. */ host->adma_table_cnt =SDHCI_MAX_SEGS *2 +1 ; + host->max_adma =65536 ;return host; }
@@ -4611,10 +4624,12 @@ int sdhci_setup_host(struct sdhci_host *host)* be larger than 64 KiB though. */ if (host->flags &SDHCI_USE_ADMA ) { -if (host->quirks &SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC ) +if (host->quirks &SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC ) { + host->max_adma =65532 ;/* 32-bit alignment */ mmc->max_seg_size =65535 ; -else + }else { mmc->max_seg_size =65536 ; + } }else { mmc->max_seg_size = mmc->max_req_size; }
drivers/mmc/host/sdhci.h +3 -1
@@ -338,7 +338,8 @@ struct sdhci_adma2_64_desc {/* * Maximum segments assuming a 512KiB maximum requisition size and a minimum -* 4KiB page size. +* 4KiB page size. Note this also allows enough for multiple descriptors in +* case of PAGE_SIZE >= 64KiB. */ #define SDHCI_MAX_SEGS 128
@@ -540,6 +541,7 @@ struct sdhci_host {unsigned int blocks;/* remaining PIO blocks */ int sg_count;/* Mapped sg entries */ +int max_adma;/* Max. length in ADMA descriptor */ void *adma_table;/* ADMA descriptor table */ void *align_buffer;/* Bounce buffer */
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +2 -2
@@ -679,9 +679,9 @@ static int hclgevf_set_rss_tc_mode(struct hclgevf_dev *hdev, u16 rss_size) roundup_size =ilog2 (roundup_size);for (i =0 ; i <HCLGEVF_MAX_TC_NUM ; i++) { - tc_valid[i] = !!(hdev->hw_tc_map &BIT (i)); + tc_valid[i] =1 ; tc_size[i] = roundup_size; - tc_offset[i] = rss_size * i; + tc_offset[i] = (hdev->hw_tc_map &BIT (i)) ? rss_size * i :0 ; }hclgevf_cmd_setup_basic_desc (&desc,HCLGEVF_OPC_RSS_TC_MODE , false);
drivers/net/ethernet/intel/iavf/iavf_ethtool.c +26 -4
@@ -719,12 +719,31 @@ static int iavf_get_per_queue_coalesce(struct net_device *netdev, u32 queue,* * Change the ITR settings for a specific queue. **/ -static void iavf_set_itr_per_queue (struct iavf_adapter *adapter, -struct ethtool_coalesce *ec,int queue) +static int iavf_set_itr_per_queue (struct iavf_adapter *adapter, +struct ethtool_coalesce *ec,int queue) {struct iavf_ring *rx_ring = &adapter->rx_rings[queue];struct iavf_ring *tx_ring = &adapter->tx_rings[queue];struct iavf_q_vector *q_vector; +u16 itr_setting; + + itr_setting = rx_ring->itr_setting & ~IAVF_ITR_DYNAMIC ; + +if (ec->rx_coalesce_usecs != itr_setting && + ec->use_adaptive_rx_coalesce) { +netif_info (adapter, drv, adapter->netdev, +"Rx interrupt throttling cannot be changed if adaptive-rx is enabled\n" ); +return -EINVAL ; + } + + itr_setting = tx_ring->itr_setting & ~IAVF_ITR_DYNAMIC ; + +if (ec->tx_coalesce_usecs != itr_setting && + ec->use_adaptive_tx_coalesce) { +netif_info (adapter, drv, adapter->netdev, +"Tx interrupt throttling cannot be changed if adaptive-tx is enabled\n" ); +return -EINVAL ; + } rx_ring->itr_setting =ITR_REG_ALIGN (ec->rx_coalesce_usecs); tx_ring->itr_setting =ITR_REG_ALIGN (ec->tx_coalesce_usecs);
@@ -747,6 +766,7 @@ static void iavf_set_itr_per_queue(struct iavf_adapter *adapter,* the Tx and Rx ITR values based on the values we have entered * into the q_vector, no need to write the values now. */ +return 0 ; }/**
@@ -788,9 +808,11 @@ static int __iavf_set_coalesce(struct net_device *netdev,*/ if (queue <0 ) {for (i =0 ; i < adapter->num_active_queues; i++) -iavf_set_itr_per_queue (adapter, ec, i); +if (iavf_set_itr_per_queue (adapter, ec, i)) +return -EINVAL ; }else if (queue < adapter->num_active_queues) { -iavf_set_itr_per_queue (adapter, ec, queue); +if (iavf_set_itr_per_queue (adapter, ec, queue)) +return -EINVAL ; }else {netif_info (adapter, drv, netdev,"Invalid queue value, queue range is 0 - %d\n" , adapter->num_active_queues -1 );
drivers/net/ethernet/intel/ice/ice_lib.c +7 -2
@@ -83,8 +83,13 @@ static int ice_vsi_alloc_arrays(struct ice_vsi *vsi)if (!vsi->rx_rings) goto err_rings; -/* XDP will have vsi->alloc_txq Tx queues as well, so double the size */ - vsi->txq_map =devm_kcalloc (dev, (2 * vsi->alloc_txq), +/* txq_map needs to have enough space to track both Tx (stack) rings +* and XDP rings; at this point vsi->num_xdp_txq might not be set, +* so use num_possible_cpus() as we want to always provide XDP ring +* per CPU, regardless of queue count settings from user that might +* have come from ethtool's set_channels() callback; +*/ + vsi->txq_map =devm_kcalloc (dev, (vsi->alloc_txq +num_possible_cpus ()),sizeof (*vsi->txq_map),GFP_KERNEL );if (!vsi->txq_map)
drivers/net/ethernet/intel/ice/ice_main.c +17 -1
@@ -2397,7 +2397,18 @@ int ice_prepare_xdp_rings(struct ice_vsi *vsi, struct bpf_prog *prog) ice_stat_str(status)); goto clear_xdp_rings; } -ice_vsi_assign_bpf_prog (vsi, prog); + +/* assign the prog only when it's not already present on VSI; +* this flow is a subject of both ethtool -L and ndo_bpf flows; +* VSI rebuild that happens under ethtool -L can expose us to +* the bpf_prog refcount issues as we would be swapping same +* bpf_prog pointers from vsi->xdp_prog and calling bpf_prog_put +* on it as it would be treated as an 'old_prog'; for ndo_bpf +* this is not harmful as dev_xdp_install bumps the refcount +* before calling the op exposed by the driver; +*/ +if (!ice_is_xdp_ena_vsi (vsi)) +ice_vsi_assign_bpf_prog (vsi, prog);return 0 ; clear_xdp_rings:
@@ -2527,6 +2538,11 @@ ice_xdp_setup_prog(struct ice_vsi *vsi, struct bpf_prog *prog,if (xdp_ring_err)NL_SET_ERR_MSG_MOD (extack,"Freeing XDP Tx resources failed" ); }else { +/* safe to call even when prog == vsi->xdp_prog as +* dev_xdp_install in net/core/dev.c incremented prog's +* refcount so corresponding bpf_prog_put won't cause +* underflow +*/ ice_vsi_assign_bpf_prog (vsi, prog); }
drivers/net/ethernet/intel/igb/igb_main.c +1 -1
@@ -8032,7 +8032,7 @@ static int igb_poll(struct napi_struct *napi, int budget)if (likely (napi_complete_done (napi, work_done)))igb_ring_irq_enable (q_vector); -return min (work_done, budget -1 ); +return work_done; }/**
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +8 -6
@@ -4652,11 +4652,13 @@ static int mvpp2_change_mtu(struct net_device *dev, int mtu) mtu =ALIGN (MVPP2_RX_PKT_SIZE (mtu),8 ); } +if (port->xdp_prog && mtu >MVPP2_MAX_RX_BUF_SIZE ) { +netdev_err (dev,"Illegal MTU value %d (> %d) for XDP mode\n" , + mtu, (int )MVPP2_MAX_RX_BUF_SIZE ); +return -EINVAL ; + } +if (MVPP2_RX_PKT_SIZE (mtu) >MVPP2_BM_LONG_PKT_SIZE ) { -if (port->xdp_prog) { -netdev_err (dev,"Jumbo frames are not supported with XDP\n" ); -return -EINVAL ; - }if (priv->percpu_pools) {netdev_warn (dev,"mtu %d too high, switching to shared buffers" , mtu);mvpp2_bm_switch_buffers (priv, false);
@@ -4942,8 +4944,8 @@ static int mvpp2_xdp_setup(struct mvpp2_port *port, struct netdev_bpf *bpf)bool running =netif_running (port->dev);bool reset = !prog != !port->xdp_prog; -if (port->dev->mtu >ETH_DATA_LEN ) { -NL_SET_ERR_MSG_MOD (bpf->extack,"XDP is not supported with jumbo frames enabled" ); +if (port->dev->mtu >MVPP2_MAX_RX_BUF_SIZE ) { +NL_SET_ERR_MSG_MOD (bpf->extack,"MTU too large for XDP" );return -EOPNOTSUPP ; }
drivers/net/ethernet/marvell/prestera/prestera_switchdev.c +2 -4
@@ -439,8 +439,8 @@ static int prestera_port_bridge_join(struct prestera_port *port, br_port =prestera_bridge_port_add (bridge, port->dev);if (IS_ERR (br_port)) { - err =PTR_ERR (br_port); - goto err_brport_create; +prestera_bridge_put (bridge); +return PTR_ERR (br_port); }if (bridge->vlan_enabled)
@@ -454,8 +454,6 @@ static int prestera_port_bridge_join(struct prestera_port *port, err_port_join:prestera_bridge_port_put (br_port); -err_brport_create: -prestera_bridge_put (bridge);return err; }
drivers/net/ethernet/mellanox/mlxsw/minimal.c +4 -0
@@ -234,6 +234,7 @@ static void mlxsw_m_port_remove(struct mlxsw_m *mlxsw_m, u8 local_port)static int mlxsw_m_port_module_map (struct mlxsw_m *mlxsw_m,u8 local_port,u8 *last_module) { +unsigned int max_ports =mlxsw_core_max_ports (mlxsw_m->core);u8 module, width;int err;
@@ -249,6 +250,9 @@ static int mlxsw_m_port_module_map(struct mlxsw_m *mlxsw_m, u8 local_port,if (module == *last_module)return 0 ; *last_module = module; + +if (WARN_ON_ONCE (module >= max_ports)) +return -EINVAL ; mlxsw_m->module_to_port[module] = ++mlxsw_m->max_ports;return 0 ;
drivers/net/ethernet/mellanox/mlxsw/spectrum.c +5 -0
@@ -2052,9 +2052,14 @@ static void mlxsw_sp_pude_event_func(const struct mlxsw_reg_info *reg,struct mlxsw_sp *mlxsw_sp = priv;struct mlxsw_sp_port *mlxsw_sp_port;enum mlxsw_reg_pude_oper_status status; +unsigned int max_ports;u8 local_port; + max_ports =mlxsw_core_max_ports (mlxsw_sp->core); local_port =mlxsw_reg_pude_local_port_get (pude_pl); + +if (WARN_ON_ONCE (!local_port || local_port >= max_ports)) +return ; mlxsw_sp_port = mlxsw_sp->ports[local_port];if (!mlxsw_sp_port)return ;
drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c +3 -0
@@ -568,10 +568,13 @@ void mlxsw_sp1_ptp_got_timestamp(struct mlxsw_sp *mlxsw_sp, bool ingress, u8 domain_number, u16 sequence_id, u64 timestamp) { + unsigned int max_ports = mlxsw_core_max_ports(mlxsw_sp->core);struct mlxsw_sp_port *mlxsw_sp_port;struct mlxsw_sp1_ptp_key key;u8 types; +if (WARN_ON_ONCE (local_port >= max_ports)) +return ; mlxsw_sp_port = mlxsw_sp->ports[local_port];if (!mlxsw_sp_port)return ;
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +3 -0
@@ -2177,6 +2177,7 @@ static void mlxsw_sp_router_neigh_ent_ipv4_process(struct mlxsw_sp *mlxsw_sp, char *rauhtd_pl, int ent_index) { +u64 max_rifs =MLXSW_CORE_RES_GET (mlxsw_sp->core,MAX_RIFS );struct net_device *dev;struct neighbour *n;__be32 dipn;
@@ -2185,6 +2186,8 @@ static void mlxsw_sp_router_neigh_ent_ipv4_process(struct mlxsw_sp *mlxsw_sp,mlxsw_reg_rauhtd_ent_ipv4_unpack (rauhtd_pl, ent_index, &rif, &dip); +if (WARN_ON_ONCE (rif >= max_rifs)) +return ;if (!mlxsw_sp->router->rifs[rif]) {dev_err_ratelimited (mlxsw_sp->bus_info->dev,"Incorrect RIF in neighbour entry\n" );return ;
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +4 -0
@@ -2410,6 +2410,7 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp, char *sfn_pl, int rec_index, bool adding) { + unsigned int max_ports = mlxsw_core_max_ports(mlxsw_sp->core);struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan;struct mlxsw_sp_bridge_device *bridge_device;struct mlxsw_sp_bridge_port *bridge_port;
@@ -2422,6 +2423,9 @@ static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp,int err;mlxsw_reg_sfn_mac_unpack (sfn_pl, rec_index, mac, &fid, &local_port); + +if (WARN_ON_ONCE (local_port >= max_ports)) +return ; mlxsw_sp_port = mlxsw_sp->ports[local_port];if (!mlxsw_sp_port) {dev_err_ratelimited (mlxsw_sp->bus_info->dev,"Incorrect local port in FDB notification\n" );
drivers/net/ethernet/microchip/lan743x_main.c +3 -9
@@ -922,8 +922,7 @@ static int lan743x_phy_reset(struct lan743x_adapter *adapter) }static void lan743x_phy_update_flowcontrol (struct lan743x_adapter *adapter, -u8 duplex,u16 local_adv, -u16 remote_adv) +u16 local_adv,u16 remote_adv) {struct lan743x_phy *phy = &adapter->phy;u8 cap;
@@ -951,7 +950,6 @@ static void lan743x_phy_link_status_change(struct net_device *netdev)phy_print_status (phydev);if (phydev->state ==PHY_RUNNING ) { -struct ethtool_link_ksettings ksettings;int remote_advertisement =0 ;int local_advertisement =0 ;
@@ -988,18 +986,14 @@ static void lan743x_phy_link_status_change(struct net_device *netdev) }lan743x_csr_write (adapter,MAC_CR , data); -memset (&ksettings,0 ,sizeof (ksettings)); -phy_ethtool_get_link_ksettings (netdev, &ksettings); local_advertisement =linkmode_adv_to_mii_adv_t (phydev->advertising); remote_advertisement =linkmode_adv_to_mii_adv_t (phydev->lp_advertising); -lan743x_phy_update_flowcontrol (adapter, - ksettings.base.duplex, - local_advertisement, +lan743x_phy_update_flowcontrol (adapter, local_advertisement, remote_advertisement); -lan743x_ptp_update_latency (adapter, ksettings.base.speed); +lan743x_ptp_update_latency (adapter, phydev->speed); } }
drivers/net/ethernet/mscc/ocelot.c +4 -7
@@ -811,12 +811,6 @@ int ocelot_hwstamp_set(struct ocelot *ocelot, int port, struct ifreq *ifr)switch (cfg.rx_filter) {case HWTSTAMP_FILTER_NONE :break ; -case HWTSTAMP_FILTER_ALL : -case HWTSTAMP_FILTER_SOME : -case HWTSTAMP_FILTER_PTP_V1_L4_EVENT : -case HWTSTAMP_FILTER_PTP_V1_L4_SYNC : -case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ : -case HWTSTAMP_FILTER_NTP_ALL :case HWTSTAMP_FILTER_PTP_V2_L4_EVENT :case HWTSTAMP_FILTER_PTP_V2_L4_SYNC :case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ :
@@ -935,7 +929,10 @@ int ocelot_get_ts_info(struct ocelot *ocelot, int port,SOF_TIMESTAMPING_RAW_HARDWARE ; info->tx_types =BIT (HWTSTAMP_TX_OFF ) |BIT (HWTSTAMP_TX_ON ) |BIT (HWTSTAMP_TX_ONESTEP_SYNC ); - info->rx_filters =BIT (HWTSTAMP_FILTER_NONE ) |BIT (HWTSTAMP_FILTER_ALL ); + info->rx_filters =BIT (HWTSTAMP_FILTER_NONE ) | +BIT (HWTSTAMP_FILTER_PTP_V2_EVENT ) | +BIT (HWTSTAMP_FILTER_PTP_V2_L2_EVENT ) | +BIT (HWTSTAMP_FILTER_PTP_V2_L4_EVENT );return 0 ; }
drivers/net/ethernet/netronome/nfp/nfp_net.h +0 -3
@@ -557,7 +557,6 @@ struct nfp_net_dp {* @exn_name: Name for Exception interrupt * @shared_handler: Handler for shared interrupts * @shared_name: Name for shared interrupt -* @me_freq_mhz: ME clock_freq (MHz) * @reconfig_lock: Protects @reconfig_posted, @reconfig_timer_active, * @reconfig_sync_present and HW reconfiguration request * regs/machinery from async requests (sync must take
@@ -640,8 +639,6 @@ struct nfp_net {irq_handler_t shared_handler;char shared_name[IFNAMSIZ +8 ]; -u32 me_freq_mhz; -bool link_up;spinlock_t link_status_lock;
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +1 -1
@@ -1347,7 +1347,7 @@ static int nfp_net_set_coalesce(struct net_device *netdev,* ME timestamp ticks. There are 16 ME clock cycles for each timestamp * count. */ - factor = nn->me_freq_mhz /16 ; + factor = nn->tlv_caps.me_freq_mhz /16 ;/* Each pair of (usecs, max_frames) fields specifies that interrupts * should be coalesced until
drivers/net/ethernet/stmicro/stmmac/stmmac.h +1 -0
@@ -258,6 +258,7 @@ int stmmac_mdio_register(struct net_device *ndev);int stmmac_mdio_reset (struct mii_bus *mii);void stmmac_set_ethtool_ops (struct net_device *netdev); +int stmmac_init_tstamp_counter (struct stmmac_priv *priv,u32 systime_flags);void stmmac_ptp_register (struct stmmac_priv *priv);void stmmac_ptp_unregister (struct stmmac_priv *priv);int stmmac_resume (struct device *dev);
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +79 -60
203 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +44 -0
59 lines not on this page · raw message
drivers/net/mdio/mdio-aspeed.c +7 -0
@@ -61,6 +61,13 @@ static int aspeed_mdio_read(struct mii_bus *bus, int addr, int regnum)iowrite32 (ctrl, ctx->base +ASPEED_MDIO_CTRL ); + rc =readl_poll_timeout (ctx->base +ASPEED_MDIO_CTRL , ctrl, + !(ctrl &ASPEED_MDIO_CTRL_FIRE ), +ASPEED_MDIO_INTERVAL_US , +ASPEED_MDIO_TIMEOUT_US ); +if (rc <0 ) +return rc; + rc = readl_poll_timeout(ctx->base + ASPEED_MDIO_DATA, data, data & ASPEED_MDIO_DATA_IDLE, ASPEED_MDIO_INTERVAL_US,
drivers/net/phy/phylink.c +25 -1
@@ -644,6 +644,7 @@ static void phylink_resolve(struct work_struct *w)struct phylink_link_state link_state;struct net_device *ndev = pl->netdev;bool mac_config = false; +bool retrigger = false;bool cur_link_state;mutex_lock (&pl->state_mutex);
@@ -657,6 +658,7 @@ static void phylink_resolve(struct work_struct *w) link_state.link = false; }else if (pl->mac_link_dropped) { link_state.link = false; + retrigger = true; }else {switch (pl->cur_link_an_mode) {case MLO_AN_PHY :
@@ -673,6 +675,19 @@ static void phylink_resolve(struct work_struct *w)case MLO_AN_INBAND :phylink_mac_pcs_get_state (pl, &link_state); +/* The PCS may have a latching link-fail indicator. +* If the link was up, bring the link down and +* re-trigger the resolve. Otherwise, re-read the +* PCS state to get the current status of the link. +*/ +if (!link_state.link) { +if (cur_link_state) + retrigger = true; +else +phylink_mac_pcs_get_state (pl, + &link_state); + } +/* If we have a phy, the "up" state is the union of * both the PHY and the MAC */ if (pl->phydev)
@@ -680,6 +695,15 @@ static void phylink_resolve(struct work_struct *w)/* Only update if the PHY link is up */ if (pl->phydev && pl->phy_state.link) { +/* If the interface has changed, force a +* link down event if the link isn't already +* down, and re-resolve. +*/ +if (link_state.interface != + pl->phy_state.interface) { + retrigger = true; + link_state.link = false; + } link_state.interface = pl->phy_state.interface;/* If we have a PHY, we need to update with
@@ -721,7 +745,7 @@ static void phylink_resolve(struct work_struct *w)else phylink_link_up (pl, link_state); } -if (!link_state.link && pl->mac_link_dropped) { +if (!link_state.link && retrigger) { pl->mac_link_dropped = false;queue_work (system_power_efficient_wq, &pl->resolve); }
drivers/net/xen-netfront.c +169 -103
583 lines not on this page · raw message
drivers/nvme/target/io-cmd-file.c +3 -1
@@ -8,6 +8,7 @@#include <linux/uio.h> #include <linux/falloc.h> #include <linux/file.h> +#include <linux/fs.h> #include "nvmet.h" #define NVMET_MAX_MPOOL_BVEC 16
@@ -266,7 +267,8 @@ static void nvmet_file_execute_rw(struct nvmet_req *req)if (req->ns->buffered_io) {if (likely (!req->f.mpool_alloc) && -nvmet_file_execute_io (req,IOCB_NOWAIT )) + (req->ns->file->f_mode &FMODE_NOWAIT ) && +nvmet_file_execute_io (req,IOCB_NOWAIT ))return ;nvmet_file_submit_buffered_io (req); }else
drivers/nvme/target/tcp.c +6 -1
@@ -688,10 +688,11 @@ static int nvmet_try_send_r2t(struct nvmet_tcp_cmd *cmd, bool last_in_batch)static int nvmet_try_send_ddgst (struct nvmet_tcp_cmd *cmd,bool last_in_batch) {struct nvmet_tcp_queue *queue = cmd->queue; +int left =NVME_TCP_DIGEST_LENGTH - cmd->offset;struct msghdr msg = { .msg_flags =MSG_DONTWAIT };struct kvec iov = { .iov_base = (u8 *)&cmd->exp_ddgst + cmd->offset, - .iov_len =NVME_TCP_DIGEST_LENGTH - cmd->offset + .iov_len = left };int ret;
@@ -705,6 +706,10 @@ static int nvmet_try_send_ddgst(struct nvmet_tcp_cmd *cmd, bool last_in_batch)return ret; cmd->offset += ret; + left -= ret; + +if (left) +return -EAGAIN ;if (queue->nvme_sq.sqhd_disabled) { cmd->queue->snd_cmd =NULL ;
drivers/pci/controller/pci-aardvark.c +99 -136
399 lines not on this page · raw message
drivers/scsi/mpt3sas/mpt3sas_scsih.c +1 -1
@@ -3675,7 +3675,7 @@ _scsih_ublock_io_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address)shost_for_each_device (sdev, ioc->shost) { sas_device_priv_data = sdev->hostdata; -if (!sas_device_priv_data) +if (!sas_device_priv_data || !sas_device_priv_data->sas_target)continue ;if (sas_device_priv_data->sas_target->sas_address != sas_address)
drivers/scsi/scsi_debug.c +5 -0
@@ -4628,6 +4628,7 @@ static void zbc_rwp_zone(struct sdebug_dev_info *devip, struct sdeb_zone_state *zsp) {enum sdebug_z_cond zc; +struct sdeb_store_info *sip =devip2sip (devip, false);if (zbc_zone_is_conv (zsp))return ;
@@ -4639,6 +4640,10 @@ static void zbc_rwp_zone(struct sdebug_dev_info *devip,if (zsp->z_cond ==ZC4_CLOSED ) devip->nr_closed--; +if (zsp->z_wp > zsp->z_start) +memset (sip->storep + zsp->z_start * sdebug_sector_size,0 , + (zsp->z_wp - zsp->z_start) * sdebug_sector_size); + zsp->z_non_seq_resource = false; zsp->z_wp = zsp->z_start; zsp->z_cond =ZC1_EMPTY ;
drivers/scsi/scsi_sysfs.c +1 -1
@@ -816,7 +816,7 @@ store_state_field(struct device *dev, struct device_attribute *attr,mutex_lock (&sdev->state_mutex);if (sdev->sdev_state ==SDEV_RUNNING && state ==SDEV_RUNNING ) { - ret = count; + ret =0 ; }else { ret =scsi_device_set_state (sdev, state);if (ret ==0 && state ==SDEV_RUNNING )
drivers/staging/fbtft/fb_ssd1351.c +0 -4
@@ -187,7 +187,6 @@ static struct fbtft_display display = { }, }; -#ifdef CONFIG_FB_BACKLIGHT static int update_onboard_backlight (struct backlight_device *bd) {struct fbtft_par *par =bl_get_data (bd);
@@ -231,9 +230,6 @@ static void register_onboard_backlight(struct fbtft_par *par)if (!par->fbtftops.unregister_backlight) par->fbtftops.unregister_backlight = fbtft_unregister_backlight; } -#else -static void register_onboard_backlight (struct fbtft_par *par) { }; -#endif FBTFT_REGISTER_DRIVER (DRVNAME ,"solomon,ssd1351" , &display);
drivers/staging/fbtft/fbtft-core.c +1 -8
@@ -128,7 +128,6 @@ static int fbtft_request_gpios(struct fbtft_par *par)return 0 ; } -#ifdef CONFIG_FB_BACKLIGHT static int fbtft_backlight_update_status (struct backlight_device *bd) {struct fbtft_par *par =bl_get_data (bd);
@@ -161,6 +160,7 @@ void fbtft_unregister_backlight(struct fbtft_par *par) par->info->bl_dev =NULL ; } } +EXPORT_SYMBOL (fbtft_unregister_backlight);static const struct backlight_ops fbtft_bl_ops = { .get_brightness = fbtft_backlight_get_brightness,
@@ -198,12 +198,7 @@ void fbtft_register_backlight(struct fbtft_par *par)if (!par->fbtftops.unregister_backlight) par->fbtftops.unregister_backlight = fbtft_unregister_backlight; } -#else -void fbtft_register_backlight (struct fbtft_par *par) { }; -void fbtft_unregister_backlight (struct fbtft_par *par) { }; -#endif EXPORT_SYMBOL (fbtft_register_backlight); -EXPORT_SYMBOL (fbtft_unregister_backlight);static void fbtft_set_addr_win (struct fbtft_par *par,int xs,int ys,int xe,int ye)
@@ -853,13 +848,11 @@ int fbtft_register_framebuffer(struct fb_info *fb_info) fb_info->fix.smem_len >>10 , text1, HZ / fb_info->fbdefio->delay, text2); -#ifdef CONFIG_FB_BACKLIGHT /* Turn on backlight if available */ if (fb_info->bl_dev) { fb_info->bl_dev->props.power =FB_BLANK_UNBLANK ; fb_info->bl_dev->ops->update_status (fb_info->bl_dev); } -#endif return 0 ;
drivers/staging/greybus/audio_helper.c +6 -2
@@ -192,7 +192,11 @@ int gbaudio_remove_component_controls(struct snd_soc_component *component, unsigned int num_controls) {struct snd_card *card = component->card->snd_card; +int err; -return gbaudio_remove_controls (card, component->dev, controls, - num_controls, component->name_prefix); +down_write (&card->controls_rwsem); + err =gbaudio_remove_controls (card, component->dev, controls, + num_controls, component->name_prefix); +up_write (&card->controls_rwsem); +return err; }
drivers/staging/rtl8192e/rtl8192e/rtl_core.c +2 -1
@@ -2551,13 +2551,14 @@ static void _rtl92e_pci_disconnect(struct pci_dev *pdev)free_irq (dev->irq, dev); priv->irq =0 ; } -free_rtllib (dev);if (dev->mem_start !=0 ) {iounmap ((void __iomem *)dev->mem_start);release_mem_region (pci_resource_start (pdev,1 ),pci_resource_len (pdev,1 )); } + +free_rtllib (dev); }else { priv =rtllib_priv (dev); }
drivers/tty/hvc/hvc_xen.c +14 -3
@@ -86,7 +86,11 @@ static int __write_console(struct xencons_info *xencons, cons = intf->out_cons; prod = intf->out_prod;mb ();/* update queue values before going on */ -BUG_ON ((prod - cons) >sizeof (intf->out)); + +if ((prod - cons) >sizeof (intf->out)) { +pr_err_once ("xencons: Illegal ring page indices" ); +return -EINVAL ; + }while ((sent < len) && ((prod - cons) <sizeof (intf->out))) intf->out[MASK_XENCONS_IDX (prod++, intf->out)] = data[sent++];
@@ -114,7 +118,10 @@ static int domU_write_console(uint32_t vtermno, const char *data, int len)*/ while (len) {int sent =__write_console (cons, data, len); - + +if (sent <0 ) +return sent; + data += sent; len -= sent;
@@ -138,7 +145,11 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len) cons = intf->in_cons; prod = intf->in_prod;mb ();/* get pointers before reading ring */ -BUG_ON ((prod - cons) >sizeof (intf->in)); + +if ((prod - cons) >sizeof (intf->in)) { +pr_err_once ("xencons: Illegal ring page indices" ); +return -EINVAL ; + }while (cons != prod && recv < len) buf[recv++] = intf->in[MASK_XENCONS_IDX (cons++, intf->in)];
drivers/usb/chipidea/ci_hdrc_imx.c +9 -9
@@ -425,15 +425,15 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev) data->phy =devm_usb_get_phy_by_phandle (dev,"fsl,usbphy" ,0 );if (IS_ERR (data->phy)) { ret =PTR_ERR (data->phy); -if (ret == -ENODEV ) { - data->phy =devm_usb_get_phy_by_phandle (dev,"phys" ,0 ); -if (IS_ERR (data->phy)) { - ret =PTR_ERR (data->phy); -if (ret == -ENODEV ) - data->phy =NULL ; -else - goto err_clk; - } +if (ret != -ENODEV ) + goto err_clk; + data->phy =devm_usb_get_phy_by_phandle (dev,"phys" ,0 ); +if (IS_ERR (data->phy)) { + ret =PTR_ERR (data->phy); +if (ret == -ENODEV ) + data->phy =NULL ; +else + goto err_clk; } }
drivers/usb/core/hub.c +18 -6
@@ -4628,8 +4628,6 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,if (oldspeed ==USB_SPEED_LOW ) delay =HUB_LONG_RESET_TIME ; -mutex_lock (hcd->address0_mutex); -/* Reset the device; full speed may morph to high speed */ /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */ retval =hub_port_reset (hub, port1, udev, delay, false);
@@ -4940,7 +4938,6 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,hub_port_disable (hub, port1,0 );update_devnum (udev, devnum);/* for disconnect processing */ } -mutex_unlock (hcd->address0_mutex);return retval; }
@@ -5115,6 +5112,7 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,struct usb_port *port_dev = hub->ports[port1 -1 ];struct usb_device *udev = port_dev->child;static int unreliable_port =-1 ; +bool retry_locked;/* Disconnect any existing devices under this port */ if (udev) {
@@ -5170,8 +5168,11 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, unit_load =100 ; status =0 ; -for (i =0 ; i <PORT_INIT_TRIES ; i++) { +for (i =0 ; i <PORT_INIT_TRIES ; i++) { +usb_lock_port (port_dev); +mutex_lock (hcd->address0_mutex); + retry_locked = true;/* reallocate for each attempt, since references * to the previous one can escape in various ways */
@@ -5179,6 +5180,8 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,if (!udev) {dev_err (&port_dev->dev,"couldn't allocate usb_device\n" ); +mutex_unlock (hcd->address0_mutex); +usb_unlock_port (port_dev); goto done; }
@@ -5200,12 +5203,14 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, }/* reset (non-USB 3.0 devices) and get descriptor */ -usb_lock_port (port_dev); status =hub_port_init (hub, udev, port1, i); -usb_unlock_port (port_dev);if (status <0 ) goto loop; +mutex_unlock (hcd->address0_mutex); +usb_unlock_port (port_dev); + retry_locked = false; +if (udev->quirks &USB_QUIRK_DELAY_INIT )msleep (2000 );
@@ -5298,6 +5303,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,usb_ep0_reinit (udev);release_devnum (udev);hub_free_dev (udev); +if (retry_locked) { +mutex_unlock (hcd->address0_mutex); +usb_unlock_port (port_dev); + }usb_put_dev (udev);if ((status == -ENOTCONN ) || (status == -ENOTSUPP ))break ;
@@ -5839,6 +5848,8 @@ static int usb_reset_and_verify_device(struct usb_device *udev) bos = udev->bos; udev->bos =NULL ; +mutex_lock (hcd->address0_mutex); +for (i =0 ; i <PORT_INIT_TRIES ; ++i) {/* ep0 maxpacket size may change; let the HCD know about it.
@@ -5848,6 +5859,7 @@ static int usb_reset_and_verify_device(struct usb_device *udev)if (ret >=0 || ret == -ENOTCONN || ret == -ENODEV )break ; } +mutex_unlock (hcd->address0_mutex);if (ret <0 ) goto re_enumerate;
drivers/usb/dwc2/gadget.c +14 -3
@@ -1198,6 +1198,8 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg, } ctrl |=DXEPCTL_CNAK ; }else { + hs_req->req.frame_number = hs_ep->target_frame; + hs_req->req.actual =0 ;dwc2_hsotg_complete_request (hsotg, hs_ep, hs_req, -ENODATA );return ; }
@@ -2856,9 +2858,12 @@ static void dwc2_gadget_handle_ep_disabled(struct dwc2_hsotg_ep *hs_ep) do { hs_req = get_ep_head(hs_ep); - if (hs_req) + if (hs_req) { + hs_req->req.frame_number = hs_ep->target_frame; + hs_req->req.actual = 0; dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, -ENODATA); + } dwc2_gadget_incr_frame_num(hs_ep); /* Update current frame number value. */ hsotg->frame_number = dwc2_hsotg_read_frameno(hsotg);
@@ -2911,8 +2916,11 @@ static void dwc2_gadget_handle_out_token_ep_disabled(struct dwc2_hsotg_ep *ep)while (dwc2_gadget_target_frame_elapsed (ep)) { hs_req =get_ep_head (ep); -if (hs_req) +if (hs_req) { + hs_req->req.frame_number = ep->target_frame; + hs_req->req.actual =0 ;dwc2_hsotg_complete_request (hsotg, ep, hs_req, -ENODATA ); + }dwc2_gadget_incr_frame_num (ep);/* Update current frame number value. */
@@ -3001,8 +3009,11 @@ static void dwc2_gadget_handle_nak(struct dwc2_hsotg_ep *hs_ep)while (dwc2_gadget_target_frame_elapsed (hs_ep)) { hs_req =get_ep_head (hs_ep); -if (hs_req) +if (hs_req) { + hs_req->req.frame_number = hs_ep->target_frame; + hs_req->req.actual =0 ;dwc2_hsotg_complete_request (hsotg, hs_ep, hs_req, -ENODATA ); + }dwc2_gadget_incr_frame_num (hs_ep);/* Update current frame number value. */
drivers/usb/dwc2/hcd_queue.c +1 -1
@@ -59,7 +59,7 @@#define DWC2_UNRESERVE_DELAY (msecs_to_jiffies(5))/* If we get a NAK, wait this long before retrying */ -#define DWC2_RETRY_WAIT_DELAY 1*1E6L +#define DWC2_RETRY_WAIT_DELAY (1 * NSEC_PER_MSEC)/** * dwc2_periodic_channel_available() - Checks that a channel is available for a
drivers/usb/dwc3/gadget.c +28 -11
@@ -310,13 +310,24 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd,if (DWC3_DEPCMD_CMD (cmd) ==DWC3_DEPCMD_STARTTRANSFER ) {int link_state; +/* +* Initiate remote wakeup if the link state is in U3 when +* operating in SS/SSP or L1/L2 when operating in HS/FS. If the +* link state is in U1/U2, no remote wakeup is needed. The Start +* Transfer command will initiate the link recovery. +*/ link_state =dwc3_gadget_get_link_state (dwc); -if (link_state ==DWC3_LINK_STATE_U1 || - link_state ==DWC3_LINK_STATE_U2 || - link_state ==DWC3_LINK_STATE_U3 ) { +switch (link_state) { +case DWC3_LINK_STATE_U2 : +if (dwc->gadget->speed >=USB_SPEED_SUPER ) +break ; + + fallthrough; +case DWC3_LINK_STATE_U3 : ret =__dwc3_gadget_wakeup (dwc);dev_WARN_ONCE (dwc->dev, ret,"wakeup failed --> %d\n" , ret); +break ; } }
@@ -2907,6 +2918,9 @@ static bool dwc3_gadget_endpoint_trbs_complete(struct dwc3_ep *dep,struct dwc3 *dwc = dep->dwc;bool no_started_trb = true; +if (!dep->endpoint.desc) +return no_started_trb; +dwc3_gadget_ep_cleanup_completed_requests (dep, event, status);if (dep->flags &DWC3_EP_END_TRANSFER_PENDING )
@@ -2954,6 +2968,9 @@ static void dwc3_gadget_endpoint_transfer_in_progress(struct dwc3_ep *dep, {int status =0 ; +if (!dep->endpoint.desc) +return ; +if (usb_endpoint_xfer_isoc (dep->endpoint.desc))dwc3_gadget_endpoint_frame_from_event (dep, event);
@@ -3007,6 +3024,14 @@ static void dwc3_gadget_endpoint_command_complete(struct dwc3_ep *dep,if (cmd !=DWC3_DEPCMD_ENDTRANSFER )return ; +/* +* The END_TRANSFER command will cause the controller to generate a +* NoStream Event, and it's not due to the host DP NoStream rejection. +* Ignore the next NoStream event. +*/ +if (dep->stream_capable) + dep->flags |=DWC3_EP_IGNORE_NEXT_NOSTREAM ; + dep->flags &= ~DWC3_EP_END_TRANSFER_PENDING ; dep->flags &= ~DWC3_EP_TRANSFER_STARTED ;dwc3_gadget_ep_cleanup_cancelled_requests (dep);
@@ -3229,14 +3254,6 @@ static void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force,WARN_ON_ONCE (ret); dep->resource_index =0 ; -/* -* The END_TRANSFER command will cause the controller to generate a -* NoStream Event, and it's not due to the host DP NoStream rejection. -* Ignore the next NoStream event. -*/ -if (dep->stream_capable) - dep->flags |=DWC3_EP_IGNORE_NEXT_NOSTREAM ; -if (!interrupt) dep->flags &= ~DWC3_EP_TRANSFER_STARTED ;else
drivers/usb/serial/option.c +5 -0
@@ -1267,6 +1267,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(2) }, { USB_DEVICE(TELIT_VENDOR_ID, 0x9010), /* Telit SBL FN980 flashing device */ .driver_info = NCTRL(0) | ZLP }, + { USB_DEVICE(TELIT_VENDOR_ID, 0x9200), /* Telit LE910S1 flashing device */ + .driver_info = NCTRL(0) | ZLP }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff), .driver_info = RSVD(1) },
@@ -2094,6 +2096,9 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */ + .driver_info = RSVD(4) }, { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */
drivers/usb/typec/tcpm/fusb302.c +4 -2
@@ -669,25 +669,27 @@ static int tcpm_set_cc(struct tcpc_dev *dev, enum typec_cc_status cc) ret =fusb302_i2c_mask_write (chip,FUSB_REG_MASK ,FUSB_REG_MASK_BC_LVL |FUSB_REG_MASK_COMP_CHNG , -FUSB_REG_MASK_COMP_CHNG ); +FUSB_REG_MASK_BC_LVL );if (ret <0 ) {fusb302_log (chip,"cannot set SRC interrupt, ret=%d" , ret); goto done; } chip->intr_comp_chng = true; + chip->intr_bc_lvl = false;break ;case TYPEC_CC_RD : ret =fusb302_i2c_mask_write (chip,FUSB_REG_MASK ,FUSB_REG_MASK_BC_LVL |FUSB_REG_MASK_COMP_CHNG , -FUSB_REG_MASK_BC_LVL ); +FUSB_REG_MASK_COMP_CHNG );if (ret <0 ) {fusb302_log (chip,"cannot set SRC interrupt, ret=%d" , ret); goto done; } chip->intr_bc_lvl = true; + chip->intr_comp_chng = false;break ;default :break ;
drivers/vhost/vsock.c +1 -1
@@ -494,7 +494,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work)virtio_transport_free_pkt (pkt); len +=sizeof (pkt->hdr); -vhost_add_used (vq, head, len); +vhost_add_used (vq, head,0 ); total_len += len; added = true; }while (likely (!vhost_exceeds_weight (vq, ++pkts, total_len)));
drivers/xen/xenbus/xenbus_probe.c +26 -1
@@ -846,7 +846,7 @@ static struct notifier_block xenbus_resume_nb = {static int __init xenbus_init (void ) { -int err =0 ; +int err;uint64_t v =0 ; xen_store_domain_type =XS_UNKNOWN ;
@@ -886,6 +886,29 @@ static int __init xenbus_init(void) err =hvm_get_parameter (HVM_PARAM_STORE_PFN , &v);if (err) goto out_error; +/* +* Uninitialized hvm_params are zero and return no error. +* Although it is theoretically possible to have +* HVM_PARAM_STORE_PFN set to zero on purpose, in reality it is +* not zero when valid. If zero, it means that Xenstore hasn't +* been properly initialized. Instead of attempting to map a +* wrong guest physical address return error. +* +* Also recognize all bits set as an invalid value. +*/ +if (!v || !~v) { + err = -ENOENT ; + goto out_error; + } +/* Avoid truncation on 32-bit. */ +#if BITS_PER_LONG ==32 +if (v >ULONG_MAX ) { +pr_err ("%s: cannot handle HVM_PARAM_STORE_PFN=%llx > ULONG_MAX\n" , + __func__, v); + err = -EINVAL ; + goto out_error; + } +#endif xen_store_gfn = (unsigned long )v; xen_store_interface = xen_remap(xen_store_gfn << XEN_PAGE_SHIFT,
@@ -920,8 +943,10 @@ static int __init xenbus_init(void)*/ proc_create_mount_point ("xen" );#endif +return 0 ; out_error: + xen_store_domain_type =XS_UNKNOWN ;return err; }
fs/ceph/super.c +6 -5
@@ -52,8 +52,7 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)struct ceph_fs_client *fsc =ceph_inode_to_client (d_inode (dentry));struct ceph_mon_client *monc = &fsc->client->monc;struct ceph_statfs st; -u64 fsid; -int err; +int i, err;u64 data_pool;if (fsc->mdsc->mdsmap->m_num_data_pg_pools ==1 ) {
@@ -99,12 +98,14 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) buf->f_namelen =NAME_MAX ;/* Must convert the fsid, for consistent values across arches */ + buf->f_fsid.val[0 ] =0 ;mutex_lock (&monc->mutex); - fsid =le64_to_cpu (*(__le64 *)(&monc->monmap->fsid)) ^ -le64_to_cpu (*((__le64 *)&monc->monmap->fsid +1 )); +for (i =0 ; i <sizeof (monc->monmap->fsid) /sizeof (__le32) ; ++i) + buf->f_fsid.val[0 ] ^=le32_to_cpu (((__le32 *)&monc->monmap->fsid)[i]);mutex_unlock (&monc->mutex); - buf->f_fsid =u64_to_fsid (fsid); +/* fold the fs_cluster_id into the upper bits */ + buf->f_fsid.val[1 ] = monc->fs_cluster_id;return 0 ; }
fs/cifs/file.c +29 -6
@@ -2618,12 +2618,23 @@ int cifs_strict_fsync(struct file *file, loff_t start, loff_t end, tcon =tlink_tcon (smbfile->tlink);if (!(cifs_sb->mnt_cifs_flags &CIFS_MOUNT_NOSSYNC )) { server = tcon->ses->server; -if (server->ops->flush) - rc = server->ops->flush (xid, tcon, &smbfile->fid); -else +if (server->ops->flush ==NULL ) { rc = -ENOSYS ; + goto strict_fsync_exit; + } + +if ((OPEN_FMODE (smbfile->f_flags) &FMODE_WRITE ) ==0 ) { + smbfile =find_writable_file (CIFS_I (inode),FIND_WR_ANY ); +if (smbfile) { + rc = server->ops->flush (xid, tcon, &smbfile->fid); +cifsFileInfo_put (smbfile); + }else +cifs_dbg (FYI ,"ignore fsync for file not open for write\n" ); + }else + rc = server->ops->flush (xid, tcon, &smbfile->fid); } +strict_fsync_exit:free_xid (xid);return rc; }
@@ -2635,6 +2646,7 @@ int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)struct cifs_tcon *tcon;struct TCP_Server_Info *server;struct cifsFileInfo *smbfile = file->private_data; +struct inode *inode =file_inode (file);struct cifs_sb_info *cifs_sb =CIFS_FILE_SB (file); rc =file_write_and_wait_range (file, start, end);
@@ -2651,12 +2663,23 @@ int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync) tcon =tlink_tcon (smbfile->tlink);if (!(cifs_sb->mnt_cifs_flags &CIFS_MOUNT_NOSSYNC )) { server = tcon->ses->server; -if (server->ops->flush) - rc = server->ops->flush (xid, tcon, &smbfile->fid); -else +if (server->ops->flush ==NULL ) { rc = -ENOSYS ; + goto fsync_exit; + } + +if ((OPEN_FMODE (smbfile->f_flags) &FMODE_WRITE ) ==0 ) { + smbfile =find_writable_file (CIFS_I (inode),FIND_WR_ANY ); +if (smbfile) { + rc = server->ops->flush (xid, tcon, &smbfile->fid); +cifsFileInfo_put (smbfile); + }else +cifs_dbg (FYI ,"ignore fsync for file not open for write\n" ); + }else + rc = server->ops->flush (xid, tcon, &smbfile->fid); } +fsync_exit:free_xid (xid);return rc; }
fs/erofs/utils.c +6 -2
@@ -154,7 +154,7 @@ static bool erofs_try_to_release_workgroup(struct erofs_sb_info *sbi,* however in order to avoid some race conditions, add a * DBG_BUGON to observe this in advance. */ -DBG_BUGON (xa_erase (&sbi->managed_pslots, grp->index) != grp); +DBG_BUGON (__xa_erase (&sbi->managed_pslots, grp->index) != grp);/* last refcount should be connected with its managed pslot. */ erofs_workgroup_unfreeze (grp,0 );
Lines of this file are not shown. View the raw message.
include/xen/interface/io/ring.h +156 -122
278 lines not on this page · raw message
ipc/shm.c +143 -46
189 lines not on this page · raw message
kernel/bpf/syscall.c +36 -21
57 lines not on this page · raw message
net/tls/tls_main.c +40 -7
47 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.