Linux 5.10.26
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.26 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/scsi/libsas.rst | 10 MAINTAINERS | 7 Makefile | 8 arch/mips/boot/compressed/Makefile | 1 arch/powerpc/include/asm/cpu_has_feature.h | 4 arch/powerpc/lib/sstep.c | 16 arch/riscv/Kconfig | 4 arch/riscv/include/asm/sbi.h | 4 arch/s390/include/asm/pci.h | 6 arch/s390/kernel/vtime.c | 2 arch/s390/pci/pci.c | 85 arch/s390/pci/pci_clp.c | 40 arch/s390/pci/pci_event.c | 22 arch/x86/events/intel/core.c | 3 arch/x86/events/intel/ds.c | 2 arch/x86/include/asm/processor.h | 9 arch/x86/include/asm/thread_info.h | 23 arch/x86/kernel/apic/apic.c | 5 arch/x86/kernel/apic/io_apic.c | 10 arch/x86/kernel/signal.c | 24 drivers/base/power/runtime.c | 62 drivers/counter/stm32-timer-cnt.c | 55 drivers/firmware/efi/efi.c | 3 drivers/firmware/efi/vars.c | 4 drivers/gpio/gpiolib.c | 7 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 drivers/gpu/drm/amd/display/dc/core/dc.c | 13 drivers/gpu/drm/amd/display/dc/dc_stream.h | 1 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c | 26 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 67 drivers/gpu/drm/i915/i915_perf.c | 13 drivers/iio/adc/Kconfig | 3 drivers/iio/adc/ab8500-gpadc.c | 2 drivers/iio/adc/ad7949.c | 2 drivers/iio/adc/qcom-spmi-vadc.c | 2 drivers/iio/gyro/mpu3050-core.c | 2 drivers/iio/humidity/hid-sensor-humidity.c | 12 drivers/iio/imu/adis16400.c | 3 drivers/iio/light/hid-sensor-prox.c | 13 drivers/iio/temperature/hid-sensor-temperature.c | 14 drivers/infiniband/hw/mlx5/qp.c | 26 drivers/infiniband/ulp/rtrs/rtrs-clt.c | 14 drivers/infiniband/ulp/rtrs/rtrs-pri.h | 3 drivers/infiniband/ulp/rtrs/rtrs-srv.c | 17 drivers/infiniband/ulp/rtrs/rtrs.c | 73 drivers/net/bonding/bond_main.c | 8 drivers/net/ethernet/ibm/ibmvnic.c | 52 drivers/net/ethernet/ibm/ibmvnic.h | 5 drivers/net/ethernet/intel/i40e/i40e_main.c | 12 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 2 drivers/net/phy/micrel.c | 1 drivers/net/wireless/intel/iwlwifi/cfg/22000.c | 11 drivers/net/wireless/intel/iwlwifi/iwl-config.h | 2 drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 6 drivers/nvme/host/core.c | 36 drivers/nvme/host/rdma.c | 7 drivers/nvme/host/tcp.c | 16 drivers/nvme/target/core.c | 17 drivers/pci/hotplug/rpadlpar_sysfs.c | 14 drivers/pci/hotplug/s390_pci_hpc.c | 3 drivers/regulator/pca9450-regulator.c | 30 drivers/s390/net/qeth_core_main.c | 18 drivers/scsi/aic94xx/aic94xx_scb.c | 20 drivers/scsi/hisi_sas/hisi_sas_main.c | 12 drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 3 drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 3 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 3 drivers/scsi/isci/port.c | 11 drivers/scsi/libsas/sas_event.c | 66 drivers/scsi/libsas/sas_init.c | 27 drivers/scsi/libsas/sas_internal.h | 5 drivers/scsi/lpfc/lpfc_debugfs.c | 4 drivers/scsi/mvsas/mv_sas.c | 25 drivers/scsi/myrs.c | 2 drivers/scsi/pm8001/pm8001_ctl.c | 7 drivers/scsi/pm8001/pm8001_hwi.c | 1492 ++++++-------- drivers/scsi/pm8001/pm8001_init.c | 93 drivers/scsi/pm8001/pm8001_sas.c | 150 - drivers/scsi/pm8001/pm8001_sas.h | 47 drivers/scsi/pm8001/pm80xx_hwi.c | 1740 +++++++---------- drivers/scsi/ufs/ufs-mediatek.c | 2 drivers/spi/spi-cadence-quadspi.c | 1 drivers/staging/media/sunxi/cedrus/cedrus.c | 19 drivers/thunderbolt/switch.c | 18 drivers/thunderbolt/tb.c | 4 drivers/tty/serial/stm32-usart.c | 26 drivers/usb/dwc3/gadget.c | 22 drivers/usb/gadget/configfs.c | 14 drivers/usb/storage/transport.c | 7 drivers/usb/storage/unusual_devs.h | 12 drivers/usb/typec/tcpm/tcpm.c | 9 drivers/usb/typec/tps6598x.c | 1 drivers/usb/usbip/vudc_sysfs.c | 2 drivers/vfio/Kconfig | 2 drivers/vhost/vdpa.c | 20 fs/afs/dir.c | 1 fs/afs/file.c | 1 fs/afs/fs_operation.c | 7 fs/afs/inode.c | 1 fs/afs/internal.h | 1 fs/afs/mntpt.c | 1 fs/afs/xattr.c | 31 fs/btrfs/ctree.c | 2 fs/btrfs/inode.c | 2 fs/cifs/inode.c | 10 fs/cifs/transport.c | 7 fs/ext4/ext4.h | 2 fs/ext4/fast_commit.c | 9 fs/ext4/inode.c | 12 fs/ext4/namei.c | 32 fs/ext4/verity.c | 89 fs/ext4/xattr.c | 2 fs/gfs2/ops_fstype.c | 33 fs/gfs2/recovery.c | 8 fs/gfs2/super.c | 45 fs/gfs2/util.c | 58 fs/gfs2/util.h | 3 fs/io_uring.c | 19 fs/nfsd/filecache.c | 2 fs/nfsd/nfs4proc.c | 2 fs/nfsd/nfs4state.c | 2 fs/pstore/inode.c | 2 fs/select.c | 10 fs/zonefs/super.c | 101 include/linux/bpf.h | 5 include/linux/efi.h | 6 include/linux/regulator/pca9450.h | 10 include/linux/thread_info.h | 13 include/linux/usb_usual.h | 2 include/scsi/libsas.h | 11 kernel/futex.c | 3 kernel/irq/manage.c | 4 kernel/jump_label.c | 8 kernel/module.c | 166 + kernel/module_signature.c | 2 kernel/module_signing.c | 2 kernel/static_call.c | 11 kernel/time/alarmtimer.c | 2 kernel/time/hrtimer.c | 2 kernel/time/posix-cpu-timers.c | 2 net/qrtr/qrtr.c | 2 net/sunrpc/svc.c | 6 net/sunrpc/svc_xprt.c | 4 net/sunrpc/xprtrdma/svc_rdma_backchannel.c | 6 sound/firewire/dice/dice-stream.c | 5 sound/pci/hda/hda_generic.c | 2 sound/pci/hda/patch_realtek.c | 16 sound/soc/codecs/ak4458.c | 1 sound/soc/codecs/ak5558.c | 1 sound/soc/codecs/wcd934x.c | 6 sound/soc/fsl/fsl_ssi.c | 6 sound/soc/generic/simple-card-utils.c | 13 sound/soc/intel/boards/bytcr_rt5640.c | 2 sound/soc/qcom/lpass-cpu.c | 2 sound/soc/qcom/sdm845.c | 6 sound/soc/sof/intel/hda-dsp.c | 2 sound/soc/sof/intel/hda.c | 1 sound/usb/mixer_quirks.c | 4 158 files changed, 2993 insertions(+), 2699 deletions(-)
Ahmed S. Darwish (5):
scsi: libsas: Introduce a _gfp() variant of event notifiers
scsi: mvsas: Pass gfp_t flags to libsas event notifiers
scsi: isci: Pass gfp_t flags in isci_port_link_down()
scsi: isci: Pass gfp_t flags in isci_port_link_up()
scsi: isci: Pass gfp_t flags in isci_port_bc_change_received()
Alan Stern (1):
usb-storage: Add quirk to defeat Kindle's automatic unload
Alexander Lobakin (1):
MIPS: compressed: fix build with enabled UBSAN
Alexander Shiyan (1):
ASoC: fsl_ssi: Fix TDM slot setup for I2S mode
Alexandru Ardelean (1):
iio: adc: adi-axi-adc: add proper Kconfig dependencies
Andrii Nakryiko (1):
bpf: Declare __bpf_free_used_maps() unconditionally
Andy Shevchenko (1):
gpiolib: Assign fwnode to parent's if no primary one provided
Ard Biesheuvel (1):
efi: use 32-bit alignment for efi_guid_t literals
Aurabindo Pillai (1):
drm/amd/display: turn DPMS off on connector unplug
Badhri Jagan Sridharan (1):
usb: typec: tcpm: Invoke power_supply_changed for tcpm-source-psy-
Bob Peterson (3):
gfs2: Add common helper for holding and releasing the freeze glock
gfs2: move freeze glock outside the make_fs_rw and _ro functions
gfs2: bypass signal_our_withdraw if no journal
Calvin Hou (1):
drm/amd/display: Correct algorithm for reversed gamma
Chao Yu (1):
zonefs: fix to update .i_wr_refcnt correctly in zonefs_open_zone()
Christian Melki (1):
net: phy: micrel: set soft_reset callback to genphy_soft_reset for KSZ8081
Christoph Hellwig (1):
nvme: fix Write Zeroes limitations
Christophe Leroy (1):
powerpc: Force inlining of cpu_has_feature() to avoid build failure
Colin Ian King (2):
ALSA: usb-audio: Fix unintentional sign extension issue
usbip: Fix incorrect double assignment to udc->ud.tcp_rx
Damien Le Moal (2):
zonefs: Fix O_APPEND async write handling
zonefs: prevent use of seq files as swap file
Dan Carpenter (2):
scsi: lpfc: Fix some error codes in debugfs
iio: adis16400: Fix an error code in adis16400_initial_setup()
Daniel Kobras (1):
sunrpc: fix refcount leak for rpc auth modules
David Howells (2):
afs: Fix accessing YFS xattrs on a non-YFS server
afs: Stop listxattr() from listing "afs.*" attributes
David Sterba (1):
btrfs: fix slab cache flags for free space tree bitmap
Dinghao Liu (1):
iio: gyro: mpu3050: Fix error handling in mpu3050_trigger_handler
Elias Rudberg (1):
usb: typec: Remove vdo[3] part of tps6598x_rx_identity_reg struct
Eric Biggers (1):
ext4: fix error handling in ext4_end_enable_verity()
Erwan Le Ray (1):
serial: stm32: fix DMA initialization error handling
Evan Quan (1):
drm/amd/pm: fulfill the Polaris implementation for get_clock_by_type_with_latency()
Ezequiel Garcia (1):
media: cedrus: h264: Support profile controls
Fabrice Gasnier (2):
counter: stm32-timer-cnt: fix ceiling write max value
counter: stm32-timer-cnt: fix ceiling miss-alignment with reload register
Filipe Manana (1):
btrfs: fix race when cloning extent buffer during rewind of an old root
Frank van der Linden (1):
module: harden ELF info handling
Frieder Schrempf (3):
regulator: pca9450: Add SD_VSEL GPIO for LDO5
regulator: pca9450: Enable system reset on WDOG_B assertion
regulator: pca9450: Clear PRESET_EN bit to fix BUCK1/2/3 voltage setting
Gautam Dawar (1):
vhost_vdpa: fix the missing irq_bypass_unregister_producer() invocation
Gerald Schaefer (1):
s390/vtime: fix increased steal time accounting
Gioh Kim (1):
RDMA/rtrs: Remove unnecessary argument dir of rtrs_iu_free
Greg Kroah-Hartman (3):
MAINTAINERS: move some real subsystems off of the staging mailing list
MAINTAINERS: move the staging subsystem to lists.linux.dev Linux 5.10.26
Guoqing Jiang (2):
RDMA/rtrs-srv: Jump to dereg_mr label if allocate iu fails RDMA/rtrs: Introduce rtrs_post_send
Hans de Goede (1):
ASoC: Intel: bytcr_rt5640: Fix HP Pavilion x2 10-p0XX OVCD current threshold
Harshad Shirwadkar (1):
ext4: fix rename whiteout with fast commit
Heinrich Schuchardt (1):
RISC-V: correct enum sbi_ext_rfence_fid
Hui Wang (1):
ALSA: hda: generic: Fix the micmute led init state
J. Bruce Fields (1):
nfsd: don't abort copies early
Jack Wang (1):
RDMA/rtrs: Fix KASAN: stack-out-of-bounds bug
Jason Gunthorpe (1):
vfio: IOMMU_API should be selected
Jens Axboe (3):
io_uring: ensure that SQPOLL thread is started for exit
io_uring: don't attempt IO reissue from the ring exit path
io_uring: clear IOCB_WAITQ for non -EIOCBQUEUED return
Jeremy Szu (3):
ALSA: hda/realtek: fix mute/micmute LEDs for HP 840 G8
ALSA: hda/realtek: fix mute/micmute LEDs for HP 440 G8
ALSA: hda/realtek: fix mute/micmute LEDs for HP 850 G8
Jia-Ju Bai (1):
net: bonding: fix error return code of bond_neigh_init()
Jim Lin (1):
usb: gadget: configfs: Fix KASAN use-after-free
Joe Korty (1):
NFSD: Repair misuse of sv_lock in 5.10.16-rt30.
Joe Perches (1):
scsi: pm8001: Neaten debug logging macros and uses
Johan Hovold (1):
x86/apic/of: Fix CPU devicetree-node lookups
John Garry (1):
scsi: libsas: Remove notifier indirection
Jonathan Albrieux (1):
iio:adc:qcom-spmi-vadc: add default scale to LR_MUX2_BAT_ID channel
Jonathan Cameron (1):
iio:adc:stm32-adc: Add HAS_IOMEM dependency
Julian Wiedmann (1):
s390/qeth: schedule TX NAPI on QAOB completion
Junlin Yang (1):
ibmvnic: remove excessive irqsave
Kan Liang (2):
perf/x86/intel: Fix a crash caused by zero PEBS status perf/x86/intel: Fix unchecked MSR access error caused by VLBR_EVENT
Kefeng Wang (1):
riscv: Correct SPARSEMEM configuration
Lee Jones (1):
tty: serial: stm32-usart: Remove set but unused 'cookie' variables
Linus Walleij (1):
iio: adc: ab8500-gpadc: Fix off by 10 to 3
Lv Yunlong (2):
scsi: myrs: Fix a double free in myrs_cleanup() firmware/efi: Fix a use after bug in efi_mem_reserve_persistent
Mark Bloch (1):
RDMA/mlx5: Allow creating all QPs even when non RDMA profile is used
Masahiro Yamada (1):
kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again
Matti Gottlieb (1):
iwlwifi: Add a new card for MA family
Meng Li (1):
spi: cadence: set cqspi to the driver_data field of struct device
Mika Westerberg (2):
thunderbolt: Initialize HopID IDAs in tb_switch_alloc()
thunderbolt: Increase runtime PM reference count on DP tunnel discovery
Niklas Schnelle (3):
s390/pci: refactor zpci_create_device() s390/pci: remove superfluous zdev->zbus check s390/pci: fix leak of PCI device structure
Norbert Ciosek (1):
i40e: Fix endianness conversions
Oleg Nesterov (3):
kernel, fs: Introduce and use set_restart_fn() and arch_set_restart_data()
x86: Move TS_COMPAT back to asm/thread_info.h
x86: Introduce TS_COMPAT_RESTART to fix get_nr_restart_syscall()
Olga Kornievskaia (1):
NFSD: fix dest to src mount in inter-server COPY
Pan Bian (1):
ext4: stop inode update before return
Pan Xiuli (1):
ASoC: SOF: intel: fix wrong poll bits in dsp power down
Pavel Begunkov (1):
io_uring: fix inconsistent lock state
Pavel Skripkin (1):
net/qrtr: fix __netdev_alloc_skb call
Peter Zijlstra (1):
static_call: Fix static_call_update() sanity check
Pierre-Louis Bossart (1):
ASoC: SOF: Intel: unregister DMIC device on probe error
Rafael J. Wysocki (1):
Revert "PM: runtime: Update device status before letting suppliers suspend"
Sagi Grimberg (5):
nvme-tcp: fix misuse of __smp_processor_id with preemption enabled
nvme-tcp: fix possible hang when failing to set io queues
nvme-tcp: fix a NULL deref when receiving a 0-length r2t PDU
nvmet: don't check iosqes,iocqes for discovery controllers
nvme-rdma: fix possible hang when failing to set io queues
Sameer Pujar (1):
ASoC: simple-card-utils: Do not handle device clock
Sandipan Das (2):
powerpc/sstep: Fix load-store and update emulation powerpc/sstep: Fix darn emulation
Sergey Shtylyov (2):
module: merge repetitive strings in module_sig_check()
module: avoid *goto*s in module_sig_check()
Shawn Guo (1):
efivars: respect EFI_UNSUPPORTED return from firmware
Shengjiu Wang (2):
ASoC: ak4458: Add MODULE_DEVICE_TABLE
ASoC: ak5558: Add MODULE_DEVICE_TABLE
Shijie Luo (1):
ext4: fix potential error in ext4_do_update_inode
Srinivas Kandagatla (3):
ASoC: qcom: sdm845: Fix array out of bounds access
ASoC: qcom: sdm845: Fix array out of range on rx slim channels
ASoC: codecs: wcd934x: add a sanity check in set channel map
Srinivasa Rao Mandadapu (1):
ASoC: qcom: lpass-cpu: Fix lpass dai ids parse
Stefano Garzarella (2):
vhost-vdpa: fix use-after-free of v->config_ctx
vhost-vdpa: set v->config_ctx to NULL if eventfd_ctx_fdget() failsSteve French (1):
cifs: fix allocation size on newly created files
Sukadev Bhattiprolu (2):
ibmvnic: add some debugs
ibmvnic: serialize access to work queue on remove
Takashi Sakamoto (1):
ALSA: dice: fix null pointer dereference when node is disconnected
Tetsuo Handa (1):
pstore: Fix warning in pstore_kill_sb()
Thomas Gleixner (2):
x86/ioapic: Ignore IRQ2 again
genirq: Disable interrupts for force threaded handlers
Timo Rothenpieler (1):
svcrdma: disable timeouts on rdma backchannel
Trond Myklebust (1):
nfsd: Don't keep looking up unhashed files in the nfsd file cache
Tyrel Datwyler (1):
PCI: rpadlpar: Fix potential drc_name corruption in store functions
Umesh Nerlige Ramappa (1):
i915/perf: Start hrtimer only if sampling the OA buffer
Vincent Whitchurch (1):
cifs: Fix preauth hash corruption
Viswas G (1):
scsi: pm80xx: Make running_req atomic
Wesley Cheng (2):
usb: dwc3: gadget: Allow runtime suspend if UDC unbinded
usb: dwc3: gadget: Prevent EP queuing while stopping transfers
Wilfried Wessner (1):
iio: adc: ad7949: fix wrong ADC result due to incorrect bit mask
William Breathitt Gray (1):
counter: stm32-timer-cnt: Report count function when SLAVE_MODE_DISABLED
Xiaoliang Yu (2):
ALSA: hda/realtek: apply pin quirk for XiaomiNotebook Pro
ALSA: hda/realtek: Apply headset-mic quirks for Xiaomi Redmibook Air
Ye Xiang (3):
iio: hid-sensor-humidity: Fix alignment issue of timestamp channel
iio: hid-sensor-prox: Fix scale not correct issue
iio: hid-sensor-temperature: Fix issues of timestamp channel
dongjian (1):
scsi: ufs: ufs-mediatek: Correct operator & -> &&
peter chang (1):
scsi: pm80xx: Make mpi_build_cmd locking consistent
yuuzheng (1):
scsi: pm80xx: Fix pm8001_mpi_get_nvmd_resp() race condition
zhangyi (F) (2):
ext4: find old entry again if failed to rename whiteout
ext4: do not try to set xattr into ea_inode if value is empty
Greg Kroah-Hartman
maintainerDocumentation/scsi/libsas.rst +4 -6
@@ -189,12 +189,10 @@ num_phys The event interface:: /* LLDD calls these to notify the class of an event. */ - void (*notify_port_event)(struct sas_phy *, enum port_event); - void (*notify_phy_event)(struct sas_phy *, enum phy_event); - -When sas_register_ha() returns, those are set and can be -called by the LLDD to notify the SAS layer of such events -the SAS layer. + void sas_notify_port_event(struct sas_phy *, enum port_event); + void sas_notify_phy_event(struct sas_phy *, enum phy_event); + void sas_notify_port_event_gfp(struct sas_phy *, enum port_event, gfp_t); + void sas_notify_phy_event_gfp(struct sas_phy *, enum phy_event, gfp_t); The port notification::
MAINTAINERS +3 -4
@@ -1155,7 +1155,7 @@ M: Joel Fernandes <[email protected]> M: Christian Brauner <[email protected]> M: Hridya Valsaraju <[email protected]> M: Suren Baghdasaryan <[email protected]> -L: [email protected] +L: [email protected] S: Supported T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git F: drivers/android/
@@ -8001,7 +8001,6 @@ F: drivers/crypto/hisilicon/sec2/sec_main.c HISILICON STAGING DRIVERS FOR HIKEY 960/970 M: Mauro Carvalho Chehab <[email protected]> -L: [email protected] S: Maintained F: drivers/staging/hikey9xx/
@@ -16665,7 +16664,7 @@ F: drivers/staging/vt665?/ STAGING SUBSYSTEM M: Greg Kroah-Hartman <[email protected]> -L: [email protected] +L: [email protected] S: Supported T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git F: drivers/staging/
@@ -18705,7 +18704,7 @@ VME SUBSYSTEM M: Martyn Welch <[email protected]> M: Manohar Vanga <[email protected]> M: Greg Kroah-Hartman <[email protected]> -L: [email protected] +L: [email protected] S: Maintained T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git F: Documentation/driver-api/vme.rst
Makefile +5 -3
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 25 +SUBLEVEL = 26 EXTRAVERSION = NAME = Dare mighty things
@@ -1249,15 +1249,17 @@ endef define filechk_version.h if [ $(SUBLEVEL) -gt 255 ]; then \ echo \#define LINUX_VERSION_CODE $(shell \ - expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \ + expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \ else \ echo \#define LINUX_VERSION_CODE $(shell \ - expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \ + expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \ fi; \ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + \ ((c) > 255 ? 255 : (c)))' endef +$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0) +$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0) $(version_h): FORCE $(call filechk,version.h) $(Q)rm -f $(old_version_h)
arch/mips/boot/compressed/Makefile +1 -0
@@ -36,6 +36,7 @@ KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ # Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. KCOV_INSTRUMENT := n +UBSAN_SANITIZE := n # decompressor objects (linked with vmlinuz) vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o
arch/powerpc/include/asm/cpu_has_feature.h +2 -2
@@ -7,7 +7,7 @@#include <linux/bug.h> #include <asm/cputable.h> -static inline bool early_cpu_has_feature (unsigned long feature) +static __always_inline bool early_cpu_has_feature(unsigned long feature) {return !!((CPU_FTRS_ALWAYS & feature) || (CPU_FTRS_POSSIBLE & cur_cpu_spec->cpu_features & feature));
@@ -46,7 +46,7 @@ static __always_inline bool cpu_has_feature(unsigned long feature)return static_branch_likely (&cpu_feature_keys[i]); }#else -static inline bool cpu_has_feature (unsigned long feature) +static __always_inline bool cpu_has_feature(unsigned long feature) {return early_cpu_has_feature (feature); }
arch/powerpc/lib/sstep.c +15 -1
@@ -1853,7 +1853,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, goto compute_done; } -return -1 ; + goto unknown_opcode;#ifdef __powerpc64__case 777 :/* modsd */ if (!cpu_has_feature (CPU_FTR_ARCH_300 ))
@@ -2909,6 +2909,20 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs, } +if (OP_IS_LOAD_STORE (op->type) && (op->type &UPDATE )) { +switch (GETTYPE (op->type)) { +case LOAD : +if (ra == rd) + goto unknown_opcode; + fallthrough; +case STORE : +case LOAD_FP : +case STORE_FP : +if (ra ==0 ) + goto unknown_opcode; + } + } +#ifdef CONFIG_VSX if ((GETTYPE(op->type) == LOAD_VSX || GETTYPE(op->type) == STORE_VSX) &&
arch/riscv/Kconfig +2 -2
@@ -84,7 +84,6 @@ config RISCV select PCI_MSI if PCI select RISCV_INTC select RISCV_TIMER if RISCV_SBI - select SPARSEMEM_STATIC if 32BIT select SPARSE_IRQ select SYSCTL_EXCEPTION_TRACE select THREAD_INFO_IN_TASK
@@ -145,7 +144,8 @@ config ARCH_FLATMEM_ENABLE config ARCH_SPARSEMEM_ENABLE def_bool y depends on MMU - select SPARSEMEM_VMEMMAP_ENABLE + select SPARSEMEM_STATIC if 32BIT && SPARSMEM + select SPARSEMEM_VMEMMAP_ENABLE if 64BIT config ARCH_SELECT_MEMORY_MODEL def_bool ARCH_SPARSEMEM_ENABLE
arch/riscv/include/asm/sbi.h +2 -2
@@ -51,10 +51,10 @@ enum sbi_ext_rfence_fid {SBI_EXT_RFENCE_REMOTE_FENCE_I =0 ,SBI_EXT_RFENCE_REMOTE_SFENCE_VMA ,SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID , -SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA ,SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA_VMID , -SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA , +SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA ,SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID , + SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA, }; enum sbi_ext_hsm_fid {
arch/s390/include/asm/pci.h +3 -3
@@ -201,8 +201,8 @@ extern unsigned int s390_pci_no_rid;Prototypes ----------------------------------------------------------------------------- */ /* Base stuff */ -int zpci_create_device (struct zpci_dev *); -void zpci_remove_device (struct zpci_dev *zdev); +int zpci_create_device (u32 fid,u32 fh,enum zpci_state state); +void zpci_remove_device (struct zpci_dev *zdev,bool set_error);int zpci_enable_device (struct zpci_dev *);int zpci_disable_device (struct zpci_dev *);int zpci_register_ioat (struct zpci_dev *,u8 ,u64 ,u64 ,u64 );
@@ -212,7 +212,7 @@ void zpci_remove_reserved_devices(void);/* CLP */ int clp_setup_writeback_mio (void );int clp_scan_pci_devices (void ); -int clp_add_pci_device (u32 ,u32 ,int ); +int clp_query_pci_fn (struct zpci_dev *zdev);int clp_enable_fh (struct zpci_dev *,u8 );int clp_disable_fh (struct zpci_dev *);int clp_get_state (u32 fid,enum zpci_state *state);
arch/s390/kernel/vtime.c +1 -1
@@ -217,7 +217,7 @@ void vtime_flush(struct task_struct *tsk) avg_steal = S390_lowcore.avg_steal_timer /2 ;if ((s64 ) steal >0 ) { S390_lowcore.steal_timer =0 ; -account_steal_time (steal); +account_steal_time (cputime_to_nsecs (steal)); avg_steal += steal; } S390_lowcore.avg_steal_timer = avg_steal;
arch/s390/pci/pci.c +65 -20
128 lines not on this page · raw message
arch/s390/pci/pci_clp.c +3 -37
@@ -181,7 +181,7 @@ static int clp_store_query_pci_fn(struct zpci_dev *zdev,return 0 ; } -static int clp_query_pci_fn (struct zpci_dev *zdev,u32 fh) +int clp_query_pci_fn (struct zpci_dev *zdev) {struct clp_req_rsp_query_pci *rrb;int rc;
@@ -194,7 +194,7 @@ static int clp_query_pci_fn(struct zpci_dev *zdev, u32 fh) rrb->request.hdr.len =sizeof (rrb->request); rrb->request.hdr.cmd =CLP_QUERY_PCI_FN ; rrb->response.hdr.len =sizeof (rrb->response); - rrb->request.fh = fh; + rrb->request.fh = zdev->fh; rc =clp_req (rrb,CLP_LPS_PCI );if (!rc && rrb->response.hdr.rsp ==CLP_RC_OK ) {
@@ -212,40 +212,6 @@ static int clp_query_pci_fn(struct zpci_dev *zdev, u32 fh)return rc; } -int clp_add_pci_device (u32 fid,u32 fh,int configured) -{ -struct zpci_dev *zdev; -int rc = -ENOMEM ; - -zpci_dbg (3 ,"add fid:%x, fh:%x, c:%d\n" , fid, fh, configured); - zdev =kzalloc (sizeof (*zdev),GFP_KERNEL ); -if (!zdev) - goto error; - - zdev->fh = fh; - zdev->fid = fid; - -/* Query function properties and update zdev */ - rc =clp_query_pci_fn (zdev, fh); -if (rc) - goto error; - -if (configured) - zdev->state =ZPCI_FN_STATE_CONFIGURED ; -else - zdev->state =ZPCI_FN_STATE_STANDBY ; - - rc =zpci_create_device (zdev); -if (rc) - goto error; -return 0 ; - -error: -zpci_dbg (0 ,"add fid:%x, rc:%d\n" , fid, rc); -kfree (zdev); -return rc; -} -static int clp_refresh_fh (u32 fid);/* * Enable/Disable a given PCI function and update its function handle if
@@ -408,7 +374,7 @@ static void __clp_add(struct clp_fh_list_entry *entry, void *data) zdev =get_zdev_by_fid (entry->fid);if (!zdev) -clp_add_pci_device (entry->fid, entry->fh, entry->config_state); +zpci_create_device (entry->fid, entry->fh, entry->config_state); }int clp_scan_pci_devices (void )
arch/s390/pci/pci_event.c +8 -14
@@ -76,20 +76,17 @@ void zpci_event_error(void *data)static void __zpci_event_availability (struct zpci_ccdf_avail *ccdf) {struct zpci_dev *zdev =get_zdev_by_fid (ccdf->fid); -struct pci_dev *pdev =NULL ;enum zpci_state state; +struct pci_dev *pdev;int ret; -if (zdev && zdev->zbus && zdev->zbus->bus) - pdev =pci_get_slot (zdev->zbus->bus, zdev->devfn); -zpci_err ("avail CCDF:\n" );zpci_err_hex (ccdf,sizeof (*ccdf));switch (ccdf->pec) {case 0x0301 :/* Reserved|Standby -> Configured */ if (!zdev) { - ret =clp_add_pci_device (ccdf->fid, ccdf->fh,1 ); +zpci_create_device (ccdf->fid, ccdf->fh,ZPCI_FN_STATE_CONFIGURED );break ; }/* the configuration request may be stale */
@@ -116,7 +113,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)break ;case 0x0302 :/* Reserved -> Standby */ if (!zdev) { -clp_add_pci_device (ccdf->fid, ccdf->fh,0 ); +zpci_create_device (ccdf->fid, ccdf->fh,ZPCI_FN_STATE_STANDBY );break ; } zdev->fh = ccdf->fh;
@@ -124,8 +121,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)case 0x0303 :/* Deconfiguration requested */ if (!zdev)break ; -if (pdev) -zpci_remove_device (zdev); +zpci_remove_device (zdev, false); ret =zpci_disable_device (zdev);if (ret)
@@ -140,12 +136,10 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)case 0x0304 :/* Configured -> Standby|Reserved */ if (!zdev)break ; -if (pdev) { -/* Give the driver a hint that the function is -* already unusable. */ - pdev->error_state = pci_channel_io_perm_failure; -zpci_remove_device (zdev); - } +/* Give the driver a hint that the function is +* already unusable. +*/ +zpci_remove_device (zdev, true); zdev->fh = ccdf->fh;zpci_disable_device (zdev);
arch/x86/events/intel/core.c +3 -0
@@ -3562,6 +3562,9 @@ static int intel_pmu_hw_config(struct perf_event *event)return ret;if (event->attr.precise_ip) { +if ((event->attr.config &INTEL_ARCH_EVENT_MASK ) ==INTEL_FIXED_VLBR_EVENT ) +return -EINVAL ; +if (!(event->attr.freq || (event->attr.wakeup_events && !event->attr.watermark))) { event->hw.flags |=PERF_X86_EVENT_AUTO_RELOAD ; if (!(event->attr.sample_type &
arch/x86/events/intel/ds.c +1 -1
@@ -1894,7 +1894,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs, struct perf_sample_d*/ if (!pebs_status && cpuc->pebs_enabled && !(cpuc->pebs_enabled & (cpuc->pebs_enabled-1 ))) - pebs_status = cpuc->pebs_enabled; + pebs_status = p->status = cpuc->pebs_enabled; bit =find_first_bit ((unsigned long *)&pebs_status, x86_pmu.max_pebs_events);
arch/x86/include/asm/processor.h +0 -9
@@ -552,15 +552,6 @@ static inline void arch_thread_struct_whitelist(unsigned long *offset, *size = fpu_kernel_xstate_size; } -/* -* Thread-synchronous status. -* -* This is different from the flags in that nobody else -* ever touches our thread-synchronous status, so we don't -* have to worry about atomic accesses. -*/ -#define TS_COMPAT 0x0002/* 32bit syscall active (64BIT)*/ -static inline void native_load_sp0 (unsigned long sp0) {
arch/x86/include/asm/thread_info.h +22 -1
@@ -216,10 +216,31 @@ static inline int arch_within_stack_frames(const void * const stack,#endif +/* +* Thread-synchronous status. +* +* This is different from the flags in that nobody else +* ever touches our thread-synchronous status, so we don't +* have to worry about atomic accesses. +*/ +#define TS_COMPAT 0x0002/* 32bit syscall active (64BIT)*/ + +#ifndef __ASSEMBLY__#ifdef CONFIG_COMPAT #define TS_I386_REGS_POKED 0x0004/* regs poked by 32-bit ptracer */ +#define TS_COMPAT_RESTART 0x0008 + +#define arch_set_restart_data arch_set_restart_data + +static inline void arch_set_restart_data (struct restart_block *restart) +{ +struct thread_info *ti =current_thread_info (); +if (ti->status &TS_COMPAT ) + ti->status |=TS_COMPAT_RESTART ; +else + ti->status &= ~TS_COMPAT_RESTART ; +}#endif -#ifndef __ASSEMBLY__#ifdef CONFIG_X86_32 #define in_ia32_syscall () true
arch/x86/kernel/apic/apic.c +5 -0
@@ -2317,6 +2317,11 @@ static int cpuid_to_apicid[] = { [0 ... NR_CPUS - 1] = -1, }; +bool arch_match_cpu_phys_id (int cpu,u64 phys_id) +{ +return phys_id == cpuid_to_apicid[cpu]; +} +#ifdef CONFIG_SMP /** * apic_id_is_primary_thread - Check whether APIC ID belongs to a primary thread
arch/x86/kernel/apic/io_apic.c +10 -0
@@ -1033,6 +1033,16 @@ static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin,if (idx >=0 &&test_bit (mp_irqs[idx].srcbus, mp_bus_not_pci)) { irq = mp_irqs[idx].srcbusirq; legacy =mp_is_legacy_irq (irq); +/* +* IRQ2 is unusable for historical reasons on systems which +* have a legacy PIC. See the comment vs. IRQ2 further down. +* +* If this gets removed at some point then the related code +* in lapic_assign_system_vectors() needs to be adjusted as +* well. +*/ +if (legacy && irq ==PIC_CASCADE_IR ) +return -EINVAL ; }mutex_lock (&ioapic_mutex);
arch/x86/kernel/signal.c +1 -23
@@ -766,30 +766,8 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)static inline unsigned long get_nr_restart_syscall (const struct pt_regs *regs) { -/* -* This function is fundamentally broken as currently -* implemented. -* -* The idea is that we want to trigger a call to the -* restart_block() syscall and that we want in_ia32_syscall(), -* in_x32_syscall(), etc. to match whatever they were in the -* syscall being restarted. We assume that the syscall -* instruction at (regs->ip - 2) matches whatever syscall -* instruction we used to enter in the first place. -* -* The problem is that we can get here when ptrace pokes -* syscall-like values into regs even if we're not in a syscall -* at all. -* -* For now, we maintain historical behavior and guess based on -* stored state. We could do better by saving the actual -* syscall arch in restart_block or (with caveats on x32) by -* checking if regs->ip points to 'int $0x80'. The current -* behavior is incorrect if a tracer has a different bitness -* than the tracee. -*/ #ifdef CONFIG_IA32_EMULATION -if (current_thread_info ()->status & (TS_COMPAT |TS_I386_REGS_POKED )) +if (current_thread_info ()->status &TS_COMPAT_RESTART )return __NR_ia32_restart_syscall;#endif #ifdef CONFIG_X86_X32_ABI
drivers/base/power/runtime.c +25 -37
83 lines not on this page · raw message
drivers/counter/stm32-timer-cnt.c +33 -22
149 lines not on this page · raw message
drivers/firmware/efi/efi.c +2 -1
@@ -927,7 +927,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size) }/* first try to find a slot in an existing linked list entry */ -for (prsv = efi_memreserve_root->next; prsv; prsv = rsv->next) { +for (prsv = efi_memreserve_root->next; prsv; ) { rsv =memremap (prsv,sizeof (*rsv),MEMREMAP_WB ); index =atomic_fetch_add_unless (&rsv->count,1 , rsv->size);if (index < rsv->size) {
@@ -937,6 +937,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)memunmap (rsv);return efi_mem_reserve_iomem (addr, size); } + prsv = rsv->next;memunmap (rsv); }
drivers/firmware/efi/vars.c +4 -0
@@ -484,6 +484,10 @@ int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), } } +break ; +case EFI_UNSUPPORTED : + err = -EOPNOTSUPP ; + status =EFI_NOT_FOUND ;break ;case EFI_NOT_FOUND :break ;
drivers/gpio/gpiolib.c +7 -0
@@ -572,6 +572,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,struct lock_class_key *lock_key, struct lock_class_key *request_key) { + struct fwnode_handle *fwnode = gc->parent ? dev_fwnode(gc->parent) : NULL;unsigned long flags;int ret =0 ;unsigned i;
@@ -601,6 +602,12 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data, gc->of_node = gdev->dev.of_node;#endif +/* +* Assign fwnode depending on the result of the previous calls, +* if none of them succeed, assign it to the parent's one. +*/ + gdev->dev.fwnode =dev_fwnode (&gdev->dev) ?: fwnode; + gdev->id =ida_alloc (&gpio_ida,GFP_KERNEL );if (gdev->id <0 ) { ret = gdev->id;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +31 -1
@@ -1902,6 +1902,33 @@ static void dm_gpureset_commit_state(struct dc_state *dc_state,return ; } +static void dm_set_dpms_off (struct dc_link *link) +{ +struct dc_stream_state *stream_state; +struct amdgpu_dm_connector *aconnector = link->priv; +struct amdgpu_device *adev =drm_to_adev (aconnector->base.dev); +struct dc_stream_update stream_update; +bool dpms_off = true; + +memset (&stream_update,0 ,sizeof (stream_update)); + stream_update.dpms_off = &dpms_off; + +mutex_lock (&adev->dm.dc_lock); + stream_state =dc_stream_find_from_link (link); + +if (stream_state ==NULL ) { +DRM_DEBUG_DRIVER ("Error finding stream state associated with link!\n" ); +mutex_unlock (&adev->dm.dc_lock); +return ; + } + + stream_update.stream = stream_state; +dc_commit_updates_for_stream (stream_state->ctx->dc,NULL ,0 , + stream_state, &stream_update, + stream_state->ctx->dc->current_state); +mutex_unlock (&adev->dm.dc_lock); +} +static int dm_resume (void *handle) {struct amdgpu_device *adev = handle;
@@ -2353,8 +2380,11 @@ static void handle_hpd_irq(void *param)drm_kms_helper_hotplug_event (dev); }else if (dc_link_detect (aconnector->dc_link,DETECT_REASON_HPD )) { -amdgpu_dm_update_connector_after_detect (aconnector); +if (new_connection_type == dc_connection_none && + aconnector->dc_link->type == dc_connection_none) +dm_set_dpms_off (aconnector->dc_link); +amdgpu_dm_update_connector_after_detect (aconnector);drm_modeset_lock_all (dev);dm_restore_drm_connector_state (dev, connector);
drivers/gpu/drm/amd/display/dc/core/dc.c +13 -0
@@ -2767,6 +2767,19 @@ struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i)return NULL ; } +struct dc_stream_state *dc_stream_find_from_link (const struct dc_link *link) +{ +uint8_t i; +struct dc_context *ctx = link->ctx; + +for (i =0 ; i < ctx->dc->current_state->stream_count; i++) { +if (ctx->dc->current_state->streams[i]->link == link) +return ctx->dc->current_state->streams[i]; + } + +return NULL ; +} + enum dc_irq_source dc_interrupt_to_irq_source( struct dc *dc, uint32_t src_id,
drivers/gpu/drm/amd/display/dc/dc_stream.h +1 -0
@@ -297,6 +297,7 @@ void dc_stream_log(const struct dc *dc, const struct dc_stream_state *stream);uint8_t dc_get_current_stream_count (struct dc *dc);struct dc_stream_state *dc_get_stream_at_index (struct dc *dc,uint8_t i); +struct dc_stream_state *dc_stream_find_from_link (const struct dc_link *link);/* * Return the current frame counter.
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c +18 -8
@@ -113,6 +113,7 @@ bool cm3_helper_translate_curve_to_hw_format(struct pwl_result_data *rgb_resulted;struct pwl_result_data *rgb;struct pwl_result_data *rgb_plus_1; +struct pwl_result_data *rgb_minus_1;struct fixed31_32 end_value;int32_t region_start, region_end;
@@ -140,7 +141,7 @@ bool cm3_helper_translate_curve_to_hw_format( region_start = -MAX_LOW_POINT ; region_end =NUMBER_REGIONS -MAX_LOW_POINT ; }else { -/* 10 segments +/* 11 segments * segment is from 2^-10 to 2^0 * There are less than 256 points, for optimization */
@@ -154,9 +155,10 @@ bool cm3_helper_translate_curve_to_hw_format( seg_distr[7 ] =4 ; seg_distr[8 ] =4 ; seg_distr[9 ] =4 ; + seg_distr[10 ] =1 ; region_start =-10 ; - region_end =0 ; + region_end =1 ; }for (i = region_end - region_start; i <MAX_REGIONS_NUMBER ; i++)
@@ -189,6 +191,10 @@ bool cm3_helper_translate_curve_to_hw_format( rgb_resulted[hw_points -1 ].green = output_tf->tf_pts.green[start_index]; rgb_resulted[hw_points -1 ].blue = output_tf->tf_pts.blue[start_index]; + rgb_resulted[hw_points].red = rgb_resulted[hw_points -1 ].red; + rgb_resulted[hw_points].green = rgb_resulted[hw_points -1 ].green; + rgb_resulted[hw_points].blue = rgb_resulted[hw_points -1 ].blue; +// All 3 color channels have same x corner_points[0 ].red.x =dc_fixpt_pow (dc_fixpt_from_int (2 ),dc_fixpt_from_int (region_start));
@@ -259,15 +265,18 @@ bool cm3_helper_translate_curve_to_hw_format( rgb = rgb_resulted; rgb_plus_1 = rgb_resulted +1 ; + rgb_minus_1 = rgb; i =1 ;while (i != hw_points +1 ) { -if (dc_fixpt_lt (rgb_plus_1->red, rgb->red)) - rgb_plus_1->red = rgb->red; -if (dc_fixpt_lt (rgb_plus_1->green, rgb->green)) - rgb_plus_1->green = rgb->green; -if (dc_fixpt_lt (rgb_plus_1->blue, rgb->blue)) - rgb_plus_1->blue = rgb->blue; +if (i >= hw_points -1 ) { +if (dc_fixpt_lt (rgb_plus_1->red, rgb->red)) + rgb_plus_1->red =dc_fixpt_add (rgb->red, rgb_minus_1->delta_red); +if (dc_fixpt_lt (rgb_plus_1->green, rgb->green)) + rgb_plus_1->green =dc_fixpt_add (rgb->green, rgb_minus_1->delta_green); +if (dc_fixpt_lt (rgb_plus_1->blue, rgb->blue)) + rgb_plus_1->blue =dc_fixpt_add (rgb->blue, rgb_minus_1->delta_blue); + } rgb->delta_red =dc_fixpt_sub (rgb_plus_1->red, rgb->red); rgb->delta_green =dc_fixpt_sub (rgb_plus_1->green, rgb->green);
@@ -283,6 +292,7 @@ bool cm3_helper_translate_curve_to_hw_format( } ++rgb_plus_1; + rgb_minus_1 = rgb; ++rgb; ++i; }
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c +67 -0
79 lines not on this page · raw message
drivers/gpu/drm/i915/i915_perf.c +5 -8
@@ -600,7 +600,6 @@ static int append_oa_sample(struct i915_perf_stream *stream, {int report_size = stream->oa_buffer.format_size;struct drm_i915_perf_record_header header; -u32 sample_flags = stream->sample_flags; header.type =DRM_I915_PERF_RECORD_SAMPLE ; header.pad =0 ;
@@ -614,10 +613,8 @@ static int append_oa_sample(struct i915_perf_stream *stream,return -EFAULT ; buf +=sizeof (header); -if (sample_flags &SAMPLE_OA_REPORT ) { -if (copy_to_user (buf, report, report_size)) -return -EFAULT ; - } +if (copy_to_user (buf, report, report_size)) +return -EFAULT ; (*offset) += header.size;
@@ -2676,7 +2673,7 @@ static void i915_oa_stream_enable(struct i915_perf_stream *stream) stream->perf->ops.oa_enable (stream); -if (stream->periodic) +if (stream->sample_flags &SAMPLE_OA_REPORT )hrtimer_start (&stream->poll_check_timer,ns_to_ktime (stream->poll_oa_period),HRTIMER_MODE_REL_PINNED );
@@ -2739,7 +2736,7 @@ static void i915_oa_stream_disable(struct i915_perf_stream *stream) { stream->perf->ops.oa_disable (stream); -if (stream->periodic) +if (stream->sample_flags &SAMPLE_OA_REPORT )hrtimer_cancel (&stream->poll_check_timer); }
@@ -3022,7 +3019,7 @@ static ssize_t i915_perf_read(struct file *file,* disabled stream as an error. In particular it might otherwise lead * to a deadlock for blocking file descriptors... */ -if (!stream->enabled) +if (!stream->enabled || !(stream->sample_flags &SAMPLE_OA_REPORT ))return -EIO ;if (!(file->f_flags &O_NONBLOCK )) {
drivers/iio/adc/Kconfig +3 -0
@@ -266,6 +266,8 @@ config ADI_AXI_ADC select IIO_BUFFER select IIO_BUFFER_HW_CONSUMER select IIO_BUFFER_DMAENGINE + depends on HAS_IOMEM + depends on OF help Say yes here to build support for Analog Devices Generic AXI ADC IP core. The IP core is used for interfacing with
@@ -912,6 +914,7 @@ config STM32_ADC_CORE depends on ARCH_STM32 || COMPILE_TEST depends on OF depends on REGULATOR + depends on HAS_IOMEM select IIO_BUFFER select MFD_STM32_TIMERS select IIO_STM32_TIMER_TRIGGER
drivers/iio/adc/ab8500-gpadc.c +1 -1
@@ -918,7 +918,7 @@ static int ab8500_gpadc_read_raw(struct iio_dev *indio_dev,return processed;/* Return millivolt or milliamps or millicentigrades */ - *val = processed *1000 ; + *val = processed;return IIO_VAL_INT ; }
drivers/iio/adc/ad7949.c +1 -1
@@ -91,7 +91,7 @@ static int ad7949_spi_read_channel(struct ad7949_adc_chip *ad7949_adc, int *val,int ret;int i;int bits_per_word = ad7949_adc->resolution; -int mask =GENMASK (ad7949_adc->resolution,0 ); +int mask =GENMASK (ad7949_adc->resolution -1 ,0 );struct spi_message msg;struct spi_transfer tx[] = { {
drivers/iio/adc/qcom-spmi-vadc.c +1 -1
@@ -598,7 +598,7 @@ static const struct vadc_channels vadc_chans[] = { VADC_CHAN_NO_SCALE(P_MUX16_1_3, 1) VADC_CHAN_NO_SCALE(LR_MUX1_BAT_THERM, 0) - VADC_CHAN_NO_SCALE(LR_MUX2_BAT_ID, 0) + VADC_CHAN_VOLT(LR_MUX2_BAT_ID, 0, SCALE_DEFAULT) VADC_CHAN_NO_SCALE(LR_MUX3_XO_THERM, 0) VADC_CHAN_NO_SCALE(LR_MUX4_AMUX_THM1, 0)VADC_CHAN_NO_SCALE (LR_MUX5_AMUX_THM2 ,0 )
drivers/iio/gyro/mpu3050-core.c +2 -0
@@ -550,6 +550,8 @@ static irqreturn_t mpu3050_trigger_handler(int irq, void *p)MPU3050_FIFO_R , &fifo_values[offset], toread); +if (ret) + goto out_trigger_unlock; dev_dbg(mpu3050->dev, "%04x %04x %04x %04x %04x\n",
drivers/iio/humidity/hid-sensor-humidity.c +7 -5
@@ -15,7 +15,10 @@struct hid_humidity_state {struct hid_sensor_common common_attributes;struct hid_sensor_hub_attribute_info humidity_attr; -s32 humidity_data; +struct { +s32 humidity_data; +u64 timestamp__aligned(8) ; + } scan;int scale_pre_decml;int scale_post_decml;int scale_precision;
@@ -125,9 +128,8 @@ static int humidity_proc_event(struct hid_sensor_hub_device *hsdev,struct hid_humidity_state *humid_st =iio_priv (indio_dev);if (atomic_read (&humid_st->common_attributes.data_ready)) -iio_push_to_buffers_with_timestamp (indio_dev, - &humid_st->humidity_data, -iio_get_time_ns (indio_dev)); +iio_push_to_buffers_with_timestamp (indio_dev, &humid_st->scan, +iio_get_time_ns (indio_dev));return 0 ; }
@@ -142,7 +144,7 @@ static int humidity_capture_sample(struct hid_sensor_hub_device *hsdev,switch (usage_id) {case HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY : - humid_st->humidity_data = *(s32 *)raw_data; + humid_st->scan.humidity_data = *(s32 *)raw_data;return 0 ;default :
drivers/iio/imu/adis16400.c +1 -2
@@ -462,8 +462,7 @@ static int adis16400_initial_setup(struct iio_dev *indio_dev)if (ret) goto err_ret; - ret =sscanf (indio_dev->name,"adis%u\n" , &device_id); -if (ret !=1 ) { +if (sscanf (indio_dev->name,"adis%u\n" , &device_id) !=1 ) { ret = -EINVAL ; goto err_ret; }
drivers/iio/light/hid-sensor-prox.c +11 -2
@@ -23,6 +23,9 @@ struct prox_state {struct hid_sensor_common common_attributes;struct hid_sensor_hub_attribute_info prox_attr;u32 human_presence; +int scale_pre_decml; +int scale_post_decml; +int scale_precision; };/* Channel definitions */
@@ -93,8 +96,9 @@ static int prox_read_raw(struct iio_dev *indio_dev, ret_type =IIO_VAL_INT ;break ;case IIO_CHAN_INFO_SCALE : - *val = prox_state->prox_attr.units; - ret_type =IIO_VAL_INT ; + *val = prox_state->scale_pre_decml; + *val2 = prox_state->scale_post_decml; + ret_type = prox_state->scale_precision;break ;case IIO_CHAN_INFO_OFFSET : *val = hid_sensor_convert_exponent(
@@ -234,6 +238,11 @@ static int prox_parse_report(struct platform_device *pdev,HID_USAGE_SENSOR_HUMAN_PRESENCE , &st->common_attributes.sensitivity); + st->scale_precision =hid_sensor_format_scale ( + hsdev->usage, + &st->prox_attr, + &st->scale_pre_decml, &st->scale_post_decml); +return ret; }
drivers/iio/temperature/hid-sensor-temperature.c +8 -6
@@ -15,7 +15,10 @@struct temperature_state {struct hid_sensor_common common_attributes;struct hid_sensor_hub_attribute_info temperature_attr; -s32 temperature_data; +struct { +s32 temperature_data; +u64 timestamp__aligned(8) ; + } scan;int scale_pre_decml;int scale_post_decml;int scale_precision;
@@ -32,7 +35,7 @@ static const struct iio_chan_spec temperature_channels[] = { BIT(IIO_CHAN_INFO_SAMP_FREQ) | BIT(IIO_CHAN_INFO_HYSTERESIS), }, - IIO_CHAN_SOFT_TIMESTAMP(3), + IIO_CHAN_SOFT_TIMESTAMP(1), };/* Adjust channel real bits based on report descriptor */
@@ -123,9 +126,8 @@ static int temperature_proc_event(struct hid_sensor_hub_device *hsdev,struct temperature_state *temp_st =iio_priv (indio_dev);if (atomic_read (&temp_st->common_attributes.data_ready)) -iio_push_to_buffers_with_timestamp (indio_dev, - &temp_st->temperature_data, -iio_get_time_ns (indio_dev)); +iio_push_to_buffers_with_timestamp (indio_dev, &temp_st->scan, +iio_get_time_ns (indio_dev));return 0 ; }
@@ -140,7 +142,7 @@ static int temperature_capture_sample(struct hid_sensor_hub_device *hsdev,switch (usage_id) {case HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE : - temp_st->temperature_data = *(s32 *)raw_data; + temp_st->scan.temperature_data = *(s32 *)raw_data;return 0 ;default :return -EINVAL ;
drivers/infiniband/hw/mlx5/qp.c +20 -6
@@ -2458,8 +2458,6 @@ static int check_qp_type(struct mlx5_ib_dev *dev, struct ib_qp_init_attr *attr,case MLX5_IB_QPT_HW_GSI :case IB_QPT_DRIVER :case IB_QPT_GSI : -if (dev->profile == &raw_eth_profile) - goto out;case IB_QPT_RAW_PACKET :case IB_QPT_UD :case MLX5_IB_QPT_REG_UMR :
@@ -2654,10 +2652,6 @@ static int process_create_flags(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,int create_flags = attr->create_flags;bool cond; -if (qp->type ==IB_QPT_UD && dev->profile == &raw_eth_profile) -if (create_flags & ~MLX5_IB_QP_CREATE_WC_TEST ) -return -EINVAL ; -if (qp_type ==MLX5_IB_QPT_DCT )return (create_flags) ? -EINVAL :0 ;
@@ -4235,6 +4229,23 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr,return 0 ; } +static bool mlx5_ib_modify_qp_allowed (struct mlx5_ib_dev *dev, +struct mlx5_ib_qp *qp, +enum ib_qp_type qp_type) +{ +if (dev->profile != &raw_eth_profile) +return true; + +if (qp_type ==IB_QPT_RAW_PACKET || qp_type ==MLX5_IB_QPT_REG_UMR ) +return true; + +/* Internal QP used for wc testing, with NOPs in wq */ +if (qp->flags &MLX5_IB_QP_CREATE_WC_TEST ) +return true; + +return false; +} +int mlx5_ib_modify_qp (struct ib_qp *ibqp,struct ib_qp_attr *attr,int attr_mask,struct ib_udata *udata) {
@@ -4247,6 +4258,9 @@ int mlx5_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,int err = -EINVAL ;int port; +if (!mlx5_ib_modify_qp_allowed (dev, qp, ibqp->qp_type)) +return -EOPNOTSUPP ; +if (ibqp->rwq_ind_tbl)return -ENOSYS ;
drivers/infiniband/ulp/rtrs/rtrs-clt.c +6 -8
@@ -1237,8 +1237,7 @@ static void free_sess_reqs(struct rtrs_clt_sess *sess)if (req->mr)ib_dereg_mr (req->mr);kfree (req->sge); -rtrs_iu_free (req->iu,DMA_TO_DEVICE , - sess->s.dev->ib_dev,1 ); +rtrs_iu_free (req->iu, sess->s.dev->ib_dev,1 ); }kfree (sess->reqs); sess->reqs =NULL ;
@@ -1611,8 +1610,7 @@ static void destroy_con_cq_qp(struct rtrs_clt_con *con)rtrs_cq_qp_destroy (&con->c);if (con->rsp_ius) { -rtrs_iu_free (con->rsp_ius,DMA_FROM_DEVICE , - sess->s.dev->ib_dev, con->queue_size); +rtrs_iu_free (con->rsp_ius, sess->s.dev->ib_dev, con->queue_size); con->rsp_ius =NULL ; con->queue_size =0 ; }
@@ -2252,7 +2250,7 @@ static void rtrs_clt_info_req_done(struct ib_cq *cq, struct ib_wc *wc)struct rtrs_iu *iu; iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe); -rtrs_iu_free (iu,DMA_TO_DEVICE , sess->s.dev->ib_dev,1 ); +rtrs_iu_free (iu, sess->s.dev->ib_dev,1 );if (unlikely (wc->status !=IB_WC_SUCCESS )) { rtrs_err(sess->clt, "Sess info request send failed: %s\n",
@@ -2381,7 +2379,7 @@ static void rtrs_clt_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc) out:rtrs_clt_update_wc_stats (con); -rtrs_iu_free (iu,DMA_FROM_DEVICE , sess->s.dev->ib_dev,1 ); +rtrs_iu_free (iu, sess->s.dev->ib_dev,1 );rtrs_clt_change_state (sess, state); }
@@ -2443,9 +2441,9 @@ static int rtrs_send_sess_info(struct rtrs_clt_sess *sess) out:if (tx_iu) -rtrs_iu_free (tx_iu,DMA_TO_DEVICE , sess->s.dev->ib_dev,1 ); +rtrs_iu_free (tx_iu, sess->s.dev->ib_dev,1 );if (rx_iu) -rtrs_iu_free (rx_iu,DMA_FROM_DEVICE , sess->s.dev->ib_dev,1 ); +rtrs_iu_free (rx_iu, sess->s.dev->ib_dev,1 );if (unlikely (err))/* If we've never taken async path because of malloc problems */ rtrs_clt_change_state (sess,RTRS_CLT_CONNECTING_ERR );
drivers/infiniband/ulp/rtrs/rtrs-pri.h +1 -2
@@ -289,8 +289,7 @@ struct rtrs_msg_rdma_hdr {struct rtrs_iu *rtrs_iu_alloc (u32 queue_size,size_t size,gfp_t t,struct ib_device *dev,enum dma_data_direction ,void (*done)(struct ib_cq *cq,struct ib_wc *wc)); -void rtrs_iu_free (struct rtrs_iu *iu,enum dma_data_direction dir, -struct ib_device *dev,u32 queue_size); +void rtrs_iu_free (struct rtrs_iu *iu,struct ib_device *dev,u32 queue_size);int rtrs_iu_post_recv (struct rtrs_con *con,struct rtrs_iu *iu);int rtrs_iu_post_send (struct rtrs_con *con,struct rtrs_iu *iu,size_t size,struct ib_send_wr *head);
drivers/infiniband/ulp/rtrs/rtrs-srv.c +7 -10
@@ -584,8 +584,7 @@ static void unmap_cont_bufs(struct rtrs_srv_sess *sess)struct rtrs_srv_mr *srv_mr; srv_mr = &sess->mrs[i]; -rtrs_iu_free (srv_mr->iu,DMA_TO_DEVICE , - sess->s.dev->ib_dev,1 ); +rtrs_iu_free (srv_mr->iu, sess->s.dev->ib_dev,1 );ib_dereg_mr (srv_mr->mr);ib_dma_unmap_sg (sess->s.dev->ib_dev, srv_mr->sgt.sgl, srv_mr->sgt.nents,DMA_BIDIRECTIONAL );
@@ -672,7 +671,7 @@ static int map_cont_bufs(struct rtrs_srv_sess *sess)if (!srv_mr->iu) { err = -ENOMEM ;rtrs_err (ss,"rtrs_iu_alloc(), err: %d\n" , err); - goto free_iu; + goto dereg_mr; } }/* Eventually dma addr for each chunk can be cached */
@@ -688,9 +687,7 @@ static int map_cont_bufs(struct rtrs_srv_sess *sess) srv_mr = &sess->mrs[mri]; sgt = &srv_mr->sgt; mr = srv_mr->mr; -free_iu: -rtrs_iu_free (srv_mr->iu,DMA_TO_DEVICE , - sess->s.dev->ib_dev,1 ); +rtrs_iu_free (srv_mr->iu, sess->s.dev->ib_dev,1 ); dereg_mr:ib_dereg_mr (mr); unmap_sg:
@@ -742,7 +739,7 @@ static void rtrs_srv_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc)struct rtrs_iu *iu; iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe); -rtrs_iu_free (iu,DMA_TO_DEVICE , sess->s.dev->ib_dev,1 ); +rtrs_iu_free (iu, sess->s.dev->ib_dev,1 );if (unlikely (wc->status !=IB_WC_SUCCESS )) { rtrs_err(s, "Sess info response send failed: %s\n",
@@ -868,7 +865,7 @@ static int process_info_req(struct rtrs_srv_con *con,if (unlikely (err)) {rtrs_err (s,"rtrs_iu_post_send(), err: %d\n" , err); iu_free: -rtrs_iu_free (tx_iu,DMA_TO_DEVICE , sess->s.dev->ib_dev,1 ); +rtrs_iu_free (tx_iu, sess->s.dev->ib_dev,1 ); } rwr_free:kfree (rwr);
@@ -913,7 +910,7 @@ static void rtrs_srv_info_req_done(struct ib_cq *cq, struct ib_wc *wc) goto close; out: -rtrs_iu_free (iu,DMA_FROM_DEVICE , sess->s.dev->ib_dev,1 ); +rtrs_iu_free (iu, sess->s.dev->ib_dev,1 );return ; close:close_sess (sess);
@@ -936,7 +933,7 @@ static int post_recv_info_req(struct rtrs_srv_con *con) err =rtrs_iu_post_recv (&con->c, rx_iu);if (unlikely (err)) {rtrs_err (s,"rtrs_iu_post_recv(), err: %d\n" , err); -rtrs_iu_free (rx_iu,DMA_FROM_DEVICE , sess->s.dev->ib_dev,1 ); +rtrs_iu_free (rx_iu, sess->s.dev->ib_dev,1 );return err; }
drivers/infiniband/ulp/rtrs/rtrs.c +29 -44
125 lines not on this page · raw message
drivers/net/bonding/bond_main.c +6 -2
@@ -3918,11 +3918,15 @@ static int bond_neigh_init(struct neighbour *n)rcu_read_lock (); slave =bond_first_slave_rcu (bond); -if (!slave) +if (!slave) { + ret = -EINVAL ; goto out; + } slave_ops = slave->dev->netdev_ops; -if (!slave_ops->ndo_neigh_setup) +if (!slave_ops->ndo_neigh_setup) { + ret = -EINVAL ; goto out; + }/* TODO: find another way [1] to implement this. * Passing a zeroed structure is fragile,
drivers/net/ethernet/ibm/ibmvnic.c +42 -10
132 lines not on this page · raw message
drivers/net/ethernet/ibm/ibmvnic.h +4 -1
@@ -1080,6 +1080,7 @@ struct ibmvnic_adapter {struct tasklet_struct tasklet;enum vnic_state state;enum ibmvnic_reset_reason reset_reason; +/* when taking both state and rwi locks, take state lock first */ spinlock_t rwi_lock;struct list_head rwi_list;struct work_struct ibmvnic_reset;
@@ -1096,6 +1097,8 @@ struct ibmvnic_adapter {struct ibmvnic_tunables desired;struct ibmvnic_tunables fallback; -/* Used for serializatin of state field */ +/* Used for serialization of state field. When taking both state +* and rwi locks, take state lock first. +*/ spinlock_t state_lock; };
drivers/net/ethernet/intel/i40e/i40e_main.c +6 -6
@@ -5920,7 +5920,7 @@ static int i40e_add_channel(struct i40e_pf *pf, u16 uplink_seid, ch->enabled_tc = !i40e_is_channel_macvlan (ch) && enabled_tc; ch->seid = ctxt.seid; ch->vsi_number = ctxt.vsi_number; - ch->stat_counter_idx =cpu_to_le16 (ctxt.info.stat_counter_idx); + ch->stat_counter_idx =le16_to_cpu (ctxt.info.stat_counter_idx);/* copy just the sections touched not the entire info * since not all sections are valid as returned by
@@ -7599,8 +7599,8 @@ static inline void i40e_set_cld_element(struct i40e_cloud_filter *filter, struct i40e_aqc_cloud_filters_element_data *cld) { - int i, j; u32 ipa; +int i;memset (cld,0 ,sizeof (*cld));ether_addr_copy (cld->outer_mac, filter->dst_mac);
@@ -7611,14 +7611,14 @@ i40e_set_cld_element(struct i40e_cloud_filter *filter,if (filter->n_proto ==ETH_P_IPV6 ) {#define IPV6_MAX_INDEX (ARRAY_SIZE(filter->dst_ipv6) - 1) -for (i =0 , j =0 ; i <ARRAY_SIZE (filter->dst_ipv6); - i++, j +=2 ) { +for (i =0 ; i <ARRAY_SIZE (filter->dst_ipv6); i++) { ipa =be32_to_cpu (filter->dst_ipv6[IPV6_MAX_INDEX - i]); - ipa =cpu_to_le32 (ipa); -memcpy (&cld->ipaddr.raw_v6.data[j], &ipa,sizeof (ipa)); + + *(__le32 *)&cld->ipaddr.raw_v6.data[i *2 ] =cpu_to_le32 (ipa); } }else { ipa =be32_to_cpu (filter->dst_ipv4); +memcpy (&cld->ipaddr.v4.data, &ipa,sizeof (ipa)); }
drivers/net/ethernet/intel/i40e/i40e_txrx.c +1 -1
@@ -1782,7 +1782,7 @@ void i40e_process_skb_fields(struct i40e_ring *rx_ring,skb_record_rx_queue (skb, rx_ring->queue_index);if (qword &BIT (I40E_RX_DESC_STATUS_L2TAG1P_SHIFT )) { -u16 vlan_tag = rx_desc->wb.qword0.lo_dword.l2tag1; +__le16 vlan_tag = rx_desc->wb.qword0.lo_dword.l2tag1;__vlan_hwaccel_put_tag (skb,htons (ETH_P_8021Q ),le16_to_cpu (vlan_tag));
drivers/net/phy/micrel.c +1 -0
@@ -1263,6 +1263,7 @@ static struct phy_driver ksphy_driver[] = { .probe = kszphy_probe, .config_init = ksz8081_config_init, .ack_interrupt = kszphy_ack_interrupt, + .soft_reset = genphy_soft_reset, .config_intr = kszphy_config_intr, .get_sset_count = kszphy_get_sset_count, .get_strings = kszphy_get_strings,
drivers/net/wireless/intel/iwlwifi/cfg/22000.c +11 -0
@@ -92,6 +92,7 @@#define IWL_SNJ_A_HR_B_FW_PRE "iwlwifi-SoSnj-a0-hr-b0-"#define IWL_MA_A_GF_A_FW_PRE "iwlwifi-ma-a0-gf-a0-"#define IWL_MA_A_MR_A_FW_PRE "iwlwifi-ma-a0-mr-a0-" +#define IWL_SNJ_A_MR_A_FW_PRE "iwlwifi-SoSnj-a0-mr-a0-"#define IWL_QU_B_HR_B_MODULE_FIRMWARE (api) \ IWL_QU_B_HR_B_FW_PRE __stringify(api) ".ucode"
@@ -127,6 +128,8 @@ IWL_MA_A_GF_A_FW_PRE __stringify(api) ".ucode"#define IWL_MA_A_MR_A_FW_MODULE_FIRMWARE (api) \ IWL_MA_A_MR_A_FW_PRE __stringify(api) ".ucode" +#define IWL_SNJ_A_MR_A_MODULE_FIRMWARE (api) \ + IWL_SNJ_A_MR_A_FW_PRE __stringify(api) ".ucode"static const struct iwl_base_params iwl_22000_base_params = { .eeprom_size =OTP_LOW_IMAGE_SIZE_32K ,
@@ -672,6 +675,13 @@ const struct iwl_cfg iwl_cfg_ma_a0_mr_a0 = { .num_rbds = IWL_NUM_RBDS_AX210_HE, }; +const struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = { + .fw_name_pre =IWL_SNJ_A_MR_A_FW_PRE , + .uhb_supported = true, +IWL_DEVICE_AX210 , + .num_rbds =IWL_NUM_RBDS_AX210_HE , +}; +MODULE_FIRMWARE (IWL_QU_B_HR_B_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));MODULE_FIRMWARE (IWL_QNJ_B_HR_B_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));MODULE_FIRMWARE (IWL_QU_C_HR_B_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));
@@ -689,3 +699,4 @@ MODULE_FIRMWARE(IWL_SNJ_A_GF_A_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));MODULE_FIRMWARE (IWL_SNJ_A_HR_B_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));MODULE_FIRMWARE (IWL_MA_A_GF_A_FW_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));MODULE_FIRMWARE (IWL_MA_A_MR_A_FW_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX )); +MODULE_FIRMWARE (IWL_SNJ_A_MR_A_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));
drivers/net/wireless/intel/iwlwifi/iwl-config.h +2 -0
@@ -472,6 +472,7 @@ struct iwl_cfg {#define IWL_CFG_MAC_TYPE_QU 0x33#define IWL_CFG_MAC_TYPE_QUZ 0x35#define IWL_CFG_MAC_TYPE_QNJ 0x36 +#define IWL_CFG_MAC_TYPE_SNJ 0x42#define IWL_CFG_MAC_TYPE_MA 0x44#define IWL_CFG_RF_TYPE_TH 0x105
@@ -656,6 +657,7 @@ extern const struct iwl_cfg iwlax211_cfg_snj_gf_a0;extern const struct iwl_cfg iwlax201_cfg_snj_hr_b0;extern const struct iwl_cfg iwl_cfg_ma_a0_gf_a0;extern const struct iwl_cfg iwl_cfg_ma_a0_mr_a0; +extern const struct iwl_cfg iwl_cfg_snj_a0_mr_a0;#endif /* CONFIG_IWLMVM */ #endif /* __IWL_CONFIG_H__ */
drivers/net/wireless/intel/iwlwifi/pcie/drv.c +6 -0
@@ -1002,6 +1002,12 @@ static const struct iwl_dev_info iwl_dev_info_table[] = { IWL_CFG_RF_TYPE_MR, IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY, iwl_cfg_ma_a0_mr_a0, iwl_ma_name), + _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY, + IWL_CFG_MAC_TYPE_SNJ, IWL_CFG_ANY, + IWL_CFG_RF_TYPE_MR, IWL_CFG_ANY, + IWL_CFG_ANY, IWL_CFG_ANY, + iwl_cfg_snj_a0_mr_a0, iwl_ma_name), +#endif /* CONFIG_IWLMVM */ };
drivers/nvme/host/core.c +12 -24
@@ -1894,30 +1894,18 @@ static void nvme_config_discard(struct gendisk *disk, struct nvme_ns *ns)blk_queue_max_write_zeroes_sectors (queue,UINT_MAX ); } -static void nvme_config_write_zeroes (struct gendisk *disk,struct nvme_ns *ns) +/* +* Even though NVMe spec explicitly states that MDTS is not applicable to the +* write-zeroes, we are cautious and limit the size to the controllers +* max_hw_sectors value, which is based on the MDTS field and possibly other +* limiting factors. +*/ +static void nvme_config_write_zeroes (struct request_queue *q, +struct nvme_ctrl *ctrl) { -u64 max_blocks; - -if (!(ns->ctrl->oncs &NVME_CTRL_ONCS_WRITE_ZEROES ) || - (ns->ctrl->quirks &NVME_QUIRK_DISABLE_WRITE_ZEROES )) -return ; -/* -* Even though NVMe spec explicitly states that MDTS is not -* applicable to the write-zeroes:- "The restriction does not apply to -* commands that do not transfer data between the host and the -* controller (e.g., Write Uncorrectable ro Write Zeroes command).". -* In order to be more cautious use controller's max_hw_sectors value -* to configure the maximum sectors for the write-zeroes which is -* configured based on the controller's MDTS field in the -* nvme_init_identify() if available. -*/ -if (ns->ctrl->max_hw_sectors ==UINT_MAX ) - max_blocks = (u64 )USHRT_MAX +1 ; -else - max_blocks = ns->ctrl->max_hw_sectors +1 ; - -blk_queue_max_write_zeroes_sectors (disk->queue, -nvme_lba_to_sect (ns, max_blocks)); +if ((ctrl->oncs &NVME_CTRL_ONCS_WRITE_ZEROES ) && + !(ctrl->quirks &NVME_QUIRK_DISABLE_WRITE_ZEROES )) +blk_queue_max_write_zeroes_sectors (q, ctrl->max_hw_sectors); }static bool nvme_ns_ids_valid (struct nvme_ns_ids *ids)
@@ -2089,7 +2077,7 @@ static void nvme_update_disk_info(struct gendisk *disk,set_capacity_revalidate_and_notify (disk, capacity, false);nvme_config_discard (disk, ns); -nvme_config_write_zeroes (disk, ns); +nvme_config_write_zeroes (disk->queue, ns->ctrl);if (id->nsattr &NVME_NS_ATTR_RO )set_disk_ro (disk, true);
drivers/nvme/host/rdma.c +5 -2
@@ -736,8 +736,11 @@ static int nvme_rdma_alloc_io_queues(struct nvme_rdma_ctrl *ctrl)return ret; ctrl->ctrl.queue_count = nr_io_queues +1 ; -if (ctrl->ctrl.queue_count <2 ) -return 0 ; +if (ctrl->ctrl.queue_count <2 ) { +dev_err (ctrl->ctrl.device, +"unable to set any I/O queues\n" ); +return -ENOMEM ; + }dev_info (ctrl->ctrl.device,"creating %d I/O queues.\n" , nr_io_queues);
drivers/nvme/host/tcp.c +13 -3
@@ -287,7 +287,7 @@ static inline void nvme_tcp_queue_request(struct nvme_tcp_request *req,* directly, otherwise queue io_work. Also, only do that if we * are on the same cpu, so we don't introduce contention. */ -if (queue->io_cpu ==__smp_processor_id () && +if (queue->io_cpu ==raw_smp_processor_id () && sync && empty &&mutex_trylock (&queue->send_mutex)) { queue->more_requests = !last;nvme_tcp_send_all (queue);
@@ -568,6 +568,13 @@ static int nvme_tcp_setup_h2c_data_pdu(struct nvme_tcp_request *req, req->pdu_len =le32_to_cpu (pdu->r2t_length); req->pdu_sent =0 ; +if (unlikely (!req->pdu_len)) { +dev_err (queue->ctrl->ctrl.device, +"req %d r2t len is %u, probably a bug...\n" , + rq->tag, req->pdu_len); +return -EPROTO ; + } +if (unlikely (req->data_sent + req->pdu_len > req->data_len)) { dev_err(queue->ctrl->ctrl.device, "req %d r2t len %u exceeded data len %u (%zu sent)\n",
@@ -1748,8 +1755,11 @@ static int nvme_tcp_alloc_io_queues(struct nvme_ctrl *ctrl)return ret; ctrl->queue_count = nr_io_queues +1 ; -if (ctrl->queue_count <2 ) -return 0 ; +if (ctrl->queue_count <2 ) { +dev_err (ctrl->device, +"unable to set any I/O queues\n" ); +return -ENOMEM ; + }dev_info (ctrl->device,"creating %d I/O queues.\n" , nr_io_queues);
drivers/nvme/target/core.c +14 -3
@@ -1109,9 +1109,20 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl) {lockdep_assert_held (&ctrl->lock); -if (nvmet_cc_iosqes (ctrl->cc) !=NVME_NVM_IOSQES || -nvmet_cc_iocqes (ctrl->cc) !=NVME_NVM_IOCQES || -nvmet_cc_mps (ctrl->cc) !=0 || +/* +* Only I/O controllers should verify iosqes,iocqes. +* Strictly speaking, the spec says a discovery controller +* should verify iosqes,iocqes are zeroed, however that +* would break backwards compatibility, so don't enforce it. +*/ +if (ctrl->subsys->type !=NVME_NQN_DISC && + (nvmet_cc_iosqes (ctrl->cc) !=NVME_NVM_IOSQES || +nvmet_cc_iocqes (ctrl->cc) !=NVME_NVM_IOCQES )) { + ctrl->csts =NVME_CSTS_CFS ; +return ; + } + +if (nvmet_cc_mps (ctrl->cc) !=0 ||nvmet_cc_ams (ctrl->cc) !=0 ||nvmet_cc_css (ctrl->cc) !=0 ) { ctrl->csts =NVME_CSTS_CFS ;
drivers/pci/hotplug/rpadlpar_sysfs.c +6 -8
@@ -34,12 +34,11 @@ static ssize_t add_slot_store(struct kobject *kobj, struct kobj_attribute *attr,if (nbytes >=MAX_DRC_NAME_LEN )return 0 ; -memcpy (drc_name, buf, nbytes); +strscpy (drc_name, buf, nbytes +1 ); end =strchr (drc_name,'\n' ); -if (!end) - end = &drc_name[nbytes]; - *end ='\0' ; +if (end) + *end ='\0' ; rc =dlpar_add_slot (drc_name);if (rc)
@@ -65,12 +64,11 @@ static ssize_t remove_slot_store(struct kobject *kobj,if (nbytes >=MAX_DRC_NAME_LEN )return 0 ; -memcpy (drc_name, buf, nbytes); +strscpy (drc_name, buf, nbytes +1 ); end =strchr (drc_name,'\n' ); -if (!end) - end = &drc_name[nbytes]; - *end ='\0' ; +if (end) + *end ='\0' ; rc =dlpar_remove_slot (drc_name);if (rc)
drivers/pci/hotplug/s390_pci_hpc.c +2 -1
@@ -93,8 +93,9 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)pci_dev_put (pdev);return -EBUSY ; } +pci_dev_put (pdev); -zpci_remove_device (zdev); +zpci_remove_device (zdev, false); rc =zpci_disable_device (zdev);if (rc)
drivers/regulator/pca9450-regulator.c +30 -0
@@ -5,6 +5,7 @@*/ #include <linux/err.h> +#include <linux/gpio/consumer.h> #include <linux/i2c.h> #include <linux/interrupt.h> #include <linux/kernel.h>
@@ -32,6 +33,7 @@ struct pca9450_regulator_desc {struct pca9450 {struct device *dev;struct regmap *regmap; +struct gpio_desc *sd_vsel_gpio;enum pca9450_chip_type type;unsigned int rcnt;int irq;
@@ -795,6 +797,34 @@ static int pca9450_i2c_probe(struct i2c_client *i2c,return ret; } +/* Clear PRESET_EN bit in BUCK123_DVS to use DVS registers */ + ret =regmap_clear_bits (pca9450->regmap,PCA9450_REG_BUCK123_DVS , +BUCK123_PRESET_EN ); +if (ret) { +dev_err (&i2c->dev,"Failed to clear PRESET_EN bit: %d\n" , ret); +return ret; + } + +/* Set reset behavior on assertion of WDOG_B signal */ + ret =regmap_update_bits (pca9450->regmap,PCA9450_REG_RESET_CTRL , +WDOG_B_CFG_MASK ,WDOG_B_CFG_COLD_LDO12 ); +if (ret) { +dev_err (&i2c->dev,"Failed to set WDOG_B reset behavior\n" ); +return ret; + } + +/* +* The driver uses the LDO5CTRL_H register to control the LDO5 regulator. +* This is only valid if the SD_VSEL input of the PMIC is high. Let's +* check if the pin is available as GPIO and set it to high. +*/ + pca9450->sd_vsel_gpio =gpiod_get_optional (pca9450->dev,"sd-vsel" ,GPIOD_OUT_HIGH ); + +if (IS_ERR (pca9450->sd_vsel_gpio)) { +dev_err (&i2c->dev,"Failed to get SD_VSEL GPIO\n" ); +return ret; + } +dev_info (&i2c->dev,"%s probed.\n" , type ==PCA9450_TYPE_PCA9450A ?"pca9450a" :"pca9450bc" );
drivers/s390/net/qeth_core_main.c +12 -6
@@ -470,6 +470,7 @@ static void qeth_qdio_handle_aob(struct qeth_card *card,struct qaob *aob;struct qeth_qdio_out_buffer *buffer;enum iucv_tx_notify notification; +struct qeth_qdio_out_q *queue;unsigned int i; aob = (struct qaob *)phys_to_virt (phys_aob_addr);
@@ -511,7 +512,9 @@ static void qeth_qdio_handle_aob(struct qeth_card *card,kmem_cache_free (qeth_core_header_cache, data); } + queue = buffer->q;atomic_set (&buffer->state,QETH_QDIO_BUF_EMPTY ); +napi_schedule (&queue->napi);break ;default :WARN_ON_ONCE (1 );
@@ -7013,9 +7016,7 @@ int qeth_open(struct net_device *dev) card->data.state =CH_STATE_UP ;netif_tx_start_all_queues (dev); -napi_enable (&card->napi);local_bh_disable (); -napi_schedule (&card->napi);if (IS_IQD (card)) {struct qeth_qdio_out_q *queue;unsigned int i;
@@ -7027,8 +7028,12 @@ int qeth_open(struct net_device *dev)napi_schedule (&queue->napi); } } + +napi_enable (&card->napi); +napi_schedule (&card->napi);/* kick-start the NAPI softirq: */ local_bh_enable (); +return 0 ; }EXPORT_SYMBOL_GPL (qeth_open);
@@ -7038,6 +7043,11 @@ int qeth_stop(struct net_device *dev)struct qeth_card *card = dev->ml_priv;QETH_CARD_TEXT (card,4 ,"qethstop" ); + +napi_disable (&card->napi); +cancel_delayed_work_sync (&card->buffer_reclaim_work); +qdio_stop_irq (CARD_DDEV (card)); +if (IS_IQD (card)) {struct qeth_qdio_out_q *queue;unsigned int i;
@@ -7058,10 +7068,6 @@ int qeth_stop(struct net_device *dev)netif_tx_disable (dev); } -napi_disable (&card->napi); -cancel_delayed_work_sync (&card->buffer_reclaim_work); -qdio_stop_irq (CARD_DDEV (card)); -return 0 ; }EXPORT_SYMBOL_GPL (qeth_stop);
drivers/scsi/aic94xx/aic94xx_scb.c +9 -11
@@ -68,7 +68,6 @@ static void asd_phy_event_tasklet(struct asd_ascb *ascb, struct done_list_struct *dl) {struct asd_ha_struct *asd_ha = ascb->ha; -struct sas_ha_struct *sas_ha = &asd_ha->sas_ha;int phy_id = dl->status_block[0 ] &DL_PHY_MASK ;struct asd_phy *phy = &asd_ha->phys[phy_id];
@@ -81,7 +80,7 @@ static void asd_phy_event_tasklet(struct asd_ascb *ascb,ASD_DPRINTK ("phy%d: device unplugged\n" , phy_id);asd_turn_led (asd_ha, phy_id,0 );sas_phy_disconnected (&phy->sas_phy); - sas_ha->notify_phy_event (&phy->sas_phy,PHYE_LOSS_OF_SIGNAL ); +sas_notify_phy_event (&phy->sas_phy,PHYE_LOSS_OF_SIGNAL );break ;case CURRENT_OOB_DONE :/* hot plugged device */
@@ -89,12 +88,12 @@ static void asd_phy_event_tasklet(struct asd_ascb *ascb,get_lrate_mode (phy, oob_mode);ASD_DPRINTK ("phy%d device plugged: lrate:0x%x, proto:0x%x\n" , phy_id, phy->sas_phy.linkrate, phy->sas_phy.iproto); - sas_ha->notify_phy_event (&phy->sas_phy,PHYE_OOB_DONE ); +sas_notify_phy_event (&phy->sas_phy,PHYE_OOB_DONE );break ;case CURRENT_SPINUP_HOLD :/* hot plug SATA, no COMWAKE sent */ asd_turn_led (asd_ha, phy_id,1 ); - sas_ha->notify_phy_event (&phy->sas_phy,PHYE_SPINUP_HOLD ); +sas_notify_phy_event (&phy->sas_phy,PHYE_SPINUP_HOLD );break ;case CURRENT_GTO_TIMEOUT :case CURRENT_OOB_ERROR :
@@ -102,7 +101,7 @@ static void asd_phy_event_tasklet(struct asd_ascb *ascb, dl->status_block[1]);asd_turn_led (asd_ha, phy_id,0 );sas_phy_disconnected (&phy->sas_phy); - sas_ha->notify_phy_event (&phy->sas_phy,PHYE_OOB_ERROR ); +sas_notify_phy_event (&phy->sas_phy,PHYE_OOB_ERROR );break ; } }
@@ -222,7 +221,6 @@ static void asd_bytes_dmaed_tasklet(struct asd_ascb *ascb,int edb_el = edb_id + ascb->edb_index;struct asd_dma_tok *edb = ascb->ha->seq.edb_arr[edb_el];struct asd_phy *phy = &ascb->ha->phys[phy_id]; -struct sas_ha_struct *sas_ha = phy->sas_phy.ha;u16 size = ((dl->status_block[3 ] &7 ) <<8 ) | dl->status_block[2 ]; size =min (size, (u16 )sizeof (phy->frame_rcvd));
@@ -234,7 +232,7 @@ static void asd_bytes_dmaed_tasklet(struct asd_ascb *ascb,spin_unlock_irqrestore (&phy->sas_phy.frame_rcvd_lock, flags);asd_dump_frame_rcvd (phy, dl);asd_form_port (ascb->ha, phy); - sas_ha->notify_port_event (&phy->sas_phy,PORTE_BYTES_DMAED ); +sas_notify_port_event (&phy->sas_phy,PORTE_BYTES_DMAED ); } static void asd_link_reset_err_tasklet(struct asd_ascb *ascb,
@@ -270,7 +268,7 @@ static void asd_link_reset_err_tasklet(struct asd_ascb *ascb,asd_turn_led (asd_ha, phy_id,0 );sas_phy_disconnected (sas_phy);asd_deform_port (asd_ha, phy); - sas_ha->notify_port_event (sas_phy,PORTE_LINK_RESET_ERR ); +sas_notify_port_event (sas_phy,PORTE_LINK_RESET_ERR );if (retries_left ==0 ) {int num =1 ;
@@ -315,7 +313,7 @@ static void asd_primitive_rcvd_tasklet(struct asd_ascb *ascb,spin_lock_irqsave (&sas_phy->sas_prim_lock, flags); sas_phy->sas_prim =ffs (cont);spin_unlock_irqrestore (&sas_phy->sas_prim_lock, flags); - sas_ha->notify_port_event (sas_phy,PORTE_BROADCAST_RCVD ); +sas_notify_port_event (sas_phy,PORTE_BROADCAST_RCVD );break ;case LmUNKNOWNP:
@@ -336,7 +334,7 @@ static void asd_primitive_rcvd_tasklet(struct asd_ascb *ascb,/* The sequencer disables all phys on that port. * We have to re-enable the phys ourselves. */ asd_deform_port (asd_ha, phy); - sas_ha->notify_port_event (sas_phy,PORTE_HARD_RESET ); +sas_notify_port_event (sas_phy,PORTE_HARD_RESET );break ;default :
@@ -567,7 +565,7 @@ static void escb_tasklet_complete(struct asd_ascb *ascb,/* the device is gone */ sas_phy_disconnected (sas_phy);asd_deform_port (asd_ha, phy); - sas_ha->notify_port_event (sas_phy,PORTE_TIMER_EVENT ); +sas_notify_port_event (sas_phy,PORTE_TIMER_EVENT );break ;default : ASD_DPRINTK("%s: phy%d: unknown event:0x%x\n", __func__,
drivers/scsi/hisi_sas/hisi_sas_main.c +4 -8
@@ -622,7 +622,6 @@ static void hisi_sas_bytes_dmaed(struct hisi_hba *hisi_hba, int phy_no) {struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];struct asd_sas_phy *sas_phy = &phy->sas_phy; -struct sas_ha_struct *sas_ha;if (!phy->phy_attached)return ;
@@ -633,8 +632,7 @@ static void hisi_sas_bytes_dmaed(struct hisi_hba *hisi_hba, int phy_no)return ; } - sas_ha = &hisi_hba->sha; - sas_ha->notify_phy_event (sas_phy,PHYE_OOB_DONE ); +sas_notify_phy_event (sas_phy,PHYE_OOB_DONE );if (sas_phy->phy) {struct sas_phy *sphy = sas_phy->phy;
@@ -662,7 +660,7 @@ static void hisi_sas_bytes_dmaed(struct hisi_hba *hisi_hba, int phy_no) } sas_phy->frame_rcvd_size = phy->frame_rcvd_size; - sas_ha->notify_port_event (sas_phy,PORTE_BYTES_DMAED ); +sas_notify_port_event (sas_phy,PORTE_BYTES_DMAED ); }static struct hisi_sas_device *hisi_sas_alloc_dev (struct domain_device *device)
@@ -1417,7 +1415,6 @@ static void hisi_sas_refresh_port_id(struct hisi_hba *hisi_hba)static void hisi_sas_rescan_topology (struct hisi_hba *hisi_hba,u32 state) { -struct sas_ha_struct *sas_ha = &hisi_hba->sha;struct asd_sas_port *_sas_port =NULL ;int phy_no;
@@ -1438,7 +1435,7 @@ static void hisi_sas_rescan_topology(struct hisi_hba *hisi_hba, u32 state) _sas_port = sas_port;if (dev_is_expander (dev->dev_type)) - sas_ha->notify_port_event (sas_phy, +sas_notify_port_event (sas_phy,PORTE_BROADCAST_RCVD ); } }else {
@@ -2200,7 +2197,6 @@ void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy) {struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];struct asd_sas_phy *sas_phy = &phy->sas_phy; -struct sas_ha_struct *sas_ha = &hisi_hba->sha;struct device *dev = hisi_hba->dev;if (rdy) {
@@ -2216,7 +2212,7 @@ void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy)return ; }/* Phy down and not ready */ - sas_ha->notify_phy_event (sas_phy,PHYE_LOSS_OF_SIGNAL ); +sas_notify_phy_event (sas_phy,PHYE_LOSS_OF_SIGNAL );sas_phy_disconnected (sas_phy);if (port) {
drivers/scsi/hisi_sas/hisi_sas_v1_hw.c +1 -2
@@ -1408,7 +1408,6 @@ static irqreturn_t int_bcast_v1_hw(int irq, void *p)struct hisi_sas_phy *phy = p;struct hisi_hba *hisi_hba = phy->hisi_hba;struct asd_sas_phy *sas_phy = &phy->sas_phy; -struct sas_ha_struct *sha = &hisi_hba->sha;struct device *dev = hisi_hba->dev;int phy_no = sas_phy->id;u32 irq_value;
@@ -1424,7 +1423,7 @@ static irqreturn_t int_bcast_v1_hw(int irq, void *p) }if (!test_bit (HISI_SAS_RESET_BIT , &hisi_hba->flags)) - sha->notify_port_event (sas_phy,PORTE_BROADCAST_RCVD ); +sas_notify_port_event (sas_phy,PORTE_BROADCAST_RCVD ); end: hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT2,
drivers/scsi/hisi_sas/hisi_sas_v2_hw.c +1 -2
@@ -2818,14 +2818,13 @@ static void phy_bcast_v2_hw(int phy_no, struct hisi_hba *hisi_hba) {struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];struct asd_sas_phy *sas_phy = &phy->sas_phy; -struct sas_ha_struct *sas_ha = &hisi_hba->sha;u32 bcast_status;hisi_sas_phy_write32 (hisi_hba, phy_no,SL_RX_BCAST_CHK_MSK ,1 ); bcast_status =hisi_sas_phy_read32 (hisi_hba, phy_no,RX_PRIMS_STATUS );if ((bcast_status &RX_BCAST_CHG_MSK ) && !test_bit (HISI_SAS_RESET_BIT , &hisi_hba->flags)) - sas_ha->notify_port_event (sas_phy,PORTE_BROADCAST_RCVD ); +sas_notify_port_event (sas_phy,PORTE_BROADCAST_RCVD );hisi_sas_phy_write32 (hisi_hba, phy_no,CHL_INT0 ,CHL_INT0_SL_RX_BCST_ACK_MSK );hisi_sas_phy_write32 (hisi_hba, phy_no,SL_RX_BCAST_CHK_MSK ,0 );
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +1 -2
@@ -1598,14 +1598,13 @@ static irqreturn_t phy_bcast_v3_hw(int phy_no, struct hisi_hba *hisi_hba) {struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];struct asd_sas_phy *sas_phy = &phy->sas_phy; -struct sas_ha_struct *sas_ha = &hisi_hba->sha;u32 bcast_status;hisi_sas_phy_write32 (hisi_hba, phy_no,SL_RX_BCAST_CHK_MSK ,1 ); bcast_status =hisi_sas_phy_read32 (hisi_hba, phy_no,RX_PRIMS_STATUS );if ((bcast_status &RX_BCAST_CHG_MSK ) && !test_bit (HISI_SAS_RESET_BIT , &hisi_hba->flags)) - sas_ha->notify_port_event (sas_phy,PORTE_BROADCAST_RCVD ); +sas_notify_port_event (sas_phy,PORTE_BROADCAST_RCVD );hisi_sas_phy_write32 (hisi_hba, phy_no,CHL_INT0 ,CHL_INT0_SL_RX_BCST_ACK_MSK );hisi_sas_phy_write32 (hisi_hba, phy_no,SL_RX_BCAST_CHK_MSK ,0 );
drivers/scsi/isci/port.c +6 -5
@@ -164,7 +164,8 @@ static void isci_port_bc_change_received(struct isci_host *ihost,"%s: isci_phy = %p, sas_phy = %p\n" , __func__, iphy, &iphy->sas_phy); - ihost->sas_ha.notify_port_event (&iphy->sas_phy,PORTE_BROADCAST_RCVD ); +sas_notify_port_event_gfp (&iphy->sas_phy, +PORTE_BROADCAST_RCVD ,GFP_ATOMIC );sci_port_bcn_enable (iport); }
@@ -223,8 +224,8 @@ static void isci_port_link_up(struct isci_host *isci_host,/* Notify libsas that we have an address frame, if indeed * we've found an SSP, SMP, or STP target */ if (success) - isci_host->sas_ha.notify_port_event (&iphy->sas_phy, -PORTE_BYTES_DMAED ); +sas_notify_port_event_gfp (&iphy->sas_phy, +PORTE_BYTES_DMAED ,GFP_ATOMIC ); }
@@ -270,8 +271,8 @@ static void isci_port_link_down(struct isci_host *isci_host,* isci_port_deformed and isci_dev_gone functions. */ sas_phy_disconnected (&isci_phy->sas_phy); - isci_host->sas_ha.notify_phy_event (&isci_phy->sas_phy, -PHYE_LOSS_OF_SIGNAL ); +sas_notify_phy_event_gfp (&isci_phy->sas_phy, +PHYE_LOSS_OF_SIGNAL ,GFP_ATOMIC );dev_dbg (&isci_host->pdev->dev,"%s: isci_port = %p - Done\n" , __func__, isci_port);
drivers/scsi/libsas/sas_event.c +51 -15
104 lines not on this page · raw message
drivers/scsi/libsas/sas_init.c +16 -11
@@ -123,12 +123,6 @@ int sas_register_ha(struct sas_ha_struct *sas_ha) goto Undo_phys; } - error =sas_init_events (sas_ha); -if (error) { -pr_notice ("couldn't start event thread:%d\n" , error); - goto Undo_ports; - } - error = -ENOMEM ;snprintf (name,sizeof (name),"%s_event_q" ,dev_name (sas_ha->dev)); sas_ha->event_q =create_singlethread_workqueue (name);
@@ -590,16 +584,15 @@ sas_domain_attach_transport(struct sas_domain_function_template *dft) }EXPORT_SYMBOL_GPL (sas_domain_attach_transport); - -struct asd_sas_event *sas_alloc_event (struct asd_sas_phy *phy) +static struct asd_sas_event *__sas_alloc_event (struct asd_sas_phy *phy, +gfp_t gfp_flags) {struct asd_sas_event *event; -gfp_t flags =in_interrupt () ?GFP_ATOMIC :GFP_KERNEL ;struct sas_ha_struct *sas_ha = phy->ha;struct sas_internal *i =to_sas_internal (sas_ha->core.shost->transportt); - event =kmem_cache_zalloc (sas_event_cache, flags); + event =kmem_cache_zalloc (sas_event_cache, gfp_flags);if (!event)return NULL ;
@@ -610,7 +603,8 @@ struct asd_sas_event *sas_alloc_event(struct asd_sas_phy *phy)if (cmpxchg (&phy->in_shutdown,0 ,1 ) ==0 ) {pr_notice ("The phy%d bursting events, shut it down.\n" , phy->id); -sas_notify_phy_event (phy,PHYE_SHUTDOWN ); +sas_notify_phy_event_gfp (phy,PHYE_SHUTDOWN , + gfp_flags); } }else {/* Do not support PHY control, stop allocating events */
@@ -624,6 +618,17 @@ struct asd_sas_event *sas_alloc_event(struct asd_sas_phy *phy)return event; } +struct asd_sas_event *sas_alloc_event (struct asd_sas_phy *phy) +{ +return __sas_alloc_event (phy,in_interrupt () ?GFP_ATOMIC :GFP_KERNEL ); +} + +struct asd_sas_event *sas_alloc_event_gfp (struct asd_sas_phy *phy, +gfp_t gfp_flags) +{ +return __sas_alloc_event (phy, gfp_flags); +} +void sas_free_event (struct asd_sas_event *event) {struct asd_sas_phy *phy = event->phy;
drivers/scsi/libsas/sas_internal.h +4 -1
@@ -49,12 +49,13 @@ int sas_register_phys(struct sas_ha_struct *sas_ha);void sas_unregister_phys (struct sas_ha_struct *sas_ha);struct asd_sas_event *sas_alloc_event (struct asd_sas_phy *phy); +struct asd_sas_event *sas_alloc_event_gfp (struct asd_sas_phy *phy, +gfp_t gfp_flags);void sas_free_event (struct asd_sas_event *event);int sas_register_ports (struct sas_ha_struct *sas_ha);void sas_unregister_ports (struct sas_ha_struct *sas_ha); -int sas_init_events (struct sas_ha_struct *sas_ha);void sas_disable_revalidation (struct sas_ha_struct *ha);void sas_enable_revalidation (struct sas_ha_struct *ha);void __sas_drain_work (struct sas_ha_struct *ha);
@@ -78,6 +79,8 @@ int sas_smp_phy_control(struct domain_device *dev, int phy_id,int sas_smp_get_phy_events (struct sas_phy *phy);int sas_notify_phy_event (struct asd_sas_phy *phy,enum phy_event event); +int sas_notify_phy_event_gfp (struct asd_sas_phy *phy,enum phy_event event, +gfp_t flags);void sas_device_set_phy (struct domain_device *dev,struct sas_port *port);struct domain_device *sas_find_dev_by_rphy (struct sas_rphy *rphy);struct domain_device *sas_ex_to_ata (struct domain_device *ex_dev,int phy_id);
drivers/scsi/lpfc/lpfc_debugfs.c +2 -2
@@ -2423,7 +2423,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf,memset (dstbuf,0 ,33 ); size = (nbytes <32 ) ? nbytes :32 ;if (copy_from_user (dstbuf, buf, size)) -return 0 ; +return -EFAULT ;if (dent == phba->debug_InjErrLBA) { if ((dstbuf[0] == 'o') && (dstbuf[1] == 'f') &&
@@ -2432,7 +2432,7 @@ lpfc_debugfs_dif_err_write(struct file *file, const char __user *buf, }if ((tmp ==0 ) && (kstrtoull (dstbuf,0 , &tmp))) -return 0 ; +return -EINVAL ;if (dent == phba->debug_writeGuard) phba->lpfc_injerr_wgrd_cnt = (uint32_t )tmp;
drivers/scsi/mvsas/mv_sas.c +11 -14
@@ -216,11 +216,11 @@ void mvs_set_sas_addr(struct mvs_info *mvi, int port_id, u32 off_lo,MVS_CHIP_DISP ->write_port_cfg_data (mvi, port_id, hi); } -static void mvs_bytes_dmaed (struct mvs_info *mvi,int i) +static void mvs_bytes_dmaed (struct mvs_info *mvi,int i,gfp_t gfp_flags) {struct mvs_phy *phy = &mvi->phy[i];struct asd_sas_phy *sas_phy = &phy->sas_phy; -struct sas_ha_struct *sas_ha; +if (!phy->phy_attached)return ;
@@ -229,8 +229,7 @@ static void mvs_bytes_dmaed(struct mvs_info *mvi, int i)return ; } - sas_ha = mvi->sas; - sas_ha->notify_phy_event (sas_phy,PHYE_OOB_DONE ); +sas_notify_phy_event_gfp (sas_phy,PHYE_OOB_DONE , gfp_flags);if (sas_phy->phy) {struct sas_phy *sphy = sas_phy->phy;
@@ -262,8 +261,7 @@ static void mvs_bytes_dmaed(struct mvs_info *mvi, int i) sas_phy->frame_rcvd_size = phy->frame_rcvd_size; - mvi->sas->notify_port_event (sas_phy, -PORTE_BYTES_DMAED ); +sas_notify_port_event_gfp (sas_phy,PORTE_BYTES_DMAED , gfp_flags); }void mvs_scan_start (struct Scsi_Host *shost)
@@ -279,7 +277,7 @@ void mvs_scan_start(struct Scsi_Host *shost)for (j =0 ; j < core_nr; j++) { mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[j];for (i =0 ; i < mvi->chip->n_phy; ++i) -mvs_bytes_dmaed (mvi, i); +mvs_bytes_dmaed (mvi, i,GFP_KERNEL ); } mvs_prv->scan_finished =1 ; }
@@ -1880,7 +1878,6 @@ static void mvs_work_queue(struct work_struct *work)struct mvs_info *mvi = mwq->mvi;unsigned long flags;u32 phy_no = (unsigned long ) mwq->data; -struct sas_ha_struct *sas_ha = mvi->sas;struct mvs_phy *phy = &mvi->phy[phy_no];struct asd_sas_phy *sas_phy = &phy->sas_phy;
@@ -1895,21 +1892,21 @@ static void mvs_work_queue(struct work_struct *work)if (!(tmp &PHY_READY_MASK )) {sas_phy_disconnected (sas_phy);mvs_phy_disconnected (phy); - sas_ha->notify_phy_event (sas_phy, -PHYE_LOSS_OF_SIGNAL ); +sas_notify_phy_event_gfp (sas_phy, +PHYE_LOSS_OF_SIGNAL ,GFP_ATOMIC );mv_dprintk ("phy%d Removed Device\n" , phy_no); }else {MVS_CHIP_DISP ->detect_porttype (mvi, phy_no);mvs_update_phyinfo (mvi, phy_no,1 ); -mvs_bytes_dmaed (mvi, phy_no); +mvs_bytes_dmaed (mvi, phy_no,GFP_ATOMIC );mvs_port_notify_formed (sas_phy,0 );mv_dprintk ("phy%d Attached Device\n" , phy_no); } } }else if (mwq->handler &EXP_BRCT_CHG ) { phy->phy_event &= ~EXP_BRCT_CHG ; - sas_ha->notify_port_event (sas_phy, -PORTE_BROADCAST_RCVD ); +sas_notify_port_event_gfp (sas_phy, +PORTE_BROADCAST_RCVD ,GFP_ATOMIC );mv_dprintk ("phy%d Got Broadcast Change\n" , phy_no); }list_del (&mwq->entry);
@@ -2026,7 +2023,7 @@ void mvs_int_port(struct mvs_info *mvi, int phy_no, u32 events)mdelay (10 ); } -mvs_bytes_dmaed (mvi, phy_no); +mvs_bytes_dmaed (mvi, phy_no,GFP_ATOMIC );/* whether driver is going to handle hot plug */ if (phy->phy_event &PHY_PLUG_OUT ) {mvs_port_notify_formed (&phy->sas_phy,0 );
drivers/scsi/myrs.c +1 -1
@@ -2274,12 +2274,12 @@ static void myrs_cleanup(struct myrs_hba *cs)if (cs->mmio_base) { cs->disable_intr (cs);iounmap (cs->mmio_base); + cs->mmio_base =NULL ; }if (cs->irq)free_irq (cs->irq, cs);if (cs->io_addr)release_region (cs->io_addr,0x80 ); -iounmap (cs->mmio_base);pci_set_drvdata (pdev,NULL );pci_disable_device (pdev);scsi_host_put (cs->host);
drivers/scsi/pm8001/pm8001_ctl.c +3 -4
@@ -841,10 +841,9 @@ static ssize_t pm8001_store_update_fw(struct device *cdev, pm8001_ha->dev);if (ret) { -PM8001_FAIL_DBG (pm8001_ha, -pm8001_printk ( -"Failed to load firmware image file %s, error %d\n" , - filename_ptr, ret)); +pm8001_dbg (pm8001_ha,FAIL , +"Failed to load firmware image file %s, error %d\n" , + filename_ptr, ret); pm8001_ha->fw_status =FAIL_OPEN_BIOS_FILE ; goto out; }
drivers/scsi/pm8001/pm8001_hwi.c +647 -845
418 lines not on this page · raw message
drivers/scsi/pm8001/pm8001_init.c +44 -49
93 lines not on this page · raw message
drivers/scsi/pm8001/pm8001_sas.c +65 -85
150 lines not on this page · raw message
drivers/scsi/pm8001/pm8001_sas.h +9 -38
47 lines not on this page · raw message
drivers/scsi/pm8001/pm80xx_hwi.c +788 -952
1,740 lines not on this page · raw message
drivers/staging/media/sunxi/cedrus/cedrus.c +19 -0
Lines of this file are not shown. View the raw message.
fs/ext4/verity.c +55 -34
89 lines not on this page · raw message
fs/gfs2/super.c +4 -41
45 lines not on this page · raw message
fs/gfs2/util.c +51 -7
58 lines not on this page · raw message
fs/zonefs/super.c +87 -14
101 lines not on this page · raw message
kernel/module.c +136 -30
166 lines not on this page · raw message
net/sunrpc/xprtrdma/svc_rdma_backchannel.c +3 -3
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.
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.10.26 kernel.
All users of the 5.10 kernel series must upgrade.
Quoted 9 lines
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-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=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.10.26,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.10.y
Version: 5.10.26
Commit: 856cd02bbdd412bf91ce327a3c97c52066f11c79
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 4720
passed: 4720
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 4720
passed: 4720
failed: 0
timeout: 0
--------------------------------------------------------------------