Linux 5.12.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.12.11 kernel.
All users of the 5.12 kernel series must upgrade.
The updated 5.12.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.12.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/devicetree/bindings/sound/amlogic,gx-sound-card.yaml | 4 Documentation/virt/kvm/mmu.rst | 4 Makefile | 7 arch/arm/include/asm/cpuidle.h | 5 arch/mips/lib/mips-atomic.c | 12 arch/powerpc/boot/dts/fsl/p1010si-post.dtsi | 8 arch/powerpc/boot/dts/fsl/p2041si-post.dtsi | 16 + arch/x86/Makefile | 5 arch/x86/events/intel/uncore_snbep.c | 9 arch/x86/kernel/cpu/perfctr-watchdog.c | 4 arch/x86/kvm/mmu/paging_tmpl.h | 14 arch/x86/kvm/trace.h | 6 arch/x86/kvm/x86.c | 13 crypto/async_tx/async_xor.c | 3 drivers/acpi/bus.c | 27 - drivers/acpi/sleep.c | 4 drivers/bus/mhi/pci_generic.c | 2 drivers/gpio/gpio-wcd934x.c | 2 drivers/gpu/drm/drm_auth.c | 3 drivers/gpu/drm/drm_ioctl.c | 9 drivers/gpu/drm/mcde/mcde_dsi.c | 2 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 155 +++++++--- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 2 drivers/hwmon/corsair-psu.c | 14 drivers/hwmon/tps23861.c | 17 - drivers/i2c/busses/i2c-mpc.c | 95 ++++++ drivers/infiniband/core/uverbs_cmd.c | 5 drivers/infiniband/hw/mlx4/main.c | 8 drivers/infiniband/hw/mlx5/cq.c | 9 drivers/infiniband/hw/mlx5/doorbell.c | 7 drivers/infiniband/hw/mlx5/fs.c | 11 drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 1 drivers/isdn/hardware/mISDN/netjet.c | 1 drivers/md/bcache/bcache.h | 1 drivers/md/bcache/request.c | 20 - drivers/md/bcache/stats.c | 14 drivers/md/bcache/stats.h | 1 drivers/md/bcache/sysfs.c | 4 drivers/md/dm-verity-verify-sig.c | 2 drivers/misc/cardreader/rtl8411.c | 1 drivers/misc/cardreader/rts5209.c | 1 drivers/misc/cardreader/rts5227.c | 2 drivers/misc/cardreader/rts5228.c | 1 drivers/misc/cardreader/rts5229.c | 1 drivers/misc/cardreader/rts5249.c | 3 drivers/misc/cardreader/rts5260.c | 1 drivers/misc/cardreader/rts5261.c | 1 drivers/misc/cardreader/rtsx_pcr.c | 44 ++ drivers/mmc/host/renesas_sdhi_core.c | 9 drivers/net/appletalk/cops.c | 4 drivers/net/bonding/bond_main.c | 2 drivers/net/dsa/microchip/ksz9477.c | 1 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 4 drivers/net/ethernet/cadence/macb_main.c | 3 drivers/net/ethernet/mellanox/mlx4/fw.c | 3 drivers/net/ethernet/mellanox/mlx4/fw.h | 1 drivers/net/ethernet/mellanox/mlx4/main.c | 6 drivers/net/ethernet/qlogic/qla3xxx.c | 2 drivers/net/ethernet/sfc/nic.c | 1 drivers/net/phy/mdio_bus.c | 3 drivers/nvme/host/Kconfig | 3 drivers/nvme/host/fabrics.c | 5 drivers/nvme/target/core.c | 15 drivers/nvme/target/nvmet.h | 2 drivers/phy/broadcom/phy-brcm-usb-init.h | 4 drivers/phy/cadence/phy-cadence-sierra.c | 1 drivers/phy/ti/phy-j721e-wiz.c | 1 drivers/pinctrl/qcom/Kconfig | 2 drivers/pinctrl/qcom/pinctrl-sdx55.c | 18 - drivers/platform/surface/aggregator/controller.c | 2 drivers/regulator/atc260x-regulator.c | 19 - drivers/regulator/bd718x7-regulator.c | 2 drivers/regulator/core.c | 6 drivers/regulator/da9121-regulator.c | 10 drivers/regulator/fan53880.c | 3 drivers/regulator/fixed.c | 7 drivers/regulator/max77620-regulator.c | 7 drivers/regulator/rtmv20-regulator.c | 42 ++ drivers/regulator/scmi-regulator.c | 2 drivers/s390/cio/vfio_ccw_drv.c | 12 drivers/s390/cio/vfio_ccw_fsm.c | 1 drivers/s390/cio/vfio_ccw_ops.c | 2 drivers/scsi/bnx2fc/bnx2fc_io.c | 1 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 8 drivers/scsi/hosts.c | 47 +-- drivers/scsi/qla2xxx/qla_target.c | 2 drivers/scsi/vmw_pvscsi.c | 8 drivers/spi/spi-bcm2835.c | 10 drivers/spi/spi-bitbang.c | 18 - drivers/spi/spi-fsl-spi.c | 4 drivers/spi/spi-omap-uwire.c | 9 drivers/spi/spi-omap2-mcspi.c | 33 +- drivers/spi/spi-pxa2xx.c | 9 drivers/spi/spi-sprd.c | 1 drivers/spi/spi-zynq-qspi.c | 7 drivers/spi/spi.c | 20 - drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c | 2 drivers/usb/cdns3/cdns3-gadget.c | 12 drivers/usb/cdns3/cdnsp-ring.c | 7 drivers/usb/chipidea/udc.c | 1 drivers/usb/dwc3/dwc3-meson-g12a.c | 13 drivers/usb/dwc3/ep0.c | 3 drivers/usb/dwc3/gadget.c | 15 drivers/usb/gadget/config.c | 8 drivers/usb/gadget/function/f_ecm.c | 2 drivers/usb/gadget/function/f_eem.c | 6 drivers/usb/gadget/function/f_fs.c | 3 drivers/usb/gadget/function/f_hid.c | 3 drivers/usb/gadget/function/f_loopback.c | 2 drivers/usb/gadget/function/f_ncm.c | 10 drivers/usb/gadget/function/f_printer.c | 3 drivers/usb/gadget/function/f_rndis.c | 2 drivers/usb/gadget/function/f_serial.c | 2 drivers/usb/gadget/function/f_sourcesink.c | 3 drivers/usb/gadget/function/f_subset.c | 2 drivers/usb/gadget/function/f_tcm.c | 3 drivers/usb/host/xhci-pci.c | 7 drivers/usb/host/xhci.h | 1 drivers/usb/misc/brcmstb-usb-pinmap.c | 2 drivers/usb/musb/musb_core.c | 3 drivers/usb/serial/cp210x.c | 84 +++++ drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 1 drivers/usb/serial/omninet.c | 2 drivers/usb/serial/quatech2.c | 6 drivers/usb/typec/mux.c | 2 drivers/usb/typec/mux/intel_pmc_mux.c | 9 drivers/usb/typec/tcpm/tcpm.c | 84 +++-- drivers/usb/typec/tcpm/wcove.c | 2 drivers/usb/typec/ucsi/ucsi.c | 1 fs/btrfs/disk-io.c | 26 + fs/btrfs/file.c | 4 fs/btrfs/tree-log.c | 16 + fs/btrfs/zoned.c | 23 + fs/coredump.c | 2 fs/nfs/client.c | 2 fs/nfs/nfs4_fs.h | 1 fs/nfs/nfs4client.c | 2 fs/nfs/nfs4proc.c | 29 + fs/proc/base.c | 11 include/asm-generic/vmlinux.lds.h | 1 include/dt-bindings/usb/pd.h | 20 - include/linux/entry-kvm.h | 3 include/linux/kvm_host.h | 10 include/linux/mfd/rohm-bd71828.h | 10 include/linux/mlx4/device.h | 1 include/linux/rtsx_pci.h | 2 include/linux/sched.h | 8 include/linux/tick.h | 7 include/linux/usb/pd.h | 2 include/linux/usb/pd_ext_sdb.h | 4 kernel/bpf/btf.c | 12 kernel/bpf/verifier.c | 14 kernel/cgroup/cgroup-v1.c | 4 kernel/cgroup/cgroup.c | 13 kernel/entry/common.c | 5 kernel/events/core.c | 2 kernel/sched/debug.c | 3 kernel/sched/fair.c | 18 - kernel/sched/pelt.h | 11 kernel/time/tick-sched.c | 1 kernel/trace/ftrace.c | 8 kernel/trace/trace.c | 2 kernel/workqueue.c | 12 net/netlink/af_netlink.c | 6 net/nfc/rawsock.c | 2 net/rds/connection.c | 23 + net/rds/tcp.c | 4 net/rds/tcp.h | 3 net/rds/tcp_listen.c | 6 sound/core/seq/seq_timer.c | 10 sound/firewire/amdtp-stream.c | 2 sound/pci/hda/patch_realtek.c | 16 + sound/soc/amd/raven/acp3x-pcm-dma.c | 10 sound/soc/amd/raven/acp3x.h | 1 sound/soc/amd/raven/pci-acp3x.c | 15 sound/soc/codecs/lpass-rx-macro.c | 1 sound/soc/codecs/lpass-tx-macro.c | 1 sound/soc/codecs/max98088.c | 13 sound/soc/codecs/sti-sas.c | 1 sound/soc/intel/boards/bytcr_rt5640.c | 25 + sound/soc/soc-core.c | 2 sound/soc/sof/pm.c | 1 tools/bootconfig/include/linux/bootconfig.h | 4 tools/bootconfig/main.c | 1 tools/perf/util/session.c | 1 tools/testing/selftests/bpf/verifier/stack_ptr.c | 2 tools/testing/selftests/bpf/verifier/value_ptr_arith.c | 8 188 files changed, 1242 insertions(+), 475 deletions(-)
Alaa Hleihel (1):
IB/mlx5: Fix initializing CQ fragments buffer
Alexander Kuznetsov (1):
cgroup1: don't allow '\n' in renaming
Alexandre GRIVEAUX (1):
USB: serial: omninet: add device id for Zyxel Omni 56K Plus
Andy Shevchenko (3):
usb: typec: wcove: Use LE to CPU conversion when accessing msg->header
usb: typec: intel_pmc_mux: Put fwnode in error case during ->probe()
usb: typec: intel_pmc_mux: Add missed error check for devm_ioremap_resource()Anna Schumaker (1):
NFS: Fix use-after-free in nfs4_init_client()
Arnd Bergmann (1):
ARM: cpuidle: Avoid orphan section warning
Axel Lin (7):
regulator: da9121: Return REGULATOR_MODE_INVALID for invalid mode
regulator: fan53880: Fix missing n_voltages setting
regulator: fixed: Ensure enable_counter is correct if reg_domain_disable fails
regulator: scmi: Fix off-by-one for linear regulators .n_voltages setting
regulator: bd71828: Fix .n_voltages settings
regulator: atc260x: Fix n_voltages and min_sel for pickable linear ranges
regulator: rtmv20: Fix .set_current_limit/.get_current_limit callbacks
Bixuan Cui (1):
ASoC: codecs: lpass-tx-macro: add missing MODULE_DEVICE_TABLE
Bjorn Andersson (2):
usb: typec: mux: Fix copy-paste mistake in typec_mux_match
pinctrl: qcom: Make it possible to select SC8180x TLMM
Chen Li (1):
phy: usb: Fix misuse of IS_ENABLED
Chris Packham (4):
powerpc/fsl: set fsl,i2c-erratum-a004447 flag for P2041 i2c controllers powerpc/fsl: set fsl,i2c-erratum-a004447 flag for P1010 i2c controllers
i2c: mpc: Make use of i2c_recover_bus()
i2c: mpc: implement erratum A-004447 workaround
Christophe JAILLET (1):
usb: dwc3: meson-g12a: Disable the regulator in the error handling path of the probe
Chunyan Zhang (1):
spi: sprd: Add missing MODULE_DEVICE_TABLE
CodyYao-oc (1):
x86/nmi_watchdog: Fix old-style NMI watchdog regression on old Intel CPUs
Coly Li (2):
bcache: remove bcache device self-defined readahead
bcache: avoid oversized read request in cache missing code path
Dai Ngo (1):
NFSv4: nfs4_proc_set_acl needs to restore NFS_CAP_UIDGID_NOMAP on error.
Dan Carpenter (2):
net: mdiobus: get rid of a BUG_ON()
NFS: Fix a potential NULL dereference in nfs_get_client()
Daniel Borkmann (1):
bpf, selftests: Adjust few selftest result_unpriv outcomes
Desmond Cheong Zhi Xi (2):
drm: Fix use-after-free read in drm_getunique()
drm: Lock pointer access in drm_master_release()
Dietmar Eggemann (1):
sched/fair: Fix util_est UTIL_AVG_UNCHANGED handling
Dinghao Liu (1):
usb: cdns3: Fix runtime PM imbalance on error
Dmitry Baryshkov (1):
regulator: core: resolve supply for boot-on/always-on regulators
Dmitry Bogdanov (1):
scsi: target: qla2xxx: Wait for stop_phase1 at WWN removal
Dmitry Osipenko (1):
regulator: max77620: Use device_set_of_node_from_dev()
Eric Farman (2):
vfio-ccw: Reset FSM state to IDLE inside FSM
vfio-ccw: Serialize FSM IDLE state with I/O completion
Eric W. Biederman (1):
coredump: Limit what can interrupt coredumps
Frederic Weisbecker (1):
tick/nohz: Only check for RCU deferred wakeup on user/guest entry when needed
Geert Uytterhoeven (1):
mmc: renesas_sdhi: Fix HS400 on R-Car M3-W+
George McCollister (2):
net: dsa: microchip: enable phy errata workaround on 9567
USB: serial: ftdi_sio: add NovaTech OrionMX product ID
Greg Kroah-Hartman (1):
Linux 5.12.11
Hannes Reinecke (1):
nvme-fabrics: decode host pathing error for connect
Hans de Goede (2):
ASoC: Intel: bytcr_rt5640: Add quirk for the Glavey TM800A550L tablet
ASoC: Intel: bytcr_rt5640: Add quirk for the Lenovo Miix 3-830 tablet
Hui Wang (1):
ALSA: hda/realtek: headphone and mic don't work on an Acer laptop
Jack Pham (1):
usb: dwc3: gadget: Bail from dwc3_gadget_exit() if dwc->gadget is NULL
Javed Hasan (1):
scsi: bnx2fc: Return failure if io_req is already in ABTS processing
Jeimon (1):
net/nfc/rawsock.c: fix a permission check bug
Jeremy Szu (4):
ALSA: hda/realtek: fix mute/micmute LEDs and speaker for HP Elite Dragonfly G2
ALSA: hda/realtek: fix mute/micmute LEDs and speaker for HP EliteBook x360 1040 G8
ALSA: hda/realtek: fix mute/micmute LEDs for HP EliteBook 840 Aero G8
ALSA: hda/realtek: fix mute/micmute LEDs for HP ZBook Power G8
Jerome Brunet (1):
ASoC: meson: gx-card: fix sound-dai dt schema
Jiapeng Chong (1):
bnx2x: Fix missing error code in bnx2x_iov_init_one()
Jiri Olsa (2):
bpf: Forbid trampoline attach for functions with variable arguments
bpf: Add deny list of btf ids check for tracing programs
Johan Hovold (2):
USB: serial: quatech2: fix control-request directions
USB: serial: cp210x: fix CP2102N-A01 modem control
Johannes Berg (2):
bonding: init notify_work earlier to avoid uninitialized use
netlink: disable IRQs for netlink_lock_table()
John Keeping (1):
dm verity: fix require_signatures module_param permissions
Jonathan Marek (3):
drm/msm/a6xx: fix incorrectly set uavflagprd_inv field for A650 drm/msm/a6xx: update/fix CP_PROTECT initialization drm/msm/a6xx: avoid shadow NULL reference in failure path
Josef Bacik (1):
btrfs: do not write supers if we have an fs error
Kai Vehmanen (1):
ASoC: SOF: reset enabled_cores state at suspend
Kamal Heib (1):
RDMA/ipoib: Fix warning caused by destroying non-initial netns
Kan Liang (2):
perf/x86/intel/uncore: Fix M2M event umask for Ice Lake server perf/x86/intel/uncore: Fix a kernel WARNING triggered by maxcpus=1
Karen Dombroski (1):
spi: spi-zynq-qspi: Fix stack violation bug
Kees Cook (1):
proc: Track /proc/$pid/attr/ opener mm_struct
Kefeng Wang (1):
ASoC: core: Fix Null-point-dereference in fmt_single_name()
Kyle Tso (6):
usb: pd: Set PD_T_SINK_WAIT_CAP to 310ms
usb: typec: tcpm: Properly handle Alert and Status Messages
usb: typec: tcpm: Do not finish VDM AMS for retrying Responses
usb: typec: tcpm: Correct the responses in SVDM Version 2.0 DFP
usb: typec: tcpm: Fix misuses of AMS invocation
dt-bindings: connector: Replace BIT macro with generic bit ops
Lai Jiangshan (2):
KVM: x86: Unload MMU on guest TLB flush if TDP disabled to force MMU sync
KVM: X86: MMU: Use the correct inherited permissions to get shadow page
Leo Yan (1):
perf session: Correct buffer copying when peeking events
Li Jun (3):
usb: chipidea: udc: assign interrupt number to USB gadget structure
usb: typec: tcpm: cancel vdm and state machine hrtimer when unregister tcpm port
usb: typec: tcpm: cancel frs hrtimer when unregister tcpm port
Liangyan (1):
tracing: Correct the length check which causes memory corruption
Linus Torvalds (1):
proc: only require mm_struct for writing
Linus Walleij (1):
drm/mcde: Fix off by 10^3 in calculation
Linyu Yuan (1):
usb: gadget: eem: fix wrong eem header operation
Lukas Wunner (2):
spi: Cleanup on failure of initial setup
spi: bcm2835: Fix out-of-bounds access with more than 4 slaves
Maciej Żenczykowski (4):
USB: f_ncm: ncm_bitrate (speed) is unsigned
usb: f_ncm: only first packet of aggregate needs to start timer
usb: fix various gadgets null ptr deref on 10gbps cabling.
usb: fix various gadget panics on 10gbps cabling
Manivannan Sadhasivam (1):
pinctrl: qcom: Fix duplication in gpio_groups
Maor Gottlieb (1):
RDMA: Verify port when creating flow rule
Marco Elver (1):
perf: Fix data race between pin_count increment/decrement
Marco Felsch (1):
ASoC: max98088: fix ni clock divider calculation
Marian-Cristian Rotariu (1):
usb: dwc3: ep0: fix NULL pointer exception
Mario Limonciello (1):
usb: pci-quirks: disable D3cold on xhci suspend for s2idle on AMD Renoir
Mark Bloch (1):
RDMA/mlx5: Block FDB rules when not in switchdev mode
Mark Zhang (1):
RDMA/mlx5: Use different doorbell memory for different processes
Masami Hiramatsu (1):
tools/bootconfig: Fix a build error accroding to undefined fallthrough
Matt Wang (1):
scsi: vmw_pvscsi: Set correct residual data length
Matti Vaittinen (1):
regulator: bd718x7: Fix the BUCK7 voltage setting on BD71837
Maximilian Luz (1):
platform/surface: aggregator: Fix event disable function
Mayank Rana (1):
usb: typec: ucsi: Clear PPM capability data in ucsi_init() error path
Mika Westerberg (1):
ACPI: Pass the same capabilities to the _OSC regardless of the query flag
Ming Lei (4):
scsi: core: Fix error handling of scsi_host_alloc()
scsi: core: Fix failure handling of scsi_add_host_with_dma()
scsi: core: Put .shost_dev in failure path if host state changes to RUNNING
scsi: core: Only put parent device if host state differs from SHOST_CREATED
Naohiro Aota (1):
btrfs: zoned: fix zone number to sector/physical calculation
Nathan Chancellor (1):
vmlinux.lds.h: Avoid orphan section with !SMP
Neil Armstrong (1):
usb: dwc3-meson-g12a: fix usb2 PHY glue init when phy0 is disabled
Nick Desaulniers (1):
Makefile: LTO: have linker check -Wframe-larger-than
Nikolay Borisov (1):
btrfs: promote debugging asserts to full-fledged checks in validate_super
Paolo Bonzini (2):
kvm: avoid speculation-based attacks from out-of-range memslot accesses
kvm: fix previous commit for 32-bit builds
Pawel Laszczak (1):
usb: cdnsp: Fix deadlock issue in cdnsp_thread_irq_handler
Rao Shoaib (1):
RDS tcp loopback connection can hang
Ricky Wu (1):
misc: rtsx: separate aspm mode into MODE_REG and MODE_CFG
Ritesh Harjani (1):
btrfs: return value from btrfs_mark_extent_written() in case of error
Robert Marko (3):
hwmon: (tps23861) define regmap max register
hwmon: (tps23861) set current shunt value
hwmon: (tps23861) correct shunt LSB values
Sagi Grimberg (2):
nvme-tcp: remove incorrect Kconfig dep in BLK_DEV_NVME
nvmet: fix false keep-alive timeout when a controller is torn down
Sanket Parmar (1):
usb: cdns3: Enable TDL_CHK only for OUT ep
Saravana Kannan (2):
spi: Fix spi device unregister flow
spi: Don't have controller clean up spi device before driver unbind
Saubhik Mukherjee (1):
net: appletalk: cops: Fix data race in cops_probe1
Sean Christopherson (1):
KVM: x86: Ensure liveliness of nested VM-Enter fail tracepoint message
Sergey Senozhatsky (1):
wq: handle VM suspension in stall detection
Shakeel Butt (1):
cgroup: disable controllers at parse time
Shay Drory (1):
RDMA/mlx4: Do not map the core_clock page to user space unless enabled
Srinivas Kandagatla (2):
ASoC: codecs: lpass-rx-macro: add missing MODULE_DEVICE_TABLE
gpio: wcd934x: Fix shift-out-of-bounds error
Stefan Agner (1):
USB: serial: cp210x: fix alternate function for CP2102N QFN20
Steven Rostedt (VMware) (1):
ftrace: Do not blindly read the ip address in ftrace_bug()
Takashi Iwai (1):
ALSA: seq: Fix race of snd_seq_timer_open()
Takashi Sakamoto (1):
ALSA: firewire-lib: fix the context to call snd_pcm_stop_xrun()
Thomas Petazzoni (1):
usb: musb: fix MUSB_QUIRK_B_DISCONNECT_99 handling
Tiezhu Yang (1):
MIPS: Fix kernel hang under FUNCTION_GRAPH_TRACER and PREEMPT_TRACER
Tor Vic (1):
x86, lto: Pass -stack-alignment only on LLD < 13.0.0
Trond Myklebust (2):
NFSv4: Fix deadlock between nfs4_evict_inode() and nfs4_opendata_get_inode()
NFSv4: Fix second deadlock in nfs4_evict_inode()
Vijendar Mukunda (1):
ASoC: amd: fix for pcm_read() error
Vincent Guittot (2):
sched/fair: Keep load_avg and load_sum synced sched/fair: Make sure to update tg contrib for blocked load
Wang Wensheng (1):
phy: cadence: Sierra: Fix error return code in cdns_sierra_phy_probe()
Wei Yongjun (1):
bus: mhi: pci_generic: Fix possible use-after-free in mhi_pci_remove()
Wenli Looi (1):
staging: rtl8723bs: Fix uninitialized variables
Wesley Cheng (2):
usb: gadget: f_fs: Ensure io_completion_wq is idle during unbind
usb: dwc3: gadget: Disable gadget IRQ during pullup disable
Wilken Gottwalt (1):
hwmon: (corsair-psu) fix suspend behavior
Wolfram Sang (1):
mmc: renesas_sdhi: abort tuning when timeout detected
Xiao Ni (1):
async_xor: check src_offs is not NULL before updating it
Yang Li (1):
phy: ti: Fix an error code in wiz_probe()
Yang Yingliang (2):
scsi: hisi_sas: Drop free_irq() of devm_request_irq() allocated irq
usb: misc: brcmstb-usb-pinmap: check return value after calling platform_get_resource()
Zhang Rui (1):
Revert "ACPI: sleep: Put the FACS table after using it"
Zhen Lei (1):
tools/bootconfig: Fix error return code in apply_xbc()
Zheyu Ma (2):
isdn: mISDN: netjet: Fix crash in nj_probe:
net/qla3xxx: fix schedule while atomic in ql_sem_spinlock
Zong Li (1):
net: macb: ensure the device is available before accessing GEMGXL control registers
Zou Wei (1):
ASoC: sti-sas: add missing MODULE_DEVICE_TABLE
Íñigo Huguet (1):
net:sfc: fix non-freed irq in legacy irq mode
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/sound/amlogic,gx-sound-card.yaml +2 -2
@@ -57,7 +57,7 @@ patternProperties: rate sound-dai: - $ref: /schemas/types.yaml#/definitions/phandle + $ref: /schemas/types.yaml#/definitions/phandle-array description: phandle of the CPU DAI patternProperties:
@@ -71,7 +71,7 @@ patternProperties: properties: sound-dai: - $ref: /schemas/types.yaml#/definitions/phandle + $ref: /schemas/types.yaml#/definitions/phandle-array description: phandle of the codec DAI required:
Documentation/virt/kvm/mmu.rst +2 -2
@@ -171,8 +171,8 @@ Shadow pages contain the following information: shadow pages) so role.quadrant takes values in the range 0..3. Each quadrant maps 1GB virtual address space. role.access: - Inherited guest access permissions in the form uwx. Note execute - permission is positive, not negative. + Inherited guest access permissions from the parent ptes in the form uwx. + Note execute permission is positive, not negative. role.invalid: The page is invalid and should not be used. It is a root page that is currently pinned (by a cpu hardware register pointing to it); once it is
Makefile +6 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 12 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Frozen Wasteland
@@ -912,6 +912,11 @@ CC_FLAGS_LTO += -fvisibility=hidden # Limit inlining across translation units to reduce binary size KBUILD_LDFLAGS += -mllvm -import-instr-limit=5 + +# Check for frame size exceeding threshold during prolog/epilog insertion. +ifneq ($(CONFIG_FRAME_WARN),0) +KBUILD_LDFLAGS += -plugin-opt=-warn-stack-size=$(CONFIG_FRAME_WARN) +endif endif ifdef CONFIG_LTO
arch/arm/include/asm/cpuidle.h +3 -2
@@ -7,9 +7,11 @@#ifdef CONFIG_CPU_IDLE extern int arm_cpuidle_simple_enter (struct cpuidle_device *dev,struct cpuidle_driver *drv,int index); +#define __cpuidle_method_section __used __section("__cpuidle_method_of_table")#else static inline int arm_cpuidle_simple_enter (struct cpuidle_device *dev,struct cpuidle_driver *drv,int index) {return -ENODEV ; } +#define __cpuidle_method_section __maybe_unused/* drop silently */ #endif /* Common ARM WFI state */
@@ -42,8 +44,7 @@ struct of_cpuidle_method {#define CPUIDLE_METHOD_OF_DECLARE (name, _method, _ops) \ static const struct of_cpuidle_method __cpuidle_method_of_table_##name \ - __used __section("__cpuidle_method_of_table") \ - = { .method = _method, .ops = _ops } + __cpuidle_method_section = { .method = _method, .ops = _ops }extern int arm_cpuidle_suspend (int index);
arch/mips/lib/mips-atomic.c +6 -6
@@ -37,7 +37,7 @@*/ notrace void arch_local_irq_disable(void) { -preempt_disable (); +preempt_disable_notrace (); __asm__ __volatile__( " .set push \n"
@@ -53,7 +53,7 @@ notrace void arch_local_irq_disable(void) : /* no inputs */ : "memory"); -preempt_enable (); +preempt_enable_notrace (); }EXPORT_SYMBOL (arch_local_irq_disable);
@@ -61,7 +61,7 @@ notrace unsigned long arch_local_irq_save(void) {unsigned long flags; -preempt_disable (); +preempt_disable_notrace (); __asm__ __volatile__( " .set push \n"
@@ -78,7 +78,7 @@ notrace unsigned long arch_local_irq_save(void) : /* no inputs */ : "memory"); -preempt_enable (); +preempt_enable_notrace ();return flags; }
@@ -88,7 +88,7 @@ notrace void arch_local_irq_restore(unsigned long flags) {unsigned long __tmp1; -preempt_disable (); +preempt_disable_notrace (); __asm__ __volatile__( " .set push \n"
@@ -106,7 +106,7 @@ notrace void arch_local_irq_restore(unsigned long flags) : "0" (flags) : "memory"); -preempt_enable (); +preempt_enable_notrace (); }EXPORT_SYMBOL (arch_local_irq_restore);
arch/powerpc/boot/dts/fsl/p1010si-post.dtsi +8 -0
@@ -122,7 +122,15 @@ memory-controller@2000 { }; /include/ "pq3-i2c-0.dtsi" + i2c@3000 { + fsl,i2c-erratum-a004447; + }; + /include/ "pq3-i2c-1.dtsi" + i2c@3100 { + fsl,i2c-erratum-a004447; + }; + /include/ "pq3-duart-0.dtsi" /include/ "pq3-espi-0.dtsi" spi0: spi@7000 {
arch/powerpc/boot/dts/fsl/p2041si-post.dtsi +16 -0
@@ -371,7 +371,23 @@ sdhc@114000 { }; /include/ "qoriq-i2c-0.dtsi" + i2c@118000 { + fsl,i2c-erratum-a004447; + }; + + i2c@118100 { + fsl,i2c-erratum-a004447; + }; + /include/ "qoriq-i2c-1.dtsi" + i2c@119000 { + fsl,i2c-erratum-a004447; + }; + + i2c@119100 { + fsl,i2c-erratum-a004447; + }; + /include/ "qoriq-duart-0.dtsi" /include/ "qoriq-duart-1.dtsi" /include/ "qoriq-gpio-0.dtsi"
arch/x86/Makefile +3 -2
@@ -192,8 +192,9 @@ endif KBUILD_LDFLAGS += -m elf_$(UTS_MACHINE) ifdef CONFIG_LTO_CLANG -KBUILD_LDFLAGS += -plugin-opt=-code-model=kernel \ - -plugin-opt=-stack-alignment=$(if $(CONFIG_X86_32),4,8) +ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0) +KBUILD_LDFLAGS += -plugin-opt=-stack-alignment=$(if $(CONFIG_X86_32),4,8) +endif endif ifdef CONFIG_X86_NEED_RELOCS
arch/x86/events/intel/uncore_snbep.c +6 -3
@@ -1406,6 +1406,8 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool die_id = i; else die_id =topology_phys_to_logical_pkg (i); +if (die_id <0 ) + die_id = -ENODEV ; map->pbus_to_dieid[bus] = die_id;break ; }
@@ -1452,14 +1454,14 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool i =-1 ;if (reverse) {for (bus =255 ; bus >=0 ; bus--) { -if (map->pbus_to_dieid[bus] >=0 ) +if (map->pbus_to_dieid[bus] !=-1 ) i = map->pbus_to_dieid[bus];else map->pbus_to_dieid[bus] = i; } }else {for (bus =0 ; bus <=255 ; bus++) { -if (map->pbus_to_dieid[bus] >=0 ) +if (map->pbus_to_dieid[bus] !=-1 ) i = map->pbus_to_dieid[bus];else map->pbus_to_dieid[bus] = i;
@@ -5103,9 +5105,10 @@ static struct intel_uncore_type icx_uncore_m2m = { .perf_ctr = SNR_M2M_PCI_PMON_CTR0, .event_ctl = SNR_M2M_PCI_PMON_CTL0, .event_mask = SNBEP_PMON_RAW_EVENT_MASK, + .event_mask_ext = SNR_M2M_PCI_PMON_UMASK_EXT, .box_ctl = SNR_M2M_PCI_PMON_BOX_CTL, .ops = &snr_m2m_uncore_pci_ops, - .format_group = &skx_uncore_format_group, + .format_group = &snr_m2m_uncore_format_group, };static struct attribute *icx_upi_uncore_formats_attr[] = {
arch/x86/kernel/cpu/perfctr-watchdog.c +2 -2
@@ -63,7 +63,7 @@ static inline unsigned int nmi_perfctr_msr_to_bit(unsigned int msr)case 15 :return msr -MSR_P4_BPU_PERFCTR0 ; } - fallthrough; +break ;case X86_VENDOR_ZHAOXIN :case X86_VENDOR_CENTAUR :return msr -MSR_ARCH_PERFMON_PERFCTR0 ;
@@ -96,7 +96,7 @@ static inline unsigned int nmi_evntsel_msr_to_bit(unsigned int msr)case 15 :return msr -MSR_P4_BSU_ESCR0 ; } - fallthrough; +break ;case X86_VENDOR_ZHAOXIN :case X86_VENDOR_CENTAUR :return msr -MSR_ARCH_PERFMON_EVENTSEL0 ;
arch/x86/kvm/mmu/paging_tmpl.h +9 -5
@@ -90,8 +90,8 @@ struct guest_walker {gpa_t pte_gpa[PT_MAX_FULL_LEVELS ];pt_element_t __user *ptep_user[PT_MAX_FULL_LEVELS ];bool pte_writable[PT_MAX_FULL_LEVELS ]; -unsigned pt_access; -unsigned pte_access; +unsigned int pt_access[PT_MAX_FULL_LEVELS ]; +unsigned int pte_access;gfn_t gfn;struct x86_exception fault; };
@@ -418,13 +418,15 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, } walker->ptes[walker->level -1 ] = pte; + +/* Convert to ACC_*_MASK flags for struct guest_walker. */ + walker->pt_access[walker->level -1 ] =FNAME (gpte_access)(pt_access ^ walk_nx_mask); }while (!is_last_gpte (mmu, walker->level, pte)); pte_pkey =FNAME (gpte_pkeys)(vcpu, pte); accessed_dirty = have_ad ? pte_access &PT_GUEST_ACCESSED_MASK :0 ;/* Convert to ACC_*_MASK flags for struct guest_walker. */ - walker->pt_access =FNAME (gpte_access)(pt_access ^ walk_nx_mask); walker->pte_access =FNAME (gpte_access)(pte_access ^ walk_nx_mask); errcode =permission_fault (vcpu, mmu, walker->pte_access, pte_pkey, access);if (unlikely (errcode))
@@ -463,7 +465,8 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, }pgprintk ("%s: pte %llx pte_access %x pt_access %x\n" , - __func__, (u64 )pte, walker->pte_access, walker->pt_access); + __func__, (u64 )pte, walker->pte_access, + walker->pt_access[walker->level -1 ]);return 1 ; error:
@@ -642,7 +645,7 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr,bool huge_page_disallowed = exec && nx_huge_page_workaround_enabled;struct kvm_mmu_page *sp =NULL ;struct kvm_shadow_walk_iterator it; -unsigned direct_access, access = gw->pt_access; +unsigned int direct_access, access;int top_level, level, req_level, ret;gfn_t base_gfn = gw->gfn;
@@ -674,6 +677,7 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr, sp =NULL ;if (!is_shadow_present_pte (*it.sptep)) { table_gfn = gw->table_gfn[it.level -2 ]; + access = gw->pt_access[it.level -2 ]; sp =kvm_mmu_get_page (vcpu, table_gfn, addr, it.level-1 , false, access); }
arch/x86/kvm/trace.h +3 -3
@@ -1550,16 +1550,16 @@ TRACE_EVENT(kvm_nested_vmenter_failed,TP_ARGS (msg, err),TP_STRUCT__entry ( - __field(const char *, msg) + __string(msg, msg)__field (u32, err) ),TP_fast_assign ( - __entry->msg = msg; + __assign_str(msg, msg); __entry->err = err; ), -TP_printk ("%s%s" , __entry->msg, !__entry->err ?"" : +TP_printk ("%s%s" ,__get_str (msg), !__entry->err ?"" :__print_symbolic (__entry->err,VMX_VMENTER_INSTRUCTION_ERRORS )) );
arch/x86/kvm/x86.c +13 -0
@@ -2982,6 +2982,19 @@ static void kvm_vcpu_flush_tlb_all(struct kvm_vcpu *vcpu)static void kvm_vcpu_flush_tlb_guest (struct kvm_vcpu *vcpu) { ++vcpu->stat.tlb_flush; + +if (!tdp_enabled) { +/* +* A TLB flush on behalf of the guest is equivalent to +* INVPCID(all), toggling CR4.PGE, etc., which requires +* a forced sync of the shadow page tables. Unload the +* entire MMU here and the subsequent load will sync the +* shadow page tables, and also flush the TLB. +*/ +kvm_mmu_unload (vcpu); +return ; + } +static_call (kvm_x86_tlb_flush_guest)(vcpu); }
crypto/async_tx/async_xor.c +2 -1
@@ -233,7 +233,8 @@ async_xor_offs(struct page *dest, unsigned int offset,if (submit->flags &ASYNC_TX_XOR_DROP_DST ) { src_cnt--; src_list++; - src_offs++; +if (src_offs) + src_offs++; }/* wait for any prerequisite operations */
drivers/acpi/bus.c +8 -19
@@ -330,32 +330,21 @@ static void acpi_bus_osc_negotiate_platform_control(void)if (ACPI_FAILURE (acpi_run_osc (handle, &context)))return ; - capbuf_ret = context.ret.pointer; -if (context.ret.length <=OSC_SUPPORT_DWORD ) { -kfree (context.ret.pointer); -return ; - } +kfree (context.ret.pointer); -/* -* Now run _OSC again with query flag clear and with the caps -* supported by both the OS and the platform. -*/ +/* Now run _OSC again with query flag clear */ capbuf[OSC_QUERY_DWORD ] =0 ; - capbuf[OSC_SUPPORT_DWORD ] = capbuf_ret[OSC_SUPPORT_DWORD ]; -kfree (context.ret.pointer);if (ACPI_FAILURE (acpi_run_osc (handle, &context)))return ; capbuf_ret = context.ret.pointer; -if (context.ret.length >OSC_SUPPORT_DWORD ) { - osc_sb_apei_support_acked = - capbuf_ret[OSC_SUPPORT_DWORD ] &OSC_SB_APEI_SUPPORT ; - osc_pc_lpi_support_confirmed = - capbuf_ret[OSC_SUPPORT_DWORD ] &OSC_SB_PCLPI_SUPPORT ; - osc_sb_native_usb4_support_confirmed = - capbuf_ret[OSC_SUPPORT_DWORD ] &OSC_SB_NATIVE_USB4_SUPPORT ; - } + osc_sb_apei_support_acked = + capbuf_ret[OSC_SUPPORT_DWORD ] &OSC_SB_APEI_SUPPORT ; + osc_pc_lpi_support_confirmed = + capbuf_ret[OSC_SUPPORT_DWORD ] &OSC_SB_PCLPI_SUPPORT ; + osc_sb_native_usb4_support_confirmed = + capbuf_ret[OSC_SUPPORT_DWORD ] &OSC_SB_NATIVE_USB4_SUPPORT ;kfree (context.ret.pointer); }
drivers/acpi/sleep.c +1 -3
@@ -1009,10 +1009,8 @@ static void acpi_sleep_hibernate_setup(void)return ;acpi_get_table (ACPI_SIG_FACS ,1 , (struct acpi_table_header **)&facs); -if (facs) { +if (facs) s4_hardware_signature = facs->hardware_signature; -acpi_put_table ((struct acpi_table_header *)facs); - } }#else /* !CONFIG_HIBERNATION */ static inline void acpi_sleep_hibernate_setup (void ) {}
drivers/bus/mhi/pci_generic.c +1 -1
@@ -505,7 +505,7 @@ static void mhi_pci_remove(struct pci_dev *pdev)struct mhi_pci_device *mhi_pdev =pci_get_drvdata (pdev);struct mhi_controller *mhi_cntrl = &mhi_pdev->mhi_cntrl; -del_timer (&mhi_pdev->health_check_timer); +del_timer_sync (&mhi_pdev->health_check_timer);cancel_work_sync (&mhi_pdev->recovery_work);if (test_and_clear_bit (MHI_PCI_DEV_STARTED , &mhi_pdev->status)) {
drivers/gpio/gpio-wcd934x.c +1 -1
@@ -7,7 +7,7 @@#include <linux/slab.h> #include <linux/of_device.h> -#define WCD_PIN_MASK (p) BIT(p - 1) +#define WCD_PIN_MASK (p) BIT(p)#define WCD_REG_DIR_CTL_OFFSET 0x42#define WCD_REG_VAL_CTL_OFFSET 0x43#define WCD934X_NPINS 5
drivers/gpu/drm/drm_auth.c +2 -1
@@ -314,9 +314,10 @@ int drm_master_open(struct drm_file *file_priv)void drm_master_release (struct drm_file *file_priv) {struct drm_device *dev = file_priv->minor->dev; -struct drm_master *master = file_priv->master; +struct drm_master *master;mutex_lock (&dev->master_mutex); + master = file_priv->master;if (file_priv->magic)idr_remove (&file_priv->master->magic_map, file_priv->magic);
drivers/gpu/drm/drm_ioctl.c +5 -4
@@ -118,17 +118,18 @@ int drm_getunique(struct drm_device *dev, void *data, struct drm_file *file_priv) {struct drm_unique *u = data; -struct drm_master *master = file_priv->master; +struct drm_master *master; -mutex_lock (&master->dev->master_mutex); +mutex_lock (&dev->master_mutex); + master = file_priv->master;if (u->unique_len >= master->unique_len) {if (copy_to_user (u->unique, master->unique, master->unique_len)) { -mutex_unlock (&master->dev->master_mutex); +mutex_unlock (&dev->master_mutex);return -EFAULT ; } } u->unique_len = master->unique_len; -mutex_unlock (&master->dev->master_mutex); +mutex_unlock (&dev->master_mutex);return 0 ; }
drivers/gpu/drm/mcde/mcde_dsi.c +1 -1
@@ -577,7 +577,7 @@ static void mcde_dsi_setup_video_mode(struct mcde_dsi *d,* porches and sync. */ /* (ps/s) / (pixels/s) = ps/pixels */ - pclk =DIV_ROUND_UP_ULL (1000000000000 , mode->clock); + pclk =DIV_ROUND_UP_ULL (1000000000000 , (mode->clock *1000 ));dev_dbg (d->dev,"picoseconds between two pixels: %llu\n" , pclk);
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +114 -41
197 lines not on this page · raw message
drivers/gpu/drm/msm/adreno/a6xx_gpu.h +1 -1
@@ -44,7 +44,7 @@ struct a6xx_gpu {* REG_CP_PROTECT_REG(n) - this will block both reads and writes for _len * registers starting at _reg. */ -#define A6XX_PROTECT_RW (_reg, _len) \ +#define A6XX_PROTECT_NORDWR (_reg, _len) \ ((1 << 31) | \ (((_len) & 0x3FFF) << 18) | ((_reg) & 0x3FFFF))
drivers/hwmon/corsair-psu.c +14 -0
@@ -570,6 +570,16 @@ static int corsairpsu_raw_event(struct hid_device *hdev, struct hid_report *reporeturn 0 ; } +#ifdef CONFIG_PM +static int corsairpsu_resume (struct hid_device *hdev) +{ +struct corsairpsu_data *priv =hid_get_drvdata (hdev); + +/* some PSUs turn off the microcontroller during standby, so a reinit is required */ +return corsairpsu_init (priv); +} +#endif +static const struct hid_device_id corsairpsu_idtable[] = { {HID_USB_DEVICE (0x1b1c ,0x1c03 ) },/* Corsair HX550i */ {HID_USB_DEVICE (0x1b1c ,0x1c04 ) },/* Corsair HX650i */
@@ -592,6 +602,10 @@ static struct hid_driver corsairpsu_driver = { .probe = corsairpsu_probe, .remove = corsairpsu_remove, .raw_event = corsairpsu_raw_event, +#ifdef CONFIG_PM + .resume = corsairpsu_resume, + .reset_resume = corsairpsu_resume, +#endif };module_hid_driver (corsairpsu_driver);
drivers/hwmon/tps23861.c +15 -2
@@ -99,11 +99,14 @@#define POWER_ENABLE 0x19#define TPS23861_NUM_PORTS 4 +#define TPS23861_GENERAL_MASK_1 0x17 +#define TPS23861_CURRENT_SHUNT_MASK BIT(0) +#define TEMPERATURE_LSB 652/* 0.652 degrees Celsius */ #define VOLTAGE_LSB 3662/* 3.662 mV */ #define SHUNT_RESISTOR_DEFAULT 255000/* 255 mOhm */ -#define CURRENT_LSB_255 62260/* 62.260 uA */ -#define CURRENT_LSB_250 61039/* 61.039 uA */ +#define CURRENT_LSB_250 62260/* 62.260 uA */ +#define CURRENT_LSB_255 61039/* 61.039 uA */ #define RESISTANCE_LSB 110966/* 11.0966 Ohm*/ #define RESISTANCE_LSB_LOW 157216/* 15.7216 Ohm*/
@@ -117,6 +120,7 @@ struct tps23861_data {static struct regmap_config tps23861_regmap_config = { .reg_bits =8 , .val_bits =8 , + .max_register =0x6f , };static int tps23861_read_temp (struct tps23861_data *data,long *val)
@@ -560,6 +564,15 @@ static int tps23861_probe(struct i2c_client *client)else data->shunt_resistor =SHUNT_RESISTOR_DEFAULT ; +if (data->shunt_resistor ==SHUNT_RESISTOR_DEFAULT ) +regmap_clear_bits (data->regmap, +TPS23861_GENERAL_MASK_1 , +TPS23861_CURRENT_SHUNT_MASK ); +else +regmap_set_bits (data->regmap, +TPS23861_GENERAL_MASK_1 , +TPS23861_CURRENT_SHUNT_MASK ); + hwmon_dev =devm_hwmon_device_register_with_info (dev, client->name, data, &tps23861_chip_info,NULL );
drivers/i2c/busses/i2c-mpc.c +93 -2
155 lines not on this page · raw message
drivers/infiniband/core/uverbs_cmd.c +5 -0
@@ -3247,6 +3247,11 @@ static int ib_uverbs_ex_create_flow(struct uverbs_attr_bundle *attrs) goto err_free_attr; } +if (!rdma_is_port_valid (uobj->context->device, cmd.flow_attr.port)) { + err = -EINVAL ; + goto err_uobj; + } + qp =uobj_get_obj_read (qp,UVERBS_OBJECT_QP , cmd.qp_handle, attrs);if (!qp) { err = -EINVAL ;
drivers/infiniband/hw/mlx4/main.c +1 -7
@@ -580,12 +580,9 @@ static int mlx4_ib_query_device(struct ib_device *ibdev, props->cq_caps.max_cq_moderation_count =MLX4_MAX_CQ_COUNT ; props->cq_caps.max_cq_moderation_period =MLX4_MAX_CQ_PERIOD ; -if (!mlx4_is_slave (dev->dev)) - err =mlx4_get_internal_clock_params (dev->dev, &clock_params); -if (uhw->outlen >= resp.response_length +sizeof (resp.hca_core_clock_offset)) { resp.response_length +=sizeof (resp.hca_core_clock_offset); -if (!err && !mlx4_is_slave (dev->dev)) { +if (!mlx4_get_internal_clock_params (dev->dev, &clock_params)) { resp.comp_mask |=MLX4_IB_QUERY_DEV_RESP_MASK_CORE_CLOCK_OFFSET ; resp.hca_core_clock_offset = clock_params.offset %PAGE_SIZE ; }
@@ -1699,9 +1696,6 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp,struct mlx4_dev *dev = (to_mdev (qp->device))->dev;int is_bonded =mlx4_is_bonded (dev); -if (!rdma_is_port_valid (qp->device, flow_attr->port)) -return ERR_PTR (-EINVAL ); -if (flow_attr->flags & ~IB_FLOW_ATTR_FLAGS_DONT_TRAP )return ERR_PTR (-EOPNOTSUPP );
drivers/infiniband/hw/mlx5/cq.c +4 -5
@@ -849,15 +849,14 @@ static void destroy_cq_user(struct mlx5_ib_cq *cq, struct ib_udata *udata)ib_umem_release (cq->buf.umem); } -static void init_cq_frag_buf (struct mlx5_ib_cq *cq, -struct mlx5_ib_cq_buf *buf) +static void init_cq_frag_buf (struct mlx5_ib_cq_buf *buf) {int i;void *cqe;struct mlx5_cqe64 *cqe64;for (i =0 ; i < buf->nent; i++) { - cqe =get_cqe (cq, i); + cqe =mlx5_frag_buf_get_wqe (&buf->fbc, i); cqe64 = buf->cqe_size ==64 ? cqe : cqe +64 ; cqe64->op_own =MLX5_CQE_INVALID <<4 ; }
@@ -883,7 +882,7 @@ static int create_cq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,if (err) goto err_db; -init_cq_frag_buf (cq, &cq->buf); +init_cq_frag_buf (&cq->buf); *inlen =MLX5_ST_SZ_BYTES (create_cq_in) + MLX5_FLD_SZ_BYTES(create_cq_in, pas[0]) *
@@ -1184,7 +1183,7 @@ static int resize_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,if (err) goto ex; -init_cq_frag_buf (cq, cq->resize_buf); +init_cq_frag_buf (cq->resize_buf);return 0 ;
drivers/infiniband/hw/mlx5/doorbell.c +6 -1
@@ -41,6 +41,7 @@ struct mlx5_ib_user_db_page {struct ib_umem *umem;unsigned long user_virt;int refcnt; +struct mm_struct *mm; }; int mlx5_ib_db_map_user(struct mlx5_ib_ucontext *context,
@@ -53,7 +54,8 @@ int mlx5_ib_db_map_user(struct mlx5_ib_ucontext *context,mutex_lock (&context->db_page_mutex);list_for_each_entry (page, &context->db_page_list, list) -if (page->user_virt == (virt &PAGE_MASK )) +if ((current->mm == page->mm) && + (page->user_virt == (virt &PAGE_MASK ))) goto found; page =kmalloc (sizeof (*page),GFP_KERNEL );
@@ -71,6 +73,8 @@ int mlx5_ib_db_map_user(struct mlx5_ib_ucontext *context,kfree (page); goto out; } +mmgrab (current->mm); + page->mm = current->mm;list_add (&page->list, &context->db_page_list);
@@ -91,6 +95,7 @@ void mlx5_ib_db_unmap_user(struct mlx5_ib_ucontext *context, struct mlx5_db *db)if (!--db->u.user_page->refcnt) {list_del (&db->u.user_page->list); +mmdrop (db->u.user_page->mm);ib_umem_release (db->u.user_page->umem);kfree (db->u.user_page); }
drivers/infiniband/hw/mlx5/fs.c +8 -3
@@ -1194,9 +1194,8 @@ static struct ib_flow *mlx5_ib_create_flow(struct ib_qp *qp, goto free_ucmd; } -if (flow_attr->port > dev->num_ports || - (flow_attr->flags & - ~(IB_FLOW_ATTR_FLAGS_DONT_TRAP |IB_FLOW_ATTR_FLAGS_EGRESS ))) { +if (flow_attr->flags & + ~(IB_FLOW_ATTR_FLAGS_DONT_TRAP |IB_FLOW_ATTR_FLAGS_EGRESS )) { err = -EINVAL ; goto free_ucmd; }
@@ -2134,6 +2133,12 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_MATCHER_CREATE)(if (err) goto end; +if (obj->ns_type ==MLX5_FLOW_NAMESPACE_FDB && +mlx5_eswitch_mode (dev->mdev) !=MLX5_ESWITCH_OFFLOADS ) { + err = -EINVAL ; + goto end; + } + uobj->object = obj; obj->mdev = dev->mdev;atomic_set (&obj->usecnt,0 );
drivers/infiniband/ulp/ipoib/ipoib_netlink.c +1 -0
@@ -163,6 +163,7 @@ static size_t ipoib_get_size(const struct net_device *dev)static struct rtnl_link_ops ipoib_link_ops__read_mostly = { .kind ="ipoib" , + .netns_refund = true, .maxtype =IFLA_IPOIB_MAX , .policy = ipoib_policy, .priv_size =sizeof (struct ipoib_dev_priv ),
drivers/isdn/hardware/mISDN/netjet.c +0 -1
@@ -1100,7 +1100,6 @@ nj_probe(struct pci_dev *pdev, const struct pci_device_id *ent) card->typ =NETJET_S_TJ300 ; card->base =pci_resource_start (pdev,0 ); - card->irq = pdev->irq;pci_set_drvdata (pdev, card); err =setup_instance (card);if (err)
drivers/md/bcache/bcache.h +0 -1
@@ -364,7 +364,6 @@ struct cached_dev {/* The rest of this all shows up in sysfs */ unsigned int sequential_cutoff; -unsigned int readahead; unsigned int io_disable:1; unsigned int verify:1;
drivers/md/bcache/request.c +7 -13
@@ -880,9 +880,9 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s, struct bio *bio, unsigned int sectors) { int ret = MAP_CONTINUE; -unsigned int reada =0 ; struct cached_dev *dc = container_of(s->d, struct cached_dev, disk);struct bio *miss, *cache_bio; +unsigned int size_limit; s->cache_missed =1 ;
@@ -892,14 +892,10 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s, goto out_submit; } -if (!(bio->bi_opf &REQ_RAHEAD ) && - !(bio->bi_opf & (REQ_META |REQ_PRIO )) && - s->iop.c->gc_stats.in_use <CUTOFF_CACHE_READA ) - reada =min_t (sector_t, dc->readahead >>9 , -get_capacity (bio->bi_bdev->bd_disk) - -bio_end_sector (bio)); - - s->insert_bio_sectors =min (sectors,bio_sectors (bio) + reada); +/* Limitation for valid replace key size and cache_bio bvecs number */ + size_limit = min_t(unsigned int, BIO_MAX_VECS * PAGE_SECTORS, + (1 <<KEY_SIZE_BITS ) -1 ); + s->insert_bio_sectors =min3 (size_limit, sectors,bio_sectors (bio)); s->iop.replace_key = KEY(s->iop.inode, bio->bi_iter.bi_sector + s->insert_bio_sectors,
@@ -911,7 +907,8 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s, s->iop.replace = true; - miss =bio_next_split (bio, sectors,GFP_NOIO , &s->d->bio_split); + miss =bio_next_split (bio, s->insert_bio_sectors,GFP_NOIO , + &s->d->bio_split);/* btree_search_recurse()'s btree iterator is no good anymore */ ret = miss == bio ?MAP_DONE : -EINTR ;
@@ -933,9 +930,6 @@ static int cached_dev_cache_miss(struct btree *b, struct search *s,if (bch_bio_alloc_pages (cache_bio, __GFP_NOWARN|GFP_NOIO )) goto out_put; -if (reada) -bch_mark_cache_readahead (s->iop.c, s->d); - s->cache_miss = miss; s->iop.bio = cache_bio;bio_get (cache_bio);
drivers/md/bcache/stats.c +0 -14
@@ -46,7 +46,6 @@ read_attribute(cache_misses);read_attribute (cache_bypass_hits);read_attribute (cache_bypass_misses);read_attribute (cache_hit_ratio); -read_attribute (cache_readaheads);read_attribute (cache_miss_collisions);read_attribute (bypassed);
@@ -64,7 +63,6 @@ SHOW(bch_stats)DIV_SAFE (var (cache_hits) *100 , var(cache_hits) + var(cache_misses))); -var_print (cache_readaheads);var_print (cache_miss_collisions);sysfs_hprint (bypassed,var (sectors_bypassed) <<9 );#undef var
@@ -86,7 +84,6 @@ static struct attribute *bch_stats_files[] = { &sysfs_cache_bypass_hits, &sysfs_cache_bypass_misses, &sysfs_cache_hit_ratio, - &sysfs_cache_readaheads, &sysfs_cache_miss_collisions, &sysfs_bypassed,NULL
@@ -113,7 +110,6 @@ void bch_cache_accounting_clear(struct cache_accounting *acc) acc->total.cache_misses =0 ; acc->total.cache_bypass_hits =0 ; acc->total.cache_bypass_misses =0 ; - acc->total.cache_readaheads =0 ; acc->total.cache_miss_collisions =0 ; acc->total.sectors_bypassed =0 ; }
@@ -145,7 +141,6 @@ static void scale_stats(struct cache_stats *stats, unsigned long rescale_at)scale_stat (&stats->cache_misses);scale_stat (&stats->cache_bypass_hits);scale_stat (&stats->cache_bypass_misses); -scale_stat (&stats->cache_readaheads);scale_stat (&stats->cache_miss_collisions);scale_stat (&stats->sectors_bypassed); }
@@ -168,7 +163,6 @@ static void scale_accounting(struct timer_list *t)move_stat (cache_misses);move_stat (cache_bypass_hits);move_stat (cache_bypass_misses); -move_stat (cache_readaheads);move_stat (cache_miss_collisions);move_stat (sectors_bypassed);
@@ -209,14 +203,6 @@ void bch_mark_cache_accounting(struct cache_set *c, struct bcache_device *d,mark_cache_stats (&c->accounting.collector, hit, bypass); } -void bch_mark_cache_readahead (struct cache_set *c,struct bcache_device *d) -{ - struct cached_dev *dc = container_of(d, struct cached_dev, disk); - -atomic_inc (&dc->accounting.collector.cache_readaheads); -atomic_inc (&c->accounting.collector.cache_readaheads); -} -void bch_mark_cache_miss_collision (struct cache_set *c,struct bcache_device *d) { struct cached_dev *dc = container_of(d, struct cached_dev, disk);
drivers/md/bcache/stats.h +0 -1
@@ -7,7 +7,6 @@ struct cache_stat_collector {atomic_t cache_misses;atomic_t cache_bypass_hits;atomic_t cache_bypass_misses; -atomic_t cache_readaheads;atomic_t cache_miss_collisions;atomic_t sectors_bypassed; };
drivers/md/bcache/sysfs.c +0 -4
@@ -137,7 +137,6 @@ rw_attribute(io_disable);rw_attribute (discard);rw_attribute (running);rw_attribute (label); -rw_attribute (readahead);rw_attribute (errors);rw_attribute (io_error_limit);rw_attribute (io_error_halflife);
@@ -260,7 +259,6 @@ SHOW(__bch_cached_dev)var_printf (partial_stripes_expensive,"%u" );var_hprint (sequential_cutoff); -var_hprint (readahead);sysfs_print (running,atomic_read (&dc->running));sysfs_print (state, states[BDEV_STATE (&dc->sb)]);
@@ -365,7 +363,6 @@ STORE(__cached_dev)sysfs_strtoul_clamp (sequential_cutoff, dc->sequential_cutoff,0 ,UINT_MAX ); -d_strtoi_h (readahead);if (attr == &sysfs_clear_stats)bch_cache_accounting_clear (&dc->accounting);
@@ -538,7 +535,6 @@ static struct attribute *bch_cached_dev_files[] = { &sysfs_running, &sysfs_state, &sysfs_label, - &sysfs_readahead, #ifdef CONFIG_BCACHE_DEBUG &sysfs_verify, &sysfs_bypass_torture_test,
drivers/md/dm-verity-verify-sig.c +1 -1
@@ -15,7 +15,7 @@#define DM_VERITY_VERIFY_ERR (s) DM_VERITY_ROOT_HASH_VERIFICATION " " sstatic bool require_signatures; -module_param (require_signatures, bool, false); +module_param (require_signatures, bool,0444 );MODULE_PARM_DESC (require_signatures,"Verify the roothash of dm-verity hash tree" );
drivers/misc/cardreader/rtl8411.c +1 -0
@@ -468,6 +468,7 @@ static void rtl8411_init_common_params(struct rtsx_pcr *pcr) pcr->sd30_drive_sel_1v8 =DRIVER_TYPE_B ; pcr->sd30_drive_sel_3v3 =DRIVER_TYPE_D ; pcr->aspm_en =ASPM_L1_EN ; + pcr->aspm_mode =ASPM_MODE_CFG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (23 ,7 ,14 ); pcr->rx_initial_phase =SET_CLOCK_PHASE (4 ,3 ,10 ); pcr->ic_version =rtl8411_get_ic_version (pcr);
drivers/misc/cardreader/rts5209.c +1 -0
@@ -255,6 +255,7 @@ void rts5209_init_params(struct rtsx_pcr *pcr) pcr->sd30_drive_sel_1v8 =DRIVER_TYPE_B ; pcr->sd30_drive_sel_3v3 =DRIVER_TYPE_D ; pcr->aspm_en =ASPM_L1_EN ; + pcr->aspm_mode =ASPM_MODE_CFG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (27 ,27 ,16 ); pcr->rx_initial_phase =SET_CLOCK_PHASE (24 ,6 ,5 );
drivers/misc/cardreader/rts5227.c +2 -0
@@ -358,6 +358,7 @@ void rts5227_init_params(struct rtsx_pcr *pcr) pcr->sd30_drive_sel_1v8 =CFG_DRIVER_TYPE_B ; pcr->sd30_drive_sel_3v3 =CFG_DRIVER_TYPE_B ; pcr->aspm_en =ASPM_L1_EN ; + pcr->aspm_mode =ASPM_MODE_CFG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (27 ,27 ,15 ); pcr->rx_initial_phase =SET_CLOCK_PHASE (30 ,7 ,7 );
@@ -483,6 +484,7 @@ void rts522a_init_params(struct rtsx_pcr *pcr)rts5227_init_params (pcr); pcr->ops = &rts522a_pcr_ops; + pcr->aspm_mode =ASPM_MODE_REG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (20 ,20 ,11 ); pcr->reg_pm_ctrl3 =RTS522A_PM_CTRL3 ;
drivers/misc/cardreader/rts5228.c +1 -0
@@ -718,6 +718,7 @@ void rts5228_init_params(struct rtsx_pcr *pcr) pcr->sd30_drive_sel_1v8 =CFG_DRIVER_TYPE_B ; pcr->sd30_drive_sel_3v3 =CFG_DRIVER_TYPE_B ; pcr->aspm_en =ASPM_L1_EN ; + pcr->aspm_mode =ASPM_MODE_REG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (28 ,27 ,11 ); pcr->rx_initial_phase =SET_CLOCK_PHASE (24 ,6 ,5 );
drivers/misc/cardreader/rts5229.c +1 -0
@@ -246,6 +246,7 @@ void rts5229_init_params(struct rtsx_pcr *pcr) pcr->sd30_drive_sel_1v8 =DRIVER_TYPE_B ; pcr->sd30_drive_sel_3v3 =DRIVER_TYPE_D ; pcr->aspm_en =ASPM_L1_EN ; + pcr->aspm_mode =ASPM_MODE_CFG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (27 ,27 ,15 ); pcr->rx_initial_phase =SET_CLOCK_PHASE (30 ,6 ,6 );
drivers/misc/cardreader/rts5249.c +3 -0
@@ -566,6 +566,7 @@ void rts5249_init_params(struct rtsx_pcr *pcr) pcr->sd30_drive_sel_1v8 =CFG_DRIVER_TYPE_B ; pcr->sd30_drive_sel_3v3 =CFG_DRIVER_TYPE_B ; pcr->aspm_en =ASPM_L1_EN ; + pcr->aspm_mode =ASPM_MODE_CFG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (1 ,29 ,16 ); pcr->rx_initial_phase =SET_CLOCK_PHASE (24 ,6 ,5 );
@@ -729,6 +730,7 @@ static const struct pcr_ops rts524a_pcr_ops = {void rts524a_init_params (struct rtsx_pcr *pcr) {rts5249_init_params (pcr); + pcr->aspm_mode =ASPM_MODE_REG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (27 ,29 ,11 ); pcr->option.ltr_l1off_sspwrgate =LTR_L1OFF_SSPWRGATE_5250_DEF ; pcr->option.ltr_l1off_snooze_sspwrgate =
@@ -845,6 +847,7 @@ static const struct pcr_ops rts525a_pcr_ops = {void rts525a_init_params (struct rtsx_pcr *pcr) {rts5249_init_params (pcr); + pcr->aspm_mode =ASPM_MODE_REG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (25 ,29 ,11 ); pcr->option.ltr_l1off_sspwrgate =LTR_L1OFF_SSPWRGATE_5250_DEF ; pcr->option.ltr_l1off_snooze_sspwrgate =
drivers/misc/cardreader/rts5260.c +1 -0
@@ -628,6 +628,7 @@ void rts5260_init_params(struct rtsx_pcr *pcr) pcr->sd30_drive_sel_1v8 =CFG_DRIVER_TYPE_B ; pcr->sd30_drive_sel_3v3 =CFG_DRIVER_TYPE_B ; pcr->aspm_en =ASPM_L1_EN ; + pcr->aspm_mode =ASPM_MODE_REG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (27 ,29 ,11 ); pcr->rx_initial_phase =SET_CLOCK_PHASE (24 ,6 ,5 );
drivers/misc/cardreader/rts5261.c +1 -0
@@ -783,6 +783,7 @@ void rts5261_init_params(struct rtsx_pcr *pcr) pcr->sd30_drive_sel_1v8 =0x00 ; pcr->sd30_drive_sel_3v3 =0x00 ; pcr->aspm_en =ASPM_L1_EN ; + pcr->aspm_mode =ASPM_MODE_REG ; pcr->tx_initial_phase =SET_CLOCK_PHASE (27 ,27 ,11 ); pcr->rx_initial_phase =SET_CLOCK_PHASE (24 ,6 ,5 );
drivers/misc/cardreader/rtsx_pcr.c +31 -13
80 lines not on this page · raw message
drivers/mmc/host/renesas_sdhi_core.c +7 -2
@@ -679,14 +679,19 @@ static int renesas_sdhi_execute_tuning(struct mmc_host *mmc, u32 opcode)/* Issue CMD19 twice for each tap */ for (i =0 ; i <2 * priv->tap_num; i++) { +int cmd_error; +/* Set sampling clock position */ sd_scc_write32 (host, priv,SH_MOBILE_SDHI_SCC_TAPSET , i % priv->tap_num); -if (mmc_send_tuning (mmc, opcode,NULL ) ==0 ) +if (mmc_send_tuning (mmc, opcode, &cmd_error) ==0 )set_bit (i, priv->taps);if (sd_scc_read32 (host, priv,SH_MOBILE_SDHI_SCC_SMPCMP ) ==0 )set_bit (i, priv->smpcmp); + +if (cmd_error) +mmc_abort_tuning (mmc, opcode); } ret =renesas_sdhi_select_tuning (host);
@@ -926,7 +931,7 @@ static const struct soc_device_attribute sdhi_quirks_match[] = { { .soc_id = "r8a7795", .revision = "ES3.*", .data = &sdhi_quirks_bad_taps2367 }, { .soc_id = "r8a7796", .revision = "ES1.[012]", .data = &sdhi_quirks_4tap_nohs400 }, { .soc_id = "r8a7796", .revision = "ES1.*", .data = &sdhi_quirks_r8a7796_es13 }, - { .soc_id = "r8a7796", .revision = "ES3.*", .data = &sdhi_quirks_bad_taps1357 }, + { .soc_id = "r8a77961", .data = &sdhi_quirks_bad_taps1357 }, { .soc_id = "r8a77965", .data = &sdhi_quirks_r8a77965 }, { .soc_id = "r8a77980", .data = &sdhi_quirks_nohs400 }, { .soc_id = "r8a77990", .data = &sdhi_quirks_r8a77990 },
drivers/net/appletalk/cops.c +2 -2
@@ -327,6 +327,8 @@ static int __init cops_probe1(struct net_device *dev, int ioaddr)break ; } + dev->base_addr = ioaddr; +/* Reserve any actual interrupt. */ if (dev->irq) { retval =request_irq (dev->irq, cops_interrupt,0 , dev->name, dev);
@@ -334,8 +336,6 @@ static int __init cops_probe1(struct net_device *dev, int ioaddr) goto err_out; } - dev->base_addr = ioaddr; - lp =netdev_priv (dev);spin_lock_init (&lp->lock);
drivers/net/bonding/bond_main.c +1 -1
@@ -1526,6 +1526,7 @@ static struct slave *bond_alloc_slave(struct bonding *bond, slave->bond = bond; slave->dev = slave_dev; +INIT_DELAYED_WORK (&slave->notify_work, bond_netdev_notify_work);if (bond_kobj_init (slave))return NULL ;
@@ -1538,7 +1539,6 @@ static struct slave *bond_alloc_slave(struct bonding *bond,return NULL ; } } -INIT_DELAYED_WORK (&slave->notify_work, bond_netdev_notify_work);return slave; }
drivers/net/dsa/microchip/ksz9477.c +1 -0
@@ -1530,6 +1530,7 @@ static const struct ksz_chip_data ksz9477_switch_chips[] = { .num_statics = 16, .cpu_ports = 0x7F, /* can be configured as cpu port */ .port_cnt = 7, /* total physical port count */ + .phy_errata_9477 = true, }, };
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c +3 -1
@@ -1224,8 +1224,10 @@ int bnx2x_iov_init_one(struct bnx2x *bp, int int_mode_param, goto failed;/* SR-IOV capability was enabled but there are no VFs*/ -if (iov->total ==0 ) +if (iov->total ==0 ) { + err = -EINVAL ; goto failed; + } iov->nr_virtfn =min_t (u16, iov->total, num_vfs_param);
drivers/net/ethernet/cadence/macb_main.c +3 -0
@@ -2837,6 +2837,9 @@ static struct net_device_stats *gem_get_stats(struct macb *bp)struct gem_stats *hwstat = &bp->hw_stats.gem;struct net_device_stats *nstat = &bp->dev->stats; +if (!netif_running (bp->dev)) +return nstat; +gem_update_stats (bp); nstat->rx_errors = (hwstat->rx_frame_check_sequence_errors +
drivers/net/ethernet/mellanox/mlx4/fw.c +3 -0
@@ -823,6 +823,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)#define QUERY_DEV_CAP_MAD_DEMUX_OFFSET 0xb0#define QUERY_DEV_CAP_DMFS_HIGH_RATE_QPN_BASE_OFFSET 0xa8#define QUERY_DEV_CAP_DMFS_HIGH_RATE_QPN_RANGE_OFFSET 0xac +#define QUERY_DEV_CAP_MAP_CLOCK_TO_USER 0xc1#define QUERY_DEV_CAP_QP_RATE_LIMIT_NUM_OFFSET 0xcc#define QUERY_DEV_CAP_QP_RATE_LIMIT_MAX_OFFSET 0xd0#define QUERY_DEV_CAP_QP_RATE_LIMIT_MIN_OFFSET 0xd2
@@ -841,6 +842,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)if (mlx4_is_mfunc (dev))disable_unsupported_roce_caps (outbox); +MLX4_GET (field, outbox,QUERY_DEV_CAP_MAP_CLOCK_TO_USER ); + dev_cap->map_clock_to_user = field &0x80 ;MLX4_GET (field, outbox,QUERY_DEV_CAP_RSVD_QP_OFFSET ); dev_cap->reserved_qps =1 << (field &0xf );MLX4_GET (field, outbox,QUERY_DEV_CAP_MAX_QP_OFFSET );
drivers/net/ethernet/mellanox/mlx4/fw.h +1 -0
@@ -131,6 +131,7 @@ struct mlx4_dev_cap {u32 health_buffer_addrs;struct mlx4_port_cap port_cap[MLX4_MAX_PORTS +1 ];bool wol_port[MLX4_MAX_PORTS +1 ]; +bool map_clock_to_user; };struct mlx4_func_cap {
drivers/net/ethernet/mellanox/mlx4/main.c +6 -0
@@ -498,6 +498,7 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) } } + dev->caps.map_clock_to_user = dev_cap->map_clock_to_user; dev->caps.uar_page_size =PAGE_SIZE ; dev->caps.num_uars = dev_cap->uar_size /PAGE_SIZE ; dev->caps.local_ca_ack_delay = dev_cap->local_ca_ack_delay;
@@ -1948,6 +1949,11 @@ int mlx4_get_internal_clock_params(struct mlx4_dev *dev,if (mlx4_is_slave (dev))return -EOPNOTSUPP ; +if (!dev->caps.map_clock_to_user) { +mlx4_dbg (dev,"Map clock to user is not supported.\n" ); +return -EOPNOTSUPP ; + } +if (!params)return -EINVAL ;
drivers/net/ethernet/qlogic/qla3xxx.c +1 -1
@@ -114,7 +114,7 @@ static int ql_sem_spinlock(struct ql3_adapter *qdev, value =readl (&port_regs->CommonRegs.semaphoreReg);if ((value & (sem_mask >>16 )) == sem_bits)return 0 ; -ssleep (1 ); +mdelay (1000 ); }while (--seconds);return -1 ; }
drivers/net/ethernet/sfc/nic.c +1 -0
@@ -90,6 +90,7 @@ int efx_nic_init_interrupt(struct efx_nic *efx) efx->pci_dev->irq); goto fail1; } + efx->irqs_hooked = true;return 0 ; }
drivers/net/phy/mdio_bus.c +2 -1
@@ -607,7 +607,8 @@ void mdiobus_unregister(struct mii_bus *bus)struct mdio_device *mdiodev;int i; -BUG_ON (bus->state !=MDIOBUS_REGISTERED ); +if (WARN_ON_ONCE (bus->state !=MDIOBUS_REGISTERED )) +return ; bus->state =MDIOBUS_UNREGISTERED ;for (i =0 ; i <PHY_MAX_ADDR ; i++) {
drivers/nvme/host/Kconfig +2 -1
@@ -71,7 +71,8 @@ config NVME_FC config NVME_TCP tristate "NVM Express over Fabrics TCP host driver" depends on INET - depends on BLK_DEV_NVME + depends on BLOCK + select NVME_CORE select NVME_FABRICS select CRYPTO select CRYPTO_CRC32C
drivers/nvme/host/fabrics.c +5 -0
@@ -336,6 +336,11 @@ static void nvmf_log_connect_error(struct nvme_ctrl *ctrl, cmd->connect.recfmt);break ; +case NVME_SC_HOST_PATH_ERROR : +dev_err (ctrl->device, +"Connect command failed: host path error\n" ); +break ; +default : dev_err(ctrl->device, "Connect command failed, error wo/DNR bit: %d\n",
drivers/nvme/target/core.c +11 -4
@@ -388,10 +388,10 @@ static void nvmet_keep_alive_timer(struct work_struct *work) {struct nvmet_ctrl *ctrl =container_of (to_delayed_work (work), struct nvmet_ctrl, ka_work); -bool cmd_seen = ctrl->cmd_seen; +bool reset_tbkas = ctrl->reset_tbkas; - ctrl->cmd_seen = false; -if (cmd_seen) { + ctrl->reset_tbkas = false; +if (reset_tbkas) {pr_debug ("ctrl %d reschedule traffic based keep-alive timer\n" , ctrl->cntlid);schedule_delayed_work (&ctrl->ka_work, ctrl->kato *HZ );
@@ -804,6 +804,13 @@ void nvmet_sq_destroy(struct nvmet_sq *sq)percpu_ref_exit (&sq->ref);if (ctrl) { +/* +* The teardown flow may take some time, and the host may not +* send us keep-alive during this period, hence reset the +* traffic based keep-alive timer so we don't trigger a +* controller teardown as a result of a keep-alive expiration. +*/ + ctrl->reset_tbkas = true;nvmet_ctrl_put (ctrl); sq->ctrl =NULL ;/* allows reusing the queue later */ }
@@ -953,7 +960,7 @@ bool nvmet_req_init(struct nvmet_req *req, struct nvmet_cq *cq, }if (sq->ctrl) - sq->ctrl->cmd_seen = true; + sq->ctrl->reset_tbkas = true;return true;
drivers/nvme/target/nvmet.h +1 -1
@@ -166,7 +166,7 @@ struct nvmet_ctrl {struct nvmet_subsys *subsys;struct nvmet_sq **sqs; -bool cmd_seen; +bool reset_tbkas;struct mutex lock;u64 cap;
drivers/phy/broadcom/phy-brcm-usb-init.h +2 -2
@@ -78,7 +78,7 @@ static inline u32 brcm_usb_readl(void __iomem *addr)* Other architectures (e.g., ARM) either do not support big endian, or * else leave I/O in little endian mode. */ -if (IS_ENABLED (CONFIG_MIPS ) &&IS_ENABLED (__BIG_ENDIAN)) +if (IS_ENABLED (CONFIG_MIPS ) &&IS_ENABLED (CONFIG_CPU_BIG_ENDIAN ))return __raw_readl (addr);else return readl_relaxed (addr);
@@ -87,7 +87,7 @@ static inline u32 brcm_usb_readl(void __iomem *addr)static inline void brcm_usb_writel (u32 val,void __iomem *addr) {/* See brcmnand_readl() comments */ -if (IS_ENABLED (CONFIG_MIPS ) &&IS_ENABLED (__BIG_ENDIAN)) +if (IS_ENABLED (CONFIG_MIPS ) &&IS_ENABLED (CONFIG_CPU_BIG_ENDIAN ))__raw_writel (val, addr);else writel_relaxed (val, addr);
drivers/phy/cadence/phy-cadence-sierra.c +1 -0
@@ -612,6 +612,7 @@ static int cdns_sierra_phy_probe(struct platform_device *pdev) sp->nsubnodes = node;if (sp->num_lanes >SIERRA_MAX_LANES ) { + ret = -EINVAL ;dev_err (dev,"Invalid lane configuration\n" ); goto put_child2; }
drivers/phy/ti/phy-j721e-wiz.c +1 -0
@@ -894,6 +894,7 @@ static int wiz_probe(struct platform_device *pdev)if (wiz->typec_dir_delay <WIZ_TYPEC_DIR_DEBOUNCE_MIN || wiz->typec_dir_delay >WIZ_TYPEC_DIR_DEBOUNCE_MAX ) { + ret = -EINVAL ;dev_err (dev,"Invalid typec-dir-debounce property\n" ); goto err_addr_to_resource; }
drivers/pinctrl/qcom/Kconfig +1 -1
@@ -223,7 +223,7 @@ config PINCTRL_SC7280 config PINCTRL_SC8180X tristate "Qualcomm Technologies Inc SC8180x pin controller driver" depends on GPIOLIB && OF - select PINCTRL_MSM + depends on PINCTRL_MSM help This is the pinctrl, pinmux, pinconf and gpiolib driver for the Qualcomm Technologies Inc TLMM block found on the Qualcomm
drivers/pinctrl/qcom/pinctrl-sdx55.c +9 -9
@@ -410,15 +410,15 @@ static const char * const gpio_groups[] = {"gpio29" ,"gpio30" ,"gpio31" ,"gpio32" ,"gpio33" ,"gpio34" ,"gpio35" ,"gpio36" ,"gpio37" ,"gpio38" ,"gpio39" ,"gpio40" ,"gpio41" ,"gpio42" ,"gpio43" ,"gpio44" ,"gpio45" ,"gpio46" ,"gpio47" ,"gpio48" ,"gpio49" , -"gpio50" ,"gpio51" ,"gpio52" ,"gpio52" ,"gpio53" ,"gpio53" ,"gpio54" , -"gpio55" ,"gpio56" ,"gpio57" ,"gpio58" ,"gpio59" ,"gpio60" ,"gpio61" , -"gpio62" ,"gpio63" ,"gpio64" ,"gpio65" ,"gpio66" ,"gpio67" ,"gpio68" , -"gpio69" ,"gpio70" ,"gpio71" ,"gpio72" ,"gpio73" ,"gpio74" ,"gpio75" , -"gpio76" ,"gpio77" ,"gpio78" ,"gpio79" ,"gpio80" ,"gpio81" ,"gpio82" , -"gpio83" ,"gpio84" ,"gpio85" ,"gpio86" ,"gpio87" ,"gpio88" ,"gpio89" , -"gpio90" ,"gpio91" ,"gpio92" ,"gpio93" ,"gpio94" ,"gpio95" ,"gpio96" , -"gpio97" ,"gpio98" ,"gpio99" ,"gpio100" ,"gpio101" ,"gpio102" , - "gpio103", "gpio104", "gpio105", "gpio106", "gpio107", +"gpio50" ,"gpio51" ,"gpio52" ,"gpio53" ,"gpio54" ,"gpio55" ,"gpio56" , +"gpio57" ,"gpio58" ,"gpio59" ,"gpio60" ,"gpio61" ,"gpio62" ,"gpio63" , +"gpio64" ,"gpio65" ,"gpio66" ,"gpio67" ,"gpio68" ,"gpio69" ,"gpio70" , +"gpio71" ,"gpio72" ,"gpio73" ,"gpio74" ,"gpio75" ,"gpio76" ,"gpio77" , +"gpio78" ,"gpio79" ,"gpio80" ,"gpio81" ,"gpio82" ,"gpio83" ,"gpio84" , +"gpio85" ,"gpio86" ,"gpio87" ,"gpio88" ,"gpio89" ,"gpio90" ,"gpio91" , +"gpio92" ,"gpio93" ,"gpio94" ,"gpio95" ,"gpio96" ,"gpio97" ,"gpio98" , +"gpio99" ,"gpio100" ,"gpio101" ,"gpio102" ,"gpio103" ,"gpio104" , + "gpio105", "gpio106", "gpio107", }; static const char * const qdss_stm_groups[] = {
drivers/platform/surface/aggregator/controller.c +1 -1
@@ -1907,7 +1907,7 @@ static int ssam_ssh_event_disable(struct ssam_controller *ctrl, {int status; - status =__ssam_ssh_event_request (ctrl, reg, reg.cid_enable, id, flags); + status =__ssam_ssh_event_request (ctrl, reg, reg.cid_disable, id, flags);if (status <0 && status != -EINVAL ) { ssam_err(ctrl,
drivers/regulator/atc260x-regulator.c +10 -9
@@ -28,16 +28,16 @@ static const struct linear_range atc2609a_dcdc_voltage_ranges[] = {static const struct linear_range atc2609a_ldo_voltage_ranges0[] = {REGULATOR_LINEAR_RANGE (700000 ,0 ,15 ,100000 ), -REGULATOR_LINEAR_RANGE (2100000 ,16 ,28 ,100000 ), +REGULATOR_LINEAR_RANGE (2100000 ,0 ,12 ,100000 ), };static const struct linear_range atc2609a_ldo_voltage_ranges1[] = {REGULATOR_LINEAR_RANGE (850000 ,0 ,15 ,100000 ), -REGULATOR_LINEAR_RANGE (2100000 ,16 ,27 ,100000 ), +REGULATOR_LINEAR_RANGE (2100000 ,0 ,11 ,100000 ), };static const unsigned int atc260x_ldo_voltage_range_sel[] = { -0x0 ,0x1 , +0x0 ,0x20 , }; static int atc260x_dcdc_set_voltage_time_sel(struct regulator_dev *rdev,
@@ -411,7 +411,7 @@ enum atc2609a_reg_ids { .owner = THIS_MODULE, \ } -#define atc2609a_reg_desc_ldo_range_pick (num, n_range) { \ +#define atc2609a_reg_desc_ldo_range_pick (num, n_range, n_volt) { \ .name = "LDO"#num, \ .supply_name = "ldo"#num, \ .of_match = of_match_ptr("ldo"#num), \
@@ -421,6 +421,7 @@ enum atc2609a_reg_ids { .type = REGULATOR_VOLTAGE, \ .linear_ranges = atc2609a_ldo_voltage_ranges##n_range, \ .n_linear_ranges = ARRAY_SIZE(atc2609a_ldo_voltage_ranges##n_range), \ + .n_voltages = n_volt, \ .vsel_reg = ATC2609A_PMU_LDO##num##_CTL0, \ .vsel_mask = GENMASK(4, 1), \ .vsel_range_reg = ATC2609A_PMU_LDO##num##_CTL0, \
@@ -458,12 +459,12 @@ static const struct regulator_desc atc2609a_reg[] = {atc2609a_reg_desc_ldo_bypass (0 ),atc2609a_reg_desc_ldo_bypass (1 ),atc2609a_reg_desc_ldo_bypass (2 ), -atc2609a_reg_desc_ldo_range_pick (3 ,0 ), -atc2609a_reg_desc_ldo_range_pick (4 ,0 ), +atc2609a_reg_desc_ldo_range_pick (3 ,0 ,29 ), +atc2609a_reg_desc_ldo_range_pick (4 ,0 ,29 ),atc2609a_reg_desc_ldo (5 ), -atc2609a_reg_desc_ldo_range_pick (6 ,1 ), -atc2609a_reg_desc_ldo_range_pick (7 ,0 ), -atc2609a_reg_desc_ldo_range_pick (8 ,0 ), +atc2609a_reg_desc_ldo_range_pick (6 ,1 ,28 ), +atc2609a_reg_desc_ldo_range_pick (7 ,0 ,29 ), +atc2609a_reg_desc_ldo_range_pick (8 ,0 ,29 ), atc2609a_reg_desc_ldo_fixed(9), };
drivers/regulator/bd718x7-regulator.c +1 -1
@@ -364,7 +364,7 @@ BD718XX_OPS(bd71837_buck_regulator_ops, regulator_list_voltage_linear_range, NULL);BD718XX_OPS (bd71837_buck_regulator_nolinear_ops, regulator_list_voltage_table, - regulator_map_voltage_ascend, bd718xx_set_voltage_sel_restricted, + regulator_map_voltage_ascend, bd71837_set_voltage_sel_restricted, regulator_get_voltage_sel_regmap, regulator_set_voltage_time_sel,NULL );/*
drivers/regulator/core.c +6 -0
@@ -1422,6 +1422,12 @@ static int set_machine_constraints(struct regulator_dev *rdev)* and we have control then make sure it is enabled. */ if (rdev->constraints->always_on || rdev->constraints->boot_on) { +/* If we want to enable this regulator, make sure that we know +* the supplying regulator. +*/ +if (rdev->supply_name && !rdev->supply) +return -EPROBE_DEFER ; +if (rdev->supply) { ret =regulator_enable (rdev->supply);if (ret <0 ) {
drivers/regulator/da9121-regulator.c +7 -3
@@ -280,7 +280,7 @@ static unsigned int da9121_map_mode(unsigned int mode)case DA9121_BUCK_MODE_FORCE_PFM :return REGULATOR_MODE_STANDBY ;default : -return -EINVAL ; +return REGULATOR_MODE_INVALID ; } }
@@ -317,7 +317,7 @@ static unsigned int da9121_buck_get_mode(struct regulator_dev *rdev) {struct da9121 *chip =rdev_get_drvdata (rdev);int id =rdev_get_id (rdev); -unsigned int val; +unsigned int val, mode;int ret =0 ; ret =regmap_read (chip->regmap, da9121_mode_field[id].reg, &val);
@@ -326,7 +326,11 @@ static unsigned int da9121_buck_get_mode(struct regulator_dev *rdev)return -EINVAL ; } -return da9121_map_mode (val & da9121_mode_field[id].msk); + mode =da9121_map_mode (val & da9121_mode_field[id].msk); +if (mode ==REGULATOR_MODE_INVALID ) +return -EINVAL ; + +return mode; }static const struct regulator_ops da9121_buck_ops = {
drivers/regulator/fan53880.c +3 -0
@@ -51,6 +51,7 @@ static const struct regulator_ops fan53880_ops = { REGULATOR_LINEAR_RANGE(800000, 0xf, 0x73, 25000), \ }, \ .n_linear_ranges = 2, \ + .n_voltages = 0x74, \ .vsel_reg = FAN53880_LDO ## _num ## VOUT, \ .vsel_mask = 0x7f, \ .enable_reg = FAN53880_ENABLE, \
@@ -76,6 +77,7 @@ static const struct regulator_desc fan53880_regulators[] = { REGULATOR_LINEAR_RANGE(600000, 0x1f, 0xf7, 12500), }, .n_linear_ranges = 2, + .n_voltages = 0xf8, .vsel_reg = FAN53880_BUCKVOUT, .vsel_mask = 0x7f, .enable_reg = FAN53880_ENABLE,
@@ -95,6 +97,7 @@ static const struct regulator_desc fan53880_regulators[] = { REGULATOR_LINEAR_RANGE(3000000, 0x4, 0x70, 25000), }, .n_linear_ranges = 2, + .n_voltages = 0x71, .vsel_reg = FAN53880_BOOSTVOUT, .vsel_mask = 0x7f, .enable_reg = FAN53880_ENABLE_BOOST,
drivers/regulator/fixed.c +6 -1
@@ -88,10 +88,15 @@ static int reg_domain_disable(struct regulator_dev *rdev) {struct fixed_voltage_data *priv =rdev_get_drvdata (rdev);struct device *dev = rdev->dev.parent; +int ret; + + ret =dev_pm_genpd_set_performance_state (dev,0 ); +if (ret) +return ret; priv->enable_counter--; -return dev_pm_genpd_set_performance_state (dev,0 ); +return 0 ; }static int reg_is_enabled (struct regulator_dev *rdev)
drivers/regulator/max77620-regulator.c +7 -0
@@ -814,6 +814,13 @@ static int max77620_regulator_probe(struct platform_device *pdev) config.dev = dev; config.driver_data = pmic; +/* +* Set of_node_reuse flag to prevent driver core from attempting to +* claim any pinmux resources already claimed by the parent device. +* Otherwise PMIC driver will fail to re-probe. +*/ +device_set_of_node_from_dev (&pdev->dev, pdev->dev.parent); +for (id =0 ; id <MAX77620_NUM_REGS ; id++) {struct regulator_dev *rdev;struct regulator_desc *rdesc;
drivers/regulator/rtmv20-regulator.c +40 -2
49 lines not on this page · raw message
drivers/regulator/scmi-regulator.c +1 -1
@@ -176,7 +176,7 @@ scmi_config_linear_regulator_mappings(struct scmi_regulator *sreg, sreg->desc.uV_step = vinfo->levels_uv[SCMI_VOLTAGE_SEGMENT_STEP ]; sreg->desc.linear_min_sel =0 ; - sreg->desc.n_voltages = delta_uV / sreg->desc.uV_step; + sreg->desc.n_voltages = (delta_uV / sreg->desc.uV_step) +1 ; sreg->desc.ops = &scmi_reg_linear_ops; }
drivers/s390/cio/vfio_ccw_drv.c +10 -2
@@ -86,6 +86,7 @@ static void vfio_ccw_sch_io_todo(struct work_struct *work)struct vfio_ccw_private *private;struct irb *irb;bool is_final; +bool cp_is_finished = false; private = container_of(work, struct vfio_ccw_private, io_work); irb = &private->irb;
@@ -94,14 +95,21 @@ static void vfio_ccw_sch_io_todo(struct work_struct *work) (SCSW_ACTL_DEVACT | SCSW_ACTL_SCHACT));if (scsw_is_solicited (&irb->scsw)) {cp_update_scsw (&private->cp, &irb->scsw); -if (is_final && private->state ==VFIO_CCW_STATE_CP_PENDING ) +if (is_final && private->state ==VFIO_CCW_STATE_CP_PENDING ) {cp_free (&private->cp); + cp_is_finished = true; + } }mutex_lock (&private->io_mutex);memcpy (private->io_region->irb_area, irb,sizeof (*irb));mutex_unlock (&private->io_mutex); -if (private->mdev && is_final) +/* +* Reset to IDLE only if processing of a channel program +* has finished. Do not overwrite a possible processing +* state if the final interrupt was for HSCH or CSCH. +*/ +if (private->mdev && cp_is_finished) private->state =VFIO_CCW_STATE_IDLE ;if (private->io_trigger)
drivers/s390/cio/vfio_ccw_fsm.c +1 -0
@@ -318,6 +318,7 @@ static void fsm_io_request(struct vfio_ccw_private *private, } err_out: + private->state =VFIO_CCW_STATE_IDLE ;trace_vfio_ccw_fsm_io_request (scsw->cmd.fctl, schid, io_region->ret_code, errstr); }
drivers/s390/cio/vfio_ccw_ops.c +0 -2
@@ -276,8 +276,6 @@ static ssize_t vfio_ccw_mdev_write_io_region(struct vfio_ccw_private *private, }vfio_ccw_fsm_event (private,VFIO_CCW_EVENT_IO_REQ ); -if (region->ret_code !=0 ) - private->state =VFIO_CCW_STATE_IDLE ; ret = (region->ret_code !=0 ) ? region->ret_code : count; out_unlock:
drivers/scsi/bnx2fc/bnx2fc_io.c +1 -0
@@ -1220,6 +1220,7 @@ int bnx2fc_eh_abort(struct scsi_cmnd *sc_cmd)was a result from the ABTS request rather than the CLEANUP request */ set_bit (BNX2FC_FLAG_IO_CLEANUP , &io_req->req_flags); + rc =FAILED ; goto done; }
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +4 -4
@@ -4799,14 +4799,14 @@ hisi_sas_v3_destroy_irqs(struct pci_dev *pdev, struct hisi_hba *hisi_hba) {int i; -free_irq (pci_irq_vector (pdev,1 ), hisi_hba); -free_irq (pci_irq_vector (pdev,2 ), hisi_hba); -free_irq (pci_irq_vector (pdev,11 ), hisi_hba); +devm_free_irq (&pdev->dev,pci_irq_vector (pdev,1 ), hisi_hba); +devm_free_irq (&pdev->dev,pci_irq_vector (pdev,2 ), hisi_hba); +devm_free_irq (&pdev->dev,pci_irq_vector (pdev,11 ), hisi_hba);for (i =0 ; i < hisi_hba->cq_nvecs; i++) {struct hisi_sas_cq *cq = &hisi_hba->cq[i];int nr = hisi_sas_intr_conv ?16 :16 + i; -free_irq (pci_irq_vector (pdev, nr), cq); +devm_free_irq (&pdev->dev,pci_irq_vector (pdev, nr), cq); }pci_free_irq_vectors (pdev); }
drivers/scsi/hosts.c +26 -21
110 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_target.c +2 -0
@@ -1558,10 +1558,12 @@ void qlt_stop_phase2(struct qla_tgt *tgt)return ; } +mutex_lock (&tgt->ha->optrom_mutex);mutex_lock (&vha->vha_tgt.tgt_mutex); tgt->tgt_stop =0 ; tgt->tgt_stopped =1 ;mutex_unlock (&vha->vha_tgt.tgt_mutex); +mutex_unlock (&tgt->ha->optrom_mutex);ql_dbg (ql_dbg_tgt_mgt, vha,0xf00c ,"Stop of tgt %p finished\n" , tgt);
drivers/scsi/vmw_pvscsi.c +7 -1
@@ -585,7 +585,13 @@ static void pvscsi_complete_request(struct pvscsi_adapter *adapter,case BTSTAT_SUCCESS :case BTSTAT_LINKED_COMMAND_COMPLETED :case BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG : -/* If everything went fine, let's move on.. */ +/* +* Commands like INQUIRY may transfer less data than +* requested by the initiator via bufflen. Set residual +* count to make upper layer aware of the actual amount +* of data returned. +*/ +scsi_set_resid (cmd,scsi_bufflen (cmd) - e->dataLen); cmd->result = (DID_OK <<16 );break ;
drivers/spi/spi-bcm2835.c +8 -2
@@ -68,7 +68,7 @@#define BCM2835_SPI_FIFO_SIZE 64#define BCM2835_SPI_FIFO_SIZE_3_4 48#define BCM2835_SPI_DMA_MIN_LENGTH 96 -#define BCM2835_SPI_NUM_CS 4/* raise as necessary */ +#define BCM2835_SPI_NUM_CS 24/* raise as necessary */ #define BCM2835_SPI_MODE_BITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \ | SPI_NO_CS | SPI_3WIRE)
@@ -1195,6 +1195,12 @@ static int bcm2835_spi_setup(struct spi_device *spi)struct gpio_chip *chip;u32 cs; +if (spi->chip_select >=BCM2835_SPI_NUM_CS ) { +dev_err (&spi->dev,"only %d chip-selects supported\n" , +BCM2835_SPI_NUM_CS -1 ); +return -EINVAL ; + } +/* * Precalculate SPI slave's CS register value for ->prepare_message(): * The driver always uses software-controlled GPIO chip select, hence
@@ -1288,7 +1294,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev) ctlr->use_gpio_descriptors = true; ctlr->mode_bits =BCM2835_SPI_MODE_BITS ; ctlr->bits_per_word_mask =SPI_BPW_MASK (8 ); - ctlr->num_chipselect =BCM2835_SPI_NUM_CS ; + ctlr->num_chipselect =3 ; ctlr->setup = bcm2835_spi_setup; ctlr->transfer_one = bcm2835_spi_transfer_one; ctlr->handle_err = bcm2835_spi_handle_err;
drivers/spi/spi-bitbang.c +14 -4
@@ -181,6 +181,8 @@ int spi_bitbang_setup(struct spi_device *spi) {struct spi_bitbang_cs *cs = spi->controller_state;struct spi_bitbang *bitbang; +bool initial_setup = false; +int retval; bitbang =spi_master_get_devdata (spi->master);
@@ -189,22 +191,30 @@ int spi_bitbang_setup(struct spi_device *spi)if (!cs)return -ENOMEM ; spi->controller_state = cs; + initial_setup = true; }/* per-word shift register access, in hardware or bitbanging */ cs->txrx_word = bitbang->txrx_word[spi->mode & (SPI_CPOL |SPI_CPHA )]; -if (!cs->txrx_word) -return -EINVAL ; +if (!cs->txrx_word) { + retval = -EINVAL ; + goto err_free; + }if (bitbang->setup_transfer) { -int retval = bitbang->setup_transfer (spi,NULL ); + retval = bitbang->setup_transfer (spi,NULL );if (retval <0 ) -return retval; + goto err_free; }dev_dbg (&spi->dev,"%s, %u nsec/bit\n" , __func__,2 * cs->nsecs);return 0 ; + +err_free: +if (initial_setup) +kfree (cs); +return retval; }EXPORT_SYMBOL_GPL (spi_bitbang_setup);
drivers/spi/spi-fsl-spi.c +4 -0
@@ -440,6 +440,7 @@ static int fsl_spi_setup(struct spi_device *spi) {struct mpc8xxx_spi *mpc8xxx_spi;struct fsl_spi_reg __iomem *reg_base; +bool initial_setup = false;int retval;u32 hw_mode;struct spi_mpc8xxx_cs *cs =spi_get_ctldata (spi);
@@ -452,6 +453,7 @@ static int fsl_spi_setup(struct spi_device *spi)if (!cs)return -ENOMEM ;spi_set_ctldata (spi, cs); + initial_setup = true; } mpc8xxx_spi =spi_master_get_devdata (spi->master);
@@ -475,6 +477,8 @@ static int fsl_spi_setup(struct spi_device *spi) retval =fsl_spi_setup_transfer (spi,NULL );if (retval <0 ) { cs->hw_mode = hw_mode;/* Restore settings */ +if (initial_setup) +kfree (cs);return retval; }
drivers/spi/spi-omap-uwire.c +8 -1
@@ -424,15 +424,22 @@ static int uwire_setup_transfer(struct spi_device *spi, struct spi_transfer *t)static int uwire_setup (struct spi_device *spi) {struct uwire_state *ust = spi->controller_state; +bool initial_setup = false; +int status;if (ust ==NULL ) { ust =kzalloc (sizeof (*ust),GFP_KERNEL );if (ust ==NULL )return -ENOMEM ; spi->controller_state = ust; + initial_setup = true; } -return uwire_setup_transfer (spi,NULL ); + status =uwire_setup_transfer (spi,NULL ); +if (status && initial_setup) +kfree (ust); + +return status; }static void uwire_cleanup (struct spi_device *spi)
drivers/spi/spi-omap2-mcspi.c +20 -13
@@ -1032,8 +1032,22 @@ static void omap2_mcspi_release_dma(struct spi_master *master) } } +static void omap2_mcspi_cleanup (struct spi_device *spi) +{ +struct omap2_mcspi_cs *cs; + +if (spi->controller_state) { +/* Unlink controller state from context save list */ + cs = spi->controller_state; +list_del (&cs->node); + +kfree (cs); + } +} +static int omap2_mcspi_setup (struct spi_device *spi) { +bool initial_setup = false;int ret;struct omap2_mcspi *mcspi =spi_master_get_devdata (spi->master);struct omap2_mcspi_regs *ctx = &mcspi->ctx;
@@ -1051,35 +1065,28 @@ static int omap2_mcspi_setup(struct spi_device *spi) spi->controller_state = cs;/* Link this to context save list */ list_add_tail (&cs->node, &ctx->cs); + initial_setup = true; } ret =pm_runtime_get_sync (mcspi->dev);if (ret <0 ) {pm_runtime_put_noidle (mcspi->dev); +if (initial_setup) +omap2_mcspi_cleanup (spi);return ret; } ret =omap2_mcspi_setup_transfer (spi,NULL ); +if (ret && initial_setup) +omap2_mcspi_cleanup (spi); +pm_runtime_mark_last_busy (mcspi->dev);pm_runtime_put_autosuspend (mcspi->dev);return ret; } -static void omap2_mcspi_cleanup (struct spi_device *spi) -{ -struct omap2_mcspi_cs *cs; - -if (spi->controller_state) { -/* Unlink controller state from context save list */ - cs = spi->controller_state; -list_del (&cs->node); - -kfree (cs); - } -} -static irqreturn_t omap2_mcspi_irq_handler (int irq,void *data) {struct omap2_mcspi *mcspi = data;
drivers/spi/spi-pxa2xx.c +8 -1
@@ -1254,6 +1254,8 @@ static int setup_cs(struct spi_device *spi, struct chip_data *chip, chip->gpio_cs_inverted = spi->mode &SPI_CS_HIGH ; err =gpiod_direction_output (gpiod, !chip->gpio_cs_inverted); +if (err) +gpiod_put (chip->gpiod_cs); }return err;
@@ -1267,6 +1269,7 @@ static int setup(struct spi_device *spi)struct driver_data *drv_data =spi_controller_get_devdata (spi->controller);uint tx_thres, tx_hi_thres, rx_thres; +int err;switch (drv_data->ssp_type) {case QUARK_X1000_SSP :
@@ -1413,7 +1416,11 @@ static int setup(struct spi_device *spi)if (drv_data->ssp_type ==CE4100_SSP )return 0 ; -return setup_cs (spi, chip, chip_info); + err =setup_cs (spi, chip, chip_info); +if (err) +kfree (chip); + +return err; }static void cleanup (struct spi_device *spi)
drivers/spi/spi-sprd.c +1 -0
@@ -1068,6 +1068,7 @@ static const struct of_device_id sprd_spi_of_match[] = { { .compatible = "sprd,sc9860-spi", }, {/* sentinel */ } }; +MODULE_DEVICE_TABLE (of, sprd_spi_of_match);static struct platform_driver sprd_spi_driver = { .driver = {
drivers/spi/spi-zynq-qspi.c +3 -4
@@ -528,18 +528,17 @@ static int zynq_qspi_exec_mem_op(struct spi_mem *mem,struct zynq_qspi *xqspi =spi_controller_get_devdata (mem->spi->master);int err =0 , i;u8 *tmpbuf; -u8 opcode = op->cmd.opcode;dev_dbg (xqspi->dev,"cmd:%#x mode:%d.%d.%d.%d\n" , - opcode, op->cmd.buswidth, op->addr.buswidth, + op->cmd.opcode, op->cmd.buswidth, op->addr.buswidth, op->dummy.buswidth, op->data.buswidth);zynq_qspi_chipselect (mem->spi, true);zynq_qspi_config_op (xqspi, mem->spi); -if (op->cmd.nbytes) { +if (op->cmd.opcode) {reinit_completion (&xqspi->data_completion); - xqspi->txbuf = &opcode; + xqspi->txbuf = (u8 *)&op->cmd.opcode; xqspi->rxbuf =NULL ; xqspi->tx_bytes = op->cmd.nbytes; xqspi->rx_bytes = op->cmd.nbytes;
drivers/spi/spi.c +13 -7
@@ -47,10 +47,6 @@ static void spidev_release(struct device *dev) {struct spi_device *spi =to_spi_device (dev); -/* spi controllers may cleanup for released devices */ -if (spi->controller->cleanup) - spi->controller->cleanup (spi); -spi_controller_put (spi->controller);kfree (spi->driver_override);kfree (spi);
@@ -558,6 +554,12 @@ static int spi_dev_check(struct device *dev, void *data)return 0 ; } +static void spi_cleanup (struct spi_device *spi) +{ +if (spi->controller->cleanup) + spi->controller->cleanup (spi); +} +/** * spi_add_device - Add spi_device allocated with spi_alloc_device * @spi: spi_device to register
@@ -622,11 +624,13 @@ int spi_add_device(struct spi_device *spi)/* Device may be bound to an active driver when this returns */ status =device_add (&spi->dev); -if (status <0 ) +if (status <0 ) {dev_err (dev,"can't add %s, status %d\n" ,dev_name (&spi->dev), status); -else +spi_cleanup (spi); + }else {dev_dbg (dev,"registered child %s\n" ,dev_name (&spi->dev)); + } done:mutex_unlock (&spi_add_lock);
@@ -719,7 +723,9 @@ void spi_unregister_device(struct spi_device *spi) }if (ACPI_COMPANION (&spi->dev))acpi_device_clear_enumerated (ACPI_COMPANION (&spi->dev)); -device_unregister (&spi->dev); +device_del (&spi->dev); +spi_cleanup (spi); +put_device (&spi->dev); }EXPORT_SYMBOL_GPL (spi_unregister_device);
drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c +1 -1
@@ -2359,7 +2359,7 @@ void rtw_cfg80211_indicate_sta_assoc(struct adapter *padapter, u8 *pmgmt_frame,DBG_871X (FUNC_ADPT_FMT "\n" ,FUNC_ADPT_ARG (padapter)); { -struct station_info sinfo; +struct station_info sinfo = {};u8 ie_offset;if (GetFrameSubType (pmgmt_frame) ==WIFI_ASSOCREQ ) ie_offset = _ASOCREQ_IE_OFFSET_;
drivers/usb/cdns3/cdns3-gadget.c +6 -6
@@ -2006,7 +2006,7 @@ static void cdns3_configure_dmult(struct cdns3_device *priv_dev,else mask =BIT (priv_ep->num); -if (priv_ep->type !=USB_ENDPOINT_XFER_ISOC ) { +if (priv_ep->type !=USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) {cdns3_set_register_bit (®s->tdl_from_trb, mask);cdns3_set_register_bit (®s->tdl_beh, mask);cdns3_set_register_bit (®s->tdl_beh2, mask);
@@ -2045,15 +2045,13 @@ int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable)case USB_ENDPOINT_XFER_INT : ep_cfg =EP_CFG_EPTYPE (USB_ENDPOINT_XFER_INT ); -if ((priv_dev->dev_ver ==DEV_VER_V2 && !priv_ep->dir) || - priv_dev->dev_ver >DEV_VER_V2 ) +if (priv_dev->dev_ver >=DEV_VER_V2 && !priv_ep->dir) ep_cfg |=EP_CFG_TDL_CHK ;break ;case USB_ENDPOINT_XFER_BULK : ep_cfg =EP_CFG_EPTYPE (USB_ENDPOINT_XFER_BULK ); -if ((priv_dev->dev_ver ==DEV_VER_V2 && !priv_ep->dir) || - priv_dev->dev_ver >DEV_VER_V2 ) +if (priv_dev->dev_ver >=DEV_VER_V2 && !priv_ep->dir) ep_cfg |=EP_CFG_TDL_CHK ;break ;default :
@@ -3255,8 +3253,10 @@ static int __cdns3_gadget_init(struct cdns *cdns)pm_runtime_get_sync (cdns->dev); ret =cdns3_gadget_start (cdns); -if (ret) +if (ret) { +pm_runtime_put_sync (cdns->dev);return ret; + }/* * Because interrupt line can be shared with other components in
drivers/usb/cdns3/cdnsp-ring.c +4 -3
@@ -1517,13 +1517,14 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data) {struct cdnsp_device *pdev = (struct cdnsp_device *)data;union cdnsp_trb *event_ring_deq; +unsigned long flags;int counter =0 ; -spin_lock (&pdev->lock); +spin_lock_irqsave (&pdev->lock, flags);if (pdev->cdnsp_state & (CDNSP_STATE_HALTED |CDNSP_STATE_DYING )) {cdnsp_died (pdev); -spin_unlock (&pdev->lock); +spin_unlock_irqrestore (&pdev->lock, flags);return IRQ_HANDLED ; }
@@ -1539,7 +1540,7 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data)cdnsp_update_erst_dequeue (pdev, event_ring_deq,1 ); -spin_unlock (&pdev->lock); +spin_unlock_irqrestore (&pdev->lock, flags);return IRQ_HANDLED ; }
drivers/usb/chipidea/udc.c +1 -0
@@ -2061,6 +2061,7 @@ static int udc_start(struct ci_hdrc *ci) ci->gadget.name = ci->platdata->name; ci->gadget.otg_caps = otg_caps; ci->gadget.sg_supported =1 ; + ci->gadget.irq = ci->irq;if (ci->platdata->flags &CI_HDRC_REQUIRES_ALIGNED_DMA ) ci->gadget.quirk_avoids_skb_reserve =1 ;
drivers/usb/dwc3/dwc3-meson-g12a.c +10 -3
@@ -651,7 +651,7 @@ static int dwc3_meson_g12a_setup_regmaps(struct dwc3_meson_g12a *priv,return PTR_ERR (priv->usb_glue_regmap);/* Create a regmap for each USB2 PHY control register set */ -for (i =0 ; i < priv->usb2_ports; i++) { +for (i =0 ; i < priv->drvdata->num_phys; i++) {struct regmap_config u2p_regmap_config = { .reg_bits =8 , .val_bits =32 ,
@@ -659,6 +659,9 @@ static int dwc3_meson_g12a_setup_regmaps(struct dwc3_meson_g12a *priv, .max_register = U2P_R1, }; +if (!strstr (priv->drvdata->phy_names[i],"usb2" )) +continue ; + u2p_regmap_config.name =devm_kasprintf (priv->dev,GFP_KERNEL ,"u2p-%d" , i);if (!u2p_regmap_config.name)
@@ -772,13 +775,13 @@ static int dwc3_meson_g12a_probe(struct platform_device *pdev) ret = priv->drvdata->usb_init (priv);if (ret) - goto err_disable_clks; + goto err_disable_regulator;/* Init PHYs */ for (i =0 ; i <PHY_COUNT ; ++i) { ret =phy_init (priv->phys[i]);if (ret) - goto err_disable_clks; + goto err_disable_regulator; }/* Set PHY Power */
@@ -816,6 +819,10 @@ static int dwc3_meson_g12a_probe(struct platform_device *pdev)for (i =0 ; i <PHY_COUNT ; ++i)phy_exit (priv->phys[i]); +err_disable_regulator: +if (priv->vbus) +regulator_disable (priv->vbus); + err_disable_clks:clk_bulk_disable_unprepare (priv->drvdata->num_clks, priv->drvdata->clks);
drivers/usb/dwc3/ep0.c +3 -0
@@ -292,6 +292,9 @@ static struct dwc3_ep *dwc3_wIndex_to_dep(struct dwc3 *dwc, __le16 wIndex_le) epnum |=1 ; dep = dwc->eps[epnum]; +if (dep ==NULL ) +return NULL ; +if (dep->flags &DWC3_EP_ENABLED )return dep;
drivers/usb/dwc3/gadget.c +9 -6
@@ -2240,13 +2240,10 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) }/* -* Synchronize any pending event handling before executing the controller -* halt routine. +* Synchronize and disable any further event handling while controller +* is being enabled/disabled. */ -if (!is_on) { -dwc3_gadget_disable_irq (dwc); -synchronize_irq (dwc->irq_gadget); - } +disable_irq (dwc->irq_gadget);spin_lock_irqsave (&dwc->lock, flags);
@@ -2284,6 +2281,8 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) ret =dwc3_gadget_run_stop (dwc, is_on, false);spin_unlock_irqrestore (&dwc->lock, flags); +enable_irq (dwc->irq_gadget); +pm_runtime_put (dwc->dev);return ret;
@@ -4012,6 +4011,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)dwc3_gadget_free_endpoints (dwc); err4:usb_put_gadget (dwc->gadget); + dwc->gadget =NULL ; err3:dma_free_coherent (dwc->sysdev,DWC3_BOUNCE_SIZE , dwc->bounce, dwc->bounce_addr);
@@ -4031,6 +4031,9 @@ int dwc3_gadget_init(struct dwc3 *dwc)void dwc3_gadget_exit (struct dwc3 *dwc) { +if (!dwc->gadget) +return ; +usb_del_gadget (dwc->gadget);dwc3_gadget_free_endpoints (dwc);usb_put_gadget (dwc->gadget);
drivers/usb/gadget/config.c +8 -0
@@ -164,6 +164,14 @@ int usb_assign_descriptors(struct usb_function *f, {struct usb_gadget *g = f->config->cdev->gadget; +/* super-speed-plus descriptor falls back to super-speed one, +* if such a descriptor was provided, thus avoiding a NULL +* pointer dereference if a 5gbps capable gadget is used with +* a 10gbps capable config (device port + cable + host port) +*/ +if (!ssp) + ssp = ss; +if (fs) { f->fs_descriptors =usb_copy_descriptors (fs);if (!f->fs_descriptors)
drivers/usb/gadget/function/f_ecm.c +1 -1
@@ -791,7 +791,7 @@ ecm_bind(struct usb_configuration *c, struct usb_function *f) fs_ecm_notify_desc.bEndpointAddress; status =usb_assign_descriptors (f, ecm_fs_function, ecm_hs_function, - ecm_ss_function,NULL ); + ecm_ss_function, ecm_ss_function);if (status) goto fail;
drivers/usb/gadget/function/f_eem.c +3 -3
@@ -302,7 +302,7 @@ static int eem_bind(struct usb_configuration *c, struct usb_function *f) eem_ss_out_desc.bEndpointAddress = eem_fs_out_desc.bEndpointAddress; status =usb_assign_descriptors (f, eem_fs_function, eem_hs_function, - eem_ss_function,NULL ); + eem_ss_function, eem_ss_function);if (status) goto fail;
@@ -495,7 +495,7 @@ static int eem_unwrap(struct gether *port, skb2 =skb_clone (skb,GFP_ATOMIC );if (unlikely (!skb2)) {DBG (cdev,"unable to unframe EEM packet\n" ); -continue ; + goto next; }skb_trim (skb2, len -ETH_FCS_LEN );
@@ -505,7 +505,7 @@ static int eem_unwrap(struct gether *port, GFP_ATOMIC);if (unlikely (!skb3)) {dev_kfree_skb_any (skb2); -continue ; + goto next; }dev_kfree_skb_any (skb2);skb_queue_tail (list, skb3);
drivers/usb/gadget/function/f_fs.c +3 -0
@@ -3567,6 +3567,9 @@ static void ffs_func_unbind(struct usb_configuration *c, ffs->func =NULL ; } +/* Drain any pending AIO completions */ +drain_workqueue (ffs->io_completion_wq); +if (!--opts->refcnt)functionfs_unbind (ffs);
drivers/usb/gadget/function/f_hid.c +2 -1
@@ -802,7 +802,8 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f) hidg_fs_out_ep_desc.bEndpointAddress; status =usb_assign_descriptors (f, hidg_fs_descriptors, - hidg_hs_descriptors, hidg_ss_descriptors,NULL ); + hidg_hs_descriptors, hidg_ss_descriptors, + hidg_ss_descriptors);if (status) goto fail;
drivers/usb/gadget/function/f_loopback.c +1 -1
@@ -207,7 +207,7 @@ static int loopback_bind(struct usb_configuration *c, struct usb_function *f) ss_loop_sink_desc.bEndpointAddress = fs_loop_sink_desc.bEndpointAddress; ret =usb_assign_descriptors (f, fs_loopback_descs, hs_loopback_descs, - ss_loopback_descs,NULL ); + ss_loopback_descs, ss_loopback_descs);if (ret)return ret;
drivers/usb/gadget/function/f_ncm.c +5 -5
@@ -583,7 +583,7 @@ static void ncm_do_notify(struct f_ncm *ncm) data[0 ] =cpu_to_le32 (ncm_bitrate (cdev->gadget)); data[1 ] = data[0 ]; -DBG (cdev,"notify speed %d\n" ,ncm_bitrate (cdev->gadget)); +DBG (cdev,"notify speed %u\n" ,ncm_bitrate (cdev->gadget)); ncm->notify_state =NCM_NOTIFY_CONNECT ;break ; }
@@ -1101,11 +1101,11 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port, ncm->ndp_dgram_count =1 ;/* Note: we skip opts->next_ndp_index */ - } -/* Delay the timer. */ -hrtimer_start (&ncm->task_timer,TX_TIMEOUT_NSECS , -HRTIMER_MODE_REL_SOFT ); +/* Start the timer. */ +hrtimer_start (&ncm->task_timer,TX_TIMEOUT_NSECS , +HRTIMER_MODE_REL_SOFT ); + }/* Add the datagram position entries */ ntb_ndp =skb_put_zero (ncm->skb_tx_ndp, dgram_idx_len);
drivers/usb/gadget/function/f_printer.c +2 -1
@@ -1101,7 +1101,8 @@ static int printer_func_bind(struct usb_configuration *c, ss_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress; ret =usb_assign_descriptors (f, fs_printer_function, - hs_printer_function, ss_printer_function,NULL ); + hs_printer_function, ss_printer_function, + ss_printer_function);if (ret)return ret;
drivers/usb/gadget/function/f_rndis.c +1 -1
@@ -789,7 +789,7 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f) ss_notify_desc.bEndpointAddress = fs_notify_desc.bEndpointAddress; status =usb_assign_descriptors (f, eth_fs_function, eth_hs_function, - eth_ss_function,NULL ); + eth_ss_function, eth_ss_function);if (status) goto fail;
drivers/usb/gadget/function/f_serial.c +1 -1
@@ -233,7 +233,7 @@ static int gser_bind(struct usb_configuration *c, struct usb_function *f) gser_ss_out_desc.bEndpointAddress = gser_fs_out_desc.bEndpointAddress; status =usb_assign_descriptors (f, gser_fs_function, gser_hs_function, - gser_ss_function,NULL ); + gser_ss_function, gser_ss_function);if (status) goto fail; dev_dbg(&cdev->gadget->dev, "generic ttyGS%d: %s speed IN/%s OUT/%s\n",
drivers/usb/gadget/function/f_sourcesink.c +2 -1
@@ -431,7 +431,8 @@ sourcesink_bind(struct usb_configuration *c, struct usb_function *f) ss_iso_sink_desc.bEndpointAddress = fs_iso_sink_desc.bEndpointAddress; ret =usb_assign_descriptors (f, fs_source_sink_descs, - hs_source_sink_descs, ss_source_sink_descs,NULL ); + hs_source_sink_descs, ss_source_sink_descs, + ss_source_sink_descs);if (ret)return ret;
drivers/usb/gadget/function/f_subset.c +1 -1
@@ -358,7 +358,7 @@ geth_bind(struct usb_configuration *c, struct usb_function *f) fs_subset_out_desc.bEndpointAddress; status =usb_assign_descriptors (f, fs_eth_function, hs_eth_function, - ss_eth_function,NULL ); + ss_eth_function, ss_eth_function);if (status) goto fail;
drivers/usb/gadget/function/f_tcm.c +2 -1
@@ -2061,7 +2061,8 @@ static int tcm_bind(struct usb_configuration *c, struct usb_function *f) uasp_fs_cmd_desc.bEndpointAddress = uasp_ss_cmd_desc.bEndpointAddress; ret =usb_assign_descriptors (f, uasp_fs_function_desc, - uasp_hs_function_desc, uasp_ss_function_desc,NULL ); + uasp_hs_function_desc, uasp_ss_function_desc, + uasp_ss_function_desc);if (ret) goto ep_fail;
drivers/usb/host/xhci-pci.c +6 -1
@@ -59,6 +59,7 @@#define PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI 0x1138#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_XHCI 0x461e +#define PCI_DEVICE_ID_AMD_RENOIR_XHCI 0x1639#define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9#define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba#define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb
@@ -182,6 +183,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_1))) xhci->quirks |= XHCI_U2_DISABLE_WAKE; +if (pdev->vendor ==PCI_VENDOR_ID_AMD && + pdev->device ==PCI_DEVICE_ID_AMD_RENOIR_XHCI ) + xhci->quirks |=XHCI_BROKEN_D3COLD ; +if (pdev->vendor ==PCI_VENDOR_ID_INTEL ) { xhci->quirks |=XHCI_LPM_SUPPORT ; xhci->quirks |=XHCI_INTEL_HOST ;
@@ -539,7 +544,7 @@ static int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)* Systems with the TI redriver that loses port status change events * need to have the registers polled during D3, so avoid D3cold. */ -if (xhci->quirks &XHCI_COMP_MODE_QUIRK ) +if (xhci->quirks & (XHCI_COMP_MODE_QUIRK |XHCI_BROKEN_D3COLD ))pci_d3cold_disable (pdev);if (xhci->quirks &XHCI_PME_STUCK_QUIRK )
drivers/usb/host/xhci.h +1 -0
@@ -1892,6 +1892,7 @@ struct xhci_hcd {#define XHCI_DISABLE_SPARSE BIT_ULL(38)#define XHCI_SG_TRB_CACHE_SIZE_QUIRK BIT_ULL(39)#define XHCI_NO_SOFT_RETRY BIT_ULL(40) +#define XHCI_BROKEN_D3COLD BIT_ULL(41)unsigned int num_active_eps;unsigned int limit_active_eps;
drivers/usb/misc/brcmstb-usb-pinmap.c +2 -0
@@ -263,6 +263,8 @@ static int __init brcmstb_usb_pinmap_probe(struct platform_device *pdev)return -EINVAL ; r =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!r) +return -EINVAL ; pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata) +
drivers/usb/musb/musb_core.c +1 -2
@@ -2009,9 +2009,8 @@ static void musb_pm_runtime_check_session(struct musb *musb)schedule_delayed_work (&musb->irq_work,msecs_to_jiffies (1000 )); musb->quirk_retries--; -break ; } - fallthrough; +break ;case MUSB_QUIRK_B_INVALID_VBUS_91 :if (musb->quirk_retries && !musb->flush_irq_work) { musb_dbg(musb,
drivers/usb/serial/cp210x.c +78 -6
149 lines not on this page · raw message
drivers/usb/serial/ftdi_sio.c +1 -0
@@ -611,6 +611,7 @@ static const struct usb_device_id id_table_combined[] = { .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLX_PLUS_PID) }, { USB_DEVICE(FTDI_VID, FTDI_NT_ORION_IO_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONMX_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CUSTOMWARE_MINIPLEX2_PID) },
drivers/usb/serial/ftdi_sio_ids.h +1 -0
@@ -581,6 +581,7 @@#define FTDI_NT_ORIONLXM_PID 0x7c90/* OrionLXm Substation Automation Platform */ #define FTDI_NT_ORIONLX_PLUS_PID 0x7c91/* OrionLX+ Substation Automation Platform */ #define FTDI_NT_ORION_IO_PID 0x7c92/* Orion I/O */ +#define FTDI_NT_ORIONMX_PID 0x7c93/* OrionMX */ /* * Synapse Wireless product ids (FTDI_VID)
drivers/usb/serial/omninet.c +2 -0
@@ -26,6 +26,7 @@#define ZYXEL_VENDOR_ID 0x0586#define ZYXEL_OMNINET_ID 0x1000 +#define ZYXEL_OMNI_56K_PLUS_ID 0x1500/* This one seems to be a re-branded ZyXEL device */ #define BT_IGNITIONPRO_ID 0x2000
@@ -40,6 +41,7 @@ static void omninet_port_remove(struct usb_serial_port *port);static const struct usb_device_id id_table[] = { {USB_DEVICE (ZYXEL_VENDOR_ID ,ZYXEL_OMNINET_ID ) }, + {USB_DEVICE (ZYXEL_VENDOR_ID ,ZYXEL_OMNI_56K_PLUS_ID ) }, {USB_DEVICE (ZYXEL_VENDOR_ID ,BT_IGNITIONPRO_ID ) }, { }/* Terminating entry */ };
drivers/usb/serial/quatech2.c +3 -3
@@ -416,7 +416,7 @@ static void qt2_close(struct usb_serial_port *port)/* flush the port transmit buffer */ i =usb_control_msg (serial->dev, -usb_rcvctrlpipe (serial->dev,0 ), +usb_sndctrlpipe (serial->dev,0 ),QT2_FLUSH_DEVICE ,0x40 ,1 , port_priv->device_port,NULL ,0 ,QT2_USB_TIMEOUT );
@@ -426,7 +426,7 @@ static void qt2_close(struct usb_serial_port *port)/* flush the port receive buffer */ i =usb_control_msg (serial->dev, -usb_rcvctrlpipe (serial->dev,0 ), +usb_sndctrlpipe (serial->dev,0 ),QT2_FLUSH_DEVICE ,0x40 ,0 , port_priv->device_port,NULL ,0 ,QT2_USB_TIMEOUT );
@@ -654,7 +654,7 @@ static int qt2_attach(struct usb_serial *serial)int status;/* power on unit */ - status =usb_control_msg (serial->dev,usb_rcvctrlpipe (serial->dev,0 ), + status =usb_control_msg (serial->dev,usb_sndctrlpipe (serial->dev,0 ),0xc2 ,0x40 ,0x8000 ,0 ,NULL ,0 ,QT2_USB_TIMEOUT );if (status <0 ) {
drivers/usb/typec/mux.c +1 -1
@@ -239,7 +239,7 @@ static void *typec_mux_match(struct fwnode_handle *fwnode, const char *id, dev =class_find_device (&typec_mux_class,NULL , fwnode, mux_fwnode_match); -return dev ?to_typec_switch (dev) :ERR_PTR (-EPROBE_DEFER ); +return dev ?to_typec_mux (dev) :ERR_PTR (-EPROBE_DEFER ); }/**
drivers/usb/typec/mux/intel_pmc_mux.c +8 -1
@@ -586,6 +586,11 @@ static int pmc_usb_probe_iom(struct pmc_usb *pmc)return -ENOMEM ; } +if (IS_ERR (pmc->iom_base)) { +put_device (&adev->dev); +return PTR_ERR (pmc->iom_base); + } + pmc->iom_adev = adev;return 0 ;
@@ -636,8 +641,10 @@ static int pmc_usb_probe(struct platform_device *pdev)break ; ret =pmc_usb_register_port (pmc, i, fwnode); -if (ret) +if (ret) { +fwnode_handle_put (fwnode); goto err_remove_ports; + } }platform_set_drvdata (pdev, pmc);
drivers/usb/typec/tcpm/tcpm.c +49 -35
149 lines not on this page · raw message
tools/bootconfig/include/linux/bootconfig.h +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/verifier/stack_ptr.c +0 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/verifier/value_ptr_arith.c +0 -8
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.