Linux 5.4.106
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.106 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/virt/kvm/api.txt | 3 Makefile | 14 - arch/arm/include/asm/kvm_asm.h | 2 arch/arm/kvm/hyp/tlb.c | 3 arch/arm64/include/asm/kvm_asm.h | 2 arch/arm64/include/asm/memory.h | 5 arch/arm64/include/asm/mmu_context.h | 5 arch/arm64/kernel/head.S | 2 arch/arm64/kvm/hyp/tlb.c | 3 arch/arm64/kvm/reset.c | 11 arch/arm64/mm/init.c | 12 arch/arm64/mm/mmu.c | 2 arch/powerpc/include/asm/code-patching.h | 2 arch/powerpc/include/asm/machdep.h | 3 arch/powerpc/include/asm/ptrace.h | 3 arch/powerpc/kernel/asm-offsets.c | 2 arch/powerpc/kernel/head_32.S | 9 arch/powerpc/kernel/pci-common.c | 10 arch/powerpc/kernel/process.c | 2 arch/powerpc/kernel/traps.c | 5 arch/powerpc/perf/core-book3s.c | 19 + arch/powerpc/platforms/pseries/msi.c | 25 + arch/s390/kernel/smp.c | 2 arch/sparc/include/asm/mman.h | 54 ++-- arch/sparc/mm/init_32.c | 3 arch/x86/kernel/unwind_orc.c | 12 drivers/base/swnode.c | 3 drivers/block/rsxx/core.c | 1 drivers/block/zram/zram_drv.c | 11 drivers/gpu/drm/drm_gem_shmem_helper.c | 25 + drivers/gpu/drm/drm_ioc32.c | 11 drivers/gpu/drm/meson/meson_drv.c | 11 drivers/gpu/drm/qxl/qxl_display.c | 1 drivers/hid/hid-logitech-dj.c | 7 drivers/i2c/busses/i2c-rcar.c | 13 drivers/input/keyboard/applespi.c | 21 + drivers/iommu/amd_iommu_init.c | 45 ++- drivers/media/platform/vsp1/vsp1_drm.c | 6 drivers/media/rc/Makefile | 1 drivers/media/rc/keymaps/Makefile | 1 drivers/media/rc/keymaps/rc-cec.c | 28 -- drivers/media/rc/rc-main.c | 6 drivers/media/usb/usbtv/usbtv-audio.c | 2 drivers/misc/fastrpc.c | 5 drivers/misc/pvpanic.c | 1 drivers/mmc/core/bus.c | 11 drivers/mmc/core/mmc.c | 15 - drivers/mmc/host/mtk-sd.c | 18 - drivers/mmc/host/mxs-mmc.c | 2 drivers/net/can/flexcan.c | 24 + drivers/net/can/m_can/tcan4x5x.c | 6 drivers/net/ethernet/atheros/alx/main.c | 7 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 14 - drivers/net/ethernet/davicom/dm9000.c | 21 + drivers/net/ethernet/freescale/enetc/enetc.c | 19 - drivers/net/ethernet/freescale/enetc/enetc.h | 5 drivers/net/ethernet/freescale/enetc/enetc_pf.c | 40 ++- drivers/net/ethernet/freescale/enetc/enetc_vf.c | 7 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h | 6 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 7 drivers/net/ethernet/ibm/ibmvnic.c | 5 drivers/net/ethernet/intel/i40e/i40e_main.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c | 5 drivers/net/ethernet/intel/ixgbevf/ipsec.c | 5 drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 2 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 2 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 drivers/net/ethernet/renesas/sh_eth.c | 7 drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 19 + drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c | 4 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 drivers/net/netdevsim/netdev.c | 1 drivers/net/phy/phy.c | 7 drivers/net/usb/qmi_wwan.c | 14 - drivers/net/wan/lapbether.c | 3 drivers/net/wireless/ath/ath9k/ath9k.h | 3 drivers/net/wireless/ath/ath9k/xmit.c | 6 drivers/net/wireless/mediatek/mt76/dma.c | 11 drivers/nvme/host/core.c | 8 drivers/pci/controller/pci-xgene-msi.c | 10 drivers/pci/controller/pcie-mediatek.c | 7 drivers/pci/pci.c | 4 drivers/platform/olpc/olpc-ec.c | 15 - drivers/s390/block/dasd.c | 6 drivers/s390/cio/vfio_ccw_ops.c | 6 drivers/s390/crypto/vfio_ap_ops.c | 2 drivers/scsi/libiscsi.c | 11 drivers/spi/spi-stm32.c | 15 - drivers/staging/comedi/drivers/addi_apci_1032.c | 4 drivers/staging/comedi/drivers/addi_apci_1500.c | 18 - drivers/staging/comedi/drivers/adv_pci1710.c | 10 drivers/staging/comedi/drivers/das6402.c | 2 drivers/staging/comedi/drivers/das800.c | 2 drivers/staging/comedi/drivers/dmm32at.c | 2 drivers/staging/comedi/drivers/me4000.c | 2 drivers/staging/comedi/drivers/pcl711.c | 2 drivers/staging/comedi/drivers/pcl818.c | 2 drivers/staging/ks7010/ks_wlan_net.c | 6 drivers/staging/rtl8188eu/core/rtw_ap.c | 5 drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 6 drivers/staging/rtl8192e/rtl8192e/rtl_wx.c | 7 drivers/staging/rtl8192u/r8192U_wx.c | 6 drivers/staging/rtl8712/rtl871x_cmd.c | 6 drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 2 drivers/target/target_core_pr.c | 15 - drivers/target/target_core_transport.c | 15 - drivers/usb/class/cdc-acm.c | 5 drivers/usb/class/usblp.c | 16 - drivers/usb/dwc3/dwc3-qcom.c | 16 - drivers/usb/gadget/function/f_uac1.c | 1 drivers/usb/gadget/function/f_uac2.c | 2 drivers/usb/gadget/function/u_ether_configfs.h | 5 drivers/usb/host/xhci-pci.c | 13 drivers/usb/host/xhci-ring.c | 3 drivers/usb/host/xhci.c | 78 +++-- drivers/usb/host/xhci.h | 1 drivers/usb/renesas_usbhs/pipe.c | 2 drivers/usb/serial/ch341.c | 1 drivers/usb/serial/cp210x.c | 3 drivers/usb/serial/io_edgeport.c | 26 + drivers/usb/usbip/stub_dev.c | 42 ++- drivers/usb/usbip/vhci_sysfs.c | 39 ++ drivers/usb/usbip/vudc_sysfs.c | 49 +++ drivers/xen/events/events_2l.c | 22 + drivers/xen/events/events_base.c | 132 +++++++--- drivers/xen/events/events_fifo.c | 7 drivers/xen/events/events_internal.h | 22 + fs/binfmt_misc.c | 29 +- fs/cifs/cifsfs.c | 2 fs/configfs/file.c | 6 fs/nfs/dir.c | 40 +-- fs/nfs/nfs4proc.c | 2 fs/pnode.h | 2 fs/udf/inode.c | 9 include/linux/can/skb.h | 8 include/linux/sched/mm.h | 3 include/linux/stop_machine.h | 11 include/linux/virtio_net.h | 7 include/media/rc-map.h | 7 include/target/target_core_backend.h | 1 include/uapi/linux/netfilter/nfnetlink_cthelper.h | 2 kernel/sched/membarrier.c | 4 kernel/sysctl.c | 8 kernel/time/hrtimer.c | 60 ++-- lib/logic_pio.c | 3 mm/slub.c | 2 net/ipv4/cipso_ipv4.c | 11 net/ipv4/nexthop.c | 10 net/ipv4/tcp.c | 23 + net/ipv4/udp_offload.c | 2 net/ipv6/calipso.c | 14 - net/mpls/mpls_gso.c | 3 net/netfilter/nf_nat_proto.c | 25 + net/netfilter/x_tables.c | 6 net/netlabel/netlabel_cipso_v4.c | 3 net/qrtr/qrtr.c | 4 net/sched/sch_api.c | 8 net/sunrpc/sched.c | 5 samples/bpf/xdpsock_user.c | 2 security/commoncap.c | 12 sound/pci/hda/hda_bind.c | 4 sound/pci/hda/hda_controller.c | 7 sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_ca0132.c | 1 sound/pci/hda/patch_hdmi.c | 13 sound/usb/quirks.c | 9 tools/perf/util/trace-event-read.c | 1 tools/testing/selftests/bpf/progs/test_tunnel_kern.c | 6 tools/testing/selftests/bpf/verifier/array_access.c | 3 tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d_vlan.sh | 9 virt/kvm/arm/arm.c | 8 virt/kvm/arm/mmu.c | 3 172 files changed, 1211 insertions(+), 585 deletions(-)
Adrian Hunter (1):
mmc: core: Fix partition switch time for eMMC
Alain Volmat (1):
spi: stm32: make spurious and overrun interrupts visible
Aleksandr Miloserdov (2):
scsi: target: core: Add cmd length set before cmd complete
scsi: target: core: Prevent underflow for service actions
Andreas Larsson (1):
sparc32: Limit memblock allocation to low memory
Andrey Konovalov (1):
arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL
Anna-Maria Behnsen (1):
hrtimer: Update softirq_expires_next correctly after __hrtimer_get_next_event()
Anshuman Khandual (1):
arm64/mm: Fix pfn_valid() for ZONE_DEVICE based memory
Antony Antony (1):
ixgbe: fail to create xfrm offload of IPsec tunnel mode SA
Ard Biesheuvel (1):
arm64: mm: use a 48-bit ID map when possible on 52-bit VA builds
Arnd Bergmann (1):
stop_machine: mark helpers __always_inline
Artem Lapkin (1):
drm: meson_drv add shutdown function
Athira Rajeev (1):
powerpc/perf: Record counter overflow always if SAMPLE_IP is unset
Balazs Nemeth (2):
net: check if protocol extracted by virtio_net_hdr_set_proto is correct
net: avoid infinite loop in mpls_gso_segment when mpls_hlen == 0
Benjamin Coddington (1):
SUNRPC: Set memalloc_nofs_save() for sync tasks
Biju Das (2):
media: v4l: vsp1: Fix uif null pointer access
media: v4l: vsp1: Fix bru null pointer access
Chaotian Jing (1):
mmc: mediatek: fix race condition between msdc_request_timeout and irq
Christian Brauner (1):
mount: fix mounting of detached mounts onto targets that reside on shared mounts
Christophe JAILLET (1):
mmc: mxs-mmc: Fix a resource leak in an error handling path in 'mxs_mmc_probe()'
Christophe Leroy (1):
powerpc/603: Fix protection of user pages mapped with PROT_NONE
Colin Ian King (1):
qxl: Fix uninitialised struct field head.surface_id
Daiyue Zhang (1):
configfs: fix a use-after-free in __configfs_open_file
Dan Carpenter (6):
USB: gadget: u_ether: Fix a configfs return code
staging: rtl8192u: fix ->ssid overflow in r8192_wx_set_scan()
staging: rtl8188eu: prevent ->ssid overflow in rtw_wx_set_scan()
staging: rtl8712: unterminated string leads to read overflow
staging: rtl8188eu: fix potential memory corruption in rtw_check_beacon_data()
staging: ks7010: prevent buffer overflow in ks_wlan_set_scan()
Daniel Borkmann (1):
net: Fix gro aggregation for udp encaps with zero csum
Daniel Vetter (1):
drm/compat: Clear bounce structures
Daniele Palmas (1):
net: usb: qmi_wwan: allow qmimux add/del with master up
Danielle Ratson (1):
selftests: forwarding: Fix race condition in mirror installation
Dmitry Baryshkov (1):
misc: fastrpc: restrict user apps from sending kernel RPC messages
Dmitry V. Levin (1):
uapi: nfnetlink_cthelper.h: fix userspace compilation error
Edwin Peer (1):
bnxt_en: reliably allocate IRQ table on reset to avoid crash
Eric Dumazet (1):
tcp: add sanity tests to TCP_QUEUE_SEQ
Eric Farman (1):
s390/cio: return -EFAULT if copy_to_user() fails
Eric W. Biederman (1):
Revert 95ebabde382c ("capabilities: Don't allow writing ambiguous v3 file capabilities")
Felix Fietkau (1):
ath9k: fix transmitting to stations in dynamic SMPS mode
Filipe Laíns (1):
HID: logitech-dj: add support for the new lightspeed connection iteration
Florian Westphal (1):
netfilter: nf_nat: undo erroneous tcp edemux lookup
Forest Crossman (1):
usb: xhci: Fix ASMedia ASM1042A and ASM3242 DMA addressing
Frank Li (1):
mmc: cqhci: Fix random crash when remove mmc module/card
Geert Uytterhoeven (1):
PCI: Fix pci_register_io_range() memory leak
Greg Kroah-Hartman (1):
Linux 5.4.106
Greg Kurz (1):
powerpc/pseries: Don't enforce MSI affinity with kdump
Guangbin Huang (1):
net: phy: fix save wrong speed and duplex problem if autoneg is on
Hangbin Liu (1):
selftests/bpf: No need to drop the packet when there is no geneve opt
Hans Verkuil (1):
media: rc: compile rc-cec.c into rc-core
Heikki Krogerus (1):
software node: Fix node registration
Heiko Carstens (1):
s390/smp: __smp_rescan_cpus() - move cpumask away from stack
Hillf Danton (1):
netdevsim: init u64 stats for 32bit hardware
Ian Abbott (9):
staging: comedi: addi_apci_1032: Fix endian problem for COS sample
staging: comedi: addi_apci_1500: Fix endian problem for command sample
staging: comedi: adv_pci1710: Fix endian problem for AI command data
staging: comedi: das6402: Fix endian problem for AI command data
staging: comedi: das800: Fix endian problem for AI command data
staging: comedi: dmm32at: Fix endian problem for AI command data
staging: comedi: me4000: Fix endian problem for AI command data
staging: comedi: pcl711: Fix endian problem for AI command data
staging: comedi: pcl818: Fix endian problem for AI command data
Ian Rogers (1):
perf traceevent: Ensure read cmdlines are null terminated.
Ido Schimmel (1):
nexthop: Do not flush blackhole nexthops when loopback goes down
Jakub Kicinski (1):
ethernet: alx: fix order of calls on resume
Jia-Ju Bai (2):
net: qrtr: fix error return code of qrtr_sendmsg()
block: rsxx: fix error return code of rsxx_pci_probe()
Jian Shen (3):
net: hns3: fix query vlan mask value error for flow director
net: hns3: fix bug when calculating the TCAM table info
net: hns3: fix error mask definition of flow director
Jiri Wiesner (1):
ibmvnic: always store valid MAC address
Joakim Zhang (5):
can: flexcan: assert FRZ bit in flexcan_chip_freeze()
can: flexcan: enable RX FIFO after FRZ/HALT valid
can: flexcan: invoke flexcan_chip_freeze() to enter freeze mode
net: stmmac: stop each tx channel independently
net: stmmac: fix watchdog timeout during suspend/resume stress test
John Ernberg (1):
ALSA: usb: Add Plantronics C320-M USB ctrl msg delay quirk
Josh Poimboeuf (1):
x86/unwind/orc: Disable KASAN checking in the ORC unwinder, part 2
Juergen Gross (3):
xen/events: reset affinity of 2-level event when tearing it down xen/events: don't unmask an event channel when an eoi is pending xen/events: avoid handling the same event on two cpus at the same time
Karan Singhal (1):
USB: serial: cp210x: add ID for Acuity Brands nLight Air Adapter
Keita Suzuki (1):
i40e: Fix memory leak in i40e_probe
Keith Busch (2):
nvme: unlink head after removing last namespace
nvme: release namespace head reference on error
Kevin(Yudong) Yang (1):
net/mlx4_en: update moderation when config reset
Khalid Aziz (1):
sparc64: Use arch_validate_flags() to validate ADI flag
Krzysztof Wilczyński (1):
PCI: mediatek: Add missing of_node_put() to fix reference leak
Lee Gibson (2):
staging: rtl8712: Fix possible buffer overflow in r8712_sitesurvey_cmd
staging: rtl8192e: Fix possible buffer overflow in _rtl92e_wx_set_scan
Lin Feng (1):
sysctl.c: fix underflow value setting risk in vm_table
Linus Torvalds (1):
Revert "mm, slub: consider rest of partial list if acquire_slab() fails"
Lior Ribak (1):
binfmt_misc: fix possible deadlock in bm_register_write
Lorenzo Bianconi (1):
mt76: dma: do not report truncated frames to mac80211
Lubomir Rintel (1):
Platform: OLPC: Fix probe error handling
Maciej Fijalkowski (1):
samples, bpf: Add missing munmap in xdpsock
Marc Zyngier (3):
KVM: arm64: Fix exclusive limit for IPA size
KVM: arm64: Ensure I-cache isolation between vcpus of a same VM
KVM: arm64: Reject VM creation when the default IPA size is unsupported
Martin Kaiser (1):
PCI: xgene-msi: Fix race in installing chained irq handler
Mathias Nyman (2):
xhci: Improve detection of device initiated wake signal.
xhci: Fix repeated xhci wake after suspend due to uncleared internal wake state
Mathieu Desnoyers (1):
sched/membarrier: fix missing local execution of ipi_sync_rq_state()
Matthew Wilcox (Oracle) (1):
include/linux/sched/mm.h: use rcu_dereference in in_vfork()
Matthias Kaehlcke (1):
usb: dwc3: qcom: Honor wakeup enabled/disabled state
Maxim Mikityanskiy (1):
media: usbtv: Fix deadlock on suspend
Maximilian Heyne (1):
net: sched: avoid duplicates in classes dump
Michael Ellerman (1):
powerpc/64: Fix stack trace not displaying final frame
Mike Christie (1):
scsi: libiscsi: Fix iscsi_prep_scsi_cmd_pdu() error handling
Minchan Kim (1):
zram: fix return value on writeback_store
Naveen N. Rao (1):
powerpc/64s: Fix instruction encoding for lis in ppc_function_entry()
Neil Roberts (2):
drm/shmem-helper: Check for purged buffers in fault handler drm/shmem-helper: Don't remove the offset in vm_area_struct pgoff
Nicholas Piggin (1):
powerpc: improve handling of unrecoverable system reset
Niv Sardi (1):
USB: serial: ch341: add new Product ID
Oleksij Rempel (1):
can: skb: can_skb_set_owner(): fix ref counting if socket was closed before setting skb ownership
Oliver O'Halloran (1):
powerpc/pci: Add ppc_md.discover_phbs()
Ondrej Mosnacek (1):
NFSv4.2: fix return value of _nfs4_get_security_label()
Ong Boon Leong (1):
net: stmmac: fix incorrect DMA channel intr enable setting of EQoS v4.10
Paul Cercueil (2):
net: davicom: Fix regulator not turned off on failed probe
net: davicom: Fix regulator not turned off on driver removal
Paul Moore (1):
cipso,calipso: resolve a number of problems with the DOI refcounts
Paulo Alcantara (1):
cifs: return proper error code in statfs(2)
Pavel Skripkin (1):
USB: serial: io_edgeport: fix memory leak in edge_startup
Pete Zaitcev (1):
USB: usblp: fix a hang in poll() if disconnected
Ronald Tschalär (1):
Input: applespi - don't wait for responses to commands indefinitely.
Ruslan Bilovol (2):
usb: gadget: f_uac2: always increase endpoint max_packet_size by one audio slot
usb: gadget: f_uac1: stop playback on function disable
Sasha Levin (1):
kbuild: clamp SUBLEVEL to 255
Sebastian Reichel (1):
USB: serial: cp210x: add some more GE USB IDs
Serge Semin (1):
usb: dwc3: qcom: Add missing DWC3 OF node refcount decrement
Sergey Shtylyov (3):
sh_eth: fix TRSCER mask for SH771x
sh_eth: fix TRSCER mask for R7S9210
sh_eth: fix TRSCER mask for R7S72100
Shile Zhang (1):
misc/pvpanic: Export module FDT device table
Shuah Khan (6):
usbip: fix stub_dev to check for stream socket
usbip: fix vhci_hcd to check for stream socket
usbip: fix vudc to check for stream socket
usbip: fix stub_dev usbip_sockfd_store() races leading to gpf
usbip: fix vhci_hcd attach_store() races leading to gpf
usbip: fix vudc usbip_sockfd_store races leading to gpf
Simeon Simeonoff (1):
ALSA: hda/ca0132: Add Sound BlasterX AE-5 Plus support
Stanislaw Gruszka (1):
usb: xhci: do not perform Soft Retry for some xHCI hosts
Stefan Haberland (2):
s390/dasd: fix hanging DASD driver unbind s390/dasd: fix hanging IO request during DASD driver unbind
Steven J. Magnani (1):
udf: fix silent AED tagLocation corruption
Suravee Suthikulpanit (1):
iommu/amd: Fix performance counter initialization
Takashi Iwai (6):
ALSA: hda/hdmi: Cancel pending works before suspend
ALSA: hda: Drop the BATCH workaround for AMD controllers
ALSA: hda: Flush pending unsolicited events before suspend
ALSA: hda: Avoid spurious unsol event handling during S3/S4
ALSA: usb-audio: Fix "cannot get freq eq" errors on Dell AE515 sound bar
ALSA: usb-audio: Apply the control quirk to Plantronics headsets
Torin Cooper-Bennun (1):
can: tcan4x5x: tcan4x5x_init(): fix initialization - clear MRAM before entering Normal Mode
Trond Myklebust (2):
NFS: Don't revalidate the directory permissions on a lookup failure
NFS: Don't gratuitously clear the inode cache when lookup failed
Vasily Averin (1):
netfilter: x_tables: gpf inside xt_find_revision()
Vladimir Oltean (2):
net: enetc: don't overwrite the RSS indirection table when initializing
net: enetc: initialize RFS/RSS memories for unused ports too
Wang Qing (2):
s390/cio: return -EFAULT if copy_to_user() fails again s390/crypto: return -EFAULT if copy_to_user() fails
Wolfram Sang (2):
i2c: rcar: faster irq code to minimize HW race condition
i2c: rcar: optimize cacheline to minimize HW race condition
Xie He (1):
net: lapbether: Remove netif_start_queue / netif_stop_queue
Yauheni Kaliuta (1):
selftests/bpf: Mask bpf_csum_diff() return value to 16 bits in test_verifier
Yorick de Wid (1):
Goodix Fingerprint device is not a modem
Yoshihiro Shimoda (1):
usb: renesas_usbhs: Clear PIPECFG for re-enabling pipe with other EPNUM
Greg Kroah-Hartman
maintainerDocumentation/virt/kvm/api.txt +3 -0
@@ -172,6 +172,9 @@ is dependent on the CPU capability and the kernel configuration. The limit can be retrieved using KVM_CAP_ARM_VM_IPA_SIZE of the KVM_CHECK_EXTENSION ioctl() at run-time. +Creation of the VM will fail if the requested IPA size (whether it is +implicit or explicit) is unsupported on the host. + Please note that configuring the IPA size does not affect the capability exposed by the guest CPUs in ID_AA64MMFR0_EL1[PARange]. It only affects size of the address translated by the stage2 level (guest physical to
Makefile +10 -4
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 105 +SUBLEVEL = 106 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -1175,9 +1175,15 @@ define filechk_utsrelease.h endef define filechk_version.h - echo \#define LINUX_VERSION_CODE $(shell \ - expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 0$(SUBLEVEL)); \ - echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' + if [ $(SUBLEVEL) -gt 255 ]; then \ + echo \#define LINUX_VERSION_CODE $(shell \ + expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \ + else \ + echo \#define LINUX_VERSION_CODE $(shell \ + expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \ + fi; \ + echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + \ + ((c) > 255 ? 255 : (c)))' endef $(version_h): FORCE
arch/arm/include/asm/kvm_asm.h +1 -1
@@ -56,7 +56,7 @@ extern char __kvm_hyp_init_end[];extern void __kvm_flush_vm_context (void );extern void __kvm_tlb_flush_vmid_ipa (struct kvm *kvm,phys_addr_t ipa);extern void __kvm_tlb_flush_vmid (struct kvm *kvm); -extern void __kvm_tlb_flush_local_vmid (struct kvm_vcpu *vcpu); +extern void __kvm_flush_cpu_context (struct kvm_vcpu *vcpu);extern void __kvm_timer_set_cntvoff (u32 cntvoff_low,u32 cntvoff_high);
arch/arm/kvm/hyp/tlb.c +2 -1
@@ -45,7 +45,7 @@ void __hyp_text __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa)__kvm_tlb_flush_vmid (kvm); } -void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu) +void __hyp_text __kvm_flush_cpu_context(struct kvm_vcpu *vcpu) {struct kvm *kvm =kern_hyp_va (kern_hyp_va (vcpu)->kvm);
@@ -54,6 +54,7 @@ void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu)isb ();write_sysreg (0 ,TLBIALL ); +write_sysreg (0 ,ICIALLU );dsb (nsh);isb ();
arch/arm64/include/asm/kvm_asm.h +1 -1
@@ -60,7 +60,7 @@ extern char __kvm_hyp_vector[];extern void __kvm_flush_vm_context (void );extern void __kvm_tlb_flush_vmid_ipa (struct kvm *kvm,phys_addr_t ipa);extern void __kvm_tlb_flush_vmid (struct kvm *kvm); -extern void __kvm_tlb_flush_local_vmid (struct kvm_vcpu *vcpu); +extern void __kvm_flush_cpu_context (struct kvm_vcpu *vcpu);extern void __kvm_timer_set_cntvoff (u32 cntvoff_low,u32 cntvoff_high);
arch/arm64/include/asm/memory.h +5 -0
@@ -315,6 +315,11 @@ static inline void *phys_to_virt(phys_addr_t x)#define ARCH_PFN_OFFSET ((unsigned long)PHYS_PFN_OFFSET)#if !defined(CONFIG_SPARSEMEM_VMEMMAP ) || defined(CONFIG_DEBUG_VIRTUAL ) +#define page_to_virt (x) ({ \ + __typeof__(x) __page = x; \ + void *__addr = __va(page_to_phys(__page)); \ + (void *)__tag_set((const void *)__addr, page_kasan_tag(__page));\ +})#define virt_to_page (x) pfn_to_page(virt_to_pfn(x))#else #define page_to_virt (x) ({ \
arch/arm64/include/asm/mmu_context.h +1 -4
@@ -63,10 +63,7 @@ extern u64 idmap_ptrs_per_pgd;static inline bool __cpu_uses_extended_idmap (void ) { -if (IS_ENABLED (CONFIG_ARM64_VA_BITS_52 )) -return false; - -return unlikely (idmap_t0sz !=TCR_T0SZ (VA_BITS )); +return unlikely (idmap_t0sz !=TCR_T0SZ (vabits_actual)); }/*
arch/arm64/kernel/head.S +1 -1
@@ -337,7 +337,7 @@ __create_page_tables: */ adrp x5, __idmap_text_end clz x5, x5 - cmp x5, TCR_T0SZ(VA_BITS) // default T0SZ small enough? + cmp x5, TCR_T0SZ(VA_BITS_MIN) // default T0SZ small enough? b.ge 1f // .. then skip VA range extension adr_l x6, idmap_t0sz
arch/arm64/kvm/hyp/tlb.c +2 -1
@@ -182,7 +182,7 @@ void __hyp_text __kvm_tlb_flush_vmid(struct kvm *kvm)__tlb_switch_to_host (kvm, &cxt); } -void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu) +void __hyp_text __kvm_flush_cpu_context(struct kvm_vcpu *vcpu) {struct kvm *kvm =kern_hyp_va (kern_hyp_va (vcpu)->kvm);struct tlb_inv_context cxt;
@@ -191,6 +191,7 @@ void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu)__tlb_switch_to_guest (kvm, &cxt);__tlbi (vmalle1); + asmvolatile ("ic iallu" );dsb (nsh);isb ();
arch/arm64/kvm/reset.c +8 -3
@@ -378,10 +378,10 @@ void kvm_set_ipa_limit(void)pr_info ("kvm: Limiting the IPA size due to kernel %s Address limit\n" , (va_max < pa_max) ?"Virtual" :"Physical" ); -WARN (ipa_max <KVM_PHYS_SHIFT , -"KVM IPA limit (%d bit) is smaller than default size\n" , ipa_max); kvm_ipa_limit = ipa_max; -kvm_info ("IPA Size Limit: %dbits\n" , kvm_ipa_limit); +kvm_info ("IPA Size Limit: %d bits%s\n" , kvm_ipa_limit, + ((kvm_ipa_limit <KVM_PHYS_SHIFT ) ? +" (Reduced IPA size, limited VM/VMM compatibility)" :"" )); }/*
@@ -408,6 +408,11 @@ int kvm_arm_setup_stage2(struct kvm *kvm, unsigned long type)return -EINVAL ; }else { phys_shift =KVM_PHYS_SHIFT ; +if (phys_shift > kvm_ipa_limit) { +pr_warn_once ("%s using unsupported default IPA limit, upgrade your VMM\n" , + current->comm); +return -EINVAL ; + } } parange =read_sanitised_ftr_reg (SYS_ID_AA64MMFR0_EL1 ) &7 ;
arch/arm64/mm/init.c +12 -0
@@ -245,6 +245,18 @@ int pfn_valid(unsigned long pfn)if (!valid_section (__nr_to_section (pfn_to_section_nr (pfn))))return 0 ; + +/* +* ZONE_DEVICE memory does not have the memblock entries. +* memblock_is_map_memory() check for ZONE_DEVICE based +* addresses will always fail. Even the normal hotplugged +* memory will never have MEMBLOCK_NOMAP flag set in their +* memblock entries. Skip memblock search for all non early +* memory sections covering all of hotplug memory including +* both normal and ZONE_DEVICE based. +*/ +if (!early_section (__pfn_to_section (pfn))) +return pfn_section_valid (__pfn_to_section (pfn), pfn);#endif return memblock_is_map_memory (addr); }
arch/arm64/mm/mmu.c +1 -1
@@ -38,7 +38,7 @@#define NO_BLOCK_MAPPINGS BIT(0)#define NO_CONT_MAPPINGS BIT(1) -u64 idmap_t0sz =TCR_T0SZ (VA_BITS ); +u64 idmap_t0sz =TCR_T0SZ (VA_BITS_MIN );u64 idmap_ptrs_per_pgd =PTRS_PER_PGD ; u64 __section(".mmuoff.data.write") vabits_actual;
arch/powerpc/include/asm/code-patching.h +1 -1
@@ -72,7 +72,7 @@ void __patch_exception(int exc, unsigned long addr);#endif #define OP_RT_RA_MASK 0xffff0000UL -#define LIS_R2 0x3c020000UL +#define LIS_R2 0x3c400000UL#define ADDIS_R2_R12 0x3c4c0000UL#define ADDI_R2_R2 0x38420000UL
arch/powerpc/include/asm/machdep.h +3 -0
@@ -59,6 +59,9 @@ struct machdep_calls {int (*pcibios_root_bridge_prepare)(struct pci_host_bridge *bridge); +/* finds all the pci_controllers present at boot */ +void (*discover_phbs)(void ); +/* To setup PHBs when using automatic OF platform driver for PCI */ int (*pci_setup_phb)(struct pci_controller *host);
arch/powerpc/include/asm/ptrace.h +3 -0
@@ -62,6 +62,9 @@ struct pt_regs };#endif + +#define STACK_FRAME_WITH_PT_REGS (STACK_FRAME_OVERHEAD + sizeof(struct pt_regs)) +#ifdef __powerpc64__/*
arch/powerpc/kernel/asm-offsets.c +1 -1
@@ -285,7 +285,7 @@ int main(void)/* Interrupt register frame */ DEFINE (INT_FRAME_SIZE ,STACK_INT_FRAME_SIZE ); -DEFINE (SWITCH_FRAME_SIZE ,STACK_FRAME_OVERHEAD +sizeof (struct pt_regs )); +DEFINE (SWITCH_FRAME_SIZE ,STACK_FRAME_WITH_PT_REGS );STACK_PT_REGS_OFFSET (GPR0 , gpr[0 ]);STACK_PT_REGS_OFFSET (GPR1 , gpr[1 ]);STACK_PT_REGS_OFFSET (GPR2 , gpr[2 ]);
arch/powerpc/kernel/head_32.S +6 -3
@@ -418,10 +418,11 @@ InstructionTLBMiss: cmplw 0,r1,r3 #endif mfspr r2, SPRN_SPRG_PGDIR - li r1,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC + li r1,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC | _PAGE_USER #if defined(CONFIG_MODULES) || defined(CONFIG_DEBUG_PAGEALLOC) bge- 112f lis r2, (swapper_pg_dir - PAGE_OFFSET)@ha /* if kernel address, use */ + li r1,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC addi r2, r2, (swapper_pg_dir - PAGE_OFFSET)@l /* kernel page table */ #endif 112: rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */
@@ -480,9 +481,10 @@ DataLoadTLBMiss: lis r1,PAGE_OFFSET@h /* check if kernel address */ cmplw 0,r1,r3 mfspr r2, SPRN_SPRG_PGDIR - li r1, _PAGE_PRESENT | _PAGE_ACCESSED + li r1, _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_USER bge- 112f lis r2, (swapper_pg_dir - PAGE_OFFSET)@ha /* if kernel address, use */ + li r1, _PAGE_PRESENT | _PAGE_ACCESSED addi r2, r2, (swapper_pg_dir - PAGE_OFFSET)@l /* kernel page table */ 112: rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */ lwz r2,0(r2) /* get pmd entry */
@@ -556,9 +558,10 @@ DataStoreTLBMiss: lis r1,PAGE_OFFSET@h /* check if kernel address */ cmplw 0,r1,r3 mfspr r2, SPRN_SPRG_PGDIR - li r1, _PAGE_RW | _PAGE_DIRTY | _PAGE_PRESENT | _PAGE_ACCESSED + li r1, _PAGE_RW | _PAGE_DIRTY | _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_USER bge- 112f lis r2, (swapper_pg_dir - PAGE_OFFSET)@ha /* if kernel address, use */ + li r1, _PAGE_RW | _PAGE_DIRTY | _PAGE_PRESENT | _PAGE_ACCESSED addi r2, r2, (swapper_pg_dir - PAGE_OFFSET)@l /* kernel page table */ 112: rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */ lwz r2,0(r2) /* get pmd entry */
arch/powerpc/kernel/pci-common.c +10 -0
@@ -1669,3 +1669,13 @@ static void fixup_hide_host_resource_fsl(struct pci_dev *dev) }DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_MOTOROLA ,PCI_ANY_ID , fixup_hide_host_resource_fsl);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_FREESCALE ,PCI_ANY_ID , fixup_hide_host_resource_fsl); + + +static int __init discover_phbs (void ) +{ +if (ppc_md.discover_phbs) + ppc_md.discover_phbs (); + +return 0 ; +} +core_initcall (discover_phbs);
arch/powerpc/kernel/process.c +1 -1
@@ -2081,7 +2081,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)* See if this is an exception frame. * We look for the "regshere" marker in the current frame. */ -if (validate_sp (sp, tsk,STACK_INT_FRAME_SIZE ) +if (validate_sp (sp, tsk,STACK_FRAME_WITH_PT_REGS ) && stack[STACK_FRAME_MARKER ] ==STACK_FRAME_REGS_MARKER ) {struct pt_regs *regs = (struct pt_regs *) (sp +STACK_FRAME_OVERHEAD );
arch/powerpc/kernel/traps.c +4 -1
@@ -513,8 +513,11 @@ void system_reset_exception(struct pt_regs *regs)die ("Unrecoverable nested System Reset" , regs,SIGABRT );#endif /* Must die if the interrupt is not recoverable */ -if (!(regs->msr &MSR_RI )) +if (!(regs->msr &MSR_RI )) { +/* For the reason explained in die_mce, nmi_exit before die */ +nmi_exit ();die ("Unrecoverable System Reset" , regs,SIGABRT ); + }if (saved_hsrrs) {mtspr (SPRN_HSRR0 , hsrr0);
arch/powerpc/perf/core-book3s.c +15 -4
@@ -2077,7 +2077,17 @@ static void record_and_restart(struct perf_event *event, unsigned long val, left += period;if (left <=0 ) left = period; - record =siar_valid (regs); + +/* +* If address is not requested in the sample via +* PERF_SAMPLE_IP, just record that sample irrespective +* of SIAR valid check. +*/ +if (event->attr.sample_type &PERF_SAMPLE_IP ) + record =siar_valid (regs); +else + record =1 ; + event->hw.last_period = event->hw.sample_period; }if (left <0x80000000LL )
@@ -2095,9 +2105,10 @@ static void record_and_restart(struct perf_event *event, unsigned long val,* MMCR2. Check attr.exclude_kernel and address to drop the sample in * these cases. */ -if (event->attr.exclude_kernel && record) -if (is_kernel_addr (mfspr (SPRN_SIAR ))) - record =0 ; +if (event->attr.exclude_kernel && + (event->attr.sample_type &PERF_SAMPLE_IP ) && +is_kernel_addr (mfspr (SPRN_SIAR ))) + record =0 ;/* * Finally record data if requested.
arch/powerpc/platforms/pseries/msi.c +23 -2
@@ -4,6 +4,7 @@* Copyright 2006-2007 Michael Ellerman, IBM Corp. */ +#include <linux/crash_dump.h> #include <linux/device.h> #include <linux/irq.h> #include <linux/msi.h>
@@ -458,8 +459,28 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type)return hwirq; } - virq =irq_create_mapping_affinity (NULL , hwirq, - entry->affinity); +/* +* Depending on the number of online CPUs in the original +* kernel, it is likely for CPU #0 to be offline in a kdump +* kernel. The associated IRQs in the affinity mappings +* provided by irq_create_affinity_masks() are thus not +* started by irq_startup(), as per-design for managed IRQs. +* This can be a problem with multi-queue block devices driven +* by blk-mq : such a non-started IRQ is very likely paired +* with the single queue enforced by blk-mq during kdump (see +* blk_mq_alloc_tag_set()). This causes the device to remain +* silent and likely hangs the guest at some point. +* +* We don't really care for fine-grained affinity when doing +* kdump actually : simply ignore the pre-computed affinity +* masks in this case and let the default mask with all CPUs +* be used when creating the IRQ mappings. +*/ +if (is_kdump_kernel ()) + virq =irq_create_mapping (NULL , hwirq); +else + virq =irq_create_mapping_affinity (NULL , hwirq, + entry->affinity);if (!virq) {pr_debug ("rtas_msi: Failed mapping hwirq %d\n" , hwirq);
arch/s390/kernel/smp.c +1 -1
@@ -765,7 +765,7 @@ static int smp_add_core(struct sclp_core_entry *core, cpumask_t *avail,static int __smp_rescan_cpus (struct sclp_core_info *info,bool early) {struct sclp_core_entry *core; -cpumask_t avail; +static cpumask_t avail;bool configured;u16 core_id;int nr, i;
arch/sparc/include/asm/mman.h +29 -25
64 lines not on this page · raw message
arch/sparc/mm/init_32.c +3 -0
@@ -197,6 +197,9 @@ unsigned long __init bootmem_init(unsigned long *pages_avail) size =memblock_phys_mem_size () -memblock_reserved_size (); *pages_avail = (size >>PAGE_SHIFT ) - high_pages; +/* Only allow low memory to be allocated via memblock allocation */ +memblock_set_current_limit (max_low_pfn <<PAGE_SHIFT ); +return max_pfn; }
arch/x86/kernel/unwind_orc.c +6 -6
@@ -357,8 +357,8 @@ static bool deref_stack_regs(struct unwind_state *state, unsigned long addr,if (!stack_access_ok (state, addr,sizeof (struct pt_regs )))return false; - *ip = regs->ip; - *sp = regs->sp; + *ip =READ_ONCE_NOCHECK (regs->ip); + *sp =READ_ONCE_NOCHECK (regs->sp);return true; }
@@ -370,8 +370,8 @@ static bool deref_stack_iret_regs(struct unwind_state *state, unsigned long addrif (!stack_access_ok (state, addr,IRET_FRAME_SIZE ))return false; - *ip = regs->ip; - *sp = regs->sp; + *ip =READ_ONCE_NOCHECK (regs->ip); + *sp =READ_ONCE_NOCHECK (regs->sp);return true; }
@@ -392,12 +392,12 @@ static bool get_reg(struct unwind_state *state, unsigned int reg_off,return false;if (state->full_regs) { - *val = ((unsigned long *)state->regs)[reg]; + *val =READ_ONCE_NOCHECK (((unsigned long *)state->regs)[reg]);return true; }if (state->prev_regs) { - *val = ((unsigned long *)state->prev_regs)[reg]; + *val =READ_ONCE_NOCHECK (((unsigned long *)state->prev_regs)[reg]);return true; }
drivers/base/swnode.c +3 -0
@@ -812,6 +812,9 @@ int software_node_register(const struct software_node *node)if (software_node_to_swnode (node))return -EEXIST ; +if (node->parent && !parent) +return -EINVAL ; +return PTR_ERR_OR_ZERO (swnode_register (node, parent,0 )); }EXPORT_SYMBOL_GPL (software_node_register);
drivers/block/rsxx/core.c +1 -0
@@ -869,6 +869,7 @@ static int rsxx_pci_probe(struct pci_dev *dev, card->event_wq =create_singlethread_workqueue (DRIVER_NAME "_event" );if (!card->event_wq) {dev_err (CARD_TO_DEV (card),"Failed card event setup.\n" ); + st = -ENOMEM ; goto failed_event_handler; }
drivers/block/zram/zram_drv.c +8 -3
@@ -627,7 +627,7 @@ static ssize_t writeback_store(struct device *dev,struct bio_vec bio_vec;struct page *page;ssize_t ret = len; -int mode; +int mode, err;unsigned long blk_idx =0 ;if (sysfs_streq (buf,"idle" ))
@@ -719,12 +719,17 @@ static ssize_t writeback_store(struct device *dev,* XXX: A single page IO would be inefficient for write * but it would be not bad as starter. */ - ret =submit_bio_wait (&bio); -if (ret) { + err =submit_bio_wait (&bio); +if (err) {zram_slot_lock (zram, index);zram_clear_flag (zram, index,ZRAM_UNDER_WB );zram_clear_flag (zram, index,ZRAM_IDLE );zram_slot_unlock (zram, index); +/* +* Return last IO error unless every IO were +* not suceeded. +*/ + ret = err;continue ; }
drivers/gpu/drm/drm_gem_shmem_helper.c +18 -7
@@ -474,14 +474,28 @@ static vm_fault_t drm_gem_shmem_fault(struct vm_fault *vmf)struct drm_gem_object *obj = vma->vm_private_data;struct drm_gem_shmem_object *shmem =to_drm_gem_shmem_obj (obj);loff_t num_pages = obj->size >>PAGE_SHIFT ; +vm_fault_t ret;struct page *page; +pgoff_t page_offset; -if (vmf->pgoff >= num_pages ||WARN_ON_ONCE (!shmem->pages)) -return VM_FAULT_SIGBUS ; +/* We don't use vmf->pgoff since that has the fake offset */ + page_offset = (vmf->address - vma->vm_start) >>PAGE_SHIFT ; - page = shmem->pages[vmf->pgoff]; +mutex_lock (&shmem->pages_lock); + +if (page_offset >= num_pages || +WARN_ON_ONCE (!shmem->pages) || + shmem->madv <0 ) { + ret =VM_FAULT_SIGBUS ; + }else { + page = shmem->pages[page_offset]; + + ret =vmf_insert_page (vma, vmf->address, page); + } -return vmf_insert_page (vma, vmf->address, page); +mutex_unlock (&shmem->pages_lock); + +return ret; }static void drm_gem_shmem_vm_open (struct vm_area_struct *vma)
@@ -549,9 +563,6 @@ int drm_gem_shmem_mmap(struct file *filp, struct vm_area_struct *vma) vma->vm_flags &= ~VM_PFNMAP ; vma->vm_flags |=VM_MIXEDMAP ; -/* Remove the fake offset */ - vma->vm_pgoff -=drm_vma_node_start (&shmem->base.vma_node); -return 0 ; }EXPORT_SYMBOL_GPL (drm_gem_shmem_mmap);
drivers/gpu/drm/drm_ioc32.c +11 -0
@@ -99,6 +99,8 @@ static int compat_drm_version(struct file *file, unsigned int cmd,if (copy_from_user (&v32, (void __user *)arg,sizeof (v32)))return -EFAULT ; +memset (&v,0 ,sizeof (v)); + v = (struct drm_version ) { .name_len = v32.name_len, .name =compat_ptr (v32.name),
@@ -137,6 +139,9 @@ static int compat_drm_getunique(struct file *file, unsigned int cmd,if (copy_from_user (&uq32, (void __user *)arg,sizeof (uq32)))return -EFAULT ; + +memset (&uq,0 ,sizeof (uq)); + uq = (struct drm_unique ){ .unique_len = uq32.unique_len, .unique =compat_ptr (uq32.unique),
@@ -265,6 +270,8 @@ static int compat_drm_getclient(struct file *file, unsigned int cmd,if (copy_from_user (&c32, argp,sizeof (c32)))return -EFAULT ; +memset (&client,0 ,sizeof (client)); + client.idx = c32.idx; err =drm_ioctl_kernel (file, drm_getclient, &client,0 );
@@ -850,6 +857,8 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd,if (copy_from_user (&req32, argp,sizeof (req32)))return -EFAULT ; +memset (&req,0 ,sizeof (req)); + req.request.type = req32.request.type; req.request.sequence = req32.request.sequence; req.request.signal = req32.request.signal;
@@ -887,6 +896,8 @@ static int compat_drm_mode_addfb2(struct file *file, unsigned int cmd,struct drm_mode_fb_cmd2 req64;int err; +memset (&req64,0 ,sizeof (req64)); +if (copy_from_user (&req64, argp, offsetof(drm_mode_fb_cmd232_t , modifier)))return -EFAULT ;
drivers/gpu/drm/meson/meson_drv.c +11 -0
@@ -420,6 +420,16 @@ static int meson_probe_remote(struct platform_device *pdev,return count; } +static void meson_drv_shutdown (struct platform_device *pdev) +{ +struct meson_drm *priv =dev_get_drvdata (&pdev->dev); +struct drm_device *drm = priv->drm; + +DRM_DEBUG_DRIVER ("\n" ); +drm_kms_helper_poll_fini (drm); +drm_atomic_helper_shutdown (drm); +} +static int meson_drv_probe (struct platform_device *pdev) {struct component_match *match =NULL ;
@@ -469,6 +479,7 @@ MODULE_DEVICE_TABLE(of, dt_match);static struct platform_driver meson_drm_platform_driver = { .probe = meson_drv_probe, + .shutdown = meson_drv_shutdown, .driver = { .name ="meson-drm" , .of_match_table = dt_match,
drivers/gpu/drm/qxl/qxl_display.c +1 -0
@@ -325,6 +325,7 @@ static void qxl_crtc_update_monitors_config(struct drm_crtc *crtc, head.id = i; head.flags =0 ; + head.surface_id =0 ; oldcount = qdev->monitors_config->count;if (crtc->state->active) {struct drm_display_mode *mode = &crtc->mode;
drivers/hid/hid-logitech-dj.c +6 -1
@@ -995,7 +995,12 @@ static void logi_hidpp_recv_queue_notif(struct hid_device *hdev, workitem.reports_supported |=STD_KEYBOARD ;break ;case 0x0d : - device_type ="eQUAD Lightspeed 1_1" ; + device_type ="eQUAD Lightspeed 1.1" ; +logi_hidpp_dev_conn_notif_equad (hdev, hidpp_report, &workitem); + workitem.reports_supported |=STD_KEYBOARD ; +break ; +case 0x0f : + device_type ="eQUAD Lightspeed 1.2" ;logi_hidpp_dev_conn_notif_equad (hdev, hidpp_report, &workitem); workitem.reports_supported |=STD_KEYBOARD ;break ;
drivers/i2c/busses/i2c-rcar.c +5 -8
@@ -89,7 +89,6 @@#define RCAR_BUS_PHASE_START (MDBS | MIE | ESG)#define RCAR_BUS_PHASE_DATA (MDBS | MIE) -#define RCAR_BUS_MASK_DATA (~(ESG | FSB) & 0xFF)#define RCAR_BUS_PHASE_STOP (MDBS | MIE | FSB)#define RCAR_IRQ_SEND (MNR | MAL | MST | MAT | MDE)
@@ -117,6 +116,7 @@ enum rcar_i2c_type { };struct rcar_i2c_priv { +u32 flags;void __iomem *io;struct i2c_adapter adap;struct i2c_msg *msg;
@@ -127,7 +127,6 @@ struct rcar_i2c_priv {int pos;u32 icccr; -u32 flags;u8 recovery_icmcr;/* protected by adapter lock */ enum rcar_i2c_type devtype;struct i2c_client *slave;
@@ -616,7 +615,7 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)/* * This driver has a lock-free design because there are IP cores (at least * R-Car Gen2) which have an inherent race condition in their hardware design. -* There, we need to clear RCAR_BUS_MASK_DATA bits as soon as possible after +* There, we need to switch to RCAR_BUS_PHASE_DATA as soon as possible after * the interrupt was generated, otherwise an unwanted repeated message gets * generated. It turned out that taking a spinlock at the beginning of the ISR * was already causing repeated messages. Thus, this driver was converted to
@@ -625,13 +624,11 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)static irqreturn_t rcar_i2c_irq (int irq,void *ptr) {struct rcar_i2c_priv *priv = ptr; -u32 msr, val; +u32 msr;/* Clear START or STOP immediately, except for REPSTART after read */ -if (likely (!(priv->flags &ID_P_REP_AFTER_RD ))) { - val =rcar_i2c_read (priv,ICMCR ); -rcar_i2c_write (priv,ICMCR , val &RCAR_BUS_MASK_DATA ); - } +if (likely (!(priv->flags &ID_P_REP_AFTER_RD ))) +rcar_i2c_write (priv,ICMCR ,RCAR_BUS_PHASE_DATA ); msr =rcar_i2c_read (priv,ICMSR );
drivers/input/keyboard/applespi.c +15 -6
@@ -48,6 +48,7 @@#include <linux/efi.h> #include <linux/input.h> #include <linux/input/mt.h> +#include <linux/ktime.h> #include <linux/leds.h> #include <linux/module.h> #include <linux/spinlock.h>
@@ -400,7 +401,7 @@ struct applespi_data {unsigned int cmd_msg_cntr;/* lock to protect the above parameters and flags below */ spinlock_t cmd_msg_lock; -bool cmd_msg_queued; +ktime_t cmd_msg_queued;enum applespi_evt_type cmd_evt_type;struct led_classdev backlight_info;
@@ -716,7 +717,7 @@ static void applespi_msg_complete(struct applespi_data *applespi,wake_up_all (&applespi->drain_complete);if (is_write_msg) { - applespi->cmd_msg_queued = false; + applespi->cmd_msg_queued =0 ;applespi_send_cmd_msg (applespi); }
@@ -758,8 +759,16 @@ static int applespi_send_cmd_msg(struct applespi_data *applespi)return 0 ;/* check whether send is in progress */ -if (applespi->cmd_msg_queued) -return 0 ; +if (applespi->cmd_msg_queued) { +if (ktime_ms_delta (ktime_get (), applespi->cmd_msg_queued) <1000 ) +return 0 ; + +dev_warn (&applespi->spi->dev,"Command %d timed out\n" , + applespi->cmd_evt_type); + + applespi->cmd_msg_queued =0 ; + applespi->write_active = false; + }/* set up packet */ memset (packet,0 ,APPLESPI_PACKET_SIZE );
@@ -856,7 +865,7 @@ static int applespi_send_cmd_msg(struct applespi_data *applespi)return sts; } - applespi->cmd_msg_queued = true; + applespi->cmd_msg_queued =ktime_get_coarse (); applespi->write_active = true;return 0 ;
@@ -1908,7 +1917,7 @@ static int __maybe_unused applespi_resume(struct device *dev) applespi->drain = false; applespi->have_cl_led_on = false; applespi->have_bl_level =0 ; - applespi->cmd_msg_queued = false; + applespi->cmd_msg_queued =0 ; applespi->read_active = false; applespi->write_active = false;
drivers/iommu/amd_iommu_init.c +34 -11
76 lines not on this page · raw message
drivers/media/platform/vsp1/vsp1_drm.c +3 -3
@@ -245,7 +245,7 @@ static int vsp1_du_pipeline_setup_brx(struct vsp1_device *vsp1, brx = &vsp1->bru->entity; else if (pipe->brx && !drm_pipe->force_brx_release) brx = pipe->brx; - else if (!vsp1->bru->entity.pipe) + else if (vsp1_feature(vsp1, VSP1_HAS_BRU) && !vsp1->bru->entity.pipe) brx = &vsp1->bru->entity; else brx = &vsp1->brs->entity;
@@ -462,9 +462,9 @@ static int vsp1_du_pipeline_setup_inputs(struct vsp1_device *vsp1,* make sure it is present in the pipeline's list of entities if it * wasn't already. */ -if (!use_uif) { +if (drm_pipe->uif && !use_uif) { drm_pipe->uif->pipe =NULL ; - }else if (!drm_pipe->uif->pipe) { + }else if (drm_pipe->uif && !drm_pipe->uif->pipe) { drm_pipe->uif->pipe = pipe;list_add_tail (&drm_pipe->uif->list_pipe, &pipe->entities); }
drivers/media/rc/Makefile +1 -0
@@ -5,6 +5,7 @@ obj-y += keymaps/ obj-$(CONFIG_RC_CORE) += rc-core.o rc-core-y := rc-main.o rc-ir-raw.o rc-core-$(CONFIG_LIRC) += lirc_dev.o +rc-core-$(CONFIG_MEDIA_CEC_RC) += keymaps/rc-cec.o rc-core-$(CONFIG_BPF_LIRC_MODE2) += bpf-lirc.o obj-$(CONFIG_IR_NEC_DECODER) += ir-nec-decoder.o obj-$(CONFIG_IR_RC5_DECODER) += ir-rc5-decoder.o
drivers/media/rc/keymaps/Makefile +0 -1
@@ -20,7 +20,6 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \ rc-behold.o \ rc-behold-columbus.o \ rc-budget-ci-old.o \ - rc-cec.o \ rc-cinergy-1400.o \ rc-cinergy.o \ rc-d680-dmb.o \
drivers/media/rc/keymaps/rc-cec.c +11 -17
@@ -1,5 +1,15 @@// SPDX-License-Identifier: GPL-2.0-or-later /* Keytable for the CEC remote control +* +* This keymap is unusual in that it can't be built as a module, +* instead it is registered directly in rc-main.c if CONFIG_MEDIA_CEC_RC +* is set. This is because it can be called from drm_dp_cec_set_edid() via +* cec_register_adapter() in an asynchronous context, and it is not +* allowed to use request_module() to load rc-cec.ko in that case. +* +* Since this keymap is only used if CONFIG_MEDIA_CEC_RC is set, we +* just compile this keymap into the rc-core module and never as a +* separate module. * * Copyright (c) 2015 by Kamil Debski */
@@ -152,7 +162,7 @@ static struct rc_map_table cec[] = {/* 0x77-0xff: Reserved */ }; -static struct rc_map_list cec_map = { +struct rc_map_list cec_map = { .map = { .scan = cec, .size =ARRAY_SIZE (cec),
@@ -160,19 +170,3 @@ static struct rc_map_list cec_map = { .name = RC_MAP_CEC, } }; - -static int __init init_rc_map_cec (void ) -{ -return rc_map_register (&cec_map); -} - -static void __exit exit_rc_map_cec(void) -{ -rc_map_unregister (&cec_map); -} - -module_init (init_rc_map_cec); -module_exit (exit_rc_map_cec); - -MODULE_LICENSE ("GPL" ); -MODULE_AUTHOR ("Kamil Debski" );
drivers/media/rc/rc-main.c +6 -0
@@ -2033,6 +2033,9 @@ static int __init rc_core_init(void)led_trigger_register_simple ("rc-feedback" , &led_feedback);rc_map_register (&empty_map); +#ifdef CONFIG_MEDIA_CEC_RC +rc_map_register (&cec_map); +#endif return 0 ; }
@@ -2042,6 +2045,9 @@ static void __exit rc_core_exit(void)lirc_dev_exit ();class_unregister (&rc_class);led_trigger_unregister_simple (led_feedback); +#ifdef CONFIG_MEDIA_CEC_RC +rc_map_unregister (&cec_map); +#endif rc_map_unregister (&empty_map); }
drivers/media/usb/usbtv/usbtv-audio.c +1 -1
@@ -399,7 +399,7 @@ void usbtv_audio_free(struct usbtv *usbtv)cancel_work_sync (&usbtv->snd_trigger);if (usbtv->snd && usbtv->udev) { -snd_card_free (usbtv->snd); +snd_card_free_when_closed (usbtv->snd); usbtv->snd =NULL ; } }
drivers/misc/fastrpc.c +5 -0
@@ -924,6 +924,11 @@ static int fastrpc_internal_invoke(struct fastrpc_user *fl, u32 kernel,if (!fl->cctx->rpdev)return -EPIPE ; +if (handle ==FASTRPC_INIT_HANDLE && !kernel) { +dev_warn_ratelimited (fl->sctx->dev,"user app trying to send a kernel RPC message (%d)\n" , handle); +return -EPERM ; + } + ctx =fastrpc_context_alloc (fl, kernel, sc, args);if (IS_ERR (ctx))return PTR_ERR (ctx);
drivers/misc/pvpanic.c +1 -0
@@ -166,6 +166,7 @@ static const struct of_device_id pvpanic_mmio_match[] = { { .compatible = "qemu,pvpanic-mmio", }, {} }; +MODULE_DEVICE_TABLE (of, pvpanic_mmio_match);static struct platform_driver pvpanic_mmio_driver = { .driver = {
drivers/mmc/core/bus.c +5 -6
@@ -373,11 +373,6 @@ void mmc_remove_card(struct mmc_card *card)mmc_remove_card_debugfs (card);#endif -if (host->cqe_enabled) { - host->cqe_ops->cqe_disable (host); - host->cqe_enabled = false; - } -if (mmc_card_present (card)) {if (mmc_host_is_spi (card->host)) { pr_info("%s: SPI card removed\n",
@@ -390,6 +385,10 @@ void mmc_remove_card(struct mmc_card *card)of_node_put (card->dev.of_node); } +if (host->cqe_enabled) { + host->cqe_ops->cqe_disable (host); + host->cqe_enabled = false; + } +put_device (&card->dev); } -
drivers/mmc/core/mmc.c +11 -4
@@ -423,10 +423,6 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)/* EXT_CSD value is in units of 10ms, but we store in ms */ card->ext_csd.part_time =10 * ext_csd[EXT_CSD_PART_SWITCH_TIME ]; -/* Some eMMC set the value too low so set a minimum */ -if (card->ext_csd.part_time && - card->ext_csd.part_time <MMC_MIN_PART_SWITCH_TIME ) - card->ext_csd.part_time =MMC_MIN_PART_SWITCH_TIME ;/* Sleep / awake timeout in 100ns units */ if (sa_shift >0 && sa_shift <=0x17 )
@@ -616,6 +612,17 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd) card->ext_csd.data_sector_size =512 ; } +/* +* GENERIC_CMD6_TIME is to be used "unless a specific timeout is defined +* when accessing a specific field", so use it here if there is no +* PARTITION_SWITCH_TIME. +*/ +if (!card->ext_csd.part_time) + card->ext_csd.part_time = card->ext_csd.generic_cmd6_time; +/* Some eMMC set the value too low so set a minimum */ +if (card->ext_csd.part_time <MMC_MIN_PART_SWITCH_TIME ) + card->ext_csd.part_time =MMC_MIN_PART_SWITCH_TIME ; +/* eMMC v5 or later */ if (card->ext_csd.rev >=7 ) { memcpy(card->ext_csd.fwrev, &ext_csd[EXT_CSD_FIRMWARE_VERSION],
drivers/mmc/host/mtk-sd.c +10 -8
@@ -1020,13 +1020,13 @@ static void msdc_track_cmd_data(struct msdc_host *host,static void msdc_request_done (struct msdc_host *host,struct mmc_request *mrq) {unsigned long flags; -bool ret; - ret =cancel_delayed_work (&host->req_timeout); -if (!ret) { -/* delay work already running */ -return ; - } +/* +* No need check the return value of cancel_delayed_work, as only ONE +* path will go here! +*/ +cancel_delayed_work (&host->req_timeout); +spin_lock_irqsave (&host->lock, flags); host->mrq =NULL ;spin_unlock_irqrestore (&host->lock, flags);
@@ -1046,7 +1046,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,bool done = false;bool sbc_error;unsigned long flags; -u32 *rsp = cmd->resp; +u32 *rsp; if (mrq->sbc && cmd == mrq->cmd && (events & (MSDC_INT_ACMDRDY | MSDC_INT_ACMDCRCERR
@@ -1067,6 +1067,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,if (done)return true; + rsp = cmd->resp;sdr_clr_bits (host->base +MSDC_INTEN , cmd_ints_mask);
@@ -1254,7 +1255,7 @@ static void msdc_data_xfer_next(struct msdc_host *host,static bool msdc_data_xfer_done (struct msdc_host *host,u32 events,struct mmc_request *mrq,struct mmc_data *data) { -struct mmc_command *stop = data->stop; +struct mmc_command *stop;unsigned long flags;bool done; unsigned int check_data = events &
@@ -1270,6 +1271,7 @@ static bool msdc_data_xfer_done(struct msdc_host *host, u32 events,if (done)return true; + stop = data->stop;if (check_data || (stop && stop->error)) { dev_dbg(host->dev, "DMA status: 0x%8X\n",
drivers/mmc/host/mxs-mmc.c +1 -1
@@ -644,7 +644,7 @@ static int mxs_mmc_probe(struct platform_device *pdev) ret =mmc_of_parse (mmc);if (ret) - goto out_clk_disable; + goto out_free_dma; mmc->ocr_avail =MMC_VDD_32_33 |MMC_VDD_33_34 ;
drivers/net/can/flexcan.c +15 -9
@@ -548,7 +548,7 @@ static int flexcan_chip_freeze(struct flexcan_priv *priv)u32 reg; reg = priv->read (®s->mcr); - reg |=FLEXCAN_MCR_HALT ; + reg |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT ; priv->write (reg, ®s->mcr);while (timeout-- && !(priv->read (®s->mcr) &FLEXCAN_MCR_FRZ_ACK ))
@@ -1057,10 +1057,13 @@ static int flexcan_chip_start(struct net_device *dev)flexcan_set_bittiming (dev); +/* set freeze, halt */ + err =flexcan_chip_freeze (priv); +if (err) + goto out_chip_disable; +/* MCR * -* enable freeze -* halt now * only supervisor access * enable warning int * enable individual RX masking
@@ -1069,9 +1072,8 @@ static int flexcan_chip_start(struct net_device *dev)*/ reg_mcr = priv->read (®s->mcr); reg_mcr &= ~FLEXCAN_MCR_MAXMB (0xff ); - reg_mcr |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT |FLEXCAN_MCR_SUPV | -FLEXCAN_MCR_WRN_EN |FLEXCAN_MCR_IRMQ |FLEXCAN_MCR_IDAM_C | -FLEXCAN_MCR_MAXMB (priv->tx_mb_idx); + reg_mcr |=FLEXCAN_MCR_SUPV |FLEXCAN_MCR_WRN_EN |FLEXCAN_MCR_IRMQ | +FLEXCAN_MCR_IDAM_C |FLEXCAN_MCR_MAXMB (priv->tx_mb_idx);/* MCR *
@@ -1432,10 +1434,14 @@ static int register_flexcandev(struct net_device *dev)if (err) goto out_chip_disable; -/* set freeze, halt and activate FIFO, restrict register access */ +/* set freeze, halt */ + err =flexcan_chip_freeze (priv); +if (err) + goto out_chip_disable; + +/* activate FIFO, restrict register access */ reg = priv->read (®s->mcr); - reg |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT | -FLEXCAN_MCR_FEN |FLEXCAN_MCR_SUPV ; + reg |=FLEXCAN_MCR_FEN |FLEXCAN_MCR_SUPV ; priv->write (reg, ®s->mcr);/* Currently we only support newer versions of this core
drivers/net/can/m_can/tcan4x5x.c +3 -3
@@ -325,14 +325,14 @@ static int tcan4x5x_init(struct m_can_classdev *cdev)if (ret)return ret; +/* Zero out the MCAN buffers */ +m_can_init_ram (cdev); + ret =regmap_update_bits (tcan4x5x->regmap,TCAN4X5X_CONFIG ,TCAN4X5X_MODE_SEL_MASK ,TCAN4X5X_MODE_NORMAL );if (ret)return ret; -/* Zero out the MCAN buffers */ -m_can_init_ram (cdev); -return ret; }
drivers/net/ethernet/atheros/alx/main.c +5 -2
@@ -1897,13 +1897,16 @@ static int alx_resume(struct device *dev)if (!netif_running (alx->dev))return 0 ; -netif_device_attach (alx->dev);rtnl_lock (); err =__alx_open (alx, true);rtnl_unlock (); +if (err) +return err; -return err; +netif_device_attach (alx->dev); + +return 0 ; } static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume);
drivers/net/ethernet/broadcom/bnxt/bnxt.c +12 -2
@@ -7925,10 +7925,18 @@ static void bnxt_setup_inta(struct bnxt *bp) bp->irq_tbl[0 ].handler = bnxt_inta; } +static int bnxt_init_int_mode (struct bnxt *bp); +static int bnxt_setup_int_mode (struct bnxt *bp) {int rc; +if (!bp->irq_tbl) { + rc =bnxt_init_int_mode (bp); +if (rc || !bp->irq_tbl) +return rc ?: -ENODEV ; + } +if (bp->flags &BNXT_FLAG_USING_MSIX )bnxt_setup_msix (bp);else
@@ -8113,7 +8121,7 @@ static int bnxt_init_inta(struct bnxt *bp)static int bnxt_init_int_mode (struct bnxt *bp) { -int rc =0 ; +int rc = -ENODEV ;if (bp->flags &BNXT_FLAG_MSIX_CAP ) rc =bnxt_init_msix (bp);
@@ -8748,7 +8756,8 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up) {struct hwrm_func_drv_if_change_output *resp = bp->hwrm_cmd_resp_addr;struct hwrm_func_drv_if_change_input req = {0 }; -bool resc_reinit = false, fw_reset = false; +bool fw_reset = !bp->irq_tbl; +bool resc_reinit = false;u32 flags =0 ;int rc;
@@ -8776,6 +8785,7 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)if (test_bit (BNXT_STATE_IN_FW_RESET , &bp->state) && !fw_reset) {netdev_err (bp->dev,"RESET_DONE not set during FW reset.\n" ); +set_bit (BNXT_STATE_ABORT_ERR , &bp->state);return -ENODEV ; }if (resc_reinit || fw_reset) {
drivers/net/ethernet/davicom/dm9000.c +17 -4
@@ -134,6 +134,8 @@ struct board_info {u32 wake_state;int ip_summed; + +struct regulator *power_supply; };/* debug code */
@@ -1454,7 +1456,7 @@ dm9000_probe(struct platform_device *pdev)if (ret) {dev_err (dev,"failed to request reset gpio %d: %d\n" , reset_gpios, ret); -return -ENODEV ; + goto out_regulator_disable; }/* According to manual PWRST# Low Period Min 1ms */
@@ -1466,8 +1468,10 @@ dm9000_probe(struct platform_device *pdev)if (!pdata) { pdata =dm9000_parse_dt (&pdev->dev); -if (IS_ERR (pdata)) -return PTR_ERR (pdata); +if (IS_ERR (pdata)) { + ret =PTR_ERR (pdata); + goto out_regulator_disable; + } }/* Init network device */
@@ -1484,6 +1488,8 @@ dm9000_probe(struct platform_device *pdev) db->dev = &pdev->dev; db->ndev = ndev; +if (!IS_ERR (power)) + db->power_supply = power;spin_lock_init (&db->lock);mutex_init (&db->addr_lock);
@@ -1708,6 +1714,10 @@ dm9000_probe(struct platform_device *pdev)dm9000_release_board (pdev, db);free_netdev (ndev); +out_regulator_disable: +if (!IS_ERR (power)) +regulator_disable (power); +return ret; }
@@ -1765,10 +1775,13 @@ static int dm9000_drv_remove(struct platform_device *pdev) {struct net_device *ndev =platform_get_drvdata (pdev); +struct board_info *dm =to_dm9000_board (ndev);unregister_netdev (ndev); -dm9000_release_board (pdev,netdev_priv (ndev)); +dm9000_release_board (pdev, dm);free_netdev (ndev);/* free device structure */ +if (dm->power_supply) +regulator_disable (dm->power_supply);dev_dbg (&pdev->dev,"released and freed device\n" );return 0 ;
drivers/net/ethernet/freescale/enetc/enetc.c +7 -12
@@ -942,7 +942,7 @@ static void enetc_free_rxtx_rings(struct enetc_ndev_priv *priv)enetc_free_tx_ring (priv->tx_ring[i]); } -static int enetc_alloc_cbdr (struct device *dev,struct enetc_cbdr *cbdr) +int enetc_alloc_cbdr (struct device *dev,struct enetc_cbdr *cbdr) {int size = cbdr->bd_count *sizeof (struct enetc_cbd );
@@ -963,7 +963,7 @@ static int enetc_alloc_cbdr(struct device *dev, struct enetc_cbdr *cbdr)return 0 ; } -static void enetc_free_cbdr (struct device *dev,struct enetc_cbdr *cbdr) +void enetc_free_cbdr (struct device *dev,struct enetc_cbdr *cbdr) {int size = cbdr->bd_count *sizeof (struct enetc_cbd );
@@ -971,7 +971,7 @@ static void enetc_free_cbdr(struct device *dev, struct enetc_cbdr *cbdr) cbdr->bd_base =NULL ; } -static void enetc_setup_cbdr (struct enetc_hw *hw,struct enetc_cbdr *cbdr) +void enetc_setup_cbdr (struct enetc_hw *hw,struct enetc_cbdr *cbdr) {/* set CBDR cache attributes */ enetc_wr(hw, ENETC_SICAR2,
@@ -991,7 +991,7 @@ static void enetc_setup_cbdr(struct enetc_hw *hw, struct enetc_cbdr *cbdr) cbdr->cir = hw->reg +ENETC_SICBDRCIR ; } -static void enetc_clear_cbdr (struct enetc_hw *hw) +void enetc_clear_cbdr (struct enetc_hw *hw) {enetc_wr (hw,ENETC_SICBDRMR ,0 ); }
@@ -1016,13 +1016,12 @@ static int enetc_setup_default_rss_table(struct enetc_si *si, int num_groups)return 0 ; } -static int enetc_configure_si (struct enetc_ndev_priv *priv) +int enetc_configure_si (struct enetc_ndev_priv *priv) {struct enetc_si *si = priv->si;struct enetc_hw *hw = &si->hw;int err; -enetc_setup_cbdr (hw, &si->cbd_ring);/* set SI cache attributes */ enetc_wr (hw,ENETC_SICAR0 ,ENETC_SICAR_RD_COHERENT |ENETC_SICAR_WR_COHERENT );
@@ -1068,6 +1067,8 @@ int enetc_alloc_si_resources(struct enetc_ndev_priv *priv)if (err)return err; +enetc_setup_cbdr (&si->hw, &si->cbd_ring); + priv->cls_rules =kcalloc (si->num_fs_entries,sizeof (*priv->cls_rules),GFP_KERNEL );if (!priv->cls_rules) {
@@ -1075,14 +1076,8 @@ int enetc_alloc_si_resources(struct enetc_ndev_priv *priv) goto err_alloc_cls; } - err =enetc_configure_si (priv); -if (err) - goto err_config_si; -return 0 ; -err_config_si: -kfree (priv->cls_rules); err_alloc_cls:enetc_clear_cbdr (&si->hw);enetc_free_cbdr (priv->dev, &si->cbd_ring);
drivers/net/ethernet/freescale/enetc/enetc.h +5 -0
@@ -221,6 +221,7 @@ void enetc_get_si_caps(struct enetc_si *si);void enetc_init_si_rings_params (struct enetc_ndev_priv *priv);int enetc_alloc_si_resources (struct enetc_ndev_priv *priv);void enetc_free_si_resources (struct enetc_ndev_priv *priv); +int enetc_configure_si (struct enetc_ndev_priv *priv);int enetc_open (struct net_device *ndev);int enetc_close (struct net_device *ndev);
@@ -236,6 +237,10 @@ int enetc_setup_tc(struct net_device *ndev, enum tc_setup_type type,void enetc_set_ethtool_ops (struct net_device *ndev);/* control buffer descriptor ring (CBDR) */ +int enetc_alloc_cbdr (struct device *dev,struct enetc_cbdr *cbdr); +void enetc_free_cbdr (struct device *dev,struct enetc_cbdr *cbdr); +void enetc_setup_cbdr (struct enetc_hw *hw,struct enetc_cbdr *cbdr); +void enetc_clear_cbdr (struct enetc_hw *hw);int enetc_set_mac_flt_entry (struct enetc_si *si,int index,char *mac_addr,int si_map);int enetc_clear_mac_flt_entry (struct enetc_si *si,int index);
drivers/net/ethernet/freescale/enetc/enetc_pf.c +35 -5
@@ -854,6 +854,26 @@ static int enetc_init_port_rss_memory(struct enetc_si *si)return err; } +static void enetc_init_unused_port (struct enetc_si *si) +{ +struct device *dev = &si->pdev->dev; +struct enetc_hw *hw = &si->hw; +int err; + + si->cbd_ring.bd_count =ENETC_CBDR_DEFAULT_SIZE ; + err =enetc_alloc_cbdr (dev, &si->cbd_ring); +if (err) +return ; + +enetc_setup_cbdr (hw, &si->cbd_ring); + +enetc_init_port_rfs_memory (si); +enetc_init_port_rss_memory (si); + +enetc_clear_cbdr (hw); +enetc_free_cbdr (dev, &si->cbd_ring); +} +static int enetc_pf_probe (struct pci_dev *pdev,const struct pci_device_id *ent) {
@@ -863,11 +883,6 @@ static int enetc_pf_probe(struct pci_dev *pdev,struct enetc_pf *pf;int err; -if (pdev->dev.of_node && !of_device_is_available (pdev->dev.of_node)) { -dev_info (&pdev->dev,"device is disabled, skipping\n" ); -return -ENODEV ; - } - err =enetc_pci_probe (pdev,KBUILD_MODNAME ,sizeof (*pf));if (err) {dev_err (&pdev->dev,"PCI probing failed\n" );
@@ -881,6 +896,13 @@ static int enetc_pf_probe(struct pci_dev *pdev, goto err_map_pf_space; } +if (pdev->dev.of_node && !of_device_is_available (pdev->dev.of_node)) { +enetc_init_unused_port (si); +dev_info (&pdev->dev,"device is disabled, skipping\n" ); + err = -ENODEV ; + goto err_device_disabled; + } + pf =enetc_si_priv (si); pf->si = si; pf->total_vfs =pci_sriov_get_totalvfs (pdev);
@@ -920,6 +942,12 @@ static int enetc_pf_probe(struct pci_dev *pdev, goto err_init_port_rss; } + err =enetc_configure_si (priv); +if (err) { +dev_err (&pdev->dev,"Failed to configure SI\n" ); + goto err_config_si; + } + err =enetc_alloc_msix (priv);if (err) {dev_err (&pdev->dev,"MSIX alloc failed\n" );
@@ -945,6 +973,7 @@ static int enetc_pf_probe(struct pci_dev *pdev,enetc_mdio_remove (pf);enetc_of_put_phy (priv);enetc_free_msix (priv); +err_config_si: err_init_port_rss: err_init_port_rfs: err_alloc_msix:
@@ -953,6 +982,7 @@ static int enetc_pf_probe(struct pci_dev *pdev, si->ndev =NULL ;free_netdev (ndev); err_alloc_netdev: +err_device_disabled: err_map_pf_space:enetc_pci_remove (pdev);
drivers/net/ethernet/freescale/enetc/enetc_vf.c +7 -0
@@ -189,6 +189,12 @@ static int enetc_vf_probe(struct pci_dev *pdev, goto err_alloc_si_res; } + err =enetc_configure_si (priv); +if (err) { +dev_err (&pdev->dev,"Failed to configure SI\n" ); + goto err_config_si; + } + err =enetc_alloc_msix (priv);if (err) {dev_err (&pdev->dev,"MSIX alloc failed\n" );
@@ -208,6 +214,7 @@ static int enetc_vf_probe(struct pci_dev *pdev, err_reg_netdev:enetc_free_msix (priv); +err_config_si: err_alloc_msix:enetc_free_si_resources (priv); err_alloc_si_res:
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +3 -3
@@ -1018,16 +1018,16 @@ struct hclge_fd_tcam_config_3_cmd {#define HCLGE_FD_AD_DROP_B 0#define HCLGE_FD_AD_DIRECT_QID_B 1#define HCLGE_FD_AD_QID_S 2 -#define HCLGE_FD_AD_QID_M GENMASK(12, 2) +#define HCLGE_FD_AD_QID_M GENMASK(11, 2)#define HCLGE_FD_AD_USE_COUNTER_B 12#define HCLGE_FD_AD_COUNTER_NUM_S 13#define HCLGE_FD_AD_COUNTER_NUM_M GENMASK(20, 13)#define HCLGE_FD_AD_NXT_STEP_B 20#define HCLGE_FD_AD_NXT_KEY_S 21 -#define HCLGE_FD_AD_NXT_KEY_M GENMASK(26, 21) +#define HCLGE_FD_AD_NXT_KEY_M GENMASK(25, 21)#define HCLGE_FD_AD_WR_RULE_ID_B 0#define HCLGE_FD_AD_RULE_ID_S 1 -#define HCLGE_FD_AD_RULE_ID_M GENMASK(13, 1) +#define HCLGE_FD_AD_RULE_ID_M GENMASK(12, 1)struct hclge_fd_ad_config_cmd {u8 stage;
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +3 -4
@@ -4908,9 +4908,9 @@ static bool hclge_fd_convert_tuple(u32 tuple_bit, u8 *key_x, u8 *key_y,case BIT (INNER_SRC_MAC ):for (i =0 ; i <ETH_ALEN ; i++) {calc_x (key_x[ETH_ALEN -1 - i], rule->tuples.src_mac[i], - rule->tuples.src_mac[i]); + rule->tuples_mask.src_mac[i]);calc_y (key_y[ETH_ALEN -1 - i], rule->tuples.src_mac[i], - rule->tuples.src_mac[i]); + rule->tuples_mask.src_mac[i]); }return true;
@@ -5939,8 +5939,7 @@ static int hclge_get_fd_rule_info(struct hnae3_handle *handle, fs->h_ext.vlan_tci =cpu_to_be16 (rule->tuples.vlan_tag1); fs->m_ext.vlan_tci = rule->unused_tuple &BIT (INNER_VLAN_TAG_FST ) ? -cpu_to_be16 (VLAN_VID_MASK ) : -cpu_to_be16 (rule->tuples_mask.vlan_tag1); +0 :cpu_to_be16 (rule->tuples_mask.vlan_tag1); }if (fs->flow_type &FLOW_MAC_EXT ) {
drivers/net/ethernet/ibm/ibmvnic.c +2 -3
@@ -1753,10 +1753,9 @@ static int ibmvnic_set_mac(struct net_device *netdev, void *p)if (!is_valid_ether_addr (addr->sa_data))return -EADDRNOTAVAIL ; -if (adapter->state !=VNIC_PROBED ) { -ether_addr_copy (adapter->mac_addr, addr->sa_data); +ether_addr_copy (adapter->mac_addr, addr->sa_data); +if (adapter->state !=VNIC_PROBED ) rc =__ibmvnic_set_mac (netdev, addr->sa_data); - }return rc; }
drivers/net/ethernet/intel/i40e/i40e_main.c +2 -0
@@ -15142,6 +15142,8 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)if (err) {dev_info (&pdev->dev,"setup of misc vector failed: %d\n" , err); +i40e_cloud_filter_exit (pf); +i40e_fdir_teardown (pf); goto err_vsis; } }
drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c +5 -0
@@ -575,6 +575,11 @@ static int ixgbe_ipsec_add_sa(struct xfrm_state *xs)return -EINVAL ; } +if (xs->props.mode !=XFRM_MODE_TRANSPORT ) { +netdev_err (dev,"Unsupported mode for ipsec offload\n" ); +return -EINVAL ; + } +if (ixgbe_ipsec_check_mgmt_ip (xs)) {netdev_err (dev,"IPsec IP addr clash with mgmt filters\n" );return -EINVAL ;
drivers/net/ethernet/intel/ixgbevf/ipsec.c +5 -0
@@ -272,6 +272,11 @@ static int ixgbevf_ipsec_add_sa(struct xfrm_state *xs)return -EINVAL ; } +if (xs->props.mode !=XFRM_MODE_TRANSPORT ) { +netdev_err (dev,"Unsupported mode for ipsec offload\n" ); +return -EINVAL ; + } +if (xs->xso.flags &XFRM_OFFLOAD_INBOUND ) {struct rx_sa rsa;
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +1 -1
@@ -47,7 +47,7 @@#define EN_ETHTOOL_SHORT_MASK cpu_to_be16(0xffff)#define EN_ETHTOOL_WORD_MASK cpu_to_be32(0xffffffff) -static int mlx4_en_moderation_update (struct mlx4_en_priv *priv) +int mlx4_en_moderation_update (struct mlx4_en_priv *priv) {int i, t;int err =0 ;
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +2 -0
@@ -3657,6 +3657,8 @@ int mlx4_en_reset_config(struct net_device *dev,en_err (priv,"Failed starting port\n" ); } +if (!err) + err =mlx4_en_moderation_update (priv); out:mutex_unlock (&mdev->state_lock);kfree (tmp);
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +1 -0
@@ -797,6 +797,7 @@ void mlx4_en_ptp_overflow_check(struct mlx4_en_dev *mdev);#define DEV_FEATURE_CHANGED (dev, new_features, feature) \ ((dev->features & feature) ^ (new_features & feature)) +int mlx4_en_moderation_update (struct mlx4_en_priv *priv);int mlx4_en_reset_config (struct net_device *dev,struct hwtstamp_config ts_config,netdev_features_t new_features);
drivers/net/ethernet/renesas/sh_eth.c +7 -0
@@ -610,6 +610,8 @@ static struct sh_eth_cpu_data r7s72100_data = { EESR_TDE, .fdr_value = 0x0000070f, + .trscer_err_mask = DESC_I_RINT8 | DESC_I_RINT5, + .no_psr = 1, .apr = 1, .mpr = 1,
@@ -828,6 +830,8 @@ static struct sh_eth_cpu_data r7s9210_data = { .fdr_value = 0x0000070f, + .trscer_err_mask = DESC_I_RINT8 | DESC_I_RINT5, + .apr = 1, .mpr = 1, .tpauser = 1,
@@ -1131,6 +1135,9 @@ static struct sh_eth_cpu_data sh771x_data = {EESIPR_CEEFIP |EESIPR_CELFIP |EESIPR_RRFIP |EESIPR_RTLFIP |EESIPR_RTSFIP | EESIPR_PREIP | EESIPR_CERFIP, + + .trscer_err_mask = DESC_I_RINT8, + .tsu = 1, .dual_port = 1, };
drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +18 -1
@@ -116,6 +116,23 @@ static void dwmac4_dma_init_channel(void __iomem *ioaddr, ioaddr + DMA_CHAN_INTR_ENA(chan)); } +static void dwmac410_dma_init_channel (void __iomem *ioaddr, +struct stmmac_dma_cfg *dma_cfg,u32 chan) +{ +u32 value; + +/* common channel control register config */ + value =readl (ioaddr +DMA_CHAN_CONTROL (chan)); +if (dma_cfg->pblx8) + value = value |DMA_BUS_MODE_PBL ; + +writel (value, ioaddr +DMA_CHAN_CONTROL (chan)); + +/* Mask interrupts by writing to CSR7 */ +writel (DMA_CHAN_INTR_DEFAULT_MASK_4_10 , + ioaddr +DMA_CHAN_INTR_ENA (chan)); +} +static void dwmac4_dma_init (void __iomem *ioaddr,struct stmmac_dma_cfg *dma_cfg,int atds) {
@@ -462,7 +479,7 @@ const struct stmmac_dma_ops dwmac4_dma_ops = {const struct stmmac_dma_ops dwmac410_dma_ops = { .reset = dwmac4_dma_reset, .init = dwmac4_dma_init, - .init_chan = dwmac4_dma_init_channel, + .init_chan = dwmac410_dma_init_channel, .init_rx_chan = dwmac4_dma_init_rx_chan, .init_tx_chan = dwmac4_dma_init_tx_chan, .axi = dwmac4_dma_axi,
drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c +0 -4
@@ -60,10 +60,6 @@ void dwmac4_dma_stop_tx(void __iomem *ioaddr, u32 chan) value &= ~DMA_CONTROL_ST ;writel (value, ioaddr +DMA_CHAN_TX_CONTROL (chan)); - - value =readl (ioaddr +GMAC_CONFIG ); - value &= ~GMAC_CONFIG_TE ; -writel (value, ioaddr +GMAC_CONFIG ); }void dwmac4_dma_start_rx (void __iomem *ioaddr,u32 chan)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +2 -0
@@ -4821,6 +4821,8 @@ static void stmmac_reset_queues_param(struct stmmac_priv *priv) tx_q->cur_tx =0 ; tx_q->dirty_tx =0 ; tx_q->mss =0 ; + +netdev_tx_reset_queue (netdev_get_tx_queue (priv->dev, queue)); } }
drivers/net/netdevsim/netdev.c +1 -0
@@ -292,6 +292,7 @@ nsim_create(struct nsim_dev *nsim_dev, struct nsim_dev_port *nsim_dev_port) ns =netdev_priv (dev); ns->netdev = dev; +u64_stats_init (&ns->syncp); ns->nsim_dev = nsim_dev; ns->nsim_dev_port = nsim_dev_port; ns->nsim_bus_dev = nsim_dev->nsim_bus_dev;
drivers/net/phy/phy.c +4 -3
@@ -345,15 +345,16 @@ int phy_ethtool_ksettings_set(struct phy_device *phydev, phydev->autoneg = autoneg; - phydev->speed = speed; +if (autoneg ==AUTONEG_DISABLE ) { + phydev->speed = speed; + phydev->duplex = duplex; + }linkmode_copy (phydev->advertising, advertising);linkmode_mod_bit (ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->advertising, autoneg ==AUTONEG_ENABLE ); - phydev->duplex = duplex; - phydev->mdix_ctrl = cmd->base.eth_tp_mdix_ctrl;/* Restart the PHY */
drivers/net/usb/qmi_wwan.c +0 -14
@@ -441,13 +441,6 @@ static ssize_t add_mux_store(struct device *d, struct device_attribute *attr, c goto err; } -/* we don't want to modify a running netdev */ -if (netif_running (dev->net)) { -netdev_err (dev->net,"Cannot change a running device\n" ); - ret = -EBUSY ; - goto err; - } - ret =qmimux_register_device (dev->net, mux_id);if (!ret) { info->flags |=QMI_WWAN_FLAG_MUX ;
@@ -477,13 +470,6 @@ static ssize_t del_mux_store(struct device *d, struct device_attribute *attr, cif (!rtnl_trylock ())return restart_syscall (); -/* we don't want to modify a running netdev */ -if (netif_running (dev->net)) { -netdev_err (dev->net,"Cannot change a running device\n" ); - ret = -EBUSY ; - goto err; - } - del_dev =qmimux_find_dev (dev, mux_id);if (!del_dev) {netdev_err (dev->net,"mux_id not present\n" );
drivers/net/wan/lapbether.c +0 -3
@@ -283,7 +283,6 @@ static int lapbeth_open(struct net_device *dev)return -ENODEV ; } -netif_start_queue (dev);return 0 ; }
@@ -291,8 +290,6 @@ static int lapbeth_close(struct net_device *dev) {int err; -netif_stop_queue (dev); -if ((err =lapb_unregister (dev)) !=LAPB_OK )pr_err ("lapb_unregister error: %d\n" , err);
drivers/net/wireless/ath/ath9k/ath9k.h +2 -1
@@ -177,7 +177,8 @@ struct ath_frame_info {s8 txq;u8 keyix;u8 rtscts_rate; - u8 retries : 7; + u8 retries : 6; + u8 dyn_smps : 1; u8 baw_tracked : 1;u8 tx_power; enum ath9k_key_type keytype:2;
drivers/net/wireless/ath/ath9k/xmit.c +6 -0
@@ -1271,6 +1271,11 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, is_40, is_sgi, is_sp);if (rix <8 && (tx_info->flags &IEEE80211_TX_CTL_STBC )) info->rates[i].RateFlags |=ATH9K_RATESERIES_STBC ; +if (rix >=8 && fi->dyn_smps) { + info->rates[i].RateFlags |= +ATH9K_RATESERIES_RTS_CTS ; + info->flags |=ATH9K_TXDESC_CTSENA ; + } info->txpower[i] =ath_get_rate_txpower (sc, bf, rix, is_40, false);
@@ -2111,6 +2116,7 @@ static void setup_frame_info(struct ieee80211_hw *hw, fi->keyix = an->ps_key; else fi->keyix = ATH9K_TXKEYIX_INVALID; + fi->dyn_smps = sta && sta->smps_mode ==IEEE80211_SMPS_DYNAMIC ; fi->keytype = keytype; fi->framelen = framelen; fi->tx_power = txpower;
drivers/net/wireless/mediatek/mt76/dma.c +7 -4
@@ -454,13 +454,13 @@ mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data, {struct sk_buff *skb = q->rx_head;struct skb_shared_info *shinfo =skb_shinfo (skb); +int nr_frags = shinfo->nr_frags; -if (shinfo->nr_frags <ARRAY_SIZE (shinfo->frags)) { +if (nr_frags <ARRAY_SIZE (shinfo->frags)) {struct page *page =virt_to_head_page (data);int offset = data -page_address (page) + q->buf_offset; -skb_add_rx_frag (skb, shinfo->nr_frags, page, offset, len, - q->buf_size); +skb_add_rx_frag (skb, nr_frags, page, offset, len, q->buf_size); }else {skb_free_frag (data); }
@@ -469,7 +469,10 @@ mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data,return ; q->rx_head =NULL ; - dev->drv->rx_skb (dev, q - dev->q_rx, skb); +if (nr_frags <ARRAY_SIZE (shinfo->frags)) + dev->drv->rx_skb (dev, q - dev->q_rx, skb); +else +dev_kfree_skb (skb); } static int
drivers/nvme/host/core.c +6 -2
@@ -455,7 +455,6 @@ static void nvme_free_ns_head(struct kref *ref)nvme_mpath_remove_disk (head);ida_simple_remove (&head->subsys->ns_ida, head->instance); -list_del_init (&head->entry);cleanup_srcu_struct (&head->srcu);nvme_put_subsystem (head->subsys);kfree (head);
@@ -3374,7 +3373,6 @@ static int __nvme_check_ids(struct nvme_subsystem *subsys,list_for_each_entry (h, &subsys->nsheads, entry) {if (nvme_ns_ids_valid (&new->ids) && - !list_empty (&h->list) &&nvme_ns_ids_equal (&new->ids, &h->ids))return -EINVAL ; }
@@ -3469,6 +3467,7 @@ static int nvme_init_ns_head(struct nvme_ns *ns, unsigned nsid,"IDs don't match for shared namespace %d\n" , nsid); ret = -EINVAL ; +nvme_put_ns_head (head); goto out_unlock; } }
@@ -3629,6 +3628,8 @@ static int nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid) out_unlink_ns:mutex_lock (&ctrl->subsys->lock);list_del_rcu (&ns->siblings); +if (list_empty (&ns->head->list)) +list_del_init (&ns->head->entry);mutex_unlock (&ctrl->subsys->lock);nvme_put_ns_head (ns->head); out_free_id:
@@ -3651,7 +3652,10 @@ static void nvme_ns_remove(struct nvme_ns *ns)mutex_lock (&ns->ctrl->subsys->lock);list_del_rcu (&ns->siblings); +if (list_empty (&ns->head->list)) +list_del_init (&ns->head->entry);mutex_unlock (&ns->ctrl->subsys->lock); +synchronize_rcu ();/* guarantee not available in head->list */ nvme_mpath_clear_current_path (ns);synchronize_srcu (&ns->head->srcu);/* wait for concurrent submissions */
drivers/pci/controller/pci-xgene-msi.c +3 -7
@@ -384,13 +384,9 @@ static int xgene_msi_hwirq_alloc(unsigned int cpu)if (!msi_group->gic_irq)continue ; -irq_set_chained_handler (msi_group->gic_irq, - xgene_msi_isr); - err =irq_set_handler_data (msi_group->gic_irq, msi_group); -if (err) { -pr_err ("failed to register GIC IRQ handler\n" ); -return -EINVAL ; - } +irq_set_chained_handler_and_data (msi_group->gic_irq, + xgene_msi_isr, msi_group); +/* * Statically allocate MSI GIC IRQs to each CPU core. * With 8-core X-Gene v1, 2 MSI GIC IRQs are allocated
drivers/pci/controller/pcie-mediatek.c +5 -2
@@ -1063,14 +1063,14 @@ static int mtk_pcie_setup(struct mtk_pcie *pcie) err =of_pci_get_devfn (child);if (err <0 ) {dev_err (dev,"failed to parse devfn: %d\n" , err); -return err; + goto error_put_node; } slot =PCI_SLOT (err); err =mtk_pcie_parse_port (pcie, child, slot);if (err) -return err; + goto error_put_node; } err =mtk_pcie_subsys_powerup (pcie);
@@ -1086,6 +1086,9 @@ static int mtk_pcie_setup(struct mtk_pcie *pcie)mtk_pcie_subsys_powerdown (pcie);return 0 ; +error_put_node: +of_node_put (child); +return err; }static int mtk_pcie_probe (struct platform_device *pdev)
drivers/pci/pci.c +4 -0
@@ -3903,6 +3903,10 @@ int pci_register_io_range(struct fwnode_handle *fwnode, phys_addr_t addr, ret =logic_pio_register_range (range);if (ret)kfree (range); + +/* Ignore duplicates due to deferred probing */ +if (ret == -EEXIST ) + ret =0 ;#endif return ret;
drivers/platform/olpc/olpc-ec.c +8 -7
@@ -426,11 +426,8 @@ static int olpc_ec_probe(struct platform_device *pdev)/* get the EC revision */ err =olpc_ec_cmd (EC_FIRMWARE_REV ,NULL ,0 , &ec->version,1 ); -if (err) { - ec_priv =NULL ; -kfree (ec); -return err; - } +if (err) + goto error; config.dev = pdev->dev.parent; config.driver_data = ec;
@@ -440,12 +437,16 @@ static int olpc_ec_probe(struct platform_device *pdev)if (IS_ERR (ec->dcon_rdev)) {dev_err (&pdev->dev,"failed to register DCON regulator\n" ); err =PTR_ERR (ec->dcon_rdev); -kfree (ec); -return err; + goto error; } ec->dbgfs_dir =olpc_ec_setup_debugfs (); +return 0 ; + +error: + ec_priv =NULL ; +kfree (ec);return err; }
drivers/s390/block/dasd.c +3 -3
@@ -3087,7 +3087,8 @@ static blk_status_t do_dasd_request(struct blk_mq_hw_ctx *hctx, basedev = block->base;spin_lock_irq (&dq->lock); -if (basedev->state <DASD_STATE_READY ) { +if (basedev->state <DASD_STATE_READY || +test_bit (DASD_FLAG_OFFLINE , &basedev->flags)) {DBF_DEV_EVENT (DBF_ERR , basedev,"device not ready for request %p" , req); rc =BLK_STS_IOERR ;
@@ -3522,8 +3523,6 @@ void dasd_generic_remove(struct ccw_device *cdev)struct dasd_device *device;struct dasd_block *block; - cdev->handler =NULL ; - device =dasd_device_from_cdev (cdev);if (IS_ERR (device)) {dasd_remove_sysfs_files (cdev);
@@ -3542,6 +3541,7 @@ void dasd_generic_remove(struct ccw_device *cdev)* no quite down yet. */ dasd_set_target_state (device,DASD_STATE_NEW ); + cdev->handler =NULL ;/* dasd_delete_device destroys the device reference. */ block = device->block;dasd_delete_device (device);
drivers/s390/cio/vfio_ccw_ops.c +3 -3
@@ -506,7 +506,7 @@ static ssize_t vfio_ccw_mdev_ioctl(struct mdev_device *mdev,if (ret)return ret; -return copy_to_user ((void __user *)arg, &info, minsz); +return copy_to_user ((void __user *)arg, &info, minsz) ? -EFAULT :0 ; }case VFIO_DEVICE_GET_REGION_INFO : {
@@ -524,7 +524,7 @@ static ssize_t vfio_ccw_mdev_ioctl(struct mdev_device *mdev,if (ret)return ret; -return copy_to_user ((void __user *)arg, &info, minsz); +return copy_to_user ((void __user *)arg, &info, minsz) ? -EFAULT :0 ; }case VFIO_DEVICE_GET_IRQ_INFO : {
@@ -545,7 +545,7 @@ static ssize_t vfio_ccw_mdev_ioctl(struct mdev_device *mdev,if (info.count ==-1 )return -EINVAL ; -return copy_to_user ((void __user *)arg, &info, minsz); +return copy_to_user ((void __user *)arg, &info, minsz) ? -EFAULT :0 ; }case VFIO_DEVICE_SET_IRQS : {
drivers/s390/crypto/vfio_ap_ops.c +1 -1
@@ -1279,7 +1279,7 @@ static int vfio_ap_mdev_get_device_info(unsigned long arg) info.num_regions =0 ; info.num_irqs =0 ; -return copy_to_user ((void __user *)arg, &info, minsz); +return copy_to_user ((void __user *)arg, &info, minsz) ? -EFAULT :0 ; } static ssize_t vfio_ap_mdev_ioctl(struct mdev_device *mdev,
drivers/scsi/libiscsi.c +3 -8
@@ -1532,14 +1532,9 @@ static int iscsi_data_xmit(struct iscsi_conn *conn) } rc =iscsi_prep_scsi_cmd_pdu (conn->task);if (rc) { -if (rc == -ENOMEM || rc == -EACCES ) { -spin_lock_bh (&conn->taskqueuelock); -list_add_tail (&conn->task->running, - &conn->cmdqueue); - conn->task =NULL ; -spin_unlock_bh (&conn->taskqueuelock); - goto done; - }else +if (rc == -ENOMEM || rc == -EACCES ) +fail_scsi_task (conn->task,DID_IMM_RETRY ); +else fail_scsi_task (conn->task,DID_ABORT );spin_lock_bh (&conn->taskqueuelock);continue ;
drivers/spi/spi-stm32.c +4 -11
@@ -924,8 +924,8 @@ static irqreturn_t stm32h7_spi_irq_thread(int irq, void *dev_id) mask |=STM32H7_SPI_SR_RXP ;if (!(sr & mask)) { -dev_dbg (spi->dev,"spurious IT (sr=0x%08x, ier=0x%08x)\n" , - sr, ier); +dev_warn (spi->dev,"spurious IT (sr=0x%08x, ier=0x%08x)\n" , + sr, ier);spin_unlock_irqrestore (&spi->lock, flags);return IRQ_NONE ; }
@@ -952,15 +952,8 @@ static irqreturn_t stm32h7_spi_irq_thread(int irq, void *dev_id) }if (sr &STM32H7_SPI_SR_OVR ) { -dev_warn (spi->dev,"Overrun: received value discarded\n" ); -if (!spi->cur_usedma && (spi->rx_buf && (spi->rx_len >0 ))) -stm32h7_spi_read_rxfifo (spi, false); -/* -* If overrun is detected while using DMA, it means that -* something went wrong, so stop the current transfer -*/ -if (spi->cur_usedma) - end = true; +dev_err (spi->dev,"Overrun: RX data lost\n" ); + end = true; }if (sr &STM32H7_SPI_SR_EOT ) {
drivers/staging/comedi/drivers/addi_apci_1032.c +3 -1
@@ -260,6 +260,7 @@ static irqreturn_t apci1032_interrupt(int irq, void *d)struct apci1032_private *devpriv = dev->private;struct comedi_subdevice *s = dev->read_subdev;unsigned int ctrl; +unsigned short val;/* check interrupt is from this device */ if ((inl(devpriv->amcc_iobase + AMCC_OP_REG_INTCSR) &
@@ -275,7 +276,8 @@ static irqreturn_t apci1032_interrupt(int irq, void *d)outl (ctrl & ~APCI1032_CTRL_INT_ENA , dev->iobase +APCI1032_CTRL_REG ); s->state =inl (dev->iobase +APCI1032_STATUS_REG ) &0xffff ; -comedi_buf_write_samples (s, &s->state,1 ); + val = s->state; +comedi_buf_write_samples (s, &val,1 );comedi_handle_events (dev, s);/* enable the interrupt */
drivers/staging/comedi/drivers/addi_apci_1500.c +9 -9
@@ -208,7 +208,7 @@ static irqreturn_t apci1500_interrupt(int irq, void *d)struct comedi_device *dev = d;struct apci1500_private *devpriv = dev->private;struct comedi_subdevice *s = dev->read_subdev; -unsigned int status =0 ; +unsigned short status =0 ;unsigned int val; val =inl (devpriv->amcc +AMCC_OP_REG_INTCSR );
@@ -238,14 +238,14 @@ static irqreturn_t apci1500_interrupt(int irq, void *d)* * Mask Meaning * ---------- ------------------------------------------ -* 0x00000001 Event 1 has occurred -* 0x00000010 Event 2 has occurred -* 0x00000100 Counter/timer 1 has run down (not implemented) -* 0x00001000 Counter/timer 2 has run down (not implemented) -* 0x00010000 Counter 3 has run down (not implemented) -* 0x00100000 Watchdog has run down (not implemented) -* 0x01000000 Voltage error -* 0x10000000 Short-circuit error +* 0b00000001 Event 1 has occurred +* 0b00000010 Event 2 has occurred +* 0b00000100 Counter/timer 1 has run down (not implemented) +* 0b00001000 Counter/timer 2 has run down (not implemented) +* 0b00010000 Counter 3 has run down (not implemented) +* 0b00100000 Watchdog has run down (not implemented) +* 0b01000000 Voltage error +* 0b10000000 Short-circuit error */ comedi_buf_write_samples (s, &status,1 );comedi_handle_events (dev, s);
drivers/staging/comedi/drivers/adv_pci1710.c +5 -5
@@ -300,11 +300,11 @@ static int pci1710_ai_eoc(struct comedi_device *dev,static int pci1710_ai_read_sample (struct comedi_device *dev,struct comedi_subdevice *s,unsigned int cur_chan, -unsigned int *val) +unsigned short *val) {const struct boardtype *board = dev->board_ptr;struct pci1710_private *devpriv = dev->private; -unsigned int sample; +unsigned short sample;unsigned int chan; sample =inw (dev->iobase +PCI171X_AD_DATA_REG );
@@ -345,7 +345,7 @@ static int pci1710_ai_insn_read(struct comedi_device *dev,pci1710_ai_setup_chanlist (dev, s, &insn->chanspec,1 ,1 );for (i =0 ; i < insn->n; i++) { -unsigned int val; +unsigned short val;/* start conversion */ outw (0 , dev->iobase +PCI171X_SOFTTRG_REG );
@@ -395,7 +395,7 @@ static void pci1710_handle_every_sample(struct comedi_device *dev, {struct comedi_cmd *cmd = &s->async->cmd;unsigned int status; -unsigned int val; +unsigned short val;int ret; status =inw (dev->iobase +PCI171X_STATUS_REG );
@@ -455,7 +455,7 @@ static void pci1710_handle_fifo(struct comedi_device *dev, }for (i =0 ; i < devpriv->max_samples; i++) { -unsigned int val; +unsigned short val;int ret; ret =pci1710_ai_read_sample (dev, s, s->async->cur_chan, &val);
drivers/staging/comedi/drivers/das6402.c +1 -1
@@ -186,7 +186,7 @@ static irqreturn_t das6402_interrupt(int irq, void *d)if (status &DAS6402_STATUS_FFULL ) { async->events |=COMEDI_CB_OVERFLOW ; }else if (status &DAS6402_STATUS_FFNE ) { -unsigned int val; +unsigned short val; val =das6402_ai_read_sample (dev, s);comedi_buf_write_samples (s, &val,1 );
drivers/staging/comedi/drivers/das800.c +1 -1
@@ -427,7 +427,7 @@ static irqreturn_t das800_interrupt(int irq, void *d)struct comedi_cmd *cmd;unsigned long irq_flags;unsigned int status; -unsigned int val; +unsigned short val;bool fifo_empty;bool fifo_overflow;int i;
drivers/staging/comedi/drivers/dmm32at.c +1 -1
@@ -404,7 +404,7 @@ static irqreturn_t dmm32at_isr(int irq, void *d) {struct comedi_device *dev = d;unsigned char intstat; -unsigned int val; +unsigned short val;int i;if (!dev->attached) {
drivers/staging/comedi/drivers/me4000.c +1 -1
@@ -924,7 +924,7 @@ static irqreturn_t me4000_ai_isr(int irq, void *dev_id)struct comedi_subdevice *s = dev->read_subdev;int i;int c =0 ; -unsigned int lval; +unsigned short lval;if (!dev->attached)return IRQ_NONE ;
drivers/staging/comedi/drivers/pcl711.c +1 -1
@@ -184,7 +184,7 @@ static irqreturn_t pcl711_interrupt(int irq, void *d)struct comedi_device *dev = d;struct comedi_subdevice *s = dev->read_subdev;struct comedi_cmd *cmd = &s->async->cmd; -unsigned int data; +unsigned short data;if (!dev->attached) {dev_err (dev->class_dev,"spurious interrupt\n" );
drivers/staging/comedi/drivers/pcl818.c +1 -1
@@ -423,7 +423,7 @@ static int pcl818_ai_eoc(struct comedi_device *dev,static bool pcl818_ai_write_sample (struct comedi_device *dev,struct comedi_subdevice *s, -unsigned int chan,unsigned int val) +unsigned int chan,unsigned short val) {struct pcl818_private *devpriv = dev->private;struct comedi_cmd *cmd = &s->async->cmd;
drivers/staging/ks7010/ks_wlan_net.c +4 -2
@@ -1120,6 +1120,7 @@ static int ks_wlan_set_scan(struct net_device *dev, {struct ks_wlan_private *priv =netdev_priv (dev);struct iw_scan_req *req =NULL ; +int len;if (priv->sleep_mode ==SLP_SLEEP )return -EPERM ;
@@ -1129,8 +1130,9 @@ static int ks_wlan_set_scan(struct net_device *dev,if (wrqu->data.length ==sizeof (struct iw_scan_req ) && wrqu->data.flags &IW_SCAN_THIS_ESSID ) { req = (struct iw_scan_req *)extra; - priv->scan_ssid_len = req->essid_len; -memcpy (priv->scan_ssid, req->essid, priv->scan_ssid_len); + len =min_t (int, req->essid_len,IW_ESSID_MAX_SIZE ); + priv->scan_ssid_len = len; +memcpy (priv->scan_ssid, req->essid, len); }else { priv->scan_ssid_len =0 ; }
drivers/staging/rtl8188eu/core/rtw_ap.c +5 -0
@@ -784,6 +784,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* SSID */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->ie_length - _BEACON_IE_OFFSET_));if (p && ie_len >0 ) { + ie_len =min_t (int, ie_len,sizeof (pbss_network->ssid.ssid));memset (&pbss_network->ssid,0 ,sizeof (struct ndis_802_11_ssid ));memcpy (pbss_network->ssid.ssid, (p +2 ), ie_len); pbss_network->ssid.ssid_length = ie_len;
@@ -802,6 +803,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* get supported rates */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->ie_length - _BEACON_IE_OFFSET_));if (p) { + ie_len =min_t (int, ie_len,NDIS_802_11_LENGTH_RATES_EX );memcpy (supportRate, p +2 , ie_len); supportRateNum = ie_len; }
@@ -809,6 +811,8 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)/* get ext_supported rates */ p =rtw_get_ie (ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->ie_length - _BEACON_IE_OFFSET_);if (p) { + ie_len =min_t (int, ie_len, +NDIS_802_11_LENGTH_RATES_EX - supportRateNum);memcpy (supportRate + supportRateNum, p +2 , ie_len); supportRateNum += ie_len; }
@@ -922,6 +926,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len) pht_cap->mcs.rx_mask[0 ] =0xff ; pht_cap->mcs.rx_mask[1 ] =0x0 ; + ie_len =min_t (int, ie_len,sizeof (pmlmepriv->htpriv.ht_cap));memcpy (&pmlmepriv->htpriv.ht_cap, p +2 , ie_len); }
drivers/staging/rtl8188eu/os_dep/ioctl_linux.c +4 -2
@@ -1160,9 +1160,11 @@ static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a,break ; } sec_len = *(pos++); len -=1 ; -if (sec_len >0 && sec_len <= len) { +if (sec_len >0 && + sec_len <= len && + sec_len <=32 ) { ssid[ssid_index].ssid_length = sec_len; -memcpy (ssid[ssid_index].ssid, pos, ssid[ssid_index].ssid_length); +memcpy (ssid[ssid_index].ssid, pos, sec_len); ssid_index++; } pos += sec_len;
drivers/staging/rtl8192e/rtl8192e/rtl_wx.c +4 -3
@@ -406,9 +406,10 @@ static int _rtl92e_wx_set_scan(struct net_device *dev,struct iw_scan_req *req = (struct iw_scan_req *)b;if (req->essid_len) { - ieee->current_network.ssid_len = req->essid_len; -memcpy (ieee->current_network.ssid, req->essid, - req->essid_len); +int len =min_t (int, req->essid_len,IW_ESSID_MAX_SIZE ); + + ieee->current_network.ssid_len = len; +memcpy (ieee->current_network.ssid, req->essid, len); } }
drivers/staging/rtl8192u/r8192U_wx.c +4 -2
@@ -333,8 +333,10 @@ static int r8192_wx_set_scan(struct net_device *dev, struct iw_request_info *a,struct iw_scan_req *req = (struct iw_scan_req *)b;if (req->essid_len) { - ieee->current_network.ssid_len = req->essid_len; -memcpy (ieee->current_network.ssid, req->essid, req->essid_len); +int len =min_t (int, req->essid_len,IW_ESSID_MAX_SIZE ); + + ieee->current_network.ssid_len = len; +memcpy (ieee->current_network.ssid, req->essid, len); } }
drivers/staging/rtl8712/rtl871x_cmd.c +4 -2
@@ -197,8 +197,10 @@ u8 r8712_sitesurvey_cmd(struct _adapter *padapter, psurveyPara->ss_ssidlen =0 ;memset (psurveyPara->ss_ssid,0 ,IW_ESSID_MAX_SIZE +1 );if ((pssid !=NULL ) && (pssid->SsidLength)) { -memcpy (psurveyPara->ss_ssid, pssid->Ssid, pssid->SsidLength); - psurveyPara->ss_ssidlen =cpu_to_le32 (pssid->SsidLength); +int len =min_t (int, pssid->SsidLength,IW_ESSID_MAX_SIZE ); + +memcpy (psurveyPara->ss_ssid, pssid->Ssid, len); + psurveyPara->ss_ssidlen =cpu_to_le32 (len); }set_fwstate (pmlmepriv, _FW_UNDER_SURVEY);r8712_enqueue_cmd (pcmdpriv, ph2c);
drivers/staging/rtl8712/rtl871x_ioctl_linux.c +1 -1
@@ -928,7 +928,7 @@ static int r871x_wx_set_priv(struct net_device *dev,struct iw_point *dwrq = (struct iw_point *)awrq; len = dwrq->length; - ext =memdup_user (dwrq->pointer, len); + ext =strndup_user (dwrq->pointer, len);if (IS_ERR (ext))return PTR_ERR (ext);
drivers/target/target_core_pr.c +11 -4
@@ -3731,6 +3731,7 @@ core_scsi3_pri_read_keys(struct se_cmd *cmd)spin_unlock (&dev->t10_pr.registration_lock);put_unaligned_be32 (add_len, &buf[4 ]); +target_set_cmd_data_length (cmd,8 + add_len);transport_kunmap_data_sg (cmd);
@@ -3749,7 +3750,7 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd)struct t10_pr_registration *pr_reg;unsigned char *buf;u64 pr_res_key; -u32 add_len =16 ;/* Hardcoded to 16 when a reservation is held. */ +u32 add_len =0 ;if (cmd->data_length <8 ) { pr_err("PRIN SA READ_RESERVATIONS SCSI Data Length: %u"
@@ -3767,8 +3768,9 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd) pr_reg = dev->dev_pr_res_holder;if (pr_reg) {/* -* Set the hardcoded Additional Length +* Set the Additional Length to 16 when a reservation is held */ + add_len =16 ;put_unaligned_be32 (add_len, &buf[4 ]);if (cmd->data_length <22 )
@@ -3804,6 +3806,8 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd) (pr_reg->pr_res_type &0x0f ); } +target_set_cmd_data_length (cmd,8 + add_len); + err:spin_unlock (&dev->dev_reservation_lock);transport_kunmap_data_sg (cmd);
@@ -3822,7 +3826,7 @@ core_scsi3_pri_report_capabilities(struct se_cmd *cmd)struct se_device *dev = cmd->se_dev;struct t10_reservation *pr_tmpl = &dev->t10_pr;unsigned char *buf; -u16 add_len =8 ;/* Hardcoded to 8. */ +u16 len =8 ;/* Hardcoded to 8. */ if (cmd->data_length <6 ) { pr_err("PRIN SA REPORT_CAPABILITIES SCSI Data Length:"
@@ -3834,7 +3838,7 @@ core_scsi3_pri_report_capabilities(struct se_cmd *cmd)if (!buf)return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE ; -put_unaligned_be16 (add_len, &buf[0 ]); +put_unaligned_be16 (len, &buf[0 ]); buf[2 ] |=0x10 ;/* CRH: Compatible Reservation Hanlding bit. */ buf[2 ] |=0x08 ;/* SIP_C: Specify Initiator Ports Capable bit */ buf[2 ] |=0x04 ;/* ATP_C: All Target Ports Capable bit */
@@ -3863,6 +3867,8 @@ core_scsi3_pri_report_capabilities(struct se_cmd *cmd) buf[4 ] |=0x02 ;/* PR_TYPE_WRITE_EXCLUSIVE */ buf[5 ] |=0x01 ;/* PR_TYPE_EXCLUSIVE_ACCESS_ALLREG */ +target_set_cmd_data_length (cmd, len); +transport_kunmap_data_sg (cmd);return 0 ;
@@ -4023,6 +4029,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)* Set ADDITIONAL_LENGTH */ put_unaligned_be32 (add_len, &buf[4 ]); +target_set_cmd_data_length (cmd,8 + add_len);transport_kunmap_data_sg (cmd);
drivers/target/target_core_transport.c +11 -4
@@ -873,11 +873,9 @@ void target_complete_cmd(struct se_cmd *cmd, u8 scsi_status) }EXPORT_SYMBOL (target_complete_cmd); -void target_complete_cmd_with_length (struct se_cmd *cmd,u8 scsi_status,int length) +void target_set_cmd_data_length (struct se_cmd *cmd,int length) { -if ((scsi_status ==SAM_STAT_GOOD || - cmd->se_cmd_flags &SCF_TREAT_READ_AS_NORMAL ) && - length < cmd->data_length) { +if (length < cmd->data_length) {if (cmd->se_cmd_flags &SCF_UNDERFLOW_BIT ) { cmd->residual_count += cmd->data_length - length; }else {
@@ -887,6 +885,15 @@ void target_complete_cmd_with_length(struct se_cmd *cmd, u8 scsi_status, int len cmd->data_length = length; } +} +EXPORT_SYMBOL (target_set_cmd_data_length); + +void target_complete_cmd_with_length (struct se_cmd *cmd,u8 scsi_status,int length) +{ +if (scsi_status ==SAM_STAT_GOOD || + cmd->se_cmd_flags &SCF_TREAT_READ_AS_NORMAL ) { +target_set_cmd_data_length (cmd, length); + }target_complete_cmd (cmd, scsi_status); }
drivers/usb/class/cdc-acm.c +5 -0
@@ -1941,6 +1941,11 @@ static const struct usb_device_id acm_ids[] = { .driver_info = SEND_ZERO_PACKET, }, +/* Exclude Goodix Fingerprint Reader */ + { USB_DEVICE(0x27c6, 0x5395), + .driver_info =IGNORE_DEVICE , + }, + /* control interfaces without any protocol set */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, USB_CDC_PROTO_NONE) },
drivers/usb/class/usblp.c +12 -4
@@ -494,16 +494,24 @@ static int usblp_release(struct inode *inode, struct file *file)/* No kernel lock - fine */ static __poll_t usblp_poll (struct file *file,struct poll_table_struct *wait) { -__poll_t ret; +struct usblp *usblp = file->private_data; +__poll_t ret =0 ;unsigned long flags; -struct usblp *usblp = file->private_data;/* Should we check file->f_mode & FMODE_WRITE before poll_wait()? */ poll_wait (file, &usblp->rwait, wait);poll_wait (file, &usblp->wwait, wait); + +mutex_lock (&usblp->mut); +if (!usblp->present) + ret |=EPOLLHUP ; +mutex_unlock (&usblp->mut); +spin_lock_irqsave (&usblp->lock, flags); - ret = ((usblp->bidir && usblp->rcomplete) ?EPOLLIN |EPOLLRDNORM :0 ) | - ((usblp->no_paper || usblp->wcomplete) ?EPOLLOUT |EPOLLWRNORM :0 ); +if (usblp->bidir && usblp->rcomplete) + ret |=EPOLLIN |EPOLLRDNORM ; +if (usblp->no_paper || usblp->wcomplete) + ret |=EPOLLOUT |EPOLLWRNORM ;spin_unlock_irqrestore (&usblp->lock, flags);return ret; }
drivers/usb/dwc3/dwc3-qcom.c +11 -5
@@ -251,8 +251,10 @@ static int dwc3_qcom_suspend(struct dwc3_qcom *qcom)for (i = qcom->num_clocks -1 ; i >=0 ; i--)clk_disable_unprepare (qcom->clks[i]); +if (device_may_wakeup (qcom->dev)) +dwc3_qcom_enable_interrupts (qcom); + qcom->is_suspended = true; -dwc3_qcom_enable_interrupts (qcom);return 0 ; }
@@ -265,7 +267,8 @@ static int dwc3_qcom_resume(struct dwc3_qcom *qcom)if (!qcom->is_suspended)return 0 ; -dwc3_qcom_disable_interrupts (qcom); +if (device_may_wakeup (qcom->dev)) +dwc3_qcom_disable_interrupts (qcom);for (i =0 ; i < qcom->num_clocks; i++) { ret =clk_prepare_enable (qcom->clks[i]);
@@ -528,16 +531,19 @@ static int dwc3_qcom_of_register_core(struct platform_device *pdev) ret =of_platform_populate (np,NULL ,NULL , dev);if (ret) {dev_err (dev,"failed to register dwc3 core - %d\n" , ret); -return ret; + goto node_put; } qcom->dwc3 =of_find_device_by_node (dwc3_np);if (!qcom->dwc3) { + ret = -ENODEV ;dev_err (dev,"failed to get dwc3 platform device\n" ); -return -ENODEV ; } -return 0 ; +node_put: +of_node_put (dwc3_np); + +return ret; }static const struct dwc3_acpi_pdata sdm845_acpi_pdata = {
drivers/usb/gadget/function/f_uac1.c +1 -0
@@ -499,6 +499,7 @@ static void f_audio_disable(struct usb_function *f) uac1->as_out_alt =0 ; uac1->as_in_alt =0 ; +u_audio_stop_playback (&uac1->g_audio);u_audio_stop_capture (&uac1->g_audio); }
drivers/usb/gadget/function/f_uac2.c +1 -1
@@ -478,7 +478,7 @@ static int set_ep_max_packet_size(const struct f_uac2_opts *uac2_opts, } max_size_bw =num_channels (chmask) * ssize * -DIV_ROUND_UP (srate, factor / (1 << (ep_desc->bInterval -1 ))); + ((srate / (factor / (1 << (ep_desc->bInterval -1 )))) +1 ); ep_desc->wMaxPacketSize =cpu_to_le16 (min_t (u16, max_size_bw, max_size_ep));
drivers/usb/gadget/function/u_ether_configfs.h +2 -3
@@ -169,12 +169,11 @@ out: \ size_t len) \ { \ struct f_##_f_##_opts *opts = to_f_##_f_##_opts(item); \ -int ret; \ +int ret = -EINVAL ; \u8 val; \ \mutex_lock (&opts->lock); \ - ret =sscanf (page,"%02hhx" , &val); \ -if (ret >0 ) { \ +if (sscanf (page,"%02hhx" , &val) >0 ) { \ opts->_n_ = val; \ ret = len; \ } \
drivers/usb/host/xhci-pci.c +11 -2
@@ -62,6 +62,7 @@#define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142#define PCI_DEVICE_ID_ASMEDIA_1142_XHCI 0x1242#define PCI_DEVICE_ID_ASMEDIA_2142_XHCI 0x2142 +#define PCI_DEVICE_ID_ASMEDIA_3242_XHCI 0x3242static const char hcd_name[] ="xhci_hcd" ;
@@ -258,11 +259,14 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == PCI_DEVICE_ID_ASMEDIA_1042_XHCI) xhci->quirks |= XHCI_BROKEN_STREAMS;if (pdev->vendor ==PCI_VENDOR_ID_ASMEDIA && - pdev->device ==PCI_DEVICE_ID_ASMEDIA_1042A_XHCI ) + pdev->device ==PCI_DEVICE_ID_ASMEDIA_1042A_XHCI ) { xhci->quirks |=XHCI_TRUST_TX_LENGTH ; + xhci->quirks |=XHCI_NO_64BIT_SUPPORT ; + }if (pdev->vendor ==PCI_VENDOR_ID_ASMEDIA && (pdev->device ==PCI_DEVICE_ID_ASMEDIA_1142_XHCI || - pdev->device ==PCI_DEVICE_ID_ASMEDIA_2142_XHCI )) + pdev->device ==PCI_DEVICE_ID_ASMEDIA_2142_XHCI || + pdev->device ==PCI_DEVICE_ID_ASMEDIA_3242_XHCI )) xhci->quirks |=XHCI_NO_64BIT_SUPPORT ; if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
@@ -277,6 +281,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == 0x9026) xhci->quirks |=XHCI_RESET_PLL_ON_DISCONNECT ; +if (pdev->vendor ==PCI_VENDOR_ID_AMD && + (pdev->device ==PCI_DEVICE_ID_AMD_PROMONTORYA_2 || + pdev->device ==PCI_DEVICE_ID_AMD_PROMONTORYA_4 )) + xhci->quirks |=XHCI_NO_SOFT_RETRY ; +if (xhci->quirks &XHCI_RESET_ON_RESUME )xhci_dbg_trace (xhci, trace_xhci_dbg_quirks,"QUIRK: Resetting on resume" );
drivers/usb/host/xhci-ring.c +2 -1
@@ -2299,7 +2299,8 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, remaining =0 ;break ;case COMP_USB_TRANSACTION_ERROR : -if ((ep_ring->err_count++ >MAX_SOFT_RETRY ) || +if (xhci->quirks &XHCI_NO_SOFT_RETRY || + (ep_ring->err_count++ >MAX_SOFT_RETRY ) ||le32_to_cpu (slot_ctx->tt_info) &TT_SLOT )break ; *status =0 ;
drivers/usb/host/xhci.c +43 -35
114 lines not on this page · raw message
drivers/usb/host/xhci.h +1 -0
@@ -1875,6 +1875,7 @@ struct xhci_hcd {#define XHCI_SNPS_BROKEN_SUSPEND BIT_ULL(35)#define XHCI_SKIP_PHY_INIT BIT_ULL(37)#define XHCI_DISABLE_SPARSE BIT_ULL(38) +#define XHCI_NO_SOFT_RETRY BIT_ULL(40)unsigned int num_active_eps;unsigned int limit_active_eps;
drivers/usb/renesas_usbhs/pipe.c +2 -0
@@ -746,6 +746,8 @@ struct usbhs_pipe *usbhs_pipe_malloc(struct usbhs_priv *priv,void usbhs_pipe_free (struct usbhs_pipe *pipe) { +usbhsp_pipe_select (pipe); +usbhsp_pipe_cfg_set (pipe,0xFFFF ,0 );usbhsp_put_pipe (pipe); }
drivers/usb/serial/ch341.c +1 -0
@@ -85,6 +85,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x1a86, 0x7522) }, { USB_DEVICE(0x1a86, 0x7523) }, { USB_DEVICE(0x4348, 0x5523) }, + { USB_DEVICE(0x9986, 0x7523) }, { }, };MODULE_DEVICE_TABLE (usb, id_table);
drivers/usb/serial/cp210x.c +3 -0
@@ -146,6 +146,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */ { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ + { USB_DEVICE(0x10C4, 0x88D8) }, /* Acuity Brands nLight Air Adapter */ { USB_DEVICE(0x10C4, 0x88FB) }, /* CESINEL MEDCAL STII Network Analyzer */ { USB_DEVICE(0x10C4, 0x8938) }, /* CESINEL MEDCAL S II Network Analyzer */ { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
@@ -202,6 +203,8 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x1901, 0x0194) }, /* GE Healthcare Remote Alarm Box */ { USB_DEVICE(0x1901, 0x0195) }, /* GE B850/B650/B450 CP2104 DP UART interface */ { USB_DEVICE(0x1901, 0x0196) }, /* GE B850 CP2105 DP UART interface */ + { USB_DEVICE(0x1901, 0x0197) }, /* GE CS1000 Display serial interface */ + { USB_DEVICE(0x1901, 0x0198) }, /* GE CS1000 M.2 Key E serial interface */ { USB_DEVICE(0x199B, 0xBA30) }, /* LORD WSDA-200-USB */ { USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */ { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
drivers/usb/serial/io_edgeport.c +16 -10
@@ -3003,26 +3003,32 @@ static int edge_startup(struct usb_serial *serial) response = -ENODEV ; } -usb_free_urb (edge_serial->interrupt_read_urb); -kfree (edge_serial->interrupt_in_buffer); - -usb_free_urb (edge_serial->read_urb); -kfree (edge_serial->bulk_in_buffer); - -kfree (edge_serial); - -return response; + goto error; }/* start interrupt read for this edgeport this interrupt will * continue as long as the edgeport is connected */ response =usb_submit_urb (edge_serial->interrupt_read_urb,GFP_KERNEL ); -if (response) +if (response) {dev_err (ddev,"%s - Error %d submitting control urb\n" , __func__, response); + + goto error; + } }return response; + +error: +usb_free_urb (edge_serial->interrupt_read_urb); +kfree (edge_serial->interrupt_in_buffer); + +usb_free_urb (edge_serial->read_urb); +kfree (edge_serial->bulk_in_buffer); + +kfree (edge_serial); + +return response; }
drivers/usb/usbip/stub_dev.c +35 -7
70 lines not on this page · raw message
drivers/usb/usbip/vhci_sysfs.c +34 -5
@@ -312,6 +312,8 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr,struct vhci *vhci;int err;unsigned long flags; +struct task_struct *tcp_rx =NULL ; +struct task_struct *tcp_tx =NULL ;/* * @rhport: port number of vhci_hcd
@@ -349,12 +351,35 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr,/* Extract socket from fd. */ socket =sockfd_lookup (sockfd, &err); -if (!socket) +if (!socket) { +dev_err (dev,"failed to lookup sock" );return -EINVAL ; + } +if (socket->type !=SOCK_STREAM ) { +dev_err (dev,"Expecting SOCK_STREAM - found %d" , + socket->type); +sockfd_put (socket); +return -EINVAL ; + } + +/* create threads before locking */ + tcp_rx =kthread_create (vhci_rx_loop, &vdev->ud,"vhci_rx" ); +if (IS_ERR (tcp_rx)) { +sockfd_put (socket); +return -EINVAL ; + } + tcp_tx =kthread_create (vhci_tx_loop, &vdev->ud,"vhci_tx" ); +if (IS_ERR (tcp_tx)) { +kthread_stop (tcp_rx); +sockfd_put (socket); +return -EINVAL ; + } -/* now need lock until setting vdev status as used */ +/* get task structs now */ +get_task_struct (tcp_rx); +get_task_struct (tcp_tx); -/* begin a lock */ +/* now begin lock until setting vdev status set */ spin_lock_irqsave (&vhci->lock, flags);spin_lock (&vdev->ud.lock);
@@ -364,6 +389,8 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr,spin_unlock_irqrestore (&vhci->lock, flags);sockfd_put (socket); +kthread_stop_put (tcp_rx); +kthread_stop_put (tcp_tx);dev_err (dev,"port %d already used\n" , rhport);/*
@@ -382,14 +409,16 @@ static ssize_t attach_store(struct device *dev, struct device_attribute *attr, vdev->speed = speed; vdev->ud.sockfd = sockfd; vdev->ud.tcp_socket = socket; + vdev->ud.tcp_rx = tcp_rx; + vdev->ud.tcp_tx = tcp_tx; vdev->ud.status =VDEV_ST_NOTASSIGNED ;spin_unlock (&vdev->ud.lock);spin_unlock_irqrestore (&vhci->lock, flags);/* end the lock */ - vdev->ud.tcp_rx =kthread_get_run (vhci_rx_loop, &vdev->ud,"vhci_rx" ); - vdev->ud.tcp_tx =kthread_get_run (vhci_tx_loop, &vdev->ud,"vhci_tx" ); +wake_up_process (vdev->ud.tcp_rx); +wake_up_process (vdev->ud.tcp_tx);rh_port_connect (vdev, speed);
drivers/usb/usbip/vudc_sysfs.c +42 -7
86 lines not on this page · raw message
drivers/xen/events/events_2l.c +15 -7
@@ -47,6 +47,11 @@ static unsigned evtchn_2l_max_channels(void)return EVTCHN_2L_NR_CHANNELS ; } +static void evtchn_2l_remove (evtchn_port_t evtchn,unsigned int cpu) +{ +clear_bit (evtchn,BM (per_cpu (cpu_evtchn_mask, cpu))); +} +static void evtchn_2l_bind_to_cpu (struct irq_info *info,unsigned cpu) {clear_bit (info->evtchn,BM (per_cpu (cpu_evtchn_mask, info->cpu)));
@@ -71,12 +76,6 @@ static bool evtchn_2l_is_pending(unsigned port)return sync_test_bit (port,BM (&s->evtchn_pending[0 ])); } -static bool evtchn_2l_test_and_set_mask (unsigned port) -{ -struct shared_info *s = HYPERVISOR_shared_info; -return sync_test_and_set_bit (port,BM (&s->evtchn_mask[0 ])); -} -static void evtchn_2l_mask (unsigned port) {struct shared_info *s = HYPERVISOR_shared_info;
@@ -354,18 +353,27 @@ static void evtchn_2l_resume(void) EVTCHN_2L_NR_CHANNELS/BITS_PER_EVTCHN_WORD); } +static int evtchn_2l_percpu_deinit (unsigned int cpu) +{ +memset (per_cpu (cpu_evtchn_mask, cpu),0 ,sizeof (xen_ulong_t) * +EVTCHN_2L_NR_CHANNELS /BITS_PER_EVTCHN_WORD ); + +return 0 ; +} +static const struct evtchn_ops evtchn_ops_2l = { .max_channels = evtchn_2l_max_channels, .nr_channels = evtchn_2l_max_channels, + .remove = evtchn_2l_remove, .bind_to_cpu = evtchn_2l_bind_to_cpu, .clear_pending = evtchn_2l_clear_pending, .set_pending = evtchn_2l_set_pending, .is_pending = evtchn_2l_is_pending, - .test_and_set_mask = evtchn_2l_test_and_set_mask, .mask = evtchn_2l_mask, .unmask = evtchn_2l_unmask, .handle_events = evtchn_2l_handle_events, .resume = evtchn_2l_resume, + .percpu_deinit = evtchn_2l_percpu_deinit, };void __init xen_evtchn_2l_init (void )
drivers/xen/events/events_base.c +98 -34
143 lines not on this page · raw message
include/uapi/linux/netfilter/nfnetlink_cthelper.h +1 -1
Lines of this file are not shown. View the raw message.
kernel/time/hrtimer.c +39 -21
60 lines not on this page · raw message
tools/testing/selftests/bpf/progs/test_tunnel_kern.c +2 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/verifier/array_access.c +2 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/mirror_gre_bridge_1d_vlan.sh +9 -0
Lines of this file are not shown. View the 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.