Skip to contentSkip to conversation

Linux 5.15.77

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Nov 3, 2022 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.15.77 kernel.

All users of the 5.15 kernel series must upgrade.

The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

thanks,

greg k-h

------------

 Makefile                                                       |    2 
 arch/arc/include/asm/io.h                                      |    2 
 arch/arc/include/asm/pgtable-levels.h                          |    2 
 arch/arc/mm/ioremap.c                                          |    2 
 arch/arm64/include/asm/cputype.h                               |    4 
 arch/arm64/kernel/proton-pack.c                                |    6 
 arch/s390/include/asm/futex.h                                  |    3 
 arch/s390/pci/pci_mmio.c                                       |    8 
 arch/x86/events/intel/lbr.c                                    |    2 
 arch/x86/kernel/unwind_orc.c                                   |    2 
 drivers/base/power/domain.c                                    |    4 
 drivers/counter/microchip-tcb-capture.c                        |   18 
 drivers/cpufreq/intel_pstate.c                                 |  133 -
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c               |    6 
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c                     |   16 
 drivers/gpu/drm/i915/display/intel_dp.c                        |    2 
 drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c            |    5 
 drivers/gpu/drm/msm/dp/dp_display.c                            |    2 
 drivers/gpu/drm/msm/dsi/dsi.c                                  |    6 
 drivers/gpu/drm/msm/hdmi/hdmi.c                                |    5 
 drivers/hwtracing/coresight/coresight-cti-core.c               |    5 
 drivers/iio/accel/adxl372.c                                    |   23 
 drivers/iio/light/tsl2583.c                                    |    2 
 drivers/iio/temperature/ltc2983.c                              |   13 
 drivers/media/test-drivers/vivid/vivid-core.c                  |   38 
 drivers/media/test-drivers/vivid/vivid-core.h                  |    2 
 drivers/media/test-drivers/vivid/vivid-vid-cap.c               |   27 
 drivers/media/v4l2-core/v4l2-dv-timings.c                      |   14 
 drivers/mmc/core/block.c                                       |   44 
 drivers/mmc/core/sdio_bus.c                                    |    3 
 drivers/mmc/host/Kconfig                                       |    3 
 drivers/mmc/host/sdhci-esdhc-imx.c                             |   14 
 drivers/mmc/host/sdhci-pci-core.c                              |   14 
 drivers/mtd/nand/raw/intel-nand-controller.c                   |   19 
 drivers/mtd/nand/raw/marvell_nand.c                            |    2 
 drivers/net/can/mscan/mpc5xxx_can.c                            |    8 
 drivers/net/can/rcar/rcar_canfd.c                              |   24 
 drivers/net/can/spi/mcp251x.c                                  |    5 
 drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c              |    4 
 drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c               |    4 
 drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c                    |   17 
 drivers/net/ethernet/aquantia/atlantic/aq_macsec.c             |   96 -
 drivers/net/ethernet/aquantia/atlantic/aq_nic.h                |    2 
 drivers/net/ethernet/broadcom/bcm4908_enet.c                   |   10 
 drivers/net/ethernet/broadcom/bcmsysport.c                     |    3 
 drivers/net/ethernet/cadence/macb_main.c                       |    1 
 drivers/net/ethernet/freescale/enetc/enetc.c                   |    5 
 drivers/net/ethernet/freescale/fec_main.c                      |   46 
 drivers/net/ethernet/huawei/hinic/hinic_debugfs.c              |   18 
 drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c              |    2 
 drivers/net/ethernet/huawei/hinic/hinic_hw_dev.c               |    2 
 drivers/net/ethernet/huawei/hinic/hinic_sriov.c                |    1 
 drivers/net/ethernet/ibm/ehea/ehea_main.c                      |    1 
 drivers/net/ethernet/intel/i40e/i40e_ethtool.c                 |  100 -
 drivers/net/ethernet/intel/i40e/i40e_type.h                    |    4 
 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c             |   43 
 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h             |    1 
 drivers/net/ethernet/lantiq_etop.c                             |    1 
 drivers/net/ethernet/mellanox/mlx5/core/cmd.c                  |   10 
 drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h               |    9 
 drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h              |    6 
 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c       |    3 
 drivers/net/ethernet/mellanox/mlx5/core/en_tx.c                |    6 
 drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c             |    6 
 drivers/net/ethernet/mellanox/mlx5/core/main.c                 |   55 
 drivers/net/ethernet/micrel/ksz884x.c                          |    2 
 drivers/net/ethernet/socionext/netsec.c                        |    2 
 drivers/net/ethernet/socionext/sni_ave.c                       |    6 
 drivers/net/netdevsim/dev.c                                    |   11 
 drivers/nfc/virtual_ncidev.c                                   |    3 
 drivers/pinctrl/pinctrl-ingenic.c                              |    4 
 drivers/scsi/lpfc/lpfc.h                                       |   40 
 drivers/scsi/lpfc/lpfc_bsg.c                                   |   50 
 drivers/scsi/lpfc/lpfc_crtn.h                                  |    3 
 drivers/scsi/lpfc/lpfc_ct.c                                    |    8 
 drivers/scsi/lpfc/lpfc_els.c                                   |  139 -
 drivers/scsi/lpfc/lpfc_hw4.h                                   |    7 
 drivers/scsi/lpfc/lpfc_init.c                                  |   13 
 drivers/scsi/lpfc/lpfc_nportdisc.c                             |    4 
 drivers/scsi/lpfc/lpfc_nvme.c                                  |   34 
 drivers/scsi/lpfc/lpfc_nvme.h                                  |    6 
 drivers/scsi/lpfc/lpfc_nvmet.c                                 |   83 
 drivers/scsi/lpfc/lpfc_scsi.c                                  |  441 ++---
 drivers/scsi/lpfc/lpfc_sli.c                                   |  876 +++++-----
 drivers/scsi/lpfc/lpfc_sli.h                                   |   26 
 drivers/scsi/qla2xxx/qla_attr.c                                |   28 
 drivers/scsi/sd.c                                              |    3 
 drivers/staging/media/atomisp/pci/sh_css_params.c              |    4 
 drivers/tty/serial/8250/8250_omap.c                            |    3 
 drivers/tty/serial/8250/8250_pci.c                             |    9 
 drivers/tty/serial/8250/8250_port.c                            |   12 
 drivers/tty/serial/fsl_lpuart.c                                |    8 
 drivers/tty/serial/imx.c                                       |    8 
 drivers/tty/serial/serial_core.c                               |   61 
 drivers/usb/core/quirks.c                                      |    9 
 drivers/usb/dwc3/gadget.c                                      |    8 
 drivers/usb/gadget/function/uvc_queue.c                        |    8 
 drivers/usb/gadget/function/uvc_video.c                        |   22 
 drivers/usb/gadget/udc/bdc/bdc_udc.c                           |    1 
 drivers/usb/host/xhci-mem.c                                    |   20 
 drivers/usb/host/xhci-pci.c                                    |   44 
 drivers/usb/host/xhci.c                                        |   10 
 drivers/usb/host/xhci.h                                        |    1 
 drivers/video/fbdev/smscufx.c                                  |   55 
 fs/binfmt_elf.c                                                |    3 
 fs/exec.c                                                      |    4 
 fs/kernfs/dir.c                                                |    5 
 fs/nfs/nfs4namespace.c                                         |    9 
 fs/nfs/nfs4proc.c                                              |   34 
 fs/nfs/nfs4state.c                                             |    9 
 fs/nfs/nfs4xdr.c                                               |    4 
 include/linux/mlx5/driver.h                                    |    2 
 include/linux/nfs_xdr.h                                        |    2 
 include/linux/perf_event.h                                     |   19 
 include/media/v4l2-common.h                                    |    3 
 include/net/sock.h                                             |    2 
 include/uapi/linux/videodev2.h                                 |    3 
 kernel/events/core.c                                           |  153 +
 kernel/events/ring_buffer.c                                    |    2 
 kernel/power/hibernate.c                                       |    2 
 kernel/sched/sched.h                                           |   18 
 net/can/j1939/transport.c                                      |    4 
 net/core/net_namespace.c                                       |    7 
 net/core/skbuff.c                                              |    2 
 net/ethtool/eeprom.c                                           |    2 
 net/ieee802154/socket.c                                        |    4 
 net/ipv4/nexthop.c                                             |    2 
 net/ipv4/tcp_input.c                                           |    3 
 net/ipv4/tcp_ipv4.c                                            |    7 
 net/ipv6/ip6_gre.c                                             |   12 
 net/ipv6/ip6_tunnel.c                                          |   11 
 net/ipv6/ipv6_sockglue.c                                       |    7 
 net/ipv6/sit.c                                                 |    8 
 net/kcm/kcmsock.c                                              |   25 
 net/mac802154/rx.c                                             |    5 
 net/openvswitch/datapath.c                                     |    3 
 net/tipc/topsrv.c                                              |   16 
 sound/aoa/soundbus/i2sbus/core.c                               |    7 
 sound/pci/ac97/ac97_codec.c                                    |    1 
 sound/pci/au88x0/au88x0.h                                      |    6 
 sound/pci/au88x0/au88x0_core.c                                 |    2 
 sound/pci/rme9652/hdsp.c                                       |   26 
 sound/pci/rme9652/rme9652.c                                    |   22 
 sound/soc/qcom/lpass-cpu.c                                     |   10 
 sound/synth/emux/emux.c                                        |    7 
 sound/usb/implicit.c                                           |    2 
 tools/iio/iio_utils.c                                          |    4 
 tools/perf/pmu-events/arch/arm64/hisilicon/hip08/metrics.json  |    6 
 tools/perf/pmu-events/arch/powerpc/power10/nest_metrics.json   |   72 
 tools/perf/util/auxtrace.c                                     |   10 
 tools/testing/selftests/kvm/memslot_modification_stress_test.c |    2 
 151 files changed, 2129 insertions(+), 1458 deletions(-)

Aaron Conole (1):
openvswitch: switch from WARN to pr_warn

Adrian Hunter (1):
perf auxtrace: Fix address filter symbol name match for modules

Alexander Stein (1):
media: v4l2: Fix v4l2_i2c_subdev_set_name function documentation

Ankit Nautiyal (1):
drm/i915/dp: Reset frl trained flag before restarting FRL training

Anssi Hannula (1):
can: kvaser_usb: Fix possible completions during init_completion

Aya Levin (1):
net/mlx5e: Extend SKB room check to include PTP-SQ

Benjamin Coddington (1):
NFSv4: Fix free of uninitialized nfs4_label on referral lookup.

Bernd Edlinger (1):

      exec: Copy oldsighand->action under spin-lock

Biju Das (2):
can: rcar_canfd: fix channel specific IRQ handling for RZ/G2L
can: rcar_canfd: rcar_canfd_handle_global_receive(): fix IRQ storm on global FIFO receive

Brian Norris (1):
mmc: sdhci_am654: 'select', not 'depends' REGMAP_MMIO

Chen Zhongjin (1):
x86/unwind/orc: Fix unreliable stack dump with gcov

Christian A. Ehrhardt (1):
kernfs: fix use-after-free in __kernfs_remove

Christian Löhle (1):
mmc: block: Remove error check of hw_reset on reset

Colin Ian King (1):
net: broadcom: bcm4908enet: remove redundant variable bytes

Cosmin Tanislav (1):
iio: temperature: ltc2983: allocate iio channels once

D Scott Phillips (1):
arm64: Add AMPERE1 to the Spectre-BHB affected list

Dan Carpenter (1):
media: atomisp: prevent integer overflow in sh_css_set_black_frame()

Dan Vacura (1):
usb: gadget: uvc: fix sg handling in error case

Dongliang Mu (2):
can: mscan: mpc5xxx: mpc5xxx_can_probe(): add missing put_clock() in error path
can: mcp251x: mcp251x_can_probe(): add missing unregister_candev() in error path

Eric Dumazet (6):
kcm: annotate data-races around kcm->rx_psock
kcm: annotate data-races around kcm->rx_wait
tcp: minor optimization in tcp_add_backlog()
ipv6: ensure sane device mtu in tunnels
net: do not sense pfmemalloc status in skb_append_pagefrags()
kcm: do not sense pfmemalloc status in kcm_sendpage()

Florian Fainelli (1):
net: bcmsysport: Indicate MAC is in charge of PHY PM

Gavin Shan (1):
KVM: selftests: Fix number of pages for memory slot in memslot_modification_stress_test

Greg Kroah-Hartman (1):

      Linux 5.15.77

Hannu Hartikainen (1):
USB: add RESET_RESUME quirk for NVIDIA Jetson devices in RCM

Hans Verkuil (5):
media: vivid: s_fbuf: add more sanity checks
media: vivid: dev->bitmap_cap wasn't freed in all cases
media: v4l2-dv-timings: add sanity checks for blanking values
media: videodev2.h: V4L2_DV_BT_BLANKING_HEIGHT should check 'interlaced'
media: vivid: set num_in/outputs to 0 if not supported

Heiko Carstens (2):
s390/futex: add missing EX_TABLE entry to __futex_atomic_op() s390/pci: add missing EX_TABLE entries to __pcistg_mio_inuser()/__pcilg_mio_inuser()

Hyong Youb Kim (1):
net/mlx5e: Do not increment ESN when updating IPsec ESN state

Hyunwoo Kim (1):
fbdev: smscufx: Fix several use-after-free bugs

Jakub Kicinski (1):
net-memcg: avoid stalls when under memory pressure

James Clark (1):
coresight: cti: Fix hang in cti_disable_hw()

James Smart (6):
Revert "scsi: lpfc: Resolve some cleanup issues following SLI path refactoring" Revert "scsi: lpfc: Fix element offset in __lpfc_sli_release_iocbq_s4()" Revert "scsi: lpfc: Fix locking for lpfc_sli_iocbq_lookup()" Revert "scsi: lpfc: SLI path split: Refactor SCSI paths"
Revert "scsi: lpfc: SLI path split: Refactor fast and slow paths to native SLI4" Revert "scsi: lpfc: SLI path split: Refactor lpfc_iocbq"

Jason A. Donenfeld (2):
ALSA: au88x0: use explicitly signed char
ALSA: rme9652: use explicitly signed char

Jeff Vanhoof (1):
usb: gadget: uvc: fix sg handling during video encode

