Linux 4.19.312
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.312 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.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/admin-guide/hw-vuln/spectre.rst | 18 Documentation/admin-guide/kernel-parameters.txt | 6 Makefile | 2 arch/arm/boot/dts/mmp2-brownstone.dts | 332 ++++------ arch/arm64/boot/dts/rockchip/rk3399.dtsi | 12 arch/parisc/include/asm/checksum.h | 107 +-- arch/powerpc/include/asm/reg_fsl_emb.h | 11 arch/powerpc/lib/Makefile | 2 arch/sparc/kernel/nmi.c | 2 arch/sparc/vdso/vma.c | 7 arch/x86/include/asm/cpufeatures.h | 2 arch/x86/include/asm/msr-index.h | 2 arch/x86/kernel/cpu/amd.c | 10 arch/x86/kernel/cpu/bugs.c | 117 +-- arch/x86/kernel/cpu/common.c | 17 arch/x86/mm/ident_map.c | 23 arch/x86/mm/pat.c | 50 + block/blk-stat.c | 2 drivers/ata/ahci.c | 5 drivers/ata/sata_mv.c | 63 - drivers/ata/sata_sx4.c | 6 drivers/base/power/wakeirq.c | 4 drivers/block/loop.c | 204 +++--- drivers/bluetooth/btintel.c | 2 drivers/clk/qcom/gcc-ipq8074.c | 2 drivers/clk/qcom/mmcc-apq8084.c | 2 drivers/clk/qcom/mmcc-msm8974.c | 2 drivers/crypto/qat/qat_common/adf_aer.c | 23 drivers/firmware/efi/vars.c | 17 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 4 drivers/gpu/drm/amd/display/modules/inc/mod_stats.h | 4 drivers/gpu/drm/imx/parallel-display.c | 4 drivers/gpu/drm/vc4/vc4_hdmi.c | 2 drivers/gpu/drm/vkms/vkms_drv.c | 2 drivers/hwmon/amc6821.c | 11 drivers/input/rmi4/rmi_driver.c | 6 drivers/md/dm-raid.c | 2 drivers/md/raid5.c | 12 drivers/media/pci/sta2x11/sta2x11_vip.c | 9 drivers/media/tuners/xc4000.c | 4 drivers/misc/vmw_vmci/vmci_datagram.c | 6 drivers/mmc/core/block.c | 10 drivers/mmc/host/tmio_mmc_core.c | 2 drivers/mtd/ubi/fastmap.c | 7 drivers/mtd/ubi/vtbl.c | 6 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 34 - drivers/net/ethernet/realtek/r8169_main.c | 9 drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 40 - drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 40 - drivers/net/wireless/ath/ath9k/antenna.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 4 drivers/pci/pci-driver.c | 23 drivers/s390/crypto/zcrypt_api.c | 2 drivers/scsi/lpfc/lpfc_nportdisc.c | 6 drivers/scsi/lpfc/lpfc_nvmet.c | 2 drivers/scsi/qla2xxx/qla_target.c | 10 drivers/slimbus/core.c | 4 drivers/soc/fsl/qbman/qman.c | 98 ++ drivers/staging/comedi/drivers/comedi_test.c | 30 drivers/staging/speakup/synth.c | 4 drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c | 52 + drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.h | 6 drivers/tty/n_gsm.c | 3 drivers/tty/serial/fsl_lpuart.c | 7 drivers/tty/vt/vt.c | 4 drivers/usb/class/cdc-wdm.c | 6 drivers/usb/core/port.c | 5 drivers/usb/core/sysfs.c | 16 drivers/usb/dwc2/core.h | 14 drivers/usb/dwc2/core_intr.c | 63 + drivers/usb/dwc2/gadget.c | 4 drivers/usb/dwc2/hcd.c | 47 + drivers/usb/dwc2/hcd_ddma.c | 17 drivers/usb/dwc2/hw.h | 2 drivers/usb/gadget/function/f_ncm.c | 2 drivers/usb/gadget/udc/core.c | 4 drivers/usb/host/sl811-hcd.c | 2 drivers/usb/serial/cp210x.c | 4 drivers/usb/serial/ftdi_sio.c | 2 drivers/usb/serial/ftdi_sio_ids.h | 6 drivers/usb/serial/option.c | 6 drivers/usb/storage/isd200.c | 23 drivers/vfio/platform/vfio_platform_irq.c | 5 drivers/video/fbdev/core/fbmon.c | 7 drivers/video/fbdev/via/accel.c | 4 drivers/virtio/virtio.c | 10 fs/aio.c | 8 fs/btrfs/export.c | 9 fs/btrfs/ioctl.c | 25 fs/btrfs/send.c | 10 fs/btrfs/volumes.c | 12 fs/exec.c | 1 fs/ext4/resize.c | 3 fs/fat/nfs.c | 6 fs/fuse/fuse_i.h | 1 fs/fuse/inode.c | 7 fs/isofs/inode.c | 18 fs/nilfs2/alloc.c | 38 - fs/nilfs2/btree.c | 51 - fs/nilfs2/cpfile.c | 10 fs/nilfs2/dat.c | 14 fs/nilfs2/direct.c | 23 fs/nilfs2/gcinode.c | 2 fs/nilfs2/ifile.c | 4 fs/nilfs2/inode.c | 31 fs/nilfs2/ioctl.c | 37 - fs/nilfs2/mdt.c | 2 fs/nilfs2/namei.c | 6 fs/nilfs2/nilfs.h | 9 fs/nilfs2/page.c | 11 fs/nilfs2/recovery.c | 32 fs/nilfs2/segbuf.c | 2 fs/nilfs2/segment.c | 38 - fs/nilfs2/sufile.c | 29 fs/nilfs2/super.c | 57 - fs/nilfs2/sysfs.c | 29 fs/nilfs2/the_nilfs.c | 85 +- fs/open.c | 38 - fs/sysv/itree.c | 10 fs/ubifs/file.c | 13 include/linux/fs.h | 3 include/linux/gfp.h | 9 include/linux/sunrpc/sched.h | 2 include/linux/timer.h | 18 include/net/erspan.h | 19 include/net/inet_connection_sock.h | 1 include/net/sock.h | 9 include/soc/fsl/qman.h | 9 include/trace/events/timer.h | 17 include/uapi/linux/input-event-codes.h | 1 init/initramfs.c | 77 +- kernel/events/core.c | 9 kernel/power/suspend.c | 1 kernel/printk/printk.c | 6 kernel/time/timer.c | 282 ++++++-- mm/compaction.c | 7 mm/memory-failure.c | 2 mm/memory.c | 4 mm/memtest.c | 4 mm/migrate.c | 6 mm/page_alloc.c | 10 mm/vmscan.c | 5 net/bluetooth/hci_debugfs.c | 48 - net/bluetooth/hci_event.c | 25 net/core/sock.c | 7 net/ipv4/inet_connection_sock.c | 14 net/ipv4/ip_gre.c | 104 ++- net/ipv4/tcp.c | 2 net/ipv6/ip6_fib.c | 14 net/ipv6/ip6_gre.c | 3 net/mac80211/cfg.c | 5 net/netfilter/nf_tables_api.c | 22 net/nfc/nci/core.c | 5 net/rds/rdma.c | 2 net/sched/act_skbmod.c | 10 net/xfrm/xfrm_user.c | 3 scripts/Makefile.extrawarn | 2 security/smack/smack_lsm.c | 12 sound/pci/hda/patch_realtek.c | 9 sound/sh/aica.c | 17 sound/soc/soc-ops.c | 2 tools/iio/iio_utils.c | 2 tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c | 1 tools/testing/ktest/ktest.pl | 1 tools/testing/selftests/net/reuseaddr_conflict.c | 2 virt/kvm/async_pf.c | 31 166 files changed, 2098 insertions(+), 1189 deletions(-)
Alan Stern (2):
USB: usb-storage: Prevent divide-by-0 error in isd200_ata_command
USB: core: Fix deadlock in usb_deauthorize_interface()
Aleksandr Burakov (1):
fbdev: viafb: fix typo in hw_bitblt_1 and hw_bitblt_2
Aleksandr Loktionov (1):
i40e: fix vf may be used uninitialized in this function warning
Alex Henrie (1):
isofs: handle CDs with bad root inode but good Joliet root directory
Alex Williamson (1):
vfio/platform: Disable virqfds on cleanup
Andrey Jr. Melnikov (1):
ahci: asm1064: correct count of reported ports
Anna-Maria Gleixner (3):
timer/trace: Replace deprecated vsprintf pointer extension %pf by %ps timer/trace: Improve timer tracing
timers: Prepare support for PREEMPT_RT
Aric Cyr (1):
drm/amd/display: Fix nanosec stat overflow
Arnd Bergmann (4):
staging: vc04_services: changen strncpy() to strscpy_pad()
ata: sata_sx4: fix pdc20621_get_from_dimm() on 64-bit
ata: sata_mv: Fix PCI device ID table declaration compilation warning
media: sta2x11: fix irq handler cast
Aurélien Jacobs (1):
USB: serial: option: add MeiG Smart SLM320 product
Bart Van Assche (1):
fs/aio: Check IOCB_AIO_RW before the struct aio_kiocb conversion
Bastien Nocera (1):
Bluetooth: Fix TOCTOU in HCI debugfs implementation
Borislav Petkov (1):
x86/bugs: Use sysfs_emit()
Borislav Petkov (AMD) (1):
x86/CPU/AMD: Update the Zenbleed microcode revisions
Cameron Williams (1):
USB: serial: add device ID for VeriFone adapter
Christian Häggström (1):
USB: serial: cp210x: add ID for MGP Instruments PDS100
Christoph Hellwig (4):
initramfs: factor out a helper to populate the initrd image
fs: add a vfs_fchown helper
fs: add a vfs_fchmod helper
initramfs: switch initramfs unpacking to struct file based APIs
Christophe JAILLET (1):
slimbus: core: Remove usage of the deprecated ida_simple_xx() API
Colin Ian King (1):
usb: sl811-hcd: only defined function checkdone if QUIRK2 is defined
Conrad Kostecki (1):
ahci: asm1064: asm1166: don't limit reported ports
Dai Ngo (1):
SUNRPC: increase size of rpc_wait_queue.qlen from unsigned short to unsigned int
Damian Muszynski (1):
crypto: qat - resolve race condition during AER recovery
Dan Carpenter (1):
staging: vc04_services: fix information leak in create_component()
Daniel Vogelbacher (1):
USB: serial: ftdi_sio: add support for GMC Z216C Adapter IR-USB
Dave Airlie (1):
amdkfd: use calloc instead of kzalloc to avoid integer overflow
Dave Stevenson (3):
staging: mmal-vchiq: Avoid use of bool in structures
staging: mmal-vchiq: Allocate and free components as required
staging: mmal-vchiq: Fix client_component for 64 bit kernel
David Hildenbrand (2):
virtio: reenable config if freezing device failed x86/mm/pat: fix VM_PAT handling in COW mappings
David Sterba (3):
btrfs: handle chunk tree lookup error in btrfs_relocate_sys_chunks()
btrfs: export: handle invalid inode or root reference in btrfs_get_parent()
btrfs: send: handle path ref underflow in header iterate_inode_ref()
Dmitry Antipov (1):
wifi: ath9k: fix LNA selection in ath_ant_try_scan()
Dominique Martinet (1):
mmc: core: Fix switch on gp3 partition
Duje Mihanović (1):
arm: dts: marvell: Fix maxium->maxim typo in brownstone dts
Duoming Zhou (1):
ALSA: sh: aica: reorder cleanup operations to avoid UAF bugs
Edward Adam Davis (1):
Bluetooth: btintel: Fix null ptr deref in btintel_read_version
Eric Dumazet (3):
tcp: properly terminate timers for kernel sockets net/sched: act_skbmod: prevent kernel-infoleak
erspan: make sure erspan_base_hdr is present in skb->head
Felix Fietkau (1):
wifi: mac80211: check/clear fast rx for non-4addr sta VLAN changes
Gabor Juhos (3):
clk: qcom: gcc-ipq8074: fix terminating of frequency table arrays
clk: qcom: mmcc-apq8084: fix terminating of frequency table arrays
clk: qcom: mmcc-msm8974: fix terminating of frequency table arrays
Geert Uytterhoeven (1):
initramfs: fix populate_initrd_image() section mismatch
Geliang Tang (1):
mptcp: add sk_stop_timer_sync helper
Genjian Zhang (1):
Revert "loop: Check for overflow while configuring loop"
Gergo Koteles (1):
Input: allocate keycode for Display refresh rate toggle
Goldwyn Rodrigues (1):
btrfs: allocate btrfs_ioctl_defrag_range_args on stack
Greg Kroah-Hartman (1):
Linux 4.19.312
Guenter Roeck (4):
parisc: Fix ip_fast_csum
parisc: Fix csum_ipv6_magic on 32-bit systems
parisc: Fix csum_ipv6_magic on 64-bit systems
parisc: Strip upper 32 bit of sum in csum_ipv6_magic for 64-bit builds
Gui-Dong Han (1):
media: xc4000: Fix atomicity violation in xc4000_get_frequency
Guo Mengqi (1):
drm/vkms: call drm_atomic_helper_shutdown before drm_dev_put()
Hangbin Liu (1):
ip_gre: do not report erspan version on GRE interface
Harald Freudenberger (1):
s390/zcrypt: fix reference counting on zcrypt card objects
Harshit Mogalapalli (1):
VMCI: Fix memcpy() run-time warning in dg_dispatch_as_host()
Heiner Kallweit (1):
r8169: fix issue caused by buggy BIOS on certain boards with RTL8168d
Helge Deller (1):
parisc: Do not hardcode registers in checksum functions
Holger Hoffstätte (1):
loop: properly observe rotational flag of underlying device
Hui Wang (1):
Bluetooth: hci_event: set the conn encrypted before conn establishes
I Gede Agastya Darma Laksana (1):
ALSA: hda/realtek: Update Panasonic CF-SZ6 quirk to support headset with microphone
Ian Abbott (1):
comedi: comedi_test: Prevent timers rescheduling during deletion
Ingo Molnar (1):
Revert "x86/mm/ident_map: Use gbpages only where full GB page should be mapped."
Jakub Kicinski (1):
selftests: reuseaddr_conflict: add missing new line at the end of the output
Jan Kara (1):
fat: fix uninitialized field in nostale filehandles
Jani Nikula (2):
drm/imx/ipuv3: do not return negative values from .get_modes() drm/vc4: hdmi: do not return negative values from .get_modes()
Joe Perches (1):
nilfs2: use a more common logging style
Johan Jonker (1):
arm64: dts: rockchip: fix rk3399 hdmi ports node
John Ogness (1):
printk: Update @console_may_schedule in console_trylock_spinning()
John Sperbeck (1):
init: open /initrd.image with O_LARGEFILE
Josua Mayer (1):
hwmon: (amc6821) add of_match table
Justin Tee (1):
scsi: lpfc: Fix possible memory leak in lpfc_rcv_padisc()
Kailang Yang (1):
ALSA: hda/realtek - Fix headset Mic no show at resume back for Lenovo ALC897 platform
Kim Phillips (2):
x86/cpu: Support AMD Automatic IBRS
x86/cpu: Enable STIBP on AMD if Automatic IBRS is enabled
Krishna Kurapati (1):
usb: gadget: ncm: Fix handling of zero block length packets
Kuniyuki Iwashima (1):
ipv6: Fix infinite recursion in fib6_dump_done().
Kunwu Chan (1):
Input: synaptics-rmi4 - fail probing if memory allocation for "phys" fails
Lin Yujun (1):
Documentation/hw-vuln: Update spectre doc
Liu Shixin (1):
mm/memory-failure: fix an incorrect use of tail pages
Lubomir Rintel (1):
ARM: dts: mmp2-brownstone: Don't redeclare phandle references
Luiz Augusto von Dentz (1):
Bluetooth: btintel: Fixe build regression
Mahmoud Adam (1):
net/rds: fix possible cp null dereference
Martijn Coenen (5):
loop: Call loop_config_discard() only after new config is applied
loop: Remove sector_t truncation checks
loop: Factor out setting loop device size
loop: Refactor loop_set_status() size calculation
loop: Factor out configuring loop from status
Mathias Nyman (1):
usb: port: Don't try to peer unused USB ports based on location
Matthew Wilcox (Oracle) (1):
ubifs: Set page uptodate in the correct place
Maulik Shah (1):
PM: suspend: Set mem_sleep_current during kernel command line setup
Max Filippov (1):
exec: Fix NOMMU linux_binprm::exec in transfer_args_to_stack()
Maximilian Heyne (1):
ext4: fix corruption during on-line resize
Michael Ellerman (1):
powerpc/fsl: Fix mfpmr build errors with newer binutils
Miklos Szeredi (1):
fuse: don't unhash root
Minas Harutyunyan (4):
usb: dwc2: host: Fix remote wakeup from hibernation
usb: dwc2: host: Fix hibernation flow
usb: dwc2: host: Fix ISOC flow in DDMA mode
usb: dwc2: gadget: LPM flow fix
Muhammad Usama Anjum (1):
scsi: lpfc: Correct size for wqe for memset()
Nathan Chancellor (3):
kbuild: Move -Wenum-{compare-conditional,enum-conversion} into W=1
xfrm: Avoid clang fortify warning in copy_to_user_tmpl()
powerpc: xor_vmx: Add '-mhard-float' to CFLAGS
Nicolas Pitre (1):
vt: fix unicode buffer corruption when deleting characters
Oliver Neukum (1):
usb: cdc-wdm: close race between read and workqueue
Pablo Neira Ayuso (3):
netfilter: nf_tables: disallow anonymous set with timeout flag
netfilter: nf_tables: reject constant set with timeout
netfilter: nf_tables: disallow timeout for anonymous sets
Petre Rodan (1):
tools: iio: replace seekdir() in iio_generic_buffer
Piotr Wejman (1):
net: stmmac: fix rx queue priority assignment
Qiang Zhang (1):
memtest: use {READ,WRITE}_ONCE in memory scanning
Qingliang Li (1):
PM: sleep: wakeirq: fix wake irq warning in system suspend
Quinn Tran (1):
scsi: qla2xxx: Fix command flush on cable pull
Rafael J. Wysocki (1):
PCI/PM: Drain runtime-idle callbacks before driver removal
Randy Dunlap (2):
sparc64: NMI watchdog: fix return value of __setup handler
sparc: vDSO: fix return value of __setup handler
Ricardo B. Marliere (1):
ktest: force $buildonly = 1 for 'make_warnings_file' test type
Richard Weinberger (1):
ubi: Check for too small LEB size in VTBL code
Roberto Sassu (2):
smack: Set SMACK64TRANSMUTE only for dirs in smack_inode_setxattr()
smack: Handle SMACK64TRANSMUTE in smack_inode_setsecurity()
Roman Smirnov (2):
block: prevent division by zero in blk_rq_stat_sum()
fbmon: prevent division by zero in fb_videomode_from_videomode()
Ryosuke Yasuoka (1):
nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet
Ryusuke Konishi (2):
nilfs2: fix failure to detect DAT corruption in btree and direct mappings
nilfs2: prevent kernel bug at submit_bh_wbc()
Samasth Norway Ananda (1):
tools/power x86_energy_perf_policy: Fix file leak in get_pkg_num()
Samuel Thibault (1):
speakup: Fix 8bit characters from direct synth
Sean Anderson (4):
soc: fsl: qbman: Always disable interrupts when taking cgr_lock
soc: fsl: qbman: Add helper for sanity checking cgr ops
soc: fsl: qbman: Add CGR update function
soc: fsl: qbman: Use raw spinlock for cgr_lock
Sean Christopherson (1):
KVM: Always flush async #PF workqueue when vCPU is being destroyed
Sherry Sun (1):
tty: serial: fsl_lpuart: avoid idle preamble pending if CTS is enabled
Siddh Raman Pant (1):
loop: Check for overflow while configuring loop
Song Liu (1):
Revert "Revert "md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d""
Stephen Lee (1):
ASoC: ops: Fix wraparound for mask in snd_soc_get_volsw
Svyatoslav Pankratov (1):
crypto: qat - fix double free during reset
Tetsuo Handa (1):
sysv: don't call sb_bread() with pointers_lock held
Thadeu Lima de Souza Cascardo (1):
tty: n_gsm: require CAP_NET_ADMIN to attach N_GSM0710 ldisc
Thomas Gleixner (3):
timers: Update kernel-doc for various functions
timers: Use del_timer_sync() even on UP
timers: Rename del_timer_sync() to timer_delete_sync()
Tim Schumacher (1):
efivarfs: Request at most 512 bytes for variable names
Toru Katagiri (1):
USB: serial: cp210x: add pid/vid for TDK NC0110013M and MM0110113M
Uwe Kleine-König (1):
PCI: Drop pci_device_remove() test of pci_dev->driver
Vasiliy Kovalev (1):
VMCI: Fix possible memcpy() run-time warning in vmci_datagram_invoke_guest_handler()
Vlastimil Babka (1):
mm, vmscan: prevent infinite loop for costly GFP_NOIO | __GFP_RETRY_MAYFAIL allocations
William Tu (2):
erspan: Add type I version 0 support.
erspan: Check IFLA_GRE_ERSPAN_VER is set.
Wolfram Sang (1):
mmc: tmio: avoid concurrent runs of mmc_request_done()
Yang Jihong (1):
perf/core: Fix reentry problem in perf_output_read_group()
Yangxi Xiang (1):
vt: fix memory overlapping when deleting chars in the buffer
Yu Kuai (1):
dm-raid: fix lockdep waring in "pers->hot_add_disk"
Zhang Yi (1):
ubi: correct the calculation of fastmap size
Zheng Wang (1):
wifi: brcmfmac: Fix use-after-free bug in brcmf_cfg80211_detach
Zhong Jinghua (1):
loop: loop_set_status_from_info() check before assignment
Zi Yan (1):
mm/migrate: set swap entry values of THP tail pages properly.
Ziyang Xuan (1):
netfilter: nf_tables: Fix potential data-race in __nft_flowtable_type_get()
yuan linyu (1):
usb: udc: remove warning when queue disabled ep
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/hw-vuln/spectre.rst +11 -7
@@ -484,11 +484,14 @@ Spectre variant 2 Systems which support enhanced IBRS (eIBRS) enable IBRS protection once at boot, by setting the IBRS bit, and they're automatically protected against - Spectre v2 variant attacks, including cross-thread branch target injections - on SMT systems (STIBP). In other words, eIBRS enables STIBP too. + Spectre v2 variant attacks. - Legacy IBRS systems clear the IBRS bit on exit to userspace and - therefore explicitly enable STIBP for that + On Intel's enhanced IBRS systems, this includes cross-thread branch target + injections on SMT systems (STIBP). In other words, Intel eIBRS enables + STIBP, too. + + AMD Automatic IBRS does not protect userspace, and Legacy IBRS systems clear + the IBRS bit on exit to userspace, therefore both explicitly enable STIBP. The retpoline mitigation is turned on by default on vulnerable CPUs. It can be forced on or off by the administrator
@@ -622,9 +625,10 @@ kernel command line. retpoline,generic Retpolines retpoline,lfence LFENCE; indirect branch retpoline,amd alias for retpoline,lfence - eibrs enhanced IBRS - eibrs,retpoline enhanced IBRS + Retpolines - eibrs,lfence enhanced IBRS + LFENCE + eibrs Enhanced/Auto IBRS + eibrs,retpoline Enhanced/Auto IBRS + Retpolines + eibrs,lfence Enhanced/Auto IBRS + LFENCE + ibrs use IBRS to protect kernel Not specifying this option is equivalent to spectre_v2=auto.
Documentation/admin-guide/kernel-parameters.txt +3 -3
@@ -4403,9 +4403,9 @@ retpoline,generic - Retpolines retpoline,lfence - LFENCE; indirect branch retpoline,amd - alias for retpoline,lfence - eibrs - enhanced IBRS - eibrs,retpoline - enhanced IBRS + Retpolines - eibrs,lfence - enhanced IBRS + LFENCE + eibrs - Enhanced/Auto IBRS + eibrs,retpoline - Enhanced/Auto IBRS + Retpolines + eibrs,lfence - Enhanced/Auto IBRS + LFENCE ibrs - use IBRS to protect kernel Not specifying this option is equivalent to
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 311 +SUBLEVEL = 312 EXTRAVERSION = NAME = "People's Front"
arch/arm/boot/dts/mmp2-brownstone.dts +165 -167
341 lines not on this page · raw message
arch/arm64/boot/dts/rockchip/rk3399.dtsi +10 -2
@@ -1683,6 +1683,7 @@ hdmi: hdmi@ff940000 { compatible = "rockchip,rk3399-dw-hdmi"; reg = <0x0 0xff940000 0x0 0x20000>; + reg-io-width = <4>; interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH 0>; clocks = <&cru PCLK_HDMI_CTRL>, <&cru SCLK_HDMI_SFR>,
@@ -1691,13 +1692,16 @@ <&cru PLL_VPLL>; clock-names = "iahb", "isfr", "cec", "grf", "vpll"; power-domains = <&power RK3399_PD_HDCP>; - reg-io-width = <4>; rockchip,grf = <&grf>; #sound-dai-cells = <0>; status = "disabled"; ports { - hdmi_in: port { + #address-cells = <1>; + #size-cells = <0>; + + hdmi_in: port@0 { + reg = <0>; #address-cells = <1>; #size-cells = <0>;
@@ -1710,6 +1714,10 @@ remote-endpoint = <&vopl_out_hdmi>; }; }; + + hdmi_out: port@1 { + reg = <1>; + }; }; };
arch/parisc/include/asm/checksum.h +56 -51
143 lines not on this page · raw message
arch/powerpc/include/asm/reg_fsl_emb.h +9 -2
@@ -12,9 +12,16 @@#ifndef __ASSEMBLY__/* Performance Monitor Registers */ #define mfpmr (rn) ({unsigned int rval; \ - asm volatile("mfpmr %0," __stringify(rn) \ + asm volatile(".machine push; " \ + ".machine e300; " \ + "mfpmr %0," __stringify(rn) ";" \ + ".machine pop; " \ : "=r" (rval)); rval;}) -#define mtpmr (rn, v) asm volatile("mtpmr " __stringify(rn) ",%0" : : "r" (v)) +#define mtpmr (rn, v) asm volatile(".machine push; " \ + ".machine e300; " \ + "mtpmr " __stringify(rn) ",%0; " \ + ".machine pop; " \ + : : "r" (v))#endif /* __ASSEMBLY__ */ /* Freescale Book E Performance Monitor APU Registers */
arch/powerpc/lib/Makefile +1 -1
@@ -46,6 +46,6 @@ obj-$(CONFIG_PPC_LIB_RHEAP) += rheap.o obj-$(CONFIG_FTR_FIXUP_SELFTEST) += feature-fixups-test.o obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o -CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec) +CFLAGS_xor_vmx.o += -mhard-float -maltivec $(call cc-option,-mabi=altivec) obj-$(CONFIG_PPC64) += $(obj64-y)
arch/sparc/kernel/nmi.c +1 -1
@@ -273,7 +273,7 @@ static int __init setup_nmi_watchdog(char *str)if (!strncmp (str,"panic" ,5 )) panic_on_timeout =1 ; -return 0 ; +return 1 ; }__setup ("nmi_watchdog=" , setup_nmi_watchdog);
arch/sparc/vdso/vma.c +3 -4
@@ -262,9 +262,8 @@ static __init int vdso_setup(char *s)unsigned long val; err =kstrtoul (s,10 , &val); -if (err) -return err; - vdso_enabled = val; -return 0 ; +if (!err) + vdso_enabled = val; +return 1 ; }__setup ("vdso=" , vdso_setup);
arch/x86/include/asm/cpufeatures.h +2 -0
@@ -369,6 +369,8 @@#define X86_FEATURE_ARCH_CAPABILITIES (18*32+29)/* IA32_ARCH_CAPABILITIES MSR (Intel) */ #define X86_FEATURE_SPEC_CTRL_SSBD (18*32+31)/* "" Speculative Store Bypass Disable */ +#define X86_FEATURE_AUTOIBRS (20*32+ 8)/* "" Automatic IBRS */ +/* * BUG word(s) */
arch/x86/include/asm/msr-index.h +2 -0
@@ -30,6 +30,7 @@#define _EFER_SVME 12/* Enable virtualization */ #define _EFER_LMSLE 13/* Long Mode Segment Limit Enable */ #define _EFER_FFXSR 14/* Enable Fast FXSAVE/FXRSTOR */ +#define _EFER_AUTOIBRS 21/* Enable Automatic IBRS */ #define EFER_SCE (1<<_EFER_SCE)#define EFER_LME (1<<_EFER_LME)
@@ -38,6 +39,7 @@#define EFER_SVME (1<<_EFER_SVME)#define EFER_LMSLE (1<<_EFER_LMSLE)#define EFER_FFXSR (1<<_EFER_FFXSR) +#define EFER_AUTOIBRS (1<<_EFER_AUTOIBRS)/* Intel MSRs. Some also available on other CPUs */
arch/x86/kernel/cpu/amd.c +5 -5
@@ -988,11 +988,11 @@ static bool cpu_has_zenbleed_microcode(void)u32 good_rev =0 ;switch (boot_cpu_data.x86_model) { - case 0x30 ... 0x3f: good_rev = 0x0830107a; break; - case 0x60 ... 0x67: good_rev = 0x0860010b; break; - case 0x68 ... 0x6f: good_rev = 0x08608105; break; - case 0x70 ... 0x7f: good_rev = 0x08701032; break; - case 0xa0 ... 0xaf: good_rev = 0x08a00008; break; + case 0x30 ... 0x3f: good_rev = 0x0830107b; break; + case 0x60 ... 0x67: good_rev = 0x0860010c; break; + case 0x68 ... 0x6f: good_rev = 0x08608107; break; + case 0x70 ... 0x7f: good_rev = 0x08701033; break; + case 0xa0 ... 0xaf: good_rev = 0x08a00009; break;default :return false;
arch/x86/kernel/cpu/bugs.c +62 -55
255 lines not on this page · raw message
arch/x86/kernel/cpu/common.c +10 -7
@@ -1025,7 +1025,7 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {VULNWL_AMD (0x12 ,NO_MELTDOWN |NO_SSB |NO_L1TF |NO_MDS |NO_SWAPGS |NO_ITLB_MULTIHIT |NO_MMIO ),/* FAMILY_ANY must be last, otherwise 0x0f - 0x12 matches won't work */ - VULNWL_AMD(X86_FAMILY_ANY, NO_MELTDOWN | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO), + VULNWL_AMD(X86_FAMILY_ANY, NO_MELTDOWN | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_MMIO | NO_EIBRS_PBRSB), {} };
@@ -1133,8 +1133,16 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c) !cpu_has(c, X86_FEATURE_AMD_SSB_NO))setup_force_cpu_bug (X86_BUG_SPEC_STORE_BYPASS ); -if (ia32_cap &ARCH_CAP_IBRS_ALL ) +/* +* AMD's AutoIBRS is equivalent to Intel's eIBRS - use the Intel feature +* flag and protect from vendor-specific bugs via the whitelist. +*/ +if ((ia32_cap &ARCH_CAP_IBRS_ALL ) ||cpu_has (c,X86_FEATURE_AUTOIBRS )) {setup_force_cpu_cap (X86_FEATURE_IBRS_ENHANCED ); +if (!cpu_matches (cpu_vuln_whitelist,NO_EIBRS_PBRSB ) && + !(ia32_cap &ARCH_CAP_PBRSB_NO )) +setup_force_cpu_bug (X86_BUG_EIBRS_PBRSB ); + }if (!cpu_matches (cpu_vuln_whitelist,NO_MDS ) && !(ia32_cap &ARCH_CAP_MDS_NO )) {
@@ -1196,11 +1204,6 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)setup_force_cpu_bug (X86_BUG_RETBLEED ); } -if (cpu_has (c,X86_FEATURE_IBRS_ENHANCED ) && - !cpu_matches (cpu_vuln_whitelist,NO_EIBRS_PBRSB ) && - !(ia32_cap &ARCH_CAP_PBRSB_NO )) -setup_force_cpu_bug (X86_BUG_EIBRS_PBRSB ); -/* * Check if CPU is vulnerable to GDS. If running in a virtual machine on * an affected processor, the VMM may have disabled the use of GATHER by
arch/x86/mm/ident_map.c +5 -18
@@ -26,31 +26,18 @@ static int ident_pud_init(struct x86_mapping_info *info, pud_t *pud_page,for (; addr < end; addr = next) {pud_t *pud = pud_page +pud_index (addr);pmd_t *pmd; -bool use_gbpage; next = (addr &PUD_MASK ) +PUD_SIZE ;if (next > end) next = end; -/* if this is already a gbpage, this portion is already mapped */ -if (pud_large (*pud)) -continue ; - -/* Is using a gbpage allowed? */ - use_gbpage = info->direct_gbpages; - -/* Don't use gbpage if it maps more than the requested region. */ -/* at the begining: */ - use_gbpage &= ((addr & ~PUD_MASK ) ==0 ); -/* ... or at the end: */ - use_gbpage &= ((next & ~PUD_MASK ) ==0 ); - -/* Never overwrite existing mappings */ - use_gbpage &= !pud_present (*pud); - -if (use_gbpage) { +if (info->direct_gbpages) {pud_t pudval; +if (pud_present (*pud)) +continue ; + + addr &=PUD_MASK ; pudval =__pud ((addr - info->offset) | info->page_flag);set_pud (pud, pudval);continue ;
arch/x86/mm/pat.c +36 -14
86 lines not on this page · raw message
block/blk-stat.c +1 -1
@@ -27,7 +27,7 @@ void blk_rq_stat_init(struct blk_rq_stat *stat)/* src is a per-cpu stat, mean isn't initialized */ void blk_rq_stat_sum (struct blk_rq_stat *dst,struct blk_rq_stat *src) { -if (!src->nr_samples) +if (dst->nr_samples + src->nr_samples <= dst->nr_samples)return ; dst->min =min (dst->min, src->min);
drivers/ata/ahci.c +0 -5
@@ -634,11 +634,6 @@ MODULE_PARM_DESC(mobile_lpm_policy, "Default LPM policy for mobile chipsets");static void ahci_pci_save_initial_config (struct pci_dev *pdev,struct ahci_host_priv *hpriv) { -if (pdev->vendor ==PCI_VENDOR_ID_ASMEDIA && pdev->device ==0x1166 ) { -dev_info (&pdev->dev,"ASM1166 has only six ports\n" ); - hpriv->saved_port_map =0x3f ; - } -if (pdev->vendor ==PCI_VENDOR_ID_JMICRON && pdev->device ==0x2361 ) {dev_info (&pdev->dev,"JMB361 has only one port\n" ); hpriv->force_port_map =1 ;
drivers/ata/sata_mv.c +31 -32
87 lines not on this page · raw message
drivers/ata/sata_sx4.c +2 -4
@@ -1020,8 +1020,7 @@ static void pdc20621_get_from_dimm(struct ata_host *host, void *psource, offset -= (idx * window_size); idx++; - dist = ((long ) (window_size - (offset + size))) >=0 ? size : - (long ) (window_size - offset); + dist =min (size, window_size - offset);memcpy_fromio (psource, dimm_mmio + offset /4 , dist); psource += dist;
@@ -1069,8 +1068,7 @@ static void pdc20621_put_to_dimm(struct ata_host *host, void *psource,readl (mmio +PDC_DIMM_WINDOW_CTLR ); offset -= (idx * window_size); idx++; - dist = ((long )(s32)(window_size - (offset + size))) >=0 ? size : - (long ) (window_size - offset); + dist =min (size, window_size - offset);memcpy_toio (dimm_mmio + offset /4 , psource, dist);writel (0x01 , mmio +PDC_GENERAL_CTLR );readl (mmio +PDC_GENERAL_CTLR );
drivers/base/power/wakeirq.c +3 -1
@@ -376,8 +376,10 @@ void dev_pm_enable_wake_irq_complete(struct device *dev)return ;if (wirq->status &WAKE_IRQ_DEDICATED_MANAGED && - wirq->status &WAKE_IRQ_DEDICATED_REVERSE ) + wirq->status &WAKE_IRQ_DEDICATED_REVERSE ) {enable_irq (wirq->irq); + wirq->status |=WAKE_IRQ_DEDICATED_ENABLED ; + } }/**
drivers/block/loop.c +123 -81
281 lines not on this page · raw message
drivers/bluetooth/btintel.c +1 -1
@@ -361,7 +361,7 @@ int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver)return PTR_ERR (skb); } -if (skb->len !=sizeof (*ver)) { +if (!skb || skb->len !=sizeof (*ver)) {bt_dev_err (hdev,"Intel version event size mismatch" );kfree_skb (skb);return -EILSEQ ;
drivers/clk/qcom/gcc-ipq8074.c +2 -0
@@ -980,6 +980,7 @@ static struct clk_rcg2 pcie0_axi_clk_src = {static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {F (19200000 ,P_XO ,1 ,0 ,0 ), + { } };static struct clk_rcg2 pcie0_aux_clk_src = {
@@ -1085,6 +1086,7 @@ static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {F (19200000 ,P_XO ,1 ,0 ,0 ),F (160000000 ,P_GPLL0 ,5 ,0 ,0 ), F(308570000, P_GPLL6, 3.5, 0, 0), + { } }; static struct clk_rcg2 sdcc1_ice_core_clk_src = {
drivers/clk/qcom/mmcc-apq8084.c +2 -0
@@ -341,6 +341,7 @@ static struct freq_tbl ftbl_mmss_axi_clk[] = {F (333430000 ,P_MMPLL1 ,3.5 ,0 ,0 ),F (400000000 ,P_MMPLL0 ,2 ,0 ,0 ), F(466800000, P_MMPLL1, 2.5, 0, 0), + { } }; static struct clk_rcg2 mmss_axi_clk_src = {
@@ -365,6 +366,7 @@ static struct freq_tbl ftbl_ocmemnoc_clk[] = {F (150000000 ,P_GPLL0 ,4 ,0 ,0 ),F (228570000 ,P_MMPLL0 ,3.5 ,0 ,0 ), F(320000000, P_MMPLL0, 2.5, 0, 0), + { } }; static struct clk_rcg2 ocmemnoc_clk_src = {
drivers/clk/qcom/mmcc-msm8974.c +2 -0
@@ -291,6 +291,7 @@ static struct freq_tbl ftbl_mmss_axi_clk[] = {F (291750000 ,P_MMPLL1 ,4 ,0 ,0 ),F (400000000 ,P_MMPLL0 ,2 ,0 ,0 ), F(466800000, P_MMPLL1, 2.5, 0, 0), + { } }; static struct clk_rcg2 mmss_axi_clk_src = {
@@ -315,6 +316,7 @@ static struct freq_tbl ftbl_ocmemnoc_clk[] = {F (150000000 ,P_GPLL0 ,4 ,0 ,0 ),F (291750000 ,P_MMPLL1 ,4 ,0 ,0 ), F(400000000, P_MMPLL0, 2, 0, 0), + { } }; static struct clk_rcg2 ocmemnoc_clk_src = {
drivers/crypto/qat/qat_common/adf_aer.c +17 -6
@@ -139,18 +139,28 @@ static void adf_device_reset_worker(struct work_struct *work)if (adf_dev_init (accel_dev) ||adf_dev_start (accel_dev)) {/* The device hanged and we can't restart it so stop here */ dev_err (&GET_DEV (accel_dev),"Restart device failed\n" ); -kfree (reset_data); +if (reset_data->mode ==ADF_DEV_RESET_ASYNC || +completion_done (&reset_data->compl)) +kfree (reset_data);WARN (1 ,"QAT: device restart failed. Device is unusable\n" );return ; }adf_dev_restarted_notify (accel_dev);clear_bit (ADF_STATUS_RESTARTING , &accel_dev->status); -/* The dev is back alive. Notify the caller if in sync mode */ -if (reset_data->mode ==ADF_DEV_RESET_SYNC ) -complete (&reset_data->compl); -else +/* +* The dev is back alive. Notify the caller if in sync mode +* +* If device restart will take a more time than expected, +* the schedule_reset() function can timeout and exit. This can be +* detected by calling the completion_done() function. In this case +* the reset_data structure needs to be freed here. +*/ +if (reset_data->mode ==ADF_DEV_RESET_ASYNC || +completion_done (&reset_data->compl))kfree (reset_data); +else +complete (&reset_data->compl); } static int adf_dev_aer_schedule_reset(struct adf_accel_dev *accel_dev,
@@ -183,8 +193,9 @@ static int adf_dev_aer_schedule_reset(struct adf_accel_dev *accel_dev,dev_err (&GET_DEV (accel_dev),"Reset device timeout expired\n" ); ret = -EFAULT ; + }else { +kfree (reset_data); } -kfree (reset_data);return ret; }return 0 ;
drivers/firmware/efi/vars.c +11 -6
@@ -440,7 +440,7 @@ int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), void *data, bool duplicates, struct list_head *head) { const struct efivar_operations *ops; -unsigned long variable_name_size =1024 ; +unsigned long variable_name_size =512 ;efi_char16_t *variable_name;efi_status_t status;efi_guid_t vendor_guid;
@@ -463,12 +463,13 @@ int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), }/* -* Per EFI spec, the maximum storage allocated for both -* the variable name and variable data is 1024 bytes. +* A small set of old UEFI implementations reject sizes +* above a certain threshold, the lowest seen in the wild +* is 512. */ do { - variable_name_size = 1024; + variable_name_size = 512; status = ops->get_next_variable(&variable_name_size, variable_name,
@@ -512,9 +513,13 @@ int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),break ;case EFI_NOT_FOUND :break ; +case EFI_BUFFER_TOO_SMALL : +pr_warn ("efivars: Variable name size exceeds maximum (%lu > 512)\n" , + variable_name_size); + status =EFI_NOT_FOUND ; +break ;default : -printk (KERN_WARNING "efivars: get_next_variable: status=%lx\n" , - status); +pr_warn ("efivars: get_next_variable: status=%lx\n" , status); status =EFI_NOT_FOUND ;break ; }
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +2 -2
@@ -923,8 +923,8 @@ static int kfd_ioctl_get_process_apertures_new(struct file *filp,* nodes, but not more than args->num_of_nodes as that is * the amount of memory allocated by user */ - pa =kzalloc ((sizeof (struct kfd_process_device_apertures ) * - args->num_of_nodes),GFP_KERNEL ); + pa =kcalloc (args->num_of_nodes,sizeof (struct kfd_process_device_apertures ), +GFP_KERNEL );if (!pa)return -ENOMEM ;
drivers/gpu/drm/amd/display/modules/inc/mod_stats.h +2 -2
@@ -51,10 +51,10 @@ void mod_stats_update_event(struct mod_stats *mod_stats, unsigned int length);void mod_stats_update_flip (struct mod_stats *mod_stats, -unsigned long timestamp_in_ns); +unsigned long long timestamp_in_ns);void mod_stats_update_vupdate (struct mod_stats *mod_stats, -unsigned long timestamp_in_ns); +unsigned long long timestamp_in_ns); void mod_stats_update_freesync(struct mod_stats *mod_stats, unsigned int v_total_min,
drivers/gpu/drm/imx/parallel-display.c +2 -2
@@ -72,14 +72,14 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)int ret;if (!mode) -return -EINVAL ; +return 0 ; ret =of_get_drm_display_mode (np, &imxpd->mode, &imxpd->bus_flags,OF_USE_NATIVE_MODE );if (ret) {drm_mode_destroy (connector->dev, mode); -return ret; +return 0 ; }drm_mode_copy (mode, &imxpd->mode);
drivers/gpu/drm/vc4/vc4_hdmi.c +1 -1
@@ -276,7 +276,7 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) edid =drm_get_edid (connector, vc4->hdmi->ddc);cec_s_phys_addr_from_edid (vc4->hdmi->cec_adap, edid);if (!edid) -return -ENODEV ; +return 0 ; vc4_encoder->hdmi_monitor =drm_detect_hdmi_monitor (edid);
drivers/gpu/drm/vkms/vkms_drv.c +1 -1
@@ -39,7 +39,6 @@ static void vkms_release(struct drm_device *dev) struct vkms_device *vkms = container_of(dev, struct vkms_device, drm);platform_device_unregister (vkms->platform); -drm_atomic_helper_shutdown (&vkms->drm);drm_mode_config_cleanup (&vkms->drm);drm_dev_fini (&vkms->drm); }
@@ -137,6 +136,7 @@ static void __exit vkms_exit(void) }drm_dev_unregister (&vkms_device->drm); +drm_atomic_helper_shutdown (&vkms_device->drm);drm_dev_put (&vkms_device->drm);kfree (vkms_device);
drivers/hwmon/amc6821.c +11 -0
@@ -1003,10 +1003,21 @@ static const struct i2c_device_id amc6821_id[] = {MODULE_DEVICE_TABLE (i2c, amc6821_id); +static const struct of_device_id __maybe_unused amc6821_of_match[] = { + { + .compatible ="ti,amc6821" , + .data = (void *)amc6821, + }, + { } +}; + +MODULE_DEVICE_TABLE (of, amc6821_of_match); +static struct i2c_driver amc6821_driver = { .class =I2C_CLASS_HWMON , .driver = { .name ="amc6821" , + .of_match_table =of_match_ptr (amc6821_of_match), }, .probe = amc6821_probe, .id_table = amc6821_id,
drivers/input/rmi4/rmi_driver.c +5 -1
@@ -1199,7 +1199,11 @@ static int rmi_driver_probe(struct device *dev) }rmi_driver_set_input_params (rmi_dev, data->input); data->input->phys =devm_kasprintf (dev,GFP_KERNEL , -"%s/input0" ,dev_name (dev)); +"%s/input0" ,dev_name (dev)); +if (!data->input->phys) { + retval = -ENOMEM ; + goto err; + } } retval =rmi_init_functions (data);
drivers/md/dm-raid.c +2 -0
@@ -4023,7 +4023,9 @@ static void raid_resume(struct dm_target *ti)* Take this opportunity to check whether any failed * devices are reachable again. */ +mddev_lock_nointr (mddev);attempt_restore_of_faulty_devices (rs); +mddev_unlock (mddev); }if (test_and_clear_bit (RT_FLAG_RS_SUSPENDED , &rs->runtime_flags)) {
drivers/md/raid5.c +12 -0
@@ -44,6 +44,7 @@*/ #include <linux/blkdev.h> +#include <linux/delay.h> #include <linux/kthread.h> #include <linux/raid/pq.h> #include <linux/async_tx.h>
@@ -6329,7 +6330,18 @@ static void raid5d(struct md_thread *thread)spin_unlock_irq (&conf->device_lock);md_check_recovery (mddev);spin_lock_irq (&conf->device_lock); + +/* +* Waiting on MD_SB_CHANGE_PENDING below may deadlock +* seeing md_check_recovery() is needed to clear +* the flag when using mdmon. +*/ +continue ; } + +wait_event_lock_irq (mddev->sb_wait, + !test_bit (MD_SB_CHANGE_PENDING , &mddev->sb_flags), + conf->device_lock); }pr_debug ("%d stripes handled\n" , handled);
drivers/media/pci/sta2x11/sta2x11_vip.c +4 -5
@@ -780,7 +780,7 @@ static const struct video_device video_dev_template = {/** * vip_irq - interrupt routine * @irq: Number of interrupt ( not used, correct number is assumed ) -* @vip: local data structure containing all information +* @data: local data structure containing all information * * check for both frame interrupts set ( top and bottom ). * check FIFO overflow, but limit number of log messages after open.
@@ -790,8 +790,9 @@ static const struct video_device video_dev_template = {* * IRQ_HANDLED, interrupt done. */ -static irqreturn_t vip_irq (int irq,struct sta2x11_vip *vip) +static irqreturn_t vip_irq (int irq,void *data) { +struct sta2x11_vip *vip = data;unsigned int status; status =reg_read (vip,DVP_ITS );
@@ -1073,9 +1074,7 @@ static int sta2x11_vip_init_one(struct pci_dev *pdev,spin_lock_init (&vip->slock); - ret =request_irq (pdev->irq, - (irq_handler_t ) vip_irq, -IRQF_SHARED ,KBUILD_MODNAME , vip); + ret =request_irq (pdev->irq, vip_irq,IRQF_SHARED ,KBUILD_MODNAME , vip);if (ret) {dev_err (&pdev->dev,"request_irq failed\n" ); ret = -ENODEV ;
drivers/media/tuners/xc4000.c +2 -2
@@ -1527,10 +1527,10 @@ static int xc4000_get_frequency(struct dvb_frontend *fe, u32 *freq) {struct xc4000_priv *priv = fe->tuner_priv; +mutex_lock (&priv->lock); *freq = priv->freq_hz + priv->freq_offset;if (debug) { -mutex_lock (&priv->lock);if ((priv->cur_fw.type & (BASE |FM |DTV6 |DTV7 |DTV78 |DTV8 )) ==BASE ) {u16 snr =0 ;
@@ -1541,8 +1541,8 @@ static int xc4000_get_frequency(struct dvb_frontend *fe, u32 *freq)return 0 ; } } -mutex_unlock (&priv->lock); } +mutex_unlock (&priv->lock);dprintk (1 ,"%s()\n" , __func__);
drivers/misc/vmw_vmci/vmci_datagram.c +4 -2
@@ -242,7 +242,8 @@ static int dg_dispatch_as_host(u32 context_id, struct vmci_datagram *dg) dg_info->in_dg_host_queue = true; dg_info->entry = dst_entry; -memcpy (&dg_info->msg, dg, dg_size); + dg_info->msg = *dg; +memcpy (&dg_info->msg_payload, dg +1 , dg->payload_size);INIT_WORK (&dg_info->work, dg_delayed_dispatch);schedule_work (&dg_info->work);
@@ -385,7 +386,8 @@ int vmci_datagram_invoke_guest_handler(struct vmci_datagram *dg) dg_info->in_dg_host_queue = false; dg_info->entry = dst_entry; -memcpy (&dg_info->msg, dg,VMCI_DG_SIZE (dg)); + dg_info->msg = *dg; +memcpy (&dg_info->msg_payload, dg +1 , dg->payload_size);INIT_WORK (&dg_info->work, dg_delayed_dispatch);schedule_work (&dg_info->work);
drivers/mmc/core/block.c +6 -4
@@ -851,10 +851,11 @@ static const struct block_device_operations mmc_bdops = {static int mmc_blk_part_switch_pre (struct mmc_card *card,unsigned int part_type) { -const unsigned int mask =EXT_CSD_PART_CONFIG_ACC_RPMB ; +const unsigned int mask =EXT_CSD_PART_CONFIG_ACC_MASK ; +const unsigned int rpmb =EXT_CSD_PART_CONFIG_ACC_RPMB ;int ret =0 ; -if ((part_type & mask) == mask) { +if ((part_type & mask) == rpmb) {if (card->ext_csd.cmdq_en) { ret =mmc_cmdq_disable (card);if (ret)
@@ -869,10 +870,11 @@ static int mmc_blk_part_switch_pre(struct mmc_card *card,static int mmc_blk_part_switch_post (struct mmc_card *card,unsigned int part_type) { -const unsigned int mask =EXT_CSD_PART_CONFIG_ACC_RPMB ; +const unsigned int mask =EXT_CSD_PART_CONFIG_ACC_MASK ; +const unsigned int rpmb =EXT_CSD_PART_CONFIG_ACC_RPMB ;int ret =0 ; -if ((part_type & mask) == mask) { +if ((part_type & mask) == rpmb) {mmc_retune_unpause (card->host);if (card->reenable_cmdq && !card->ext_csd.cmdq_en) ret =mmc_cmdq_enable (card);
drivers/mmc/host/tmio_mmc_core.c +2 -0
@@ -213,6 +213,8 @@ static void tmio_mmc_reset_work(struct work_struct *work)else mrq->cmd->error = -ETIMEDOUT ; +/* No new calls yet, but disallow concurrent tmio_mmc_done_work() */ + host->mrq =ERR_PTR (-EBUSY ); host->cmd =NULL ; host->data =NULL ;
drivers/mtd/ubi/fastmap.c +4 -3
@@ -95,9 +95,10 @@ size_t ubi_calc_fm_size(struct ubi_device *ubi)sizeof (struct ubi_fm_scan_pool ) +sizeof (struct ubi_fm_scan_pool ) + (ubi->peb_count *sizeof (struct ubi_fm_ec )) + - (sizeof (struct ubi_fm_eba ) + - (ubi->peb_count *sizeof (__be32))) + -sizeof (struct ubi_fm_volhdr ) *UBI_MAX_VOLUMES ; + ((sizeof (struct ubi_fm_eba ) + +sizeof (struct ubi_fm_volhdr )) * + (UBI_MAX_VOLUMES +UBI_INT_VOL_COUNT )) + + (ubi->peb_count *sizeof (__be32));return roundup (size, ubi->leb_size); }
drivers/mtd/ubi/vtbl.c +6 -0
@@ -804,6 +804,12 @@ int ubi_read_volume_table(struct ubi_device *ubi, struct ubi_attach_info *ai)* The number of supported volumes is limited by the eraseblock size * and by the UBI_MAX_VOLUMES constant. */ + +if (ubi->leb_size <UBI_VTBL_RECORD_SIZE ) { +ubi_err (ubi,"LEB size too small for a volume record" ); +return -EINVAL ; + } + ubi->vtbl_slots = ubi->leb_size /UBI_VTBL_RECORD_SIZE ;if (ubi->vtbl_slots >UBI_MAX_VOLUMES ) ubi->vtbl_slots =UBI_MAX_VOLUMES ;
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +16 -18
@@ -1317,8 +1317,8 @@ bool i40e_reset_all_vfs(struct i40e_pf *pf, bool flr) {struct i40e_hw *hw = &pf->hw;struct i40e_vf *vf; -int i, v;u32 reg; +int i;/* If we don't have any VFs, then there is nothing to reset */ if (!pf->num_alloc_vfs)
@@ -1329,11 +1329,10 @@ bool i40e_reset_all_vfs(struct i40e_pf *pf, bool flr)return false;/* Begin reset on all VFs at once */ -for (v =0 ; v < pf->num_alloc_vfs; v++) { - vf = &pf->vf[v]; +for (vf = &pf->vf[0 ]; vf < &pf->vf[pf->num_alloc_vfs]; ++vf) {/* If VF is being reset no need to trigger reset again */ if (!test_bit (I40E_VF_STATE_RESETTING , &vf->vf_states)) -i40e_trigger_vf_reset (&pf->vf[v], flr); +i40e_trigger_vf_reset (vf, flr); }/* HW requires some time to make sure it can flush the FIFO for a VF
@@ -1342,14 +1341,13 @@ bool i40e_reset_all_vfs(struct i40e_pf *pf, bool flr)* the VFs using a simple iterator that increments once that VF has * finished resetting. */ -for (i =0 , v =0 ; i <10 && v < pf->num_alloc_vfs; i++) { +for (i =0 , vf = &pf->vf[0 ]; i <10 && vf < &pf->vf[pf->num_alloc_vfs]; ++i) {usleep_range (10000 ,20000 );/* Check each VF in sequence, beginning with the VF to fail * the previous check. */ -while (v < pf->num_alloc_vfs) { - vf = &pf->vf[v]; +while (vf < &pf->vf[pf->num_alloc_vfs]) {if (!test_bit (I40E_VF_STATE_RESETTING , &vf->vf_states)) { reg =rd32 (hw,I40E_VPGEN_VFRSTAT (vf->vf_id));if (!(reg &I40E_VPGEN_VFRSTAT_VFRD_MASK ))
@@ -1359,7 +1357,7 @@ bool i40e_reset_all_vfs(struct i40e_pf *pf, bool flr)/* If the current VF has finished resetting, move on * to the next VF in sequence. */ - v++; + ++vf; } }
@@ -1369,39 +1367,39 @@ bool i40e_reset_all_vfs(struct i40e_pf *pf, bool flr)/* Display a warning if at least one VF didn't manage to reset in * time, but continue on with the operation. */ -if (v < pf->num_alloc_vfs) +if (vf < &pf->vf[pf->num_alloc_vfs])dev_err (&pf->pdev->dev,"VF reset check timeout on VF %d\n" , - pf->vf[v].vf_id); + vf->vf_id);usleep_range (10000 ,20000 );/* Begin disabling all the rings associated with VFs, but do not wait * between each VF. */ -for (v =0 ; v < pf->num_alloc_vfs; v++) { +for (vf = &pf->vf[0 ]; vf < &pf->vf[pf->num_alloc_vfs]; ++vf) {/* On initial reset, we don't have any queues to disable */ -if (pf->vf[v].lan_vsi_idx ==0 ) +if (vf->lan_vsi_idx ==0 )continue ;/* If VF is reset in another thread just continue */ if (test_bit (I40E_VF_STATE_RESETTING , &vf->vf_states))continue ; -i40e_vsi_stop_rings_no_wait (pf->vsi[pf->vf[v].lan_vsi_idx]); +i40e_vsi_stop_rings_no_wait (pf->vsi[vf->lan_vsi_idx]); }/* Now that we've notified HW to disable all of the VF rings, wait * until they finish. */ -for (v =0 ; v < pf->num_alloc_vfs; v++) { +for (vf = &pf->vf[0 ]; vf < &pf->vf[pf->num_alloc_vfs]; ++vf) {/* On initial reset, we don't have any queues to disable */ -if (pf->vf[v].lan_vsi_idx ==0 ) +if (vf->lan_vsi_idx ==0 )continue ;/* If VF is reset in another thread just continue */ if (test_bit (I40E_VF_STATE_RESETTING , &vf->vf_states))continue ; -i40e_vsi_wait_queues_disabled (pf->vsi[pf->vf[v].lan_vsi_idx]); +i40e_vsi_wait_queues_disabled (pf->vsi[vf->lan_vsi_idx]); }/* Hw may need up to 50ms to finish disabling the RX queues. We
@@ -1410,12 +1408,12 @@ bool i40e_reset_all_vfs(struct i40e_pf *pf, bool flr)mdelay (50 );/* Finish the reset on each VF */ -for (v =0 ; v < pf->num_alloc_vfs; v++) { +for (vf = &pf->vf[0 ]; vf < &pf->vf[pf->num_alloc_vfs]; ++vf) {/* If VF is reset in another thread just continue */ if (test_bit (I40E_VF_STATE_RESETTING , &vf->vf_states))continue ; -i40e_cleanup_reset_vf (&pf->vf[v]); +i40e_cleanup_reset_vf (vf); }i40e_flush (hw);
drivers/net/ethernet/realtek/r8169_main.c +9 -0
@@ -7303,6 +7303,15 @@ static int r8169_mdio_register(struct rtl8169_private *tp)struct mii_bus *new_bus;int ret; +/* On some boards with this chip version the BIOS is buggy and misses +* to reset the PHY page selector. This results in the PHY ID read +* accessing registers on a different page, returning a more or +* less random value. Fix this by resetting the page selector first. +*/ +if (tp->mac_version ==RTL_GIGA_MAC_VER_25 || + tp->mac_version ==RTL_GIGA_MAC_VER_26 ) +r8169_mdio_write (tp,0x1f ,0 ); + new_bus =devm_mdiobus_alloc (&pdev->dev);if (!new_bus)return -ENOMEM ;
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c +31 -9
@@ -84,19 +84,41 @@ static void dwmac4_rx_queue_priority(struct mac_device_info *hw, u32 prio, u32 queue) { void __iomem *ioaddr = hw->pcsr; -u32 base_register; -u32 value; +u32 clear_mask =0 ; +u32 ctrl2, ctrl3; +int i; - base_register = (queue <4 ) ?GMAC_RXQ_CTRL2 :GMAC_RXQ_CTRL3 ; -if (queue >=4 ) - queue -=4 ; + ctrl2 =readl (ioaddr +GMAC_RXQ_CTRL2 ); + ctrl3 =readl (ioaddr +GMAC_RXQ_CTRL3 ); - value =readl (ioaddr + base_register); +/* The software must ensure that the same priority +* is not mapped to multiple Rx queues +*/ +for (i =0 ; i <4 ; i++) + clear_mask |= ((prio <<GMAC_RXQCTRL_PSRQX_SHIFT (i)) & +GMAC_RXQCTRL_PSRQX_MASK (i)); - value &= ~GMAC_RXQCTRL_PSRQX_MASK (queue); - value |= (prio <<GMAC_RXQCTRL_PSRQX_SHIFT (queue)) & + ctrl2 &= ~clear_mask; + ctrl3 &= ~clear_mask; + +/* First assign new priorities to a queue, then +* clear them from others queues +*/ +if (queue <4 ) { + ctrl2 |= (prio <<GMAC_RXQCTRL_PSRQX_SHIFT (queue)) &GMAC_RXQCTRL_PSRQX_MASK (queue); -writel (value, ioaddr + base_register); + +writel (ctrl2, ioaddr +GMAC_RXQ_CTRL2 ); +writel (ctrl3, ioaddr +GMAC_RXQ_CTRL3 ); + }else { + queue -=4 ; + + ctrl3 |= (prio <<GMAC_RXQCTRL_PSRQX_SHIFT (queue)) & +GMAC_RXQCTRL_PSRQX_MASK (queue); + +writel (ctrl3, ioaddr +GMAC_RXQ_CTRL3 ); +writel (ctrl2, ioaddr +GMAC_RXQ_CTRL2 ); + } } static void dwmac4_tx_queue_priority(struct mac_device_info *hw,
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c +32 -8
@@ -103,17 +103,41 @@ static void dwxgmac2_rx_queue_prio(struct mac_device_info *hw, u32 prio, u32 queue) {void __iomem *ioaddr = hw->pcsr; -u32 value, reg; - - reg = (queue <4 ) ?XGMAC_RXQ_CTRL2 :XGMAC_RXQ_CTRL3 ; -if (queue >=4 ) +u32 clear_mask =0 ; +u32 ctrl2, ctrl3; +int i; + + ctrl2 =readl (ioaddr +XGMAC_RXQ_CTRL2 ); + ctrl3 =readl (ioaddr +XGMAC_RXQ_CTRL3 ); + +/* The software must ensure that the same priority +* is not mapped to multiple Rx queues +*/ +for (i =0 ; i <4 ; i++) + clear_mask |= ((prio <<XGMAC_PSRQ_SHIFT (i)) & +XGMAC_PSRQ (i)); + + ctrl2 &= ~clear_mask; + ctrl3 &= ~clear_mask; + +/* First assign new priorities to a queue, then +* clear them from others queues +*/ +if (queue <4 ) { + ctrl2 |= (prio <<XGMAC_PSRQ_SHIFT (queue)) & +XGMAC_PSRQ (queue); + +writel (ctrl2, ioaddr +XGMAC_RXQ_CTRL2 ); +writel (ctrl3, ioaddr +XGMAC_RXQ_CTRL3 ); + }else { queue -=4 ; - value =readl (ioaddr + reg); - value &= ~XGMAC_PSRQ (queue); - value |= (prio <<XGMAC_PSRQ_SHIFT (queue)) &XGMAC_PSRQ (queue); + ctrl3 |= (prio <<XGMAC_PSRQ_SHIFT (queue)) & +XGMAC_PSRQ (queue); -writel (value, ioaddr + reg); +writel (ctrl3, ioaddr +XGMAC_RXQ_CTRL3 ); +writel (ctrl2, ioaddr +XGMAC_RXQ_CTRL2 ); + } } static void dwxgmac2_prog_mtl_rx_algorithms(struct mac_device_info *hw,
drivers/net/wireless/ath/ath9k/antenna.c +1 -1
@@ -643,7 +643,7 @@ static void ath_ant_try_scan(struct ath_ant_comb *antcomb, conf->main_lna_conf =ATH_ANT_DIV_COMB_LNA1 ; conf->alt_lna_conf =ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2 ; }else if (antcomb->rssi_sub > - antcomb->rssi_lna1) { + antcomb->rssi_lna2) {/* set to A-B */ conf->main_lna_conf =ATH_ANT_DIV_COMB_LNA1 ; conf->alt_lna_conf =ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2 ;
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +2 -2
@@ -690,8 +690,7 @@ s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg, scan_request = cfg->scan_request; cfg->scan_request =NULL ; -if (timer_pending (&cfg->escan_timeout)) -del_timer_sync (&cfg->escan_timeout); +timer_delete_sync (&cfg->escan_timeout);if (fw_abort) {/* Do a scan abort to stop the driver's scan engine */
@@ -7093,6 +7092,7 @@ void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg)wiphy_unregister (cfg->wiphy);kfree (cfg->ops);wl_deinit_priv (cfg); +cancel_work_sync (&cfg->escan_timeout_work);brcmf_free_wiphy (cfg->wiphy);kfree (cfg); }
drivers/pci/pci-driver.c +14 -9
@@ -439,16 +439,21 @@ static int pci_device_remove(struct device *dev)struct pci_dev *pci_dev =to_pci_dev (dev);struct pci_driver *drv = pci_dev->driver; -if (drv) { -if (drv->remove) { -pm_runtime_get_sync (dev); - drv->remove (pci_dev); -pm_runtime_put_noidle (dev); - } -pcibios_free_irq (pci_dev); - pci_dev->driver =NULL ; -pci_iov_remove (pci_dev); +if (drv->remove) { +pm_runtime_get_sync (dev); +/* +* If the driver provides a .runtime_idle() callback and it has +* started to run already, it may continue to run in parallel +* with the code below, so wait until all of the runtime PM +* activity has completed. +*/ +pm_runtime_barrier (dev); + drv->remove (pci_dev); +pm_runtime_put_noidle (dev); } +pcibios_free_irq (pci_dev); + pci_dev->driver =NULL ; +pci_iov_remove (pci_dev);/* Undo the runtime PM settings in local_pci_probe() */ pm_runtime_put_sync (dev);
drivers/s390/crypto/zcrypt_api.c +2 -0
@@ -158,6 +158,7 @@ static inline struct zcrypt_queue *zcrypt_pick_queue(struct zcrypt_card *zc, {if (!zq || !try_module_get (zq->queue->ap_dev.drv->driver.owner))return NULL ; +zcrypt_card_get (zc);zcrypt_queue_get (zq);get_device (&zq->queue->ap_dev.device);atomic_add (weight, &zc->load);
@@ -177,6 +178,7 @@ static inline void zcrypt_drop_queue(struct zcrypt_card *zc,atomic_sub (weight, &zq->load);put_device (&zq->queue->ap_dev.device);zcrypt_queue_put (zq); +zcrypt_card_put (zc);module_put (mod); }
drivers/scsi/lpfc/lpfc_nportdisc.c +4 -2
@@ -601,8 +601,10 @@ lpfc_rcv_padisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,/* Save the ELS cmd */ elsiocb->drvrTimeout = cmd; -lpfc_sli4_resume_rpi (ndlp, - lpfc_mbx_cmpl_resume_rpi, elsiocb); +if (lpfc_sli4_resume_rpi (ndlp, + lpfc_mbx_cmpl_resume_rpi, + elsiocb)) +kfree (elsiocb); goto out; } }
drivers/scsi/lpfc/lpfc_nvmet.c +1 -1
@@ -1308,7 +1308,7 @@ lpfc_nvmet_setup_io_context(struct lpfc_hba *phba) wqe = &nvmewqe->wqe;/* Initialize WQE */ -memset (wqe,0 ,sizeof (union lpfc_wqe )); +memset (wqe,0 ,sizeof (*wqe)); ctx_buf->iocbq->context1 =NULL ;spin_lock (&phba->sli4_hba.sgl_list_lock);
drivers/scsi/qla2xxx/qla_target.c +10 -0
@@ -1037,6 +1037,16 @@ void qlt_free_session_done(struct work_struct *work) "%s: sess %p logout completed\n", __func__, sess); } +/* check for any straggling io left behind */ +if (!(sess->flags &FCF_FCP2_DEVICE ) && +qla2x00_eh_wait_for_pending_commands (sess->vha, sess->d_id.b24,0 ,WAIT_TARGET )) { +ql_log (ql_log_warn, vha,0x3027 , +"IO not return. Resetting.\n" ); +set_bit (ISP_ABORT_NEEDED , &vha->dpc_flags); +qla2xxx_wake_dpc (vha); +qla2x00_wait_for_chip_reset (vha); + } +if (sess->logo_ack_needed) { sess->logo_ack_needed =0 ; qla24xx_async_notify_ack(vha, sess,
drivers/slimbus/core.c +2 -2
@@ -409,8 +409,8 @@ static int slim_device_alloc_laddr(struct slim_device *sbdev,if (ret <0 ) goto err; }else if (report_present) { - ret =ida_simple_get (&ctrl->laddr_ida, -0 ,SLIM_LA_MANAGER -1 ,GFP_KERNEL ); + ret =ida_alloc_max (&ctrl->laddr_ida, +SLIM_LA_MANAGER -1 ,GFP_KERNEL );if (ret <0 ) goto err;
drivers/soc/fsl/qbman/qman.c +79 -19
163 lines not on this page · raw message
drivers/staging/comedi/drivers/comedi_test.c +26 -4
@@ -87,6 +87,8 @@ struct waveform_private {struct comedi_device *dev;/* parent comedi device */ u64 ao_last_scan_time;/* time of previous AO scan in usec */ unsigned int ao_scan_period;/* AO scan period in usec */ + bool ai_timer_enable:1; /* should AI timer be running? */ + bool ao_timer_enable:1; /* should AO timer be running? */unsigned short ao_loopbacks[N_CHANS ]; };
@@ -236,8 +238,12 @@ static void waveform_ai_timer(struct timer_list *t) time_increment = devpriv->ai_convert_time - now; else time_increment =1 ; -mod_timer (&devpriv->ai_timer, - jiffies +usecs_to_jiffies (time_increment)); +spin_lock (&dev->spinlock); +if (devpriv->ai_timer_enable) { +mod_timer (&devpriv->ai_timer, + jiffies +usecs_to_jiffies (time_increment)); + } +spin_unlock (&dev->spinlock); } overrun:
@@ -393,9 +399,12 @@ static int waveform_ai_cmd(struct comedi_device *dev,* Seem to need an extra jiffy here, otherwise timer expires slightly * early! */ +spin_lock_bh (&dev->spinlock); + devpriv->ai_timer_enable = true; devpriv->ai_timer.expires = jiffies +usecs_to_jiffies (devpriv->ai_convert_period) +1 ;add_timer (&devpriv->ai_timer); +spin_unlock_bh (&dev->spinlock);return 0 ; }
@@ -404,6 +413,9 @@ static int waveform_ai_cancel(struct comedi_device *dev, {struct waveform_private *devpriv = dev->private; +spin_lock_bh (&dev->spinlock); + devpriv->ai_timer_enable = false; +spin_unlock_bh (&dev->spinlock);if (in_softirq ()) {/* Assume we were called from the timer routine itself. */ del_timer (&devpriv->ai_timer);
@@ -495,8 +507,12 @@ static void waveform_ao_timer(struct timer_list *t)unsigned int time_inc = devpriv->ao_last_scan_time + devpriv->ao_scan_period - now; -mod_timer (&devpriv->ao_timer, - jiffies +usecs_to_jiffies (time_inc)); +spin_lock (&dev->spinlock); +if (devpriv->ao_timer_enable) { +mod_timer (&devpriv->ao_timer, + jiffies +usecs_to_jiffies (time_inc)); + } +spin_unlock (&dev->spinlock); } underrun:
@@ -517,9 +533,12 @@ static int waveform_ao_inttrig_start(struct comedi_device *dev, async->inttrig =NULL ; devpriv->ao_last_scan_time =ktime_to_us (ktime_get ()); +spin_lock_bh (&dev->spinlock); + devpriv->ao_timer_enable = true; devpriv->ao_timer.expires = jiffies +usecs_to_jiffies (devpriv->ao_scan_period);add_timer (&devpriv->ao_timer); +spin_unlock_bh (&dev->spinlock);return 1 ; }
@@ -604,6 +623,9 @@ static int waveform_ao_cancel(struct comedi_device *dev,struct waveform_private *devpriv = dev->private; s->async->inttrig =NULL ; +spin_lock_bh (&dev->spinlock); + devpriv->ao_timer_enable = false; +spin_unlock_bh (&dev->spinlock);if (in_softirq ()) {/* Assume we were called from the timer routine itself. */ del_timer (&devpriv->ao_timer);
drivers/staging/speakup/synth.c +3 -1
@@ -208,8 +208,10 @@ void spk_do_flush(void)wake_up_process (speakup_task); } -void synth_write (const char *buf,size_t count) +void synth_write (const char *_buf,size_t count) { +const unsigned char *buf = (const unsigned char *) _buf; +while (count--)synth_buffer_add (*buf++);synth_start ();
drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c +34 -18
133 lines not on this page · raw message
drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.h +4 -2
@@ -47,7 +47,7 @@ typedef void (*vchiq_mmal_buffer_cb)( unsigned long length, u32 mmal_flags, s64 dts, s64 pts);struct vchiq_mmal_port { -bool enabled; +u32 enabled:1 ;u32 handle;u32 type;/* port type, cached to use on port info set */ u32 index;/* port index, cached to use on port info set */
@@ -81,7 +81,8 @@ struct vchiq_mmal_port { };struct vchiq_mmal_component { -bool enabled; +u32 in_use:1 ; +u32 enabled:1 ;u32 handle;/* VideoCore handle for component */ u32 inputs;/* Number of input ports */ u32 outputs;/* Number of output ports */
@@ -90,6 +91,7 @@ struct vchiq_mmal_component {struct vchiq_mmal_port input[MAX_PORT_COUNT ];/* input ports */ struct vchiq_mmal_port output[MAX_PORT_COUNT ];/* output ports */ struct vchiq_mmal_port clock[MAX_PORT_COUNT ];/* clock ports */ +u32 client_component;/* Used to ref back to client struct */ };int vchiq_mmal_init (struct vchiq_mmal_instance **out_instance);
drivers/tty/n_gsm.c +3 -0
@@ -2435,6 +2435,9 @@ static int gsmld_open(struct tty_struct *tty)struct gsm_mux *gsm;int ret; +if (!capable (CAP_NET_ADMIN )) +return -EPERM ; +if (tty->ops->write ==NULL )return -EINVAL ;
drivers/tty/serial/fsl_lpuart.c +5 -2
@@ -1753,9 +1753,12 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios, UARTCTRL);lpuart32_serial_setbrg (sport, baud); -lpuart32_write (&sport->port, modem,UARTMODIR ); -lpuart32_write (&sport->port, ctrl,UARTCTRL ); +/* disable CTS before enabling UARTCTRL_TE to avoid pending idle preamble */ +lpuart32_write (&sport->port, modem & ~UARTMODIR_TXCTSE ,UARTMODIR );/* restore control register */ +lpuart32_write (&sport->port, ctrl,UARTCTRL ); +/* re-enable the CTS if needed */ +lpuart32_write (&sport->port, modem,UARTMODIR );spin_unlock_irqrestore (&sport->port.lock, flags); }
drivers/tty/vt/vt.c +2 -2
@@ -405,7 +405,7 @@ static void vc_uniscr_delete(struct vc_data *vc, unsigned int nr)char32_t *ln = uniscr->lines[vc->vc_y];unsigned int x = vc->vc_x, cols = vc->vc_cols; -memcpy (&ln[x], &ln[x + nr], (cols - x - nr) *sizeof (*ln)); +memmove (&ln[x], &ln[x + nr], (cols - x - nr) *sizeof (*ln));memset32 (&ln[cols - nr],' ' , nr); } }
@@ -855,7 +855,7 @@ static void delete_char(struct vc_data *vc, unsigned int nr)unsigned short *p = (unsigned short *) vc->vc_pos;vc_uniscr_delete (vc, nr); -scr_memcpyw (p, p + nr, (vc->vc_cols - vc->vc_x - nr) *2 ); +scr_memmovew (p, p + nr, (vc->vc_cols - vc->vc_x - nr) *2 );scr_memsetw (p + vc->vc_cols - vc->vc_x - nr, vc->vc_video_erase_char, nr *2 ); vc->vc_need_wrap =0 ;
drivers/usb/class/cdc-wdm.c +5 -1
@@ -471,6 +471,7 @@ static ssize_t wdm_writestatic int service_outstanding_interrupt (struct wdm_device *desc) {int rv =0 ; +int used;/* submit read urb only if the device is waiting for it */ if (!desc->resp_count || !--desc->resp_count)
@@ -485,7 +486,10 @@ static int service_outstanding_interrupt(struct wdm_device *desc) goto out; } -set_bit (WDM_RESPONDING , &desc->flags); + used =test_and_set_bit (WDM_RESPONDING , &desc->flags); +if (used) + goto out; +spin_unlock_irq (&desc->iuspin); rv =usb_submit_urb (desc->response,GFP_KERNEL );spin_lock_irq (&desc->iuspin);
drivers/usb/core/port.c +3 -2
@@ -431,7 +431,7 @@ static int match_location(struct usb_device *peer_hdev, void *p)struct usb_hub *peer_hub =usb_hub_to_struct_hub (peer_hdev);struct usb_device *hdev =to_usb_device (port_dev->dev.parent->parent); -if (!peer_hub) +if (!peer_hub || port_dev->connect_type ==USB_PORT_NOT_USED )return 0 ; hcd =bus_to_hcd (hdev->bus);
@@ -442,7 +442,8 @@ static int match_location(struct usb_device *peer_hdev, void *p)for (port1 =1 ; port1 <= peer_hdev->maxchild; port1++) { peer = peer_hub->ports[port1 -1 ]; -if (peer && peer->location == port_dev->location) { +if (peer && peer->connect_type !=USB_PORT_NOT_USED && + peer->location == port_dev->location) {link_peers_report (port_dev, peer);return 1 ;/* done */ }
drivers/usb/core/sysfs.c +13 -3
@@ -1069,14 +1069,24 @@ static ssize_t interface_authorized_store(struct device *dev, {struct usb_interface *intf =to_usb_interface (dev);bool val; +struct kernfs_node *kn;if (strtobool (buf, &val) !=0 )return -EINVAL ; -if (val) +if (val) {usb_authorize_interface (intf); -else -usb_deauthorize_interface (intf); + }else { +/* +* Prevent deadlock if another process is concurrently +* trying to unregister intf. +*/ + kn =sysfs_break_active_protection (&dev->kobj, &attr->attr); +if (kn) { +usb_deauthorize_interface (intf); +sysfs_unbreak_active_protection (kn); + } + }return count; }
drivers/usb/dwc2/core.h +14 -0
@@ -716,8 +716,14 @@ struct dwc2_dregs_backup {* struct dwc2_hregs_backup - Holds host registers state before * entering partial power down * @hcfg: Backup of HCFG register +* @hflbaddr: Backup of HFLBADDR register * @haintmsk: Backup of HAINTMSK register +* @hcchar: Backup of HCCHAR register +* @hcsplt: Backup of HCSPLT register * @hcintmsk: Backup of HCINTMSK register +* @hctsiz: Backup of HCTSIZ register +* @hdma: Backup of HCDMA register +* @hcdmab: Backup of HCDMAB register * @hprt0: Backup of HPTR0 register * @hfir: Backup of HFIR register * @hptxfsiz: Backup of HPTXFSIZ register
@@ -725,8 +731,14 @@ struct dwc2_dregs_backup {*/ struct dwc2_hregs_backup {u32 hcfg; +u32 hflbaddr;u32 haintmsk; +u32 hcchar[MAX_EPS_CHANNELS ]; +u32 hcsplt[MAX_EPS_CHANNELS ];u32 hcintmsk[MAX_EPS_CHANNELS ]; +u32 hctsiz[MAX_EPS_CHANNELS ]; +u32 hcidma[MAX_EPS_CHANNELS ]; +u32 hcidmab[MAX_EPS_CHANNELS ];u32 hprt0;u32 hfir;u32 hptxfsiz;
@@ -1052,6 +1064,7 @@ struct dwc2_hsotg {bool needs_byte_swap;/* DWC OTG HW Release versions */ +#define DWC2_CORE_REV_4_30a 0x4f54430a#define DWC2_CORE_REV_2_71a 0x4f54271a#define DWC2_CORE_REV_2_72a 0x4f54272a#define DWC2_CORE_REV_2_80a 0x4f54280a
@@ -1282,6 +1295,7 @@ int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg);int dwc2_restore_global_registers (struct dwc2_hsotg *hsotg);void dwc2_enable_acg (struct dwc2_hsotg *hsotg); +void dwc2_wakeup_from_lpm_l1 (struct dwc2_hsotg *hsotg,bool remotewakeup);/* This function should be called on every hardware interrupt. */ irqreturn_t dwc2_handle_common_intr (int irq,void *dev);
drivers/usb/dwc2/core_intr.c +42 -21
96 lines not on this page · raw message
drivers/usb/dwc2/gadget.c +4 -0
@@ -1308,6 +1308,10 @@ static int dwc2_hsotg_ep_queue(struct usb_ep *ep, struct usb_request *req, ep->name, req, req->length, req->buf, req->no_interrupt, req->zero, req->short_not_ok); +if (hs->lx_state ==DWC2_L1 ) { +dwc2_wakeup_from_lpm_l1 (hs, true); + } +/* Prevent new request submission when controller is suspended */ if (hs->lx_state !=DWC2_L0 ) { dev_dbg(hs->dev, "%s: submit request only in active state\n",
drivers/usb/dwc2/hcd.c +39 -8
96 lines not on this page · raw message
drivers/usb/dwc2/hcd_ddma.c +11 -6
@@ -589,7 +589,7 @@ static void dwc2_init_isoc_dma_desc(struct dwc2_hsotg *hsotg, idx = qh->td_last; inc = qh->host_interval; hsotg->frame_number =dwc2_hcd_get_frame_number (hsotg); - cur_idx =dwc2_frame_list_idx (hsotg->frame_number); + cur_idx = idx; next_idx =dwc2_desclist_idx_inc (qh->td_last, inc, qh->dev_speed);/*
@@ -896,6 +896,8 @@ static int dwc2_cmpl_host_isoc_dma_desc(struct dwc2_hsotg *hsotg, {struct dwc2_dma_desc *dma_desc;struct dwc2_hcd_iso_packet_desc *frame_desc; +u16 frame_desc_idx; +struct urb *usb_urb = qtd->urb->priv;u16 remain =0 ;int rc =0 ;
@@ -908,8 +910,11 @@ static int dwc2_cmpl_host_isoc_dma_desc(struct dwc2_hsotg *hsotg, DMA_FROM_DEVICE); dma_desc = &qh->desc_list[idx]; + frame_desc_idx = (idx - qtd->isoc_td_first) & (usb_urb->number_of_packets -1 ); - frame_desc = &qtd->urb->iso_descs[qtd->isoc_frame_index_last]; + frame_desc = &qtd->urb->iso_descs[frame_desc_idx]; +if (idx == qtd->isoc_td_first) + usb_urb->start_frame =dwc2_hcd_get_frame_number (hsotg); dma_desc->buf = (u32)(qtd->urb->dma + frame_desc->offset);if (chan->ep_is_in) remain = (dma_desc->status & HOST_DMA_ISOC_NBYTES_MASK) >>
@@ -930,7 +935,7 @@ static int dwc2_cmpl_host_isoc_dma_desc(struct dwc2_hsotg *hsotg, frame_desc->status =0 ; } -if (++qtd->isoc_frame_index == qtd->urb->packet_count) { +if (++qtd->isoc_frame_index == usb_urb->number_of_packets) {/* * urb->status is not used for isoc transfers here. The * individual frame_desc status are used instead.
@@ -1035,11 +1040,11 @@ static void dwc2_complete_isoc_xfer_ddma(struct dwc2_hsotg *hsotg,return ; idx =dwc2_desclist_idx_inc (idx, qh->host_interval, chan->speed); -if (!rc) +if (rc ==0 )continue ; -if (rc ==DWC2_CMPL_DONE ) -break ;
Lines of this file are not shown. View the raw message.
drivers/vfio/platform/vfio_platform_irq.c +4 -1
Lines of this file are not shown. View the raw message.
fs/nilfs2/btree.c +28 -23
51 lines not on this page · raw message
fs/nilfs2/super.c +27 -30
57 lines not on this page · raw message
fs/nilfs2/the_nilfs.c +40 -45
85 lines not on this page · raw message
init/initramfs.c +44 -33
77 lines not on this page · raw message
kernel/time/timer.c +204 -78
282 lines not on this page · raw message
net/bluetooth/hci_debugfs.c +32 -16
48 lines not on this page · raw message
net/ipv4/ip_gre.c +74 -30
104 lines not on this page · raw message
tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy.c +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/reuseaddr_conflict.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.