Linux 5.8.4
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.8.4 kernel.
All users of the 5.8 kernel series must upgrade.
The updated 5.8.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.8.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/alpha/include/asm/io.h | 8 arch/arm64/Makefile | 1 arch/arm64/include/asm/kvm_host.h | 2 arch/arm64/kernel/vdso32/Makefile | 2 arch/arm64/kvm/mmu.c | 19 - arch/ia64/include/asm/pgtable.h | 9 arch/m68k/include/asm/m53xxacr.h | 6 arch/mips/include/asm/kvm_host.h | 2 arch/mips/kernel/setup.c | 2 arch/mips/kvm/mmu.c | 3 arch/powerpc/include/asm/fixmap.h | 2 arch/powerpc/include/asm/kvm_host.h | 3 arch/powerpc/kernel/setup-common.c | 1 arch/powerpc/kvm/book3s.c | 3 arch/powerpc/kvm/e500_mmu_host.c | 3 arch/powerpc/platforms/pseries/hotplug-cpu.c | 18 - arch/powerpc/platforms/pseries/ras.c | 1 arch/riscv/kernel/vmlinux.lds.S | 2 arch/s390/kernel/ptrace.c | 7 arch/s390/kernel/runtime_instr.c | 2 arch/s390/pci/pci.c | 22 - arch/s390/pci/pci_bus.c | 52 +- arch/s390/pci/pci_bus.h | 13 arch/s390/pci/pci_event.c | 7 arch/x86/include/asm/kvm_host.h | 3 arch/x86/kvm/mmu/mmu.c | 3 arch/x86/kvm/x86.c | 2 arch/x86/pci/xen.c | 1 arch/x86/platform/efi/efi_64.c | 2 drivers/cpufreq/intel_pstate.c | 1 drivers/edac/i7core_edac.c | 4 drivers/edac/pnd2_edac.c | 2 drivers/edac/sb_edac.c | 4 drivers/edac/skx_common.c | 4 drivers/firmware/efi/efi.c | 2 drivers/firmware/efi/libstub/efi-stub-helper.c | 12 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 drivers/gpu/drm/amd/display/dc/core/dc_link.c | 7 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 16 drivers/gpu/drm/amd/display/dc/dce/dce_panel_cntl.h | 2 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 11 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 4 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 2 drivers/gpu/drm/amd/display/include/fixed31_32.h | 3 drivers/gpu/drm/ast/ast_drv.c | 1 drivers/gpu/drm/ast/ast_drv.h | 2 drivers/gpu/drm/ast/ast_main.c | 91 ++--- drivers/gpu/drm/ast/ast_mode.c | 11 drivers/gpu/drm/ast/ast_post.c | 10 drivers/gpu/drm/i915/i915_pmu.c | 17 drivers/gpu/drm/panel/panel-simple.c | 2 drivers/gpu/drm/ttm/ttm_bo_vm.c | 4 drivers/gpu/drm/vgem/vgem_drv.c | 27 - drivers/gpu/drm/virtio/virtgpu_ioctl.c | 1 drivers/infiniband/hw/bnxt_re/main.c | 3 drivers/infiniband/hw/hfi1/tid_rdma.c | 1 drivers/infiniband/hw/hns/hns_roce_device.h | 2 drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 9 drivers/infiniband/hw/hns/hns_roce_hw_v2.h | 4 drivers/infiniband/hw/hns/hns_roce_qp.c | 5 drivers/infiniband/hw/hns/hns_roce_srq.c | 2 drivers/input/mouse/psmouse-base.c | 2 drivers/media/pci/ttpci/budget-core.c | 11 drivers/media/platform/coda/coda-jpeg.c | 5 drivers/media/platform/davinci/vpss.c | 20 - drivers/media/platform/qcom/camss/camss.c | 30 + drivers/net/bonding/bond_main.c | 42 ++ drivers/net/dsa/b53/b53_common.c | 2 drivers/net/ethernet/amazon/ena/ena_netdev.c | 30 - drivers/net/ethernet/cortina/gemini.c | 4 drivers/net/ethernet/freescale/fec_main.c | 4 drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h | 2 drivers/net/ethernet/intel/i40e/i40e_common.c | 35 +- drivers/net/ethernet/intel/i40e/i40e_main.c | 3 drivers/net/ethernet/intel/igc/igc_main.c | 5 drivers/net/ethernet/intel/igc/igc_ptp.c | 2 drivers/net/hyperv/netvsc_drv.c | 2 drivers/net/ipvlan/ipvlan_main.c | 27 + drivers/of/address.c | 5 drivers/opp/core.c | 19 - drivers/pci/hotplug/s390_pci_hpc.c | 12 drivers/rtc/rtc-goldfish.c | 1 drivers/s390/scsi/zfcp_fsf.c | 4 drivers/scsi/libfc/fc_disc.c | 12 drivers/scsi/qla2xxx/qla_os.c | 4 drivers/scsi/ufs/ti-j721e-ufs.c | 1 drivers/scsi/ufs/ufs_quirks.h | 1 drivers/scsi/ufs/ufshcd-pci.c | 16 drivers/scsi/ufs/ufshcd.c | 130 ++++++- drivers/scsi/ufs/ufshcd.h | 38 ++ drivers/spi/Kconfig | 3 drivers/spi/spi-stm32.c | 27 + drivers/spi/spi.c | 21 + drivers/target/target_core_user.c | 2 drivers/vfio/pci/vfio_pci_private.h | 2 drivers/vfio/pci/vfio_pci_rdwr.c | 120 +++++- drivers/vfio/vfio_iommu_type1.c | 71 +++- drivers/video/fbdev/efifb.c | 2 drivers/virtio/virtio_ring.c | 3 drivers/xen/swiotlb-xen.c | 8 fs/afs/dynroot.c | 20 - fs/afs/fs_operation.c | 1 fs/ceph/mds_client.c | 3 fs/eventpoll.c | 26 - fs/ext4/block_validity.c | 87 ++-- fs/ext4/ext4.h | 6 fs/ext4/extents.c | 16 fs/ext4/file.c | 4 fs/ext4/indirect.c | 6 fs/ext4/inode.c | 5 fs/ext4/mballoc.c | 4 fs/ext4/namei.c | 22 - fs/f2fs/compress.c | 6 fs/f2fs/node.c | 10 fs/fat/fatent.c | 3 fs/io_uring.c | 33 + fs/jbd2/journal.c | 4 fs/jffs2/dir.c | 6 fs/romfs/storage.c | 4 fs/signalfd.c | 10 fs/squashfs/block.c | 6 fs/xfs/xfs_sysfs.h | 6 fs/xfs/xfs_trans_dquot.c | 2 include/linux/pgtable.h | 2 include/linux/sched/user.h | 3 kernel/bpf/task_iter.c | 3 kernel/events/uprobes.c | 2 kernel/relay.c | 1 kernel/watch_queue.c | 8 mm/khugepaged.c | 2 mm/memory.c | 3 mm/page_alloc.c | 7 mm/vmalloc.c | 2 net/can/j1939/socket.c | 14 net/can/j1939/transport.c | 89 ++++- net/core/filter.c | 75 +++- net/netfilter/nft_exthdr.c | 4 net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 2 scripts/kconfig/qconf.cc | 72 ++-- sound/hda/hdac_bus.c | 12 sound/hda/hdac_controller.c | 11 sound/pci/hda/patch_realtek.c | 2 sound/soc/amd/renoir/acp3x-pdm-dma.c | 29 - sound/soc/codecs/msm8916-wcd-analog.c | 4 sound/soc/intel/atom/sst-mfld-platform-pcm.c | 5 sound/soc/qcom/qdsp6/q6afe-dai.c | 210 ++++++------ sound/soc/qcom/qdsp6/q6routing.c | 16 tools/bpf/bpftool/gen.c | 8 tools/lib/bpf/libbpf.c | 16 tools/testing/selftests/bpf/.gitignore | 1 tools/testing/selftests/bpf/Makefile | 2 tools/testing/selftests/cgroup/cgroup_util.c | 2 tools/testing/selftests/kvm/x86_64/debug_regs.c | 4 virt/kvm/kvm_main.c | 3 156 files changed, 1385 insertions(+), 719 deletions(-)
Adrian Hunter (2):
scsi: ufs-pci: Add quirk for broken auto-hibernate for Intel EHL
scsi: ufs: Fix interrupt error message for shared interrupts
Al Viro (1):
do_epoll_ctl(): clean the failure exits up a bit
Alex Deucher (1):
Revert "drm/amd/display: Improve DisplayPort monitor interop"
Alex Williamson (2):
vfio-pci: Avoid recursive read-lock usage vfio/type1: Add proper error unwind for vfio_iommu_replay()
Alim Akhtar (4):
scsi: ufs: Add quirk to fix mishandling utrlclr/utmrlclr
scsi: ufs: Add quirk to disallow reset of interrupt aggregation
scsi: ufs: Add quirk to enable host controller without hce
scsi: ufs: Introduce UFSHCD_QUIRK_PRDT_BYTE_GRAN quirk
Amelie Delaunay (1):
spi: stm32: fixes suspend/resume management
Andrii Nakryiko (2):
tools/bpftool: Make skeleton code C++17-friendly by dropping typeof()
libbpf: Fix BTF-defined map-in-map initialization on 32-bit host arches
Aneesh Kumar K.V (1):
mm/vunmap: add cond_resched() in vunmap_pmd_range
Aric Cyr (1):
drm/amd/display: Fix incorrect backlight register offset for DCN
Arvind Sankar (4):
efi/x86: Mark kernel rodata non-executable for mixed mode efi/libstub: Stop parsing arguments at "--" efi/libstub: Handle NULL cmdline
efi/libstub: Handle unterminated cmdline
Bodo Stroesser (1):
scsi: target: tcmu: Fix crash in tcmu_flush_dcache_range on ARM
Boris Ostrovsky (1):
swiotlb-xen: use vmalloc_to_page on vmalloc virt addresses
Chao Yu (1):
f2fs: fix to check page dirty status before writeback
Charan Teja Reddy (1):
mm, page_alloc: fix core hung in free_pcppages_bulk()
Chen Zhou (1):
media: coda: jpeg: add NULL check after kmalloc
Chris Wilson (2):
drm/vgem: Replace opencoded version of drm_gem_dumb_map_offset() drm/i915: Provide the perf pmu.module
Christophe JAILLET (1):
drm: amdgpu: Use the correct size when allocating memory
Christophe Leroy (1):
powerpc/fixmap: Fix the size of the early debug area
Chuck Lever (1):
svcrdma: Fix another Receive buffer leak
Chuhong Yuan (1):
media: budget-core: Improve exception handling in budget_register()
Colin Ian King (1):
of/address: check for invalid range.cpu_addr
Cong Wang (1):
bonding: fix a potential double-unregister
Daniel Kolesa (1):
drm/amdgpu/display: use GFP_ATOMIC in dcn20_validate_bandwidth_internal
Darrick J. Wong (1):
xfs: fix inode quota reservation checks
David Howells (3):
watch_queue: Limit the number of watches a user can hold
afs: Fix key ref leak in afs_put_operation()
afs: Fix NULL deref in afs_dynroot_depopulate()
Dinghao Liu (1):
ASoC: intel: Fix memleak in sst_media_open
Doug Berger (1):
mm: include CMA pages in lowmem_reserve at boot
Eiichi Tsukata (1):
xfs: Fix UBSAN null-ptr-deref in xfs_sysfs_init
Eric Dumazet (1):
can: j1939: fix kernel-infoleak in j1939_sk_sock2sockaddr_can()
Eric Sandeen (1):
ext4: fix potential negative array index in do_split()
Evgeny Novikov (2):
media: vpss: clean up resources in init
media: camss: fix memory leaks on error handling paths in probe
Felix Kuehling (1):
drm/ttm: fix offset in VMAs with a pg_offs in ttm_bo_vm_access
Fugang Duan (1):
net: fec: correct the error path for regulator disable in probe
Gaurav Singh (1):
tools/testing/selftests/cgroup/cgroup_util.c: cg_read_strcmp: fix null pointer dereference
Greg Kroah-Hartman (1):
Linux 5.8.4
Greg Ungerer (1):
m68knommu: fix overwriting of bits in ColdFire V3 cache control
Grzegorz Szczurek (1):
i40e: Fix crash during removing i40e driver
Guo Ren (1):
riscv: Fixup static_obj() fail
Haiyang Zhang (1):
hv_netvsc: Fix the queue_mapping in netvsc_vf_xmit()
Heiko Carstens (2):
s390/runtime_instrumentation: fix storage key handling s390/ptrace: fix storage key handling
Helge Deller (1):
fs/signalfd.c: fix inconsistent return codes for signalfd4
Huacai Chen (1):
rtc: goldfish: Enable interrupt in set_alarm() when necessary
Hugh Dickins (2):
khugepaged: adjust VM_BUG_ON_MM() in __khugepaged_enter()
uprobes: __replace_page() avoid BUG in munlock_vma_page()
Hui Wang (1):
ASoC: amd: renoir: restore two more registers during resume
Jaegeuk Kim (1):
f2fs: should avoid inode eviction in synchronous path
Jaehyun Chung (1):
drm/amd/display: Blank stream before destroying HDCP session
Jan Kara (4):
ext4: do not block RWF_NOWAIT dio write on unallocated space
ext4: fix checking of directory entry validity for inline directories
ext4: don't allow overlapping system zones
ext4: check journal inode extents more carefully
Jann Horn (1):
romfs: fix uninitialized memory leak in romfs_dev_read()
Jarod Wilson (1):
bonding: show saner speed for broadcast mode
Javed Hasan (1):
scsi: libfc: Free skb in fc_disc_gpn_id_resp() for valid cases
Jens Axboe (1):
io_uring: find and cancel head link async work on files exit
Jessica Clarke (1):
arch/ia64: Restore arch-specific pgd_offset_k implementation
Jim Mattson (2):
kvm: x86: Toggling CR4.SMAP does not load PDPTEs in PAE mode
kvm: x86: Toggling CR4.PKE does not load PDPTEs in PAE mode
Jing Xiangfeng (1):
scsi: ufs: ti-j721e-ufs: Fix error return in ti_j721e_ufs_probe()
Jinyang He (1):
MIPS: Fix unable to reserve memory for Crash kernel
Jiri Wiesner (1):
bonding: fix active-backup failover for current ARP slave
John Fastabend (2):
bpf: sock_ops ctx access may stomp registers in corner case
bpf: sock_ops sk access may stomp registers when dst_reg = src_reg
Juergen Gross (1):
efi: avoid error message when booting under Xen
Kaike Wan (1):
RDMA/hfi1: Correct an interlock issue for TID RDMA WRITE request
Kiwoong Kim (1):
scsi: ufs: Add quirk to fix abnormal ocs fatal error
Krunoslav Kovac (1):
drm/amd/display: fix pow() crashing when given base 0
Li Heng (1):
efi: add missed destroy_workqueue when efisubsys_init fails
Luc Van Oostenryck (1):
alpha: fix annotation of io{read,write}{16,32}be()Lukas Wunner (1):
spi: Prevent adding devices below an unregistering controller
Mahesh Bandewar (1):
ipvlan: fix device features
Mao Wenan (1):
virtio_ring: Avoid loop when vq is broken in virtqueue_poll
Marc Zyngier (1):
epoll: Keep a reference on files added to the check list
Masahiro Yamada (3):
kconfig: qconf: do not limit the pop-up menu to the first row
kconfig: qconf: fix signal connection to invalid slots
kconfig: qconf: remove qInfo() to get back Qt4 support
Michael Neuling (1):
powerpc: Fix P10 PVR revision in /proc/cpuinfo for SMT4 cores
Michael Roth (1):
powerpc/pseries/hotplug-cpu: wait indefinitely for vCPU death
Mike Pozulp (2):
ALSA: hda/realtek: Add quirk for Samsung Galaxy Flex Book
ALSA: hda/realtek: Add quirk for Samsung Galaxy Book Ion
Niklas Schnelle (4):
s390/pci: fix zpci_bus_link_virtfn() s390/pci: re-introduce zpci_remove_device() s390/pci: fix PF/VF linking on hot plug s390/pci: ignore stale configuration request event
OGAWA Hirofumi (1):
fat: fix fat_ra_init() for data clusters == 0
Oleksij Rempel (4):
can: j1939: transport: j1939_session_tx_dat(): fix use-after-free read in j1939_tp_txtimer()
can: j1939: socket: j1939_sk_bind(): make sure ml_priv is allocated
can: j1939: transport: j1939_simple_recv(): ignore local J1939 messages send not by J1939 stack
can: j1939: transport: add j1939_session_skb_find_by_offset() functionPankaj Bharadiya (1):
drm/i915/pmu: Prefer drm_WARN_ON over WARN_ON
Paul Cercueil (1):
drm/panel-simple: Fix inverted V/H SYNC for Frida FRD350H54004 panel
Paul Hsieh (1):
drm/amd/display: Fix DFPstate hang due to view port changed
Phillip Lougher (1):
squashfs: avoid bio_alloc() failure with 1Mbyte blocks
Przemyslaw Patynowski (1):
i40e: Set RX_ONLY mode for unicast promiscuous on VLAN
Qi Liu (1):
drm/virtio: fix missing dma_fence_put() in virtio_gpu_execbuffer_ioctl()
Quinn Tran (1):
Revert "scsi: qla2xxx: Disable T10-DIF feature with FC-NVMe during probe"
Rajendra Nayak (1):
opp: Enable resources again if they were disabled earlier
Randy Dunlap (1):
Fix build error when CONFIG_ACPI is not set/enabled:
Sameer Pujar (1):
ALSA: hda: avoid reset of sdo_limit
Selvin Xavier (1):
RDMA/bnxt_re: Do not add user qps to flushlist
Shay Agroskin (2):
net: ena: Prevent reset after device destruction
net: ena: Change WARN_ON expression in ena_del_napi_in_range()
Srinivas Kandagatla (3):
ASoC: q6afe-dai: mark all widgets registers as SND_SOC_NOPM
ASoC: q6routing: add dummy register read/write function
ASoC: msm8916-wcd-analog: fix register Interrupt offset
Srinivas Pandruvada (1):
cpufreq: intel_pstate: Fix cpuinfo_max_freq when MSR_TURBO_RATIO_LIMIT is 0
Stanley Chu (1):
scsi: ufs: Add DELAY_BEFORE_LPM quirk for Micron devices
Steffen Maier (1):
scsi: zfcp: Fix use-after-free in request timeout handlers
Stephen Boyd (3):
opp: Put opp table in dev_pm_opp_set_rate() for empty tables
opp: Put opp table in dev_pm_opp_set_rate() if _set_opp_bw() fails
ARM64: vdso32: Install vdso32 from vdso_install
Stephen Suryaputra (1):
netfilter: nf_tables: nft_exthdr: the presence return value should be little-endian
Stylon Wang (1):
drm/amd/display: Fix EDID parsing after resume from suspend
Thomas Zimmermann (2):
drm/ast: Remove unused code paths for AST 1180 drm/ast: Initialize DRAM type before posting GPU
Tom Rix (1):
net: dsa: b53: check for timeout
Tony Luck (1):
EDAC/{i7core,sb,pnd2,skx}: Fix error event severity
Vasant Hegde (1):
powerpc/pseries: Do not initiate shutdown when system is running on UPS
Veronika Kabatova (1):
selftests/bpf: Remove test_align leftovers
Vinicius Costa Gomes (1):
igc: Fix PTP initialization
Wang Hai (1):
net: gemini: Fix missing free_netdev() in error path of gemini_ethernet_port_probe()
Wei Yongjun (1):
kernel/relay.c: fix memleak on destroy relay channel
Weihang Li (1):
Revert "RDMA/hns: Reserve one sge in order to avoid local length error"
Will Deacon (2):
KVM: Pass MMU notifier range flags to kvm_unmap_hva_range()
KVM: arm64: Only reschedule if MMU_NOTIFIER_RANGE_BLOCKABLE is not set
Xiongfeng Wang (1):
Input: psmouse - add a newline when printing 'proto' by sysfs
Xiubo Li (1):
ceph: fix use-after-free for fsc->mdsc
Yang Shi (1):
mm/memory.c: skip spurious TLB flush for retried page fault
Yang Weijiang (1):
selftests: kvm: Use a shorter encoding to clear RAX
Yonghong Song (1):
bpf: Use get_file_rcu() instead of get_file() for task_file iterator
Zhang Changzhong (4):
can: j1939: fix support for multipacket broadcast message
can: j1939: cancel rxtimer on multipacket broadcast session complete
can: j1939: abort multipacket broadcast session when timeout occurs
can: j1939: add rxtimer for multipacket broadcast session
Zhe Li (1):
jffs2: fix UAF problem
zhangyi (F) (1):
jbd2: add the missing unlock_buffer() in the error path of jbd2_write_superblock()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 8 -SUBLEVEL = 3 +SUBLEVEL = 4 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/alpha/include/asm/io.h +4 -4
@@ -489,10 +489,10 @@ extern inline void writeq(u64 b, volatile void __iomem *addr) }#endif -#define ioread16be (p) be16_to_cpu(ioread16(p)) -#define ioread32be (p) be32_to_cpu(ioread32(p)) -#define iowrite16be (v,p) iowrite16(cpu_to_be16(v), (p)) -#define iowrite32be (v,p) iowrite32(cpu_to_be32(v), (p)) +#define ioread16be (p) swab16(ioread16(p)) +#define ioread32be (p) swab32(ioread32(p)) +#define iowrite16be (v,p) iowrite16(swab16(v), (p)) +#define iowrite32be (v,p) iowrite32(swab32(v), (p))#define inb_p inb#define inw_p inw
arch/arm64/Makefile +1 -0
@@ -158,6 +158,7 @@ zinstall install: PHONY += vdso_install vdso_install: $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@ + $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 $@ # We use MRPROPER_FILES and CLEAN_FILES now archclean:
arch/arm64/include/asm/kvm_host.h +1 -1
@@ -443,7 +443,7 @@ int __kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu,#define KVM_ARCH_WANT_MMU_NOTIFIER int kvm_unmap_hva_range (struct kvm *kvm, -unsigned long start,unsigned long end); +unsigned long start,unsigned long end,unsigned flags);int kvm_set_spte_hva (struct kvm *kvm,unsigned long hva,pte_t pte);int kvm_age_hva (struct kvm *kvm,unsigned long start,unsigned long end);int kvm_test_age_hva (struct kvm *kvm,unsigned long hva);
arch/arm64/kernel/vdso32/Makefile +1 -1
@@ -208,7 +208,7 @@ quiet_cmd_vdsosym = VDSOSYM $@ cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ # Install commands for the unstripped file -quiet_cmd_vdso_install = INSTALL $@ +quiet_cmd_vdso_install = INSTALL32 $@ cmd_vdso_install = cp $(obj)/[email protected] $(MODLIB)/vdso/vdso32.so vdso.so: $(obj)/vdso.so.dbg
arch/arm64/kvm/mmu.c +14 -5
@@ -365,7 +365,8 @@ static void unmap_stage2_p4ds(struct kvm *kvm, pgd_t *pgd,* destroying the VM), otherwise another faulting VCPU may come in and mess * with things behind our backs. */ -static void unmap_stage2_range (struct kvm *kvm,phys_addr_t start,u64 size) +static void __unmap_stage2_range (struct kvm *kvm,phys_addr_t start,u64 size, +bool may_block) {pgd_t *pgd;phys_addr_t addr = start, end = start + size;
@@ -390,11 +391,16 @@ static void unmap_stage2_range(struct kvm *kvm, phys_addr_t start, u64 size)* If the range is too large, release the kvm->mmu_lock * to prevent starvation and lockup detector warnings. */ -if (next != end) +if (may_block && next != end)cond_resched_lock (&kvm->mmu_lock); }while (pgd++, addr = next, addr != end); } +static void unmap_stage2_range (struct kvm *kvm,phys_addr_t start,u64 size) +{ +__unmap_stage2_range (kvm, start, size, true); +} +static void stage2_flush_ptes (struct kvm *kvm,pmd_t *pmd,phys_addr_t addr,phys_addr_t end) {
@@ -2198,18 +2204,21 @@ static int handle_hva_to_gpa(struct kvm *kvm,static int kvm_unmap_hva_handler (struct kvm *kvm,gpa_t gpa,u64 size,void *data) { -unmap_stage2_range (kvm, gpa, size); +unsigned flags = *(unsigned *)data; +bool may_block = flags &MMU_NOTIFIER_RANGE_BLOCKABLE ; + +__unmap_stage2_range (kvm, gpa, size, may_block);return 0 ; }int kvm_unmap_hva_range (struct kvm *kvm, -unsigned long start,unsigned long end) +unsigned long start,unsigned long end,unsigned flags) {if (!kvm->arch.pgd)return 0 ;trace_kvm_unmap_hva_range (start, end); -handle_hva_to_gpa (kvm, start, end, &kvm_unmap_hva_handler,NULL ); +handle_hva_to_gpa (kvm, start, end, &kvm_unmap_hva_handler, &flags);return 0 ; }
arch/ia64/include/asm/pgtable.h +9 -0
@@ -366,6 +366,15 @@ pgd_index (unsigned long address) }#define pgd_index pgd_index +/* +* In the kernel's mapped region we know everything is in region number 5, so +* as an optimisation its PGD already points to the area for that region. +* However, this also means that we cannot use pgd_index() and we must +* never add the region here. +*/ +#define pgd_offset_k (addr) \ + (init_mm.pgd + (((addr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))) +/* Look up a pgd entry in the gate area. On IA-64, the gate-area resides in the kernel-mapped segment, hence we use pgd_offset_k() here. */
arch/m68k/include/asm/m53xxacr.h +3 -3
@@ -89,9 +89,9 @@* coherency though in all cases. And for copyback caches we will need * to push cached data as well. */ -#define CACHE_INIT CACR_CINVA -#define CACHE_INVALIDATE CACR_CINVA -#define CACHE_INVALIDATED CACR_CINVA +#define CACHE_INIT (CACHE_MODE + CACR_CINVA - CACR_EC) +#define CACHE_INVALIDATE (CACHE_MODE + CACR_CINVA) +#define CACHE_INVALIDATED (CACHE_MODE + CACR_CINVA)#define ACR0_MODE ((CONFIG_RAMBASE & 0xff000000) + \ (0x000f0000) + \
arch/mips/include/asm/kvm_host.h +1 -1
@@ -981,7 +981,7 @@ enum kvm_mips_fault_result kvm_trap_emul_gva_fault(struct kvm_vcpu *vcpu,#define KVM_ARCH_WANT_MMU_NOTIFIER int kvm_unmap_hva_range (struct kvm *kvm, -unsigned long start,unsigned long end); +unsigned long start,unsigned long end,unsigned flags);int kvm_set_spte_hva (struct kvm *kvm,unsigned long hva,pte_t pte);int kvm_age_hva (struct kvm *kvm,unsigned long start,unsigned long end);int kvm_test_age_hva (struct kvm *kvm,unsigned long hva);
arch/mips/kernel/setup.c +1 -1
@@ -497,7 +497,7 @@ static void __init mips_parse_crashkernel(void)if (ret !=0 || crash_size <=0 )return ; -if (!memblock_find_in_range (crash_base, crash_base + crash_size, crash_size,0 )) { +if (!memblock_find_in_range (crash_base, crash_base + crash_size, crash_size,1 )) {pr_warn ("Invalid memory region reserved for crash kernel\n" );return ; }
arch/mips/kvm/mmu.c +2 -1
@@ -518,7 +518,8 @@ static int kvm_unmap_hva_handler(struct kvm *kvm, gfn_t gfn, gfn_t gfn_end,return 1 ; } -int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end) +int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end, +unsigned flags) {handle_hva_to_gpa (kvm, start, end, &kvm_unmap_hva_handler,NULL );
arch/powerpc/include/asm/fixmap.h +1 -1
@@ -52,7 +52,7 @@ enum fixed_addresses {FIX_HOLE ,/* reserve the top 128K for early debugging purposes */ FIX_EARLY_DEBUG_TOP =FIX_HOLE , -FIX_EARLY_DEBUG_BASE =FIX_EARLY_DEBUG_TOP +(ALIGN (SZ_128 ,PAGE_SIZE )/PAGE_SIZE )-1 , +FIX_EARLY_DEBUG_BASE =FIX_EARLY_DEBUG_TOP +(ALIGN (SZ_128K ,PAGE_SIZE )/PAGE_SIZE )-1 , #ifdef CONFIG_HIGHMEMFIX_KMAP_BEGIN ,/* reserved pte's for temporary kernel mappings */ FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
arch/powerpc/include/asm/kvm_host.h +2 -1
@@ -58,7 +58,8 @@#define KVM_ARCH_WANT_MMU_NOTIFIER extern int kvm_unmap_hva_range (struct kvm *kvm, -unsigned long start,unsigned long end); +unsigned long start,unsigned long end, +unsigned flags);extern int kvm_age_hva (struct kvm *kvm,unsigned long start,unsigned long end);extern int kvm_test_age_hva (struct kvm *kvm,unsigned long hva);extern int kvm_set_spte_hva (struct kvm *kvm,unsigned long hva,pte_t pte);
arch/powerpc/kernel/setup-common.c +1 -0
@@ -311,6 +311,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) min = pvr &0xFF ;break ;case 0x004e :/* POWER9 bits 12-15 give chip type */ +case 0x0080 :/* POWER10 bit 12 gives SMT8/4 */ maj = (pvr >>8 ) &0x0F ; min = pvr &0xFF ;break ;
arch/powerpc/kvm/book3s.c +2 -1
@@ -834,7 +834,8 @@ void kvmppc_core_commit_memory_region(struct kvm *kvm, kvm->arch.kvm_ops->commit_memory_region (kvm, mem, old, new, change); } -int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end) +int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end, +unsigned flags) {return kvm->arch.kvm_ops->unmap_hva_range (kvm, start, end); }
arch/powerpc/kvm/e500_mmu_host.c +2 -1
@@ -734,7 +734,8 @@ static int kvm_unmap_hva(struct kvm *kvm, unsigned long hva)return 0 ; } -int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end) +int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end, +unsigned flags) {/* kvm_unmap_hva flushes everything anyways */ kvm_unmap_hva (kvm, start);
arch/powerpc/platforms/pseries/hotplug-cpu.c +12 -6
@@ -107,22 +107,28 @@ static int pseries_cpu_disable(void)*/ static void pseries_cpu_die (unsigned int cpu) { -int tries;int cpu_status =1 ;unsigned int pcpu =get_hard_smp_processor_id (cpu); +unsigned long timeout = jiffies +msecs_to_jiffies (120000 ); -for (tries =0 ; tries <25 ; tries++) { +while (true) { cpu_status =smp_query_cpu_stopped (pcpu);if (cpu_status ==QCSS_STOPPED || cpu_status ==QCSS_HARDWARE_ERROR )break ; -cpu_relax (); +if (time_after (jiffies, timeout)) { +pr_warn ("CPU %i (hwid %i) didn't die after 120 seconds\n" , + cpu, pcpu); + timeout = jiffies +msecs_to_jiffies (120000 ); + } + +cond_resched (); } -if (cpu_status !=0 ) { -printk ("Querying DEAD? cpu %i (%i) shows %i\n" , - cpu, pcpu, cpu_status); +if (cpu_status ==QCSS_HARDWARE_ERROR ) { +pr_warn ("CPU %i (hwid %i) reported error while dying\n" , + cpu, pcpu); }/* Isolation and deallocation are definitely done by
arch/powerpc/platforms/pseries/ras.c +0 -1
@@ -184,7 +184,6 @@ static void handle_system_shutdown(char event_modifier)case EPOW_SHUTDOWN_ON_UPS :pr_emerg ("Loss of system power detected. System is running on" " UPS/battery. Check RTAS error log for details\n" ); -orderly_poweroff (true);break ;case EPOW_SHUTDOWN_LOSS_OF_CRITICAL_FUNCTIONS :
arch/riscv/kernel/vmlinux.lds.S +1 -1
@@ -22,6 +22,7 @@ SECTIONS /* Beginning of code and text segment */ . = LOAD_OFFSET; _start = .; + _stext = .; HEAD_TEXT_SECTION . = ALIGN(PAGE_SIZE);
@@ -54,7 +55,6 @@ SECTIONS . = ALIGN(SECTION_ALIGN); .text : { _text = .; - _stext = .; TEXT_TEXT SCHED_TEXT CPUIDLE_TEXT
arch/s390/kernel/ptrace.c +5 -2
@@ -1310,7 +1310,6 @@ static bool is_ri_cb_valid(struct runtime_instr_cb *cb) cb->pc ==1 && cb->qc ==0 && cb->reserved2 ==0 && - cb->key ==PAGE_DEFAULT_KEY && cb->reserved3 ==0 && cb->reserved4 ==0 && cb->reserved5 == 0 &&
@@ -1374,7 +1373,11 @@ static int s390_runtime_instr_set(struct task_struct *target,kfree (data);return -EINVAL ; } - +/* +* Override access key in any case, since user space should +* not be able to set it, nor should it care about it. +*/ + ri_cb.key =PAGE_DEFAULT_KEY >>4 ;preempt_disable ();if (!target->thread.ri_cb) target->thread.ri_cb = data;
arch/s390/kernel/runtime_instr.c +1 -1
@@ -57,7 +57,7 @@ static void init_runtime_instr_cb(struct runtime_instr_cb *cb) cb->k =1 ; cb->ps =1 ; cb->pc =1 ; - cb->key =PAGE_DEFAULT_KEY ; + cb->key =PAGE_DEFAULT_KEY >>4 ; cb->v =1 ; }
arch/s390/pci/pci.c +15 -7
@@ -672,6 +672,19 @@ int zpci_disable_device(struct zpci_dev *zdev) }EXPORT_SYMBOL_GPL (zpci_disable_device); +void zpci_remove_device (struct zpci_dev *zdev) +{ +struct zpci_bus *zbus = zdev->zbus; +struct pci_dev *pdev; + + pdev =pci_get_slot (zbus->bus, zdev->devfn); +if (pdev) { +if (pdev->is_virtfn) +return zpci_remove_virtfn (pdev, zdev->vfn); +pci_stop_and_remove_bus_device_locked (pdev); + } +} +int zpci_create_device (struct zpci_dev *zdev) {int rc;
@@ -716,13 +729,8 @@ void zpci_release_device(struct kref *kref) { struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref); -if (zdev->zbus->bus) { -struct pci_dev *pdev; - - pdev =pci_get_slot (zdev->zbus->bus, zdev->devfn); -if (pdev) -pci_stop_and_remove_bus_device_locked (pdev); - } +if (zdev->zbus->bus) +zpci_remove_device (zdev);switch (zdev->state) {case ZPCI_FN_STATE_ONLINE :
arch/s390/pci/pci_bus.c +30 -22
95 lines not on this page · raw message
arch/s390/pci/pci_bus.h +13 -0
@@ -29,3 +29,16 @@ static inline struct zpci_dev *get_zdev_by_bus(struct pci_bus *bus,return (devfn >=ZPCI_FUNCTIONS_PER_BUS ) ?NULL : zbus->function[devfn]; } + +#ifdef CONFIG_PCI_IOV +static inline void zpci_remove_virtfn (struct pci_dev *pdev,int vfn) +{ + +pci_lock_rescan_remove (); +/* Linux' vfid's start at 0 vfn at 1 */ +pci_iov_remove_virtfn (pdev->physfn, vfn -1 ); +pci_unlock_rescan_remove (); +} +#else /* CONFIG_PCI_IOV */ +static inline void zpci_remove_virtfn (struct pci_dev *pdev,int vfn) {} +#endif /* CONFIG_PCI_IOV */
arch/s390/pci/pci_event.c +5 -2
@@ -92,6 +92,9 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf) ret =clp_add_pci_device (ccdf->fid, ccdf->fh,1 );break ; } +/* the configuration request may be stale */ +if (zdev->state !=ZPCI_FN_STATE_STANDBY ) +break ; zdev->fh = ccdf->fh; zdev->state =ZPCI_FN_STATE_CONFIGURED ; ret =zpci_enable_device (zdev);
@@ -118,7 +121,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)if (!zdev)break ;if (pdev) -pci_stop_and_remove_bus_device_locked (pdev); +zpci_remove_device (zdev); ret =zpci_disable_device (zdev);if (ret)
@@ -137,7 +140,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)/* Give the driver a hint that the function is * already unusable. */ pdev->error_state = pci_channel_io_perm_failure; -pci_stop_and_remove_bus_device_locked (pdev); +zpci_remove_device (zdev); } zdev->state =ZPCI_FN_STATE_STANDBY ;
arch/x86/include/asm/kvm_host.h +2 -1
@@ -1641,7 +1641,8 @@ asmlinkage void kvm_spurious_fault(void); _ASM_EXTABLE(666b, 667b)#define KVM_ARCH_WANT_MMU_NOTIFIER -int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end); +int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end, +unsigned flags);int kvm_age_hva (struct kvm *kvm,unsigned long start,unsigned long end);int kvm_test_age_hva (struct kvm *kvm,unsigned long hva);int kvm_set_spte_hva (struct kvm *kvm,unsigned long hva,pte_t pte);
arch/x86/kvm/mmu/mmu.c +2 -1
@@ -1971,7 +1971,8 @@ static int kvm_handle_hva(struct kvm *kvm, unsigned long hva,return kvm_handle_hva_range (kvm, hva, hva +1 , data, handler); } -int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end) +int kvm_unmap_hva_range (struct kvm *kvm,unsigned long start,unsigned long end, +unsigned flags) {return kvm_handle_hva_range (kvm, start, end,0 , kvm_unmap_rmapp); }
arch/x86/kvm/x86.c +1 -1
@@ -967,7 +967,7 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) {unsigned long old_cr4 =kvm_read_cr4 (vcpu);unsigned long pdptr_bits =X86_CR4_PGE |X86_CR4_PSE |X86_CR4_PAE | -X86_CR4_SMEP |X86_CR4_SMAP |X86_CR4_PKE ; +X86_CR4_SMEP ;if (kvm_valid_cr4 (vcpu, cr4))return 1 ;
arch/x86/pci/xen.c +1 -0
@@ -26,6 +26,7 @@#include <asm/xen/pci.h> #include <asm/xen/cpuid.h> #include <asm/apic.h> +#include <asm/acpi.h> #include <asm/i8259.h> static int xen_pcifront_enable_irq (struct pci_dev *dev)
arch/x86/platform/efi/efi_64.c +2 -0
@@ -268,6 +268,8 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) npages = (__end_rodata - __start_rodata) >>PAGE_SHIFT ; rodata =__pa (__start_rodata); pfn = rodata >>PAGE_SHIFT ; + + pf = _PAGE_NX | _PAGE_ENC;if (kernel_map_pages_in_pgd (pgd, pfn, rodata, npages, pf)) {pr_err ("Failed to map kernel rodata 1:1\n" );return 1 ;
drivers/cpufreq/intel_pstate.c +1 -0
@@ -1572,6 +1572,7 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)intel_pstate_get_hwp_max (cpu->cpu, &phy_max, ¤t_max); cpu->pstate.turbo_freq = phy_max * cpu->pstate.scaling; + cpu->pstate.turbo_pstate = phy_max; }else { cpu->pstate.turbo_freq = cpu->pstate.turbo_pstate * cpu->pstate.scaling; }
drivers/edac/i7core_edac.c +2 -2
@@ -1710,9 +1710,9 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci,if (uncorrected_error) { core_err_cnt =1 ;if (ripv) - tp_event =HW_EVENT_ERR_FATAL ; -else tp_event =HW_EVENT_ERR_UNCORRECTED ; +else + tp_event =HW_EVENT_ERR_FATAL ; }else { tp_event =HW_EVENT_ERR_CORRECTED ; }
drivers/edac/pnd2_edac.c +1 -1
@@ -1155,7 +1155,7 @@ static void pnd2_mce_output_error(struct mem_ctl_info *mci, const struct mce *m,u32 optypenum =GET_BITFIELD (m->status,4 ,6 );int rc; - tp_event = uc_err ? (ripv ?HW_EVENT_ERR_FATAL :HW_EVENT_ERR_UNCORRECTED ) : + tp_event = uc_err ? (ripv ?HW_EVENT_ERR_UNCORRECTED :HW_EVENT_ERR_FATAL ) :HW_EVENT_ERR_CORRECTED ;/*
drivers/edac/sb_edac.c +2 -2
@@ -2982,9 +2982,9 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci,if (uncorrected_error) { core_err_cnt =1 ;if (ripv) { - tp_event =HW_EVENT_ERR_FATAL ; - }else { tp_event =HW_EVENT_ERR_UNCORRECTED ; + }else { + tp_event =HW_EVENT_ERR_FATAL ; } }else { tp_event =HW_EVENT_ERR_CORRECTED ;
drivers/edac/skx_common.c +2 -2
@@ -493,9 +493,9 @@ static void skx_mce_output_error(struct mem_ctl_info *mci,if (uncorrected_error) { core_err_cnt =1 ;if (ripv) { - tp_event =HW_EVENT_ERR_FATAL ; - }else { tp_event =HW_EVENT_ERR_UNCORRECTED ; + }else { + tp_event =HW_EVENT_ERR_FATAL ; } }else { tp_event =HW_EVENT_ERR_CORRECTED ;
drivers/firmware/efi/efi.c +2 -0
@@ -381,6 +381,7 @@ static int __init efisubsys_init(void) efi_kobj =kobject_create_and_add ("efi" , firmware_kobj);if (!efi_kobj) {pr_err ("efi: Firmware registration failed.\n" ); +destroy_workqueue (efi_rts_wq);return -ENOMEM ; }
@@ -424,6 +425,7 @@ static int __init efisubsys_init(void)generic_ops_unregister (); err_put:kobject_put (efi_kobj); +destroy_workqueue (efi_rts_wq);return error; }
drivers/firmware/efi/libstub/efi-stub-helper.c +10 -2
@@ -187,20 +187,28 @@ int efi_printk(const char *fmt, ...)*/ efi_status_t efi_parse_options (char const *cmdline) { -size_t len =strlen (cmdline) +1 ; +size_t len;efi_status_t status;char *str, *buf; +if (!cmdline) +return EFI_SUCCESS ; + + len =strnlen (cmdline,COMMAND_LINE_SIZE -1 ) +1 ; status =efi_bs_call (allocate_pool,EFI_LOADER_DATA , len, (void **)&buf);if (status !=EFI_SUCCESS )return status; - str =skip_spaces (memcpy (buf, cmdline, len)); +memcpy (buf, cmdline, len -1 ); + buf[len -1 ] ='\0' ; + str =skip_spaces (buf);while (*str) {char *param, *val; str =next_arg (str, ¶m, &val); +if (!val && !strcmp (param,"--" )) +break ;if (!strcmp (param,"nokaslr" )) { efi_nokaslr = true;
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +1 -1
@@ -465,7 +465,7 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,unsigned int pages;int i, r; - *sgt =kmalloc (sizeof (*sg),GFP_KERNEL ); + *sgt =kmalloc (sizeof (**sgt),GFP_KERNEL );if (!*sgt)return -ENOMEM ;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 -0
@@ -2184,6 +2184,7 @@ void amdgpu_dm_update_connector_after_detect(drm_connector_update_edid_property (connector, aconnector->edid); +drm_add_edid_modes (connector, aconnector->edid);if (aconnector->dc_link->aux_mode) drm_dp_cec_set_edid(&aconnector->dm_dp_aux.aux,
drivers/gpu/drm/amd/display/dc/core/dc_link.c +2 -5
@@ -3265,12 +3265,11 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx)core_link_set_avmute (pipe_ctx, true); } + dc->hwss.blank_stream (pipe_ctx);#if defined(CONFIG_DRM_AMD_DC_HDCP )update_psp_stream_config (pipe_ctx, true);#endif - dc->hwss.blank_stream (pipe_ctx); -if (pipe_ctx->stream->signal ==SIGNAL_TYPE_DISPLAY_PORT_MST )deallocate_mst_payload (pipe_ctx);
@@ -3298,11 +3297,9 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx)write_i2c_redriver_setting (pipe_ctx, false); } } - -disable_link (pipe_ctx->stream->link, pipe_ctx->stream->signal); - dc->hwss.disable_stream (pipe_ctx); +disable_link (pipe_ctx->stream->link, pipe_ctx->stream->signal);if (pipe_ctx->stream->timing.flags.DSC) {if (dc_is_dp_signal (pipe_ctx->stream->signal))dp_set_dsc_enable (pipe_ctx, false);
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +6 -10
@@ -1102,10 +1102,6 @@ static inline enum link_training_result perform_link_training_int( dpcd_pattern.v1_4.TRAINING_PATTERN_SET =DPCD_TRAINING_PATTERN_VIDEOIDLE ;dpcd_set_training_pattern (link, dpcd_pattern); -/* delay 5ms after notifying sink of idle pattern before switching output */ -if (link->connector_signal !=SIGNAL_TYPE_EDP ) -msleep (5 ); -/* 4. mainlink output idle pattern*/ dp_set_hw_test_pattern (link,DP_TEST_PATTERN_VIDEO_MODE ,NULL ,0 );
@@ -1555,12 +1551,6 @@ bool perform_link_training_with_retries(struct dc_link *link = stream->link;enum dp_panel_mode panel_mode =dp_get_panel_mode (link); -/* We need to do this before the link training to ensure the idle pattern in SST -* mode will be sent right after the link training -*/ - link->link_enc->funcs->connect_dig_be_to_fe (link->link_enc, - pipe_ctx->stream_res.stream_enc->id, true); -for (j =0 ; j < attempts; ++j) { dp_enable_link_phy(
@@ -1577,6 +1567,12 @@ bool perform_link_training_with_retries(dp_set_panel_mode (link, panel_mode); +/* We need to do this before the link training to ensure the idle pattern in SST +* mode will be sent right after the link training +*/ + link->link_enc->funcs->connect_dig_be_to_fe (link->link_enc, + pipe_ctx->stream_res.stream_enc->id, true); +if (link->aux_access_disabled) {dc_link_dp_perform_link_training_skip_aux (link, link_setting);return true;
drivers/gpu/drm/amd/display/dc/dce/dce_panel_cntl.h +1 -1
@@ -49,7 +49,7 @@#define DCN_PANEL_CNTL_REG_LIST ()\ DCN_PANEL_CNTL_SR(PWRSEQ_CNTL, LVTMA), \ DCN_PANEL_CNTL_SR(PWRSEQ_STATE, LVTMA), \ - DCE_PANEL_CNTL_SR(PWRSEQ_REF_DIV, LVTMA), \ + DCN_PANEL_CNTL_SR(PWRSEQ_REF_DIV, LVTMA), \ SR(BL_PWM_CNTL), \ SR(BL_PWM_CNTL2), \ SR(BL_PWM_PERIOD_CNTL), \
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +1 -10
@@ -1069,17 +1069,8 @@ void dce110_blank_stream(struct pipe_ctx *pipe_ctx) link->dc->hwss.set_abm_immediate_disable (pipe_ctx); } -if (dc_is_dp_signal (pipe_ctx->stream->signal)) { +if (dc_is_dp_signal (pipe_ctx->stream->signal)) pipe_ctx->stream_res.stream_enc->funcs->dp_blank (pipe_ctx->stream_res.stream_enc); - -/* -* After output is idle pattern some sinks need time to recognize the stream -* has changed or they enter protection state and hang. -*/ -if (!dc_is_embedded_signal (pipe_ctx->stream->signal)) -msleep (60 ); - } - }
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +2 -2
@@ -1386,8 +1386,8 @@ static void dcn20_update_dchubp_dpp(/* Any updates are handled in dc interface, just need to apply existing for plane enable */ if ((pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed || - pipe_ctx->update_flags.bits.scaler || pipe_ctx->update_flags.bits.viewport) - && pipe_ctx->stream->cursor_attributes.address.quad_part !=0 ) { + pipe_ctx->update_flags.bits.scaler || viewport_changed == true) && + pipe_ctx->stream->cursor_attributes.address.quad_part !=0 ) { dc->hwss.set_cursor_position (pipe_ctx); dc->hwss.set_cursor_attribute (pipe_ctx);
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +1 -1
@@ -3097,7 +3097,7 @@ static bool dcn20_validate_bandwidth_internal(struct dc *dc, struct dc_state *coint vlevel =0 ;int pipe_split_from[MAX_PIPES ];int pipe_cnt =0 ; -display_e2e_pipe_params_st *pipes =kzalloc (dc->res_pool->pipe_count *sizeof (display_e2e_pipe_params_st),GFP_KERNEL ); +display_e2e_pipe_params_st *pipes =kzalloc (dc->res_pool->pipe_count *sizeof (display_e2e_pipe_params_st),GFP_ATOMIC );DC_LOGGER_INIT (dc->ctx->logger);BW_VAL_TRACE_COUNT ();
drivers/gpu/drm/amd/display/include/fixed31_32.h +3 -0
@@ -431,6 +431,9 @@ struct fixed31_32 dc_fixpt_log(struct fixed31_32 arg);*/ static inline struct fixed31_32 dc_fixpt_pow (struct fixed31_32 arg1,struct fixed31_32 arg2) { +if (arg1.value ==0 ) +return arg2.value ==0 ? dc_fixpt_one : dc_fixpt_zero; + return dc_fixpt_exp( dc_fixpt_mul( dc_fixpt_log(arg1),
drivers/gpu/drm/ast/ast_drv.c +0 -1
@@ -59,7 +59,6 @@ static struct drm_driver driver;static const struct pci_device_id pciidlist[] = {AST_VGA_DEVICE (PCI_CHIP_AST2000 ,NULL ),AST_VGA_DEVICE (PCI_CHIP_AST2100 ,NULL ), -/* AST_VGA_DEVICE(PCI_CHIP_AST1180, NULL), - don't bind to 1180 for now */ {0 ,0 ,0 }, };
drivers/gpu/drm/ast/ast_drv.h +0 -2
@@ -52,7 +52,6 @@#define PCI_CHIP_AST2000 0x2000#define PCI_CHIP_AST2100 0x2010 -#define PCI_CHIP_AST1180 0x1180enum ast_chip {
@@ -64,7 +63,6 @@ enum ast_chip {AST2300 ,AST2400 , AST2500, - AST1180, }; enum ast_tx_chip {
drivers/gpu/drm/ast/ast_main.c +40 -51
117 lines not on this page · raw message
drivers/gpu/drm/ast/ast_mode.c +1 -10
@@ -769,9 +769,6 @@ static void ast_crtc_dpms(struct drm_crtc *crtc, int mode) {struct ast_private *ast = crtc->dev->dev_private; -if (ast->chip ==AST1180 ) -return ; -/* TODO: Maybe control display signal generation with * Sync Enable (bit CR17.7). */
@@ -793,16 +790,10 @@ static void ast_crtc_dpms(struct drm_crtc *crtc, int mode)static int ast_crtc_helper_atomic_check (struct drm_crtc *crtc,struct drm_crtc_state *state) { -struct ast_private *ast = crtc->dev->dev_private;struct ast_crtc_state *ast_state;const struct drm_format_info *format;bool succ; -if (ast->chip ==AST1180 ) { -DRM_ERROR ("AST 1180 modesetting not supported\n" ); -return -EINVAL ; - } -if (!state->enable)return 0 ;/* no mode checks if CRTC is being disabled */
@@ -1044,7 +1035,7 @@ static enum drm_mode_status ast_mode_valid(struct drm_connector *connector,if ((ast->chip ==AST2100 ) || (ast->chip ==AST2200 ) || (ast->chip ==AST2300 ) || (ast->chip ==AST2400 ) || - (ast->chip ==AST2500 ) || (ast->chip ==AST1180 )) { + (ast->chip ==AST2500 )) {if ((mode->hdisplay ==1920 ) && (mode->vdisplay ==1080 ))return MODE_OK ;
drivers/gpu/drm/ast/ast_post.c +3 -7
@@ -58,13 +58,9 @@ bool ast_is_vga_enabled(struct drm_device *dev)struct ast_private *ast = dev->dev_private;u8 ch; -if (ast->chip ==AST1180 ) { -/* TODO 1180 */ - }else { - ch =ast_io_read8 (ast,AST_IO_VGA_ENABLE_PORT ); -return !!(ch &0x01 ); - } -return false; + ch =ast_io_read8 (ast,AST_IO_VGA_ENABLE_PORT ); + +return !!(ch &0x01 ); }static const u8 extreginfo[] = {0x0f ,0x04 ,0x1c ,0xff };
drivers/gpu/drm/i915/i915_pmu.c +10 -7
@@ -441,8 +441,10 @@ static u64 count_interrupts(struct drm_i915_private *i915)static void i915_pmu_event_destroy (struct perf_event *event) { -WARN_ON (event->parent); -module_put (THIS_MODULE ); +struct drm_i915_private *i915 = +container_of (event->pmu,typeof (*i915), pmu.base); + +drm_WARN_ON (&i915->drm, event->parent); } static int
@@ -534,10 +536,8 @@ static int i915_pmu_event_init(struct perf_event *event)if (ret)return ret; -if (!event->parent) { -__module_get (THIS_MODULE ); +if (!event->parent) event->destroy = i915_pmu_event_destroy; - }return 0 ; }
@@ -1058,8 +1058,10 @@ static int i915_pmu_register_cpuhp_state(struct i915_pmu *pmu)static void i915_pmu_unregister_cpuhp_state (struct i915_pmu *pmu) { -WARN_ON (pmu->cpuhp.slot ==CPUHP_INVALID ); -WARN_ON (cpuhp_state_remove_instance (pmu->cpuhp.slot, &pmu->cpuhp.node)); +struct drm_i915_private *i915 =container_of (pmu,typeof (*i915), pmu); + +drm_WARN_ON (&i915->drm, pmu->cpuhp.slot ==CPUHP_INVALID ); +drm_WARN_ON (&i915->drm,cpuhp_state_remove_instance (pmu->cpuhp.slot, &pmu->cpuhp.node));cpuhp_remove_multi_state (pmu->cpuhp.slot); pmu->cpuhp.slot =CPUHP_INVALID ; }
@@ -1121,6 +1123,7 @@ void i915_pmu_register(struct drm_i915_private *i915)if (!pmu->base.attr_groups) goto err_attr; + pmu->base.module =THIS_MODULE ; pmu->base.task_ctx_nr = perf_invalid_context; pmu->base.event_init = i915_pmu_event_init; pmu->base.add = i915_pmu_event_add;
drivers/gpu/drm/panel/panel-simple.c +1 -1
@@ -1717,7 +1717,7 @@ static const struct drm_display_mode frida_frd350h54004_mode = { .vsync_end = 240 + 2 + 6, .vtotal = 240 + 2 + 6 + 2, .vrefresh = 60, - .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC, + .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, };static const struct panel_desc frida_frd350h54004 = {
drivers/gpu/drm/ttm/ttm_bo_vm.c +3 -1
@@ -505,8 +505,10 @@ static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,int ttm_bo_vm_access (struct vm_area_struct *vma,unsigned long addr,void *buf,int len,int write) { -unsigned long offset = (addr) - vma->vm_start;struct ttm_buffer_object *bo = vma->vm_private_data; +unsigned long offset = (addr) - vma->vm_start + + ((vma->vm_pgoff -drm_vma_node_start (&bo->base.vma_node)) + <<PAGE_SHIFT );int ret;if (len <1 || (offset + len) >>PAGE_SHIFT > bo->num_pages)
drivers/gpu/drm/vgem/vgem_drv.c +0 -27
@@ -230,32 +230,6 @@ static int vgem_gem_dumb_create(struct drm_file *file, struct drm_device *dev,return 0 ; } -static int vgem_gem_dumb_map (struct drm_file *file,struct drm_device *dev, -uint32_t handle,uint64_t *offset) -{ -struct drm_gem_object *obj; -int ret; - - obj =drm_gem_object_lookup (file, handle); -if (!obj) -return -ENOENT ; - -if (!obj->filp) { - ret = -EINVAL ; - goto unref; - } - - ret =drm_gem_create_mmap_offset (obj); -if (ret) - goto unref; - - *offset =drm_vma_node_offset_addr (&obj->vma_node); -unref: -drm_gem_object_put_unlocked (obj); - -return ret; -} -static struct drm_ioctl_desc vgem_ioctls[] = {DRM_IOCTL_DEF_DRV (VGEM_FENCE_ATTACH , vgem_fence_attach_ioctl,DRM_RENDER_ALLOW ),DRM_IOCTL_DEF_DRV (VGEM_FENCE_SIGNAL , vgem_fence_signal_ioctl,DRM_RENDER_ALLOW ),
@@ -446,7 +420,6 @@ static struct drm_driver vgem_driver = { .fops = &vgem_driver_fops, .dumb_create = vgem_gem_dumb_create, - .dumb_map_offset = vgem_gem_dumb_map, .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
drivers/gpu/drm/virtio/virtgpu_ioctl.c +1 -0
@@ -179,6 +179,7 @@ static int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data,virtio_gpu_cmd_submit (vgdev, buf, exbuf->size, vfpriv->ctx_id, buflist, out_fence); +dma_fence_put (&out_fence->f);virtio_gpu_notify (vgdev);return 0 ;
drivers/infiniband/hw/bnxt_re/main.c +2 -1
@@ -811,7 +811,8 @@ static int bnxt_re_handle_qp_async_event(struct creq_qp_event *qp_event,struct ib_event event;unsigned int flags; -if (qp->qplib_qp.state ==CMDQ_MODIFY_QP_NEW_STATE_ERR ) { +if (qp->qplib_qp.state ==CMDQ_MODIFY_QP_NEW_STATE_ERR && +rdma_is_kernel_res (&qp->ib_qp.res)) { flags =bnxt_re_lock_cqs (qp);bnxt_qplib_add_flush_qp (&qp->qplib_qp);bnxt_re_unlock_cqs (qp, flags);
drivers/infiniband/hw/hfi1/tid_rdma.c +1 -0
@@ -3215,6 +3215,7 @@ bool hfi1_tid_rdma_wqe_interlock(struct rvt_qp *qp, struct rvt_swqe *wqe)case IB_WR_ATOMIC_CMP_AND_SWP :case IB_WR_ATOMIC_FETCH_AND_ADD :case IB_WR_RDMA_WRITE : +case IB_WR_RDMA_WRITE_WITH_IMM :switch (prev->wr.opcode) {case IB_WR_TID_RDMA_WRITE : req =wqe_to_tid_req (prev);
drivers/infiniband/hw/hns/hns_roce_device.h +0 -2
@@ -66,8 +66,6 @@#define HNS_ROCE_CQE_WCMD_EMPTY_BIT 0x2#define HNS_ROCE_MIN_CQE_CNT 16 -#define HNS_ROCE_RESERVED_SGE 1 -#define HNS_ROCE_MAX_IRQ_NUM 128#define HNS_ROCE_SGE_IN_WQE 2
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +4 -5
@@ -629,7 +629,7 @@ static int hns_roce_v2_post_recv(struct ib_qp *ibqp, wqe_idx = (hr_qp->rq.head + nreq) & (hr_qp->rq.wqe_cnt -1 ); -if (unlikely (wr->num_sge >= hr_qp->rq.max_gs)) { +if (unlikely (wr->num_sge > hr_qp->rq.max_gs)) {ibdev_err (ibdev,"rq:num_sge=%d >= qp->sq.max_gs=%d\n" , wr->num_sge, hr_qp->rq.max_gs); ret = -EINVAL ;
@@ -649,7 +649,6 @@ static int hns_roce_v2_post_recv(struct ib_qp *ibqp,if (wr->num_sge < hr_qp->rq.max_gs) { dseg->lkey =cpu_to_le32 (HNS_ROCE_INVALID_LKEY ); dseg->addr =0 ; - dseg->len =cpu_to_le32 (HNS_ROCE_INVALID_SGE_LENGTH ); }/* rq support inline data */
@@ -783,8 +782,8 @@ static int hns_roce_v2_post_srq_recv(struct ib_srq *ibsrq, }if (wr->num_sge < srq->max_gs) { - dseg[i].len =cpu_to_le32 (HNS_ROCE_INVALID_SGE_LENGTH ); - dseg[i].lkey =cpu_to_le32 (HNS_ROCE_INVALID_LKEY ); + dseg[i].len =0 ; + dseg[i].lkey =cpu_to_le32 (0x100 ); dseg[i].addr =0 ; }
@@ -5098,7 +5097,7 @@ static int hns_roce_v2_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr) attr->srq_limit = limit_wl; attr->max_wr = srq->wqe_cnt -1 ; - attr->max_sge = srq->max_gs -HNS_ROCE_RESERVED_SGE ; + attr->max_sge = srq->max_gs; out:hns_roce_free_cmd_mailbox (hr_dev, mailbox);
drivers/infiniband/hw/hns/hns_roce_hw_v2.h +1 -3
@@ -92,9 +92,7 @@#define HNS_ROCE_V2_CQC_TIMER_ENTRY_SZ PAGE_SIZE#define HNS_ROCE_V2_PAGE_SIZE_SUPPORTED 0xFFFFF000#define HNS_ROCE_V2_MAX_INNER_MTPT_NUM 2 -#define HNS_ROCE_INVALID_LKEY 0x0 -#define HNS_ROCE_INVALID_SGE_LENGTH 0x80000000 - +#define HNS_ROCE_INVALID_LKEY 0x100#define HNS_ROCE_CMQ_TX_TIMEOUT 30000#define HNS_ROCE_V2_UC_RC_SGE_NUM_IN_WQE 2#define HNS_ROCE_V2_RSV_QPS 8
drivers/infiniband/hw/hns/hns_roce_qp.c +2 -3
@@ -386,8 +386,7 @@ static int set_rq_size(struct hns_roce_dev *hr_dev, struct ib_qp_cap *cap,return -EINVAL ; } - hr_qp->rq.max_gs =roundup_pow_of_two (max (1U , cap->max_recv_sge) + -HNS_ROCE_RESERVED_SGE ); + hr_qp->rq.max_gs =roundup_pow_of_two (max (1U , cap->max_recv_sge));if (hr_dev->caps.max_rq_sg <=HNS_ROCE_SGE_IN_WQE ) hr_qp->rq.wqe_shift =ilog2 (hr_dev->caps.max_rq_desc_sz);
@@ -402,7 +401,7 @@ static int set_rq_size(struct hns_roce_dev *hr_dev, struct ib_qp_cap *cap, hr_qp->rq_inl_buf.wqe_cnt =0 ; cap->max_recv_wr = cnt; - cap->max_recv_sge = hr_qp->rq.max_gs -HNS_ROCE_RESERVED_SGE ; + cap->max_recv_sge = hr_qp->rq.max_gs;return 0 ; }
drivers/infiniband/hw/hns/hns_roce_srq.c +1 -1
@@ -297,7 +297,7 @@ int hns_roce_create_srq(struct ib_srq *ib_srq,spin_lock_init (&srq->lock); srq->wqe_cnt =roundup_pow_of_two (init_attr->attr.max_wr +1 ); - srq->max_gs = init_attr->attr.max_sge +HNS_ROCE_RESERVED_SGE ; + srq->max_gs = init_attr->attr.max_sge;if (udata) { ret =ib_copy_from_udata (&ucmd, udata,sizeof (ucmd));
drivers/input/mouse/psmouse-base.c +1 -1
@@ -2042,7 +2042,7 @@ static int psmouse_get_maxproto(char *buffer, const struct kernel_param *kp) {int type = *((unsigned int *)kp->arg); -return sprintf (buffer,"%s" ,psmouse_protocol_by_type (type)->name); +return sprintf (buffer,"%s\n" ,psmouse_protocol_by_type (type)->name); }static int __init psmouse_init (void )
drivers/media/pci/ttpci/budget-core.c +8 -3
@@ -369,20 +369,25 @@ static int budget_register(struct budget *budget) ret = dvbdemux->dmx.add_frontend (&dvbdemux->dmx, &budget->hw_frontend);if (ret <0 ) -return ret; + goto err_release_dmx; budget->mem_frontend.source =DMX_MEMORY_FE ; ret = dvbdemux->dmx.add_frontend (&dvbdemux->dmx, &budget->mem_frontend);if (ret <0 ) -return ret; + goto err_release_dmx; ret = dvbdemux->dmx.connect_frontend (&dvbdemux->dmx, &budget->hw_frontend);if (ret <0 ) -return ret; + goto err_release_dmx;dvb_net_init (&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx);return 0 ; + +err_release_dmx: +dvb_dmxdev_release (&budget->dmxdev); +dvb_dmx_release (&budget->demux); +return ret; }static void budget_unregister (struct budget *budget)
drivers/media/platform/coda/coda-jpeg.c +4 -1
@@ -327,8 +327,11 @@ int coda_jpeg_decode_header(struct coda_ctx *ctx, struct vb2_buffer *vb) "only 8-bit quantization tables supported\n");continue ; } -if (!ctx->params.jpeg_qmat_tab[i]) +if (!ctx->params.jpeg_qmat_tab[i]) { ctx->params.jpeg_qmat_tab[i] =kmalloc (64 ,GFP_KERNEL ); +if (!ctx->params.jpeg_qmat_tab[i]) +return -ENOMEM ; + }memcpy (ctx->params.jpeg_qmat_tab[i], quantization_tables[i].start,64 ); }
drivers/media/platform/davinci/vpss.c +16 -4
@@ -505,19 +505,31 @@ static void vpss_exit(void)static int __init vpss_init (void ) { +int ret; +if (!request_mem_region (VPSS_CLK_CTRL ,4 ,"vpss_clock_control" ))return -EBUSY ; oper_cfg.vpss_regs_base2 =ioremap (VPSS_CLK_CTRL ,4 );if (unlikely (!oper_cfg.vpss_regs_base2)) { -release_mem_region (VPSS_CLK_CTRL ,4 ); -return -ENOMEM ; + ret = -ENOMEM ; + goto err_ioremap; }writel (VPSS_CLK_CTRL_VENCCLKEN | -VPSS_CLK_CTRL_DACCLKEN , oper_cfg.vpss_regs_base2); +VPSS_CLK_CTRL_DACCLKEN , oper_cfg.vpss_regs_base2); + + ret =platform_driver_register (&vpss_driver); +if (ret) + goto err_pd_register; + +return 0 ; -return platform_driver_register (&vpss_driver); +err_pd_register: +iounmap (oper_cfg.vpss_regs_base2); +err_ioremap: +release_mem_region (VPSS_CLK_CTRL ,4 ); +return ret; }subsys_initcall (vpss_init);module_exit (vpss_exit);
drivers/media/platform/qcom/camss/camss.c +20 -10
@@ -504,7 +504,6 @@ static int camss_of_parse_ports(struct camss *camss)return num_subdevs; err_cleanup: -v4l2_async_notifier_cleanup (&camss->notifier);of_node_put (node);return ret; }
@@ -835,29 +834,38 @@ static int camss_probe(struct platform_device *pdev) camss->csid_num =4 ; camss->vfe_num =2 ; }else { -return -EINVAL ; + ret = -EINVAL ; + goto err_free; } camss->csiphy =devm_kcalloc (dev, camss->csiphy_num,sizeof (*camss->csiphy),GFP_KERNEL ); -if (!camss->csiphy) -return -ENOMEM ; +if (!camss->csiphy) { + ret = -ENOMEM ; + goto err_free; + } camss->csid =devm_kcalloc (dev, camss->csid_num,sizeof (*camss->csid),GFP_KERNEL ); -if (!camss->csid) -return -ENOMEM ; +if (!camss->csid) { + ret = -ENOMEM ; + goto err_free; + } camss->vfe =devm_kcalloc (dev, camss->vfe_num,sizeof (*camss->vfe),GFP_KERNEL ); -if (!camss->vfe) -return -ENOMEM ; +if (!camss->vfe) { + ret = -ENOMEM ; + goto err_free; + }v4l2_async_notifier_init (&camss->notifier); num_subdevs =camss_of_parse_ports (camss); -if (num_subdevs <0 ) -return num_subdevs; +if (num_subdevs <0 ) { + ret = num_subdevs; + goto err_cleanup; + } ret =camss_init_subdevices (camss);if (ret <0 )
@@ -936,6 +944,8 @@ static int camss_probe(struct platform_device *pdev)v4l2_device_unregister (&camss->v4l2_dev); err_cleanup:v4l2_async_notifier_cleanup (&camss->notifier); +err_free: +kfree (camss);return ret; }
drivers/net/bonding/bond_main.c +36 -6
84 lines not on this page · raw message
drivers/net/dsa/b53/b53_common.c +2 -0
@@ -1555,6 +1555,8 @@ static int b53_arl_op(struct b53_device *dev, int op, int port,return ret;switch (ret) { +case -ETIMEDOUT : +return ret;case -ENOSPC :dev_dbg (dev->dev,"{%pM,%.4d} no space left in ARL\n" , addr, vid);
drivers/net/ethernet/amazon/ena/ena_netdev.c +14 -16
@@ -2177,13 +2177,10 @@ static void ena_del_napi_in_range(struct ena_adapter *adapter,int i;for (i = first_index; i < first_index + count; i++) { -/* Check if napi was initialized before */ -if (!ENA_IS_XDP_INDEX (adapter, i) || - adapter->ena_napi[i].xdp_ring) -netif_napi_del (&adapter->ena_napi[i].napi); -else -WARN_ON (ENA_IS_XDP_INDEX (adapter, i) && - adapter->ena_napi[i].xdp_ring); +netif_napi_del (&adapter->ena_napi[i].napi); + +WARN_ON (!ENA_IS_XDP_INDEX (adapter, i) && + adapter->ena_napi[i].xdp_ring); } }
@@ -3523,16 +3520,14 @@ static void ena_fw_reset_device(struct work_struct *work) {struct ena_adapter *adapter = container_of(work, struct ena_adapter, reset_task); -struct pci_dev *pdev = adapter->pdev; -if (unlikely (!test_bit (ENA_FLAG_TRIGGER_RESET , &adapter->flags))) { -dev_err (&pdev->dev, -"device reset schedule while reset bit is off\n" ); -return ; - }rtnl_lock (); -ena_destroy_device (adapter, false); -ena_restore_device (adapter); + +if (likely (test_bit (ENA_FLAG_TRIGGER_RESET , &adapter->flags))) { +ena_destroy_device (adapter, false); +ena_restore_device (adapter); + } +rtnl_unlock (); }
@@ -4366,8 +4361,11 @@ static void __ena_shutoff(struct pci_dev *pdev, bool shutdown) netdev->rx_cpu_rmap = NULL; }#endif /* CONFIG_RFS_ACCEL */ -del_timer_sync (&adapter->timer_service); +/* Make sure timer and reset routine won't be called after +* freeing device resources. +*/ +del_timer_sync (&adapter->timer_service);cancel_work_sync (&adapter->reset_task);rtnl_lock ();/* lock released inside the below if-else block */
drivers/net/ethernet/cortina/gemini.c +1 -3
@@ -2389,7 +2389,7 @@ static int gemini_ethernet_port_probe(struct platform_device *pdev)dev_info (dev,"probe %s ID %d\n" ,dev_name (dev), id); - netdev =alloc_etherdev_mq (sizeof (*port),TX_QUEUE_NUM ); + netdev =devm_alloc_etherdev_mqs (dev,sizeof (*port),TX_QUEUE_NUM ,TX_QUEUE_NUM );if (!netdev) {dev_err (dev,"Can't allocate ethernet device #%d\n" , id);return -ENOMEM ;
@@ -2521,7 +2521,6 @@ static int gemini_ethernet_port_probe(struct platform_device *pdev) } port->netdev =NULL ; -free_netdev (netdev);return ret; }
@@ -2530,7 +2529,6 @@ static int gemini_ethernet_port_remove(struct platform_device *pdev)struct gemini_ethernet_port *port =platform_get_drvdata (pdev);gemini_port_remove (port); -free_netdev (port->netdev);return 0 ; }
drivers/net/ethernet/freescale/fec_main.c +2 -2
@@ -3714,11 +3714,11 @@ fec_probe(struct platform_device *pdev) failed_irq: failed_init:fec_ptp_stop (pdev); -if (fep->reg_phy) -regulator_disable (fep->reg_phy); failed_reset:pm_runtime_put_noidle (&pdev->dev);pm_runtime_disable (&pdev->dev); +if (fep->reg_phy) +regulator_disable (fep->reg_phy); failed_regulator:clk_disable_unprepare (fep->clk_ahb); failed_clk_ahb:
drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h +1 -1
@@ -1211,7 +1211,7 @@ struct i40e_aqc_set_vsi_promiscuous_modes {#define I40E_AQC_SET_VSI_PROMISC_BROADCAST 0x04#define I40E_AQC_SET_VSI_DEFAULT 0x08#define I40E_AQC_SET_VSI_PROMISC_VLAN 0x10 -#define I40E_AQC_SET_VSI_PROMISC_TX 0x8000 +#define I40E_AQC_SET_VSI_PROMISC_RX_ONLY 0x8000__le16 seid;#define I40E_AQC_VSI_PROM_CMD_SEID_MASK 0x3FF__le16 vlan_tag;
drivers/net/ethernet/intel/i40e/i40e_common.c +27 -8
@@ -1969,6 +1969,21 @@ i40e_status i40e_aq_set_phy_debug(struct i40e_hw *hw, u8 cmd_flags,return status; } +/** +* i40e_is_aq_api_ver_ge +* @aq: pointer to AdminQ info containing HW API version to compare +* @maj: API major value +* @min: API minor value +* +* Assert whether current HW API version is greater/equal than provided. +**/ +static bool i40e_is_aq_api_ver_ge (struct i40e_adminq_info *aq,u16 maj, +u16 min) +{ +return (aq->api_maj_ver > maj || + (aq->api_maj_ver == maj && aq->api_min_ver >= min)); +} +/** * i40e_aq_add_vsi * @hw: pointer to the hw struct
@@ -2094,18 +2109,16 @@ i40e_status i40e_aq_set_vsi_unicast_promiscuous(struct i40e_hw *hw,if (set) { flags |=I40E_AQC_SET_VSI_PROMISC_UNICAST ; -if (rx_only_promisc && - (((hw->aq.api_maj_ver ==1 ) && (hw->aq.api_min_ver >=5 )) || - (hw->aq.api_maj_ver >1 ))) - flags |=I40E_AQC_SET_VSI_PROMISC_TX ; +if (rx_only_promisc &&i40e_is_aq_api_ver_ge (&hw->aq,1 ,5 )) + flags |=I40E_AQC_SET_VSI_PROMISC_RX_ONLY ; } cmd->promiscuous_flags =cpu_to_le16 (flags); cmd->valid_flags =cpu_to_le16 (I40E_AQC_SET_VSI_PROMISC_UNICAST ); -if (((hw->aq.api_maj_ver >=1 ) && (hw->aq.api_min_ver >=5 )) || - (hw->aq.api_maj_ver >1 )) - cmd->valid_flags |=cpu_to_le16 (I40E_AQC_SET_VSI_PROMISC_TX ); +if (i40e_is_aq_api_ver_ge (&hw->aq,1 ,5 )) + cmd->valid_flags |= +cpu_to_le16 (I40E_AQC_SET_VSI_PROMISC_RX_ONLY ); cmd->seid =cpu_to_le16 (seid); status =i40e_asq_send_command (hw, &desc,NULL ,0 , cmd_details);
@@ -2202,11 +2215,17 @@ enum i40e_status_code i40e_aq_set_vsi_uc_promisc_on_vlan(struct i40e_hw *hw,i40e_fill_default_direct_cmd_desc (&desc, i40e_aqc_opc_set_vsi_promiscuous_modes); -if (enable) +if (enable) { flags |=I40E_AQC_SET_VSI_PROMISC_UNICAST ; +if (i40e_is_aq_api_ver_ge (&hw->aq,1 ,5 )) + flags |=I40E_AQC_SET_VSI_PROMISC_RX_ONLY ; + } cmd->promiscuous_flags =cpu_to_le16 (flags); cmd->valid_flags =cpu_to_le16 (I40E_AQC_SET_VSI_PROMISC_UNICAST ); +if (i40e_is_aq_api_ver_ge (&hw->aq,1 ,5 )) + cmd->valid_flags |= +cpu_to_le16 (I40E_AQC_SET_VSI_PROMISC_RX_ONLY ); cmd->seid =cpu_to_le16 (seid); cmd->vlan_tag =cpu_to_le16 (vid |I40E_AQC_SET_VSI_VLAN_VALID );
drivers/net/ethernet/intel/i40e/i40e_main.c +3 -0
@@ -15352,6 +15352,9 @@ static void i40e_remove(struct pci_dev *pdev)i40e_write_rx_ctl (hw,I40E_PFQF_HENA (0 ),0 );i40e_write_rx_ctl (hw,I40E_PFQF_HENA (1 ),0 ); +while (test_bit (__I40E_RESET_RECOVERY_PENDING, pf->state)) +usleep_range (1000 ,2000 ); +/* no more scheduling of any task */ set_bit (__I40E_SUSPENDED, pf->state);set_bit (__I40E_DOWN, pf->state);
drivers/net/ethernet/intel/igc/igc_main.c +2 -3
@@ -5158,6 +5158,8 @@ static int igc_probe(struct pci_dev *pdev,device_set_wakeup_enable (&adapter->pdev->dev, adapter->flags &IGC_FLAG_WOL_SUPPORTED ); +igc_ptp_init (adapter); +/* reset the hardware with the new settings */ igc_reset (adapter);
@@ -5174,9 +5176,6 @@ static int igc_probe(struct pci_dev *pdev,/* carrier off reporting is important to ethtool even BEFORE open */ netif_carrier_off (netdev); -/* do hw tstamp init after resetting */ -igc_ptp_init (adapter); -/* Check if Media Autosense is enabled */ adapter->ei = *ei;
drivers/net/ethernet/intel/igc/igc_ptp.c +0 -2
@@ -608,8 +608,6 @@ void igc_ptp_init(struct igc_adapter *adapter) adapter->tstamp_config.rx_filter =HWTSTAMP_FILTER_NONE ; adapter->tstamp_config.tx_type =HWTSTAMP_TX_OFF ; -igc_ptp_reset (adapter); - adapter->ptp_clock =ptp_clock_register (&adapter->ptp_caps, &adapter->pdev->dev);if (IS_ERR (adapter->ptp_clock)) {
drivers/net/hyperv/netvsc_drv.c +1 -1
@@ -502,7 +502,7 @@ static int netvsc_vf_xmit(struct net_device *net, struct net_device *vf_netdev,int rc; skb->dev = vf_netdev; - skb->queue_mapping =qdisc_skb_cb (skb)->slave_dev_queue_mapping; +skb_record_rx_queue (skb,qdisc_skb_cb (skb)->slave_dev_queue_mapping); rc =dev_queue_xmit (skb);if (likely (rc ==NET_XMIT_SUCCESS || rc ==NET_XMIT_CN )) {
drivers/net/ipvlan/ipvlan_main.c +22 -5
@@ -106,12 +106,21 @@ static void ipvlan_port_destroy(struct net_device *dev)kfree (port); } +#define IPVLAN_ALWAYS_ON_OFLOADS \ + (NETIF_F_SG | NETIF_F_HW_CSUM | \ + NETIF_F_GSO_ROBUST | NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ENCAP_ALL) + +#define IPVLAN_ALWAYS_ON \ + (IPVLAN_ALWAYS_ON_OFLOADS | NETIF_F_LLTX | NETIF_F_VLAN_CHALLENGED) +#define IPVLAN_FEATURES \ - (NETIF_F_SG | NETIF_F_CSUM_MASK | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \ + (NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \ NETIF_F_GSO | NETIF_F_ALL_TSO | NETIF_F_GSO_ROBUST | \ NETIF_F_GRO | NETIF_F_RXCSUM | \ NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_STAG_FILTER) +/* NETIF_F_GSO_ENCAP_ALL NETIF_F_GSO_SOFTWARE Newly added */ +#define IPVLAN_STATE_MASK \ ((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
@@ -125,7 +134,9 @@ static int ipvlan_init(struct net_device *dev) dev->state = (dev->state & ~IPVLAN_STATE_MASK ) | (phy_dev->state &IPVLAN_STATE_MASK ); dev->features = phy_dev->features &IPVLAN_FEATURES ; - dev->features |=NETIF_F_LLTX |NETIF_F_VLAN_CHALLENGED ; + dev->features |=IPVLAN_ALWAYS_ON ; + dev->vlan_features = phy_dev->vlan_features &IPVLAN_FEATURES ; + dev->vlan_features |=IPVLAN_ALWAYS_ON_OFLOADS ; dev->hw_enc_features |= dev->features; dev->gso_max_size = phy_dev->gso_max_size; dev->gso_max_segs = phy_dev->gso_max_segs;
@@ -227,7 +238,14 @@ static netdev_features_t ipvlan_fix_features(struct net_device *dev, {struct ipvl_dev *ipvlan =netdev_priv (dev); -return features & (ipvlan->sfeatures | ~IPVLAN_FEATURES ); + features |=NETIF_F_ALL_FOR_ALL ; + features &= (ipvlan->sfeatures | ~IPVLAN_FEATURES ); + features =netdev_increment_features (ipvlan->phy_dev->features, + features, features); + features |=IPVLAN_ALWAYS_ON ; + features &= (IPVLAN_FEATURES |IPVLAN_ALWAYS_ON ); + +return features; }static void ipvlan_change_rx_flags (struct net_device *dev,int change)
@@ -734,10 +752,9 @@ static int ipvlan_device_event(struct notifier_block *unused,case NETDEV_FEAT_CHANGE :list_for_each_entry (ipvlan, &port->ipvlans, pnode) { - ipvlan->dev->features = dev->features &IPVLAN_FEATURES ; ipvlan->dev->gso_max_size = dev->gso_max_size; ipvlan->dev->gso_max_segs = dev->gso_max_segs; -netdev_features_change (ipvlan->dev); +netdev_update_features (ipvlan->dev); }break ;
drivers/of/address.c +5 -0
@@ -980,6 +980,11 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz/* Don't error out as we'd break some existing DTs */ continue ; } +if (range.cpu_addr ==OF_BAD_ADDR ) { +pr_err ("translation of DMA address(%llx) to CPU address failed node(%pOF)\n" , + range.bus_addr, node); +continue ; + } dma_offset = range.cpu_addr - range.bus_addr;/* Take lower and upper limits */
drivers/opp/core.c +12 -7
@@ -862,8 +862,10 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)* have OPP table for the device, while others don't and * opp_set_rate() just needs to behave like clk_set_rate(). */ -if (!_get_opp_count (opp_table)) -return 0 ; +if (!_get_opp_count (opp_table)) { + ret =0 ; + goto put_opp_table; + }if (!opp_table->required_opp_tables && !opp_table->regulators && !opp_table->paths) {
@@ -874,7 +876,7 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) ret =_set_opp_bw (opp_table,NULL , dev, true);if (ret) -return ret; + goto put_opp_table;if (opp_table->regulator_enabled) {regulator_disable (opp_table->regulators[0 ]);
@@ -901,10 +903,13 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)/* Return early if nothing to do */ if (old_freq == freq) { -dev_dbg (dev,"%s: old/new frequencies (%lu Hz) are same, nothing to do\n" , - __func__, freq); - ret =0 ; - goto put_opp_table; +if (!opp_table->required_opp_tables && !opp_table->regulators && + !opp_table->paths) { +dev_dbg (dev,"%s: old/new frequencies (%lu Hz) are same, nothing to do\n" , + __func__, freq); + ret =0 ; + goto put_opp_table; + } }/*
drivers/pci/hotplug/s390_pci_hpc.c +5 -7
@@ -83,21 +83,19 @@ static int disable_slot(struct hotplug_slot *hotplug_slot) struct zpci_dev *zdev = container_of(hotplug_slot, struct zpci_dev, hotplug_slot);struct pci_dev *pdev; -struct zpci_bus *zbus = zdev->zbus;int rc;if (!zpci_fn_configured (zdev->state))return -EIO ; - pdev =pci_get_slot (zbus->bus, zdev->devfn); -if (pdev) { -if (pci_num_vf (pdev)) -return -EBUSY ; - -pci_stop_and_remove_bus_device_locked (pdev); + pdev =pci_get_slot (zdev->zbus->bus, zdev->devfn); +if (pdev &&pci_num_vf (pdev)) {pci_dev_put (pdev); +return -EBUSY ; } +zpci_remove_device (zdev); + rc =zpci_disable_device (zdev);if (rc)return rc;
drivers/rtc/rtc-goldfish.c +1 -0
@@ -73,6 +73,7 @@ static int goldfish_rtc_set_alarm(struct device *dev, rtc_alarm64 =rtc_tm_to_time64 (&alrm->time) *NSEC_PER_SEC ;writel ((rtc_alarm64 >>32 ), base +TIMER_ALARM_HIGH );writel (rtc_alarm64, base +TIMER_ALARM_LOW ); +writel (1 , base +TIMER_IRQ_ENABLED ); }else {/* * if this function was called with enabled=0
drivers/s390/scsi/zfcp_fsf.c +2 -2
@@ -434,7 +434,7 @@ static void zfcp_fsf_req_complete(struct zfcp_fsf_req *req)return ; } -del_timer (&req->timer); +del_timer_sync (&req->timer);zfcp_fsf_protstatus_eval (req);zfcp_fsf_fsfstatus_eval (req); req->handler (req);
@@ -867,7 +867,7 @@ static int zfcp_fsf_req_send(struct zfcp_fsf_req *req) req->qdio_req.qdio_outb_usage =atomic_read (&qdio->req_q_free); req->issued =get_tod_clock ();if (zfcp_qdio_send (qdio, &req->qdio_req)) { -del_timer (&req->timer); +del_timer_sync (&req->timer);/* lookup request again, list might have changed */ zfcp_reqlist_find_rm (adapter->req_list, req_id);zfcp_erp_adapter_reopen (adapter,0 ,"fsrs__1" );
drivers/scsi/libfc/fc_disc.c +9 -3
@@ -581,8 +581,12 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,if (PTR_ERR (fp) == -FC_EX_CLOSED ) goto out; -if (IS_ERR (fp)) - goto redisc; +if (IS_ERR (fp)) { +mutex_lock (&disc->disc_mutex); +fc_disc_restart (disc); +mutex_unlock (&disc->disc_mutex); + goto out; + } cp =fc_frame_payload_get (fp,sizeof (*cp));if (!cp)
@@ -609,7 +613,7 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp, new_rdata->disc_id = disc->disc_id;fc_rport_login (new_rdata); } - goto out; + goto free_fp; } rdata->disc_id = disc->disc_id;mutex_unlock (&rdata->rp_mutex);
@@ -626,6 +630,8 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,fc_disc_restart (disc);mutex_unlock (&disc->disc_mutex); } +free_fp: +fc_frame_free (fp); out:kref_put (&rdata->kref, fc_rport_destroy);if (!IS_ERR (fp))
drivers/scsi/qla2xxx/qla_os.c +0 -4
@@ -2829,10 +2829,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)/* This may fail but that's ok */ pci_enable_pcie_error_reporting (pdev); -/* Turn off T10-DIF when FC-NVMe is enabled */ -if (ql2xnvmeenable) - ql2xenabledif =0 ; - ha =kzalloc (sizeof (struct qla_hw_data ),GFP_KERNEL );if (!ha) { ql_log_pci(ql_log_fatal, pdev, 0x0009,
drivers/scsi/ufs/ti-j721e-ufs.c +1 -0
@@ -38,6 +38,7 @@ static int ti_j721e_ufs_probe(struct platform_device *pdev)/* Select MPHY refclk frequency */ clk =devm_clk_get (dev,NULL );if (IS_ERR (clk)) { + ret =PTR_ERR (clk);dev_err (dev,"Cannot claim MPHY clock.\n" ); goto clk_err; }
drivers/scsi/ufs/ufs_quirks.h +1 -0
@@ -12,6 +12,7 @@#define UFS_ANY_VENDOR 0xFFFF#define UFS_ANY_MODEL "ANY_MODEL" +#define UFS_VENDOR_MICRON 0x12C#define UFS_VENDOR_TOSHIBA 0x198#define UFS_VENDOR_SAMSUNG 0x1CE#define UFS_VENDOR_SKHYNIX 0x1AD
drivers/scsi/ufs/ufshcd-pci.c +14 -2
@@ -67,11 +67,23 @@ static int ufs_intel_link_startup_notify(struct ufs_hba *hba,return err; } +static int ufs_intel_ehl_init (struct ufs_hba *hba) +{ + hba->quirks |=UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8 ; +return 0 ; +} +static struct ufs_hba_variant_ops ufs_intel_cnl_hba_vops = { .name ="intel-pci" , .link_startup_notify = ufs_intel_link_startup_notify, }; +static struct ufs_hba_variant_ops ufs_intel_ehl_hba_vops = { + .name ="intel-pci" , + .init = ufs_intel_ehl_init, + .link_startup_notify = ufs_intel_link_startup_notify, +}; +#ifdef CONFIG_PM_SLEEP /** * ufshcd_pci_suspend - suspend power management function
@@ -200,8 +212,8 @@ static const struct dev_pm_ops ufshcd_pci_pm_ops = {static const struct pci_device_id ufshcd_pci_tbl[] = { {PCI_VENDOR_ID_SAMSUNG ,0xC00C ,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 ,0 }, {PCI_VDEVICE (INTEL ,0x9DFA ), (kernel_ulong_t)&ufs_intel_cnl_hba_vops }, - {PCI_VDEVICE (INTEL ,0x4B41 ), (kernel_ulong_t)&ufs_intel_cnl_hba_vops }, - {PCI_VDEVICE (INTEL ,0x4B43 ), (kernel_ulong_t)&ufs_intel_cnl_hba_vops }, + {PCI_VDEVICE (INTEL ,0x4B41 ), (kernel_ulong_t)&ufs_intel_ehl_hba_vops }, + {PCI_VDEVICE (INTEL ,0x4B43 ), (kernel_ulong_t)&ufs_intel_ehl_hba_vops }, { }/* terminate list */ };
drivers/scsi/ufs/ufshcd.c +117 -13
202 lines not on this page · raw message
drivers/scsi/ufs/ufshcd.h +37 -1
@@ -520,6 +520,41 @@ enum ufshcd_quirks {* ops (get_ufs_hci_version) to get the correct version. */ UFSHCD_QUIRK_BROKEN_UFS_HCI_VERSION =1 <<5 , + +/* +* Clear handling for transfer/task request list is just opposite. +*/ +UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR =1 <<6 , + +/* +* This quirk needs to be enabled if host controller doesn't allow +* that the interrupt aggregation timer and counter are reset by s/w. +*/ +UFSHCI_QUIRK_SKIP_RESET_INTR_AGGR =1 <<7 , + +/* +* This quirks needs to be enabled if host controller cannot be +* enabled via HCE register. +*/ +UFSHCI_QUIRK_BROKEN_HCE =1 <<8 , + +/* +* This quirk needs to be enabled if the host controller regards +* resolution of the values of PRDTO and PRDTL in UTRD as byte. +*/ +UFSHCD_QUIRK_PRDT_BYTE_GRAN =1 <<9 , + +/* +* This quirk needs to be enabled if the host controller reports +* OCS FATAL ERROR with device error through sense data +*/ +UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR =1 <<10 , + +/* +* This quirk needs to be enabled if the host controller has +* auto-hibernate capability but it doesn't work. +*/ + UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8 = 1 << 11, }; enum ufshcd_caps {
@@ -786,7 +821,8 @@ return true;static inline bool ufshcd_is_auto_hibern8_supported (struct ufs_hba *hba) { -return (hba->capabilities &MASK_AUTO_HIBERN8_SUPPORT ); +return (hba->capabilities &MASK_AUTO_HIBERN8_SUPPORT ) && + !(hba->quirks &UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8 ); }static inline bool ufshcd_is_auto_hibern8_enabled (struct ufs_hba *hba)
drivers/spi/Kconfig +3 -0
@@ -999,4 +999,7 @@ config SPI_SLAVE_SYSTEM_CONTROL endif # SPI_SLAVE +config SPI_DYNAMIC + def_bool ACPI || OF_DYNAMIC || SPI_SLAVE + endif # SPI
drivers/spi/spi-stm32.c +24 -3
@@ -13,6 +13,7 @@#include <linux/iopoll.h> #include <linux/module.h> #include <linux/of_platform.h> +#include <linux/pinctrl/consumer.h> #include <linux/pm_runtime.h> #include <linux/reset.h> #include <linux/spi/spi.h>
@@ -1996,6 +1997,8 @@ static int stm32_spi_remove(struct platform_device *pdev)pm_runtime_disable (&pdev->dev); +pinctrl_pm_select_sleep_state (&pdev->dev); +return 0 ; }
@@ -2007,13 +2010,18 @@ static int stm32_spi_runtime_suspend(struct device *dev)clk_disable_unprepare (spi->clk); -return 0 ; +return pinctrl_pm_select_sleep_state (dev); }static int stm32_spi_runtime_resume (struct device *dev) {struct spi_master *master =dev_get_drvdata (dev);struct stm32_spi *spi =spi_master_get_devdata (master); +int ret; + + ret =pinctrl_pm_select_default_state (dev); +if (ret) +return ret;return clk_prepare_enable (spi->clk); }
@@ -2043,10 +2051,23 @@ static int stm32_spi_resume(struct device *dev)return ret; ret =spi_master_resume (master); -if (ret) +if (ret) {clk_disable_unprepare (spi->clk); +return ret; + } - return ret; + ret =pm_runtime_get_sync (dev); +if (ret) { +dev_err (dev,"Unable to power device:%d\n" , ret); +return ret; + } + + spi->cfg->config (spi); + +pm_runtime_mark_last_busy (dev); +pm_runtime_put_autosuspend (dev); + + return 0; }#endif
drivers/spi/spi.c +20 -1
@@ -475,6 +475,12 @@ static LIST_HEAD(spi_controller_list);*/ static DEFINE_MUTEX (board_lock); +/* +* Prevents addition of devices with same chip select and +* addition of devices below an unregistering controller. +*/ +static DEFINE_MUTEX (spi_add_lock); +/** * spi_alloc_device - Allocate a new SPI device * @ctlr: Controller to which device is connected
@@ -554,7 +560,6 @@ static int spi_dev_check(struct device *dev, void *data)*/ int spi_add_device (struct spi_device *spi) { -static DEFINE_MUTEX (spi_add_lock);struct spi_controller *ctlr = spi->controller;struct device *dev = ctlr->dev.parent;int status;
@@ -582,6 +587,13 @@ int spi_add_device(struct spi_device *spi) goto done; } +/* Controller may unregister concurrently */ +if (IS_ENABLED (CONFIG_SPI_DYNAMIC ) && + !device_is_registered (&ctlr->dev)) { + status = -ENODEV ; + goto done; + } +/* Descriptors take precedence */ if (ctlr->cs_gpiods) spi->cs_gpiod = ctlr->cs_gpiods[spi->chip_select];
@@ -2764,6 +2776,10 @@ void spi_unregister_controller(struct spi_controller *ctlr)struct spi_controller *found;int id = ctlr->bus_num; +/* Prevent addition of new devices, unregister existing ones */ +if (IS_ENABLED (CONFIG_SPI_DYNAMIC )) +mutex_lock (&spi_add_lock); +device_for_each_child (&ctlr->dev,NULL , __unregister);/* First make sure that this controller was ever added */
@@ -2784,6 +2800,9 @@ void spi_unregister_controller(struct spi_controller *ctlr)if (found == ctlr)idr_remove (&spi_master_idr, id);mutex_unlock (&board_lock); + +if (IS_ENABLED (CONFIG_SPI_DYNAMIC )) +mutex_unlock (&spi_add_lock); }EXPORT_SYMBOL_GPL (spi_unregister_controller);
drivers/target/target_core_user.c +1 -1
@@ -601,7 +601,7 @@ static inline void tcmu_flush_dcache_range(void *vaddr, size_t size) size =round_up (size+offset,PAGE_SIZE );while (size) { -flush_dcache_page (virt_to_page (start)); +flush_dcache_page (vmalloc_to_page (start)); start +=PAGE_SIZE ; size -=PAGE_SIZE ; }
drivers/vfio/pci/vfio_pci_private.h +2 -0
@@ -33,12 +33,14 @@struct vfio_pci_ioeventfd {struct list_head next; +struct vfio_pci_device *vdev;struct virqfd *virqfd;void __iomem *addr;uint64_t data;loff_t pos;int bar;int count; +bool test_mem; };struct vfio_pci_irq_ctx {
drivers/vfio/pci/vfio_pci_rdwr.c +96 -24
205 lines not on this page · raw message
drivers/vfio/vfio_iommu_type1.c +66 -5
106 lines not on this page · raw message
drivers/video/fbdev/efifb.c +1 -1
@@ -453,7 +453,7 @@ static int efifb_probe(struct platform_device *dev) info->apertures->ranges[0 ].base = efifb_fix.smem_start; info->apertures->ranges[0 ].size = size_remap; -if (efi_enabled (EFI_BOOT ) && +if (efi_enabled (EFI_MEMMAP ) && !efi_mem_desc_lookup (efifb_fix.smem_start, &md)) {if ((efifb_fix.smem_start + efifb_fix.smem_len) > (md.phys_addr + (md.num_pages <<EFI_PAGE_SHIFT ))) {
drivers/virtio/virtio_ring.c +3 -0
@@ -1960,6 +1960,9 @@ bool virtqueue_poll(struct virtqueue *_vq, unsigned last_used_idx) {struct vring_virtqueue *vq =to_vvq (_vq); +if (unlikely (vq->broken)) +return false; +virtio_mb (vq->weak_barriers);return vq->packed_ring ?virtqueue_poll_packed (_vq, last_used_idx) :virtqueue_poll_split (_vq, last_used_idx);
drivers/xen/swiotlb-xen.c +7 -1
@@ -335,6 +335,7 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,int order =get_order (size);phys_addr_t phys;u64 dma_mask =DMA_BIT_MASK (32 ); +struct page *page;if (hwdev && hwdev->coherent_dma_mask) dma_mask = hwdev->coherent_dma_mask;
@@ -346,9 +347,14 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,/* Convert the size to actually allocated. */ size =1UL << (order +XEN_PAGE_SHIFT ); +if (is_vmalloc_addr (vaddr)) + page =vmalloc_to_page (vaddr); +else + page =virt_to_page (vaddr); +if (!WARN_ON ((dev_addr + size -1 > dma_mask) ||range_straddles_page_boundary (phys, size)) && -TestClearPageXenRemapped (virt_to_page (vaddr))) +TestClearPageXenRemapped (page))xen_destroy_contiguous_region (phys, order);xen_free_coherent_pages (hwdev, size, vaddr, (dma_addr_t )phys, attrs);
fs/afs/dynroot.c +11 -9
@@ -382,15 +382,17 @@ void afs_dynroot_depopulate(struct super_block *sb) net->dynroot_sb =NULL ;mutex_unlock (&net->proc_cells_lock); -inode_lock (root->d_inode); - -/* Remove all the pins for dirs created for manually added cells */ -list_for_each_entry_safe (subdir, tmp, &root->d_subdirs, d_child) { -if (subdir->d_fsdata) { - subdir->d_fsdata =NULL ; -dput (subdir); +if (root) { +inode_lock (root->d_inode); + +/* Remove all the pins for dirs created for manually added cells */ +list_for_each_entry_safe (subdir, tmp, &root->d_subdirs, d_child) { +if (subdir->d_fsdata) { + subdir->d_fsdata =NULL ; +dput (subdir); + } } - } -inode_unlock (root->d_inode); +inode_unlock (root->d_inode); + } }
fs/afs/fs_operation.c +1 -0
@@ -235,6 +235,7 @@ int afs_put_operation(struct afs_operation *op)afs_end_cursor (&op->ac);afs_put_serverlist (op->net, op->server_list);afs_put_volume (op->net, op->volume, afs_volume_trace_put_put_op); +key_put (op->key);kfree (op);return ret; }
fs/ceph/mds_client.c +2 -1
@@ -4361,7 +4361,6 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc) goto err_mdsc; } - fsc->mdsc = mdsc;init_completion (&mdsc->safe_umount_waiters);init_waitqueue_head (&mdsc->session_close_wq);INIT_LIST_HEAD (&mdsc->waiting_for_map);
@@ -4416,6 +4415,8 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)strscpy (mdsc->nodename,utsname ()->nodename,sizeof (mdsc->nodename)); + + fsc->mdsc = mdsc;return 0 ; err_mdsmap:
fs/eventpoll.c +13 -13
@@ -1994,9 +1994,11 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests)* not already there, and calling reverse_path_check() * during ep_insert(). */ -if (list_empty (&epi->ffd.file->f_tfile_llink)) +if (list_empty (&epi->ffd.file->f_tfile_llink)) { +get_file (epi->ffd.file);list_add (&epi->ffd.file->f_tfile_llink, &tfile_check_list); + } } }mutex_unlock (&ep->mtx);
@@ -2040,6 +2042,7 @@ static void clear_tfile_check_list(void) file = list_first_entry(&tfile_check_list, struct file, f_tfile_llink);list_del_init (&file->f_tfile_llink); +fput (file); }INIT_LIST_HEAD (&tfile_check_list); }
@@ -2200,25 +2203,22 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds, full_check =1 ;if (is_file_epoll (tf.file)) { error = -ELOOP ; -if (ep_loop_check (ep, tf.file) !=0 ) { -clear_tfile_check_list (); +if (ep_loop_check (ep, tf.file) !=0 ) goto error_tgt_fput; - } - }else + }else { +get_file (tf.file);list_add (&tf.file->f_tfile_llink, &tfile_check_list); + } error =epoll_mutex_lock (&ep->mtx,0 , nonblock); -if (error) { -out_del: -list_del (&tf.file->f_tfile_llink); +if (error) goto error_tgt_fput; - }if (is_file_epoll (tf.file)) { tep = tf.file->private_data; error =epoll_mutex_lock (&tep->mtx,1 , nonblock);if (error) {mutex_unlock (&ep->mtx); - goto out_del; + goto error_tgt_fput; } } }
@@ -2239,8 +2239,6 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds, error =ep_insert (ep, epds, tf.file, fd, full_check); }else error = -EEXIST ; -if (full_check) -clear_tfile_check_list ();break ;case EPOLL_CTL_DEL :if (epi)
@@ -2263,8 +2261,10 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds,mutex_unlock (&ep->mtx); error_tgt_fput: -if (full_check) +if (full_check) { +clear_tfile_check_list ();mutex_unlock (&epmutex); + }fdput (tf); error_fput:
fs/ext4/block_validity.c +39 -48
167 lines not on this page · raw message
fs/ext4/ext4.h +3 -3
@@ -3363,9 +3363,9 @@ extern void ext4_release_system_zone(struct super_block *sb);extern int ext4_setup_system_zone (struct super_block *sb);extern int __init ext4_init_system_zone (void );extern void ext4_exit_system_zone (void ); -extern int ext4_data_block_valid (struct ext4_sb_info *sbi, -ext4_fsblk_t start_blk, -unsigned int count); +extern int ext4_inode_block_valid (struct inode *inode, +ext4_fsblk_t start_blk, +unsigned int count);extern int ext4_check_blockref (const char *,unsigned int ,struct inode *,__le32 *,unsigned int );
fs/ext4/extents.c +6 -10
@@ -340,7 +340,7 @@ static int ext4_valid_extent(struct inode *inode, struct ext4_extent *ext)*/ if (lblock + len <= lblock)return 0 ; -return ext4_data_block_valid (EXT4_SB (inode->i_sb), block, len); +return ext4_inode_block_valid (inode, block, len); } static int ext4_valid_extent_idx(struct inode *inode,
@@ -348,7 +348,7 @@ static int ext4_valid_extent_idx(struct inode *inode, {ext4_fsblk_t block =ext4_idx_pblock (ext_idx); -return ext4_data_block_valid (EXT4_SB (inode->i_sb), block,1 ); +return ext4_inode_block_valid (inode, block,1 ); } static int ext4_valid_extent_entries(struct inode *inode,
@@ -507,14 +507,10 @@ __read_extent_tree_block(const char *function, unsigned int line, }if (buffer_verified (bh) && !(flags &EXT4_EX_FORCE_CACHE ))return bh; -if (!ext4_has_feature_journal (inode->i_sb) || - (inode->i_ino != -le32_to_cpu (EXT4_SB (inode->i_sb)->s_es->s_journal_inum))) { - err =__ext4_ext_check (function, line, inode, -ext_block_hdr (bh), depth, pblk); -if (err) - goto errout; - } + err =__ext4_ext_check (function, line, inode, +ext_block_hdr (bh), depth, pblk); +if (err) + goto errout;set_buffer_verified (bh);/* * If this is a leaf block, cache all of its entries
fs/ext4/file.c +4 -0
@@ -428,6 +428,10 @@ static ssize_t ext4_dio_write_checks(struct kiocb *iocb, struct iov_iter *from,*/ if (*ilock_shared && (!IS_NOSEC (inode) || *extend || !ext4_overwrite_io (inode, offset, count))) { +if (iocb->ki_flags &IOCB_NOWAIT ) { + ret = -EAGAIN ; + goto out; + }inode_unlock_shared (inode); *ilock_shared = false;inode_lock (inode);
fs/ext4/indirect.c +2 -4
@@ -858,8 +858,7 @@ static int ext4_clear_blocks(handle_t *handle, struct inode *inode,else if (ext4_should_journal_data (inode)) flags |=EXT4_FREE_BLOCKS_FORGET ; -if (!ext4_data_block_valid (EXT4_SB (inode->i_sb), block_to_free, - count)) { +if (!ext4_inode_block_valid (inode, block_to_free, count)) {EXT4_ERROR_INODE (inode,"attempt to clear invalid " "blocks %llu len %lu" , (unsigned long long ) block_to_free, count);
@@ -1004,8 +1003,7 @@ static void ext4_free_branches(handle_t *handle, struct inode *inode,if (!nr)continue ;/* A hole */ -if (!ext4_data_block_valid (EXT4_SB (inode->i_sb), - nr,1 )) { +if (!ext4_inode_block_valid (inode, nr,1 )) { EXT4_ERROR_INODE(inode, "invalid indirect mapped " "block %lu (level %d)",
fs/ext4/inode.c +2 -3
@@ -394,8 +394,7 @@ static int __check_block_validity(struct inode *inode, const char *func, (inode->i_ino == le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_journal_inum)))return 0 ; -if (!ext4_data_block_valid (EXT4_SB (inode->i_sb), map->m_pblk, - map->m_len)) { +if (!ext4_inode_block_valid (inode, map->m_pblk, map->m_len)) { ext4_error_inode(inode, func, line, map->m_pblk, "lblock %lu mapped to illegal pblock %llu " "(length %d)", (unsigned long) map->m_lblk,
@@ -4760,7 +4759,7 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino, ret =0 ;if (ei->i_file_acl && - !ext4_data_block_valid (EXT4_SB (sb), ei->i_file_acl,1 )) { + !ext4_inode_block_valid (inode, ei->i_file_acl,1 )) {ext4_error_inode (inode, function, line,0 ,"iget: bad extended attribute block %llu" , ei->i_file_acl);
fs/ext4/mballoc.c +2 -2
@@ -3090,7 +3090,7 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac, block =ext4_grp_offs_to_block (sb, &ac->ac_b_ex); len =EXT4_C2B (sbi, ac->ac_b_ex.fe_len); -if (!ext4_data_block_valid (sbi, block, len)) { +if (!ext4_inode_block_valid (ac->ac_inode, block, len)) {ext4_error (sb,"Allocating blocks %llu-%llu which overlap " "fs metadata" , block, block+len);/* File system mounted not to panic on error
@@ -4915,7 +4915,7 @@ void ext4_free_blocks(handle_t *handle, struct inode *inode, sbi =EXT4_SB (sb);if (!(flags &EXT4_FREE_BLOCKS_VALIDATED ) && - !ext4_data_block_valid (sbi, block, count)) { + !ext4_inode_block_valid (inode, block, count)) {ext4_error (sb,"Freeing blocks not in datazone - " "block = %llu, count = %lu" , block, count); goto error_return;
fs/ext4/namei.c +16 -6
@@ -1396,8 +1396,8 @@ int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size, ext4_match(dir, fname, de)) {/* found a match - just to be sure, do * a full check */ -if (ext4_check_dir_entry (dir,NULL , de, bh, bh->b_data, - bh->b_size, offset)) +if (ext4_check_dir_entry (dir,NULL , de, bh, search_buf, + buf_size, offset))return -1 ; *res_dir = de;return 1 ;
@@ -1858,7 +1858,7 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, blocksize, hinfo, map); map -= count;dx_sort_map (map, count); -/* Split the existing block in the middle, size-wise */ +/* Ensure that neither split block is over half full */ size =0 ; move =0 ;for (i = count-1 ; i >=0 ; i--) {
@@ -1868,8 +1868,18 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, size += map[i].size; move++; } -/* map index at which we will split */ - split = count - move; +/* +* map index at which we will split +* +* If the sum of active entries didn't exceed half the block size, just +* split it in half by count; each resulting block will have at least +* half the space free. +*/ +if (i >0 ) + split = count - move; +else + split = count/2 ; + hash2 = map[split].hash; continued = hash2 == map[split -1 ].hash; dxtrace(printk(KERN_INFO "Split block %lu at %x, %i/%i\n",
@@ -2472,7 +2482,7 @@ int ext4_generic_delete_entry(handle_t *handle, de = (struct ext4_dir_entry_2 *)entry_buf;while (i < buf_size - csum_size) {if (ext4_check_dir_entry (dir,NULL , de, bh, - bh->b_data, bh->b_size, i)) + entry_buf, buf_size, i))return -EFSCORRUPTED ;if (de == de_del) {if (pde)
fs/f2fs/compress.c +6 -0
@@ -1310,6 +1310,12 @@ static int f2fs_write_raw_pages(struct compress_ctx *cc,congestion_wait (BLK_RW_ASYNC ,DEFAULT_IO_TIMEOUT );lock_page (cc->rpages[i]); + +if (!PageDirty (cc->rpages[i])) { +unlock_page (cc->rpages[i]); +continue ; + } +clear_page_dirty_for_io (cc->rpages[i]); goto retry_write; }
fs/f2fs/node.c +7 -3
@@ -1924,8 +1924,12 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi, goto continue_unlock; } -/* flush inline_data, if it's async context. */ -if (do_balance &&is_inline_node (page)) { +/* flush inline_data/inode, if it's async context. */ +if (!do_balance) + goto write_node; + +/* flush inline_data */ +if (is_inline_node (page)) {clear_inline_node (page);unlock_page (page);flush_inline_data (sbi,ino_of_node (page));
@@ -1938,7 +1942,7 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,if (flush_dirty_inode (page)) goto lock_node; } - +write_node:f2fs_wait_on_page_writeback (page,NODE , true, true);if (!clear_page_dirty_for_io (page))
fs/fat/fatent.c +3 -0
@@ -657,6 +657,9 @@ static void fat_ra_init(struct super_block *sb, struct fatent_ra *ra,unsigned long ra_pages = sb->s_bdi->ra_pages;unsigned int reada_blocks; +if (fatent->entry >= ent_limit) +return ; +if (ra_pages > sb->s_bdi->io_pages) ra_pages =rounddown (ra_pages, sb->s_bdi->io_pages); reada_blocks = ra_pages << (PAGE_SHIFT - sb->s_blocksize_bits +1 );
fs/io_uring.c +29 -4
@@ -7609,6 +7609,33 @@ static bool io_timeout_remove_link(struct io_ring_ctx *ctx,return found; } +static bool io_cancel_link_cb (struct io_wq_work *work,void *data) +{ + return io_match_link(container_of(work, struct io_kiocb, work), data); +} + +static void io_attempt_cancel (struct io_ring_ctx *ctx,struct io_kiocb *req) +{ +enum io_wq_cancel cret; + +/* cancel this particular work, if it's running */ + cret =io_wq_cancel_work (ctx->io_wq, &req->work); +if (cret !=IO_WQ_CANCEL_NOTFOUND )
Lines of this file are not shown. View the raw message.
net/can/j1939/transport.c +70 -19
89 lines not on this page · raw message
net/core/filter.c +62 -13
75 lines not on this page · raw message
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +2 -0
Lines of this file are not shown. View the raw message.
scripts/kconfig/qconf.cc +35 -37
72 lines not on this page · raw message
sound/soc/intel/atom/sst-mfld-platform-pcm.c +3 -2
Lines of this file are not shown. View the raw message.
sound/soc/qcom/qdsp6/q6afe-dai.c +105 -105
210 lines not on this page · raw message
tools/testing/selftests/cgroup/cgroup_util.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/kvm/x86_64/debug_regs.c +2 -2
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.