Linux 5.10.7
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.7 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 4 arch/alpha/include/asm/local64.h | 1 arch/arc/include/asm/Kbuild | 1 arch/arm/boot/dts/omap3-n950-n9.dtsi | 8 arch/arm/include/asm/Kbuild | 1 arch/arm64/Makefile | 10 - arch/arm64/include/asm/Kbuild | 1 arch/csky/include/asm/Kbuild | 1 arch/h8300/include/asm/Kbuild | 1 arch/hexagon/include/asm/Kbuild | 1 arch/ia64/include/asm/local64.h | 1 arch/m68k/include/asm/Kbuild | 1 arch/microblaze/include/asm/Kbuild | 1 arch/mips/include/asm/Kbuild | 1 arch/nds32/include/asm/Kbuild | 1 arch/parisc/include/asm/Kbuild | 1 arch/powerpc/include/asm/Kbuild | 1 arch/powerpc/kernel/vmlinux.lds.S | 2 arch/riscv/include/asm/Kbuild | 1 arch/s390/include/asm/Kbuild | 1 arch/sh/include/asm/Kbuild | 1 arch/sparc/include/asm/Kbuild | 1 arch/x86/include/asm/local64.h | 1 arch/x86/kernel/cpu/mtrr/generic.c | 6 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 117 ++++------- arch/x86/kvm/mmu.h | 2 arch/x86/kvm/mmu/mmu.c | 22 +- arch/x86/kvm/mmu/tdp_mmu.c | 111 +++++------ arch/x86/kvm/mmu/tdp_mmu.h | 4 arch/x86/mm/pgtable.c | 2 arch/xtensa/include/asm/Kbuild | 1 block/blk-core.c | 13 - block/blk-iocost.c | 16 + block/blk-mq-debugfs.c | 2 block/blk-mq.c | 4 block/blk-pm.h | 14 - crypto/asymmetric_keys/asym_tpm.c | 2 crypto/ecdh.c | 3 drivers/atm/idt77252.c | 2 drivers/base/core.c | 2 drivers/bluetooth/hci_h5.c | 8 drivers/dma-buf/dma-buf.c | 21 +- drivers/dma/idxd/sysfs.c | 4 drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 4 drivers/gpu/drm/i915/i915_cmd_parser.c | 27 -- drivers/hwmon/amd_energy.c | 3 drivers/ide/ide-atapi.c | 1 drivers/ide/ide-io.c | 7 drivers/ide/ide-pm.c | 2 drivers/iommu/intel/svm.c | 9 drivers/md/bcache/features.c | 2 drivers/md/bcache/features.h | 30 ++- drivers/md/bcache/super.c | 36 +++ drivers/net/bareudp.c | 3 drivers/net/dsa/lantiq_gswip.c | 27 -- drivers/net/ethernet/broadcom/bcmsysport.c | 1 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 38 +-- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 7 drivers/net/ethernet/ethoc.c | 3 drivers/net/ethernet/freescale/ucc_geth.c | 3 drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 4 drivers/net/ethernet/ibm/ibmvnic.c | 10 - drivers/net/ethernet/intel/e1000e/e1000.h | 1 drivers/net/ethernet/intel/e1000e/ethtool.c | 46 ++++ drivers/net/ethernet/intel/e1000e/ich8lan.c | 17 + drivers/net/ethernet/intel/e1000e/netdev.c | 59 +---- drivers/net/ethernet/intel/i40e/i40e.h | 3 drivers/net/ethernet/intel/i40e/i40e_main.c | 10 + drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 4 drivers/net/ethernet/intel/iavf/iavf_main.c | 4 drivers/net/ethernet/marvell/mvneta.c | 2 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 13 - drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c | 38 +++ drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.h | 2 drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h | 9 drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h | 8 drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 9 drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 2 drivers/net/ethernet/qlogic/qede/qede_fp.c | 5 drivers/net/ethernet/realtek/r8169_main.c | 6 drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c | 4 drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 2 drivers/net/ethernet/ti/cpts.c | 2 drivers/net/tun.c | 2 drivers/net/usb/cdc_ncm.c | 3 drivers/net/usb/qmi_wwan.c | 1 drivers/net/virtio_net.c | 12 - drivers/net/wan/hdlc_ppp.c | 7 drivers/net/wireless/realtek/rtlwifi/core.c | 8 drivers/scsi/scsi_lib.c | 27 +- drivers/scsi/scsi_transport_spi.c | 27 +- drivers/scsi/ufs/ufshcd-pci.c | 73 +++++++ drivers/scsi/ufs/ufshcd.c | 72 ++++++- drivers/scsi/ufs/ufshcd.h | 1 drivers/staging/comedi/comedi_fops.c | 4 drivers/staging/mt7621-dma/mtk-hsdma.c | 4 drivers/target/target_core_xcopy.c | 119 +++++++----- drivers/target/target_core_xcopy.h | 1 drivers/usb/chipidea/ci_hdrc_imx.c | 6 drivers/usb/class/cdc-acm.c | 4 drivers/usb/class/cdc-wdm.c | 16 + drivers/usb/class/usblp.c | 21 +- drivers/usb/dwc3/core.h | 1 drivers/usb/dwc3/dwc3-meson-g12a.c | 2 drivers/usb/dwc3/gadget.c | 16 - drivers/usb/dwc3/ulpi.c | 38 ++- drivers/usb/gadget/Kconfig | 2 drivers/usb/gadget/composite.c | 10 - drivers/usb/gadget/configfs.c | 19 + drivers/usb/gadget/function/f_printer.c | 1 drivers/usb/gadget/function/f_uac2.c | 69 +++++- drivers/usb/gadget/function/u_ether.c | 9 drivers/usb/gadget/legacy/acm_ms.c | 4 drivers/usb/gadget/udc/dummy_hcd.c | 35 ++- drivers/usb/host/xhci.c | 24 +- drivers/usb/misc/yurex.c | 3 drivers/usb/serial/iuu_phoenix.c | 20 +- drivers/usb/serial/keyspan_pda.c | 2 drivers/usb/serial/option.c | 3 drivers/usb/storage/unusual_uas.h | 7 drivers/usb/typec/mux/intel_pmc_mux.c | 11 + drivers/usb/usbip/vhci_hcd.c | 2 drivers/vhost/net.c | 6 fs/btrfs/qgroup.c | 30 ++- fs/btrfs/send.c | 49 +++- include/asm-generic/Kbuild | 1 include/linux/blk-mq.h | 4 include/linux/blkdev.h | 18 + include/linux/intel-iommu.h | 2 include/net/red.h | 4 include/uapi/linux/bcache.h | 2 kernel/workqueue.c | 13 + lib/genalloc.c | 25 +- mm/page-writeback.c | 2 net/core/net-sysfs.c | 65 +++++- net/ipv4/fib_frontend.c | 2 net/ipv4/gre_demux.c | 2 net/ipv4/netfilter/arp_tables.c | 2 net/ipv4/netfilter/ip_tables.c | 2 net/ipv6/netfilter/ip6_tables.c | 2 net/ncsi/ncsi-rsp.c | 2 net/netfilter/ipset/ip_set_hash_gen.h | 20 -- net/netfilter/nft_dynset.c | 6 net/netfilter/xt_RATEEST.c | 3 net/sched/sch_choke.c | 2 net/sched/sch_gred.c | 2 net/sched/sch_red.c | 2 net/sched/sch_sfq.c | 2 net/sched/sch_taprio.c | 7 net/xdp/xsk.c | 4 net/xdp/xsk_buff_pool.c | 2 scripts/depmod.sh | 2 sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_conexant.c | 1 sound/pci/hda/patch_realtek.c | 10 + sound/pci/hda/patch_via.c | 13 + sound/usb/midi.c | 4 tools/testing/selftests/drivers/net/mlxsw/qos_pfc.sh | 2 tools/testing/selftests/vm/Makefile | 10 - virt/kvm/kvm_main.c | 3 160 files changed, 1211 insertions(+), 667 deletions(-)
Aaro Koskinen (1):
ARM: dts: OMAP3: disable AES on N950/N9
Adrian Hunter (4):
scsi: ufs-pci: Fix restore from S4 for Intel controllers
scsi: ufs-pci: Ensure UFS device is in PowerDown mode for suspend-to-disk ->poweroff()
scsi: ufs-pci: Fix recovery from hibernate exit errors for Intel controllers
scsi: ufs-pci: Enable UFSHCD_CAP_RPM_AUTOSUSPEND for Intel controllers
Alan Stern (2):
scsi: block: Do not accept any requests while suspended
USB: Gadget: dummy-hcd: Fix shift-out-of-bounds bug
Andres Freund (1):
block: add debugfs stanza for QUEUE_FLAG_NOWAIT
Antoine Tenart (4):
net-sysfs: take the rtnl lock when storing xps_cpus
net-sysfs: take the rtnl lock when accessing xps_cpus_map and num_tc
net-sysfs: take the rtnl lock when storing xps_rxqs
net-sysfs: take the rtnl lock when accessing xps_rxqs_map and num_tc
Ard Biesheuvel (1):
crypto: ecdh - avoid buffer overflow in ecdh_set_secret()
Arnd Bergmann (1):
usb: gadget: select CONFIG_CRC32
Bard Liao (1):
Revert "device property: Keep secondary firmware node secondary by type"
Bart Van Assche (6):
scsi: block: Introduce BLK_MQ_REQ_PM
scsi: ide: Do not set the RQF_PREEMPT flag for sense requests
scsi: ide: Mark power management requests with RQF_PM instead of RQF_PREEMPT
scsi: scsi_transport_spi: Set RQF_PM for domain validation commands
scsi: core: Only process PM requests if rpm_status != RPM_ACTIVE
scsi: block: Remove RQF_PREEMPT and BLK_MQ_REQ_PREEMPT
Bean Huo (1):
scsi: ufs: Fix wrong print message in dev_err()
Ben Gardon (1):
KVM: x86/mmu: Ensure TDP MMU roots are freed after yield
Bjørn Mork (2):
net: usb: qmi_wwan: add Quectel EM160R-GL
USB: serial: option: add Quectel EM160R-GL
Chandana Kishori Chiluveru (1):
usb: gadget: configfs: Preserve function ordering after bind failure
Charan Teja Reddy (1):
dmabuf: fix use-after-free of dmabuf's file->f_inode
Christophe JAILLET (1):
staging: mt7621-dma: Fix a resource leak in an error handling path
Coly Li (3):
bcache: fix typo from SUUP to SUPP in features.h
bcache: check unsupported feature sets for bcache register
bcache: introduce BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE for large bucket
Cong Wang (1):
erspan: fix version 1 check in gre_parse_header()
Dan Carpenter (3):
atm: idt77252: call pci_disable_device() on error path
Staging: comedi: Return -EFAULT if copy_to_user() fails
dmaengine: idxd: off by one in cleanup code
Dan Williams (1):
x86/mm: Fix leak of pmd ptlock
Daniel Palmer (1):
USB: serial: option: add LongSung M5710 module support
David Arcari (1):
hwmon: (amd_energy) fix allocation of hwmon_channel_info config
David Disseldorp (1):
scsi: target: Fix XCOPY NAA identifier lookup
Davide Caratti (1):
net/sched: sch_taprio: ensure to reset/destroy all child qdiscs
Dinghao Liu (2):
net: ethernet: mvneta: Fix error handling in mvneta_probe
net: ethernet: Fix memleak in ethoc_probe
Dominique Martinet (1):
kbuild: don't hardcode depmod path
Eddie Hung (1):
usb: gadget: configfs: Fix use-after-free issue with udc_name
Fenghua Yu (2):
x86/resctrl: Use an IPI instead of task_work_add() to update PQR_ASSOC MSR x86/resctrl: Don't move a task to the same resource group
Filipe Manana (1):
btrfs: send: fix wrong file path when there is an inode with a pending rmdir
Florian Fainelli (1):
net: systemport: set dev->max_mtu to UMAC_MAX_MTU_SIZE
Florian Westphal (1):
netfilter: xt_RATEEST: reject non-null terminated string from userspace
Greg Kroah-Hartman (2):
crypto: asym_tpm: correct zero out potential secrets Linux 5.10.7
Grygorii Strashko (1):
net: ethernet: ti: cpts: fix ethtool output when no ptp_clock registered
Guillaume Nault (1):
ipv4: Ignore ECN bits for fib lookups in fib_compute_spec_dst()
Hans de Goede (1):
Bluetooth: revert: hci_h5: close serdev device and free hu in h5_close
Harish (1):
selftests/vm: fix building protection keys test
Heiner Kallweit (1):
r8169: work around power-saving bug on some chip versions
Huang Shijie (1):
lib/genalloc: fix the overflow when size is too big
Ido Schimmel (1):
selftests: mlxsw: Set headroom size of correct port
Jaegeuk Kim (1):
scsi: ufs: Clear UAC for FFU and RPMB LUNs
Jakub Kicinski (1):
iavf: fix double-release of rtnl_lock
Jeff Dike (1):
virtio_net: Fix recursive call to cpus_read_lock()
Jerome Brunet (1):
usb: gadget: f_uac2: reset wMaxPacketSize
Johan Hovold (4):
USB: serial: iuu_phoenix: fix DMA from stack
USB: yurex: fix control-URB timeout handling
USB: usblp: fix DMA to stack
USB: serial: keyspan_pda: remove unused variable
John Wang (1):
net/ncsi: Use real net-device for response handler
Kai-Heng Feng (1):
ALSA: hda/realtek: Enable mute and micmute LED on HP EliteBook 850 G7
Kailang Yang (1):
ALSA: hda/realtek - Fix speaker volume control on Lenovo C940
Lai Jiangshan (1):
kvm: check tlbs_dirty directly
Lijun Pan (2):
ibmvnic: fix login buffer memory leak
ibmvnic: continue fatal error reset after passive init
Linus Torvalds (2):
depmod: handle the case of /sbin/depmod without /sbin in PATH
mm: make wait_on_page_writeback() wait for multiple pending writebacks
Liu Yi L (1):
iommu/vt-d: Move intel_iommu info from struct intel_svm to struct intel_svm_dev
Madhusudanarao Amara (1):
usb: typec: intel_pmc_mux: Configure HPD first for HPD+IRQ request
Magnus Karlsson (1):
xsk: Fix memory leak for failed bind
Manish Chopra (1):
qede: fix offload for IPIP tunnel packets
Manish Narani (1):
usb: gadget: u_ether: Fix MTU size mismatch with RX packet size
Manuel Jiménez (1):
ALSA: hda/realtek: Add mute LED quirk for more HP laptops
Mario Limonciello (4):
e1000e: Only run S0ix flows if shutdown succeeded
e1000e: bump up timeout to wait when ME un-configures ULP mode Revert "e1000e: disable s0ix entry and exit flows for ME systems"
e1000e: Export S0ix flags to ethtool
Martin Blumenstingl (3):
net: stmmac: dwmac-meson8b: ignore the second clock input
net: dsa: lantiq_gswip: Enable GSWIP_MII_CFG_EN also for internal PHYs
net: dsa: lantiq_gswip: Fix GSWIP_MII_CFG(p) register access
Matthew Auld (2):
drm/i915: clear the shadow batch
drm/i915: clear the gpu reloc batch
Michael Chan (1):
bnxt_en: Check TQM rings for maximum supported value.
Michael Grzeschik (1):
USB: xhci: fix U1/U2 handling for hardware with XHCI_INTEL_HOST quirk set
Moshe Shemesh (1):
net/mlx5e: Fix SWP offsets when vlan inserted by driver
Nathan Chancellor (1):
powerpc: Handle .text.{hot,unlikely}.* in linker script
Nick Desaulniers (1):
arm64: link with -z norelro for LLD or aarch64-elf
Noor Azura Ahmad Tarmizi (1):
stmmac: intel: Add PCI IDs for TGL-H platform
Pablo Neira Ayuso (1):
netfilter: nft_dynset: report EOPNOTSUPP on missing set feature
Paolo Bonzini (1):
KVM: x86: fix shift out of bounds reported by UBSAN
PeiSen Hou (1):
ALSA: hda/realtek: Add two "Intel Reference board" SSID in the ALC256.
Ping-Ke Shih (1):
rtlwifi: rise completion at the last step of firmware callback
Qu Wenruo (1):
btrfs: qgroup: don't try to wait flushing if we're already holding a transaction
Randy Dunlap (3):
net: sched: prevent invalid Scell_log shift count local64.h: make <asm/local64.h> mandatory
usb: usbip: vhci_hcd: protect shift size
Rasmus Villemoes (2):
ethernet: ucc_geth: fix use-after-free in ucc_geth_remove()
ethernet: ucc_geth: set dev->max_mtu to 1518
Roland Dreier (1):
CDC-NCM: remove "connected" log message
Sean Christopherson (2):
KVM: x86/mmu: Use -1 to flag an undefined spte in get_mmio_spte()
KVM: x86/mmu: Get root level from walkers when retrieving MMIO SPTE
Sean Young (1):
USB: cdc-acm: blacklist another IR Droid device
Serge Semin (3):
usb: dwc3: ulpi: Use VStsDone to detect PHY regs access completion
usb: dwc3: ulpi: Replace CPU-based busyloop with Protocol-based one
usb: dwc3: ulpi: Fix USB2.0 HS/FS/LS PHY suspend regression
Shannon Nelson (1):
ionic: account for vlan tag len in rx buffer len
Sriharsha Allenki (1):
usb: gadget: Fix spinlock lockup on usb_function_deactivate
Stefan Chulski (4):
net: mvpp2: Add TCAM entry to drop flow control pause frames
net: mvpp2: prs: fix PPPoE with ipv6 packet parse
net: mvpp2: Fix GoP port 3 Networking Complex Control configurations
net: mvpp2: fix pkt coalescing int-threshold configuration
Subash Abhinov Kasiviswanathan (1):
netfilter: x_tables: Update remaining dereference to RCU
Sylwester Dziedziuch (1):
i40e: Fix Error I40E_AQ_RC_EINVAL when removing VFs
Taehee Yoo (2):
bareudp: set NETIF_F_LLTX flag
bareudp: Fix use of incorrect min_headroom size
Takashi Iwai (2):
ALSA: usb-audio: Fix UBSAN warnings for MIDI jacks
ALSA: hda/via: Fix runtime PM for Clevo W35xSS
Tejun Heo (1):
blk-iocost: fix NULL iocg deref from racing against initialization
Tetsuo Handa (1):
USB: cdc-wdm: Fix use after free in service_outstanding_interrupt().
Thinh Nguyen (2):
usb: dwc3: gadget: Clear wait flag on dequeue
usb: uas: Add PNY USB Portable SSD to unusual_uas
Vasily Averin (1):
netfilter: ipset: fix shift-out-of-bounds in htable_bits()
Vasundhara Volam (1):
bnxt_en: Fix AER recovery.
Wesley Cheng (1):
usb: dwc3: gadget: Restart DWC3 gadget when enabling pullup
Xie He (1):
net: hdlc_ppp: Fix issues when mod_timer is called while timer is running
YANG LI (1):
ibmvnic: fix: NULL pointer dereference.
Yang Yingliang (1):
USB: gadget: legacy: fix return error code in acm_ms_bind()
Ying-Tsun Huang (1):
x86/mtrr: Correct the range check before performing MTRR type lookups
Yu Kuai (1):
usb: chipidea: ci_hdrc_imx: add missing put_device() call in usbmisc_get_init_data()
Yunfeng Ye (1):
workqueue: Kick a worker based on the actual activation of delayed works
Yunjian Wang (3):
tun: fix return value when the number of iovs exceeds MAX_SKB_FRAGS
net: hns: fix return value check in __lb_other_process()
vhost_net: fix ubuf refcount incorrectly when sendmsg fails
Zheng Zengkai (1):
usb: dwc3: meson-g12a: disable clk on error handling path in probe
Zqiang (1):
usb: gadget: function: printer: Fix a memory leak for interface descriptor
bo liu (1):
ALSA: hda/conexant: add a new hda codec CX11970
taehyun.cho (1):
usb: gadget: enable super speed plus
Greg Kroah-Hartman
maintainerMakefile +2 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -450,7 +450,7 @@ LEX = flex YACC = bison AWK = awk INSTALLKERNEL := installkernel -DEPMOD = /sbin/depmod +DEPMOD = depmod PERL = perl PYTHON = python PYTHON3 = python3
arch/alpha/include/asm/local64.h deleted +0 -1
@@ -1 +0,0 @@ -#include <asm-generic/local64.h>
arch/arc/include/asm/Kbuild +0 -1
@@ -1,7 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 generic-y += extable.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += parport.h generic-y += user.h
arch/arm/boot/dts/omap3-n950-n9.dtsi +8 -0
@@ -494,3 +494,11 @@ bluetooth { clock-names = "sysclk"; }; }; + +&aes1_target { + status = "disabled"; +}; + +&aes2_target { + status = "disabled"; +};
arch/arm/include/asm/Kbuild +0 -1
@@ -2,7 +2,6 @@ generic-y += early_ioremap.h generic-y += extable.h generic-y += flat.h -generic-y += local64.h generic-y += parport.h generic-y += seccomp.h
arch/arm64/Makefile +7 -3
@@ -10,7 +10,7 @@ # # Copyright (C) 1995-2001 by Russell King -LDFLAGS_vmlinux :=--no-undefined -X -z norelro +LDFLAGS_vmlinux :=--no-undefined -X ifeq ($(CONFIG_RELOCATABLE), y) # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
@@ -110,16 +110,20 @@ KBUILD_CPPFLAGS += -mbig-endian CHECKFLAGS += -D__AARCH64EB__ # Prefer the baremetal ELF build target, but not all toolchains include # it so fall back to the standard linux version if needed. -KBUILD_LDFLAGS += -EB $(call ld-option, -maarch64elfb, -maarch64linuxb) +KBUILD_LDFLAGS += -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -z norelro) UTS_MACHINE := aarch64_be else KBUILD_CPPFLAGS += -mlittle-endian CHECKFLAGS += -D__AARCH64EL__ # Same as above, prefer ELF but fall back to linux target if needed. -KBUILD_LDFLAGS += -EL $(call ld-option, -maarch64elf, -maarch64linux) +KBUILD_LDFLAGS += -EL $(call ld-option, -maarch64elf, -maarch64linux -z norelro) UTS_MACHINE := aarch64 endif +ifeq ($(CONFIG_LD_IS_LLD), y) +KBUILD_LDFLAGS += -z norelro +endif + CHECKFLAGS += -D__aarch64__ ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_REGS),y)
arch/arm64/include/asm/Kbuild +0 -1
@@ -1,6 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 generic-y += early_ioremap.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += qrwlock.h generic-y += qspinlock.h
arch/csky/include/asm/Kbuild +0 -1
@@ -2,7 +2,6 @@ generic-y += asm-offsets.h generic-y += gpio.h generic-y += kvm_para.h -generic-y += local64.h generic-y += qrwlock.h generic-y += seccomp.h generic-y += user.h
arch/h8300/include/asm/Kbuild +0 -1
@@ -2,7 +2,6 @@ generic-y += asm-offsets.h generic-y += extable.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += parport.h generic-y += spinlock.h
arch/hexagon/include/asm/Kbuild +0 -1
@@ -2,5 +2,4 @@ generic-y += extable.h generic-y += iomap.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h
arch/ia64/include/asm/local64.h deleted +0 -1
@@ -1 +0,0 @@ -#include <asm-generic/local64.h>
arch/m68k/include/asm/Kbuild +0 -1
@@ -2,6 +2,5 @@ generated-y += syscall_table.h generic-y += extable.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += spinlock.h
arch/microblaze/include/asm/Kbuild +0 -1
@@ -2,7 +2,6 @@ generated-y += syscall_table.h generic-y += extable.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += parport.h generic-y += syscalls.h
arch/mips/include/asm/Kbuild +0 -1
@@ -6,7 +6,6 @@ generated-y += syscall_table_64_n64.h generated-y += syscall_table_64_o32.h generic-y += export.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += parport.h generic-y += qrwlock.h
arch/nds32/include/asm/Kbuild +0 -1
@@ -4,6 +4,5 @@ generic-y += cmpxchg.h generic-y += export.h generic-y += gpio.h generic-y += kvm_para.h -generic-y += local64.h generic-y += parport.h generic-y += user.h
arch/parisc/include/asm/Kbuild +0 -1
@@ -3,7 +3,6 @@ generated-y += syscall_table_32.h generated-y += syscall_table_64.h generated-y += syscall_table_c32.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += seccomp.h generic-y += user.h
arch/powerpc/include/asm/Kbuild +0 -1
@@ -5,7 +5,6 @@ generated-y += syscall_table_c32.h generated-y += syscall_table_spu.h generic-y += export.h generic-y += kvm_types.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += qrwlock.h generic-y += vtime.h
arch/powerpc/kernel/vmlinux.lds.S +1 -1
@@ -85,7 +85,7 @@ SECTIONS ALIGN_FUNCTION(); #endif /* careful! __ftr_alt_* sections need to be close to .text */ - *(.text.hot TEXT_MAIN .text.fixup .text.unlikely .fixup __ftr_alt_* .ref.text); + *(.text.hot .text.hot.* TEXT_MAIN .text.fixup .text.unlikely .text.unlikely.* .fixup __ftr_alt_* .ref.text); #ifdef CONFIG_PPC64 *(.tramp.ftrace.text); #endif
arch/riscv/include/asm/Kbuild +0 -1
@@ -3,6 +3,5 @@ generic-y += early_ioremap.h generic-y += extable.h generic-y += flat.h generic-y += kvm_para.h -generic-y += local64.h generic-y += user.h generic-y += vmlinux.lds.h
arch/s390/include/asm/Kbuild +0 -1
@@ -7,5 +7,4 @@ generated-y += unistd_nr.h generic-y += asm-offsets.h generic-y += export.h generic-y += kvm_types.h -generic-y += local64.h generic-y += mcs_spinlock.h
arch/sh/include/asm/Kbuild +0 -1
@@ -1,6 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 generated-y += syscall_table.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += parport.h
arch/sparc/include/asm/Kbuild +0 -1
@@ -6,5 +6,4 @@ generated-y += syscall_table_64.h generated-y += syscall_table_c32.h generic-y += export.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h
arch/x86/include/asm/local64.h deleted +0 -1
@@ -1 +0,0 @@ -#include <asm-generic/local64.h>
arch/x86/kernel/cpu/mtrr/generic.c +3 -3
@@ -167,9 +167,6 @@ static u8 mtrr_type_lookup_variable(u64 start, u64 end, u64 *partial_end, *repeat =0 ; *uniform =1 ; -/* Make end inclusive instead of exclusive */ - end--; - prev_match =MTRR_TYPE_INVALID ;for (i =0 ; i < num_var_ranges; ++i) {unsigned short start_state, end_state, inclusive;
@@ -261,6 +258,9 @@ u8 mtrr_type_lookup(u64 start, u64 end, u8 *uniform)int repeat;u64 partial_end; +/* Make end inclusive instead of exclusive */ + end--; +if (!mtrr_state_set)return MTRR_TYPE_INVALID ;
arch/x86/kernel/cpu/resctrl/rdtgroup.c +49 -68
138 lines not on this page · raw message
arch/x86/kvm/mmu.h +1 -1
@@ -49,7 +49,7 @@ static inline u64 rsvd_bits(int s, int e)if (e < s)return 0 ; -return ((1ULL << (e - s +1 )) -1 ) << s; +return ((2ULL << (e - s)) -1 ) << s; }void kvm_mmu_set_mmio_spte_mask (u64 mmio_value,u64 access_mask);
arch/x86/kvm/mmu/mmu.c +12 -10
@@ -3485,16 +3485,16 @@ static bool mmio_info_in_cache(struct kvm_vcpu *vcpu, u64 addr, bool direct)* Return the level of the lowest level SPTE added to sptes. * That SPTE may be non-present. */ -static int get_walk (struct kvm_vcpu *vcpu,u64 addr,u64 *sptes) +static int get_walk (struct kvm_vcpu *vcpu,u64 addr,u64 *sptes,int *root_level) {struct kvm_shadow_walk_iterator iterator; -int leaf = vcpu->arch.mmu->root_level; +int leaf =-1 ;u64 spte; -walk_shadow_page_lockless_begin (vcpu); -for (shadow_walk_init (&iterator, vcpu, addr); +for (shadow_walk_init (&iterator, vcpu, addr), + *root_level = iterator.level;shadow_walk_okay (&iterator);__shadow_walk_next (&iterator, spte)) { leaf = iterator.level;
@@ -3504,7 +3504,6 @@ static int get_walk(struct kvm_vcpu *vcpu, u64 addr, u64 *sptes)if (!is_shadow_present_pte (spte))break ; - }walk_shadow_page_lockless_end (vcpu);
@@ -3517,9 +3516,7 @@ static bool get_mmio_spte(struct kvm_vcpu *vcpu, u64 addr, u64 *sptep) {u64 sptes[PT64_ROOT_MAX_LEVEL ];struct rsvd_bits_validate *rsvd_check; -int root = vcpu->arch.mmu->shadow_root_level; -int leaf; -int level; +int root, leaf, level;bool reserved = false;if (!VALID_PAGE (vcpu->arch.mmu->root_hpa)) {
@@ -3528,9 +3525,14 @@ static bool get_mmio_spte(struct kvm_vcpu *vcpu, u64 addr, u64 *sptep) }if (is_tdp_mmu_root (vcpu->kvm, vcpu->arch.mmu->root_hpa)) - leaf =kvm_tdp_mmu_get_walk (vcpu, addr, sptes); + leaf =kvm_tdp_mmu_get_walk (vcpu, addr, sptes, &root);else - leaf =get_walk (vcpu, addr, sptes); + leaf =get_walk (vcpu, addr, sptes, &root); + +if (unlikely (leaf <0 )) { + *sptep =0ull ; +return reserved; + } rsvd_check = &vcpu->arch.mmu->shadow_zero_check;
arch/x86/kvm/mmu/tdp_mmu.c +53 -58
195 lines not on this page · raw message
arch/x86/kvm/mmu/tdp_mmu.h +3 -1
@@ -44,5 +44,7 @@ void kvm_tdp_mmu_zap_collapsible_sptes(struct kvm *kvm,bool kvm_tdp_mmu_write_protect_gfn (struct kvm *kvm,struct kvm_memory_slot *slot,gfn_t gfn); -int kvm_tdp_mmu_get_walk (struct kvm_vcpu *vcpu,u64 addr,u64 *sptes); +int kvm_tdp_mmu_get_walk (struct kvm_vcpu *vcpu,u64 addr,u64 *sptes, +int *root_level); +#endif /* __KVM_X86_MMU_TDP_MMU_H */
arch/x86/mm/pgtable.c +2 -0
@@ -829,6 +829,8 @@ int pud_free_pmd_page(pud_t *pud, unsigned long addr) }free_page ((unsigned long )pmd_sv); + +pgtable_pmd_page_dtor (virt_to_page (pmd));free_page ((unsigned long )pmd);return 1 ;
arch/xtensa/include/asm/Kbuild +0 -1
@@ -2,7 +2,6 @@ generated-y += syscall_table.h generic-y += extable.h generic-y += kvm_para.h -generic-y += local64.h generic-y += mcs_spinlock.h generic-y += param.h generic-y += qrwlock.h
block/blk-core.c +7 -6
@@ -18,6 +18,7 @@#include <linux/bio.h> #include <linux/blkdev.h> #include <linux/blk-mq.h> +#include <linux/blk-pm.h> #include <linux/highmem.h> #include <linux/mm.h> #include <linux/pagemap.h>
@@ -424,11 +425,11 @@ EXPORT_SYMBOL(blk_cleanup_queue);/** * blk_queue_enter() - try to increase q->q_usage_counter * @q: request queue pointer -* @flags: BLK_MQ_REQ_NOWAIT and/or BLK_MQ_REQ_PREEMPT +* @flags: BLK_MQ_REQ_NOWAIT and/or BLK_MQ_REQ_PM */ int blk_queue_enter (struct request_queue *q,blk_mq_req_flags_t flags) { -const bool pm = flags &BLK_MQ_REQ_PREEMPT ; +const bool pm = flags &BLK_MQ_REQ_PM ;while (true) {bool success = false;
@@ -440,7 +441,8 @@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)* responsible for ensuring that that counter is * globally visible before the queue is unfrozen. */ -if (pm || !blk_queue_pm_only (q)) { +if ((pm &&queue_rpm_status (q) !=RPM_SUSPENDED ) || + !blk_queue_pm_only (q)) { success = true; }else {percpu_ref_put (&q->q_usage_counter);
@@ -465,8 +467,7 @@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)wait_event (q->mq_freeze_wq, (!q->mq_freeze_depth && - (pm || (blk_pm_request_resume (q), - !blk_queue_pm_only (q)))) || +blk_pm_resume_queue (pm, q)) ||blk_queue_dying (q));if (blk_queue_dying (q))return -ENODEV ;
@@ -630,7 +631,7 @@ struct request *blk_get_request(struct request_queue *q, unsigned int op,struct request *req;WARN_ON_ONCE (op &REQ_NOWAIT ); -WARN_ON_ONCE (flags & ~(BLK_MQ_REQ_NOWAIT |BLK_MQ_REQ_PREEMPT )); +WARN_ON_ONCE (flags & ~(BLK_MQ_REQ_NOWAIT |BLK_MQ_REQ_PM )); req =blk_mq_alloc_request (q, op, flags);if (!IS_ERR (req) && q->mq_ops->initialize_rq_fn)
block/blk-iocost.c +11 -5
@@ -2525,8 +2525,8 @@ static void ioc_rqos_throttle(struct rq_qos *rqos, struct bio *bio)bool use_debt, ioc_locked;unsigned long flags; -/* bypass IOs if disabled or for root cgroup */ -if (!ioc->enabled || !iocg->level) +/* bypass IOs if disabled, still initializing, or for root cgroup */ +if (!ioc->enabled || !iocg || !iocg->level)return ;/* calculate the absolute vtime cost */
@@ -2653,14 +2653,14 @@ static void ioc_rqos_merge(struct rq_qos *rqos, struct request *rq, struct bio *bio) {struct ioc_gq *iocg =blkg_to_iocg (bio->bi_blkg); -struct ioc *ioc = iocg->ioc; +struct ioc *ioc =rqos_to_ioc (rqos);sector_t bio_end =bio_end_sector (bio);struct ioc_now now;u64 vtime, abs_cost, cost;unsigned long flags; -/* bypass if disabled or for root cgroup */ -if (!ioc->enabled || !iocg->level) +/* bypass if disabled, still initializing, or for root cgroup */ +if (!ioc->enabled || !iocg || !iocg->level)return ; abs_cost =calc_vtime_cost (bio, iocg, true);
@@ -2837,6 +2837,12 @@ static int blk_iocost_init(struct request_queue *q)ioc_refresh_params (ioc, true);spin_unlock_irq (&ioc->lock); +/* +* rqos must be added before activation to allow iocg_pd_init() to +* lookup the ioc from q. This means that the rqos methods may get +* called before policy activation completion, can't assume that the +* target bio has an iocg associated and need to test for NULL iocg. +*/ rq_qos_add (q, rqos); ret =blkcg_activate_policy (q, &blkcg_policy_iocost);if (ret) {
block/blk-mq-debugfs.c +1 -1
@@ -129,6 +129,7 @@ static const char *const blk_queue_flag_name[] = {QUEUE_FLAG_NAME (PCI_P2PDMA ),QUEUE_FLAG_NAME (ZONE_RESETALL ),QUEUE_FLAG_NAME (RQ_ALLOC_TIME ), + QUEUE_FLAG_NAME(NOWAIT), };#undef QUEUE_FLAG_NAME
@@ -297,7 +298,6 @@ static const char *const rqf_name[] = {RQF_NAME (MIXED_MERGE ),RQF_NAME (MQ_INFLIGHT ),RQF_NAME (DONTPREP ), -RQF_NAME (PREEMPT ),RQF_NAME (FAILED ),RQF_NAME (QUIET ), RQF_NAME(ELVPRIV),
block/blk-mq.c +2 -2
@@ -292,8 +292,8 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data, rq->mq_hctx = data->hctx; rq->rq_flags =0 ; rq->cmd_flags = data->cmd_flags; -if (data->flags &BLK_MQ_REQ_PREEMPT ) - rq->rq_flags |=RQF_PREEMPT ; +if (data->flags &BLK_MQ_REQ_PM ) + rq->rq_flags |=RQF_PM ;if (blk_queue_io_stat (data->q)) rq->rq_flags |=RQF_IO_STAT ;INIT_LIST_HEAD (&rq->queuelist);
block/blk-pm.h +9 -5
@@ -6,11 +6,14 @@#include <linux/pm_runtime.h> #ifdef CONFIG_PM -static inline void blk_pm_request_resume (struct request_queue *q) +static inline int blk_pm_resume_queue (const bool pm,struct request_queue *q) { -if (q->dev && (q->rpm_status ==RPM_SUSPENDED || - q->rpm_status ==RPM_SUSPENDING )) -pm_request_resume (q->dev); +if (!q->dev || !blk_queue_pm_only (q)) +return 1 ;/* Nothing to do */ +if (pm && q->rpm_status !=RPM_SUSPENDED ) +return 1 ;/* Request allowed */ +pm_request_resume (q->dev); +return 0 ; }static inline void blk_pm_mark_last_busy (struct request *rq)
@@ -44,8 +47,9 @@ static inline void blk_pm_put_request(struct request *rq) --rq->q->nr_pending; }#else -static inline void blk_pm_request_resume (struct request_queue *q) +static inline int blk_pm_resume_queue (const bool pm,struct request_queue *q) { +return 1 ; }static inline void blk_pm_mark_last_busy (struct request *rq)
crypto/asymmetric_keys/asym_tpm.c +1 -1
@@ -354,7 +354,7 @@ static uint32_t derive_pub_key(const void *pub_key, uint32_t len, uint8_t *buf)memcpy (cur, e,sizeof (e)); cur +=sizeof (e);/* Zero parameters to satisfy set_pub_key ABI. */ -memset (cur,0 ,SETKEY_PARAMS_SIZE ); +memzero_explicit (cur,SETKEY_PARAMS_SIZE );return cur - buf; }
crypto/ecdh.c +2 -1
@@ -39,7 +39,8 @@ static int ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,struct ecdh params;unsigned int ndigits; -if (crypto_ecdh_decode_key (buf, len, ¶ms) <0 ) +if (crypto_ecdh_decode_key (buf, len, ¶ms) <0 || + params.key_size >sizeof (ctx->private_key))return -EINVAL ; ndigits =ecdh_supported_curve (params.curve_id);
drivers/atm/idt77252.c +1 -1
@@ -3607,7 +3607,7 @@ static int idt77252_init_one(struct pci_dev *pcidev,if ((err =dma_set_mask_and_coherent (&pcidev->dev,DMA_BIT_MASK (32 )))) {printk ("idt77252: can't enable DMA for PCI device at %s\n" ,pci_name (pcidev)); -return err; + goto err_out_disable_pdev; } card =kzalloc (sizeof (struct idt77252_dev ),GFP_KERNEL );
drivers/base/core.c +1 -1
@@ -4278,7 +4278,7 @@ void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)if (fwnode_is_primary (fn)) { dev->fwnode = fn->secondary;if (!(parent && fn == parent->fwnode)) - fn->secondary =ERR_PTR (-ENODEV ); + fn->secondary =NULL ; }else { dev->fwnode =NULL ; }
drivers/bluetooth/hci_h5.c +2 -6
@@ -251,12 +251,8 @@ static int h5_close(struct hci_uart *hu)if (h5->vnd && h5->vnd->close) h5->vnd->close (h5); -if (hu->serdev) -serdev_device_close (hu->serdev); - -kfree_skb (h5->rx_skb); -kfree (h5); - h5 =NULL ; +if (!hu->serdev) +kfree (h5);return 0 ; }
drivers/dma-buf/dma-buf.c +17 -4
@@ -76,10 +76,6 @@ static void dma_buf_release(struct dentry *dentry) dmabuf->ops->release (dmabuf); -mutex_lock (&db_list.lock); -list_del (&dmabuf->list_node); -mutex_unlock (&db_list.lock); -if (dmabuf->resv == (struct dma_resv *)&dmabuf[1 ])dma_resv_fini (dmabuf->resv);
@@ -88,6 +84,22 @@ static void dma_buf_release(struct dentry *dentry)kfree (dmabuf); } +static int dma_buf_file_release (struct inode *inode,struct file *file) +{ +struct dma_buf *dmabuf; + +if (!is_dma_buf_file (file)) +return -EINVAL ; + + dmabuf = file->private_data; + +mutex_lock (&db_list.lock); +list_del (&dmabuf->list_node); +mutex_unlock (&db_list.lock); + +return 0 ; +} +static const struct dentry_operations dma_buf_dentry_ops = { .d_dname = dmabuffs_dname, .d_release = dma_buf_release,
@@ -413,6 +425,7 @@ static void dma_buf_show_fdinfo(struct seq_file *m, struct file *file) }static const struct file_operations dma_buf_fops = { + .release = dma_buf_file_release, .mmap = dma_buf_mmap_internal, .llseek = dma_buf_llseek, .poll = dma_buf_poll,
drivers/dma/idxd/sysfs.c +2 -2
@@ -379,7 +379,7 @@ int idxd_register_driver(void)return 0 ; drv_fail: -for (; i >0 ; i--) +while (--i >=0 )driver_unregister (&idxd_drvs[i]->drv);return rc; }
@@ -1639,7 +1639,7 @@ int idxd_register_bus_type(void)return 0 ; bus_err: -for (; i >0 ; i--) +while (--i >=0 )bus_unregister (idxd_bus_types[i]);return rc; }
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +3 -1
@@ -1046,7 +1046,7 @@ static void reloc_gpu_flush(struct i915_execbuffer *eb, struct reloc_cache *cachGEM_BUG_ON (cache->rq_size >= obj->base.size /sizeof (u32)); cache->rq_cmd[cache->rq_size] =MI_BATCH_BUFFER_END ; -__i915_gem_object_flush_map (obj,0 ,sizeof (u32) * (cache->rq_size +1 )); +i915_gem_object_flush_map (obj);i915_gem_object_unpin_map (obj);intel_gt_chipset_flush (cache->rq->engine->gt);
@@ -1296,6 +1296,8 @@ static int __reloc_gpu_alloc(struct i915_execbuffer *eb, goto err_pool; } +memset32 (cmd,0 , pool->obj->base.size /sizeof (u32)); + batch =i915_vma_instance (pool->obj, vma->vm,NULL );if (IS_ERR (batch)) { err =PTR_ERR (batch);
drivers/gpu/drm/i915/i915_cmd_parser.c +9 -18
@@ -1166,7 +1166,7 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj, } }if (IS_ERR (src)) { -unsigned long x, n; +unsigned long x, n, remain;void *ptr;/*
@@ -1177,14 +1177,15 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj,* We don't care about copying too much here as we only * validate up to the end of the batch. */ + remain = length;if (!(dst_obj->cache_coherent &I915_BO_CACHE_COHERENT_FOR_READ )) - length =round_up (length, + remain =round_up (remain, boot_cpu_data.x86_clflush_size); ptr = dst; x =offset_in_page (offset); -for (n = offset >>PAGE_SHIFT ; length; n++) { -int len =min (length,PAGE_SIZE - x); +for (n = offset >>PAGE_SHIFT ; remain; n++) { +int len =min (remain,PAGE_SIZE - x); src =kmap_atomic (i915_gem_object_get_page (src_obj, n));if (needs_clflush)
@@ -1193,13 +1194,15 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj,kunmap_atomic (src); ptr += len; - length -= len; + remain -= len; x =0 ; } }i915_gem_object_unpin_pages (src_obj); +memset32 (dst + length,0 , (dst_obj->base.size - length) /sizeof (u32)); +/* dst_obj is returned with vmap pinned */ return dst; }
@@ -1392,11 +1395,6 @@ static unsigned long *alloc_whitelist(u32 batch_length)#define LENGTH_BIAS 2 -static bool shadow_needs_clflush (struct drm_i915_gem_object *obj) -{ -return !(obj->cache_coherent &I915_BO_CACHE_COHERENT_FOR_WRITE ); -} -/** * intel_engine_cmd_parser() - parse a batch buffer for privilege violations * @engine: the engine on which the batch is to execute
@@ -1539,16 +1537,9 @@ int intel_engine_cmd_parser(struct intel_engine_cs *engine, ret =0 ;/* allow execution */ } } - -if (shadow_needs_clflush (shadow->obj)) -drm_clflush_virt_range (batch_end,8 ); } -if (shadow_needs_clflush (shadow->obj)) { -void *ptr =page_mask_bits (shadow->obj->mm.mapping); - -drm_clflush_virt_range (ptr, (void *)(cmd +1 ) - ptr); - } +i915_gem_object_flush_map (shadow->obj);if (!IS_ERR_OR_NULL (jump_whitelist))kfree (jump_whitelist);
drivers/hwmon/amd_energy.c +2 -1
@@ -222,7 +222,7 @@ static int amd_create_sensor(struct device *dev,*/ cpus =num_present_cpus () / num_siblings; - s_config =devm_kcalloc (dev, cpus + sockets, + s_config =devm_kcalloc (dev, cpus + sockets +1 ,sizeof (u32),GFP_KERNEL );if (!s_config)return -ENOMEM ;
@@ -254,6 +254,7 @@ static int amd_create_sensor(struct device *dev,scnprintf (label_l[i],10 ,"Esocket%u" , (i - cpus)); } + s_config[i] =0 ;return 0 ; }
drivers/ide/ide-atapi.c +0 -1
@@ -223,7 +223,6 @@ void ide_prep_sense(ide_drive_t *drive, struct request *rq) sense_rq->rq_disk = rq->rq_disk; sense_rq->cmd_flags =REQ_OP_DRV_IN ;ide_req (sense_rq)->type =ATA_PRIV_SENSE ; - sense_rq->rq_flags |=RQF_PREEMPT ; req->cmd[0 ] =GPCMD_REQUEST_SENSE ; req->cmd[4 ] = cmd_len;
drivers/ide/ide-io.c +1 -6
@@ -515,15 +515,10 @@ blk_status_t ide_issue_rq(ide_drive_t *drive, struct request *rq,* above to return us whatever is in the queue. Since we call * ide_do_request() ourselves, we end up taking requests while * the queue is blocked... -* -* We let requests forced at head of queue with ide-preempt -* though. I hope that doesn't happen too much, hopefully not -* unless the subdriver triggers such a thing in its own PM -* state machine. */ if ((drive->dev_flags &IDE_DFLAG_BLOCKED ) &&ata_pm_request (rq) ==0 && - (rq->rq_flags &RQF_PREEMPT ) ==0 ) { + (rq->rq_flags &RQF_PM ) ==0 ) {/* there should be no pending command at this point */ ide_unlock_port (hwif); goto plug_device;
drivers/ide/ide-pm.c +1 -1
@@ -77,7 +77,7 @@ int generic_ide_resume(struct device *dev) }memset (&rqpm,0 ,sizeof (rqpm)); - rq =blk_get_request (drive->queue,REQ_OP_DRV_IN ,BLK_MQ_REQ_PREEMPT ); + rq =blk_get_request (drive->queue,REQ_OP_DRV_IN ,BLK_MQ_REQ_PM );ide_req (rq)->type =ATA_PRIV_PM_RESUME ;ide_req (rq)->special = &rqpm; rqpm.pm_step =IDE_PM_START_RESUME ;
drivers/iommu/intel/svm.c +5 -4
@@ -142,7 +142,7 @@ static void intel_flush_svm_range_dev (struct intel_svm *svm, struct intel_svm_d } desc.qw2 =0 ; desc.qw3 =0 ; -qi_submit_sync (svm->iommu, &desc,1 ,0 ); +qi_submit_sync (sdev->iommu, &desc,1 ,0 );if (sdev->dev_iotlb) { desc.qw0 = QI_DEV_EIOTLB_PASID(svm->pasid) |
@@ -166,7 +166,7 @@ static void intel_flush_svm_range_dev (struct intel_svm *svm, struct intel_svm_d } desc.qw2 =0 ; desc.qw3 =0 ; -qi_submit_sync (svm->iommu, &desc,1 ,0 ); +qi_submit_sync (sdev->iommu, &desc,1 ,0 ); } }
@@ -211,7 +211,7 @@ static void intel_mm_release(struct mmu_notifier *mn, struct mm_struct *mm)*/ rcu_read_lock ();list_for_each_entry_rcu (sdev, &svm->devs, list) -intel_pasid_tear_down_entry (svm->iommu, sdev->dev, +intel_pasid_tear_down_entry (sdev->iommu, sdev->dev, svm->pasid, true);rcu_read_unlock ();
@@ -363,6 +363,7 @@ int intel_svm_bind_gpasid(struct iommu_domain *domain, struct device *dev, } sdev->dev = dev; sdev->sid =PCI_DEVID (info->bus, info->devfn); + sdev->iommu = iommu;/* Only count users if device has aux domains */ if (iommu_dev_feature_enabled (dev,IOMMU_DEV_FEAT_AUX ))
@@ -546,6 +547,7 @@ intel_svm_bind_mm(struct device *dev, unsigned int flags, goto out; } sdev->dev = dev; + sdev->iommu = iommu; ret =intel_iommu_enable_pasid (iommu, dev);if (ret) {
@@ -575,7 +577,6 @@ intel_svm_bind_mm(struct device *dev, unsigned int flags,kfree (sdev); goto out; } - svm->iommu = iommu;if (pasid_max > intel_pasid_max_id) pasid_max = intel_pasid_max_id;
drivers/md/bcache/features.c +1 -1
@@ -17,7 +17,7 @@ struct feature { };static struct feature feature_list[] = { - {BCH_FEATURE_INCOMPAT ,BCH_FEATURE_INCOMPAT_LARGE_BUCKET , + {BCH_FEATURE_INCOMPAT ,BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE ,"large_bucket" }, {0 ,0 ,0 }, };
drivers/md/bcache/features.h +25 -5
@@ -13,11 +13,15 @@/* Feature set definition */ /* Incompat feature set */ -#define BCH_FEATURE_INCOMPAT_LARGE_BUCKET 0x0001/* 32bit bucket size */ +/* 32bit bucket size, obsoleted */ +#define BCH_FEATURE_INCOMPAT_OBSO_LARGE_BUCKET 0x0001 +/* real bucket size is (1 << bucket_size) */ +#define BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE 0x0002 -#define BCH_FEATURE_COMPAT_SUUP 0 -#define BCH_FEATURE_RO_COMPAT_SUUP 0 -#define BCH_FEATURE_INCOMPAT_SUUP BCH_FEATURE_INCOMPAT_LARGE_BUCKET +#define BCH_FEATURE_COMPAT_SUPP 0 +#define BCH_FEATURE_RO_COMPAT_SUPP 0 +#define BCH_FEATURE_INCOMPAT_SUPP (BCH_FEATURE_INCOMPAT_OBSO_LARGE_BUCKET| \ + BCH_FEATURE_INCOMPAT_LOG_LARGE_BUCKET_SIZE)#define BCH_HAS_COMPAT_FEATURE (sb, mask) \ ((sb)->feature_compat & (mask))
@@ -77,7 +81,23 @@ static inline void bch_clear_feature_##name(struct cache_sb *sb) \ ~BCH##_FEATURE_INCOMPAT_##flagname; \ } -BCH_FEATURE_INCOMPAT_FUNCS (large_bucket,LARGE_BUCKET ); +BCH_FEATURE_INCOMPAT_FUNCS (obso_large_bucket,OBSO_LARGE_BUCKET ); +BCH_FEATURE_INCOMPAT_FUNCS (large_bucket,LOG_LARGE_BUCKET_SIZE ); + +static inline bool bch_has_unknown_compat_features (struct cache_sb *sb) +{ +return ((sb->feature_compat & ~BCH_FEATURE_COMPAT_SUPP ) !=0 ); +} + +static inline bool bch_has_unknown_ro_compat_features (struct cache_sb *sb) +{ +return ((sb->feature_ro_compat & ~BCH_FEATURE_RO_COMPAT_SUPP ) !=0 ); +} + +static inline bool bch_has_unknown_incompat_features (struct cache_sb *sb) +{ +return ((sb->feature_incompat & ~BCH_FEATURE_INCOMPAT_SUPP ) !=0 ); +}int bch_print_cache_set_feature_compat (struct cache_set *c,char *buf,int size);int bch_print_cache_set_feature_ro_compat (struct cache_set *c,char *buf,int size);
drivers/md/bcache/super.c +33 -3
@@ -64,9 +64,25 @@ static unsigned int get_bucket_size(struct cache_sb *sb, struct cache_sb_disk *s {unsigned int bucket_size =le16_to_cpu (s->bucket_size); -if (sb->version >=BCACHE_SB_VERSION_CDEV_WITH_FEATURES && -bch_has_feature_large_bucket (sb)) - bucket_size |=le16_to_cpu (s->bucket_size_hi) <<16 ; +if (sb->version >=BCACHE_SB_VERSION_CDEV_WITH_FEATURES ) { +if (bch_has_feature_large_bucket (sb)) { +unsigned int max, order; + + max =sizeof (unsigned int ) *BITS_PER_BYTE -1 ; + order =le16_to_cpu (s->bucket_size); +/* +* bcache tool will make sure the overflow won't +* happen, an error message here is enough. +*/ +if (order > max) +pr_err ("Bucket size (1 << %u) overflows\n" , + order); + bucket_size =1 << order; + }else if (bch_has_feature_obso_large_bucket (sb)) { + bucket_size += +le16_to_cpu (s->obso_bucket_size_hi) <<16 ; + } + }return bucket_size; }
@@ -228,6 +244,20 @@ static const char *read_super(struct cache_sb *sb, struct block_device *bdev, sb->feature_compat =le64_to_cpu (s->feature_compat); sb->feature_incompat =le64_to_cpu (s->feature_incompat); sb->feature_ro_compat =le64_to_cpu (s->feature_ro_compat); + +/* Check incompatible features */ + err ="Unsupported compatible feature found" ; +if (bch_has_unknown_compat_features (sb)) + goto err; + + err ="Unsupported read-only compatible feature found" ; +if (bch_has_unknown_ro_compat_features (sb)) + goto err; + + err ="Unsupported incompatible feature found" ; +if (bch_has_unknown_incompat_features (sb)) + goto err; + err =read_super_common (sb, bdev, s);if (err) goto err;
drivers/net/bareudp.c +2 -1
@@ -380,7 +380,7 @@ static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev, goto free_dst; min_headroom =LL_RESERVED_SPACE (dst->dev) + dst->header_len + -BAREUDP_BASE_HLEN + info->options_len +sizeof (struct iphdr ); +BAREUDP_BASE_HLEN + info->options_len +sizeof (struct ipv6hdr ); err =skb_cow_head (skb, min_headroom);if (unlikely (err))
@@ -534,6 +534,7 @@ static void bareudp_setup(struct net_device *dev)SET_NETDEV_DEVTYPE (dev, &bareudp_type); dev->features |=NETIF_F_SG |NETIF_F_HW_CSUM ; dev->features |=NETIF_F_RXCSUM ; + dev->features |=NETIF_F_LLTX ; dev->features |=NETIF_F_GSO_SOFTWARE ; dev->hw_features |=NETIF_F_SG |NETIF_F_HW_CSUM |NETIF_F_RXCSUM ; dev->hw_features |=NETIF_F_GSO_SOFTWARE ;
drivers/net/dsa/lantiq_gswip.c +7 -20
@@ -92,9 +92,7 @@ GSWIP_MDIO_PHY_FDUP_MASK)/* GSWIP MII Registers */ -#define GSWIP_MII_CFG0 0x00 -#define GSWIP_MII_CFG1 0x02 -#define GSWIP_MII_CFG5 0x04 +#define GSWIP_MII_CFGp (p) (0x2 * (p))#define GSWIP_MII_CFG_EN BIT(14)#define GSWIP_MII_CFG_LDCLKDIS BIT(12)#define GSWIP_MII_CFG_MODE_MIIP 0x0
@@ -392,17 +390,9 @@ static void gswip_mii_mask(struct gswip_priv *priv, u32 clear, u32 set,static void gswip_mii_mask_cfg (struct gswip_priv *priv,u32 clear,u32 set,int port) { -switch (port) { -case 0 : -gswip_mii_mask (priv, clear, set,GSWIP_MII_CFG0 ); -break ; -case 1 : -gswip_mii_mask (priv, clear, set,GSWIP_MII_CFG1 ); -break ; -case 5 : -gswip_mii_mask (priv, clear, set,GSWIP_MII_CFG5 ); -break ; - } +/* There's no MII_CFG register for the CPU port */ +if (!dsa_is_cpu_port (priv->ds, port)) +gswip_mii_mask (priv, clear, set,GSWIP_MII_CFGp (port)); } static void gswip_mii_mask_pcdu(struct gswip_priv *priv, u32 clear, u32 set,
@@ -822,9 +812,8 @@ static int gswip_setup(struct dsa_switch *ds)gswip_mdio_mask (priv,0xff ,0x09 ,GSWIP_MDIO_MDC_CFG1 );/* Disable the xMII link */ -gswip_mii_mask_cfg (priv,GSWIP_MII_CFG_EN ,0 ,0 ); -gswip_mii_mask_cfg (priv,GSWIP_MII_CFG_EN ,0 ,1 ); -gswip_mii_mask_cfg (priv,GSWIP_MII_CFG_EN ,0 ,5 ); +for (i =0 ; i < priv->hw_info->max_ports; i++) +gswip_mii_mask_cfg (priv,GSWIP_MII_CFG_EN ,0 , i);/* enable special tag insertion on cpu port */ gswip_switch_mask(priv, 0, GSWIP_FDMA_PCTRL_STEN,
@@ -1541,9 +1530,7 @@ static void gswip_phylink_mac_link_up(struct dsa_switch *ds, int port, {struct gswip_priv *priv = ds->priv; -/* Enable the xMII interface only for the external PHY */ -if (interface !=PHY_INTERFACE_MODE_INTERNAL ) -gswip_mii_mask_cfg (priv,0 ,GSWIP_MII_CFG_EN , port); +gswip_mii_mask_cfg (priv,0 ,GSWIP_MII_CFG_EN , port); } static void gswip_get_strings(struct dsa_switch *ds, int port, u32 stringset,
drivers/net/ethernet/broadcom/bcmsysport.c +1 -0
@@ -2577,6 +2577,7 @@ static int bcm_sysport_probe(struct platform_device *pdev)NETIF_F_HW_VLAN_CTAG_TX ; dev->hw_features |= dev->features; dev->vlan_features |= dev->features; + dev->max_mtu =UMAC_MAX_MTU_SIZE ;/* Request the WOL interrupt and advertise suspend if available */ priv->wol_irq_disabled =1 ;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +19 -19
@@ -6790,8 +6790,10 @@ static int bnxt_hwrm_func_backing_store_qcaps(struct bnxt *bp) ctx->tqm_fp_rings_count = resp->tqm_fp_rings_count;if (!ctx->tqm_fp_rings_count) ctx->tqm_fp_rings_count = bp->max_q; +else if (ctx->tqm_fp_rings_count >BNXT_MAX_TQM_FP_RINGS ) + ctx->tqm_fp_rings_count =BNXT_MAX_TQM_FP_RINGS ; - tqm_rings = ctx->tqm_fp_rings_count +1 ; + tqm_rings = ctx->tqm_fp_rings_count +BNXT_MAX_TQM_SP_RINGS ; ctx_pg =kcalloc (tqm_rings,sizeof (*ctx_pg),GFP_KERNEL );if (!ctx_pg) {kfree (ctx);
@@ -6925,7 +6927,8 @@ static int bnxt_hwrm_func_backing_store_cfg(struct bnxt *bp, u32 enables) pg_attr = &req.tqm_sp_pg_size_tqm_sp_lvl, pg_dir = &req.tqm_sp_page_dir, ena =FUNC_BACKING_STORE_CFG_REQ_ENABLES_TQM_SP ; - i < 9; i++, num_entries++, pg_attr++, pg_dir++, ena <<= 1) { + i <BNXT_MAX_TQM_RINGS ; + i++, num_entries++, pg_attr++, pg_dir++, ena <<= 1) {if (!(enables & ena))continue ;
@@ -12887,10 +12890,10 @@ static pci_ers_result_t bnxt_io_error_detected(struct pci_dev *pdev,*/ static pci_ers_result_t bnxt_io_slot_reset (struct pci_dev *pdev) { +pci_ers_result_t result =PCI_ERS_RESULT_DISCONNECT ;struct net_device *netdev =pci_get_drvdata (pdev);struct bnxt *bp =netdev_priv (netdev);int err =0 , off; -pci_ers_result_t result =PCI_ERS_RESULT_DISCONNECT ;netdev_info (bp->dev,"PCI Slot Reset\n" );
@@ -12919,22 +12922,8 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)pci_save_state (pdev); err =bnxt_hwrm_func_reset (bp); -if (!err) { - err =bnxt_hwrm_func_qcaps (bp); -if (!err &&netif_running (netdev)) - err =bnxt_open (netdev); - } -bnxt_ulp_start (bp, err); -if (!err) { -bnxt_reenable_sriov (bp); +if (!err) result =PCI_ERS_RESULT_RECOVERED ; - } - } - -if (result !=PCI_ERS_RESULT_RECOVERED ) { -if (netif_running (netdev)) -dev_close (netdev); -pci_disable_device (pdev); }rtnl_unlock ();
@@ -12952,10 +12941,21 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)static void bnxt_io_resume (struct pci_dev *pdev) {struct net_device *netdev =pci_get_drvdata (pdev); +struct bnxt *bp =netdev_priv (netdev); +int err; +netdev_info (bp->dev,"PCI Slot Resume\n" );rtnl_lock (); -netif_device_attach (netdev); + err =bnxt_hwrm_func_qcaps (bp); +if (!err &&netif_running (netdev)) + err =bnxt_open (netdev); + +bnxt_ulp_start (bp, err); +if (!err) { +bnxt_reenable_sriov (bp); +netif_device_attach (netdev); + }rtnl_unlock (); }
drivers/net/ethernet/broadcom/bnxt/bnxt.h +6 -1
@@ -1435,6 +1435,11 @@ struct bnxt_ctx_pg_info {struct bnxt_ctx_pg_info **ctx_pg_tbl; }; +#define BNXT_MAX_TQM_SP_RINGS 1 +#define BNXT_MAX_TQM_FP_RINGS 8 +#define BNXT_MAX_TQM_RINGS \ + (BNXT_MAX_TQM_SP_RINGS + BNXT_MAX_TQM_FP_RINGS) +struct bnxt_ctx_mem_info {u32 qp_max_entries;u16 qp_min_qp1_entries;
@@ -1473,7 +1478,7 @@ struct bnxt_ctx_mem_info {struct bnxt_ctx_pg_info stat_mem;struct bnxt_ctx_pg_info mrav_mem;struct bnxt_ctx_pg_info tim_mem; -struct bnxt_ctx_pg_info *tqm_mem[9 ]; +struct bnxt_ctx_pg_info *tqm_mem[BNXT_MAX_TQM_RINGS ]; };struct bnxt_fw_health {
drivers/net/ethernet/ethoc.c +2 -1
@@ -1211,7 +1211,7 @@ static int ethoc_probe(struct platform_device *pdev) ret =mdiobus_register (priv->mdio);if (ret) {dev_err (&netdev->dev,"failed to register MDIO bus\n" ); - goto free2; + goto free3; } ret =ethoc_mdio_probe (netdev);
@@ -1243,6 +1243,7 @@ static int ethoc_probe(struct platform_device *pdev)netif_napi_del (&priv->napi); error:mdiobus_unregister (priv->mdio); +free3:mdiobus_free (priv->mdio); free2:clk_disable_unprepare (priv->clk);
drivers/net/ethernet/freescale/ucc_geth.c +2 -1
@@ -3889,6 +3889,7 @@ static int ucc_geth_probe(struct platform_device* ofdev)INIT_WORK (&ugeth->timeout_work, ucc_geth_timeout_work);netif_napi_add (dev, &ugeth->napi, ucc_geth_poll,64 ); dev->mtu =1500 ; + dev->max_mtu =1518 ; ugeth->msg_enable =netif_msg_init (debug.msg_enable,UGETH_MSG_DEFAULT ); ugeth->phy_interface = phy_interface;
@@ -3934,12 +3935,12 @@ static int ucc_geth_remove(struct platform_device* ofdev)struct device_node *np = ofdev->dev.of_node;unregister_netdev (dev); -free_netdev (dev);ucc_geth_memclean (ugeth);if (of_phy_is_fixed_link (np))of_phy_deregister_fixed_link (np);of_node_put (ugeth->ug_info->tbi_node);of_node_put (ugeth->ug_info->phy_node); +free_netdev (dev);return 0 ; }
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c +4 -0
@@ -415,6 +415,10 @@ static void __lb_other_process(struct hns_nic_ring_data *ring_data,/* for mutl buffer*/ new_skb =skb_copy (skb,GFP_ATOMIC );dev_kfree_skb_any (skb); +if (!new_skb) { +netdev_err (ndev,"skb alloc failed\n" ); +return ; + } skb = new_skb; check_ok =0 ;
drivers/net/ethernet/ibm/ibmvnic.c +5 -5
@@ -932,6 +932,7 @@ static void release_resources(struct ibmvnic_adapter *adapter)release_rx_pools (adapter);release_napi (adapter); +release_login_buffer (adapter);release_login_rsp_buffer (adapter); }
@@ -2247,8 +2248,7 @@ static void __ibmvnic_reset(struct work_struct *work)set_current_state (TASK_UNINTERRUPTIBLE );schedule_timeout (60 *HZ ); } - }else if (!(rwi->reset_reason ==VNIC_RESET_FATAL && - adapter->from_passive_init)) { + }else { rc =do_reset (adapter, rwi, reset_state); }kfree (rwi);
@@ -2869,9 +2869,7 @@ static int reset_one_sub_crq_queue(struct ibmvnic_adapter *adapter,int rc;if (!scrq) { -netdev_dbg (adapter->netdev, -"Invalid scrq reset. irq (%d) or msgs (%p).\n" , - scrq->irq, scrq->msgs); +netdev_dbg (adapter->netdev,"Invalid scrq reset.\n" );return -EINVAL ; }
@@ -3768,7 +3766,9 @@ static int send_login(struct ibmvnic_adapter *adapter)return -1 ; } +release_login_buffer (adapter);release_login_rsp_buffer (adapter); + client_data_len =vnic_client_data_len (adapter); buffer_size =
drivers/net/ethernet/intel/e1000e/e1000.h +1 -0
@@ -436,6 +436,7 @@ s32 e1000e_get_base_timinca(struct e1000_adapter *adapter, u32 *timinca);#define FLAG2_DFLT_CRC_STRIPPING BIT(12)#define FLAG2_CHECK_RX_HWTSTAMP BIT(13)#define FLAG2_CHECK_SYSTIM_OVERFLOW BIT(14) +#define FLAG2_ENABLE_S0IX_FLOWS BIT(15)#define E1000_RX_DESC_PS (R , i) \ (&(((union e1000_rx_desc_packet_split *)((R).desc))[i]))
drivers/net/ethernet/intel/e1000e/ethtool.c +46 -0
76 lines not on this page · raw message
drivers/net/ethernet/intel/e1000e/ich8lan.c +14 -3
@@ -1240,6 +1240,9 @@ static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force)return 0 ;if (er32 (FWSM ) &E1000_ICH_FWSM_FW_VALID ) { +struct e1000_adapter *adapter = hw->adapter; +bool firmware_bug = false; +if (force) {/* Request ME un-configure ULP mode in the PHY */ mac_reg =er32 (H2ME );
@@ -1248,16 +1251,24 @@ static s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force)ew32 (H2ME , mac_reg); } -/* Poll up to 300msec for ME to clear ULP_CFG_DONE. */ +/* Poll up to 2.5 seconds for ME to clear ULP_CFG_DONE. +* If this takes more than 1 second, show a warning indicating a +* firmware bug +*/ while (er32 (FWSM ) &E1000_FWSM_ULP_CFG_DONE ) { -if (i++ ==30 ) { +if (i++ ==250 ) { ret_val = -E1000_ERR_PHY ; goto out; } +if (i >100 && !firmware_bug) + firmware_bug = true;usleep_range (10000 ,11000 ); } -e_dbg ("ULP_CONFIG_DONE cleared after %dmsec\n" , i *10 ); +if (firmware_bug) +e_warn ("ULP_CONFIG_DONE took %dmsec. This is a firmware bug\n" , i *10 ); +else +e_dbg ("ULP_CONFIG_DONE cleared after %dmsec\n" , i *10 );if (force) { mac_reg =er32 (H2ME );
drivers/net/ethernet/intel/e1000e/netdev.c +10 -49
93 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e.h +3 -0
@@ -120,6 +120,7 @@ enum i40e_state_t { __I40E_RESET_INTR_RECEIVED, __I40E_REINIT_REQUESTED, __I40E_PF_RESET_REQUESTED, + __I40E_PF_RESET_AND_REBUILD_REQUESTED, __I40E_CORE_RESET_REQUESTED, __I40E_GLOBAL_RESET_REQUESTED, __I40E_EMP_RESET_INTR_RECEIVED,
@@ -146,6 +147,8 @@ enum i40e_state_t { };#define I40E_PF_RESET_FLAG BIT_ULL(__I40E_PF_RESET_REQUESTED) +#define I40E_PF_RESET_AND_REBUILD_FLAG \ + BIT_ULL(__I40E_PF_RESET_AND_REBUILD_REQUESTED)/* VSI state flags */ enum i40e_vsi_state_t {
drivers/net/ethernet/intel/i40e/i40e_main.c +10 -0
@@ -36,6 +36,8 @@ static int i40e_setup_misc_vector(struct i40e_pf *pf);static void i40e_determine_queue_usage (struct i40e_pf *pf);static int i40e_setup_pf_filter_control (struct i40e_pf *pf);static void i40e_prep_for_reset (struct i40e_pf *pf,bool lock_acquired); +static void i40e_reset_and_rebuild (struct i40e_pf *pf,bool reinit, +bool lock_acquired);static int i40e_reset (struct i40e_pf *pf);static void i40e_rebuild (struct i40e_pf *pf,bool reinit,bool lock_acquired);static int i40e_setup_misc_vector_for_recovery_mode (struct i40e_pf *pf);
@@ -8536,6 +8538,14 @@ void i40e_do_reset(struct i40e_pf *pf, u32 reset_flags, bool lock_acquired) "FW LLDP is disabled\n" : "FW LLDP is enabled\n"); + }else if (reset_flags &I40E_PF_RESET_AND_REBUILD_FLAG ) { +/* Request a PF Reset +* +* Resets PF and reinitializes PFs VSI. +*/ +i40e_prep_for_reset (pf, lock_acquired); +i40e_reset_and_rebuild (pf, true, lock_acquired); + }else if (reset_flags &BIT_ULL (__I40E_REINIT_REQUESTED)) {int v;
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +2 -2
@@ -1772,7 +1772,7 @@ int i40e_pci_sriov_configure(struct pci_dev *pdev, int num_vfs)if (num_vfs) {if (!(pf->flags &I40E_FLAG_VEB_MODE_ENABLED )) { pf->flags |=I40E_FLAG_VEB_MODE_ENABLED ; -i40e_do_reset_safe (pf,I40E_PF_RESET_FLAG ); +i40e_do_reset_safe (pf,I40E_PF_RESET_AND_REBUILD_FLAG ); } ret =i40e_pci_sriov_enable (pdev, num_vfs); goto sriov_configure_out;
@@ -1781,7 +1781,7 @@ int i40e_pci_sriov_configure(struct pci_dev *pdev, int num_vfs)if (!pci_vfs_assigned (pf->pdev)) {i40e_free_vfs (pf); pf->flags &= ~I40E_FLAG_VEB_MODE_ENABLED ; -i40e_do_reset_safe (pf,I40E_PF_RESET_FLAG ); +i40e_do_reset_safe (pf,I40E_PF_RESET_AND_REBUILD_FLAG ); }else {dev_warn (&pdev->dev,"Unable to free VFs because some are assigned to VMs.\n" ); ret = -EINVAL ;
drivers/net/ethernet/intel/iavf/iavf_main.c +1 -3
@@ -1834,11 +1834,9 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)netif_tx_stop_all_queues (netdev);if (CLIENT_ALLOWED (adapter)) { err =iavf_lan_add_device (adapter); -if (err) { -rtnl_unlock (); +if (err)dev_info (&pdev->dev,"Failed to add VF to client API service list: %d\n" , err); - } }dev_info (&pdev->dev,"MAC address: %pM\n" , adapter->hw.mac.addr);if (netdev->features &NETIF_F_GRO )
drivers/net/ethernet/marvell/mvneta.c +1 -1
@@ -5232,7 +5232,7 @@ static int mvneta_probe(struct platform_device *pdev) err =mvneta_port_power_up (pp, pp->phy_interface);if (err <0 ) {dev_err (&pdev->dev,"can't power up port\n" ); -return err; + goto err_netdev; }/* Armada3700 network controller does not support per-cpu
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +7 -6
@@ -1231,7 +1231,7 @@ static void mvpp22_gop_init_rgmii(struct mvpp2_port *port)regmap_read (priv->sysctrl_base,GENCONF_CTRL0 , &val);if (port->gop_id ==2 ) - val |=GENCONF_CTRL0_PORT0_RGMII |GENCONF_CTRL0_PORT1_RGMII ; + val |=GENCONF_CTRL0_PORT0_RGMII ;else if (port->gop_id ==3 ) val |=GENCONF_CTRL0_PORT1_RGMII_MII ;regmap_write (priv->sysctrl_base,GENCONF_CTRL0 , val);
@@ -2370,17 +2370,18 @@ static void mvpp2_rx_pkts_coal_set(struct mvpp2_port *port,static void mvpp2_tx_pkts_coal_set (struct mvpp2_port *port,struct mvpp2_tx_queue *txq) { -unsigned int thread =mvpp2_cpu_to_thread (port->priv,get_cpu ()); +unsigned int thread;u32 val;if (txq->done_pkts_coal >MVPP2_TXQ_THRESH_MASK ) txq->done_pkts_coal =MVPP2_TXQ_THRESH_MASK ; val = (txq->done_pkts_coal <<MVPP2_TXQ_THRESH_OFFSET ); -mvpp2_thread_write (port->priv, thread,MVPP2_TXQ_NUM_REG , txq->id); -mvpp2_thread_write (port->priv, thread,MVPP2_TXQ_THRESH_REG , val); - -put_cpu (); +/* PKT-coalescing registers are per-queue + per-thread */ +for (thread =0 ; thread <MVPP2_MAX_THREADS ; thread++) { +mvpp2_thread_write (port->priv, thread,MVPP2_TXQ_NUM_REG , txq->id); +mvpp2_thread_write (port->priv, thread,MVPP2_TXQ_THRESH_REG , val); + } }static u32 mvpp2_usec_to_cycles (u32 usec,unsigned long clk_hz)
drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c +36 -2
@@ -405,6 +405,38 @@ static int mvpp2_prs_tcam_first_free(struct mvpp2 *priv, unsigned char start,return -EINVAL ; } +/* Drop flow control pause frames */ +static void mvpp2_prs_drop_fc (struct mvpp2 *priv) +{ +unsigned char da[ETH_ALEN ] = {0x01 ,0x80 ,0xC2 ,0x00 ,0x00 ,0x01 }; +struct mvpp2_prs_entry pe; +unsigned int len; + +memset (&pe,0 ,sizeof (pe)); + +/* For all ports - drop flow control frames */ + pe.index =MVPP2_PE_FC_DROP ; +mvpp2_prs_tcam_lu_set (&pe,MVPP2_PRS_LU_MAC ); + +/* Set match on DA */ + len =ETH_ALEN ; +while (len--) +mvpp2_prs_tcam_data_byte_set (&pe, len, da[len],0xff ); + +mvpp2_prs_sram_ri_update (&pe,MVPP2_PRS_RI_DROP_MASK , +MVPP2_PRS_RI_DROP_MASK ); + +mvpp2_prs_sram_bits_set (&pe,MVPP2_PRS_SRAM_LU_GEN_BIT ,1 ); +mvpp2_prs_sram_next_lu_set (&pe,MVPP2_PRS_LU_FLOWS ); + +/* Mask all ports */ +mvpp2_prs_tcam_port_map_set (&pe,MVPP2_PRS_PORT_MASK ); + +/* Update shadow table and hw entry */ +mvpp2_prs_shadow_set (priv, pe.index,MVPP2_PRS_LU_MAC ); +mvpp2_prs_hw_write (priv, &pe); +} +/* Enable/disable dropping all mac da's */ static void mvpp2_prs_mac_drop_all_set (struct mvpp2 *priv,int port,bool add) {
@@ -1162,6 +1194,7 @@ static void mvpp2_prs_mac_init(struct mvpp2 *priv)mvpp2_prs_hw_write (priv, &pe);/* Create dummy entries for drop all and promiscuous modes */ +mvpp2_prs_drop_fc (priv);mvpp2_prs_mac_drop_all_set (priv,0 , false);mvpp2_prs_mac_promisc_set (priv,0 ,MVPP2_PRS_L2_UNI_CAST , false);mvpp2_prs_mac_promisc_set (priv,0 ,MVPP2_PRS_L2_MULTI_CAST , false);
@@ -1647,8 +1680,9 @@ static int mvpp2_prs_pppoe_init(struct mvpp2 *priv)mvpp2_prs_sram_next_lu_set (&pe,MVPP2_PRS_LU_IP6 );mvpp2_prs_sram_ri_update (&pe,MVPP2_PRS_RI_L3_IP6 ,MVPP2_PRS_RI_L3_PROTO_MASK ); -/* Skip eth_type + 4 bytes of IPv6 header */ -mvpp2_prs_sram_shift_set (&pe,MVPP2_ETH_TYPE_LEN +4 , +/* Jump to DIP of IPV6 header */ +mvpp2_prs_sram_shift_set (&pe,MVPP2_ETH_TYPE_LEN +8 + +MVPP2_MAX_L3_ADDR_SIZE ,MVPP2_PRS_SRAM_OP_SEL_SHIFT_ADD );/* Set L3 offset */ mvpp2_prs_sram_offset_set(&pe, MVPP2_PRS_SRAM_UDF_TYPE_L3,
drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.h +1 -1
@@ -129,7 +129,7 @@#define MVPP2_PE_VID_EDSA_FLTR_DEFAULT (MVPP2_PRS_TCAM_SRAM_SIZE - 7)#define MVPP2_PE_VLAN_DBL (MVPP2_PRS_TCAM_SRAM_SIZE - 6)#define MVPP2_PE_VLAN_NONE (MVPP2_PRS_TCAM_SRAM_SIZE - 5) -/* reserved */ +#define MVPP2_PE_FC_DROP (MVPP2_PRS_TCAM_SRAM_SIZE - 4)#define MVPP2_PE_MAC_MC_PROMISCUOUS (MVPP2_PRS_TCAM_SRAM_SIZE - 3)#define MVPP2_PE_MAC_UC_PROMISCUOUS (MVPP2_PRS_TCAM_SRAM_SIZE - 2)#define MVPP2_PE_MAC_NON_PROMISCUOUS (MVPP2_PRS_TCAM_SRAM_SIZE - 1)
drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h +9 -0
@@ -366,6 +366,15 @@ struct mlx5e_swp_spec {u8 tun_l4_proto; }; +static inline void mlx5e_eseg_swp_offsets_add_vlan (struct mlx5_wqe_eth_seg *eseg) +{ +/* SWP offsets are in 2-bytes words */ + eseg->swp_outer_l3_offset +=VLAN_HLEN /2 ; + eseg->swp_outer_l4_offset +=VLAN_HLEN /2 ; + eseg->swp_inner_l3_offset +=VLAN_HLEN /2 ; + eseg->swp_inner_l4_offset +=VLAN_HLEN /2 ; +} +static inline void mlx5e_set_eseg_swp (struct sk_buff *skb,struct mlx5_wqe_eth_seg *eseg,struct mlx5e_swp_spec *swp_spec)
drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h +5 -3
@@ -51,7 +51,7 @@ static inline bool mlx5_geneve_tx_allowed(struct mlx5_core_dev *mdev) }static inline void -mlx5e_tx_tunnel_accel (struct sk_buff *skb,struct mlx5_wqe_eth_seg *eseg) +mlx5e_tx_tunnel_accel (struct sk_buff *skb,struct mlx5_wqe_eth_seg *eseg,u16 ihs) {struct mlx5e_swp_spec swp_spec = {};unsigned int offset =0 ;
@@ -85,6 +85,8 @@ mlx5e_tx_tunnel_accel(struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg) }mlx5e_set_eseg_swp (skb, eseg, &swp_spec); +if (skb_vlan_tag_present (skb) && ihs) +mlx5e_eseg_swp_offsets_add_vlan (eseg); }#else
@@ -163,7 +165,7 @@ static inline unsigned int mlx5e_accel_tx_ids_len(struct mlx5e_txqsq *sq,static inline bool mlx5e_accel_tx_eseg (struct mlx5e_priv *priv,struct sk_buff *skb, -struct mlx5_wqe_eth_seg *eseg) +struct mlx5_wqe_eth_seg *eseg,u16 ihs) {#ifdef CONFIG_MLX5_EN_IPSEC if (xfrm_offload (skb))
@@ -172,7 +174,7 @@ static inline bool mlx5e_accel_tx_eseg(struct mlx5e_priv *priv,#if IS_ENABLED (CONFIG_GENEVE )if (skb->encapsulation) -mlx5e_tx_tunnel_accel (skb, eseg); +mlx5e_tx_tunnel_accel (skb, eseg, ihs);#endif return true;
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +5 -4
@@ -615,9 +615,9 @@ void mlx5e_tx_mpwqe_ensure_complete(struct mlx5e_txqsq *sq)static bool mlx5e_txwqe_build_eseg (struct mlx5e_priv *priv,struct mlx5e_txqsq *sq,struct sk_buff *skb,struct mlx5e_accel_tx_state *accel, -struct mlx5_wqe_eth_seg *eseg) +struct mlx5_wqe_eth_seg *eseg,u16 ihs) { -if (unlikely (!mlx5e_accel_tx_eseg (priv, skb, eseg))) +if (unlikely (!mlx5e_accel_tx_eseg (priv, skb, eseg, ihs)))return false;mlx5e_txwqe_build_eseg_csum (sq, skb, accel, eseg);
@@ -647,7 +647,8 @@ netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev)if (mlx5e_tx_skb_supports_mpwqe (skb, &attr)) {struct mlx5_wqe_eth_seg eseg = {}; -if (unlikely (!mlx5e_txwqe_build_eseg (priv, sq, skb, &accel, &eseg))) +if (unlikely (!mlx5e_txwqe_build_eseg (priv, sq, skb, &accel, &eseg, + attr.ihs)))return NETDEV_TX_OK ;mlx5e_sq_xmit_mpwqe (sq, skb, &eseg,netdev_xmit_more ());
@@ -664,7 +665,7 @@ netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev)/* May update the WQE, but may not post other WQEs. */ mlx5e_accel_tx_finish (sq, wqe, &accel, (struct mlx5_wqe_inline_seg *)(wqe->data + wqe_attr.ds_cnt_inl)); -if (unlikely (!mlx5e_txwqe_build_eseg (priv, sq, skb, &accel, &wqe->eth))) +if (unlikely (!mlx5e_txwqe_build_eseg (priv, sq, skb, &accel, &wqe->eth, attr.ihs)))return NETDEV_TX_OK ;mlx5e_sq_xmit_wqe (sq, skb, &attr, &wqe_attr, wqe, pi,netdev_xmit_more ());
drivers/net/ethernet/pensando/ionic/ionic_txrx.c +1 -1
@@ -337,7 +337,7 @@ void ionic_rx_fill(struct ionic_queue *q)unsigned int i, j;unsigned int len; - len = netdev->mtu +ETH_HLEN ; + len = netdev->mtu +ETH_HLEN +VLAN_HLEN ; nfrags =round_up (len,PAGE_SIZE ) /PAGE_SIZE ;for (i =ionic_q_space_avail (q); i; i--) {
drivers/net/ethernet/qlogic/qede/qede_fp.c +5 -0
@@ -1799,6 +1799,11 @@ netdev_features_t qede_features_check(struct sk_buff *skb, ntohs(udp_hdr(skb)->dest) != gnv_port))return features & ~(NETIF_F_CSUM_MASK |NETIF_F_GSO_MASK ); + }else if (l4_proto ==IPPROTO_IPIP ) { +/* IPIP tunnels are unknown to the device or at least unsupported natively, +* offloads for them can't be done trivially, so disable them for such skb. +*/ +return features & ~(NETIF_F_CSUM_MASK |NETIF_F_GSO_MASK ); } }
drivers/net/ethernet/realtek/r8169_main.c +4 -2
@@ -2243,7 +2243,8 @@ static void rtl_pll_power_down(struct rtl8169_private *tp) }switch (tp->mac_version) { - case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_33: + case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26: + case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_33:case RTL_GIGA_MAC_VER_37 :case RTL_GIGA_MAC_VER_39 :case RTL_GIGA_MAC_VER_43 :
@@ -2269,7 +2270,8 @@ static void rtl_pll_power_down(struct rtl8169_private *tp)static void rtl_pll_power_up (struct rtl8169_private *tp) {switch (tp->mac_version) { - case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_33: + case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26: + case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_33:case RTL_GIGA_MAC_VER_37 :case RTL_GIGA_MAC_VER_39 :case RTL_GIGA_MAC_VER_43 :
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c +4 -0
@@ -725,6 +725,8 @@ static SIMPLE_DEV_PM_OPS(intel_eth_pm_ops, intel_eth_pci_suspend,#define PCI_DEVICE_ID_INTEL_EHL_PSE1_RGMII1G_ID 0x4bb0#define PCI_DEVICE_ID_INTEL_EHL_PSE1_SGMII1G_ID 0x4bb1#define PCI_DEVICE_ID_INTEL_EHL_PSE1_SGMII2G5_ID 0x4bb2 +#define PCI_DEVICE_ID_INTEL_TGLH_SGMII1G_0_ID 0x43ac +#define PCI_DEVICE_ID_INTEL_TGLH_SGMII1G_1_ID 0x43a2#define PCI_DEVICE_ID_INTEL_TGL_SGMII1G_ID 0xa0acstatic const struct pci_device_id intel_eth_pci_id_table[] = {
@@ -739,6 +741,8 @@ static const struct pci_device_id intel_eth_pci_id_table[] = { { PCI_DEVICE_DATA(INTEL, EHL_PSE1_SGMII1G_ID, &ehl_pse1_sgmii1g_info) }, { PCI_DEVICE_DATA(INTEL, EHL_PSE1_SGMII2G5_ID, &ehl_pse1_sgmii1g_info) }, { PCI_DEVICE_DATA(INTEL, TGL_SGMII1G_ID, &tgl_sgmii1g_info) }, + { PCI_DEVICE_DATA(INTEL, TGLH_SGMII1G_0_ID, &tgl_sgmii1g_info) }, + { PCI_DEVICE_DATA(INTEL, TGLH_SGMII1G_1_ID, &tgl_sgmii1g_info) }, {} };MODULE_DEVICE_TABLE (pci, intel_eth_pci_id_table);
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +1 -1
@@ -135,7 +135,7 @@ static int meson8b_init_rgmii_tx_clk(struct meson8b_dwmac *dwmac)struct device *dev = dwmac->dev;static const struct clk_parent_data mux_parents[] = { { .fw_name ="clkin0" , }, - { .fw_name ="clkin1" , }, + { .index =-1 , }, };static const struct clk_div_table div_table[] = { { .div =2 , .val =2 , },
drivers/net/ethernet/ti/cpts.c +2 -0
@@ -599,6 +599,7 @@ void cpts_unregister(struct cpts *cpts)ptp_clock_unregister (cpts->clock); cpts->clock =NULL ; + cpts->phc_index =-1 ;cpts_write32 (cpts,0 , int_enable);cpts_write32 (cpts,0 , control);
@@ -784,6 +785,7 @@ struct cpts *cpts_create(struct device *dev, void __iomem *regs, cpts->cc.read = cpts_systim_read; cpts->cc.mask =CLOCKSOURCE_MASK (32 ); cpts->info = cpts_info; + cpts->phc_index =-1 ;if (n_ext_ts) cpts->info.n_ext_ts = n_ext_ts;
drivers/net/tun.c +1 -1
@@ -1401,7 +1401,7 @@ static struct sk_buff *tun_napi_alloc_frags(struct tun_file *tfile,int i;if (it->nr_segs >MAX_SKB_FRAGS +1 ) -return ERR_PTR (-ENOMEM ); +return ERR_PTR (-EMSGSIZE );local_bh_disable (); skb =napi_get_frags (&tfile->napi);
drivers/net/usb/cdc_ncm.c +0 -3
@@ -1863,9 +1863,6 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)* USB_CDC_NOTIFY_NETWORK_CONNECTION notification shall be * sent by device after USB_CDC_NOTIFY_SPEED_CHANGE. */ -netif_info (dev, link, dev->net, -"network connection: %sconnected\n" , - !!event->wValue ?"" :"dis" );usbnet_link_change (dev, !!event->wValue,0 );break ;
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1036,6 +1036,7 @@ static const struct usb_device_id products[] = { {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0125)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0306)}, /* Quectel EP06/EG06/EM06 */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0512)}, /* Quectel EG12/EM12 */ + {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0620)}, /* Quectel EM160R-GL */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL *//* 3. Combined interface devices matching on interface number */
drivers/net/virtio_net.c +7 -5
@@ -2093,14 +2093,16 @@ static int virtnet_set_channels(struct net_device *dev,get_online_cpus (); err =_virtnet_set_queues (vi, queue_pairs); -if (!err) { -netif_set_real_num_tx_queues (dev, queue_pairs); -netif_set_real_num_rx_queues (dev, queue_pairs); - -virtnet_set_affinity (vi); +if (err) { +put_online_cpus (); + goto err; } +virtnet_set_affinity (vi);put_online_cpus (); +netif_set_real_num_tx_queues (dev, queue_pairs); +netif_set_real_num_rx_queues (dev, queue_pairs); + err:return err; }
drivers/net/wan/hdlc_ppp.c +7 -0
@@ -569,6 +569,13 @@ static void ppp_timer(struct timer_list *t)unsigned long flags;spin_lock_irqsave (&ppp->lock, flags); +/* mod_timer could be called after we entered this function but +* before we got the lock. +*/ +if (timer_pending (&proto->timer)) { +spin_unlock_irqrestore (&ppp->lock, flags); +return ; + }switch (proto->state) {case STOPPING :case REQ_SENT :
drivers/net/wireless/realtek/rtlwifi/core.c +5 -3
@@ -78,7 +78,6 @@ static void rtl_fw_do_work(const struct firmware *firmware, void *context,rtl_dbg (rtlpriv,COMP_ERR ,DBG_LOUD ,"Firmware callback routine entered!\n" ); -complete (&rtlpriv->firmware_loading_complete);if (!firmware) {if (rtlpriv->cfg->alt_fw_name) { err = request_firmware(&firmware,
@@ -91,13 +90,13 @@ static void rtl_fw_do_work(const struct firmware *firmware, void *context, }pr_err ("Selected firmware is not available\n" ); rtlpriv->max_fw_size =0 ; -return ; + goto exit; } found_alt:if (firmware->size > rtlpriv->max_fw_size) {pr_err ("Firmware is too big!\n" );release_firmware (firmware); -return ; + goto exit; }if (!is_wow) { memcpy(rtlpriv->rtlhal.pfirmware, firmware->data,
@@ -109,6 +108,9 @@ static void rtl_fw_do_work(const struct firmware *firmware, void *context, rtlpriv->rtlhal.wowlan_fwsize = firmware->size; }release_firmware (firmware); + +exit: +complete (&rtlpriv->firmware_loading_complete); }void rtl_fw_cb (const struct firmware *firmware,void *context)
drivers/scsi/scsi_lib.c +14 -13
@@ -249,7 +249,8 @@ int __scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, req =blk_get_request (sdev->request_queue, data_direction ==DMA_TO_DEVICE ? -REQ_OP_SCSI_OUT :REQ_OP_SCSI_IN ,BLK_MQ_REQ_PREEMPT ); +REQ_OP_SCSI_OUT :REQ_OP_SCSI_IN , + rq_flags &RQF_PM ?BLK_MQ_REQ_PM :0 );if (IS_ERR (req))return ret; rq =scsi_req (req);
@@ -1203,6 +1204,8 @@ static blk_status_t scsi_device_state_check(struct scsi_device *sdev, struct request *req) {switch (sdev->sdev_state) { +case SDEV_CREATED : +return BLK_STS_OK ;case SDEV_OFFLINE :case SDEV_TRANSPORT_OFFLINE :/*
@@ -1229,18 +1232,18 @@ scsi_device_state_check(struct scsi_device *sdev, struct request *req)return BLK_STS_RESOURCE ;case SDEV_QUIESCE :/* -* If the devices is blocked we defer normal commands. +* If the device is blocked we only accept power management +* commands. */ -if (req && !(req->rq_flags &RQF_PREEMPT )) +if (req &&WARN_ON_ONCE (!(req->rq_flags &RQF_PM )))return BLK_STS_RESOURCE ;return BLK_STS_OK ;default :/* * For any other not fully online state we only allow -* special commands. In particular any user initiated -* command is not allowed. +* power management commands. */ -if (req && !(req->rq_flags &RQF_PREEMPT )) +if (req && !(req->rq_flags &RQF_PM ))return BLK_STS_IOERR ;return BLK_STS_OK ; }
@@ -2508,15 +2511,13 @@ void sdev_evt_send_simple(struct scsi_device *sdev,EXPORT_SYMBOL_GPL (sdev_evt_send_simple);/** -* scsi_device_quiesce - Block user issued commands. +* scsi_device_quiesce - Block all commands except power management. * @sdev: scsi device to quiesce. * * This works by trying to transition to the SDEV_QUIESCE state * (which must be a legal transition). When the device is in this -* state, only special requests will be accepted, all others will -* be deferred. Since special requests may also be requeued requests, -* a successful return doesn't guarantee the device will be -* totally quiescent. +* state, only power management requests will be accepted, all others will +* be deferred. * * Must be called with user context, may sleep. *
@@ -2578,12 +2579,12 @@ void scsi_device_resume(struct scsi_device *sdev)* device deleted during suspend) */ mutex_lock (&sdev->state_mutex); +if (sdev->sdev_state ==SDEV_QUIESCE ) +scsi_device_set_state (sdev,SDEV_RUNNING );if (sdev->quiesced_by) { sdev->quiesced_by =NULL ;blk_clear_pm_only (sdev->request_queue); } -if (sdev->sdev_state ==SDEV_QUIESCE ) -scsi_device_set_state (sdev,SDEV_RUNNING );mutex_unlock (&sdev->state_mutex); }EXPORT_SYMBOL (scsi_device_resume);
drivers/scsi/scsi_transport_spi.c +19 -8
@@ -117,12 +117,16 @@ static int spi_execute(struct scsi_device *sdev, const void *cmd, sshdr = &sshdr_tmp;for (i =0 ; i <DV_RETRIES ; i++) { +/* +* The purpose of the RQF_PM flag below is to bypass the +* SDEV_QUIESCE state. +*/ result =scsi_execute (sdev, cmd, dir, buffer, bufflen, sense, sshdr,DV_TIMEOUT ,/* retries */ 1 ,REQ_FAILFAST_DEV |REQ_FAILFAST_TRANSPORT |REQ_FAILFAST_DRIVER , -0 ,NULL ); +RQF_PM ,NULL );if (driver_byte (result) !=DRIVER_SENSE || sshdr->sense_key !=UNIT_ATTENTION )break ;
@@ -1005,23 +1009,26 @@ spi_dv_device(struct scsi_device *sdev)*/ lock_system_sleep (); +if (scsi_autopm_get_device (sdev)) + goto unlock_system_sleep; +if (unlikely (spi_dv_in_progress (starget))) - goto unlock; + goto put_autopm;if (unlikely (scsi_device_get (sdev))) - goto unlock; + goto put_autopm;spi_dv_in_progress (starget) =1 ; buffer =kzalloc (len,GFP_KERNEL );if (unlikely (!buffer)) - goto out_put; + goto put_sdev;/* We need to verify that the actual device will quiesce; the * later target quiesce is just a nice to have */ if (unlikely (scsi_device_quiesce (sdev))) - goto out_free; + goto free_buffer;scsi_target_quiesce (starget);
@@ -1041,12 +1048,16 @@ spi_dv_device(struct scsi_device *sdev)spi_initial_dv (starget) =1 ; - out_free: +free_buffer:kfree (buffer); - out_put: + +put_sdev:spi_dv_in_progress (starget) =0 ;scsi_device_put (sdev); -unlock: +put_autopm: +scsi_autopm_put_device (sdev); + +unlock_system_sleep:unlock_system_sleep (); }EXPORT_SYMBOL (spi_dv_device);
drivers/scsi/ufs/ufshcd-pci.c +71 -2
109 lines not on this page · raw message
drivers/scsi/ufs/ufshcd.c +65 -7
105 lines not on this page · raw message
drivers/scsi/ufs/ufshcd.h +1 -0
@@ -683,6 +683,7 @@ struct ufs_hba {* "UFS device" W-LU. */ struct scsi_device *sdev_ufs_device; +struct scsi_device *sdev_rpmb;enum ufs_dev_pwr_mode curr_dev_pwr_mode;enum uic_link_state uic_link_state;
drivers/staging/comedi/comedi_fops.c +3 -1
@@ -2987,7 +2987,9 @@ static int put_compat_cmd(struct comedi32_cmd_struct __user *cmd32, v32.chanlist_len = cmd->chanlist_len; v32.data =ptr_to_compat (cmd->data); v32.data_len = cmd->data_len; -return copy_to_user (cmd32, &v32,sizeof (v32)); +if (copy_to_user (cmd32, &v32,sizeof (v32))) +return -EFAULT ; +return 0 ; }/* Handle 32-bit COMEDI_CMD ioctl. */
drivers/staging/mt7621-dma/mtk-hsdma.c +3 -1
@@ -712,7 +712,7 @@ static int mtk_hsdma_probe(struct platform_device *pdev) ret =dma_async_device_register (dd);if (ret) {dev_err (&pdev->dev,"failed to register dma device\n" ); -return ret; + goto err_uninit_hsdma; } ret = of_dma_controller_register(pdev->dev.of_node,
@@ -728,6 +728,8 @@ static int mtk_hsdma_probe(struct platform_device *pdev) err_unregister:dma_async_device_unregister (dd); +err_uninit_hsdma: +mtk_hsdma_uninit (hsdma);return ret; }
drivers/target/target_core_xcopy.c +70 -49
160 lines not on this page · raw message
drivers/target/target_core_xcopy.h +1 -0
@@ -27,6 +27,7 @@ struct xcopy_op {struct se_device *dst_dev;unsigned char dst_tid_wwn[XCOPY_NAA_IEEE_REGEX_LEN ];unsigned char local_dev_wwn[XCOPY_NAA_IEEE_REGEX_LEN ]; +struct percpu_ref *remote_lun_ref;sector_t src_lba;sector_t dst_lba;
drivers/usb/chipidea/ci_hdrc_imx.c +5 -1
@@ -139,9 +139,13 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev) misc_pdev =of_find_device_by_node (args.np);of_node_put (args.np); -if (!misc_pdev || !platform_get_drvdata (misc_pdev)) +if (!misc_pdev)return ERR_PTR (-EPROBE_DEFER ); +if (!platform_get_drvdata (misc_pdev)) { +put_device (&misc_pdev->dev); +return ERR_PTR (-EPROBE_DEFER ); + } data->dev = &misc_pdev->dev;/*
drivers/usb/class/cdc-acm.c +4 -0
@@ -1895,6 +1895,10 @@ static const struct usb_device_id acm_ids[] = { { USB_DEVICE(0x04d8, 0xfd08), .driver_info = IGNORE_DEVICE, }, + + { USB_DEVICE(0x04d8, 0xf58b), + .driver_info = IGNORE_DEVICE, + }, #endif /*Samsung phone in firmware update mode */
drivers/usb/class/cdc-wdm.c +13 -3
@@ -465,13 +465,23 @@ static int service_outstanding_interrupt(struct wdm_device *desc)if (!desc->resp_count || !--desc->resp_count) goto out; +if (test_bit (WDM_DISCONNECTING , &desc->flags)) { + rv = -ENODEV ; + goto out; + } +if (test_bit (WDM_RESETTING , &desc->flags)) { + rv = -EIO ; + goto out; + } +set_bit (WDM_RESPONDING , &desc->flags);spin_unlock_irq (&desc->iuspin); rv =usb_submit_urb (desc->response,GFP_KERNEL );spin_lock_irq (&desc->iuspin);if (rv) { -dev_err (&desc->intf->dev, -"usb_submit_urb failed with result %d\n" , rv); +if (!test_bit (WDM_DISCONNECTING , &desc->flags)) +dev_err (&desc->intf->dev, +"usb_submit_urb failed with result %d\n" , rv);/* make sure the next notification trigger a submit */ clear_bit (WDM_RESPONDING , &desc->flags);
@@ -1027,9 +1037,9 @@ static void wdm_disconnect(struct usb_interface *intf)wake_up_all (&desc->wait);mutex_lock (&desc->rlock);mutex_lock (&desc->wlock); -kill_urbs (desc);cancel_work_sync (&desc->rxwork);cancel_work_sync (&desc->service_outs_intr); +kill_urbs (desc);mutex_unlock (&desc->wlock);mutex_unlock (&desc->rlock);
drivers/usb/class/usblp.c +19 -2
@@ -274,8 +274,25 @@ static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, i#define usblp_reset (usblp)\ usblp_ctrl_msg(usblp, USBLP_REQ_RESET, USB_TYPE_CLASS, USB_DIR_OUT, USB_RECIP_OTHER, 0, NULL, 0) -#define usblp_hp_channel_change_request (usblp, channel, buffer) \ - usblp_ctrl_msg(usblp, USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST, USB_TYPE_VENDOR, USB_DIR_IN, USB_RECIP_INTERFACE, channel, buffer, 1) +static int usblp_hp_channel_change_request (struct usblp *usblp,int channel,u8 *new_channel) +{ +u8 *buf; +int ret; + + buf =kzalloc (1 ,GFP_KERNEL ); +if (!buf) +return -ENOMEM ; + + ret =usblp_ctrl_msg (usblp,USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST , +USB_TYPE_VENDOR ,USB_DIR_IN ,USB_RECIP_INTERFACE , + channel, buf,1 ); +if (ret ==0 ) + *new_channel = buf[0 ]; + +kfree (buf); + +return ret; +}/* * See the description for usblp_select_alts() below for the usage
drivers/usb/dwc3/core.h +1 -0
@@ -285,6 +285,7 @@/* Global USB2 PHY Vendor Control Register */ #define DWC3_GUSB2PHYACC_NEWREGREQ BIT(25) +#define DWC3_GUSB2PHYACC_DONE BIT(24)#define DWC3_GUSB2PHYACC_BUSY BIT(23)#define DWC3_GUSB2PHYACC_WRITE BIT(22)#define DWC3_GUSB2PHYACC_ADDR (n) (n << 16)
drivers/usb/dwc3/dwc3-meson-g12a.c +1 -1
@@ -754,7 +754,7 @@ static int dwc3_meson_g12a_probe(struct platform_device *pdev) ret = priv->drvdata->setup_regmaps (priv, base);if (ret) -return ret; + goto err_disable_clks;if (priv->vbus) { ret =regulator_enable (priv->vbus);
drivers/usb/dwc3/gadget.c +5 -11
@@ -1763,6 +1763,8 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,list_for_each_entry_safe (r, t, &dep->started_list, list)dwc3_gadget_move_cancelled_request (r); + dep->flags &= ~DWC3_EP_WAIT_TRANSFER_COMPLETE ; + goto out; } }
@@ -2083,6 +2085,7 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend)static void dwc3_gadget_disable_irq (struct dwc3 *dwc);static void __dwc3_gadget_stop (struct dwc3 *dwc); +static int __dwc3_gadget_start (struct dwc3 *dwc);static int dwc3_gadget_pullup (struct usb_gadget *g,int is_on) {
@@ -2145,6 +2148,8 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) % dwc->ev_buf->length; } + }else { +__dwc3_gadget_start (dwc); } ret =dwc3_gadget_run_stop (dwc, is_on, false);
@@ -2319,10 +2324,6 @@ static int dwc3_gadget_start(struct usb_gadget *g, } dwc->gadget_driver = driver; - -if (pm_runtime_active (dwc->dev)) -__dwc3_gadget_start (dwc); -spin_unlock_irqrestore (&dwc->lock, flags);return 0 ;
@@ -2348,13 +2349,6 @@ static int dwc3_gadget_stop(struct usb_gadget *g)unsigned long flags;spin_lock_irqsave (&dwc->lock, flags); - -if (pm_runtime_suspended (dwc->dev)) - goto out; - -__dwc3_gadget_stop (dwc); - -out: dwc->gadget_driver =NULL ;spin_unlock_irqrestore (&dwc->lock, flags);
drivers/usb/dwc3/ulpi.c +21 -17
@@ -7,6 +7,8 @@* Author: Heikki Krogerus <[email protected]> */ +#include <linux/delay.h> +#include <linux/time64.h> #include <linux/ulpi/regs.h> #include "core.h"
@@ -17,14 +19,28 @@ DWC3_GUSB2PHYACC_ADDR(ULPI_ACCESS_EXTENDED) | \ DWC3_GUSB2PHYACC_EXTEND_ADDR(a) : DWC3_GUSB2PHYACC_ADDR(a)) -static int dwc3_ulpi_busyloop (struct dwc3 *dwc) +#define DWC3_ULPI_BASE_DELAY DIV_ROUND_UP(NSEC_PER_SEC, 60000000L) + +static int dwc3_ulpi_busyloop (struct dwc3 *dwc,u8 addr,bool read) { -unsigned int count =1000 ; +unsigned long ns =5L *DWC3_ULPI_BASE_DELAY ; +unsigned int count =10000 ;u32 reg; +if (addr >=ULPI_EXT_VENDOR_SPECIFIC ) + ns +=DWC3_ULPI_BASE_DELAY ; + +if (read) + ns +=DWC3_ULPI_BASE_DELAY ; + + reg =dwc3_readl (dwc->regs,DWC3_GUSB2PHYCFG (0 )); +if (reg &DWC3_GUSB2PHYCFG_SUSPHY ) +usleep_range (1000 ,1200 ); +while (count--) { +ndelay (ns); reg =dwc3_readl (dwc->regs,DWC3_GUSB2PHYACC (0 )); -if (!(reg &DWC3_GUSB2PHYACC_BUSY )) +if (reg &DWC3_GUSB2PHYACC_DONE )return 0 ;cpu_relax (); }
@@ -38,16 +54,10 @@ static int dwc3_ulpi_read(struct device *dev, u8 addr)u32 reg;int ret; - reg =dwc3_readl (dwc->regs,DWC3_GUSB2PHYCFG (0 )); -if (reg &DWC3_GUSB2PHYCFG_SUSPHY ) { - reg &= ~DWC3_GUSB2PHYCFG_SUSPHY ; -dwc3_writel (dwc->regs,DWC3_GUSB2PHYCFG (0 ), reg); - } - reg =DWC3_GUSB2PHYACC_NEWREGREQ |DWC3_ULPI_ADDR (addr);dwc3_writel (dwc->regs,DWC3_GUSB2PHYACC (0 ), reg); - ret =dwc3_ulpi_busyloop (dwc); + ret =dwc3_ulpi_busyloop (dwc, addr, true);if (ret)return ret;
@@ -61,17 +71,11 @@ static int dwc3_ulpi_write(struct device *dev, u8 addr, u8 val)struct dwc3 *dwc =dev_get_drvdata (dev);u32 reg; - reg =dwc3_readl (dwc->regs,DWC3_GUSB2PHYCFG (0 )); -if (reg &DWC3_GUSB2PHYCFG_SUSPHY ) { - reg &= ~DWC3_GUSB2PHYCFG_SUSPHY ; -dwc3_writel (dwc->regs,DWC3_GUSB2PHYCFG (0 ), reg); - } - reg =DWC3_GUSB2PHYACC_NEWREGREQ |DWC3_ULPI_ADDR (addr); reg |=DWC3_GUSB2PHYACC_WRITE | val;dwc3_writel (dwc->regs,DWC3_GUSB2PHYACC (0 ), reg); -return dwc3_ulpi_busyloop (dwc); +return dwc3_ulpi_busyloop (dwc, addr, false); }static const struct ulpi_ops dwc3_ulpi_ops = {
drivers/usb/gadget/Kconfig +2 -0
@@ -265,6 +265,7 @@ config USB_CONFIGFS_NCM depends on NET select USB_U_ETHER select USB_F_NCM + select CRC32 help NCM is an advanced protocol for Ethernet encapsulation, allows grouping of several ethernet frames into one USB transfer and
@@ -314,6 +315,7 @@ config USB_CONFIGFS_EEM depends on NET select USB_U_ETHER select USB_F_EEM + select CRC32 help CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM and therefore can be supported by more hardware. Technically ECM and
drivers/usb/gadget/composite.c +8 -2
@@ -392,8 +392,11 @@ int usb_function_deactivate(struct usb_function *function)spin_lock_irqsave (&cdev->lock, flags); -if (cdev->deactivations ==0 ) +if (cdev->deactivations ==0 ) { +spin_unlock_irqrestore (&cdev->lock, flags); status =usb_gadget_deactivate (cdev->gadget); +spin_lock_irqsave (&cdev->lock, flags); + }if (status ==0 ) cdev->deactivations++;
@@ -424,8 +427,11 @@ int usb_function_activate(struct usb_function *function) status = -EINVAL ; else { cdev->deactivations--; -if (cdev->deactivations ==0 ) +if (cdev->deactivations ==0 ) { +spin_unlock_irqrestore (&cdev->lock, flags); status =usb_gadget_activate (cdev->gadget); +spin_lock_irqsave (&cdev->lock, flags); + } }spin_unlock_irqrestore (&cdev->lock, flags);
drivers/usb/gadget/configfs.c +13 -6
@@ -221,9 +221,16 @@ static ssize_t gadget_dev_desc_bcdUSB_store(struct config_item *item,static ssize_t gadget_dev_desc_UDC_show (struct config_item *item,char *page) { -char *udc_name =to_gadget_info (item)->composite.gadget_driver.udc_name; +struct gadget_info *gi =to_gadget_info (item); +char *udc_name; +int ret; + +mutex_lock (&gi->lock); + udc_name = gi->composite.gadget_driver.udc_name; + ret =sprintf (page,"%s\n" , udc_name ?:"" ); +mutex_unlock (&gi->lock); -return sprintf (page,"%s\n" , udc_name ?:"" ); +return ret; }static int unregister_gadget (struct gadget_info *gi)
@@ -1248,9 +1255,9 @@ static void purge_configs_funcs(struct gadget_info *gi) cfg = container_of(c, struct config_usb_cfg, c); -list_for_each_entry_safe (f, tmp, &c->functions, list) { +list_for_each_entry_safe_reverse (f, tmp, &c->functions, list) { -list_move_tail (&f->list, &cfg->func_list); +list_move (&f->list, &cfg->func_list);if (f->unbind) { dev_dbg(&gi->cdev.gadget->dev, "unbind function '%s'/%p\n",
@@ -1536,7 +1543,7 @@ static const struct usb_gadget_driver configfs_driver_template = { .suspend = configfs_composite_suspend, .resume = configfs_composite_resume, - .max_speed = USB_SPEED_SUPER, + .max_speed = USB_SPEED_SUPER_PLUS, .driver = { .owner = THIS_MODULE, .name = "configfs-gadget",
@@ -1576,7 +1583,7 @@ static struct config_group *gadgets_make( gi->composite.unbind = configfs_do_nothing; gi->composite.suspend =NULL ; gi->composite.resume =NULL ; - gi->composite.max_speed =USB_SPEED_SUPER ; + gi->composite.max_speed =USB_SPEED_SUPER_PLUS ;spin_lock_init (&gi->spinlock);mutex_init (&gi->lock);
drivers/usb/gadget/function/f_printer.c +1 -0
@@ -1162,6 +1162,7 @@ static int printer_func_bind(struct usb_configuration *c,printer_req_free (dev->in_ep, req); } +usb_free_all_descriptors (f);return ret; }
drivers/usb/gadget/function/f_uac2.c +55 -14
115 lines not on this page · raw message
drivers/usb/gadget/function/u_ether.c +5 -4
@@ -45,9 +45,10 @@#define UETH__VERSION "29-May-2008"/* Experiments show that both Linux and Windows hosts allow up to 16k -* frame sizes. Set the max size to 15k+52 to prevent allocating 32k +* frame sizes. Set the max MTU size to 15k+52 to prevent allocating 32k * blocks and still have efficient handling. */ -#define GETHER_MAX_ETH_FRAME_LEN 15412 +#define GETHER_MAX_MTU_SIZE 15412 +#define GETHER_MAX_ETH_FRAME_LEN (GETHER_MAX_MTU_SIZE + ETH_HLEN)struct eth_dev {/* lock is held while accessing port_usb
@@ -786,7 +787,7 @@ struct eth_dev *gether_setup_name(struct usb_gadget *g,/* MTU range: 14 - 15412 */ net->min_mtu =ETH_HLEN ; - net->max_mtu =GETHER_MAX_ETH_FRAME_LEN ; + net->max_mtu =GETHER_MAX_MTU_SIZE ; dev->gadget = g;SET_NETDEV_DEV (net, &g->dev);
@@ -848,7 +849,7 @@ struct net_device *gether_setup_name_default(const char *netname)/* MTU range: 14 - 15412 */ net->min_mtu =ETH_HLEN ; - net->max_mtu =GETHER_MAX_ETH_FRAME_LEN ; + net->max_mtu =GETHER_MAX_MTU_SIZE ;return net; }
drivers/usb/gadget/legacy/acm_ms.c +3 -1
@@ -200,8 +200,10 @@ static int acm_ms_bind(struct usb_composite_dev *cdev)struct usb_descriptor_header *usb_desc; usb_desc =usb_otg_descriptor_alloc (gadget); -if (!usb_desc) +if (!usb_desc) { + status = -ENOMEM ; goto fail_string_ids; + }
Lines of this file are not shown. View the raw message.
fs/btrfs/send.c +31 -18
49 lines not on this page · raw message
net/core/net-sysfs.c +53 -12
65 lines not on this page · raw message
tools/testing/selftests/drivers/net/mlxsw/qos_pfc.sh +1 -1
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.