Jens Glathe (1):
usb: xhci: add XHCI_SPURIOUS_SUCCESS to ASM1042 despite being a V0.96 controller

Johan Hovold (3):
drm/msm/dsi: fix memory corruption with too many bridges drm/msm/hdmi: fix memory corruption with too many bridges drm/msm/dp: fix IRQ lifetime

Juergen Borleis (1):
net: fec: limit register access on i.MX6UL

Justin Chen (1):
usb: bdc: change state when port disconnected

Kajol Jain (1):
perf vendor events power10: Fix hv-24x7 metric events

Kunihiko Hayashi (1):
net: ethernet: ave: Fix MAC to be in charge of PHY PM

Kuniyuki Iwashima (1):
tcp/udp: Fix memory leak in ipv6_renew_options().

Li Zetao (1):
fs/binfmt_elf: Fix memory leak in load_elf_binary()

Lin Shengwang (1):
sched/core: Fix comparison in sched_group_cookie_match()

Lino Sanfilippo (1):
serial: core: move RS485 configuration tasks from drivers into core

Lu Wei (1):
tcp: fix a signed-integer-overflow bug in tcp_add_backlog()

Lukas Wunner (1):
serial: Deassert Transmit Enable on probe in driver-specific way

Manish Rangankar (1):
scsi: qla2xxx: Use transport-defined speed mask for supported_speeds

Mario Limonciello (2):
xhci-pci: Set runtime PM as default policy on all xHC 1.2 or later devices
PM: hibernate: Allow hybrid sleep to work with s2idle

Mathias Nyman (2):
xhci: Add quirk to reset host back to default state at shutdown
xhci: Remove device endpoints from bandwidth list when freeing the device

Matthew Ma (1):
mmc: core: Fix kernel panic when remove non-standard SDIO card

Matti Vaittinen (2):
tools: iio: iio_utils: fix digit calculation
iio: adxl372: Fix unsafe buffer attributes

Maxim Levitsky (1):
perf/x86/intel/lbr: Use setup_clear_cpu_cap() instead of clear_cpu_cap()

Miquel Raynal (1):
mac802154: Fix LQI recording

Nathan Huckleberry (1):
drm/msm: Fix return type of mdp4_lvds_connector_mode_valid

Neal Cardwell (1):
tcp: fix indefinite deferral of RTO with SACK reneging

Nicolas Dichtel (1):
nh: fix scope used to find saddr when adding non gw nh

Patrick Thompson (1):
mmc: sdhci-pci-core: Disable ES for ASUS BIOS on Jasper Lake

Pavel Kozlov (1):
ARC: mm: fix leakage of memory allocated for PTE

Peter Zijlstra (1):
perf: Fix missing SIGTRAPs

Prike Liang (1):
drm/amdgpu: disallow gfxoff until GC IP blocks complete s2idle resume

Rafael J. Wysocki (2):
cpufreq: intel_pstate: Read all MSRs on the target CPU
cpufreq: intel_pstate: hybrid: Use known scaling factor for P-cores

Rafael Mendonca (1):
drm/amdkfd: Fix memory leak in kfd_mem_dmamap_userptr()

Rafał Miłecki (1):
net: broadcom: bcm4908_enet: update TX stats after actual transmission

Raju Rangoju (2):
amd-xgbe: fix the SFP compliance codes check for DAC cables
amd-xgbe: add the bit rate quirk for Molex cables

Randy Dunlap (1):
arc: iounmap() arg is volatile

Roy Novich (1):
net/mlx5: Update fw fatal reporter state on PCI handlers successful recover

Saeed Mahameed (1):
net/mlx5: Print more info on pci error handlers

Sascha Hauer (1):
mmc: sdhci-esdhc-imx: Propagate ESDHC_FLAG_HS400* only on 8bit bus

Scott Mayhew (1):
NFSv4: Add an fattr allocation to _nfs4_discover_trunking()

Sergiu Moga (1):
net: macb: Specify PHY PM management done by MAC

Shang XiaoJing (2):
nfc: virtual_ncidev: Fix memory leak in virtual_nci_send() perf vendor events arm64: Fix incorrect Hisi hip08 L3 metrics

Shreeya Patel (1):
iio: light: tsl2583: Fix module unloading

Siarhei Volkau (1):
pinctrl: Ingenic: JZ4755 bug fixes

Slawomir Laba (2):
i40e: Fix ethtool rx-flow-hash setting for X722
i40e: Fix flow-type by setting GL_HASH_INSET registers

Srinivasa Rao Mandadapu (2):
ASoC: qcom: lpass-cpu: mark HDMI TX registers as volatile
ASoC: qcom: lpass-cpu: Mark HDMI TX parity register as volatile

Steven Rostedt (Google) (1):
ALSA: Use del_timer_sync() before freeing timer

Sudeep Holla (1):
PM: domains: Fix handling of unavailable/disabled idle states

Suresh Devarakonda (1):
net/mlx5: Fix crash during sync firmware reset

Sylwester Dziedziuch (1):
i40e: Fix VF hang when reset is triggered on another VF

Takashi Iwai (2):
ALSA: usb-audio: Add quirks for M-Audio Fast Track C400/600
ALSA: aoa: Fix I2S device accounting

Tariq Toukan (1):
net/mlx5: Fix possible use-after-free in async command interface

Thinh Nguyen (2):
usb: dwc3: gadget: Stop processing more requests on IMI
usb: dwc3: gadget: Don't set IMI for no_interrupt

Tony O'Brien (1):
mtd: rawnand: marvell: Use correct logic for nand-keep-config

Vladimir Oltean (1):
net: enetc: survive memory pressure without crashing

Wei Yongjun (1):
net: ieee802154: fix error return code in dgram_bind()

William Breathitt Gray (1):
counter: microchip-tcb-capture: Handle Signal1 read and Synapse

Xin Long (2):
ethtool: eeprom: fix null-deref on genl_info in dump
tipc: fix a null-ptr-deref in tipc_topsrv_accept

Yang Yingliang (7):
can: j1939: transport: j1939_session_skb_drop_old(): spin_unlock_irqrestore() before kfree_skb()
mtd: rawnand: intel: Add missing of_node_put() in ebu_nand_probe()
ALSA: ac97: fix possible memory leak in snd_ac97_dev_register()
net: netsec: fix error handling in netsec_register_mdio()
net: ksz884x: fix missing pci_disable_device() on error in pcidev_init()
ALSA: aoa: i2sbus: fix possible memory leak in i2sbus_add_dev()
net: ehea: fix possible memory leak in ehea_register_port()

Yu Kuai (1):
scsi: sd: Revert "scsi: sd: Remove a local variable"

Zhang Changzhong (1):
net: lantiq_etop: don't free skb when returning NETDEV_TX_BUSY

Zhengchao Shao (6):
net: hinic: fix incorrect assignment issue in hinic_set_interrupt_cfg()
net: hinic: fix memory leak when reading function table
net: hinic: fix the issue of CMDQ memory leaks
net: hinic: fix the issue of double release MBOX callback of VF
net: fix UAF issue in nfqnl_nf_hook_drop() when ops_init() failed
netdevsim: remove dir in nsim_dev_debugfs_init() when creating ports dir failed

Íñigo Huguet (1):
atlantic: fix deadlock at aq_nic_stop

author maintainer
#1 lore raw
Makefile +1 -1
index e7293e7a7ee9..3e712ea4c745 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 15
-SUBLEVEL = 76
+SUBLEVEL = 77
 EXTRAVERSION =
 NAME = Trick or Treat
 
arch/arc/include/asm/io.h +1 -1
index 8f777d6441a5..80347382a380 100644
@@ -32,7 +32,7 @@ static inline void ioport_unmap(void __iomem *addr)
 {
 }
 
-extern void iounmap(const void __iomem *addr);
+extern void iounmap(const volatile void __iomem *addr);
 
 /*
  * io{read,write}{16,32}be() macros
arch/arc/include/asm/pgtable-levels.h +1 -1
index 8084ef2f6491..4e7a19cb8e52 100644
@@ -163,7 +163,7 @@
 #define pmd_page_vaddr(pmd)	(pmd_val(pmd) & PAGE_MASK)
 #define pmd_page(pmd)		virt_to_page(pmd_page_vaddr(pmd))
 #define set_pmd(pmdp, pmd)	(*(pmdp) = pmd)
-#define pmd_pgtable(pmd)	((pgtable_t) pmd_page_vaddr(pmd))
+#define pmd_pgtable(pmd)	((pgtable_t) pmd_page(pmd))
 
 /*
  * 4th level paging: pte
arch/arc/mm/ioremap.c +1 -1
index 0ee75aca6e10..712c2311daef 100644
@@ -94,7 +94,7 @@ void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,
 EXPORT_SYMBOL(ioremap_prot);
 
 
-void iounmap(const void __iomem *addr)
+void iounmap(const volatile void __iomem *addr)
 {
 	/* weird double cast to handle phys_addr_t > 32 bits */
 	if (arc_uncached_addr_space((phys_addr_t)(u32)addr))
arch/arm64/include/asm/cputype.h +4 -0
index 39f5c1672f48..457b6bb276bb 100644
@@ -60,6 +60,7 @@
 #define ARM_CPU_IMP_FUJITSU		0x46
 #define ARM_CPU_IMP_HISI		0x48
 #define ARM_CPU_IMP_APPLE		0x61
+#define ARM_CPU_IMP_AMPERE		0xC0
 
 #define ARM_CPU_PART_AEM_V8		0xD0F
 #define ARM_CPU_PART_FOUNDATION		0xD00
@@ -112,6 +113,8 @@
 #define APPLE_CPU_PART_M1_ICESTORM	0x022
 #define APPLE_CPU_PART_M1_FIRESTORM	0x023
 
+#define AMPERE_CPU_PART_AMPERE1		0xAC3
+
 #define MIDR_CORTEX_A53 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)
 #define MIDR_CORTEX_A57 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)
 #define MIDR_CORTEX_A72 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A72)
@@ -151,6 +154,7 @@
 #define MIDR_HISI_TSV110 MIDR_CPU_MODEL(ARM_CPU_IMP_HISI, HISI_CPU_PART_TSV110)
 #define MIDR_APPLE_M1_ICESTORM MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_ICESTORM)
 #define MIDR_APPLE_M1_FIRESTORM MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM)
+#define MIDR_AMPERE1 MIDR_CPU_MODEL(ARM_CPU_IMP_AMPERE, AMPERE_CPU_PART_AMPERE1)
 
 /* Fujitsu Erratum 010001 affects A64FX 1.0 and 1.1, (v0r0 and v1r0) */
 #define MIDR_FUJITSU_ERRATUM_010001		MIDR_FUJITSU_A64FX
arch/arm64/kernel/proton-pack.c +6 -0
index 40be3a7c2c53..428cfabd11c4 100644
@@ -868,6 +868,10 @@ u8 spectre_bhb_loop_affected(int scope)
 			MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1),
 			{},
 		};
+		static const struct midr_range spectre_bhb_k11_list[] = {
+			MIDR_ALL_VERSIONS(MIDR_AMPERE1),
+			{},
+		};
 		static const struct midr_range spectre_bhb_k8_list[] = {
 			MIDR_ALL_VERSIONS(MIDR_CORTEX_A72),
 			MIDR_ALL_VERSIONS(MIDR_CORTEX_A57),
@@ -878,6 +882,8 @@ u8 spectre_bhb_loop_affected(int scope)
 			k = 32;
 		else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k24_list))
 			k = 24;
+		else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k11_list))
+			k = 11;
 		else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k8_list))
 			k =  8;
 
arch/s390/include/asm/futex.h +2 -1
index c22debfcebf1..bf15767b729f 100644
@@ -16,7 +16,8 @@
 		"3: jl    1b\n"						\
 		"   lhi   %0,0\n"					\
 		"4: sacf  768\n"					\
-		EX_TABLE(0b,4b) EX_TABLE(2b,4b) EX_TABLE(3b,4b)		\
+		EX_TABLE(0b,4b) EX_TABLE(1b,4b)				\
+		EX_TABLE(2b,4b) EX_TABLE(3b,4b)				\
 		: "=d" (ret), "=&d" (oldval), "=&d" (newval),		\
 		  "=m" (*uaddr)						\
 		: "0" (-EFAULT), "d" (oparg), "a" (uaddr),		\
arch/s390/pci/pci_mmio.c +4 -4
index c5b35ea129cf..b94163ee5632 100644
@@ -63,7 +63,7 @@ static inline int __pcistg_mio_inuser(
 	asm volatile (
 		"       sacf    256\n"
 		"0:     llgc    %[tmp],0(%[src])\n"
-		"       sllg    %[val],%[val],8\n"
+		"4:	sllg	%[val],%[val],8\n"
 		"       aghi    %[src],1\n"
 		"       ogr     %[val],%[tmp]\n"
 		"       brctg   %[cnt],0b\n"
@@ -71,7 +71,7 @@ static inline int __pcistg_mio_inuser(
 		"2:     ipm     %[cc]\n"
 		"       srl     %[cc],28\n"
 		"3:     sacf    768\n"
-		EX_TABLE(0b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b)
+		EX_TABLE(0b, 3b) EX_TABLE(4b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b)
 		:
 		[src] "+a" (src), [cnt] "+d" (cnt),
 		[val] "+d" (val), [tmp] "=d" (tmp),
@@ -214,10 +214,10 @@ static inline int __pcilg_mio_inuser(
 		"2:     ahi     %[shift],-8\n"
 		"       srlg    %[tmp],%[val],0(%[shift])\n"
 		"3:     stc     %[tmp],0(%[dst])\n"
-		"       aghi    %[dst],1\n"
+		"5:	aghi	%[dst],1\n"
 		"       brctg   %[cnt],2b\n"
 		"4:     sacf    768\n"
-		EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b)
+		EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b) EX_TABLE(5b, 4b)
 		:
 		[ioaddr_len] "+&d" (ioaddr_len.pair),
 		[cc] "+d" (cc), [val] "=d" (val),
arch/x86/events/intel/lbr.c +1 -1
index 673721387391..b3f92255cbd2 100644
@@ -1847,7 +1847,7 @@ void __init intel_pmu_arch_lbr_init(void)
 	return;
 
 clear_arch_lbr:
-	clear_cpu_cap(&boot_cpu_data, X86_FEATURE_ARCH_LBR);
+	setup_clear_cpu_cap(X86_FEATURE_ARCH_LBR);
 }
 
 /**
arch/x86/kernel/unwind_orc.c +1 -1
index 3423aaea4ad8..8488966da5f1 100644
@@ -700,7 +700,7 @@ void __unwind_start(struct unwind_state *state, struct task_struct *task,
 	/* Otherwise, skip ahead to the user-specified starting frame: */
 	while (!unwind_done(state) &&
 	       (!on_stack(&state->stack_info, first_frame, sizeof(long)) ||
-			state->sp < (unsigned long)first_frame))
+			state->sp <= (unsigned long)first_frame))
 		unwind_next_frame(state);
 
 	return;
