Linux 5.2.16
Greg KH
maintainerI'm announcing the release of the 5.2.16 kernel.
All users of the 5.2 kernel series must upgrade.
The updated 5.2.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.2.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/powerpc/include/asm/uaccess.h | 1 arch/s390/kvm/interrupt.c | 10 + arch/s390/kvm/kvm-s390.c | 4 arch/sparc/kernel/sys_sparc_64.c | 33 ++-- arch/x86/Makefile | 1 arch/x86/boot/compressed/acpi.c | 143 +++++++++++++----- arch/x86/include/asm/kvm_host.h | 2 arch/x86/kernel/ima_arch.c | 12 + arch/x86/kvm/mmu.c | 101 ++++++++++++- arch/x86/kvm/svm.c | 42 ++++- arch/x86/kvm/vmx/nested.c | 12 - arch/x86/kvm/x86.c | 7 arch/x86/purgatory/Makefile | 35 ++-- drivers/base/core.c | 53 ++++++ drivers/bluetooth/btusb.c | 5 drivers/clk/clk.c | 38 ++++ drivers/clk/rockchip/clk-mmc-phase.c | 4 drivers/crypto/talitos.c | 70 ++++++--- drivers/firmware/ti_sci.c | 8 - drivers/gpio/gpio-mockup.c | 1 drivers/gpio/gpiolib-acpi.c | 42 ++++- drivers/gpio/gpiolib.c | 16 +- drivers/gpu/drm/drm_panel_orientation_quirks.c | 12 + drivers/gpu/drm/i915/intel_dp_mst.c | 10 + drivers/gpu/drm/i915/intel_workarounds.c | 5 drivers/gpu/drm/lima/lima_gem.c | 2 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 5 drivers/gpu/drm/meson/meson_plane.c | 16 ++ drivers/iio/adc/stm32-dfsdm-adc.c | 162 ++++++++++++++++----- drivers/iio/adc/stm32-dfsdm.h | 24 ++- drivers/isdn/capi/capi.c | 10 + drivers/mmc/host/bcm2835.c | 2 drivers/mmc/host/sdhci-pci-o2micro.c | 2 drivers/mmc/host/tmio_mmc.h | 1 drivers/mmc/host/tmio_mmc_core.c | 16 +- drivers/mtd/nand/raw/mtk_nand.c | 21 +- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 7 drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 29 +-- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 3 drivers/net/phy/phylink.c | 6 drivers/net/tun.c | 16 +- drivers/net/usb/cdc_ether.c | 10 + drivers/net/wireless/mediatek/mt76/mt7615/main.c | 5 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 2 drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.c | 5 drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 18 -- drivers/net/wireless/rsi/rsi_91x_usb.c | 1 drivers/pci/pci-driver.c | 3 drivers/platform/x86/pcengines-apuv2.c | 2 drivers/platform/x86/pmc_atom.c | 8 + drivers/regulator/twl-regulator.c | 23 ++ fs/btrfs/tree-log.c | 16 +- fs/ubifs/tnc.c | 16 +- include/linux/phy_fixed.h | 1 include/linux/syscalls.h | 19 ++ include/uapi/asm-generic/unistd.h | 2 include/uapi/linux/isdn/capicmd.h | 1 ipc/util.h | 25 --- kernel/cgroup/cgroup.c | 10 + kernel/irq/resend.c | 2 kernel/module.c | 51 ++++-- mm/z3fold.c | 7 net/bridge/br_mdb.c | 2 net/core/dev.c | 2 net/core/skbuff.c | 19 ++ net/core/sock_map.c | 3 net/ipv4/tcp_input.c | 2 net/ipv6/ping.c | 2 net/ipv6/route.c | 8 - net/sched/sch_generic.c | 9 - net/sched/sch_hhf.c | 2 net/sctp/protocol.c | 2 net/sctp/sm_sideeffect.c | 2 net/sctp/socket.c | 3 net/tipc/name_distr.c | 3 76 files changed, 955 insertions(+), 322 deletions(-)
Alex Williamson (1):
PCI: Always allow probing with driver_override
Alexander Duyck (1):
ixgbe: Prevent u8 wrapping of ITR value to something less than 10us
Andreas Kemnade (1):
regulator: twl: voltage lists for vdd1/2 on twl4030
Andrew F. Davis (1):
firmware: ti_sci: Always request response from firmware
Arnd Bergmann (2):
ipc: fix semtimedop for generic 32-bit architectures
ipc: fix sparc64 ipc() wrapper
Bjørn Mork (1):
cdc_ether: fix rndis support for Mediatek based smartphones
Chen-Yu Tsai (1):
clk: Fix debugfs clk_possible_parents for clks without parent string names
Chris Wilson (1):
drm/i915: Restore relaxed padding (OCL_OOB_SUPPRES_ENABLE) for skl+
Christophe JAILLET (2):
ipv6: Fix the link time qualifier of 'ping_v6_proc_exit_net()'
sctp: Fix the link time qualifier of 'sctp_ctrlsock_exit()'
Christophe Leroy (6):
crypto: talitos - check AES key size
crypto: talitos - fix CTR alg blocksize
crypto: talitos - check data blocksize in ablkcipher.
crypto: talitos - fix ECB algs ivsize
crypto: talitos - Do not modify req->cryptlen on decryption.
crypto: talitos - HMAC SNOOP NO AFEU mode requires SW icv checking.
Cong Wang (1):
sch_hhf: ensure quantum and hhf_non_hh_weight are non-zero
Dan Carpenter (2):
mt76: Fix a signedness bug in mt7615_add_interface()
mt76: mt7615: Use after free in mt7615_mcu_set_bcn()
Daniel Drake (1):
Revert "mmc: sdhci: Remove unneeded quirk2 flag of O2 SD host controller"
Douglas Anderson (1):
clk: rockchip: Don't yell about bad mmc phases when getting
Enrico Weigelt (1):
platform/x86: pcengines-apuv2: use KEY_RESTART for front button
Eric Biggers (1):
isdn/capi: check message length in capi_write()
Eric Dumazet (1):
net: sched: fix reordering issues
Filipe Manana (1):
Btrfs: fix assertion failure during fsync and use of stale transaction
Fuqian Huang (1):
KVM: x86: work around leak of uninitialized stack contents
Greg Kroah-Hartman (1):
Linux 5.2.16
Gustavo A. R. Silva (1):
mm/z3fold.c: fix lock/unlock imbalance in z3fold_page_isolate
Hans de Goede (2):
gpiolib: acpi: Add gpiolib_acpi_run_edge_events_on_boot option and blacklist
drm: panel-orientation-quirks: Add extra quirk table entry for GPD MicroPC
Henry Burns (1):
mm/z3fold.c: remove z3fold_migration trylock
Hui Peng (1):
rsi: fix a double free bug in rsi_91x_deinit()
Igor Mammedov (1):
KVM: s390: kvm_s390_vm_start_migration: check dirty_bitmap before using it as target for memset()
Ilya Maximets (1):
ixgbe: fix double clean of Tx descriptors with xdp
Jeff Kirsher (1):
ixgbevf: Fix secpath usage for IPsec Tx offload
Jessica Yu (1):
modules: always page-align module section allocations
Jim Mattson (1):
kvm: nVMX: Remove unnecessary sync_roots from handle_invept
John Fastabend (1):
net: sock_map, fix missing ulp check in sock hash case
Junichi Nomura (1):
x86/boot: Use efi_setup_data for searching RSDP on kexec-ed kernels
Kent Gibson (2):
gpio: fix line flag validation in linehandle_create
gpio: fix line flag validation in lineevent_create
Linus Torvalds (1):
x86/build: Add -Wnoaddress-of-packed-member to REALMODE_CFLAGS, to silence GCC9 build warning
Liran Alon (1):
KVM: SVM: Fix detection of AMD Errata 1096
Maciej Żenczykowski (2):
net-ipv6: fix excessive RTF_ADDRCONF flag on ::1/128 local route (and others)
ipv6: addrconf_f6i_alloc - fix non-null pointer check to !IS_ERR()
Mario Limonciello (1):
Revert "Bluetooth: btusb: driver to enable the usb-wakeup feature"
Mimi Zohar (1):
x86/ima: check EFI SetupMode too
Moritz Fischer (1):
net: fixed_phy: Add forward declaration for struct gpio_desc;
Muchun Song (1):
driver core: Fix use-after-free and double free on glue directory
Neal Cardwell (1):
tcp: fix tcp_ecn_withdraw_cwr() to clear TCP_ECN_QUEUE_CWR
Neil Armstrong (1):
drm/meson: Add support for XBGR8888 & ABGR8888 formats
Nicolas Dichtel (1):
bridge/mdb: remove wrong use of NLM_F_MULTI
Nishka Dasgupta (1):
drm/mediatek: mtk_drm_drv.c: Add of_node_put() before goto
Olivier Moysan (2):
iio: adc: stm32-dfsdm: fix output resolution
iio: adc: stm32-dfsdm: fix data type
Paolo Bonzini (1):
KVM: nVMX: handle page fault in vmread
Richard Weinberger (1):
ubifs: Correctly use tnc_next() in search_dh_cookie()
Roman Gushchin (1):
cgroup: freezer: fix frozen state inheritance
Sean Christopherson (1):
KVM: x86/mmu: Reintroduce fast invalidate/zap for flushing memslot
Shmulik Ladkani (1):
net: gso: Fix skb_segment splat when splitting gso_size mangled skb having linear-headed frag_list
Stanislaw Gruszka (2):
Revert "rt2800: enable TX_PIN_CFG_LNA_PE_ bits per band"
mt76: mt76x0e: disable 5GHz band for MT7630E
Stefan Chulski (1):
net: phylink: Fix flow control resolution
Stefan Wahren (1):
Revert "mmc: bcm2835: Terminate timeout work synchronously"
Steffen Dirkwinkel (1):
platform/x86: pmc_atom: Add CB4063 Beckhoff Automation board to critclk_systems DMI table
Steffen Klassert (1):
ixgbe: Fix secpath usage for IPsec TX offload.
Stephen Boyd (1):
clk: Simplify debugfs printing and add a newline
Steve Wahl (1):
x86/purgatory: Change compiler flags from -mcmodel=kernel to -mcmodel=large to fix kexec relocation errors
Subash Abhinov Kasiviswanathan (1):
net: Fix null de-reference of device refcount
Suraj Jitindar Singh (1):
powerpc: Add barrier_nospec to raw_copy_in_user()
Thomas Huth (1):
KVM: s390: Do not leak kernel stack data in the KVM_S390_INTERRUPT ioctl
Ulf Hansson (2):
mmc: tmio: Fixup runtime PM management during probe
mmc: tmio: Fixup runtime PM management during remove
Vasily Khoruzhick (1):
drm/lima: fix lima_gem_wait() return value
Ville Syrjälä (1):
drm/i915: Limit MST to <= 8bpc once again
Wei Yongjun (1):
gpio: mockup: add missing single_release()
Xiaolei Li (1):
mtd: rawnand: mtk: Fix wrongly assigned OOB buffer pointer issue
Xin Long (3):
sctp: use transport pf_retrans in sctp_do_8_2_transport_strike
tipc: add NULL pointer check before calling kfree_rcu
sctp: fix the missing put_user when dumping transport thresholds
Yang Yingliang (3):
tun: fix use-after-free when register netdev failed
modules: fix BUG when load module with rodata=n
modules: fix compile error if don't have strict module rwx
YueHaibing (1):
kernel/module: Fix mem leak in module_add_modinfo_attrs
Yunfeng Ye (1):
genirq: Prevent NULL pointer dereference in resend_irqs()
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 2 -SUBLEVEL = 15 +SUBLEVEL = 16 EXTRAVERSION = NAME = Bobtail Squid
arch/powerpc/include/asm/uaccess.h +1 -0
@@ -312,6 +312,7 @@ raw_copy_in_user(void __user *to, const void __user *from, unsigned long n) {unsigned long ret; +barrier_nospec ();allow_user_access (to, from, n); ret =__copy_tofrom_user (to, from, n);prevent_user_access (to, from, n);
arch/s390/kvm/interrupt.c +10 -0
@@ -1978,6 +1978,16 @@ int s390int_to_s390irq(struct kvm_s390_interrupt *s390int,case KVM_S390_MCHK : irq->u.mchk.mcic = s390int->parm64;break ; +case KVM_S390_INT_PFAULT_INIT : + irq->u.ext.ext_params = s390int->parm; + irq->u.ext.ext_params2 = s390int->parm64; +break ; +case KVM_S390_RESTART : +case KVM_S390_INT_CLOCK_COMP : +case KVM_S390_INT_CPU_TIMER : +break ; +default : +return -EINVAL ; }return 0 ; }
arch/s390/kvm/kvm-s390.c +3 -1
@@ -1013,6 +1013,8 @@ static int kvm_s390_vm_start_migration(struct kvm *kvm)/* mark all the pages in active slots as dirty */ for (slotnr =0 ; slotnr < slots->used_slots; slotnr++) { ms = slots->memslots + slotnr; +if (!ms->dirty_bitmap) +return -EINVAL ;/* * The second half of the bitmap is only used on x86, * and would be wasted otherwise, so we put it to good
@@ -4325,7 +4327,7 @@ long kvm_arch_vcpu_async_ioctl(struct file *filp, }case KVM_S390_INTERRUPT : {struct kvm_s390_interrupt s390int; -struct kvm_s390_irq s390irq; +struct kvm_s390_irq s390irq = {};if (copy_from_user (&s390int, argp,sizeof (s390int)))return -EFAULT ;
arch/sparc/kernel/sys_sparc_64.c +18 -15
@@ -336,25 +336,28 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second {long err; +if (!IS_ENABLED (CONFIG_SYSVIPC )) +return -ENOSYS ; +/* No need for backward compatibility. We can start fresh... */ if (call <=SEMTIMEDOP ) {switch (call) {case SEMOP : - err =sys_semtimedop (first, ptr, - (unsigned int )second,NULL ); + err =ksys_semtimedop (first, ptr, + (unsigned int )second,NULL ); goto out;case SEMTIMEDOP : - err =sys_semtimedop (first, ptr, (unsigned int )second, + err =ksys_semtimedop (first, ptr, (unsigned int )second, (const struct __kernel_timespec __user *) - (unsigned long ) fifth); + (unsigned long ) fifth); goto out;case SEMGET : - err =sys_semget (first, (int )second, (int )third); + err =ksys_semget (first, (int )second, (int )third); goto out;case SEMCTL : { - err =sys_semctl (first, second, - (int )third |IPC_64 , - (unsigned long ) ptr); + err =ksys_old_semctl (first, second, + (int )third |IPC_64 , + (unsigned long ) ptr); goto out; }default :
@@ -365,18 +368,18 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, secondif (call <=MSGCTL ) {switch (call) {case MSGSND : - err =sys_msgsnd (first, ptr, (size_t )second, + err =ksys_msgsnd (first, ptr, (size_t )second, (int )third); goto out;case MSGRCV : - err =sys_msgrcv (first, ptr, (size_t )second, fifth, + err =ksys_msgrcv (first, ptr, (size_t )second, fifth, (int )third); goto out;case MSGGET : - err =sys_msgget ((key_t )first, (int )second); + err =ksys_msgget ((key_t )first, (int )second); goto out;case MSGCTL : - err =sys_msgctl (first, (int )second |IPC_64 , ptr); + err =ksys_old_msgctl (first, (int )second |IPC_64 , ptr); goto out;default : err = -ENOSYS ;
@@ -396,13 +399,13 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second goto out; }case SHMDT : - err =sys_shmdt (ptr); + err =ksys_shmdt (ptr); goto out;case SHMGET : - err =sys_shmget (first, (size_t )second, (int )third); + err =ksys_shmget (first, (size_t )second, (int )third); goto out;case SHMCTL : - err =sys_shmctl (first, (int )second |IPC_64 , ptr); + err =ksys_old_shmctl (first, (int )second |IPC_64 , ptr); goto out;default : err = -ENOSYS ;
arch/x86/Makefile +1 -0
@@ -38,6 +38,7 @@ REALMODE_CFLAGS := $(M16_CFLAGS) -g -Os -DDISABLE_BRANCH_PROFILING \ REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -ffreestanding) REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -fno-stack-protector) +REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -Wno-address-of-packed-member) REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), $(cc_stack_align4)) export REALMODE_CFLAGS
arch/x86/boot/compressed/acpi.c +107 -36
179 lines not on this page · raw message
arch/x86/include/asm/kvm_host.h +2 -0
@@ -333,6 +333,7 @@ struct kvm_mmu_page {int root_count;/* Currently serving as active root */ unsigned int unsync_children;struct kvm_rmap_head parent_ptes;/* rmap pointers to parent sptes */ +unsigned long mmu_valid_gen;DECLARE_BITMAP (unsync_child_bitmap,512 );#ifdef CONFIG_X86_32
@@ -851,6 +852,7 @@ struct kvm_arch {unsigned long n_requested_mmu_pages;unsigned long n_max_mmu_pages;unsigned int indirect_shadow_pages; +unsigned long mmu_valid_gen;struct hlist_head mmu_page_hash[KVM_NUM_MMU_PAGES ];/* * Hash table of struct kvm_mmu_page.
arch/x86/kernel/ima_arch.c +10 -2
@@ -11,10 +11,11 @@ extern struct boot_params boot_params;static enum efi_secureboot_mode get_sb_mode (void ) {efi_char16_t efi_SecureBoot_name[] =L"SecureBoot" ; +efi_char16_t efi_SetupMode_name[] =L"SecureBoot" ;efi_guid_t efi_variable_guid =EFI_GLOBAL_VARIABLE_GUID ;efi_status_t status;unsigned long size; -u8 secboot; +u8 secboot, setupmode; size =sizeof (secboot);
@@ -36,7 +37,14 @@ static enum efi_secureboot_mode get_sb_mode(void)return efi_secureboot_mode_unknown; } -if (secboot ==0 ) { + size =sizeof (setupmode); + status = efi.get_variable (efi_SetupMode_name, &efi_variable_guid, +NULL , &size, &setupmode); + +if (status !=EFI_SUCCESS )/* ignore unknown SetupMode */ + setupmode =0 ; + +if (secboot ==0 || setupmode ==1 ) {pr_info ("ima: secureboot mode disabled\n" );return efi_secureboot_mode_disabled; }
arch/x86/kvm/mmu.c +99 -2
141 lines not on this page · raw message
arch/x86/kvm/svm.c +35 -7
59 lines not on this page · raw message
arch/x86/kvm/vmx/nested.c +6 -6
@@ -4411,6 +4411,7 @@ static int handle_vmread(struct kvm_vcpu *vcpu)int len;gva_t gva =0 ;struct vmcs12 *vmcs12; +struct x86_exception e;if (!nested_vmx_check_permission (vcpu))return 1 ;
@@ -4451,7 +4452,8 @@ static int handle_vmread(struct kvm_vcpu *vcpu) vmx_instruction_info, true, len, &gva))return 1 ;/* _system ok, nested_vmx_check_permission has verified cpl=0 */ -kvm_write_guest_virt_system (vcpu, gva, &field_value, len,NULL ); +if (kvm_write_guest_virt_system (vcpu, gva, &field_value, len, &e)) +kvm_inject_page_fault (vcpu, &e); }return nested_vmx_succeed (vcpu);
@@ -4706,13 +4708,11 @@ static int handle_invept(struct kvm_vcpu *vcpu)switch (type) {case VMX_EPT_EXTENT_GLOBAL : +case VMX_EPT_EXTENT_CONTEXT :/* -* TODO: track mappings and invalidate -* single context requests appropriately +* TODO: Sync the necessary shadow EPT roots here, rather than +* at the next emulated VM-entry. */ -case VMX_EPT_EXTENT_CONTEXT : -kvm_mmu_sync_roots (vcpu); -kvm_make_request (KVM_REQ_TLB_FLUSH , vcpu);break ;default :BUG_ON (1 );
arch/x86/kvm/x86.c +7 -0
@@ -5265,6 +5265,13 @@ int kvm_write_guest_virt_system(struct kvm_vcpu *vcpu, gva_t addr, void *val,/* kvm_write_guest_virt_system can pull in tons of pages. */ vcpu->arch.l1tf_flush_l1d = true; +/* +* FIXME: this should call handle_emulation_failure if X86EMUL_IO_NEEDED +* is returned, but our callers are not ready for that and they blindly +* call kvm_inject_page_fault. Ensure that they at least do not leak +* uninitialized kernel stack memory into cr2 and error code. +*/ +memset (exception,0 ,sizeof (*exception));return kvm_write_guest_virt_helper (addr, val, bytes, vcpu,PFERR_WRITE_MASK , exception); }
arch/x86/purgatory/Makefile +19 -16
@@ -18,37 +18,40 @@ targets += purgatory.ro KASAN_SANITIZE := n KCOV_INSTRUMENT := n +# These are adjustments to the compiler flags used for objects that +# make up the standalone purgatory.ro + +PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel +PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss + # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That # in turn leaves some undefined symbols like __fentry__ in purgatory and not # sure how to relocate those. ifdef CONFIG_FUNCTION_TRACER -CFLAGS_REMOVE_sha256.o += $(CC_FLAGS_FTRACE) -CFLAGS_REMOVE_purgatory.o += $(CC_FLAGS_FTRACE) -CFLAGS_REMOVE_string.o += $(CC_FLAGS_FTRACE) -CFLAGS_REMOVE_kexec-purgatory.o += $(CC_FLAGS_FTRACE) +PURGATORY_CFLAGS_REMOVE += $(CC_FLAGS_FTRACE) endif ifdef CONFIG_STACKPROTECTOR -CFLAGS_REMOVE_sha256.o += -fstack-protector -CFLAGS_REMOVE_purgatory.o += -fstack-protector -CFLAGS_REMOVE_string.o += -fstack-protector -CFLAGS_REMOVE_kexec-purgatory.o += -fstack-protector +PURGATORY_CFLAGS_REMOVE += -fstack-protector endif ifdef CONFIG_STACKPROTECTOR_STRONG -CFLAGS_REMOVE_sha256.o += -fstack-protector-strong -CFLAGS_REMOVE_purgatory.o += -fstack-protector-strong -CFLAGS_REMOVE_string.o += -fstack-protector-strong -CFLAGS_REMOVE_kexec-purgatory.o += -fstack-protector-strong +PURGATORY_CFLAGS_REMOVE += -fstack-protector-strong endif ifdef CONFIG_RETPOLINE -CFLAGS_REMOVE_sha256.o += $(RETPOLINE_CFLAGS) -CFLAGS_REMOVE_purgatory.o += $(RETPOLINE_CFLAGS) -CFLAGS_REMOVE_string.o += $(RETPOLINE_CFLAGS) -CFLAGS_REMOVE_kexec-purgatory.o += $(RETPOLINE_CFLAGS) +PURGATORY_CFLAGS_REMOVE += $(RETPOLINE_CFLAGS) endif +CFLAGS_REMOVE_purgatory.o += $(PURGATORY_CFLAGS_REMOVE) +CFLAGS_purgatory.o += $(PURGATORY_CFLAGS) + +CFLAGS_REMOVE_sha256.o += $(PURGATORY_CFLAGS_REMOVE) +CFLAGS_sha256.o += $(PURGATORY_CFLAGS) + +CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE) +CFLAGS_string.o += $(PURGATORY_CFLAGS) + $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE $(call if_changed,ld)
drivers/base/core.c +52 -1
64 lines not on this page · raw message
drivers/bluetooth/btusb.c +0 -5
@@ -1162,10 +1162,6 @@ static int btusb_open(struct hci_dev *hdev) } data->intf->needs_remote_wakeup =1 ; -/* device specific wakeup source enabled and required for USB -* remote wakeup while host is suspended -*/ -device_wakeup_enable (&data->udev->dev);if (test_and_set_bit (BTUSB_INTR_RUNNING , &data->flags)) goto done;
@@ -1229,7 +1225,6 @@ static int btusb_close(struct hci_dev *hdev) goto failed; data->intf->needs_remote_wakeup =0 ; -device_wakeup_disable (&data->udev->dev);usb_autopm_put_interface (data->intf); failed:
drivers/clk/clk.c +36 -2
@@ -3020,15 +3020,49 @@ static int clk_flags_show(struct seq_file *s, void *data) }DEFINE_SHOW_ATTRIBUTE (clk_flags); +static void possible_parent_show (struct seq_file *s,struct clk_core *core, +unsigned int i,char terminator) +{ +struct clk_core *parent; + +/* +* Go through the following options to fetch a parent's name. +* +* 1. Fetch the registered parent clock and use its name +* 2. Use the global (fallback) name if specified +* 3. Use the local fw_name if provided +* 4. Fetch parent clock's clock-output-name if DT index was set +* +* This may still fail in some cases, such as when the parent is +* specified directly via a struct clk_hw pointer, but it isn't +* registered (yet). +*/ + parent =clk_core_get_parent_by_index (core, i); +if (parent) +seq_printf (s,"%s" , parent->name); +else if (core->parents[i].name) +seq_printf (s,"%s" , core->parents[i].name); +else if (core->parents[i].fw_name) +seq_printf (s,"<%s>(fw)" , core->parents[i].fw_name); +else if (core->parents[i].index >=0 ) +seq_printf (s,"%s" , +of_clk_get_parent_name (core->of_node, + core->parents[i].index)); +else +seq_puts (s,"(missing)" ); + +seq_putc (s, terminator); +} +static int possible_parents_show (struct seq_file *s,void *data) {struct clk_core *core = s->private;int i;for (i =0 ; i < core->num_parents -1 ; i++) -seq_printf (s,"%s " , core->parents[i].name); +possible_parent_show (s, core, i,' ' ); -seq_printf (s,"%s\n" , core->parents[i].name); +possible_parent_show (s, core, i,'\n' );return 0 ; }
drivers/clk/rockchip/clk-mmc-phase.c +1 -3
@@ -52,10 +52,8 @@ static int rockchip_mmc_get_phase(struct clk_hw *hw)u32 delay_num =0 ;/* See the comment for rockchip_mmc_set_phase below */ -if (!rate) { -pr_err ("%s: invalid clk rate\n" , __func__); +if (!rate)return -EINVAL ; - } raw_value =readl (mmc_clock->reg) >> (mmc_clock->shift);
drivers/crypto/talitos.c +51 -19
218 lines not on this page · raw message
drivers/firmware/ti_sci.c +4 -4
@@ -466,9 +466,9 @@ static int ti_sci_cmd_get_revision(struct ti_sci_info *info)struct ti_sci_xfer *xfer;int ret; -/* No need to setup flags since it is expected to respond */ xfer =ti_sci_get_one_xfer (info,TI_SCI_MSG_VERSION , -0x0 ,sizeof (struct ti_sci_msg_hdr ), +TI_SCI_FLAG_REQ_ACK_ON_PROCESSED , +sizeof (struct ti_sci_msg_hdr ),sizeof (*rev_info));if (IS_ERR (xfer)) { ret =PTR_ERR (xfer);
@@ -596,9 +596,9 @@ static int ti_sci_get_device_state(const struct ti_sci_handle *handle, info =handle_to_ti_sci_info (handle); dev = info->dev; -/* Response is expected, so need of any flags */ xfer =ti_sci_get_one_xfer (info,TI_SCI_MSG_GET_DEVICE_STATE , -0 ,sizeof (*req),sizeof (*resp)); +TI_SCI_FLAG_REQ_ACK_ON_PROCESSED , +sizeof (*req),sizeof (*resp));if (IS_ERR (xfer)) { ret =PTR_ERR (xfer);dev_err (dev,"Message alloc failed(%d)\n" , ret);
drivers/gpio/gpio-mockup.c +1 -0
@@ -309,6 +309,7 @@ static const struct file_operations gpio_mockup_debugfs_ops = { .read = gpio_mockup_debugfs_read, .write = gpio_mockup_debugfs_write, .llseek = no_llseek, + .release = single_release, }; static void gpio_mockup_debugfs_setup(struct device *dev,
drivers/gpio/gpiolib-acpi.c +38 -4
63 lines not on this page · raw message
drivers/gpio/gpiolib.c +11 -5
@@ -535,6 +535,14 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS )return -EINVAL ; +/* +* Do not allow both INPUT & OUTPUT flags to be set as they are +* contradictory. +*/ +if ((lflags &GPIOHANDLE_REQUEST_INPUT ) && + (lflags &GPIOHANDLE_REQUEST_OUTPUT )) +return -EINVAL ; +/* * Do not allow OPEN_SOURCE & OPEN_DRAIN flags in a single request. If * the hardware actually supports enabling both at the same time the
@@ -926,7 +934,9 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip) }/* This is just wrong: we don't look for events on output lines */ -if (lflags &GPIOHANDLE_REQUEST_OUTPUT ) { +if ((lflags &GPIOHANDLE_REQUEST_OUTPUT ) || + (lflags &GPIOHANDLE_REQUEST_OPEN_DRAIN ) || + (lflags &GPIOHANDLE_REQUEST_OPEN_SOURCE )) { ret = -EINVAL ; goto out_free_label; }
@@ -940,10 +950,6 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)if (lflags &GPIOHANDLE_REQUEST_ACTIVE_LOW )set_bit (FLAG_ACTIVE_LOW , &desc->flags); -if (lflags &GPIOHANDLE_REQUEST_OPEN_DRAIN ) -set_bit (FLAG_OPEN_DRAIN , &desc->flags); -if (lflags &GPIOHANDLE_REQUEST_OPEN_SOURCE ) -set_bit (FLAG_OPEN_SOURCE , &desc->flags); ret =gpiod_direction_input (desc);if (ret)
drivers/gpu/drm/drm_panel_orientation_quirks.c +12 -0
@@ -90,6 +90,12 @@ static const struct drm_dmi_panel_orientation_data itworks_tw891 = { .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, }; +static const struct drm_dmi_panel_orientation_data lcd720x1280_rightside_up = { + .width =720 , + .height =1280 , + .orientation =DRM_MODE_PANEL_ORIENTATION_RIGHT_UP , +}; +static const struct drm_dmi_panel_orientation_data lcd800x1280_rightside_up = { .width =800 , .height =1280 ,
@@ -123,6 +129,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), }, .driver_data = (void *)&gpd_micropc, + }, { /* GPD MicroPC (later BIOS versions with proper DMI strings) */ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"GPD" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MicroPC"), + }, + .driver_data = (void *)&lcd720x1280_rightside_up, }, { /** GPD Pocket, note that the the DMI data is less generic then * it seems, devices with a board-vendor of "AMI Corporation"
drivers/gpu/drm/i915/intel_dp_mst.c +9 -1
@@ -125,7 +125,15 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder, limits.max_lane_count =intel_dp_max_lane_count (intel_dp); limits.min_bpp =intel_dp_min_bpp (pipe_config); - limits.max_bpp = pipe_config->pipe_bpp; +/* +* FIXME: If all the streams can't fit into the link with +* their current pipe_bpp we should reduce pipe_bpp across +* the board until things start to fit. Until then we +* limit to <= 8bpc since that's what was hardcoded for all +* MST streams previously. This hack should be removed once +* we have the proper retry logic in place. +*/ + limits.max_bpp =min (pipe_config->pipe_bpp,24 );intel_dp_adjust_compliance_config (intel_dp, pipe_config, &limits);
drivers/gpu/drm/i915/intel_workarounds.c +0 -5
@@ -294,11 +294,6 @@ static void gen9_ctx_workarounds_init(struct intel_engine_cs *engine)FLOW_CONTROL_ENABLE | PARTIAL_INSTRUCTION_SHOOTDOWN_DISABLE); -/* Syncing dependencies between camera and graphics:skl,bxt,kbl */ -if (!IS_COFFEELAKE (i915)) -WA_SET_BIT_MASKED (HALF_SLICE_CHICKEN3 , -GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC ); -/* WaEnableYV12BugFixInHalfSliceChicken7:skl,bxt,kbl,glk,cfl */ /* WaEnableSamplerGPGPUPreemptionSupport:skl,bxt,kbl,cfl */ WA_SET_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN7,
drivers/gpu/drm/lima/lima_gem.c +1 -1
@@ -342,7 +342,7 @@ int lima_gem_wait(struct drm_file *file, u32 handle, u32 op, s64 timeout_ns) timeout =drm_timeout_abs_to_jiffies (timeout_ns); ret =drm_gem_reservation_object_wait (file, handle, write, timeout); -if (ret ==0 ) +if (ret == -ETIME ) ret = timeout ? -ETIMEDOUT : -EBUSY ;return ret;
drivers/gpu/drm/mediatek/mtk_drm_drv.c +4 -1
@@ -567,12 +567,15 @@ static int mtk_drm_probe(struct platform_device *pdev) comp =devm_kzalloc (dev,sizeof (*comp),GFP_KERNEL );if (!comp) { ret = -ENOMEM ; +of_node_put (node); goto err_node; } ret =mtk_ddp_comp_init (dev, node, comp, comp_id,NULL ); -if (ret) +if (ret) { +of_node_put (node); goto err_node; + } private->ddp_comp[comp_id] = comp; }
drivers/gpu/drm/meson/meson_plane.c +16 -0
@@ -153,6 +153,13 @@ static void meson_plane_atomic_update(struct drm_plane *plane, priv->viu.osd1_blk0_cfg[0 ] |=OSD_BLK_MODE_32 |OSD_COLOR_MATRIX_32_ARGB ;break ; +case DRM_FORMAT_XBGR8888 : +/* For XRGB, replace the pixel's alpha by 0xFF */ +writel_bits_relaxed (OSD_REPLACE_EN ,OSD_REPLACE_EN , + priv->io_base +_REG (VIU_OSD1_CTRL_STAT2 )); + priv->viu.osd1_blk0_cfg[0 ] |=OSD_BLK_MODE_32 | +OSD_COLOR_MATRIX_32_ABGR ; +break ;case DRM_FORMAT_ARGB8888 :/* For ARGB, use the pixel's alpha */ writel_bits_relaxed(OSD_REPLACE_EN, 0,
@@ -160,6 +167,13 @@ static void meson_plane_atomic_update(struct drm_plane *plane, priv->viu.osd1_blk0_cfg[0 ] |=OSD_BLK_MODE_32 |OSD_COLOR_MATRIX_32_ARGB ;break ; +case DRM_FORMAT_ABGR8888 : +/* For ARGB, use the pixel's alpha */ +writel_bits_relaxed (OSD_REPLACE_EN ,0 , + priv->io_base +_REG (VIU_OSD1_CTRL_STAT2 )); + priv->viu.osd1_blk0_cfg[0 ] |=OSD_BLK_MODE_32 | +OSD_COLOR_MATRIX_32_ABGR ; +break ;case DRM_FORMAT_RGB888 : priv->viu.osd1_blk0_cfg[0 ] |=OSD_BLK_MODE_24 |OSD_COLOR_MATRIX_24_RGB ;
@@ -346,7 +360,9 @@ static const struct drm_plane_funcs meson_plane_funcs = {static const uint32_t supported_drm_formats[] = {DRM_FORMAT_ARGB8888 , +DRM_FORMAT_ABGR8888 ,DRM_FORMAT_XRGB8888 , +DRM_FORMAT_XBGR8888 ,DRM_FORMAT_RGB888 ,DRM_FORMAT_RGB565 , };
drivers/iio/adc/stm32-dfsdm-adc.c +125 -37
271 lines not on this page · raw message
drivers/iio/adc/stm32-dfsdm.h +19 -5
@@ -243,19 +243,33 @@ enum stm32_dfsdm_sinc_order { };/** -* struct stm32_dfsdm_filter - structure relative to stm32 FDSDM filter +* struct stm32_dfsdm_filter_osr - DFSDM filter settings linked to oversampling * @iosr: integrator oversampling * @fosr: filter oversampling -* @ford: filter order +* @rshift: output sample right shift (hardware shift) +* @lshift: output sample left shift (software shift) * @res: output sample resolution +* @max: output sample maximum positive value +*/ +struct stm32_dfsdm_filter_osr { +unsigned int iosr; +unsigned int fosr; +unsigned int rshift; +unsigned int lshift; +u64 res; +s32 max; +}; + +/** +* struct stm32_dfsdm_filter - structure relative to stm32 FDSDM filter +* @ford: filter order +* @flo: filter oversampling structure * @sync_mode: filter synchronized with filter 0 * @fast: filter fast mode */ struct stm32_dfsdm_filter { -unsigned int iosr; -unsigned int fosr;enum stm32_dfsdm_sinc_order ford; -u64 res; +struct stm32_dfsdm_filter_osr flo;unsigned int sync_mode;unsigned int fast; };
drivers/isdn/capi/capi.c +9 -1
@@ -688,6 +688,9 @@ capi_write(struct file *file, const char __user *buf, size_t count, loff_t *pposif (!cdev->ap.applid)return -ENODEV ; +if (count <CAPIMSG_BASELEN ) +return -EINVAL ; + skb =alloc_skb (count,GFP_USER );if (!skb)return -ENOMEM ;
@@ -698,7 +701,8 @@ capi_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos } mlen =CAPIMSG_LEN (skb->data);if (CAPIMSG_CMD (skb->data) ==CAPI_DATA_B3_REQ ) { -if ((size_t )(mlen +CAPIMSG_DATALEN (skb->data)) != count) { +if (count <CAPI_DATA_B3_REQ_LEN || + (size_t )(mlen +CAPIMSG_DATALEN (skb->data)) != count) {kfree_skb (skb);return -EINVAL ; }
@@ -711,6 +715,10 @@ capi_write(struct file *file, const char __user *buf, size_t count, loff_t *pposCAPIMSG_SETAPPID (skb->data, cdev->ap.applid);if (CAPIMSG_CMD (skb->data) ==CAPI_DISCONNECT_B3_RESP ) { +if (count <CAPI_DISCONNECT_B3_RESP_LEN ) { +kfree_skb (skb); +return -EINVAL ; + }mutex_lock (&cdev->lock);capincci_free (cdev,CAPIMSG_NCCI (skb->data));mutex_unlock (&cdev->lock);
drivers/mmc/host/bcm2835.c +1 -1
@@ -597,7 +597,7 @@ static void bcm2835_finish_request(struct bcm2835_host *host)struct dma_chan *terminate_chan =NULL ;struct mmc_request *mrq; -cancel_delayed_work_sync (&host->timeout_work); +cancel_delayed_work (&host->timeout_work); mrq = host->mrq;
drivers/mmc/host/sdhci-pci-o2micro.c +1 -1
@@ -432,7 +432,6 @@ int sdhci_pci_o2_probe_slot(struct sdhci_pci_slot *slot) mmc_hostname(host->mmc)); host->flags &= ~SDHCI_SIGNALING_330 ; host->flags |=SDHCI_SIGNALING_180 ; - host->quirks2 |=SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD ; host->mmc->caps2 |=MMC_CAP2_NO_SD ; host->mmc->caps2 |=MMC_CAP2_NO_SDIO ; pci_write_config_dword(chip->pdev,
@@ -682,6 +681,7 @@ static const struct sdhci_ops sdhci_pci_o2_ops = {const struct sdhci_pci_fixes sdhci_o2 = { .probe = sdhci_pci_o2_probe, .quirks =SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC , + .quirks2 =SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD , .probe_slot = sdhci_pci_o2_probe_slot, #ifdef CONFIG_PM_SLEEP .resume = sdhci_pci_o2_resume,
drivers/mmc/host/tmio_mmc.h +1 -0
@@ -163,6 +163,7 @@ struct tmio_mmc_host {unsigned long last_req_ts;struct mutex ios_lock;/* protect set_ios() context */ bool native_hotplug; +bool runtime_synced;bool sdio_irq_enabled;/* Mandatory callback */
drivers/mmc/host/tmio_mmc_core.c +12 -4
@@ -1258,20 +1258,22 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host)/* See if we also get DMA */ tmio_mmc_request_dma (_host, pdata); -pm_runtime_set_active (&pdev->dev);pm_runtime_set_autosuspend_delay (&pdev->dev,50 );pm_runtime_use_autosuspend (&pdev->dev);pm_runtime_enable (&pdev->dev); +pm_runtime_get_sync (&pdev->dev); ret =mmc_add_host (mmc);if (ret) goto remove_host;dev_pm_qos_expose_latency_limit (&pdev->dev,100 ); +pm_runtime_put (&pdev->dev);return 0 ; remove_host: +pm_runtime_put_noidle (&pdev->dev);tmio_mmc_host_remove (_host);return ret; }
@@ -1282,12 +1284,11 @@ void tmio_mmc_host_remove(struct tmio_mmc_host *host)struct platform_device *pdev = host->pdev;struct mmc_host *mmc = host->mmc; +pm_runtime_get_sync (&pdev->dev); +if (host->pdata->flags &TMIO_MMC_SDIO_IRQ )sd_ctrl_write16 (host,CTL_TRANSACTION_CTL ,0x0000 ); -if (!host->native_hotplug) -pm_runtime_get_sync (&pdev->dev); -dev_pm_qos_hide_latency_limit (&pdev->dev);mmc_remove_host (mmc);
@@ -1296,6 +1297,8 @@ void tmio_mmc_host_remove(struct tmio_mmc_host *host)tmio_mmc_release_dma (host);pm_runtime_dont_use_autosuspend (&pdev->dev); +if (host->native_hotplug) +pm_runtime_put_noidle (&pdev->dev);pm_runtime_put_sync (&pdev->dev);pm_runtime_disable (&pdev->dev); }
@@ -1340,6 +1343,11 @@ int tmio_mmc_host_runtime_resume(struct device *dev) {struct tmio_mmc_host *host =dev_get_drvdata (dev); +if (!host->runtime_synced) { + host->runtime_synced = true; +return 0 ; + } +tmio_mmc_clk_enable (host);tmio_mmc_hw_reset (host->mmc);
drivers/mtd/nand/raw/mtk_nand.c +10 -11
@@ -853,19 +853,21 @@ static int mtk_nfc_write_oob_std(struct nand_chip *chip, int page)return mtk_nfc_write_page_raw (chip,NULL ,1 , page); } -static int mtk_nfc_update_ecc_stats (struct mtd_info *mtd,u8 *buf,u32 sectors) +static int mtk_nfc_update_ecc_stats (struct mtd_info *mtd,u8 *buf,u32 start, +u32 sectors) {struct nand_chip *chip =mtd_to_nand (mtd);struct mtk_nfc *nfc =nand_get_controller_data (chip);struct mtk_nfc_nand_chip *mtk_nand =to_mtk_nand (chip);struct mtk_ecc_stats stats; +u32 reg_size = mtk_nand->fdm.reg_size;int rc, i; rc =nfi_readl (nfc,NFI_STA ) &STA_EMP_PAGE ;if (rc) {memset (buf,0xff , sectors * chip->ecc.size);for (i =0 ; i < sectors; i++) -memset (oob_ptr (chip, i),0xff , mtk_nand->fdm.reg_size); +memset (oob_ptr (chip, start + i),0xff , reg_size);return 0 ; }
@@ -885,7 +887,7 @@ static int mtk_nfc_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,u32 spare = mtk_nand->spare_per_sector;u32 column, sectors, start, end, reg;dma_addr_t addr; -int bitflips; +int bitflips =0 ;size_t len;u8 *buf;int rc;
@@ -952,14 +954,11 @@ static int mtk_nfc_read_subpage(struct mtd_info *mtd, struct nand_chip *chip,if (rc <0 ) {dev_err (nfc->dev,"subpage done timeout\n" ); bitflips = -EIO ; - }else { - bitflips =0 ; -if (!raw) { - rc =mtk_ecc_wait_done (nfc->ecc,ECC_DECODE ); - bitflips = rc <0 ? -ETIMEDOUT : -mtk_nfc_update_ecc_stats (mtd, buf, sectors); -mtk_nfc_read_fdm (chip, start, sectors); - } + }else if (!raw) { + rc =mtk_ecc_wait_done (nfc->ecc,ECC_DECODE ); + bitflips = rc <0 ? -ETIMEDOUT : +mtk_nfc_update_ecc_stats (mtd, buf, start, sectors); +mtk_nfc_read_fdm (chip, start, sectors); }dma_unmap_single (nfc->dev, addr, len,DMA_FROM_DEVICE );
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +5 -2
@@ -36,6 +36,7 @@#include <net/vxlan.h> #include <net/mpls.h> #include <net/xdp_sock.h> +#include <net/xfrm.h> #include "ixgbe.h" #include "ixgbe_common.h"
@@ -2621,7 +2622,7 @@ static void ixgbe_update_itr(struct ixgbe_q_vector *q_vector,/* 16K ints/sec to 9.2K ints/sec */ avg_wire_size *=15 ; avg_wire_size +=11452 ; - }else if (avg_wire_size <=1980 ) { + }else if (avg_wire_size <1968 ) {/* 9.2K ints/sec to 8K ints/sec */ avg_wire_size *=5 ; avg_wire_size +=22420 ;
@@ -2654,6 +2655,8 @@ static void ixgbe_update_itr(struct ixgbe_q_vector *q_vector,case IXGBE_LINK_SPEED_2_5GB_FULL :case IXGBE_LINK_SPEED_1GB_FULL :case IXGBE_LINK_SPEED_10_FULL : +if (avg_wire_size >8064 ) + avg_wire_size =8064 ; itr +=DIV_ROUND_UP (avg_wire_size,IXGBE_ITR_ADAPTIVE_MIN_INC *64 ) *IXGBE_ITR_ADAPTIVE_MIN_INC ;
@@ -8691,7 +8694,7 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,#endif /* IXGBE_FCOE */ #ifdef CONFIG_IXGBE_IPSEC -if (secpath_exists (skb) && +if (xfrm_offload (skb) && !ixgbe_ipsec_tx (tx_ring, first, &ipsec_tx)) goto out_drop;#endif
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c +11 -18
@@ -679,19 +679,17 @@ static void ixgbe_clean_xdp_tx_buffer(struct ixgbe_ring *tx_ring,bool ixgbe_clean_xdp_tx_irq (struct ixgbe_q_vector *q_vector,struct ixgbe_ring *tx_ring,int napi_budget) { +u16 ntc = tx_ring->next_to_clean, ntu = tx_ring->next_to_use;unsigned int total_packets =0 , total_bytes =0 ; -u32 i = tx_ring->next_to_clean, xsk_frames =0 ; -unsigned int budget = q_vector->tx.work_limit;struct xdp_umem *umem = tx_ring->xsk_umem;union ixgbe_adv_tx_desc *tx_desc;struct ixgbe_tx_buffer *tx_bi; -bool xmit_done; +u32 xsk_frames =0 ; - tx_bi = &tx_ring->tx_buffer_info[i]; - tx_desc =IXGBE_TX_DESC (tx_ring, i); - i -= tx_ring->count; + tx_bi = &tx_ring->tx_buffer_info[ntc]; + tx_desc =IXGBE_TX_DESC (tx_ring, ntc); - do { +while (ntc != ntu) {if (!(tx_desc->wb.status &cpu_to_le32 (IXGBE_TXD_STAT_DD )))break ;
@@ -708,22 +706,18 @@ bool ixgbe_clean_xdp_tx_irq(struct ixgbe_q_vector *q_vector, tx_bi++; tx_desc++; - i++; -if (unlikely (!i)) { - i -= tx_ring->count; + ntc++; +if (unlikely (ntc == tx_ring->count)) { + ntc =0 ; tx_bi = tx_ring->tx_buffer_info; tx_desc =IXGBE_TX_DESC (tx_ring,0 ); }/* issue prefetch for next Tx descriptor */ prefetch (tx_desc); + } -/* update budget accounting */ - budget--; - }while (likely (budget)); - - i += tx_ring->count; - tx_ring->next_to_clean = i; + tx_ring->next_to_clean = ntc;u64_stats_update_begin (&tx_ring->syncp); tx_ring->stats.bytes += total_bytes;
@@ -735,8 +729,7 @@ bool ixgbe_clean_xdp_tx_irq(struct ixgbe_q_vector *q_vector,if (xsk_frames)xsk_umem_complete_tx (umem, xsk_frames); - xmit_done =ixgbe_xmit_zc (tx_ring, q_vector->tx.work_limit); -return budget >0 && xmit_done; +return ixgbe_xmit_zc (tx_ring, q_vector->tx.work_limit); }int ixgbe_xsk_async_xmit (struct net_device *dev,u32 qid)
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +2 -1
@@ -30,6 +30,7 @@#include <linux/bpf.h> #include <linux/bpf_trace.h> #include <linux/atomic.h> +#include <net/xfrm.h> #include "ixgbevf.h"
@@ -4158,7 +4159,7 @@ static int ixgbevf_xmit_frame_ring(struct sk_buff *skb, first->protocol =vlan_get_protocol (skb);#ifdef CONFIG_IXGBEVF_IPSEC -if (secpath_exists (skb) && !ixgbevf_ipsec_tx (tx_ring, first, &ipsec_tx)) +if (xfrm_offload (skb) && !ixgbevf_ipsec_tx (tx_ring, first, &ipsec_tx)) goto out_drop;#endif tso =ixgbevf_tso (tx_ring, first, &hdr_len, &ipsec_tx);
drivers/net/phy/phylink.c +3 -3
@@ -356,8 +356,8 @@ static void phylink_get_fixed_state(struct phylink *pl, struct phylink_link_stat* Local device Link partner * Pause AsymDir Pause AsymDir Result * 1 X 1 X TX+RX -* 0 1 1 1 RX -* 1 1 0 1 TX +* 0 1 1 1 TX +* 1 1 0 1 RX */ static void phylink_resolve_flow (struct phylink *pl,struct phylink_link_state *state)
@@ -378,7 +378,7 @@ static void phylink_resolve_flow(struct phylink *pl, new_pause =MLO_PAUSE_TX |MLO_PAUSE_RX ; else if (pause & MLO_PAUSE_ASYM) new_pause = state->pause &MLO_PAUSE_SYM ? -MLO_PAUSE_RX :MLO_PAUSE_TX ; +MLO_PAUSE_TX :MLO_PAUSE_RX ; }else { new_pause = pl->link_config.pause &MLO_PAUSE_TXRX_MASK ; }
drivers/net/tun.c +11 -5
@@ -788,7 +788,8 @@ static void tun_detach_all(struct net_device *dev) }static int tun_attach (struct tun_struct *tun,struct file *file, -bool skip_filter,bool napi,bool napi_frags) +bool skip_filter,bool napi,bool napi_frags, +bool publish_tun) {struct tun_file *tfile = file->private_data;struct net_device *dev = tun->dev;
@@ -871,7 +872,8 @@ static int tun_attach(struct tun_struct *tun, struct file *file,* initialized tfile; otherwise we risk using half-initialized * object. */ -rcu_assign_pointer (tfile->tun, tun); +if (publish_tun) +rcu_assign_pointer (tfile->tun, tun);rcu_assign_pointer (tun->tfiles[tun->numqueues], tfile); tun->numqueues++;tun_set_real_num_queues (tun);
@@ -2731,7 +2733,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) err =tun_attach (tun, file, ifr->ifr_flags &IFF_NOFILTER , ifr->ifr_flags &IFF_NAPI , - ifr->ifr_flags &IFF_NAPI_FRAGS ); + ifr->ifr_flags &IFF_NAPI_FRAGS , true);if (err <0 )return err;
@@ -2830,13 +2832,17 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)INIT_LIST_HEAD (&tun->disabled); err =tun_attach (tun, file, false, ifr->ifr_flags &IFF_NAPI , - ifr->ifr_flags &IFF_NAPI_FRAGS ); + ifr->ifr_flags &IFF_NAPI_FRAGS , false);if (err <0 ) goto err_free_flow; err =register_netdevice (tun->dev);if (err <0 ) goto err_detach; +/* free_netdev() won't check refcnt, to aovid race +* with dev_put() we need publish tun after registration. +*/ +rcu_assign_pointer (tfile->tun, tun); }netif_carrier_on (tun->dev);
@@ -2979,7 +2985,7 @@ static int tun_set_queue(struct file *file, struct ifreq *ifr)if (ret <0 ) goto unlock; ret =tun_attach (tun, file, false, tun->flags &IFF_NAPI , - tun->flags &IFF_NAPI_FRAGS ); + tun->flags &IFF_NAPI_FRAGS , true); }else if (ifr->ifr_flags &IFF_DETACH_QUEUE ) { tun =rtnl_dereference (tfile->tun);if (!tun || !(tun->flags &IFF_MULTI_QUEUE ) || tfile->detached)
drivers/net/usb/cdc_ether.c +9 -1
@@ -206,7 +206,15 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf) goto bad_desc; } skip: -if (rndis && header.usb_cdc_acm_descriptor && +/* Communcation class functions with bmCapabilities are not +* RNDIS. But some Wireless class RNDIS functions use +* bmCapabilities for their own purpose. The failsafe is +* therefore applied only to Communication class RNDIS +* functions. The rndis test is redundant, but a cheap +* optimization. +*/ +if (rndis &&is_rndis (&intf->cur_altsetting->desc) && + header.usb_cdc_acm_descriptor && header.usb_cdc_acm_descriptor->bmCapabilities) { dev_dbg(&intf->dev, "ACM capabilities %02x, not really RNDIS?\n",
drivers/net/wireless/mediatek/mt76/mt7615/main.c +3 -2
@@ -77,11 +77,12 @@ static int mt7615_add_interface(struct ieee80211_hw *hw, goto out; } - mvif->omac_idx =get_omac_idx (vif->type, dev->omac_mask); -if (mvif->omac_idx <0 ) { + idx =get_omac_idx (vif->type, dev->omac_mask); +if (idx <0 ) { ret = -ENOSPC ; goto out; } + mvif->omac_idx = idx;/* TODO: DBDC support. Use band 0 and wmm 0 for now */ mvif->band_idx =0 ;
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c +1 -1
@@ -1270,7 +1270,6 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,mt7615_mac_write_txwi (dev, (__le32 *)(req.pkt), skb, wcid,NULL ,0 ,NULL );memcpy (req.pkt +MT_TXD_SIZE , skb->data, skb->len); -dev_kfree_skb (skb); req.omac_idx = mvif->omac_idx; req.enable = en;
@@ -1281,6 +1280,7 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif, req.pkt_len =cpu_to_le16 (MT_TXD_SIZE + skb->len); req.tim_ie_pos =cpu_to_le16 (MT_TXD_SIZE + tim_off); +dev_kfree_skb (skb); skb =mt7615_mcu_msg_alloc (&req,sizeof (req)); return mt7615_mcu_msg_send(dev, skb, MCU_EXT_CMD_BCN_OFFLOAD,
drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.c +5 -0
@@ -59,6 +59,11 @@ static void mt76x0_set_chip_cap(struct mt76x02_dev *dev)dev_dbg (dev->mt76.dev,"mask out 2GHz support\n" ); } +if (is_mt7630 (dev)) { + dev->mt76.cap.has_5ghz = false; +dev_dbg (dev->mt76.dev,"mask out 5GHz support\n" ); + } +if (!mt76x02_field_valid (nic_conf1 &0xff )) nic_conf1 &=0xff00 ;
drivers/net/wireless/ralink/rt2x00/rt2800lib.c +6 -12
@@ -4156,24 +4156,18 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,switch (rt2x00dev->default_ant.rx_chain_num) {case 3 :/* Turn on tertiary LNAs */ -rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_A2_EN , - rf->channel >14 ); -rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_G2_EN , - rf->channel <=14 ); +rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_A2_EN ,1 ); +rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_G2_EN ,1 );/* fall-through */ case 2 :/* Turn on secondary LNAs */ -rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_A1_EN , - rf->channel >14 ); -rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_G1_EN , - rf->channel <=14 ); +rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_A1_EN ,1 ); +rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_G1_EN ,1 );/* fall-through */ case 1 :/* Turn on primary LNAs */ -rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_A0_EN , - rf->channel >14 ); -rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_G0_EN , - rf->channel <=14 ); +rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_A0_EN ,1 ); +rt2x00_set_field32 (&tx_pin,TX_PIN_CFG_LNA_PE_G0_EN ,1 );break ; }
drivers/net/wireless/rsi/rsi_91x_usb.c +0 -1
@@ -645,7 +645,6 @@ static int rsi_init_usb_interface(struct rsi_hw *adapter,kfree (rsi_dev->tx_buffer); fail_eps: -kfree (rsi_dev);return status; }
drivers/pci/pci-driver.c +2 -1
@@ -399,7 +399,8 @@ void __weak pcibios_free_irq(struct pci_dev *dev)#ifdef CONFIG_PCI_IOV static inline bool pci_device_can_probe (struct pci_dev *pdev) { -return (!pdev->is_virtfn || pdev->physfn->sriov->drivers_autoprobe); +return (!pdev->is_virtfn || pdev->physfn->sriov->drivers_autoprobe || + pdev->driver_override); }#else static inline bool pci_device_can_probe (struct pci_dev *pdev)
drivers/platform/x86/pcengines-apuv2.c +1 -1
@@ -93,7 +93,7 @@ struct gpiod_lookup_table gpios_led_table = {static struct gpio_keys_button apu2_keys_buttons[] = { { - .code =KEY_SETUP , + .code =KEY_RESTART , .active_low =1 , .desc ="front button" , .type =EV_KEY ,
drivers/platform/x86/pmc_atom.c +8 -0
@@ -412,6 +412,14 @@ static const struct dmi_system_id critclk_systems[] = { DMI_MATCH(DMI_BOARD_NAME, "CB3163"), }, }, + { +/* pmc_plt_clk* - are used for ethernet controllers */ + .ident = "Beckhoff CB4063", + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Beckhoff Automation" ), + DMI_MATCH(DMI_BOARD_NAME, "CB4063"), + }, + }, {/* pmc_plt_clk* - are used for ethernet controllers */ .ident = "Beckhoff CB6263",
drivers/regulator/twl-regulator.c +20 -3
@@ -359,6 +359,17 @@ static const u16 VINTANA2_VSEL_table[] = { 2500, 2750, }; +/* 600mV to 1450mV in 12.5 mV steps */ +static const struct regulator_linear_range VDD1_ranges[] = { +REGULATOR_LINEAR_RANGE (600000 ,0 ,68 ,12500 ) +}; + +/* 600mV to 1450mV in 12.5 mV steps, everything above = 1500mV */ +static const struct regulator_linear_range VDD2_ranges[] = { +REGULATOR_LINEAR_RANGE (600000 ,0 ,68 ,12500 ), +REGULATOR_LINEAR_RANGE (1500000 ,69 ,69 ,12500 ) +}; +static int twl4030ldo_list_voltage (struct regulator_dev *rdev,unsigned index) {struct twlreg_info *info =rdev_get_drvdata (rdev);
@@ -427,6 +438,8 @@ static int twl4030smps_get_voltage(struct regulator_dev *rdev) }static const struct regulator_ops twl4030smps_ops = { + .list_voltage = regulator_list_voltage_linear_range, + .set_voltage = twl4030smps_set_voltage, .get_voltage = twl4030smps_get_voltage, };
@@ -466,7 +479,8 @@ static const struct twlreg_info TWL4030_INFO_##label = { \ }, \ } -#define TWL4030_ADJUSTABLE_SMPS (label, offset, num, turnon_delay, remap_conf) \ +#define TWL4030_ADJUSTABLE_SMPS (label, offset, num, turnon_delay, remap_conf, \ + n_volt) \ static const struct twlreg_info TWL4030_INFO_##label = { \ .base = offset, \ .id = num, \
@@ -479,6 +493,9 @@ static const struct twlreg_info TWL4030_INFO_##label = { \ .owner = THIS_MODULE, \ .enable_time = turnon_delay, \ .of_map_mode = twl4030reg_map_mode, \ + .n_voltages = n_volt, \ + .n_linear_ranges = ARRAY_SIZE(label ## _ranges), \ + .linear_ranges = label ## _ranges, \ }, \ }
@@ -518,8 +535,8 @@ TWL4030_ADJUSTABLE_LDO(VSIM, 0x37, 9, 100, 0x00);TWL4030_ADJUSTABLE_LDO (VDAC ,0x3b ,10 ,100 ,0x08 );TWL4030_ADJUSTABLE_LDO (VINTANA2 ,0x43 ,12 ,100 ,0x08 );TWL4030_ADJUSTABLE_LDO (VIO ,0x4b ,14 ,1000 ,0x08 ); -TWL4030_ADJUSTABLE_SMPS (VDD1 ,0x55 ,15 ,1000 ,0x08 ); -TWL4030_ADJUSTABLE_SMPS (VDD2 ,0x63 ,16 ,1000 ,0x08 ); +TWL4030_ADJUSTABLE_SMPS (VDD1 ,0x55 ,15 ,1000 ,0x08 ,68 ); +TWL4030_ADJUSTABLE_SMPS (VDD2 ,0x63 ,16 ,1000 ,0x08 ,69 );/* VUSBCP is managed *only* by the USB subchip */ TWL4030_FIXED_LDO (VINTANA1 ,0x3f ,1500 ,11 ,100 ,0x08 );TWL4030_FIXED_LDO (VINTDIG ,0x47 ,1500 ,13 ,100 ,0x08 );
fs/btrfs/tree-log.c +8 -8
@@ -4985,7 +4985,7 @@ static int log_conflicting_inodes(struct btrfs_trans_handle *trans,BTRFS_I (inode),LOG_OTHER_INODE_ALL , 0, LLONG_MAX, ctx); -iput (inode); +btrfs_add_delayed_iput (inode); } }continue ;
@@ -5000,7 +5000,7 @@ static int log_conflicting_inodes(struct btrfs_trans_handle *trans, ret =btrfs_log_inode (trans, root,BTRFS_I (inode),LOG_OTHER_INODE ,0 ,LLONG_MAX , ctx);if (ret) { -iput (inode); +btrfs_add_delayed_iput (inode);continue ; }
@@ -5009,7 +5009,7 @@ static int log_conflicting_inodes(struct btrfs_trans_handle *trans, key.offset =0 ; ret =btrfs_search_slot (NULL , root, &key, path,0 ,0 );if (ret <0 ) { -iput (inode); +btrfs_add_delayed_iput (inode);continue ; }
@@ -5056,7 +5056,7 @@ static int log_conflicting_inodes(struct btrfs_trans_handle *trans, } path->slots[0 ]++; } -iput (inode); +btrfs_add_delayed_iput (inode); }return ret;
@@ -5689,7 +5689,7 @@ static int log_new_dir_dentries(struct btrfs_trans_handle *trans, }if (btrfs_inode_in_log (BTRFS_I (di_inode), trans->transid)) { -iput (di_inode); +btrfs_add_delayed_iput (di_inode);break ; }
@@ -5701,7 +5701,7 @@ static int log_new_dir_dentries(struct btrfs_trans_handle *trans,if (!ret &&btrfs_must_commit_transaction (trans,BTRFS_I (di_inode))) ret =1 ; -iput (di_inode); +btrfs_add_delayed_iput (di_inode);if (ret) goto next_dir_inode;if (ctx->log_new_dentries) {
@@ -5848,7 +5848,7 @@ static int btrfs_log_all_parents(struct btrfs_trans_handle *trans,if (!ret && ctx && ctx->log_new_dentries) ret =log_new_dir_dentries (trans, root,BTRFS_I (dir_inode), ctx); -iput (dir_inode); +btrfs_add_delayed_iput (dir_inode);if (ret) goto out; }
@@ -5891,7 +5891,7 @@ static int log_new_ancestors(struct btrfs_trans_handle *trans, ret =btrfs_log_inode (trans, root,BTRFS_I (inode),LOG_INODE_EXISTS ,0 ,LLONG_MAX , ctx); -iput (inode); +btrfs_add_delayed_iput (inode);if (ret)return ret;
fs/ubifs/tnc.c +11 -5
@@ -1158,8 +1158,8 @@ static struct ubifs_znode *dirty_cow_bottom_up(struct ubifs_info *c,* o exact match, i.e. the found zero-level znode contains key @key, then %1 * is returned and slot number of the matched branch is stored in @n; * o not exact match, which means that zero-level znode does not contain -* @key, then %0 is returned and slot number of the closest branch is stored -* in @n; +* @key, then %0 is returned and slot number of the closest branch or %-1 +* is stored in @n; In this case calling tnc_next() is mandatory. * o @key is so small that it is even less than the lowest key of the * leftmost zero-level node, then %0 is returned and %0 is stored in @n. *
@@ -1882,13 +1882,19 @@ int ubifs_tnc_lookup_nm(struct ubifs_info *c, const union ubifs_key *key,static int search_dh_cookie (struct ubifs_info *c,const union ubifs_key *key,struct ubifs_dent_node *dent,uint32_t cookie, -struct ubifs_znode **zn,int *n) +struct ubifs_znode **zn,int *n,int exact) {int err;struct ubifs_znode *znode = *zn;struct ubifs_zbranch *zbr;union ubifs_key *dkey; +if (!exact) { + err =tnc_next (c, &znode, n); +if (err) +return err; + } +for (;;) { zbr = &znode->zbranch[*n]; dkey = &zbr->key;
@@ -1930,7 +1936,7 @@ static int do_lookup_dh(struct ubifs_info *c, const union ubifs_key *key,if (unlikely (err <0 )) goto out_unlock; - err =search_dh_cookie (c, key, dent, cookie, &znode, &n); + err =search_dh_cookie (c, key, dent, cookie, &znode, &n, err); out_unlock:mutex_unlock (&c->tnc_mutex);
@@ -2723,7 +2729,7 @@ int ubifs_tnc_remove_dh(struct ubifs_info *c, const union ubifs_key *key,if (unlikely (err <0 )) goto out_free; - err =search_dh_cookie (c, key, dent, cookie, &znode, &n); + err =search_dh_cookie (c, key, dent, cookie, &znode, &n, err);if (err) goto out_free; }
include/linux/phy_fixed.h +1 -0
@@ -11,6 +11,7 @@ struct fixed_phy_status { };struct device_node ; +struct gpio_desc ;#if IS_ENABLED (CONFIG_FIXED_PHY )extern int fixed_phy_change_carrier (struct net_device *dev,bool new_carrier);
include/linux/syscalls.h +19 -0
@@ -1397,4 +1397,23 @@ static inline unsigned int ksys_personality(unsigned int personality) return old; } +/* for __ARCH_WANT_SYS_IPC */ +long ksys_semtimedop (int semid,struct sembuf __user *tsops, +unsigned int nsops, +const struct __kernel_timespec __user *timeout); +long ksys_semget (key_t key,int nsems,int semflg); +long ksys_old_semctl (int semid,int semnum,int cmd,unsigned long arg); +long ksys_msgget (key_t key,int msgflg); +long ksys_old_msgctl (int msqid,int cmd,struct msqid_ds __user *buf); +long ksys_msgrcv (int msqid,struct msgbuf __user *msgp,size_t msgsz, +long msgtyp,int msgflg); +long ksys_msgsnd (int msqid,struct msgbuf __user *msgp,size_t msgsz, +int msgflg); +long ksys_shmget (key_t key,size_t size,int shmflg); +long ksys_shmdt (char __user *shmaddr); +long ksys_old_shmctl (int shmid,int cmd,struct shmid_ds __user *buf); +long compat_ksys_semtimedop (int semid,struct sembuf __user *tsems, +unsigned int nsops, +const struct old_timespec32 __user *timeout); +#endif
include/uapi/asm-generic/unistd.h +1 -1
@@ -569,7 +569,7 @@ __SYSCALL(__NR_semget, sys_semget) __SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl)#if defined(__ARCH_WANT_TIME32_SYSCALLS) || __BITS_PER_LONG !=32 #define __NR_semtimedop 192 -__SC_COMP(__NR_semtimedop, sys_semtimedop, sys_semtimedop_time32) +__SC_3264(__NR_semtimedop, sys_semtimedop_time32, sys_semtimedop)#endif #define __NR_semop 193__SYSCALL (__NR_semop, sys_semop)
include/uapi/linux/isdn/capicmd.h +1 -0
@@ -16,6 +16,7 @@#define CAPI_MSG_BASELEN 8#define CAPI_DATA_B3_REQ_LEN (CAPI_MSG_BASELEN+4+4+2+2+2)#define CAPI_DATA_B3_RESP_LEN (CAPI_MSG_BASELEN+4+2) +#define CAPI_DISCONNECT_B3_RESP_LEN (CAPI_MSG_BASELEN+4)/*----- CAPI commands -----*/ #define CAPI_ALERT 0x01
ipc/util.h +2 -23
@@ -276,29 +276,7 @@ static inline int compat_ipc_parse_version(int *cmd) *cmd &= ~IPC_64 ;return version; } -#endif -/* for __ARCH_WANT_SYS_IPC */ -long ksys_semtimedop (int semid,struct sembuf __user *tsops, -unsigned int nsops, -const struct __kernel_timespec __user *timeout); -long ksys_semget (key_t key,int nsems,int semflg); -long ksys_old_semctl (int semid,int semnum,int cmd,unsigned long arg); -long ksys_msgget (key_t key,int msgflg); -long ksys_old_msgctl (int msqid,int cmd,struct msqid_ds __user *buf); -long ksys_msgrcv (int msqid,struct msgbuf __user *msgp,size_t msgsz, -long msgtyp,int msgflg); -long ksys_msgsnd (int msqid,struct msgbuf __user *msgp,size_t msgsz, -int msgflg); -long ksys_shmget (key_t key,size_t size,int shmflg); -long ksys_shmdt (char __user *shmaddr); -long ksys_old_shmctl (int shmid,int cmd,struct shmid_ds __user *buf); - -/* for CONFIG_ARCH_WANT_OLD_COMPAT_IPC */ -long compat_ksys_semtimedop (int semid,struct sembuf __user *tsems, -unsigned int nsops, -const struct old_timespec32 __user *timeout); -#ifdef CONFIG_COMPAT long compat_ksys_old_semctl (int semid,int semnum,int cmd,int arg);long compat_ksys_old_msgctl (int msqid,int cmd,void __user *uptr); long compat_ksys_msgrcv(int msqid, compat_uptr_t msgp, compat_ssize_t msgsz,
@@ -306,6 +284,7 @@ long compat_ksys_msgrcv(int msqid, compat_uptr_t msgp, compat_ssize_t msgsz,long compat_ksys_msgsnd (int msqid,compat_uptr_t msgp,compat_ssize_t msgsz,int msgflg);long compat_ksys_old_shmctl (int shmid,int cmd,void __user *uptr); -#endif /* CONFIG_COMPAT */ + +#endif #endif
kernel/cgroup/cgroup.c +9 -1
@@ -5213,8 +5213,16 @@ static struct cgroup *cgroup_create(struct cgroup *parent)* if the parent has to be frozen, the child has too. */ cgrp->freezer.e_freeze = parent->freezer.e_freeze; -if (cgrp->freezer.e_freeze) +if (cgrp->freezer.e_freeze) { +/* +* Set the CGRP_FREEZE flag, so when a process will be +* attached to the child cgroup, it will become frozen. +* At this point the new cgroup is unpopulated, so we can +* consider it frozen immediately. +*/ +set_bit (CGRP_FREEZE , &cgrp->flags);set_bit (CGRP_FROZEN , &cgrp->flags); + }spin_lock_irq (&css_set_lock);for (tcgrp = cgrp; tcgrp; tcgrp =cgroup_parent (tcgrp)) {
kernel/irq/resend.c +2 -0
@@ -36,6 +36,8 @@ static void resend_irqs(unsigned long arg) irq =find_first_bit (irqs_resend, nr_irqs);clear_bit (irq, irqs_resend); desc =irq_to_desc (irq); +if (!desc) +continue ;local_irq_disable (); desc->handle_irq (desc);local_irq_enable ();
kernel/module.c +33 -18
139 lines not on this page · raw message
mm/z3fold.c +1 -6
@@ -1408,6 +1408,7 @@ static bool z3fold_page_isolate(struct page *page, isolate_mode_t mode)* should freak out. */ WARN (1 ,"Z3fold is experiencing kref problems\n" ); +z3fold_page_unlock (zhdr);return false; }z3fold_page_unlock (zhdr);
@@ -1439,16 +1440,11 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpa zhdr =page_address (page); pool =zhdr_to_pool (zhdr); -if (!trylock_page (page)) -return -EAGAIN ; -if (!z3fold_page_trylock (zhdr)) { -unlock_page (page);return -EAGAIN ; }if (zhdr->mapped_count !=0 ) {z3fold_page_unlock (zhdr); -unlock_page (page);return -EBUSY ; }if (work_pending (&zhdr->work)) {
@@ -1494,7 +1490,6 @@ static int z3fold_page_migrate(struct address_space *mapping, struct page *newpaspin_unlock (&pool->lock);page_mapcount_reset (page); -unlock_page (page);put_page (page);return 0 ; }
net/bridge/br_mdb.c +1 -1
@@ -437,7 +437,7 @@ static int nlmsg_populate_rtr_fill(struct sk_buff *skb,struct nlmsghdr *nlh;struct nlattr *nest; - nlh =nlmsg_put (skb, pid, seq, type,sizeof (*bpm),NLM_F_MULTI ); + nlh =nlmsg_put (skb, pid, seq, type,sizeof (*bpm),0 );if (!nlh)return -EMSGSIZE ;
net/core/dev.c +2 -0
@@ -8768,6 +8768,8 @@ int register_netdevice(struct net_device *dev) ret =notifier_to_errno (ret);if (ret) {rollback_registered (dev); +rcu_barrier (); + dev->reg_state =NETREG_UNREGISTERED ; }/*
net/core/skbuff.c +19 -0
@@ -3531,6 +3531,25 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,int pos;int dummy; +if (list_skb && !list_skb->head_frag &&skb_headlen (list_skb) && + (skb_shinfo (head_skb)->gso_type &SKB_GSO_DODGY )) { +/* gso_size is untrusted, and we have a frag_list with a linear +* non head_frag head. +* +* (we assume checking the first list_skb member suffices; +* i.e if either of the list_skb members have non head_frag +* head, then the first one has too). +* +* If head_skb's headlen does not fit requested gso_size, it +* means that the frag_list members do NOT terminate on exact +* gso_size boundaries. Hence we cannot perform skb_frag_t page +* sharing. Therefore we must fallback to copying the frag_list +* skbs; we do so by disabling SG. +*/ +if (mss !=GSO_BY_FRAGS && mss !=skb_headlen (head_skb)) + features &= ~NETIF_F_SG ; + } +__skb_push (head_skb, doffset); proto =skb_network_protocol (head_skb, &dummy);if (unlikely (!proto))
net/core/sock_map.c +3 -0
@@ -661,6 +661,7 @@ static int sock_hash_update_common(struct bpf_map *map, void *key, struct sock *sk, u64 flags) { struct bpf_htab *htab = container_of(map, struct bpf_htab, map); +struct inet_connection_sock *icsk =inet_csk (sk);u32 key_size = map->key_size, hash;struct bpf_htab_elem *elem, *elem_new;struct bpf_htab_bucket *bucket;
@@ -671,6 +672,8 @@ static int sock_hash_update_common(struct bpf_map *map, void *key,WARN_ON_ONCE (!rcu_read_lock_held ());if (unlikely (flags >BPF_EXIST ))return -EINVAL ; +if (unlikely (icsk->icsk_ulp_data)) +return -EINVAL ; link =sk_psock_init_link ();if (!link)
net/ipv4/tcp_input.c +1 -1
@@ -266,7 +266,7 @@ static void tcp_ecn_accept_cwr(struct sock *sk, const struct sk_buff *skb)static void tcp_ecn_withdraw_cwr (struct tcp_sock *tp) { - tp->ecn_flags &= ~TCP_ECN_DEMAND_CWR ; + tp->ecn_flags &= ~TCP_ECN_QUEUE_CWR ; }static void __tcp_ecn_check_ce (struct sock *sk,const struct sk_buff *skb)
net/ipv6/ping.c +1 -1
@@ -223,7 +223,7 @@ static int __net_init ping_v6_proc_init_net(struct net *net)return 0 ; } -static void __net_init ping_v6_proc_exit_net (struct net *net) +static void __net_exit ping_v6_proc_exit_net(struct net *net) {remove_proc_entry ("icmp6" , net->proc_net); }
net/ipv6/route.c +6 -2
@@ -3841,13 +3841,14 @@ struct fib6_info *addrconf_f6i_alloc(struct net *net,struct fib6_config cfg = { .fc_table =l3mdev_fib_table (idev->dev) ? :RT6_TABLE_LOCAL , .fc_ifindex = idev->dev->ifindex, - .fc_flags =RTF_UP |RTF_ADDRCONF |RTF_NONEXTHOP , + .fc_flags =RTF_UP |RTF_NONEXTHOP , .fc_dst = *addr, .fc_dst_len =128 , .fc_protocol =RTPROT_KERNEL , .fc_nlinfo.nl_net = net, .fc_ignore_dev_down = true, }; +struct fib6_info *f6i;if (anycast) { cfg.fc_type =RTN_ANYCAST ;
@@ -3857,7 +3858,10 @@ struct fib6_info *addrconf_f6i_alloc(struct net *net, cfg.fc_flags |=RTF_LOCAL ; } -return ip6_route_info_create (&cfg, gfp_flags,NULL ); + f6i =ip6_route_info_create (&cfg, gfp_flags,NULL ); +if (!IS_ERR (f6i)) + f6i->dst_nocount = true; +return f6i; }/* remove deleted ip from prefsrc entries */
net/sched/sch_generic.c +7 -2
@@ -46,6 +46,8 @@ EXPORT_SYMBOL(default_qdisc_ops);* - updates to tree and tree walking are only done under the rtnl mutex. */ +#define SKB_XOFF_MAGIC ((struct sk_buff *)1UL) +static inline struct sk_buff *__skb_dequeue_bad_txq (struct Qdisc *q) {const struct netdev_queue *txq = q->dev_queue;
@@ -71,7 +73,7 @@ static inline struct sk_buff *__skb_dequeue_bad_txq(struct Qdisc *q) q->q.qlen--; } }else { - skb =NULL ; + skb =SKB_XOFF_MAGIC ; } }
@@ -253,8 +255,11 @@ static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate,return skb; skb =qdisc_dequeue_skb_bad_txq (q); -if (unlikely (skb)) +if (unlikely (skb)) { +if (skb ==SKB_XOFF_MAGIC ) +return NULL ; goto bulk; + } skb = q->dequeue (q);if (skb) { bulk:
net/sched/sch_hhf.c +1 -1
@@ -531,7 +531,7 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt, new_hhf_non_hh_weight =nla_get_u32 (tb[TCA_HHF_NON_HH_WEIGHT ]); non_hh_quantum = (u64 )new_quantum * new_hhf_non_hh_weight; -if (non_hh_quantum >INT_MAX ) +if (non_hh_quantum ==0 || non_hh_quantum >INT_MAX )return -EINVAL ;sch_tree_lock (sch);
net/sctp/protocol.c +1 -1
@@ -1336,7 +1336,7 @@ static int __net_init sctp_ctrlsock_init(struct net *net)return status; } -static void __net_init sctp_ctrlsock_exit (struct net *net) +static void __net_exit sctp_ctrlsock_exit(struct net *net) {/* Free the control endpoint. */ inet_ctl_sock_destroy (net->sctp.ctl_sock);
net/sctp/sm_sideeffect.c +1 -1
@@ -547,7 +547,7 @@ static void sctp_do_8_2_transport_strike(struct sctp_cmd_seq *commands,if (net->sctp.pf_enable && (transport->state ==SCTP_ACTIVE ) && (transport->error_count < transport->pathmaxrxt) && - (transport->error_count > asoc->pf_retrans)) { + (transport->error_count > transport->pf_retrans)) { sctp_assoc_control_transport(asoc, transport, SCTP_TRANSPORT_PF,
net/sctp/socket.c +2 -1
@@ -7176,7 +7176,7 @@ static int sctp_getsockopt_paddr_thresholds(struct sock *sk, val.spt_pathmaxrxt = trans->pathmaxrxt; val.spt_pathpfthld = trans->pf_retrans; -return 0 ; + goto out; } asoc =sctp_id2assoc (sk, val.spt_assoc_id);
@@ -7194,6 +7194,7 @@ static int sctp_getsockopt_paddr_thresholds(struct sock *sk, val.spt_pathmaxrxt = sp->pathmaxrxt; } +out:if (put_user (len, optlen) ||copy_to_user (optval, &val, len))return -EFAULT ;
net/tipc/name_distr.c +2 -1
@@ -223,7 +223,8 @@ static void tipc_publ_purge(struct net *net, struct publication *publ, u32 addr) publ->key); } -kfree_rcu (p, rcu); +if (p) +kfree_rcu (p, rcu); }/**
Quoted 4 lines · Greg KH
I'm announcing the release of the 5.2.16 kernel.
All users of the 5.2 kernel series must upgrade.
Quoted 8 lines
The updated 5.2.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-5.2.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summarythanks,
greg k-h
Thank you so much Greg! :)
Thanks,
Bhaskar
Quoted 303 lines
------------
Makefile | 2 arch/powerpc/include/asm/uaccess.h | 1 arch/s390/kvm/interrupt.c | 10 + arch/s390/kvm/kvm-s390.c | 4 arch/sparc/kernel/sys_sparc_64.c | 33 ++-- arch/x86/Makefile | 1 arch/x86/boot/compressed/acpi.c | 143 +++++++++++++----- arch/x86/include/asm/kvm_host.h | 2 arch/x86/kernel/ima_arch.c | 12 + arch/x86/kvm/mmu.c | 101 ++++++++++++- arch/x86/kvm/svm.c | 42 ++++- arch/x86/kvm/vmx/nested.c | 12 - arch/x86/kvm/x86.c | 7 arch/x86/purgatory/Makefile | 35 ++-- drivers/base/core.c | 53 ++++++ drivers/bluetooth/btusb.c | 5 drivers/clk/clk.c | 38 ++++ drivers/clk/rockchip/clk-mmc-phase.c | 4 drivers/crypto/talitos.c | 70 ++++++--- drivers/firmware/ti_sci.c | 8 - drivers/gpio/gpio-mockup.c | 1 drivers/gpio/gpiolib-acpi.c | 42 ++++- drivers/gpio/gpiolib.c | 16 +- drivers/gpu/drm/drm_panel_orientation_quirks.c | 12 + drivers/gpu/drm/i915/intel_dp_mst.c | 10 + drivers/gpu/drm/i915/intel_workarounds.c | 5 drivers/gpu/drm/lima/lima_gem.c | 2 drivers/gpu/drm/mediatek/mtk_drm_drv.c | 5 drivers/gpu/drm/meson/meson_plane.c | 16 ++ drivers/iio/adc/stm32-dfsdm-adc.c | 162 ++++++++++++++++----- drivers/iio/adc/stm32-dfsdm.h | 24 ++- drivers/isdn/capi/capi.c | 10 + drivers/mmc/host/bcm2835.c | 2 drivers/mmc/host/sdhci-pci-o2micro.c | 2 drivers/mmc/host/tmio_mmc.h | 1 drivers/mmc/host/tmio_mmc_core.c | 16 +- drivers/mtd/nand/raw/mtk_nand.c | 21 +- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 7 drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 29 +-- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 3 drivers/net/phy/phylink.c | 6 drivers/net/tun.c | 16 +- drivers/net/usb/cdc_ether.c | 10 + drivers/net/wireless/mediatek/mt76/mt7615/main.c | 5 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 2 drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.c | 5 drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 18 -- drivers/net/wireless/rsi/rsi_91x_usb.c | 1 drivers/pci/pci-driver.c | 3 drivers/platform/x86/pcengines-apuv2.c | 2 drivers/platform/x86/pmc_atom.c | 8 + drivers/regulator/twl-regulator.c | 23 ++ fs/btrfs/tree-log.c | 16 +- fs/ubifs/tnc.c | 16 +- include/linux/phy_fixed.h | 1 include/linux/syscalls.h | 19 ++ include/uapi/asm-generic/unistd.h | 2 include/uapi/linux/isdn/capicmd.h | 1 ipc/util.h | 25 --- kernel/cgroup/cgroup.c | 10 + kernel/irq/resend.c | 2 kernel/module.c | 51 ++++-- mm/z3fold.c | 7 net/bridge/br_mdb.c | 2 net/core/dev.c | 2 net/core/skbuff.c | 19 ++ net/core/sock_map.c | 3 net/ipv4/tcp_input.c | 2 net/ipv6/ping.c | 2 net/ipv6/route.c | 8 - net/sched/sch_generic.c | 9 - net/sched/sch_hhf.c | 2 net/sctp/protocol.c | 2 net/sctp/sm_sideeffect.c | 2 net/sctp/socket.c | 3 net/tipc/name_distr.c | 3 76 files changed, 955 insertions(+), 322 deletions(-)Alex Williamson (1):
PCI: Always allow probing withdriver_overrideAlexander Duyck (1):
ixgbe: Prevent u8 wrapping of ITR value to something less than 10usAndreas Kemnade (1):
regulator: twl: voltage lists for vdd1/2 on twl4030Andrew F. Davis (1):
firmware:ti_sci: Always request response from firmwareArnd Bergmann (2):
ipc: fix semtimedop for generic 32-bit architectures
ipc: fix sparc64ipc()wrapperBjørn Mork (1):
cdc_ether: fix rndis support for Mediatek based smartphonesChen-Yu Tsai (1):
clk: Fix debugfsclk_possible_parentsfor clks without parent string namesChris Wilson (1):
drm/i915: Restore relaxed padding (OCL_OOB_SUPPRES_ENABLE) for skl+Christophe JAILLET (2):
ipv6: Fix the link time qualifier of 'ping_v6_proc_exit_net()'
sctp: Fix the link time qualifier of 'sctp_ctrlsock_exit()'Christophe Leroy (6):
crypto: talitos - check AES key size
crypto: talitos - fix CTR alg blocksize
crypto: talitos - check data blocksize in ablkcipher.
crypto: talitos - fix ECB algs ivsize
crypto: talitos - Do not modifyreq->cryptlenon decryption.
crypto: talitos - HMAC SNOOP NO AFEU mode requires SW icv checking.Cong Wang (1):
sch_hhf: ensure quantum andhhf_non_hh_weightare non-zeroDan Carpenter (2):
mt76: Fix a signedness bug inmt7615_add_interface()
mt76: mt7615: Use after free inmt7615_mcu_set_bcn()Daniel Drake (1):
Revert "mmc: sdhci: Remove unneeded quirk2 flag of O2 SD host controller"Douglas Anderson (1):
clk: rockchip: Don't yell about bad mmc phases when gettingEnrico Weigelt (1):
platform/x86: pcengines-apuv2: useKEY_RESTARTfor front buttonEric Biggers (1):
isdn/capi: check message length incapi_write()Eric Dumazet (1):
net: sched: fix reordering issuesFilipe Manana (1):
Btrfs: fix assertion failure during fsync and use of stale transactionFuqian Huang (1):
KVM: x86: work around leak of uninitialized stack contentsGreg Kroah-Hartman (1):
Linux 5.2.16Gustavo A. R. Silva (1):
mm/z3fold.c: fix lock/unlock imbalance inz3fold_page_isolateHans de Goede (2):
gpiolib: acpi: Addgpiolib_acpi_run_edge_events_on_bootoption and blacklist
drm: panel-orientation-quirks: Add extra quirk table entry for GPD MicroPCHenry Burns (1):
mm/z3fold.c: removez3fold_migrationtrylockHui Peng (1):
rsi: fix a double free bug inrsi_91x_deinit()Igor Mammedov (1):
KVM: s390:kvm_s390_vm_start_migration: checkdirty_bitmapbefore using it as target formemset()Ilya Maximets (1):
ixgbe: fix double clean of Tx descriptors with xdpJeff Kirsher (1):
ixgbevf: Fix secpath usage for IPsec Tx offloadJessica Yu (1):
modules: always page-align module section allocationsJim Mattson (1):
kvm: nVMX: Remove unnecessarysync_rootsfromhandle_inveptJohn Fastabend (1):
net:sock_map, fix missing ulp check in sock hash caseJunichi Nomura (1):
x86/boot: Useefi_setup_datafor searching RSDP on kexec-ed kernelsKent Gibson (2):
gpio: fix line flag validation inlinehandle_create
gpio: fix line flag validation inlineevent_createLinus Torvalds (1):
x86/build: Add -Wnoaddress-of-packed-member toREALMODE_CFLAGS, to silence GCC9 build warningLiran Alon (1):
KVM: SVM: Fix detection of AMD Errata 1096Maciej Żenczykowski (2):
net-ipv6: fix excessiveRTF_ADDRCONFflag on ::1/128 local route (and others)
ipv6:addrconf_f6i_alloc- fix non-null pointer check to !IS_ERR()Mario Limonciello (1):
Revert "Bluetooth: btusb: driver to enable the usb-wakeup feature"Mimi Zohar (1):
x86/ima: check EFI SetupMode tooMoritz Fischer (1):
net: fixed_phy: Add forward declaration for struct gpio_desc;Muchun Song (1):
driver core: Fix use-after-free and double free on glue directoryNeal Cardwell (1):
tcp: fixtcp_ecn_withdraw_cwr()to clearTCP_ECN_QUEUE_CWRNeil Armstrong (1):
drm/meson: Add support for XBGR8888 & ABGR8888 formatsNicolas Dichtel (1):
bridge/mdb: remove wrong use ofNLM_F_MULTINishka Dasgupta (1):
drm/mediatek:mtk_drm_drv.c: Addof_node_put()before gotoOlivier Moysan (2):
iio: adc: stm32-dfsdm: fix output resolution
iio: adc: stm32-dfsdm: fix data typePaolo Bonzini (1):
KVM: nVMX: handle page fault in vmreadRichard Weinberger (1):
ubifs: Correctly usetnc_next()insearch_dh_cookie()Roman Gushchin (1):
cgroup: freezer: fix frozen state inheritanceSean Christopherson (1):
KVM: x86/mmu: Reintroduce fast invalidate/zap for flushing memslotShmulik Ladkani (1):
net: gso: Fixskb_segmentsplat when splittinggso_sizemangled skb having linear-headedfrag_listStanislaw Gruszka (2):
Revert "rt2800: enableTX_PIN_CFG_LNA_PE_bits per band"
mt76: mt76x0e: disable 5GHz band for MT7630EStefan Chulski (1):
net: phylink: Fix flow control resolutionStefan Wahren (1):
Revert "mmc: bcm2835: Terminate timeout work synchronously"Steffen Dirkwinkel (1):
platform/x86:pmc_atom: Add CB4063 Beckhoff Automation board tocritclk_systemsDMI tableSteffen Klassert (1):
ixgbe: Fix secpath usage for IPsec TX offload.Stephen Boyd (1):
clk: Simplify debugfs printing and add a newlineSteve Wahl (1):
x86/purgatory: Change compiler flags from -mcmodel=kernel to -mcmodel=large to fix kexec relocation errorsSubash Abhinov Kasiviswanathan (1):
net: Fix null de-reference of device refcountSuraj Jitindar Singh (1):
powerpc: Addbarrier_nospectoraw_copy_in_user()Thomas Huth (1):
KVM: s390: Do not leak kernel stack data in theKVM_S390_INTERRUPTioctlUlf Hansson (2):
mmc: tmio: Fixup runtime PM management during probe
mmc: tmio: Fixup runtime PM management during removeVasily Khoruzhick (1):
drm/lima: fixlima_gem_wait()return valueVille Syrjälä (1):
drm/i915: Limit MST to <= 8bpc once againWei Yongjun (1):
gpio: mockup: add missingsingle_release()Xiaolei Li (1):
mtd: rawnand: mtk: Fix wrongly assigned OOB buffer pointer issueXin Long (3):
sctp: use transportpf_retransinsctp_do_8_2_transport_strike
tipc: add NULL pointer check before callingkfree_rcu
sctp: fix the missingput_userwhen dumping transport thresholdsYang Yingliang (3):
tun: fix use-after-free when register netdev failed
modules: fix BUG when load module with rodata=n
modules: fix compile error if don't have strict module rwxYueHaibing (1):
kernel/module: Fix mem leak inmodule_add_modinfo_attrsYunfeng Ye (1):
genirq: Prevent NULL pointer dereference inresend_irqs()