Linux 5.4.61
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.61 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/kbuild/index.rst | 1 Documentation/kbuild/kbuild.rst | 5 Documentation/kbuild/llvm.rst | 87 +++++++ MAINTAINERS | 1 Makefile | 40 ++- arch/alpha/include/asm/io.h | 8 arch/arm/include/asm/kvm_host.h | 2 arch/arm64/Makefile | 1 arch/arm64/include/asm/kvm_host.h | 2 arch/arm64/kernel/vdso32/Makefile | 2 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/kvm_host.h | 3 arch/powerpc/kvm/book3s.c | 3 arch/powerpc/kvm/e500_mmu_host.c | 3 arch/powerpc/platforms/pseries/ras.c | 1 arch/s390/kernel/ptrace.c | 7 arch/s390/kernel/runtime_instr.c | 2 arch/x86/boot/compressed/Makefile | 2 arch/x86/include/asm/kvm_host.h | 3 arch/x86/kvm/mmu.c | 3 arch/x86/kvm/x86.c | 2 arch/x86/pci/xen.c | 1 drivers/cpufreq/intel_pstate.c | 1 drivers/firmware/efi/efi.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 2 drivers/gpu/drm/amd/display/include/fixed31_32.h | 3 drivers/gpu/drm/ttm/ttm_bo_vm.c | 4 drivers/gpu/drm/vgem/vgem_drv.c | 27 -- drivers/infiniband/hw/bnxt_re/main.c | 3 drivers/infiniband/hw/hfi1/tid_rdma.c | 1 drivers/input/mouse/psmouse-base.c | 2 drivers/md/bcache/super.c | 12 - drivers/media/pci/ttpci/budget-core.c | 11 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 | 19 - 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/hyperv/netvsc_drv.c | 2 drivers/net/wan/Kconfig | 2 drivers/net/wan/Makefile | 12 - drivers/opp/core.c | 10 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/ufs_quirks.h | 1 drivers/scsi/ufs/ufshcd.c | 2 drivers/spi/Kconfig | 3 drivers/spi/spi-stm32.c | 27 ++ drivers/spi/spi.c | 21 + drivers/target/target_core_user.c | 2 drivers/vfio/vfio_iommu_type1.c | 71 +++++- drivers/video/fbdev/efifb.c | 2 drivers/virtio/virtio_ring.c | 3 drivers/xen/preempt.c | 2 drivers/xen/swiotlb-xen.c | 8 fs/afs/dynroot.c | 20 - fs/btrfs/block-group.c | 2 fs/btrfs/ctree.h | 2 fs/btrfs/delayed-inode.c | 2 fs/btrfs/export.c | 8 fs/btrfs/export.h | 5 fs/btrfs/extent-tree.c | 10 fs/btrfs/extent_io.c | 2 fs/btrfs/scrub.c | 2 fs/btrfs/super.c | 20 + fs/btrfs/transaction.c | 30 +- fs/btrfs/transaction.h | 12 + fs/ceph/mds_client.c | 3 fs/eventpoll.c | 19 - fs/ext4/block_validity.c | 36 +-- fs/ext4/namei.c | 22 + fs/gfs2/bmap.c | 68 +++-- fs/jbd2/journal.c | 4 fs/jffs2/dir.c | 6 fs/romfs/storage.c | 4 fs/signalfd.c | 10 fs/xfs/xfs_sysfs.h | 6 fs/xfs/xfs_trans_dquot.c | 2 kernel/events/uprobes.c | 2 kernel/kthread.c | 17 + kernel/relay.c | 1 mm/hugetlb.c | 24 -- mm/khugepaged.c | 7 mm/page_alloc.c | 7 net/can/j1939/socket.c | 14 + net/can/j1939/transport.c | 89 ++++++- net/core/filter.c | 49 +++- net/netfilter/nft_exthdr.c | 4 net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 2 scripts/kconfig/qconf.cc | 70 +++--- sound/pci/hda/patch_realtek.c | 2 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/objtool/Makefile | 6 tools/perf/util/probe-finder.c | 2 tools/testing/selftests/cgroup/cgroup_util.c | 2 virt/kvm/arm/mmu.c | 19 + virt/kvm/kvm_main.c | 3 111 files changed, 983 insertions(+), 478 deletions(-)
Al Viro (1):
do_epoll_ctl(): clean the failure exits up a bit
Alex Williamson (1):
vfio/type1: Add proper error unwind for vfio_iommu_replay()
Amelie Delaunay (1):
spi: stm32: fixes suspend/resume management
Andreas Gruenbacher (1):
gfs2: Improve mmap write vs. punch_hole consistency
Bob Peterson (1):
gfs2: Never call gfs2_block_zero_range with an open transaction
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
Charan Teja Reddy (1):
mm, page_alloc: fix core hung in free_pcppages_bulk()
Chris Wilson (1):
drm/vgem: Replace opencoded version of drm_gem_dumb_map_offset()
Chuck Lever (1):
svcrdma: Fix another Receive buffer leak
Chuhong Yuan (1):
media: budget-core: Improve exception handling in budget_register()
Coly Li (1):
bcache: avoid nr_stripes overflow in bcache_device_init()
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 (1):
afs: Fix NULL deref in afs_dynroot_depopulate()
David Sterba (1):
btrfs: add wrapper for transaction abort predicate
Dinghao Liu (1):
ASoC: intel: Fix memleak in sst_media_open
Dmitry Golovin (1):
x86/boot: kbuild: allow readelf executable to be specified
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
Fangrui Song (1):
Documentation/llvm: fix the name of llvm-size
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.4.61
Greg Ungerer (1):
m68knommu: fix overwriting of bits in ColdFire V3 cache control
Grzegorz Szczurek (1):
i40e: Fix crash during removing i40e driver
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 (3):
khugepaged: khugepaged_test_exit() check mmget_still_valid()
khugepaged: adjust VM_BUG_ON_MM() in __khugepaged_enter()
uprobes: __replace_page() avoid BUG in munlock_vma_page()
Jan Kara (2):
ext4: fix checking of directory entry validity for inline directories
ext4: don't allow overlapping system zones
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
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
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 (1):
bpf: sock_ops sk access may stomp registers when dst_reg = src_reg
Josef Bacik (2):
btrfs: don't show full path of bind mounts in subvol=
btrfs: return EROFS for BTRFS_FS_STATE_ERROR cases
Juergen Gross (2):
efi: avoid error message when booting under Xen
xen: don't reschedule in preemption off sections
Kaike Wan (1):
RDMA/hfi1: Correct an interlock issue for TID RDMA WRITE request
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
Liang Chen (1):
kthread: Do not preempt current task if it is going to call schedule()
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
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
Marcos Paulo de Souza (1):
btrfs: export helpers for subvolume name/id resolution
Masahiro Yamada (8):
net: wan: wanxl: use allow to pass CROSS_COMPILE_M68k for rebuilding firmware
net: wan: wanxl: use $(M68KCC) instead of $(M68KAS) for rebuilding firmware
kbuild: remove PYTHON2 variable
kbuild: remove AS variable
kbuild: replace AS=clang with LLVM_IAS=1
kbuild: support LLVM=1 to switch the default tools to Clang/LLVM
kconfig: qconf: do not limit the pop-up menu to the first row
kconfig: qconf: fix signal connection to invalid slots
Masami Hiramatsu (1):
perf probe: Fix memory leakage when the probe point is not found
Mike Pozulp (2):
ALSA: hda/realtek: Add quirk for Samsung Galaxy Flex Book
ALSA: hda/realtek: Add quirk for Samsung Galaxy Book Ion
Nick Desaulniers (1):
Documentation/llvm: add documentation on building w/ Clang/LLVM
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() functionPeter Xu (1):
mm/hugetlb: fix calculation of adjust_range_if_pmd_sharing_possible
Przemyslaw Patynowski (1):
i40e: Set RX_ONLY mode for unicast promiscuous on VLAN
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:
Selvin Xavier (1):
RDMA/bnxt_re: Do not add user qps to flushlist
Shay Agroskin (1):
net: ena: Prevent reset after device destruction
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 (1):
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
Tom Rix (1):
net: dsa: b53: check for timeout
Vasant Hegde (1):
powerpc/pseries: Do not initiate shutdown when system is running on UPS
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
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
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
maintainerDocumentation/kbuild/index.rst +1 -0
@@ -19,6 +19,7 @@ Kernel Build System issues reproducible-builds + llvm .. only:: subproject and html
Documentation/kbuild/kbuild.rst +5 -0
@@ -262,3 +262,8 @@ KBUILD_BUILD_USER, KBUILD_BUILD_HOST These two variables allow to override the user@host string displayed during boot and in /proc/version. The default value is the output of the commands whoami and host, respectively. + +LLVM +---- +If this variable is set to 1, Kbuild will use Clang and LLVM utilities instead +of GCC and GNU binutils to build the kernel.
Documentation/kbuild/llvm.rst new file +87 -0
87 lines not on this page · raw message
MAINTAINERS +1 -0
@@ -4028,6 +4028,7 @@ B: https://github.com/ClangBuiltLinux/linux/issues C: irc://chat.freenode.net/clangbuiltlinux S: Supported K: \b(?i:clang|llvm)\b +F: Documentation/kbuild/llvm.rst CLEANCACHE API M: Konrad Rzeszutek Wilk <[email protected]>
Makefile +28 -12
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 60 +SUBLEVEL = 61 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -394,8 +394,13 @@ HOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null) HOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null) HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null) -HOSTCC = gcc -HOSTCXX = g++ +ifneq ($(LLVM),) +HOSTCC = clang +HOSTCXX = clang++ +else +HOSTCC = gcc +HOSTCXX = g++ +endif KBUILD_HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \ -fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \ $(HOSTCFLAGS)
@@ -404,16 +409,28 @@ KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS) KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS) # Make variables (CC, etc...) -AS = $(CROSS_COMPILE)as -LD = $(CROSS_COMPILE)ld -CC = $(CROSS_COMPILE)gcc CPP = $(CC) -E +ifneq ($(LLVM),) +CC = clang +LD = ld.lld +AR = llvm-ar +NM = llvm-nm +OBJCOPY = llvm-objcopy +OBJDUMP = llvm-objdump +READELF = llvm-readelf +OBJSIZE = llvm-size +STRIP = llvm-strip +else +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)ld AR = $(CROSS_COMPILE)ar NM = $(CROSS_COMPILE)nm -STRIP = $(CROSS_COMPILE)strip OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump +READELF = $(CROSS_COMPILE)readelf OBJSIZE = $(CROSS_COMPILE)size +STRIP = $(CROSS_COMPILE)strip +endif PAHOLE = pahole LEX = flex YACC = bison
@@ -422,7 +439,6 @@ INSTALLKERNEL := installkernel DEPMOD = /sbin/depmod PERL = perl PYTHON = python -PYTHON2 = python2 PYTHON3 = python3 CHECK = sparse BASH = bash
@@ -471,9 +487,9 @@ KBUILD_LDFLAGS := GCC_PLUGINS_CFLAGS := CLANG_FLAGS := -export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC -export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE PAHOLE LEX YACC AWK INSTALLKERNEL -export PERL PYTHON PYTHON2 PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX +export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC +export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL +export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
@@ -534,7 +550,7 @@ endif ifneq ($(GCC_TOOLCHAIN),) CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN) endif -ifeq ($(shell $(AS) --version 2>&1 | head -n 1 | grep clang),) +ifneq ($(LLVM_IAS),1) CLANG_FLAGS += -no-integrated-as endif CLANG_FLAGS += -Werror=unknown-warning-option
arch/alpha/include/asm/io.h +4 -4
@@ -502,10 +502,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/arm/include/asm/kvm_host.h +1 -1
@@ -266,7 +266,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);unsigned long kvm_arm_num_regs (struct kvm_vcpu *vcpu);
arch/arm64/Makefile +1 -0
@@ -146,6 +146,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
@@ -427,7 +427,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
@@ -190,7 +190,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/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
@@ -939,7 +939,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
@@ -494,7 +494,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
@@ -512,7 +512,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/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/kvm/book3s.c +2 -1
@@ -867,7 +867,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/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/s390/kernel/ptrace.c +5 -2
@@ -1283,7 +1283,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 &&
@@ -1347,7 +1346,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/x86/boot/compressed/Makefile +1 -1
@@ -102,7 +102,7 @@ vmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o quiet_cmd_check_data_rel = DATAREL $@ define cmd_check_data_rel for obj in $(filter %.o,$^); do \ - ${CROSS_COMPILE}readelf -S $$obj | grep -qF .rel.local && { \ + $(READELF) -S $$obj | grep -qF .rel.local && { \ echo "error: $$obj has data relocations!" >&2; \ exit 1; \ } || true; \
arch/x86/include/asm/kvm_host.h +2 -1
@@ -1553,7 +1553,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.c +2 -1
@@ -2045,7 +2045,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
@@ -972,7 +972,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)
drivers/cpufreq/intel_pstate.c +1 -0
@@ -1571,6 +1571,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/firmware/efi/efi.c +2 -0
@@ -345,6 +345,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 ; }
@@ -381,6 +382,7 @@ static int __init efisubsys_init(void)generic_ops_unregister (); err_put:kobject_put (efi_kobj); +destroy_workqueue (efi_rts_wq);return error; }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 -0
@@ -1434,6 +1434,7 @@ amdgpu_dm_update_connector_after_detect(struct amdgpu_dm_connector *aconnector)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/dcn20/dcn20_resource.c +1 -1
@@ -2845,7 +2845,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/ttm/ttm_bo_vm.c +3 -1
@@ -358,8 +358,10 @@ static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,static 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
@@ -229,32 +229,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 ),
@@ -448,7 +422,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/infiniband/hw/bnxt_re/main.c +2 -1
@@ -789,7 +789,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/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/md/bcache/super.c +6 -6
@@ -816,19 +816,19 @@ static int bcache_device_init(struct bcache_device *d, unsigned int block_size,struct request_queue *q;const size_t max_stripes =min_t (size_t,INT_MAX ,SIZE_MAX /sizeof (atomic_t)); -size_t n; +uint64_t n;int idx;if (!d->stripe_size) d->stripe_size =1 <<31 ; - d->nr_stripes =DIV_ROUND_UP_ULL (sectors, d->stripe_size); - -if (!d->nr_stripes || d->nr_stripes > max_stripes) { -pr_err ("nr_stripes too large or invalid: %u (start sector beyond end of disk?)" , - (unsigned int )d->nr_stripes); + n =DIV_ROUND_UP_ULL (sectors, d->stripe_size); +if (!n || n > max_stripes) { +pr_err ("nr_stripes too large or invalid: %llu (start sector beyond end of disk?)\n" , + n);return -ENOMEM ; } + d->nr_stripes = n; n = d->nr_stripes *sizeof (atomic_t); d->stripe_sectors_dirty =kvzalloc (n,GFP_KERNEL );
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/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
@@ -1523,6 +1523,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 +10 -9
@@ -2835,16 +2835,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 (); }
@@ -3675,8 +3673,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
@@ -2388,7 +2388,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 ;
@@ -2520,7 +2520,6 @@ static int gemini_ethernet_port_probe(struct platform_device *pdev) } port->netdev =NULL ; -free_netdev (netdev);return ret; }
@@ -2529,7 +2528,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
@@ -3707,11 +3707,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
@@ -1949,6 +1949,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
@@ -2074,18 +2089,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);
@@ -2182,11 +2195,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
@@ -15342,6 +15342,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/hyperv/netvsc_drv.c +1 -1
@@ -501,7 +501,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/wan/Kconfig +1 -1
@@ -200,7 +200,7 @@ config WANXL_BUILD_FIRMWARE depends on WANXL && !PREVENT_FIRMWARE_BUILD help Allows you to rebuild firmware run by the QUICC processor. - It requires as68k, ld68k and hexdump programs. + It requires m68k toolchains and hexdump programs. You should never need this option, say N.
drivers/net/wan/Makefile +6 -6
@@ -40,17 +40,17 @@ $(obj)/wanxl.o: $(obj)/wanxlfw.inc ifeq ($(CONFIG_WANXL_BUILD_FIRMWARE),y) ifeq ($(ARCH),m68k) - AS68K = $(AS) - LD68K = $(LD) + M68KCC = $(CC) + M68KLD = $(LD) else - AS68K = as68k - LD68K = ld68k + M68KCC = $(CROSS_COMPILE_M68K)gcc + M68KLD = $(CROSS_COMPILE_M68K)ld endif quiet_cmd_build_wanxlfw = BLD FW $@ cmd_build_wanxlfw = \ - $(CPP) -D__ASSEMBLY__ -Wp,-MD,$(depfile) -I$(srctree)/include/uapi $< | $(AS68K) -m68360 -o $(obj)/wanxlfw.o; \ - $(LD68K) --oformat binary -Ttext 0x1000 $(obj)/wanxlfw.o -o $(obj)/wanxlfw.bin; \ + $(M68KCC) -D__ASSEMBLY__ -Wp,-MD,$(depfile) -I$(srctree)/include/uapi -c -o $(obj)/wanxlfw.o $<; \ + $(M68KLD) --oformat binary -Ttext 0x1000 $(obj)/wanxlfw.o -o $(obj)/wanxlfw.bin; \ hexdump -ve '"\n" 16/1 "0x%02X,"' $(obj)/wanxlfw.bin | sed 's/0x ,//g;1s/^/static const u8 firmware[]={/;$$s/,$$/\n};\n/' >$(obj)/wanxlfw.inc; \ rm -f $(obj)/wanxlfw.bin $(obj)/wanxlfw.o
drivers/opp/core.c +6 -4
@@ -843,10 +843,12 @@ 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) { +dev_dbg (dev,"%s: old/new frequencies (%lu Hz) are same, nothing to do\n" , + __func__, freq); + ret =0 ; + goto put_opp_table; + } } temp_freq = old_freq;
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
@@ -409,7 +409,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);
@@ -762,7 +762,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
@@ -2804,10 +2804,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/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.c +2 -0
@@ -217,6 +217,8 @@ ufs_get_desired_pm_lvl_for_dev_link_state(enum ufs_dev_pwr_mode dev_state,static struct ufs_dev_fix ufs_fixups[] = {/* UFS cards deviations table */ +UFS_FIX (UFS_VENDOR_MICRON ,UFS_ANY_MODEL , +UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM ),UFS_FIX (UFS_VENDOR_SAMSUNG ,UFS_ANY_MODEL ,UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM ), UFS_FIX(UFS_VENDOR_SAMSUNG, UFS_ANY_MODEL,
drivers/spi/Kconfig +3 -0
@@ -944,4 +944,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
@@ -14,6 +14,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>
@@ -1986,6 +1987,8 @@ static int stm32_spi_remove(struct platform_device *pdev)pm_runtime_disable (&pdev->dev); +pinctrl_pm_select_sleep_state (&pdev->dev); +return 0 ; }
@@ -1997,13 +2000,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); }
@@ -2033,10 +2041,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
@@ -553,7 +559,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;
@@ -581,6 +586,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];
@@ -2582,6 +2594,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 */
@@ -2602,6 +2618,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/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/preempt.c +1 -1
@@ -27,7 +27,7 @@ EXPORT_SYMBOL_GPL(xen_in_preemptible_hcall); asmlinkage __visible void xen_maybe_preempt_hcall(void) {if (unlikely (__this_cpu_read (xen_in_preemptible_hcall) - &&need_resched ())) { + &&need_resched () && !preempt_count ())) {/* * Clear flag as we may be rescheduled on a different * cpu.
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
@@ -289,15 +289,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/btrfs/block-group.c +1 -1
@@ -2168,7 +2168,7 @@ static int cache_save_setup(struct btrfs_block_group_cache *block_group,return 0 ; } -if (trans->aborted) +if (TRANS_ABORTED (trans))return 0 ; again: inode =lookup_free_space_inode (block_group, path);
fs/btrfs/ctree.h +2 -0
@@ -2965,6 +2965,8 @@ int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,int btrfs_parse_options (struct btrfs_fs_info *info,char *options,unsigned long new_flags);int btrfs_sync_fs (struct super_block *sb,int wait); +char *btrfs_get_subvol_name_from_objectid (struct btrfs_fs_info *fs_info, +u64 subvol_objectid); static inline __printf(2, 3) __cold void btrfs_no_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
fs/btrfs/delayed-inode.c +1 -1
@@ -1151,7 +1151,7 @@ static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans, int nr)int ret =0 ;bool count = (nr >0 ); -if (trans->aborted) +if (TRANS_ABORTED (trans))return -EIO ; path =btrfs_alloc_path ();
fs/btrfs/export.c +4 -4
@@ -57,9 +57,9 @@ static int btrfs_encode_fh(struct inode *inode, u32 *fh, int *max_len,return type; } -static struct dentry *btrfs_get_dentry (struct super_block *sb,u64 objectid, -u64 root_objectid,u32 generation, -int check_generation) +struct dentry *btrfs_get_dentry (struct super_block *sb,u64 objectid, +u64 root_objectid,u32 generation, +int check_generation) {struct btrfs_fs_info *fs_info =btrfs_sb (sb);struct btrfs_root *root;
@@ -152,7 +152,7 @@ static struct dentry *btrfs_fh_to_dentry(struct super_block *sb, struct fid *fh,return btrfs_get_dentry (sb, objectid, root_objectid, generation,1 ); } -static struct dentry *btrfs_get_parent (struct dentry *child) +struct dentry *btrfs_get_parent (struct dentry *child) {struct inode *dir =d_inode (child);struct btrfs_fs_info *fs_info =btrfs_sb (dir->i_sb);
fs/btrfs/export.h +5 -0
@@ -18,4 +18,9 @@ struct btrfs_fid {u64 parent_root_objectid; } __attribute__ ((packed)); +struct dentry *btrfs_get_dentry (struct super_block *sb,u64 objectid, +u64 root_objectid,u32 generation, +int check_generation); +struct dentry *btrfs_get_parent (struct dentry *child); +#endif
fs/btrfs/extent-tree.c +5 -5
@@ -1561,7 +1561,7 @@ static int run_delayed_extent_op(struct btrfs_trans_handle *trans,int err =0 ;int metadata = !extent_op->is_data; -if (trans->aborted) +if (TRANS_ABORTED (trans))return 0 ;if (metadata && !btrfs_fs_incompat (fs_info,SKINNY_METADATA ))
@@ -1681,7 +1681,7 @@ static int run_one_delayed_ref(struct btrfs_trans_handle *trans, {int ret =0 ; -if (trans->aborted) { +if (TRANS_ABORTED (trans)) {if (insert_reserved)btrfs_pin_extent (trans->fs_info, node->bytenr, node->num_bytes,1 );
@@ -2169,7 +2169,7 @@ int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,int run_all = count == (unsigned long )-1 ;/* We'll clean this up in btrfs_cleanup_transaction */ -if (trans->aborted) +if (TRANS_ABORTED (trans))return 0 ;if (test_bit (BTRFS_FS_CREATING_FREE_SPACE_TREE , &fs_info->flags))
@@ -2892,7 +2892,7 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans)else unpin = &fs_info->freed_extents[0 ]; -while (!trans->aborted) { +while (!TRANS_ABORTED (trans)) {struct extent_state *cached_state =NULL ;mutex_lock (&fs_info->unused_bg_unpin_mutex);
@@ -2924,7 +2924,7 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans)u64 trimmed =0 ; ret = -EROFS ; -if (!trans->aborted) +if (!TRANS_ABORTED (trans)) ret = btrfs_discard_extent(fs_info, block_group->key.objectid, block_group->key.offset,
fs/btrfs/extent_io.c +1 -1
@@ -4073,7 +4073,7 @@ int btree_write_cache_pages(struct address_space *mapping,if (!test_bit (BTRFS_FS_STATE_ERROR , &fs_info->fs_state)) { ret =flush_write_bio (&epd); }else { - ret = -EUCLEAN ; + ret = -EROFS ;end_write_bio (&epd, ret); }return ret;
fs/btrfs/scrub.c +1 -1
@@ -3717,7 +3717,7 @@ static noinline_for_stack int scrub_supers(struct scrub_ctx *sctx,struct btrfs_fs_info *fs_info = sctx->fs_info;if (test_bit (BTRFS_FS_STATE_ERROR , &fs_info->fs_state)) -return -EIO ; +return -EROFS ;/* Seed devices of a new filesystem has their own generation. */ if (scrub_dev->fs_devices != fs_info->fs_devices)
fs/btrfs/super.c +13 -7
@@ -241,7 +241,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, {struct btrfs_fs_info *fs_info = trans->fs_info; - trans->aborted = errno; +WRITE_ONCE (trans->aborted, errno);/* Nothing used. The other threads that have joined this * transaction may be able to continue. */ if (!trans->dirty &&list_empty (&trans->new_bgs)) {
@@ -1009,8 +1009,8 @@ static int btrfs_parse_subvol_options(const char *options, char **subvol_name,return error; } -static char *get_subvol_name_from_objectid (struct btrfs_fs_info *fs_info, -u64 subvol_objectid) +char *btrfs_get_subvol_name_from_objectid (struct btrfs_fs_info *fs_info, +u64 subvol_objectid) {struct btrfs_root *root = fs_info->tree_root;struct btrfs_root *fs_root;
@@ -1291,6 +1291,7 @@ static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry) {struct btrfs_fs_info *info =btrfs_sb (dentry->d_sb);const char *compress_type; +const char *subvol_name;if (btrfs_test_opt (info,DEGRADED ))seq_puts (seq,",degraded" );
@@ -1375,8 +1376,13 @@ static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)seq_puts (seq,",ref_verify" );seq_printf (seq,",subvolid=%llu" ,BTRFS_I (d_inode (dentry))->root->root_key.objectid); -seq_puts (seq,",subvol=" ); -seq_dentry (seq, dentry," \t\n\\" ); + subvol_name =btrfs_get_subvol_name_from_objectid (info, +BTRFS_I (d_inode (dentry))->root->root_key.objectid); +if (!IS_ERR (subvol_name)) { +seq_puts (seq,",subvol=" ); +seq_escape (seq, subvol_name," \t\n\\" ); +kfree (subvol_name); + }return 0 ; }
@@ -1421,8 +1427,8 @@ static struct dentry *mount_subvol(const char *subvol_name, u64 subvol_objectid, goto out; } } - subvol_name =get_subvol_name_from_objectid (btrfs_sb (mnt->mnt_sb), - subvol_objectid); + subvol_name =btrfs_get_subvol_name_from_objectid ( +btrfs_sb (mnt->mnt_sb), subvol_objectid);if (IS_ERR (subvol_name)) { root =ERR_CAST (subvol_name); subvol_name =NULL ;
fs/btrfs/transaction.c +17 -13
@@ -174,7 +174,7 @@ static noinline int join_transaction(struct btrfs_fs_info *fs_info, cur_trans = fs_info->running_transaction;if (cur_trans) { -if (cur_trans->aborted) { +if (TRANS_ABORTED (cur_trans)) {spin_unlock (&fs_info->trans_lock);return cur_trans->aborted; }
@@ -390,7 +390,7 @@ static inline int is_transaction_blocked(struct btrfs_transaction *trans) {return (trans->state >=TRANS_STATE_BLOCKED && trans->state <TRANS_STATE_UNBLOCKED && - !trans->aborted); + !TRANS_ABORTED (trans)); }/* wait for commit against the current transaction to become unblocked
@@ -409,7 +409,7 @@ static void wait_current_trans(struct btrfs_fs_info *fs_info)wait_event (fs_info->transaction_wait, cur_trans->state >=TRANS_STATE_UNBLOCKED || - cur_trans->aborted); +TRANS_ABORTED (cur_trans));btrfs_put_transaction (cur_trans); }else {spin_unlock (&fs_info->trans_lock);
@@ -870,10 +870,13 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,if (throttle)btrfs_run_delayed_iputs (info); -if (trans->aborted || +if (TRANS_ABORTED (trans) ||test_bit (BTRFS_FS_STATE_ERROR , &info->fs_state)) {wake_up_process (info->transaction_kthread); - err = -EIO ; +if (TRANS_ABORTED (trans)) + err = trans->aborted; +else + err = -EROFS ; }kmem_cache_free (btrfs_trans_handle_cachep, trans);
@@ -1727,7 +1730,8 @@ static void wait_current_trans_commit_start(struct btrfs_fs_info *fs_info, struct btrfs_transaction *trans) {wait_event (fs_info->transaction_blocked_wait, - trans->state >=TRANS_STATE_COMMIT_START || trans->aborted); + trans->state >=TRANS_STATE_COMMIT_START || +TRANS_ABORTED (trans)); }/*
@@ -1739,7 +1743,8 @@ static void wait_current_trans_commit_start_and_unblock( struct btrfs_transaction *trans) {wait_event (fs_info->transaction_wait, - trans->state >=TRANS_STATE_UNBLOCKED || trans->aborted); + trans->state >=TRANS_STATE_UNBLOCKED || +TRANS_ABORTED (trans)); }/*
@@ -1957,7 +1962,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) trans->dirty = true;/* Stop the commit early if ->aborted is set */ -if (unlikely (READ_ONCE (cur_trans->aborted))) { +if (TRANS_ABORTED (cur_trans)) { ret = cur_trans->aborted;btrfs_end_transaction (trans);return ret;
@@ -2031,7 +2036,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans)wait_for_commit (cur_trans); -if (unlikely (cur_trans->aborted)) +if (TRANS_ABORTED (cur_trans)) ret = cur_trans->aborted;btrfs_put_transaction (cur_trans);
@@ -2050,7 +2055,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans)spin_unlock (&fs_info->trans_lock);wait_for_commit (prev_trans); - ret = prev_trans->aborted; + ret =READ_ONCE (prev_trans->aborted);btrfs_put_transaction (prev_trans);if (ret)
@@ -2104,8 +2109,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans)wait_event (cur_trans->writer_wait,atomic_read (&cur_trans->num_writers) ==1 ); -/* ->aborted might be set after the previous check, so check it */ -if (unlikely (READ_ONCE (cur_trans->aborted))) { +if (TRANS_ABORTED (cur_trans)) { ret = cur_trans->aborted; goto scrub_continue; }
@@ -2223,7 +2227,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans)* The tasks which save the space cache and inode cache may also * update ->aborted, check it. */ -if (unlikely (READ_ONCE (cur_trans->aborted))) { +if (TRANS_ABORTED (cur_trans)) { ret = cur_trans->aborted;mutex_unlock (&fs_info->tree_log_mutex);mutex_unlock (&fs_info->reloc_mutex);
fs/btrfs/transaction.h +12 -0
@@ -116,6 +116,10 @@ struct btrfs_trans_handle {struct btrfs_block_rsv *orig_rsv;refcount_t use_count;unsigned int type; +/* +* Error code of transaction abort, set outside of locks and must use +* the READ_ONCE/WRITE_ONCE access +*/ short aborted;bool adding_csums;bool allocating_chunk;
@@ -127,6 +131,14 @@ struct btrfs_trans_handle {struct list_head new_bgs; }; +/* +* The abort status can be changed between calls and is not protected by locks. +* This accepts btrfs_transaction and btrfs_trans_handle as types. Once it's +* set to a non-zero value it does not change, so the macro should be in checks +* but is not necessary for further reads of the value. +*/ +#define TRANS_ABORTED (trans) (unlikely(READ_ONCE((trans)->aborted))) +struct btrfs_pending_snapshot {struct dentry *dentry;struct inode *dir;
fs/ceph/mds_client.c +2 -1
@@ -4143,7 +4143,6 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)return -ENOMEM ; } - fsc->mdsc = mdsc;init_completion (&mdsc->safe_umount_waiters);init_waitqueue_head (&mdsc->session_close_wq);INIT_LIST_HEAD (&mdsc->waiting_for_map);
@@ -4195,6 +4194,8 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)strscpy (mdsc->nodename,utsname ()->nodename,sizeof (mdsc->nodename)); + + fsc->mdsc = mdsc;return 0 ; }
fs/eventpoll.c +11 -8
@@ -1991,9 +1991,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);
@@ -2037,6 +2039,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); }
@@ -2192,13 +2195,13 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,mutex_lock (&epmutex);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); + }mutex_lock_nested (&ep->mtx,0 );if (is_file_epoll (tf.file)) { tep = tf.file->private_data;
@@ -2222,8 +2225,6 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd, 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)
@@ -2246,8 +2247,10 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,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 +13 -23
@@ -68,7 +68,7 @@ static int add_system_zone(struct ext4_system_blocks *system_blks, ext4_fsblk_t start_blk, unsigned int count) { -struct ext4_system_zone *new_entry =NULL , *entry; +struct ext4_system_zone *new_entry, *entry;struct rb_node **n = &system_blks->root.rb_node, *node;struct rb_node *parent =NULL , *new_node =NULL ;
@@ -79,30 +79,20 @@ static int add_system_zone(struct ext4_system_blocks *system_blks, n = &(*n)->rb_left; else if (start_blk >= (entry->start_blk + entry->count)) n = &(*n)->rb_right; - else { -if (start_blk + count > (entry->start_blk + - entry->count)) - entry->count = (start_blk + count - - entry->start_blk); - new_node = *n; - new_entry = rb_entry(new_node, struct ext4_system_zone, - node); -break ; - } + else /* Unexpected overlap of system zones. */ + return -EFSCORRUPTED; } -if (!new_entry) { - new_entry =kmem_cache_alloc (ext4_system_zone_cachep, -GFP_KERNEL ); -if (!new_entry) -return -ENOMEM ; - new_entry->start_blk = start_blk; - new_entry->count = count; - new_node = &new_entry->node; - -rb_link_node (new_node, parent, n); -rb_insert_color (new_node, &system_blks->root); - } + new_entry =kmem_cache_alloc (ext4_system_zone_cachep, +GFP_KERNEL ); +if (!new_entry) +return -ENOMEM ; + new_entry->start_blk = start_blk; + new_entry->count = count; + new_node = &new_entry->node; + +rb_link_node (new_node, parent, n); +rb_insert_color (new_node, &system_blks->root);/* Can we merge to the left? */ node =rb_prev (new_node);
fs/ext4/namei.c +16 -6
@@ -1392,8 +1392,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 ;
@@ -1852,7 +1852,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--) {
@@ -1862,8 +1862,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",
@@ -2462,7 +2472,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/gfs2/bmap.c +42 -26
106 lines not on this page · raw message
fs/jbd2/journal.c +3 -1
@@ -1348,8 +1348,10 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags)int ret;/* Buffer got discarded which means block device got invalidated */ -if (!buffer_mapped (bh)) +if (!buffer_mapped (bh)) { +unlock_buffer (bh);return -EIO ; + }trace_jbd2_write_superblock (journal, write_flags);if (!(journal->j_flags &JBD2_BARRIER ))
fs/jffs2/dir.c +5 -1
@@ -590,10 +590,14 @@ static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)int ret;uint32_t now =JFFS2_NOW (); +mutex_lock (&f->sem);for (fd = f->dents ; fd; fd = fd->next) { -if (fd->ino) +if (fd->ino) { +mutex_unlock (&f->sem);return -ENOTEMPTY ; + } } +mutex_unlock (&f->sem); ret =jffs2_do_unlink (c, dir_f, dentry->d_name.name, dentry->d_name.len, f, now);
fs/romfs/storage.c +1 -3
@@ -217,10 +217,8 @@ int romfs_dev_read(struct super_block *sb, unsigned long pos,size_t limit; limit =romfs_maxsize (sb); -if (pos >= limit) +if (pos >= limit || buflen > limit - pos)return -EIO ; -if (buflen > limit - pos) - buflen = limit - pos;#ifdef CONFIG_ROMFS_ON_MTD if (sb->s_mtd)
fs/signalfd.c +6 -4
@@ -314,9 +314,10 @@ SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask, {sigset_t mask; -if (sizemask !=sizeof (sigset_t) || -copy_from_user (&mask, user_mask,sizeof (mask))) +if (sizemask !=sizeof (sigset_t))return -EINVAL ; +if (copy_from_user (&mask, user_mask,sizeof (mask))) +return -EFAULT ;return do_signalfd4 (ufd, &mask, flags); }
@@ -325,9 +326,10 @@ SYSCALL_DEFINE3(signalfd, int, ufd, sigset_t __user *, user_mask, {sigset_t mask; -if (sizemask !=sizeof (sigset_t) || -copy_from_user (&mask, user_mask,sizeof (mask))) +if (sizemask !=sizeof (sigset_t))return -EINVAL ; +if (copy_from_user (&mask, user_mask,sizeof (mask))) +return -EFAULT ;return do_signalfd4 (ufd, &mask,0 ); }
fs/xfs/xfs_sysfs.h +4 -2
@@ -32,9 +32,11 @@ xfs_sysfs_init(struct xfs_kobj *parent_kobj, const char *name) { + struct kobject *parent; + + parent = parent_kobj ? &parent_kobj->kobject :NULL ;init_completion (&kobj->complete); -return kobject_init_and_add (&kobj->kobject, ktype, - &parent_kobj->kobject,"%s" , name); +return kobject_init_and_add (&kobj->kobject, ktype, parent,"%s" , name); } static inline void
fs/xfs/xfs_trans_dquot.c +1 -1
@@ -646,7 +646,7 @@ xfs_trans_dqresv( } }if (ninos >0 ) { - total_count =be64_to_cpu (dqp->q_core.d_icount) + ninos; + total_count = dqp->q_res_icount + ninos; timer =be32_to_cpu (dqp->q_core.d_itimer); warns =be16_to_cpu (dqp->q_core.d_iwarns); warnlimit = dqp->q_mount->m_quotainfo->qi_iwarnlimit;
kernel/events/uprobes.c +1 -1
@@ -211,7 +211,7 @@ static int __replace_page(struct vm_area_struct *vma, unsigned long addr,try_to_free_swap (old_page);page_vma_mapped_walk_done (&pvmw); -if (vma->vm_flags &VM_LOCKED ) +if ((vma->vm_flags &VM_LOCKED ) && !PageCompound (old_page))munlock_vma_page (old_page);put_page (old_page);
kernel/kthread.c +15 -2
@@ -199,8 +199,15 @@ static void __kthread_parkme(struct kthread *self)if (!test_bit (KTHREAD_SHOULD_PARK , &self->flags))break ; +/* +* Thread is going to call schedule(), do not preempt it, +* or the caller of kthread_park() may spend more time in +* wait_task_inactive(). +*/ +preempt_disable ();complete (&self->parked); -schedule (); +schedule_preempt_disabled (); +preempt_enable (); }__set_current_state (TASK_RUNNING ); }
@@ -245,8 +252,14 @@ static int kthread(void *_create)/* OK, tell user we're spawned, wait for stop or wakeup */ __set_current_state (TASK_UNINTERRUPTIBLE ); create->result = current; +/* +* Thread is going to call schedule(), do not preempt it, +* or the creator may spend more time in wait_task_inactive(). +*/ +preempt_disable ();complete (done); -schedule (); +schedule_preempt_disabled (); +preempt_enable (); ret = -EINTR ;if (!test_bit (KTHREAD_SHOULD_STOP , &self->flags)) {
kernel/relay.c +1 -0
@@ -197,6 +197,7 @@ static struct rchan_buf *relay_create_buf(struct rchan *chan)static void relay_destroy_channel (struct kref *kref) { struct rchan *chan = container_of(kref, struct rchan, kref); +free_percpu (chan->buf);kfree (chan); }
mm/hugetlb.c +10 -14
@@ -4846,25 +4846,21 @@ static bool vma_shareable(struct vm_area_struct *vma, unsigned long addr)void adjust_range_if_pmd_sharing_possible (struct vm_area_struct *vma,unsigned long *start,unsigned long *end) { -unsigned long check_addr = *start; +unsigned long a_start, a_end;if (!(vma->vm_flags &VM_MAYSHARE ))return ; -for (check_addr = *start; check_addr < *end; check_addr +=PUD_SIZE ) { -unsigned long a_start = check_addr &PUD_MASK ; -unsigned long a_end = a_start +PUD_SIZE ; +/* Extend the range to be PUD aligned for a worst case scenario */ + a_start =ALIGN_DOWN (*start,PUD_SIZE ); + a_end =ALIGN (*end,PUD_SIZE ); -/* -* If sharing is possible, adjust start/end if necessary. -*/ -if (range_in_vma (vma, a_start, a_end)) { -if (a_start < *start) - *start = a_start; -if (a_end > *end) - *end = a_end; - } - } +/* +* Intersect the range with the vma range, since pmd sharing won't be +* across vma after all +*/ + *start =max (vma->vm_start, a_start); + *end =min (vma->vm_end, a_end); }/*
mm/khugepaged.c +2 -5
@@ -401,7 +401,7 @@ static void insert_to_mm_slots_hash(struct mm_struct *mm,static inline int khugepaged_test_exit (struct mm_struct *mm) { -return atomic_read (&mm->mm_users) ==0 ; +return atomic_read (&mm->mm_users) ==0 || !mmget_still_valid (mm); } static bool hugepage_vma_check(struct vm_area_struct *vma,
@@ -438,7 +438,7 @@ int __khugepaged_enter(struct mm_struct *mm)return -ENOMEM ;/* __khugepaged_exit() must not run from under us */ -VM_BUG_ON_MM (khugepaged_test_exit (mm), mm); +VM_BUG_ON_MM (atomic_read (&mm->mm_users) ==0 , mm);if (unlikely (test_and_set_bit (MMF_VM_HUGEPAGE , &mm->flags))) {free_mm_slot (mm_slot);return 0 ;
@@ -1019,9 +1019,6 @@ static void collapse_huge_page(struct mm_struct *mm,* handled by the anon_vma lock + PG_lock. */ down_write (&mm->mmap_sem); - result =SCAN_ANY_PROCESS ; -if (!mmget_still_valid (mm)) - goto out; result =hugepage_vma_revalidate (mm, address, &vma);if (result) goto out;
mm/page_alloc.c +6 -1
@@ -1256,6 +1256,11 @@ static void free_pcppages_bulk(struct zone *zone, int count,struct page *page, *tmp;LIST_HEAD (head); +/* +* Ensure proper count is passed which otherwise would stuck in the +* below while (list_empty(list)) loop. +*/ + count =min (pcp->count, count);while (count) {struct list_head *list;
@@ -7867,7 +7872,7 @@ int __meminit init_per_zone_wmark_min(void)return 0 ; } -core_initcall (init_per_zone_wmark_min) +postcore_initcall (init_per_zone_wmark_min)/* * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
net/can/j1939/socket.c +14 -0
@@ -398,6 +398,7 @@ static int j1939_sk_init(struct sock *sk)spin_lock_init (&jsk->sk_session_queue_lock);INIT_LIST_HEAD (&jsk->sk_session_queue); sk->sk_destruct = j1939_sk_sock_destruct; + sk->sk_protocol =CAN_J1939 ;return 0 ; }
@@ -466,6 +467,14 @@ static int j1939_sk_bind(struct socket *sock, struct sockaddr *uaddr, int len) goto out_release_sock; } +if (!ndev->ml_priv) { +netdev_warn_once (ndev, +"No CAN mid layer private allocated, please fix your driver and use alloc_candev()!\n" ); +dev_put (ndev); + ret = -ENODEV ; + goto out_release_sock; + } + priv =j1939_netdev_start (ndev);dev_put (ndev);if (IS_ERR (priv)) {
@@ -553,6 +562,11 @@ static int j1939_sk_connect(struct socket *sock, struct sockaddr *uaddr,static void j1939_sk_sock2sockaddr_can (struct sockaddr_can *addr,const struct j1939_sock *jsk,int peer) { +/* There are two holes (2 bytes and 3 bytes) to clear to avoid +* leaking kernel information to user space. +*/ +memset (addr,0 ,J1939_MIN_NAMELEN ); + addr->can_family =AF_CAN ; addr->can_ifindex = jsk->ifindex; addr->can_addr.j1939.pgn = jsk->addr.pgn;
net/can/j1939/transport.c +70 -19
202 lines not on this page · raw message
net/core/filter.c +38 -11
61 lines not on this page · raw message
net/netfilter/nft_exthdr.c +2 -2
@@ -44,7 +44,7 @@ static void nft_exthdr_ipv6_eval(const struct nft_expr *expr, err =ipv6_find_hdr (pkt->skb, &offset, priv->type,NULL ,NULL );if (priv->flags &NFT_EXTHDR_F_PRESENT ) { - *dest = (err >=0 ); +nft_reg_store8 (dest, err >=0 );return ; }else if (err <0 ) { goto err;
@@ -141,7 +141,7 @@ static void nft_exthdr_ipv4_eval(const struct nft_expr *expr, err =ipv4_find_option (nft_net (pkt), skb, &offset, priv->type);if (priv->flags &NFT_EXTHDR_F_PRESENT ) { - *dest = (err >=0 ); +nft_reg_store8 (dest, err >=0 );return ; }else if (err <0 ) { goto err;
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +2 -0
@@ -265,6 +265,8 @@ static int svc_rdma_post_recv(struct svcxprt_rdma *rdma) {struct svc_rdma_recv_ctxt *ctxt; +if (test_bit (XPT_CLOSE , &rdma->sc_xprt.xpt_flags)) +return 0 ; ctxt =svc_rdma_recv_ctxt_get (rdma);if (!ctxt)return -ENOMEM ;
scripts/kconfig/qconf.cc +35 -35
82 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +2 -0
@@ -7666,6 +7666,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x144d ,0xc109 ,"Samsung Ativ book 9 (NP900X3G)" ,ALC269_FIXUP_INV_DMIC ),SND_PCI_QUIRK (0x144d ,0xc169 ,"Samsung Notebook 9 Pen (NP930SBE-K01US)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ),SND_PCI_QUIRK (0x144d ,0xc176 ,"Samsung Notebook 9 Pro (NP930MBE-K04US)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), +SND_PCI_QUIRK (0x144d ,0xc189 ,"Samsung Galaxy Flex Book (NT950QCG-X716)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), +SND_PCI_QUIRK (0x144d ,0xc18a ,"Samsung Galaxy Book Ion (NT950XCJ-X716A)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ),SND_PCI_QUIRK (0x144d ,0xc740 ,"Samsung Ativ book 8 (NP870Z5G)" ,ALC269_FIXUP_ATIV_BOOK_8 ),SND_PCI_QUIRK (0x144d ,0xc812 ,"Samsung Notebook Pen S (NT950SBE-X58)" ,ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET ), SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
sound/soc/codecs/msm8916-wcd-analog.c +2 -2
@@ -19,8 +19,8 @@#define CDC_D_REVISION1 (0xf000)#define CDC_D_PERPH_SUBTYPE (0xf005) -#define CDC_D_INT_EN_SET (0x015) -#define CDC_D_INT_EN_CLR (0x016) +#define CDC_D_INT_EN_SET (0xf015) +#define CDC_D_INT_EN_CLR (0xf016)#define MBHC_SWITCH_INT BIT(7)#define MBHC_MIC_ELECTRICAL_INS_REM_DET BIT(6)#define MBHC_BUTTON_PRESS_DET BIT(5)
sound/soc/intel/atom/sst-mfld-platform-pcm.c +3 -2
@@ -331,7 +331,7 @@ static int sst_media_open(struct snd_pcm_substream *substream, ret_val =power_up_sst (stream);if (ret_val <0 ) -return ret_val; + goto out_power_up;/* Make sure, that the period size is always even */ snd_pcm_hw_constraint_step(substream->runtime, 0,
@@ -340,8 +340,9 @@ static int sst_media_open(struct snd_pcm_substream *substream,return snd_pcm_hw_constraint_integer (runtime,SNDRV_PCM_HW_PARAM_PERIODS ); out_ops: -kfree (stream);mutex_unlock (&sst_lock); +out_power_up: +kfree (stream);return ret_val; }
sound/soc/qcom/qdsp6/q6afe-dai.c +105 -105
311 lines not on this page · raw message
sound/soc/qcom/qdsp6/q6routing.c +16 -0
@@ -996,6 +996,20 @@ static int msm_routing_probe(struct snd_soc_component *c)return 0 ; } +static unsigned int q6routing_reg_read (struct snd_soc_component *component, +unsigned int reg) +{ +/* default value */ +return 0 ; +} + +static int q6routing_reg_write (struct snd_soc_component *component, +unsigned int reg,unsigned int val) +{ +/* dummy */ +return 0 ; +} +static const struct snd_soc_component_driver msm_soc_routing_component = { .ops = &q6pcm_routing_ops, .probe = msm_routing_probe,
@@ -1004,6 +1018,8 @@ static const struct snd_soc_component_driver msm_soc_routing_component = { .num_dapm_widgets = ARRAY_SIZE(msm_qdsp6_widgets), .dapm_routes = intercon, .num_dapm_routes = ARRAY_SIZE(intercon), + .read = q6routing_reg_read, + .write = q6routing_reg_write, };static int q6pcm_routing_probe (struct platform_device *pdev)
tools/objtool/Makefile +6 -0
@@ -3,9 +3,15 @@ include ../scripts/Makefile.include include ../scripts/Makefile.arch # always use the host compiler +ifneq ($(LLVM),) +HOSTAR ?= llvm-ar +HOSTCC ?= clang +HOSTLD ?= ld.lld +else HOSTAR ?= ar HOSTCC ?= gcc HOSTLD ?= ld +endif AR = $(HOSTAR) CC = $(HOSTCC) LD = $(HOSTLD)
tools/perf/util/probe-finder.c +1 -1
@@ -1362,7 +1362,7 @@ int debuginfo__find_trace_events(struct debuginfo *dbg, tf.ntevs =0 ; ret =debuginfo__find_probes (dbg, &tf.pf); -if (ret <0 ) { +if (ret <0 || tf.ntevs ==0 ) {for (i =0 ; i < tf.ntevs; i++)clear_probe_trace_event (&tf.tevs[i]);zfree (tevs);
tools/testing/selftests/cgroup/cgroup_util.c +1 -1
@@ -105,7 +105,7 @@ int cg_read_strcmp(const char *cgroup, const char *control,/* Handle the case of comparing against empty string */ if (!expected) - size =32 ; +return -1 ;else size =strlen (expected) +1 ;
virt/kvm/arm/mmu.c +14 -5
@@ -332,7 +332,8 @@ static void unmap_stage2_puds(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;
@@ -357,11 +358,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) {
@@ -2045,18 +2051,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 ; }
virt/kvm/kvm_main.c +2 -1
@@ -425,7 +425,8 @@ static int kvm_mmu_notifier_invalidate_range_start(struct mmu_notifier *mn,* count is also read inside the mmu_lock critical section. */ kvm->mmu_notifier_count++; - need_tlb_flush =kvm_unmap_hva_range (kvm, range->start, range->end); + need_tlb_flush =kvm_unmap_hva_range (kvm, range->start, range->end, + range->flags); need_tlb_flush |= kvm->tlbs_dirty;/* we've to flush the tlb before the pages can be freed */ if (need_tlb_flush)