drivers/base/power/domain.c +4 -0
index 7f3d21e6fdfb..94fe30c187ad 100644
@@ -2889,6 +2889,10 @@ static int genpd_iterate_idle_states(struct device_node *dn,
 		np = it.node;
 		if (!of_match_node(idle_state_match, np))
 			continue;
+
+		if (!of_device_is_available(np))
+			continue;
+
 		if (states) {
 			ret = genpd_parse_state(&states[i], np);
 			if (ret) {
drivers/counter/microchip-tcb-capture.c +14 -4
index 1aa70b9c4833..22563dcded75 100644
@@ -29,7 +29,6 @@ struct mchp_tc_data {
 	int qdec_mode;
 	int num_channels;
 	int channel[2];
-	bool trig_inverted;
 };
 
 enum mchp_tc_count_function {
@@ -166,7 +165,7 @@ static int mchp_tc_count_signal_read(struct counter_device *counter,
 
 	regmap_read(priv->regmap, ATMEL_TC_REG(priv->channel[0], SR), &sr);
 
-	if (priv->trig_inverted)
+	if (signal->id == 1)
 		sigstatus = (sr & ATMEL_TC_MTIOB);
 	else
 		sigstatus = (sr & ATMEL_TC_MTIOA);
@@ -184,6 +183,17 @@ static int mchp_tc_count_action_get(struct counter_device *counter,
 	struct mchp_tc_data *const priv = counter->priv;
 	u32 cmr;
 
+	if (priv->qdec_mode) {
+		*action = COUNTER_SYNAPSE_ACTION_BOTH_EDGES;
+		return 0;
+	}
+
+	/* Only TIOA signal is evaluated in non-QDEC mode */
+	if (synapse->signal->id != 0) {
+		*action = COUNTER_SYNAPSE_ACTION_NONE;
+		return 0;
+	}
+
 	regmap_read(priv->regmap, ATMEL_TC_REG(priv->channel[0], CMR), &cmr);
 
 	switch (cmr & ATMEL_TC_ETRGEDG) {
@@ -212,8 +222,8 @@ static int mchp_tc_count_action_set(struct counter_device *counter,
 	struct mchp_tc_data *const priv = counter->priv;
 	u32 edge = ATMEL_TC_ETRGEDG_NONE;
 
-	/* QDEC mode is rising edge only */
-	if (priv->qdec_mode)
+	/* QDEC mode is rising edge only; only TIOA handled in non-QDEC mode */
+	if (priv->qdec_mode || synapse->signal->id != 0)
 		return -EINVAL;
 
 	switch (action) {
drivers/cpufreq/intel_pstate.c +47 -86

292 lines not on this page · raw message

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +3 -3
index c904269b3e14..477ab3551177 100644
@@ -476,13 +476,13 @@ kfd_mem_dmamap_userptr(struct kgd_mem *mem,
 	struct ttm_tt *ttm = bo->tbo.ttm;
 	int ret;
 
+	if (WARN_ON(ttm->num_pages != src_ttm->num_pages))
+		return -EINVAL;
+
 	ttm->sg = kmalloc(sizeof(*ttm->sg), GFP_KERNEL);
 	if (unlikely(!ttm->sg))
 		return -ENOMEM;
 
-	if (WARN_ON(ttm->num_pages != src_ttm->num_pages))
-		return -EINVAL;
-
 	/* Same sequence as in amdgpu_ttm_tt_pin_userptr */
 	ret = sg_alloc_table_from_pages(ttm->sg, src_ttm->pages,
 					ttm->num_pages, 0,
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +16 -0
index ac4dabcde33f..36cc89f56cea 100644
@@ -3185,6 +3185,15 @@ static int amdgpu_device_ip_resume_phase2(struct amdgpu_device *adev)
 			return r;
 		}
 		adev->ip_blocks[i].status.hw = true;
+
+		if (adev->in_s0ix && adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) {
+			/* disable gfxoff for IP resume. The gfxoff will be re-enabled in
+			 * amdgpu_device_resume() after IP resume.
+			 */
+			amdgpu_gfx_off_ctrl(adev, false);
+			DRM_DEBUG("will disable gfxoff for re-initializing other blocks\n");
+		}
+
 	}
 
 	return 0;
@@ -4114,6 +4123,13 @@ int amdgpu_device_resume(struct drm_device *dev, bool fbcon)
 	/* Make sure IB tests flushed */
 	flush_delayed_work(&adev->delayed_init_work);
 
+	if (adev->in_s0ix) {
+		/* re-enable gfxoff after IP resume. This re-enables gfxoff after
+		 * it was disabled for IP resume in amdgpu_device_ip_resume_phase2().
+		 */
+		amdgpu_gfx_off_ctrl(adev, true);
+		DRM_DEBUG("will enable gfxoff for the mission mode\n");
+	}
 	if (fbcon)
 		amdgpu_fbdev_set_suspend(adev, 0);
 
drivers/gpu/drm/i915/display/intel_dp.c +2 -0
index f87e4d510ea5..1ccdf2da042b 100644
@@ -3497,6 +3497,8 @@ intel_dp_handle_hdmi_link_status_change(struct intel_dp *intel_dp)
 
 		drm_dp_pcon_hdmi_frl_link_error_count(&intel_dp->aux, &intel_dp->attached_connector->base);
 
+		intel_dp->frl.is_trained = false;
+
 		/* Restart FRL training or fall back to TMDS mode */
 		intel_dp_check_frl_training(intel_dp);
 	}
drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c +3 -2
index 7288041dd86a..7444b75c4215 100644
@@ -56,8 +56,9 @@ static int mdp4_lvds_connector_get_modes(struct drm_connector *connector)
 	return ret;
 }
 
-static int mdp4_lvds_connector_mode_valid(struct drm_connector *connector,
-				 struct drm_display_mode *mode)
+static enum drm_mode_status
+mdp4_lvds_connector_mode_valid(struct drm_connector *connector,
+			       struct drm_display_mode *mode)
 {
 	struct mdp4_lvds_connector *mdp4_lvds_connector =
 			to_mdp4_lvds_connector(connector);
drivers/gpu/drm/msm/dp/dp_display.c +1 -1
index b141ccb527b0..d13fd39f05de 100644
@@ -1229,7 +1229,7 @@ int dp_display_request_irq(struct msm_dp *dp_display)
 		return -EINVAL;
 	}
 
-	rc = devm_request_irq(&dp->pdev->dev, dp->irq,
+	rc = devm_request_irq(dp_display->drm_dev->dev, dp->irq,
 			dp_display_irq_handler,
 			IRQF_TRIGGER_HIGH, "dp_display_isr", dp);
 	if (rc < 0) {
drivers/gpu/drm/msm/dsi/dsi.c +6 -0
index 122fadcf7cc1..fb8b21837c29 100644
@@ -212,6 +212,12 @@ int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev,
 		return -EINVAL;
 
 	priv = dev->dev_private;
+
+	if (priv->num_bridges == ARRAY_SIZE(priv->bridges)) {
+		DRM_DEV_ERROR(dev->dev, "too many bridges\n");
+		return -ENOSPC;
+	}
+
 	msm_dsi->dev = dev;
 
 	ret = msm_dsi_host_modeset_init(msm_dsi->host, dev);
drivers/gpu/drm/msm/hdmi/hdmi.c +5 -0
index 23fb88b53324..e082e01b5e8d 100644
@@ -295,6 +295,11 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi,
 	struct platform_device *pdev = hdmi->pdev;
 	int ret;
 
+	if (priv->num_bridges == ARRAY_SIZE(priv->bridges)) {
+		DRM_DEV_ERROR(dev->dev, "too many bridges\n");
+		return -ENOSPC;
+	}
+
 	hdmi->dev = dev;
 	hdmi->encoder = encoder;
 
drivers/hwtracing/coresight/coresight-cti-core.c +0 -5
index 8988b2ed2ea6..dcd607a0c41a 100644
@@ -90,11 +90,9 @@ void cti_write_all_hw_regs(struct cti_drvdata *drvdata)
 static int cti_enable_hw(struct cti_drvdata *drvdata)
 {
 	struct cti_config *config = &drvdata->config;
-	struct device *dev = &drvdata->csdev->dev;
 	unsigned long flags;
 	int rc = 0;
 
-	pm_runtime_get_sync(dev->parent);
 	spin_lock_irqsave(&drvdata->spinlock, flags);
 
 	/* no need to do anything if enabled or unpowered*/
@@ -119,7 +117,6 @@ static int cti_enable_hw(struct cti_drvdata *drvdata)
 	/* cannot enable due to error */
 cti_err_not_enabled:
 	spin_unlock_irqrestore(&drvdata->spinlock, flags);
-	pm_runtime_put(dev->parent);
 	return rc;
 }
 
@@ -153,7 +150,6 @@ static void cti_cpuhp_enable_hw(struct cti_drvdata *drvdata)
 static int cti_disable_hw(struct cti_drvdata *drvdata)
 {
 	struct cti_config *config = &drvdata->config;
-	struct device *dev = &drvdata->csdev->dev;
 	struct coresight_device *csdev = drvdata->csdev;
 
 	spin_lock(&drvdata->spinlock);
@@ -175,7 +171,6 @@ static int cti_disable_hw(struct cti_drvdata *drvdata)
 	coresight_disclaim_device_unlocked(csdev);
 	CS_LOCK(drvdata->base);
 	spin_unlock(&drvdata->spinlock);
-	pm_runtime_put(dev->parent);
 	return 0;
 
 	/* not disabled this call */
drivers/iio/accel/adxl372.c +18 -5
index fc9592407717..4a358f8c27f3 100644
@@ -998,17 +998,30 @@ static ssize_t adxl372_get_fifo_watermark(struct device *dev,
 	return sprintf(buf, "%d\n", st->watermark);
 }
 
-static IIO_CONST_ATTR(hwfifo_watermark_min, "1");
-static IIO_CONST_ATTR(hwfifo_watermark_max,
-		      __stringify(ADXL372_FIFO_SIZE));
+static ssize_t hwfifo_watermark_min_show(struct device *dev,
+					 struct device_attribute *attr,
+					 char *buf)
+{
+	return sysfs_emit(buf, "%s\n", "1");
+}
+
+static ssize_t hwfifo_watermark_max_show(struct device *dev,
+					 struct device_attribute *attr,
+					 char *buf)
+{
+	return sysfs_emit(buf, "%s\n", __stringify(ADXL372_FIFO_SIZE));
+}
+
+static IIO_DEVICE_ATTR_RO(hwfifo_watermark_min, 0);
+static IIO_DEVICE_ATTR_RO(hwfifo_watermark_max, 0);
 static IIO_DEVICE_ATTR(hwfifo_watermark, 0444,
 		       adxl372_get_fifo_watermark, NULL, 0);
 static IIO_DEVICE_ATTR(hwfifo_enabled, 0444,
 		       adxl372_get_fifo_enabled, NULL, 0);
 
 static const struct attribute *adxl372_fifo_attributes[] = {
-	&iio_const_attr_hwfifo_watermark_min.dev_attr.attr,
-	&iio_const_attr_hwfifo_watermark_max.dev_attr.attr,
+	&iio_dev_attr_hwfifo_watermark_min.dev_attr.attr,
+	&iio_dev_attr_hwfifo_watermark_max.dev_attr.attr,
 	&iio_dev_attr_hwfifo_watermark.dev_attr.attr,
 	&iio_dev_attr_hwfifo_enabled.dev_attr.attr,
 	NULL,
drivers/iio/light/tsl2583.c +1 -1
index 7e101d5f72ee..d696d19e2e8e 100644
@@ -858,7 +858,7 @@ static int tsl2583_probe(struct i2c_client *clientp,
 					 TSL2583_POWER_OFF_DELAY_MS);
 	pm_runtime_use_autosuspend(&clientp->dev);
 
-	ret = devm_iio_device_register(indio_dev->dev.parent, indio_dev);
+	ret = iio_device_register(indio_dev);
 	if (ret) {
 		dev_err(&clientp->dev, "%s: iio registration failed\n",
 			__func__);
drivers/iio/temperature/ltc2983.c +6 -7
index 3b4a0e60e605..8306daa77908 100644
@@ -1376,13 +1376,6 @@ static int ltc2983_setup(struct ltc2983_data *st, bool assign_iio)
 		return ret;
 	}
 
-	st->iio_chan = devm_kzalloc(&st->spi->dev,
-				    st->iio_channels * sizeof(*st->iio_chan),
-				    GFP_KERNEL);
-
-	if (!st->iio_chan)
-		return -ENOMEM;
-
 	ret = regmap_update_bits(st->regmap, LTC2983_GLOBAL_CONFIG_REG,
 				 LTC2983_NOTCH_FREQ_MASK,
 				 LTC2983_NOTCH_FREQ(st->filter_notch_freq));
@@ -1494,6 +1487,12 @@ static int ltc2983_probe(struct spi_device *spi)
 	if (ret)
 		return ret;
 
+	st->iio_chan = devm_kzalloc(&spi->dev,
+				    st->iio_channels * sizeof(*st->iio_chan),
+				    GFP_KERNEL);
+	if (!st->iio_chan)
+		return -ENOMEM;
+
 	ret = ltc2983_setup(st, true);
 	if (ret)
 		return ret;
drivers/media/test-drivers/vivid/vivid-core.c +34 -4
index d2bd2653cf54..065bdc33f049 100644
@@ -330,6 +330,28 @@ static int vidioc_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *a
 	return vivid_vid_out_g_fbuf(file, fh, a);
 }
 
+/*
+ * Only support the framebuffer of one of the vivid instances.
+ * Anything else is rejected.
+ */
+bool vivid_validate_fb(const struct v4l2_framebuffer *a)
+{
+	struct vivid_dev *dev;
+	int i;
+
+	for (i = 0; i < n_devs; i++) {
+		dev = vivid_devs[i];
+		if (!dev || !dev->video_pbase)
+			continue;
+		if ((unsigned long)a->base == dev->video_pbase &&
+		    a->fmt.width <= dev->display_width &&
+		    a->fmt.height <= dev->display_height &&
+		    a->fmt.bytesperline <= dev->display_byte_stride)
+			return true;
+	}
+	return false;
+}
+
 static int vidioc_s_fbuf(struct file *file, void *fh, const struct v4l2_framebuffer *a)
 {
 	struct video_device *vdev = video_devdata(file);
@@ -910,8 +932,12 @@ static int vivid_detect_feature_set(struct vivid_dev *dev, int inst,
 
 	/* how many inputs do we have and of what type? */
 	dev->num_inputs = num_inputs[inst];
-	if (dev->num_inputs < 1)
-		dev->num_inputs = 1;
+	if (node_type & 0x20007) {
+		if (dev->num_inputs < 1)
+			dev->num_inputs = 1;
+	} else {
+		dev->num_inputs = 0;
+	}
 	if (dev->num_inputs >= MAX_INPUTS)
 		dev->num_inputs = MAX_INPUTS;
 	for (i = 0; i < dev->num_inputs; i++) {
@@ -928,8 +954,12 @@ static int vivid_detect_feature_set(struct vivid_dev *dev, int inst,
 
 	/* how many outputs do we have and of what type? */
 	dev->num_outputs = num_outputs[inst];
-	if (dev->num_outputs < 1)
-		dev->num_outputs = 1;
+	if (node_type & 0x40300) {
+		if (dev->num_outputs < 1)
+			dev->num_outputs = 1;
+	} else {
+		dev->num_outputs = 0;
+	}
 	if (dev->num_outputs >= MAX_OUTPUTS)
 		dev->num_outputs = MAX_OUTPUTS;
 	for (i = 0; i < dev->num_outputs; i++) {
drivers/media/test-drivers/vivid/vivid-core.h +2 -0
index 1e3c4f5a9413..7ceaf9bac2f0 100644
@@ -610,4 +610,6 @@ static inline bool vivid_is_hdmi_out(const struct vivid_dev *dev)
 	return dev->output_type[dev->output] == HDMI;
 }
 
+bool vivid_validate_fb(const struct v4l2_framebuffer *a);
+
 #endif
drivers/media/test-drivers/vivid/vivid-vid-cap.c +21 -6
index b9caa4b26209..99139a8cd4c4 100644
@@ -452,6 +452,12 @@ void vivid_update_format_cap(struct vivid_dev *dev, bool keep_controls)
 	tpg_reset_source(&dev->tpg, dev->src_rect.width, dev->src_rect.height, dev->field_cap);
 	dev->crop_cap = dev->src_rect;
 	dev->crop_bounds_cap = dev->src_rect;
+	if (dev->bitmap_cap &&
+	    (dev->compose_cap.width != dev->crop_cap.width ||
+	     dev->compose_cap.height != dev->crop_cap.height)) {
+		vfree(dev->bitmap_cap);
+		dev->bitmap_cap = NULL;
+	}
 	dev->compose_cap = dev->crop_cap;
 	if (V4L2_FIELD_HAS_T_OR_B(dev->field_cap))
 		dev->compose_cap.height /= 2;
@@ -909,6 +915,8 @@ int vivid_vid_cap_s_selection(struct file *file, void *fh, struct v4l2_selection
 	struct vivid_dev *dev = video_drvdata(file);
 	struct v4l2_rect *crop = &dev->crop_cap;
 	struct v4l2_rect *compose = &dev->compose_cap;
+	unsigned orig_compose_w = compose->width;
+	unsigned orig_compose_h = compose->height;
 	unsigned factor = V4L2_FIELD_HAS_T_OR_B(dev->field_cap) ? 2 : 1;
 	int ret;
 
@@ -1025,17 +1033,17 @@ int vivid_vid_cap_s_selection(struct file *file, void *fh, struct v4l2_selection
 			s->r.height /= factor;
 		}
 		v4l2_rect_map_inside(&s->r, &dev->fmt_cap_rect);
-		if (dev->bitmap_cap && (compose->width != s->r.width ||
-					compose->height != s->r.height)) {
-			vfree(dev->bitmap_cap);
-			dev->bitmap_cap = NULL;
-		}
 		*compose = s->r;
 		break;
 	default:
 		return -EINVAL;
 	}
 
+	if (dev->bitmap_cap && (compose->width != orig_compose_w ||
+				compose->height != orig_compose_h)) {
+		vfree(dev->bitmap_cap);
+		dev->bitmap_cap = NULL;
+	}
 	tpg_s_crop_compose(&dev->tpg, crop, compose);
 	return 0;
 }
@@ -1272,7 +1280,14 @@ int vivid_vid_cap_s_fbuf(struct file *file, void *fh,
 		return -EINVAL;
 	if (a->fmt.bytesperline < (a->fmt.width * fmt->bit_depth[0]) / 8)
 		return -EINVAL;
-	if (a->fmt.height * a->fmt.bytesperline < a->fmt.sizeimage)
+	if (a->fmt.bytesperline > a->fmt.sizeimage / a->fmt.height)
+		return -EINVAL;
+
+	/*
+	 * Only support the framebuffer of one of the vivid instances.
+	 * Anything else is rejected.
+	 */
+	if (!vivid_validate_fb(a))
 		return -EINVAL;
 
 	dev->fb_vbase_cap = phys_to_virt((unsigned long)a->base);
drivers/media/v4l2-core/v4l2-dv-timings.c +14 -0
index af48705c704f..003c32fed3f7 100644
@@ -161,6 +161,20 @@ bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t,
 	    (bt->interlaced && !(caps & V4L2_DV_BT_CAP_INTERLACED)) ||
 	    (!bt->interlaced && !(caps & V4L2_DV_BT_CAP_PROGRESSIVE)))
 		return false;
+
+	/* sanity checks for the blanking timings */
+	if (!bt->interlaced &&
+	    (bt->il_vbackporch || bt->il_vsync || bt->il_vfrontporch))
+		return false;
+	if (bt->hfrontporch > 2 * bt->width ||
+	    bt->hsync > 1024 || bt->hbackporch > 1024)
+		return false;
+	if (bt->vfrontporch > 4096 ||
+	    bt->vsync > 128 || bt->vbackporch > 4096)
+		return false;
+	if (bt->interlaced && (bt->il_vfrontporch > 4096 ||
+	    bt->il_vsync > 128 || bt->il_vbackporch > 4096))
+		return false;
 	return fnc == NULL || fnc(t, fnc_handle);
 }
 EXPORT_SYMBOL_GPL(v4l2_valid_dv_timings);
drivers/mmc/core/block.c +26 -18

72 lines not on this page · raw message

drivers/mmc/core/sdio_bus.c +2 -1
index fda03b35c14a..cac9e0f13320 100644
@@ -290,7 +290,8 @@ static void sdio_release_func(struct device *dev)
 {
 	struct sdio_func *func = dev_to_sdio_func(dev);
 
-	sdio_free_func_cis(func);
+	if (!(func->card->quirks & MMC_QUIRK_NONSTD_SDIO))
+		sdio_free_func_cis(func);
 
 	kfree(func->info);
 	kfree(func->tmpbuf);
drivers/mmc/host/Kconfig +2 -1
index ccc148cdb5ee..c167186085c8 100644
@@ -1069,9 +1069,10 @@ config MMC_SDHCI_OMAP
 
 config MMC_SDHCI_AM654
 	tristate "Support for the SDHCI Controller in TI's AM654 SOCs"
-	depends on MMC_SDHCI_PLTFM && OF && REGMAP_MMIO
+	depends on MMC_SDHCI_PLTFM && OF
 	select MMC_SDHCI_IO_ACCESSORS
 	select MMC_CQHCI
+	select REGMAP_MMIO
 	help
 	  This selects the Secure Digital Host Controller Interface (SDHCI)
 	  support present in TI's AM654 SOCs. The controller supports
drivers/mmc/host/sdhci-esdhc-imx.c +8 -6
index 60f19369de84..bbcbdc4327dc 100644
@@ -1643,6 +1643,10 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
 		host->mmc_host_ops.execute_tuning = usdhc_execute_tuning;
 	}
 
+	err = sdhci_esdhc_imx_probe_dt(pdev, host, imx_data);
+	if (err)
+		goto disable_ahb_clk;
+
 	if (imx_data->socdata->flags & ESDHC_FLAG_MAN_TUNING)
 		sdhci_esdhc_ops.platform_execute_tuning =
 					esdhc_executing_tuning;
@@ -1650,13 +1654,15 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
 	if (imx_data->socdata->flags & ESDHC_FLAG_ERR004536)
 		host->quirks |= SDHCI_QUIRK_BROKEN_ADMA;
 
-	if (imx_data->socdata->flags & ESDHC_FLAG_HS400)
+	if (host->caps & MMC_CAP_8_BIT_DATA &&
+	    imx_data->socdata->flags & ESDHC_FLAG_HS400)
 		host->mmc->caps2 |= MMC_CAP2_HS400;
 
 	if (imx_data->socdata->flags & ESDHC_FLAG_BROKEN_AUTO_CMD23)
 		host->quirks2 |= SDHCI_QUIRK2_ACMD23_BROKEN;
 
-	if (imx_data->socdata->flags & ESDHC_FLAG_HS400_ES) {
+	if (host->caps & MMC_CAP_8_BIT_DATA &&
+	    imx_data->socdata->flags & ESDHC_FLAG_HS400_ES) {
 		host->mmc->caps2 |= MMC_CAP2_HS400_ES;
 		host->mmc_host_ops.hs400_enhanced_strobe =
 					esdhc_hs400_enhanced_strobe;
@@ -1678,10 +1684,6 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
 			goto disable_ahb_clk;
 	}
 
-	err = sdhci_esdhc_imx_probe_dt(pdev, host, imx_data);
-	if (err)
-		goto disable_ahb_clk;
-
 	sdhci_esdhc_imx_hwinit(host);
 
 	err = sdhci_add_host(host);
drivers/mmc/host/sdhci-pci-core.c +11 -3
index c2b26ada104d..65e61cdac118 100644
@@ -978,6 +978,12 @@ static bool glk_broken_cqhci(struct sdhci_pci_slot *slot)
 		dmi_match(DMI_SYS_VENDOR, "IRBIS"));
 }
 
+static bool jsl_broken_hs400es(struct sdhci_pci_slot *slot)
+{
+	return slot->chip->pdev->device == PCI_DEVICE_ID_INTEL_JSL_EMMC &&
+			dmi_match(DMI_BIOS_VENDOR, "ASUSTeK COMPUTER INC.");
+}
+
 static int glk_emmc_probe_slot(struct sdhci_pci_slot *slot)
 {
 	int ret = byt_emmc_probe_slot(slot);
@@ -986,9 +992,11 @@ static int glk_emmc_probe_slot(struct sdhci_pci_slot *slot)
 		slot->host->mmc->caps2 |= MMC_CAP2_CQE;
 
 	if (slot->chip->pdev->device != PCI_DEVICE_ID_INTEL_GLK_EMMC) {
-		slot->host->mmc->caps2 |= MMC_CAP2_HS400_ES;
-		slot->host->mmc_host_ops.hs400_enhanced_strobe =
-						intel_hs400_enhanced_strobe;
+		if (!jsl_broken_hs400es(slot)) {
+			slot->host->mmc->caps2 |= MMC_CAP2_HS400_ES;
+			slot->host->mmc_host_ops.hs400_enhanced_strobe =
+							intel_hs400_enhanced_strobe;
+		}
 		slot->host->mmc->caps2 |= MMC_CAP2_CQE_DCMD;
 	}
 
drivers/mtd/nand/raw/intel-nand-controller.c +12 -7
index 056835fd4562..53071e791e17 100644
@@ -614,11 +614,12 @@ static int ebu_nand_probe(struct platform_device *pdev)
 	ret = of_property_read_u32(chip_np, "reg", &cs);
 	if (ret) {
 		dev_err(dev, "failed to get chip select: %d\n", ret);
-		return ret;
+		goto err_of_node_put;
 	}
 	if (cs >= MAX_CS) {
 		dev_err(dev, "got invalid chip select: %d\n", cs);
-		return -EINVAL;
+		ret = -EINVAL;
+		goto err_of_node_put;
 	}
 
 	ebu_host->cs_num = cs;
@@ -627,18 +628,20 @@ static int ebu_nand_probe(struct platform_device *pdev)
 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, resname);
 	ebu_host->cs[cs].chipaddr = devm_ioremap_resource(dev, res);
 	if (IS_ERR(ebu_host->cs[cs].chipaddr))
-		return PTR_ERR(ebu_host->cs[cs].chipaddr);
+		goto err_of_node_put;
 	ebu_host->cs[cs].nand_pa = res->start;
 
 	ebu_host->clk = devm_clk_get(dev, NULL);
-	if (IS_ERR(ebu_host->clk))
-		return dev_err_probe(dev, PTR_ERR(ebu_host->clk),
-				     "failed to get clock\n");
+	if (IS_ERR(ebu_host->clk)) {
+		ret = dev_err_probe(dev, PTR_ERR(ebu_host->clk),
+				    "failed to get clock\n");
+		goto err_of_node_put;
+	}
 
 	ret = clk_prepare_enable(ebu_host->clk);
 	if (ret) {
 		dev_err(dev, "failed to enable clock: %d\n", ret);
-		return ret;
+		goto err_of_node_put;
 	}
 	ebu_host->clk_rate = clk_get_rate(ebu_host->clk);
 
@@ -703,6 +706,8 @@ static int ebu_nand_probe(struct platform_device *pdev)
 	ebu_dma_cleanup(ebu_host);
 err_disable_unprepare_clk:
 	clk_disable_unprepare(ebu_host->clk);
+err_of_node_put:
+	of_node_put(chip_np);
 
 	return ret;
 }
drivers/mtd/nand/raw/marvell_nand.c +1 -1
index 2455a581fd70..b248c5f657d5 100644
@@ -2672,7 +2672,7 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc,
 	chip->controller = &nfc->controller;
 	nand_set_flash_node(chip, np);
 
-	if (!of_property_read_bool(np, "marvell,nand-keep-config"))
+	if (of_property_read_bool(np, "marvell,nand-keep-config"))
 		chip->options |= NAND_KEEP_TIMINGS;
 
 	mtd = nand_to_mtd(chip);
drivers/net/can/mscan/mpc5xxx_can.c +5 -3
index 35892c1efef0..7d868b6eb579 100644
@@ -322,14 +322,14 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev)
 					       &mscan_clksrc);
 	if (!priv->can.clock.freq) {
 		dev_err(&ofdev->dev, "couldn't get MSCAN clock properties\n");
-		goto exit_free_mscan;
+		goto exit_put_clock;
 	}
 
 	err = register_mscandev(dev, mscan_clksrc);
 	if (err) {
 		dev_err(&ofdev->dev, "registering %s failed (err=%d)\n",
 			DRV_NAME, err);
-		goto exit_free_mscan;
+		goto exit_put_clock;
 	}
 
 	dev_info(&ofdev->dev, "MSCAN at 0x%p, irq %d, clock %d Hz\n",
@@ -337,7 +337,9 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev)
 
 	return 0;
 
-exit_free_mscan:
+exit_put_clock:
+	if (data->put_clock)
+		data->put_clock(ofdev);
 	free_candev(dev);
 exit_dispose_irq:
 	irq_dispose_mapping(irq);
drivers/net/can/rcar/rcar_canfd.c +11 -13
index 2f44c567ebd7..4e230e145664 100644
@@ -1106,11 +1106,13 @@ static void rcar_canfd_handle_global_receive(struct rcar_canfd_global *gpriv, u3
 {
 	struct rcar_canfd_channel *priv = gpriv->ch[ch];
 	u32 ridx = ch + RCANFD_RFFIFO_IDX;
-	u32 sts;
+	u32 sts, cc;
 
 	/* Handle Rx interrupts */
 	sts = rcar_canfd_read(priv->base, RCANFD_RFSTS(ridx));
-	if (likely(sts & RCANFD_RFSTS_RFIF)) {
+	cc = rcar_canfd_read(priv->base, RCANFD_RFCC(ridx));
+	if (likely(sts & RCANFD_RFSTS_RFIF &&
+		   cc & RCANFD_RFCC_RFIE)) {
 		if (napi_schedule_prep(&priv->napi)) {
 			/* Disable Rx FIFO interrupts */
 			rcar_canfd_clear_bit(priv->base,
@@ -1195,11 +1197,9 @@ static void rcar_canfd_handle_channel_tx(struct rcar_canfd_global *gpriv, u32 ch
 
 static irqreturn_t rcar_canfd_channel_tx_interrupt(int irq, void *dev_id)
 {
-	struct rcar_canfd_global *gpriv = dev_id;
-	u32 ch;
+	struct rcar_canfd_channel *priv = dev_id;
 
-	for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS)
-		rcar_canfd_handle_channel_tx(gpriv, ch);
+	rcar_canfd_handle_channel_tx(priv->gpriv, priv->channel);
 
 	return IRQ_HANDLED;
 }
@@ -1227,11 +1227,9 @@ static void rcar_canfd_handle_channel_err(struct rcar_canfd_global *gpriv, u32 c
 
 static irqreturn_t rcar_canfd_channel_err_interrupt(int irq, void *dev_id)
 {
-	struct rcar_canfd_global *gpriv = dev_id;
-	u32 ch;
+	struct rcar_canfd_channel *priv = dev_id;
 
-	for_each_set_bit(ch, &gpriv->channels_mask, RCANFD_NUM_CHANNELS)
-		rcar_canfd_handle_channel_err(gpriv, ch);
+	rcar_canfd_handle_channel_err(priv->gpriv, priv->channel);
 
 	return IRQ_HANDLED;
 }
@@ -1649,6 +1647,7 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
 	priv->ndev = ndev;
 	priv->base = gpriv->base;
 	priv->channel = ch;
+	priv->gpriv = gpriv;
 	priv->can.clock.freq = fcan_freq;
 	dev_info(&pdev->dev, "can_clk rate is %u\n", priv->can.clock.freq);
 
@@ -1677,7 +1676,7 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
 		}
 		err = devm_request_irq(&pdev->dev, err_irq,
 				       rcar_canfd_channel_err_interrupt, 0,
-				       irq_name, gpriv);
+				       irq_name, priv);
 		if (err) {
 			dev_err(&pdev->dev, "devm_request_irq CH Err(%d) failed, error %d\n",
 				err_irq, err);
@@ -1691,7 +1690,7 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
 		}
 		err = devm_request_irq(&pdev->dev, tx_irq,
 				       rcar_canfd_channel_tx_interrupt, 0,
-				       irq_name, gpriv);
+				       irq_name, priv);
 		if (err) {
 			dev_err(&pdev->dev, "devm_request_irq Tx (%d) failed, error %d\n",
 				tx_irq, err);
@@ -1715,7 +1714,6 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
 
 	priv->can.do_set_mode = rcar_canfd_do_set_mode;
 	priv->can.do_get_berr_counter = rcar_canfd_get_berr_counter;
-	priv->gpriv = gpriv;
 	SET_NETDEV_DEV(ndev, &pdev->dev);
 
 	netif_napi_add(ndev, &priv->napi, rcar_canfd_rx_poll,
drivers/net/can/spi/mcp251x.c +4 -1
index baab3adc34bc..f02275f71e4d 100644
@@ -1419,11 +1419,14 @@ static int mcp251x_can_probe(struct spi_device *spi)
 
 	ret = mcp251x_gpio_setup(priv);
 	if (ret)
-		goto error_probe;
+		goto out_unregister_candev;
 
 	netdev_info(net, "MCP%x successfully initialized.\n", priv->model);
 	return 0;
 
+out_unregister_candev:
+	unregister_candev(net);
+
 error_probe:
 	destroy_workqueue(priv->wq);
 	priv->wq = NULL;
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +2 -2
index 45eb7e462ce9..3ff2cd9828d2 100644
@@ -1873,7 +1873,7 @@ static int kvaser_usb_hydra_start_chip(struct kvaser_usb_net_priv *priv)
 {
 	int err;
 
-	init_completion(&priv->start_comp);
+	reinit_completion(&priv->start_comp);
 
 	err = kvaser_usb_hydra_send_simple_cmd(priv->dev, CMD_START_CHIP_REQ,
 					       priv->channel);
@@ -1891,7 +1891,7 @@ static int kvaser_usb_hydra_stop_chip(struct kvaser_usb_net_priv *priv)
 {
 	int err;
 
-	init_completion(&priv->stop_comp);
+	reinit_completion(&priv->stop_comp);
 
 	/* Make sure we do not report invalid BUS_OFF from CMD_CHIP_STATE_EVENT
 	 * see comment in kvaser_usb_hydra_update_state()
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +2 -2
index 4312be05fc5b..7a71097281c2 100644
@@ -1324,7 +1324,7 @@ static int kvaser_usb_leaf_start_chip(struct kvaser_usb_net_priv *priv)
 {
 	int err;
 
-	init_completion(&priv->start_comp);
+	reinit_completion(&priv->start_comp);
 
 	err = kvaser_usb_leaf_send_simple_cmd(priv->dev, CMD_START_CHIP,
 					      priv->channel);
@@ -1342,7 +1342,7 @@ static int kvaser_usb_leaf_stop_chip(struct kvaser_usb_net_priv *priv)
 {
 	int err;
 
-	init_completion(&priv->stop_comp);
+	reinit_completion(&priv->stop_comp);
 
 	err = kvaser_usb_leaf_send_simple_cmd(priv->dev, CMD_STOP_CHIP,
 					      priv->channel);
drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +12 -5
index 213769054391..a7166cd1179f 100644
@@ -239,6 +239,7 @@ enum xgbe_sfp_speed {
 #define XGBE_SFP_BASE_BR_1GBE_MAX		0x0d
 #define XGBE_SFP_BASE_BR_10GBE_MIN		0x64
 #define XGBE_SFP_BASE_BR_10GBE_MAX		0x68
+#define XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX	0x78
 
 #define XGBE_SFP_BASE_CU_CABLE_LEN		18
 
@@ -284,6 +285,8 @@ struct xgbe_sfp_eeprom {
 #define XGBE_BEL_FUSE_VENDOR	"BEL-FUSE        "
 #define XGBE_BEL_FUSE_PARTNO	"1GBT-SFP06      "
 
+#define XGBE_MOLEX_VENDOR	"Molex Inc.      "
+
 struct xgbe_sfp_ascii {
 	union {
 		char vendor[XGBE_SFP_BASE_VENDOR_NAME_LEN + 1];
@@ -834,7 +837,11 @@ static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom,
 		break;
 	case XGBE_SFP_SPEED_10000:
 		min = XGBE_SFP_BASE_BR_10GBE_MIN;
-		max = XGBE_SFP_BASE_BR_10GBE_MAX;
+		if (memcmp(&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME],
+			   XGBE_MOLEX_VENDOR, XGBE_SFP_BASE_VENDOR_NAME_LEN) == 0)
+			max = XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX;
+		else
+			max = XGBE_SFP_BASE_BR_10GBE_MAX;
 		break;
 	default:
 		return false;
@@ -1151,7 +1158,10 @@ static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata)
 	}
 
 	/* Determine the type of SFP */
-	if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_SR)
+	if (phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE &&
+	    xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000))
+		phy_data->sfp_base = XGBE_SFP_BASE_10000_CR;
+	else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_SR)
 		phy_data->sfp_base = XGBE_SFP_BASE_10000_SR;
 	else if (sfp_base[XGBE_SFP_BASE_10GBE_CC] & XGBE_SFP_BASE_10GBE_CC_LR)
 		phy_data->sfp_base = XGBE_SFP_BASE_10000_LR;
@@ -1167,9 +1177,6 @@ static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata)
 		phy_data->sfp_base = XGBE_SFP_BASE_1000_CX;
 	else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_T)
 		phy_data->sfp_base = XGBE_SFP_BASE_1000_T;
-	else if ((phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE) &&
-		 xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000))
-		phy_data->sfp_base = XGBE_SFP_BASE_10000_CR;
 
 	switch (phy_data->sfp_base) {
 	case XGBE_SFP_BASE_1000_T:
drivers/net/ethernet/aquantia/atlantic/aq_macsec.c +72 -24

171 lines not on this page · raw message

drivers/net/ethernet/aquantia/atlantic/aq_nic.h +2 -0
index 1a7148041e3d..b7f7d6f66633 100644
@@ -154,6 +154,8 @@ struct aq_nic_s {
 	struct mutex fwreq_mutex;
 #if IS_ENABLED(CONFIG_MACSEC)
 	struct aq_macsec_cfg *macsec_cfg;
+	/* mutex to protect data in macsec_cfg */
+	struct mutex macsec_mutex;
 #endif
 	/* PTP support */
 	struct aq_ptp_s *aq_ptp;
drivers/net/ethernet/broadcom/bcm4908_enet.c +6 -4
index 376f81796a29..7e89664943ce 100644
@@ -561,8 +561,6 @@ static int bcm4908_enet_start_xmit(struct sk_buff *skb, struct net_device *netde
 
 	if (++ring->write_idx == ring->length - 1)
 		ring->write_idx = 0;
-	enet->netdev->stats.tx_bytes += skb->len;
-	enet->netdev->stats.tx_packets++;
 
 	return NETDEV_TX_OK;
 }
@@ -646,13 +644,17 @@ static int bcm4908_enet_poll_tx(struct napi_struct *napi, int weight)
 
 		dma_unmap_single(dev, slot->dma_addr, slot->len, DMA_TO_DEVICE);
 		dev_kfree_skb(slot->skb);
+
+		handled++;
 		bytes += slot->len;
+
 		if (++tx_ring->read_idx == tx_ring->length)
 			tx_ring->read_idx = 0;
-
-		handled++;
 	}
 
+	enet->netdev->stats.tx_packets += handled;
+	enet->netdev->stats.tx_bytes += bytes;
+
 	if (handled < weight) {
 		napi_complete_done(napi, handled);
 		bcm4908_enet_dma_ring_intrs_on(enet, tx_ring);
drivers/net/ethernet/broadcom/bcmsysport.c +3 -0
index ae541a9d1eee..4c7f828c69c6 100644
@@ -1991,6 +1991,9 @@ static int bcm_sysport_open(struct net_device *dev)
 		goto out_clk_disable;
 	}
 
+	/* Indicate that the MAC is responsible for PHY PM */
+	phydev->mac_managed_pm = true;
+
 	/* Reset house keeping link status */
 	priv->old_duplex = -1;
 	priv->old_link = -1;
drivers/net/ethernet/cadence/macb_main.c +1 -0
index 3ca3f9d0fd9b..61efb2350412 100644
@@ -880,6 +880,7 @@ static int macb_mii_probe(struct net_device *dev)
 
 	bp->phylink_config.dev = &dev->dev;
 	bp->phylink_config.type = PHYLINK_NETDEV;
+	bp->phylink_config.mac_managed_pm = true;
 
 	if (bp->phy_interface == PHY_INTERFACE_MODE_SGMII) {
 		bp->phylink_config.poll_fixed_state = true;
drivers/net/ethernet/freescale/enetc/enetc.c +5 -0
index c0265a6f10c0..77d765809c1e 100644
@@ -1800,7 +1800,12 @@ static void enetc_setup_rxbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)
 	else
 		enetc_rxbdr_wr(hw, idx, ENETC_RBBSR, ENETC_RXB_DMA_SIZE);
 
+	/* Also prepare the consumer index in case page allocation never
+	 * succeeds. In that case, hardware will never advance producer index
+	 * to match consumer index, and will drop all frames.
+	 */
 	enetc_rxbdr_wr(hw, idx, ENETC_RBPIR, 0);
+	enetc_rxbdr_wr(hw, idx, ENETC_RBCIR, 1);
 
 	/* enable Rx ints by setting pkt thr to 1 */
 	enetc_rxbdr_wr(hw, idx, ENETC_RBICR0, ENETC_RBICR0_ICEN | 0x1);
drivers/net/ethernet/freescale/fec_main.c +44 -2

65 lines not on this page · raw message

drivers/net/ethernet/huawei/hinic/hinic_debugfs.c +12 -6
index 19eb839177ec..061952c6c21a 100644
@@ -85,6 +85,7 @@ static int hinic_dbg_get_func_table(struct hinic_dev *nic_dev, int idx)
 	struct tag_sml_funcfg_tbl *funcfg_table_elem;
 	struct hinic_cmd_lt_rd *read_data;
 	u16 out_size = sizeof(*read_data);
+	int ret = ~0;
 	int err;
 
 	read_data = kzalloc(sizeof(*read_data), GFP_KERNEL);
@@ -111,20 +112,25 @@ static int hinic_dbg_get_func_table(struct hinic_dev *nic_dev, int idx)
 
 	switch (idx) {
 	case VALID:
-		return funcfg_table_elem->dw0.bs.valid;
+		ret = funcfg_table_elem->dw0.bs.valid;
+		break;
 	case RX_MODE:
-		return funcfg_table_elem->dw0.bs.nic_rx_mode;
+		ret = funcfg_table_elem->dw0.bs.nic_rx_mode;
+		break;
 	case MTU:
-		return funcfg_table_elem->dw1.bs.mtu;
+		ret = funcfg_table_elem->dw1.bs.mtu;
+		break;
 	case RQ_DEPTH:
-		return funcfg_table_elem->dw13.bs.cfg_rq_depth;
+		ret = funcfg_table_elem->dw13.bs.cfg_rq_depth;
+		break;
 	case QUEUE_NUM:
-		return funcfg_table_elem->dw13.bs.cfg_q_num;
+		ret = funcfg_table_elem->dw13.bs.cfg_q_num;
+		break;
 	}
 
 	kfree(read_data);
 
-	return ~0;
+	return ret;
 }
 
 static ssize_t hinic_dbg_cmd_read(struct file *filp, char __user *buffer, size_t count,
drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c +1 -1
index a627237f694b..afa816cfcdf4 100644
@@ -929,7 +929,7 @@ int hinic_init_cmdqs(struct hinic_cmdqs *cmdqs, struct hinic_hwif *hwif,
 
 err_set_cmdq_depth:
 	hinic_ceq_unregister_cb(&func_to_io->ceqs, HINIC_CEQ_CMDQ);
-
+	free_cmdq(&cmdqs->cmdq[HINIC_CMDQ_SYNC]);
 err_cmdq_ctxt:
 	hinic_wqs_cmdq_free(&cmdqs->cmdq_pages, cmdqs->saved_wqs,
 			    HINIC_MAX_CMDQ_TYPES);
drivers/net/ethernet/huawei/hinic/hinic_hw_dev.c +1 -1
index ca76896d9f1c..8b04d133b3c4 100644
@@ -892,7 +892,7 @@ int hinic_set_interrupt_cfg(struct hinic_hwdev *hwdev,
 	if (err)
 		return -EINVAL;
 
-	interrupt_info->lli_credit_cnt = temp_info.lli_timer_cnt;
+	interrupt_info->lli_credit_cnt = temp_info.lli_credit_cnt;
 	interrupt_info->lli_timer_cnt = temp_info.lli_timer_cnt;
 
 	err = hinic_msg_to_mgmt(&pfhwdev->pf_to_mgmt, HINIC_MOD_COMM,
drivers/net/ethernet/huawei/hinic/hinic_sriov.c +0 -1
index a78c398bf5b2..e81a7b28209b 100644
@@ -1180,7 +1180,6 @@ int hinic_vf_func_init(struct hinic_hwdev *hwdev)
 			dev_err(&hwdev->hwif->pdev->dev,
 				"Failed to register VF, err: %d, status: 0x%x, out size: 0x%x\n",
 				err, register_info.status, out_size);
-			hinic_unregister_vf_mbox_cb(hwdev, HINIC_MOD_L2NIC);
 			return -EIO;
 		}
 	} else {
drivers/net/ethernet/ibm/ehea/ehea_main.c +1 -0
index d5df131b183c..6c534b92aeed 100644
@@ -2898,6 +2898,7 @@ static struct device *ehea_register_port(struct ehea_port *port,
 	ret = of_device_register(&port->ofdev);
 	if (ret) {
 		pr_err("failed to register device. ret=%d\n", ret);
+		put_device(&port->ofdev.dev);
 		goto out;
 	}
 
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +60 -40

158 lines not on this page · raw message

drivers/net/ethernet/intel/i40e/i40e_type.h +4 -0
index 7b3f30beb757..388c3d36d96a 100644
@@ -1404,6 +1404,10 @@ struct i40e_lldp_variables {
 #define I40E_PFQF_CTL_0_HASHLUTSIZE_512	0x00010000
 
 /* INPUT SET MASK for RSS, flow director, and flexible payload */
+#define I40E_X722_L3_SRC_SHIFT		49
+#define I40E_X722_L3_SRC_MASK		(0x3ULL << I40E_X722_L3_SRC_SHIFT)
+#define I40E_X722_L3_DST_SHIFT		41
+#define I40E_X722_L3_DST_MASK		(0x3ULL << I40E_X722_L3_DST_SHIFT)
 #define I40E_L3_SRC_SHIFT		47
 #define I40E_L3_SRC_MASK		(0x3ULL << I40E_L3_SRC_SHIFT)
 #define I40E_L3_V6_SRC_SHIFT		43
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +32 -11

86 lines not on this page · raw message

drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h +1 -0
index a554d0a0b09b..358bbdb58795 100644
@@ -39,6 +39,7 @@ enum i40e_vf_states {
 	I40E_VF_STATE_MC_PROMISC,
 	I40E_VF_STATE_UC_PROMISC,
 	I40E_VF_STATE_PRE_ENABLE,
+	I40E_VF_STATE_RESETTING
 };
 
 /* VF capabilities */
drivers/net/ethernet/lantiq_etop.c +0 -1
index 62f8c5212182..057d655d1769 100644
@@ -466,7 +466,6 @@ ltq_etop_tx(struct sk_buff *skb, struct net_device *dev)
 	len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
 
 	if ((desc->ctl & (LTQ_DMA_OWN | LTQ_DMA_C)) || ch->skb[ch->dma.desc]) {
-		dev_kfree_skb_any(skb);
 		netdev_err(dev, "tx ring full\n");
 		netif_tx_stop_queue(txq);
 		return NETDEV_TX_BUSY;
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +5 -5
index e06a6104e91f..8a3100f32d3b 100644
@@ -1865,7 +1865,7 @@ void mlx5_cmd_init_async_ctx(struct mlx5_core_dev *dev,
 	ctx->dev = dev;
 	/* Starts at 1 to avoid doing wake_up if we are not cleaning up */
 	atomic_set(&ctx->num_inflight, 1);
-	init_waitqueue_head(&ctx->wait);
+	init_completion(&ctx->inflight_done);
 }
 EXPORT_SYMBOL(mlx5_cmd_init_async_ctx);
 
@@ -1879,8 +1879,8 @@ EXPORT_SYMBOL(mlx5_cmd_init_async_ctx);
  */
 void mlx5_cmd_cleanup_async_ctx(struct mlx5_async_ctx *ctx)
 {
-	atomic_dec(&ctx->num_inflight);
-	wait_event(ctx->wait, atomic_read(&ctx->num_inflight) == 0);
+	if (!atomic_dec_and_test(&ctx->num_inflight))
+		wait_for_completion(&ctx->inflight_done);
 }
 EXPORT_SYMBOL(mlx5_cmd_cleanup_async_ctx);
 
@@ -1891,7 +1891,7 @@ static void mlx5_cmd_exec_cb_handler(int status, void *_work)
 
 	work->user_callback(status, work);
 	if (atomic_dec_and_test(&ctx->num_inflight))
-		wake_up(&ctx->wait);
+		complete(&ctx->inflight_done);
 }
 
 int mlx5_cmd_exec_cb(struct mlx5_async_ctx *ctx, void *in, int in_size,
@@ -1907,7 +1907,7 @@ int mlx5_cmd_exec_cb(struct mlx5_async_ctx *ctx, void *in, int in_size,
 	ret = cmd_exec(ctx->dev, in, in_size, out, out_size,
 		       mlx5_cmd_exec_cb_handler, work, false);
 	if (ret && atomic_dec_and_test(&ctx->num_inflight))
-		wake_up(&ctx->wait);
+		complete(&ctx->inflight_done);
 
 	return ret;
 }
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h +9 -0
index a71a32e00ebb..dc7c57e6de77 100644
@@ -6,6 +6,7 @@
 
 #include "en.h"
 #include "en_stats.h"
+#include "en/txrx.h"
 #include <linux/ptp_classify.h>
 
 #define MLX5E_PTP_CHANNEL_IX 0
@@ -67,6 +68,14 @@ static inline bool mlx5e_use_ptpsq(struct sk_buff *skb)
 		fk.ports.dst == htons(PTP_EV_PORT));
 }
 
+static inline bool mlx5e_ptpsq_fifo_has_room(struct mlx5e_txqsq *sq)
+{
+	if (!sq->ptpsq)
+		return true;
+
+	return mlx5e_skb_fifo_has_room(&sq->ptpsq->skb_fifo);
+}
+
 int mlx5e_ptp_open(struct mlx5e_priv *priv, struct mlx5e_params *params,
 		   u8 lag_port, struct mlx5e_ptp **cp);
 void mlx5e_ptp_close(struct mlx5e_ptp *c);
drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h +6 -0
index 055c3bc23733..f5c872043bcb 100644
@@ -73,6 +73,12 @@ netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev);
 bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget);
 void mlx5e_free_txqsq_descs(struct mlx5e_txqsq *sq);
 
+static inline bool
+mlx5e_skb_fifo_has_room(struct mlx5e_skb_fifo *fifo)
+{
+	return (*fifo->pc - *fifo->cc) < fifo->mask;
+}
+
 static inline bool
 mlx5e_wqc_has_room_for(struct mlx5_wq_cyc *wq, u16 cc, u16 pc, u16 n)
 {
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +0 -3
index 7cab08a2f715..05882d1a4407 100644
@@ -113,7 +113,6 @@ static bool mlx5e_ipsec_update_esn_state(struct mlx5e_ipsec_sa_entry *sa_entry)
 	struct xfrm_replay_state_esn *replay_esn;
 	u32 seq_bottom = 0;
 	u8 overlap;
-	u32 *esn;
 
 	if (!(sa_entry->x->props.flags & XFRM_STATE_ESN)) {
 		sa_entry->esn_state.trigger = 0;
@@ -128,11 +127,9 @@ static bool mlx5e_ipsec_update_esn_state(struct mlx5e_ipsec_sa_entry *sa_entry)
 
 	sa_entry->esn_state.esn = xfrm_replay_seqhi(sa_entry->x,
 						    htonl(seq_bottom));
-	esn = &sa_entry->esn_state.esn;
 
 	sa_entry->esn_state.trigger = 1;
 	if (unlikely(overlap && seq_bottom < MLX5E_IPSEC_ESN_SCOPE_MID)) {
-		++(*esn);
 		sa_entry->esn_state.overlap = 0;
 		return true;
 	} else if (unlikely(!overlap &&
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +6 -0
index 1544d4c2c636..e18fa5ae0fd8 100644
@@ -479,6 +479,11 @@ mlx5e_txwqe_complete(struct mlx5e_txqsq *sq, struct sk_buff *skb,
 	if (unlikely(sq->ptpsq)) {
 		mlx5e_skb_cb_hwtstamp_init(skb);
 		mlx5e_skb_fifo_push(&sq->ptpsq->skb_fifo, skb);
+		if (!netif_tx_queue_stopped(sq->txq) &&
+		    !mlx5e_skb_fifo_has_room(&sq->ptpsq->skb_fifo)) {
+			netif_tx_stop_queue(sq->txq);
+			sq->stats->stopped++;
+		}
 		skb_get(skb);
 	}
 
@@ -906,6 +911,7 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget)
 
 	if (netif_tx_queue_stopped(sq->txq) &&
 	    mlx5e_wqc_has_room_for(&sq->wq, sq->cc, sq->pc, sq->stop_room) &&
+	    mlx5e_ptpsq_fifo_has_room(sq) &&
 	    !test_bit(MLX5E_SQ_STATE_RECOVERING, &sq->state)) {
 		netif_tx_wake_queue(sq->txq);
 		stats->wake++;
drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c +3 -3
index 839a01da110f..8ff16318e32d 100644
@@ -122,7 +122,7 @@ void mlx5_mpfs_cleanup(struct mlx5_core_dev *dev)
 {
 	struct mlx5_mpfs *mpfs = dev->priv.mpfs;
 
-	if (!MLX5_ESWITCH_MANAGER(dev))
+	if (!mpfs)
 		return;
 
 	WARN_ON(!hlist_empty(mpfs->hash));
@@ -137,7 +137,7 @@ int mlx5_mpfs_add_mac(struct mlx5_core_dev *dev, u8 *mac)
 	int err = 0;
 	u32 index;
 
-	if (!MLX5_ESWITCH_MANAGER(dev))
+	if (!mpfs)
 		return 0;
 
 	mutex_lock(&mpfs->lock);
@@ -185,7 +185,7 @@ int mlx5_mpfs_del_mac(struct mlx5_core_dev *dev, u8 *mac)
 	int err = 0;
 	u32 index;
 
-	if (!MLX5_ESWITCH_MANAGER(dev))
+	if (!mpfs)
 		return 0;
 
 	mutex_lock(&mpfs->lock);
drivers/net/ethernet/mellanox/mlx5/core/main.c +41 -14

103 lines not on this page · raw message

drivers/net/ethernet/micrel/ksz884x.c +1 -1
index a0ee155f9f51..f56bcd3e36d2 100644
@@ -6848,7 +6848,7 @@ static int pcidev_init(struct pci_dev *pdev, const struct pci_device_id *id)
 	char banner[sizeof(version)];
 	struct ksz_switch *sw = NULL;
 
-	result = pci_enable_device(pdev);
+	result = pcim_enable_device(pdev);
 	if (result)
 		return result;
 
drivers/net/ethernet/socionext/netsec.c +2 -0
index 1f46af136aa8..f0451911ab8f 100644
@@ -1964,11 +1964,13 @@ static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
 			ret = PTR_ERR(priv->phydev);
 			dev_err(priv->dev, "get_phy_device err(%d)\n", ret);
 			priv->phydev = NULL;
+			mdiobus_unregister(bus);
 			return -ENODEV;
 		}
 
 		ret = phy_device_register(priv->phydev);
 		if (ret) {
+			phy_device_free(priv->phydev);
 			mdiobus_unregister(bus);
 			dev_err(priv->dev,
 				"phy_device_register err(%d)\n", ret);
drivers/net/ethernet/socionext/sni_ave.c +6 -0
index ae31ed93aaf0..57dc9680ad50 100644
@@ -1229,6 +1229,8 @@ static int ave_init(struct net_device *ndev)
 
 	phy_support_asym_pause(phydev);
 
+	phydev->mac_managed_pm = true;
+
 	phy_attached_info(phydev);
 
 	return 0;
@@ -1758,6 +1760,10 @@ static int ave_resume(struct device *dev)
 
 	ave_global_reset(ndev);
 
+	ret = phy_init_hw(ndev->phydev);
+	if (ret)
+		return ret;
+
 	ave_ethtool_get_wol(ndev, &wol);
 	wol.wolopts = priv->wolopts;
 	__ave_ethtool_set_wol(ndev, &wol);
drivers/net/netdevsim/dev.c +7 -4
index 54313bd57797..94490dfae656 100644
@@ -229,8 +229,10 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
 	if (IS_ERR(nsim_dev->ddir))
 		return PTR_ERR(nsim_dev->ddir);
 	nsim_dev->ports_ddir = debugfs_create_dir("ports", nsim_dev->ddir);
-	if (IS_ERR(nsim_dev->ports_ddir))
-		return PTR_ERR(nsim_dev->ports_ddir);
+	if (IS_ERR(nsim_dev->ports_ddir)) {
+		err = PTR_ERR(nsim_dev->ports_ddir);
+		goto err_ddir;
+	}
 	debugfs_create_bool("fw_update_status", 0600, nsim_dev->ddir,
 			    &nsim_dev->fw_update_status);
 	debugfs_create_u32("fw_update_overwrite_mask", 0600, nsim_dev->ddir,
@@ -267,7 +269,7 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
 	nsim_dev->nodes_ddir = debugfs_create_dir("rate_nodes", nsim_dev->ddir);
 	if (IS_ERR(nsim_dev->nodes_ddir)) {
 		err = PTR_ERR(nsim_dev->nodes_ddir);
-		goto err_out;
+		goto err_ports_ddir;
 	}
 	debugfs_create_bool("fail_trap_drop_counter_get", 0600,
 			    nsim_dev->ddir,
@@ -275,8 +277,9 @@ static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
 	nsim_udp_tunnels_debugfs_create(nsim_dev);
 	return 0;
 
-err_out:
+err_ports_ddir:
 	debugfs_remove_recursive(nsim_dev->ports_ddir);
+err_ddir:
 	debugfs_remove_recursive(nsim_dev->ddir);
 	return err;
 }
drivers/nfc/virtual_ncidev.c +3 -0
index 221fa3bb8705..6317e8505aaa 100644
@@ -54,16 +54,19 @@ static int virtual_nci_send(struct nci_dev *ndev, struct sk_buff *skb)
 	mutex_lock(&nci_mutex);
 	if (state != virtual_ncidev_enabled) {
 		mutex_unlock(&nci_mutex);
+		kfree_skb(skb);
 		return 0;
 	}
 
 	if (send_buff) {
 		mutex_unlock(&nci_mutex);
+		kfree_skb(skb);
 		return -1;
 	}
 	send_buff = skb_copy(skb, GFP_KERNEL);
 	mutex_unlock(&nci_mutex);
 	wake_up_interruptible(&wq);
+	consume_skb(skb);
 
 	return 0;
 }
drivers/pinctrl/pinctrl-ingenic.c +2 -2
index fa6becca1788..c973123e6de9 100644
@@ -643,7 +643,7 @@ static u8 jz4755_lcd_24bit_funcs[] = { 1, 1, 1, 1, 0, 0, };
 static const struct group_desc jz4755_groups[] = {
 	INGENIC_PIN_GROUP("uart0-data", jz4755_uart0_data, 0),
 	INGENIC_PIN_GROUP("uart0-hwflow", jz4755_uart0_hwflow, 0),
-	INGENIC_PIN_GROUP("uart1-data", jz4755_uart1_data, 0),
+	INGENIC_PIN_GROUP("uart1-data", jz4755_uart1_data, 1),
 	INGENIC_PIN_GROUP("uart2-data", jz4755_uart2_data, 1),
 	INGENIC_PIN_GROUP("ssi-dt-b", jz4755_ssi_dt_b, 0),
 	INGENIC_PIN_GROUP("ssi-dt-f", jz4755_ssi_dt_f, 0),
@@ -697,7 +697,7 @@ static const char *jz4755_ssi_groups[] = {
 	"ssi-ce1-b", "ssi-ce1-f",
 };
 static const char *jz4755_mmc0_groups[] = { "mmc0-1bit", "mmc0-4bit", };
-static const char *jz4755_mmc1_groups[] = { "mmc0-1bit", "mmc0-4bit", };
+static const char *jz4755_mmc1_groups[] = { "mmc1-1bit", "mmc1-4bit", };
 static const char *jz4755_i2c_groups[] = { "i2c-data", };
 static const char *jz4755_cim_groups[] = { "cim-data", };
 static const char *jz4755_lcd_groups[] = {
drivers/scsi/lpfc/lpfc.h +0 -40
index f3bcb56e9ef2..b2508a00bafd 100644
@@ -920,10 +920,6 @@ struct lpfc_hba {
 		(struct lpfc_vport *vport,
 		 struct lpfc_io_buf *lpfc_cmd,
 		 uint8_t tmo);
-	int (*lpfc_scsi_prep_task_mgmt_cmd)
-		(struct lpfc_vport *vport,
-		 struct lpfc_io_buf *lpfc_cmd,
-		 u64 lun, u8 task_mgmt_cmd);
 
 	/* IOCB interface function jump table entries */
 	int (*__lpfc_sli_issue_iocb)
@@ -1807,39 +1803,3 @@ static inline int lpfc_is_vmid_enabled(struct lpfc_hba *phba)
 {
 	return phba->cfg_vmid_app_header || phba->cfg_vmid_priority_tagging;
 }
-
-static inline
-u8 get_job_ulpstatus(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
-{
-	if (phba->sli_rev == LPFC_SLI_REV4)
-		return bf_get(lpfc_wcqe_c_status, &iocbq->wcqe_cmpl);
-	else
-		return iocbq->iocb.ulpStatus;
-}
-
-static inline
-u32 get_job_word4(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
-{
-	if (phba->sli_rev == LPFC_SLI_REV4)
-		return iocbq->wcqe_cmpl.parameter;
-	else
-		return iocbq->iocb.un.ulpWord[4];
-}
-
-static inline
-u8 get_job_cmnd(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
-{
-	if (phba->sli_rev == LPFC_SLI_REV4)
-		return bf_get(wqe_cmnd, &iocbq->wqe.generic.wqe_com);
-	else
-		return iocbq->iocb.ulpCommand;
-}
-
-static inline
-u16 get_job_ulpcontext(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
-{
-	if (phba->sli_rev == LPFC_SLI_REV4)
-		return bf_get(wqe_ctxt_tag, &iocbq->wqe.generic.wqe_com);
-	else
-		return iocbq->iocb.ulpContext;
-}
drivers/scsi/lpfc/lpfc_bsg.c +25 -25

158 lines not on this page · raw message

drivers/scsi/lpfc/lpfc_crtn.h +1 -2
index f7bf589b63fb..c9770b1d2366 100644
@@ -129,7 +129,6 @@ void lpfc_disc_list_loopmap(struct lpfc_vport *);
 void lpfc_disc_start(struct lpfc_vport *);
 void lpfc_cleanup_discovery_resources(struct lpfc_vport *);
 void lpfc_cleanup(struct lpfc_vport *);
-void lpfc_prep_embed_io(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_ncmd);
 void lpfc_disc_timeout(struct timer_list *);
 
 int lpfc_unregister_fcf_prep(struct lpfc_hba *);
@@ -211,7 +210,7 @@ int lpfc_config_port_post(struct lpfc_hba *);
 int lpfc_hba_down_prep(struct lpfc_hba *);
 int lpfc_hba_down_post(struct lpfc_hba *);
 void lpfc_hba_init(struct lpfc_hba *, uint32_t *);
-int lpfc_sli3_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cnt);
+int lpfc_post_buffer(struct lpfc_hba *, struct lpfc_sli_ring *, int);
 void lpfc_decode_firmware_rev(struct lpfc_hba *, char *, int);
 int lpfc_online(struct lpfc_hba *);
 void lpfc_unblock_mgmt_io(struct lpfc_hba *);
drivers/scsi/lpfc/lpfc_ct.c +4 -4
index 19e2f8086a6d..dfcb7d4bd7fa 100644
@@ -239,7 +239,7 @@ lpfc_ct_reject_event(struct lpfc_nodelist *ndlp,
 	cmdiocbq->context1 = lpfc_nlp_get(ndlp);
 	cmdiocbq->context2 = (uint8_t *)mp;
 	cmdiocbq->context3 = (uint8_t *)bmp;
-	cmdiocbq->cmd_cmpl = lpfc_ct_unsol_cmpl;
+	cmdiocbq->iocb_cmpl = lpfc_ct_unsol_cmpl;
 	icmd->ulpContext = rx_id;  /* Xri / rx_id */
 	icmd->unsli3.rcvsli3.ox_id = ox_id;
 	icmd->un.ulpWord[3] =
@@ -370,7 +370,7 @@ lpfc_ct_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
 		/* Not enough posted buffers; Try posting more buffers */
 		phba->fc_stat.NoRcvBuf++;
 		if (!(phba->sli3_options & LPFC_SLI3_HBQ_ENABLED))
-			lpfc_sli3_post_buffer(phba, pring, 2);
+			lpfc_post_buffer(phba, pring, 2);
 		return;
 	}
 
@@ -447,7 +447,7 @@ lpfc_ct_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
 				lpfc_ct_unsol_buffer(phba, iocbq, mp, size);
 				lpfc_in_buf_free(phba, mp);
 			}
-			lpfc_sli3_post_buffer(phba, pring, i);
+			lpfc_post_buffer(phba, pring, i);
 		}
 		list_del(&head);
 	}
@@ -652,7 +652,7 @@ lpfc_gen_req(struct lpfc_vport *vport, struct lpfc_dmabuf *bmp,
 			 "Data: x%x x%x\n",
 			 ndlp->nlp_DID, icmd->ulpIoTag,
 			 vport->port_state);
-	geniocb->cmd_cmpl = cmpl;
+	geniocb->iocb_cmpl = cmpl;
 	geniocb->drvrTimeout = icmd->ulpTimeout + LPFC_DRVR_TIMEOUT;
 	geniocb->vport = vport;
 	geniocb->retry = retry;
drivers/scsi/lpfc/lpfc_els.c +70 -69

455 lines not on this page · raw message

drivers/scsi/lpfc/lpfc_hw4.h +0 -7
index 215fbf1c777e..824fc8c08840 100644
@@ -60,13 +60,6 @@
 	((ptr)->name##_WORD = ((((value) & name##_MASK) << name##_SHIFT) | \
 		 ((ptr)->name##_WORD & ~(name##_MASK << name##_SHIFT))))
 
-#define get_wqe_reqtag(x)	(((x)->wqe.words[9] >>  0) & 0xFFFF)
-
-#define get_job_ulpword(x, y)	((x)->iocb.un.ulpWord[y])
-
-#define set_job_ulpstatus(x, y)	bf_set(lpfc_wcqe_c_status, &(x)->wcqe_cmpl, y)
-#define set_job_ulpword4(x, y)	((&(x)->wcqe_cmpl)->parameter = y)
-
 struct dma_address {
 	uint32_t addr_lo;
 	uint32_t addr_hi;
drivers/scsi/lpfc/lpfc_init.c +7 -6
index 48043e1ba485..fe8b4258cdc0 100644
@@ -982,7 +982,7 @@ lpfc_hba_clean_txcmplq(struct lpfc_hba *phba)
 		spin_lock_irq(&pring->ring_lock);
 		list_for_each_entry_safe(piocb, next_iocb,
 					 &pring->txcmplq, list)
-			piocb->cmd_flag &= ~LPFC_IO_ON_TXCMPLQ;
+			piocb->iocb_flag &= ~LPFC_IO_ON_TXCMPLQ;
 		list_splice_init(&pring->txcmplq, &completions);
 		pring->txcmplq_cnt = 0;
 		spin_unlock_irq(&pring->ring_lock);
@@ -2643,7 +2643,7 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
 }
 
 /**
- * lpfc_sli3_post_buffer - Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring
+ * lpfc_post_buffer - Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring
  * @phba: pointer to lpfc hba data structure.
  * @pring: pointer to a IOCB ring.
  * @cnt: the number of IOCBs to be posted to the IOCB ring.
@@ -2655,7 +2655,7 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
  *   The number of IOCBs NOT able to be posted to the IOCB ring.
  **/
 int
-lpfc_sli3_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cnt)
+lpfc_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cnt)
 {
 	IOCB_t *icmd;
 	struct lpfc_iocbq *iocb;
@@ -2761,7 +2761,7 @@ lpfc_post_rcv_buf(struct lpfc_hba *phba)
 	struct lpfc_sli *psli = &phba->sli;
 
 	/* Ring 0, ELS / CT buffers */
-	lpfc_sli3_post_buffer(phba, &psli->sli3_ring[LPFC_ELS_RING], LPFC_BUF_RING0);
+	lpfc_post_buffer(phba, &psli->sli3_ring[LPFC_ELS_RING], LPFC_BUF_RING0);
 	/* Ring 2 - FCP no buffers needed */
 
 	return 0;
@@ -4215,7 +4215,8 @@ lpfc_io_buf_replenish(struct lpfc_hba *phba, struct list_head *cbuf)
 			qp = &phba->sli4_hba.hdwq[idx];
 			lpfc_cmd->hdwq_no = idx;
 			lpfc_cmd->hdwq = qp;
-			lpfc_cmd->cur_iocbq.cmd_cmpl = NULL;
+			lpfc_cmd->cur_iocbq.wqe_cmpl = NULL;
+			lpfc_cmd->cur_iocbq.iocb_cmpl = NULL;
 			spin_lock(&qp->io_buf_list_put_lock);
 			list_add_tail(&lpfc_cmd->list,
 				      &qp->lpfc_io_buf_list_put);
@@ -11968,7 +11969,7 @@ lpfc_sli_enable_msi(struct lpfc_hba *phba)
 	rc = pci_enable_msi(phba->pcidev);
 	if (!rc)
 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
-				"0012 PCI enable MSI mode success.\n");
+				"0462 PCI enable MSI mode success.\n");
 	else {
 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
 				"0471 PCI enable MSI mode failed (%d)\n", rc);
drivers/scsi/lpfc/lpfc_nportdisc.c +2 -2
index e788610bc996..2bd35a7424c2 100644
@@ -2139,9 +2139,9 @@ lpfc_cmpl_prli_prli_issue(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 	npr = NULL;
 	nvpr = NULL;
 	temp_ptr = lpfc_check_elscmpl_iocb(phba, cmdiocb, rspiocb);
-	if (cmdiocb->cmd_flag & LPFC_PRLI_FCP_REQ)
+	if (cmdiocb->iocb_flag & LPFC_PRLI_FCP_REQ)
 		npr = (PRLI *) temp_ptr;
-	else if (cmdiocb->cmd_flag & LPFC_PRLI_NVME_REQ)
+	else if (cmdiocb->iocb_flag & LPFC_PRLI_NVME_REQ)
 		nvpr = (struct lpfc_nvme_prli *) temp_ptr;
 
 	irsp = &rspiocb->iocb;
drivers/scsi/lpfc/lpfc_nvme.c +16 -18
index c74b2187dbad..4e0c0b273e5f 100644
@@ -352,12 +352,11 @@ __lpfc_nvme_ls_req_cmp(struct lpfc_hba *phba,  struct lpfc_vport *vport,
 
 static void
 lpfc_nvme_ls_req_cmp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdwqe,
-		     struct lpfc_iocbq *rspwqe)
+		       struct lpfc_wcqe_complete *wcqe)
 {
 	struct lpfc_vport *vport = cmdwqe->vport;
 	struct lpfc_nvme_lport *lport;
 	uint32_t status;
-	struct lpfc_wcqe_complete *wcqe = &rspwqe->wcqe_cmpl;
 
 	status = bf_get(lpfc_wcqe_c_status, wcqe) & LPFC_IOCB_STATUS_MASK;
 
@@ -381,7 +380,7 @@ lpfc_nvme_gen_req(struct lpfc_vport *vport, struct lpfc_dmabuf *bmp,
 		  struct lpfc_dmabuf *inp,
 		  struct nvmefc_ls_req *pnvme_lsreq,
 		  void (*cmpl)(struct lpfc_hba *, struct lpfc_iocbq *,
-			       struct lpfc_iocbq *),
+			       struct lpfc_wcqe_complete *),
 		  struct lpfc_nodelist *ndlp, uint32_t num_entry,
 		  uint32_t tmo, uint8_t retry)
 {
@@ -402,7 +401,7 @@ lpfc_nvme_gen_req(struct lpfc_vport *vport, struct lpfc_dmabuf *bmp,
 	memset(wqe, 0, sizeof(union lpfc_wqe));
 
 	genwqe->context3 = (uint8_t *)bmp;
-	genwqe->cmd_flag |= LPFC_IO_NVME_LS;
+	genwqe->iocb_flag |= LPFC_IO_NVME_LS;
 
 	/* Save for completion so we can release these resources */
 	genwqe->context1 = lpfc_nlp_get(ndlp);
@@ -433,7 +432,7 @@ lpfc_nvme_gen_req(struct lpfc_vport *vport, struct lpfc_dmabuf *bmp,
 			first_len = xmit_len;
 	}
 
-	genwqe->num_bdes = num_entry;
+	genwqe->rsvd2 = num_entry;
 	genwqe->hba_wqidx = 0;
 
 	/* Words 0 - 2 */
@@ -484,7 +483,8 @@ lpfc_nvme_gen_req(struct lpfc_vport *vport, struct lpfc_dmabuf *bmp,
 
 
 	/* Issue GEN REQ WQE for NPORT <did> */
-	genwqe->cmd_cmpl = cmpl;
+	genwqe->wqe_cmpl = cmpl;
+	genwqe->iocb_cmpl = NULL;
 	genwqe->drvrTimeout = tmo + LPFC_DRVR_TIMEOUT;
 	genwqe->vport = vport;
 	genwqe->retry = retry;

Lines of this file are not shown. View the raw message.

drivers/scsi/lpfc/lpfc_nvme.h +3 -3
index d7698977725e..cc54ffb5c205 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/lpfc/lpfc_nvmet.c +39 -44

83 lines not on this page · raw message

drivers/scsi/lpfc/lpfc_scsi.c +241 -200

441 lines not on this page · raw message

drivers/scsi/lpfc/lpfc_sli.c +485 -391

876 lines not on this page · raw message

drivers/scsi/lpfc/lpfc_sli.h +13 -13
index 06682ad8bbe1..5161ccacea3e 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/qla2xxx/qla_attr.c +26 -2
index a302ed8b610f..b6a427f0570e 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/sd.c +2 -1
index de6640ad1943..1e887c11e83d 100644

Lines of this file are not shown. View the raw message.

drivers/staging/media/atomisp/pci/sh_css_params.c +2 -2
index ccc007879564..deecffd438ae 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_omap.c +3 -0
index 73e5f1dbd075..806f7806d3ca 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_pci.c +1 -8
index 1d37ff0ec85a..8f0dafbab3bf 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_port.c +7 -5
index ec7846223f3a..edb975097c89 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/fsl_lpuart.c +3 -5
index 185dd417fc49..44ed4285e1ef 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/imx.c +2 -6
index b7ef075a4005..c6a93d6a9464 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/serial_core.c +49 -12

61 lines not on this page · raw message

drivers/usb/core/quirks.c +9 -0
index 999b7c9697fc..0722d2131305 100644

Lines of this file are not shown. View the raw message.

drivers/usb/dwc3/gadget.c +6 -2
index 14dcdb923f40..c38418b4df90 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/function/uvc_queue.c +5 -3
index ec299f5cc65a..0cc8422afe4e 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/function/uvc_video.c +16 -6
index 1889d75f8788..0de7f11d1425 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/udc/bdc/bdc_udc.c +1 -0
index 5ac0ef88334e..53ffaf4e2e37 100644

Lines of this file are not shown. View the raw message.

drivers/usb/host/xhci-mem.c +12 -8
index 02cd4d7c3e7e..9d9ab7e3560a 100644

Lines of this file are not shown. View the raw message.

drivers/usb/host/xhci-pci.c +15 -29

44 lines not on this page · raw message

drivers/usb/host/xhci.c +8 -2
index 8c7710698428..3636fa49285c 100644

Lines of this file are not shown. View the raw message.

drivers/usb/host/xhci.h +1 -0
index 3b39501f26ea..d3c0766c1984 100644

Lines of this file are not shown. View the raw message.

drivers/video/fbdev/smscufx.c +30 -25

55 lines not on this page · raw message

fs/binfmt_elf.c +2 -1
index c93150f36a52..30379c33ad20 100644

Lines of this file are not shown. View the raw message.

fs/exec.c +2 -2
index 7d424337b4ec..881390b44cfd 100644

Lines of this file are not shown. View the raw message.

fs/kernfs/dir.c +4 -1
index 7bf1d5fc2e9c..90677cfbcf9c 100644

Lines of this file are not shown. View the raw message.

fs/nfs/nfs4namespace.c +7 -2
index 3680c8da510c..f2dbf904c598 100644

Lines of this file are not shown. View the raw message.

fs/nfs/nfs4proc.c +19 -15
index a808763c52c1..b42e332775fe 100644

Lines of this file are not shown. View the raw message.

fs/nfs/nfs4state.c +8 -1
index 83c88b54d712..32ee79a99246 100644

Lines of this file are not shown. View the raw message.

fs/nfs/nfs4xdr.c +2 -2
index 2a1bf0a72d5b..046788afb6d9 100644

Lines of this file are not shown. View the raw message.

include/linux/mlx5/driver.h +1 -1
index 4c678de4608d..26095c0fd781 100644

Lines of this file are not shown. View the raw message.

include/linux/nfs_xdr.h +1 -1
index ecd74cc34797..783f871b4e12 100644

Lines of this file are not shown. View the raw message.

include/linux/perf_event.h +15 -4
index 6cce33e7e7ac..014eb0a963fc 100644

Lines of this file are not shown. View the raw message.

include/media/v4l2-common.h +2 -1
index 3eb202259e8c..5e25a098e8ce 100644

Lines of this file are not shown. View the raw message.

include/net/sock.h +1 -1
index cb1a1bb64ed8..e1a303e4f0f7 100644

Lines of this file are not shown. View the raw message.

include/uapi/linux/videodev2.h +2 -1
index 9260791b8438..61c5011dfc13 100644

Lines of this file are not shown. View the raw message.

kernel/events/core.c +114 -39

153 lines not on this page · raw message

kernel/events/ring_buffer.c +1 -1
index fb35b926024c..f40da32f5e75 100644

Lines of this file are not shown. View the raw message.

kernel/power/hibernate.c +1 -1
index d926852f8119..9abc73d500fb 100644

Lines of this file are not shown. View the raw message.

kernel/sched/sched.h +9 -9
index e49902898253..7a3fcd70aa86 100644

Lines of this file are not shown. View the raw message.

net/can/j1939/transport.c +3 -1
index d7d86c944d76..55f29c9f9e08 100644

Lines of this file are not shown. View the raw message.

net/core/net_namespace.c +7 -0
index 9745cb6fdf51..982d06332007 100644

Lines of this file are not shown. View the raw message.

net/core/skbuff.c +1 -1
index 3c193e7d4bc6..9cc607b2d3d2 100644

Lines of this file are not shown. View the raw message.

net/ethtool/eeprom.c +1 -1
index 1c94bb8ea03f..49c0a2a77f02 100644

Lines of this file are not shown. View the raw message.

net/ieee802154/socket.c +3 -1
index d0aaa0346cb1..c33f46c9b6b3 100644

Lines of this file are not shown. View the raw message.

net/ipv4/nexthop.c +1 -1
index cc8f120149f6..6cc7d347ec0a 100644

Lines of this file are not shown. View the raw message.

net/ipv4/tcp_input.c +2 -1
index 686e210d89c2..102a0436eb29 100644

Lines of this file are not shown. View the raw message.

net/ipv4/tcp_ipv4.c +4 -3
index 88a45d5650da..42d4af632495 100644

Lines of this file are not shown. View the raw message.

net/ipv6/ip6_gre.c +7 -5
index 70ef4d4ebff4..13b1748b8b46 100644

Lines of this file are not shown. View the raw message.

net/ipv6/ip6_tunnel.c +6 -5
index fa8da8ff35b4..ea5077942871 100644

Lines of this file are not shown. View the raw message.

net/ipv6/ipv6_sockglue.c +7 -0
index 8a1c78f38508..b24e0e5d55f9 100644

Lines of this file are not shown. View the raw message.

net/ipv6/sit.c +5 -3
index 637cd99bd7a6..946871741f12 100644

Lines of this file are not shown. View the raw message.

net/kcm/kcmsock.c +16 -9
index f780fbe82e7d..a1478ad393f9 100644

Lines of this file are not shown. View the raw message.

net/mac802154/rx.c +3 -2
index c439125ef2b9..726b47a4611b 100644

Lines of this file are not shown. View the raw message.

net/openvswitch/datapath.c +2 -1
index 46ef1525b2e5..94c48122fdc3 100644

Lines of this file are not shown. View the raw message.

net/tipc/topsrv.c +12 -4
index 14fd05fd6107..d92ec92f0b71 100644

Lines of this file are not shown. View the raw message.

sound/aoa/soundbus/i2sbus/core.c +6 -1
index faf6b03131ee..51ed2f34b276 100644

Lines of this file are not shown. View the raw message.

sound/pci/ac97/ac97_codec.c +1 -0
index cb60a07d39a8..ceead55f13ab 100644

Lines of this file are not shown. View the raw message.

sound/pci/au88x0/au88x0.h +3 -3
index 0aa7af049b1b..6cbb2bc4a048 100644

Lines of this file are not shown. View the raw message.

sound/pci/au88x0/au88x0_core.c +1 -1
index 2ed5100b8cae..f217c02dfdfa 100644

Lines of this file are not shown. View the raw message.

sound/pci/rme9652/hdsp.c +13 -13
index 3db641318d3a..82c72e6c1375 100644

Lines of this file are not shown. View the raw message.

sound/pci/rme9652/rme9652.c +11 -11
index 1d614fe89a6a..e7c320afefe8 100644

Lines of this file are not shown. View the raw message.

sound/soc/qcom/lpass-cpu.c +10 -0
index 5e89d280e355..5e8d045c1a06 100644

Lines of this file are not shown. View the raw message.

sound/synth/emux/emux.c +1 -6
index 5ed8e36d2e04..a870759d179e 100644

Lines of this file are not shown. View the raw message.

sound/usb/implicit.c +2 -0
index e1bf1b5da423..f3e8484b3d9c 100644

Lines of this file are not shown. View the raw message.

tools/iio/iio_utils.c +4 -0
index aadee6d34c74..8d35893b2fa8 100644

Lines of this file are not shown. View the raw message.

tools/perf/pmu-events/arch/arm64/hisilicon/hip08/metrics.json +3 -3
index dda8e59149d2..be23d3c89a79 100644

Lines of this file are not shown. View the raw message.

tools/perf/pmu-events/arch/powerpc/power10/nest_metrics.json +36 -36

72 lines not on this page · raw message

tools/perf/util/auxtrace.c +9 -1
index 8d2865b9ade2..c7f78d589e1c 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/kvm/memslot_modification_stress_test.c +1 -1
index 4cfcafea9f5a..1d806b8ffee2 100644

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.