Linux 5.4.293
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.293 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 5 arch/arm64/boot/dts/mediatek/mt8173.dtsi | 6 arch/arm64/include/asm/cputype.h | 2 arch/mips/dec/prom/init.c | 2 arch/mips/include/asm/ds1287.h | 2 arch/mips/include/asm/mips-cm.h | 22 ++ arch/mips/kernel/cevt-ds1287.c | 1 arch/mips/kernel/mips-cm.c | 14 + arch/parisc/kernel/pdt.c | 2 arch/powerpc/kernel/Makefile | 1 arch/riscv/include/asm/syscall.h | 7 arch/s390/kvm/trace-s390.h | 4 arch/sparc/mm/tlb.c | 5 arch/x86/events/intel/ds.c | 8 arch/x86/events/intel/uncore_snbep.c | 16 - arch/x86/kernel/cpu/amd.c | 2 arch/x86/kernel/cpu/bugs.c | 8 arch/x86/kernel/e820.c | 17 - crypto/crypto_null.c | 39 ++- drivers/acpi/pptt.c | 4 drivers/ata/ahci.c | 2 drivers/ata/libata-eh.c | 11 - drivers/ata/pata_pxa.c | 6 drivers/ata/sata_sx4.c | 118 ++++-------- drivers/bluetooth/btrtl.c | 2 drivers/bluetooth/hci_ldisc.c | 19 + drivers/bluetooth/hci_uart.h | 1 drivers/char/virtio_console.c | 7 drivers/clk/clk.c | 4 drivers/cpufreq/cpufreq.c | 8 drivers/cpufreq/scpi-cpufreq.c | 13 + drivers/crypto/atmel-sha204a.c | 7 drivers/crypto/ccp/sp-pci.c | 15 - drivers/dma-buf/udmabuf.c | 2 drivers/dma/dmatest.c | 6 drivers/gpio/gpio-zynq.c | 1 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 10 + drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 2 drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.c | 2 drivers/gpu/drm/drm_atomic_helper.c | 2 drivers/gpu/drm/drm_panel_orientation_quirks.c | 10 - drivers/gpu/drm/mediatek/mtk_dpi.c | 9 drivers/gpu/drm/nouveau/nouveau_bo.c | 3 drivers/gpu/drm/nouveau/nouveau_gem.c | 3 drivers/gpu/drm/sti/Makefile | 2 drivers/gpu/drm/tiny/repaper.c | 4 drivers/hid/usbhid/hid-pidff.c | 60 ++++-- drivers/hsi/clients/ssi_protocol.c | 1 drivers/i2c/busses/i2c-cros-ec-tunnel.c | 3 drivers/i3c/master.c | 3 drivers/iio/adc/ad7768-1.c | 5 drivers/infiniband/hw/qib/qib_fs.c | 1 drivers/infiniband/hw/usnic/usnic_ib_main.c | 14 - drivers/infiniband/ulp/srpt/ib_srpt.c | 8 drivers/mcb/mcb-parse.c | 2 drivers/md/dm-integrity.c | 3 drivers/md/raid1.c | 26 +- drivers/media/common/siano/smsdvb-main.c | 2 drivers/media/i2c/adv748x/adv748x.h | 2 drivers/media/i2c/ov7251.c | 4 drivers/media/platform/qcom/venus/hfi_parser.c | 2 drivers/media/platform/qcom/venus/hfi_venus.c | 18 + drivers/media/platform/vim2m.c | 6 drivers/media/rc/streamzap.c | 68 +++--- drivers/media/v4l2-core/v4l2-dv-timings.c | 4 drivers/misc/pci_endpoint_test.c | 36 ++- drivers/mmc/host/cqhci.c | 2 drivers/mtd/inftlcore.c | 9 drivers/mtd/nand/raw/brcmnand/brcmnand.c | 2 drivers/mtd/nand/raw/r852.c | 3 drivers/net/dsa/b53/b53_common.c | 10 + drivers/net/dsa/mv88e6xxx/chip.c | 25 ++ drivers/net/phy/phy_led_triggers.c | 23 +- drivers/net/ppp/ppp_synctty.c | 5 drivers/net/virtio_net.c | 22 +- drivers/net/wireless/atmel/at76c50x-usb.c | 2 drivers/net/wireless/mediatek/mt76/mt76x2/usb.c | 1 drivers/net/wireless/ti/wl1251/tx.c | 4 drivers/ntb/hw/idt/ntb_hw_idt.c | 18 - drivers/ntb/ntb_transport.c | 2 drivers/nvme/target/fc.c | 14 - drivers/of/irq.c | 13 + drivers/pci/probe.c | 5 drivers/perf/arm_pmu.c | 8 drivers/platform/x86/asus-laptop.c | 9 drivers/platform/x86/intel_speed_select_if/isst_if_common.c | 2 drivers/pwm/pwm-fsl-ftm.c | 6 drivers/pwm/pwm-mediatek.c | 20 +- drivers/scsi/pm8001/pm8001_sas.c | 1 drivers/scsi/scsi_transport_iscsi.c | 7 drivers/scsi/st.c | 2 drivers/staging/comedi/drivers/jr3_pci.c | 15 + drivers/thermal/rockchip_thermal.c | 1 drivers/tty/serial/sifive.c | 6 drivers/usb/cdns3/gadget.c | 2 drivers/usb/core/quirks.c | 9 drivers/usb/dwc3/core.c | 11 - drivers/usb/dwc3/gadget.c | 6 drivers/usb/gadget/udc/aspeed-vhub/dev.c | 3 drivers/usb/host/max3421-hcd.c | 7 drivers/usb/host/ohci-pci.c | 23 ++ drivers/usb/serial/ftdi_sio.c | 2 drivers/usb/serial/ftdi_sio_ids.h | 5 drivers/usb/serial/option.c | 3 drivers/usb/serial/usb-serial-simple.c | 7 drivers/usb/storage/unusual_uas.h | 7 drivers/video/fbdev/omap2/omapfb/dss/dispc.c | 6 drivers/xen/xenfs/xensyms.c | 4 fs/Kconfig | 1 fs/btrfs/super.c | 3 fs/ext4/dir.c | 12 - fs/ext4/inode.c | 69 +++++-- fs/ext4/namei.c | 2 fs/ext4/super.c | 61 +++--- fs/ext4/xattr.c | 11 + fs/fuse/virtio_fs.c | 3 fs/hfs/bnode.c | 6 fs/hfsplus/bnode.c | 6 fs/isofs/export.c | 2 fs/jbd2/journal.c | 1 fs/jfs/jfs_dmap.c | 10 - fs/jfs/jfs_imap.c | 2 fs/nfs/Kconfig | 2 fs/nfs/internal.h | 22 -- fs/nfs/nfs4session.h | 4 fs/nfsd/Kconfig | 1 fs/nfsd/nfsfh.h | 12 - include/linux/backing-dev.h | 1 include/linux/nfs.h | 13 + include/linux/pci.h | 4 include/net/sctp/structs.h | 3 include/uapi/linux/kfd_ioctl.h | 2 include/uapi/linux/pcitest.h | 3 include/xen/interface/xen-mca.h | 2 init/Kconfig | 3 kernel/locking/lockdep.c | 3 kernel/trace/ftrace.c | 1 kernel/trace/trace_events.c | 4 lib/sg_split.c | 2 mm/vmscan.c | 2 net/8021q/vlan_dev.c | 31 --- net/bluetooth/hci_event.c | 5 net/core/dev.c | 1 net/core/filter.c | 80 ++++---- net/core/page_pool.c | 8 net/ipv4/inet_connection_sock.c | 19 + net/mac80211/iface.c | 3 net/mac80211/mesh_hwmp.c | 14 + net/openvswitch/actions.c | 4 net/openvswitch/flow_netlink.c | 3 net/sched/sch_hfsc.c | 23 +- net/sctp/socket.c | 22 +- net/sctp/transport.c | 2 net/tipc/link.c | 1 net/tipc/monitor.c | 3 sound/pci/hda/hda_intel.c | 15 + sound/usb/midi.c | 80 +++++++- tools/power/cpupower/bench/parse.c | 4 tools/testing/selftests/ublk/test_stripe_04.sh | 24 ++ 159 files changed, 1106 insertions(+), 545 deletions(-)
Abdun Nihaal (2):
wifi: at76c50x: fix use after free access in at76_disconnect
wifi: wl1251: fix memory leak in wl1251_tx_workAbhinav Kumar (1):
drm: allow encoder mode_set even when connectors change for crtc
Acs, Jakub (1):
ext4: fix OOB read when checking dotdot dir
Adam Xue (1):
USB: serial: option: add Sierra Wireless EM9291
Al Viro (1):
qibfs: fix _another_ leak
Alexander Stein (1):
usb: host: max3421-hcd: Add missing spi_device_id table
Andreas Gruenbacher (1):
writeback: fix false warning in inode_to_wb()
Andrew Wyatt (2):
drm: panel-orientation-quirks: Add support for AYANEO 2S
drm: panel-orientation-quirks: Add new quirk for GPD Win 2
AngeloGioacchino Del Regno (1):
drm/mediatek: mtk_dpi: Explicitly manage TVD clock in power on/off
Arnaud Lecomte (1):
net: ppp: Add bound checking for skb data on ppp_sync_txmung
Arnd Bergmann (1):
ntb: reduce stack usage in idt_scan_mws
Arseniy Krasnov (2):
Bluetooth: hci_uart: fix race during initialization
Bluetooth: hci_uart: Fix another race during initialization
Artem Sadovnikov (1):
ext4: fix off-by-one error in do_split
Bart Van Assche (1):
RDMA/srpt: Support specifying the srpt_service_guid parameter
Ben Dooks (1):
bpf: Add endian modifiers to fix endian warnings
Bhupesh (1):
ext4: ignore xattrs past end
Bjorn Helgaas (1):
PCI: Rename PCI_IRQ_LEGACY to PCI_IRQ_INTX
Boqun Feng (1):
locking/lockdep: Decrease nr_unused_locks if lock unused in zap_class()
Chen-Yu Tsai (1):
arm64: dts: mediatek: mt8173: Fix disp-pwm compatible string
Chengguang Xu (1):
ext4: code cleanup for ext4_statfs_project()
Chenyuan Yang (1):
usb: gadget: aspeed: Add NULL pointer check in ast_vhub_init_dev()
Chris Bainbridge (1):
drm/nouveau: prime: fix ttm_bo_delayed_delete oops
Chuck Lever (1):
NFSD: Constify @fh argument of knfsd_fh_hash()
Cong Wang (2):
net_sched: hfsc: Fix a UAF vulnerability in class handling
net_sched: hfsc: Fix a potential UAF in hfsc_dequeue() too
Craig Hesling (1):
USB: serial: simple: add OWON HDS200 series oscilloscope support
Damien Le Moal (1):
misc: pci_endpoint_test: Use INTX instead of LEGACY
Dan Carpenter (1):
Bluetooth: btrtl: Prevent potential NULL dereference
Daniel Golle (1):
pwm: mediatek: always use bus clock for PWM on MT7622
Daniel Kral (1):
ahci: add PCI ID for Marvell 88SE9215 SATA Controller
Dapeng Mi (1):
perf/x86/intel: Allow to update user space GPRs from PEBS records
David Yat Sin (1):
drm/amdkfd: clamp queue size to minimum
Denis Arefev (2):
asus-laptop: Fix an uninitialized variable
drm/amd/pm: Prevent division by zero
Douglas Anderson (1):
arm64: cputype: Add MIDR_CORTEX_A76AE
Edward Adam Davis (3):
jfs: Prevent copying of nlink with value 0 from disk inode
jfs: add sanity check for agwidth in dbMount
isofs: Prevent the use of too small fid
Eric Biggers (2):
ext4: reject casefold inode flag without casefold feature
nfs: add missing selections of CONFIG_CRC32
Fabien Parent (1):
pwm: mediatek: Always use bus clock
Fedor Pchelkin (1):
ntb: use 64-bit arithmetic for the MSI doorbell mask
Felix Huettner (1):
net: openvswitch: fix race on port output
Frode Isaksen (1):
usb: dwc3: gadget: check that event count does not exceed event buffer length
Gabriele Paoloni (1):
tracing: fix return value in __ftrace_event_enable_disable for TRACE_REG_UNREGISTER
Gavrilov Ilia (1):
wifi: mac80211: fix integer overflow in hwmp_route_info_get()
Greg Kroah-Hartman (1):
Linux 5.4.293
Gregory CLEMENT (1):
MIPS: cm: Detect CM quirks from device tree
Halil Pasic (1):
virtio_console: fix missing byte order handling for cols and rows
Hannes Reinecke (1):
ata: sata_sx4: Drop pointless VPRINTK() calls and convert the remaining ones
Haoxiang Li (1):
mcb: fix a double free bug in chameleon_parse_gdd()
Heiko Stuebner (1):
clk: check for disabled clock-provider in of_clk_get_hw_from_clkspec()
Henry Martin (2):
ata: pata_pxa: Fix potential NULL pointer dereference in pxa_ata_probe()
cpufreq: scpi: Fix null-ptr-deref in scpi_cpufreq_get_rate()
Herbert Xu (1):
crypto: null - Use spin lock instead of mutex
Huacai Chen (1):
USB: OHCI: Add quirk for LS7A OHCI controller (rev 0x02)
Ian Abbott (1):
comedi: jr3_pci: Fix synchronous deletion of timer
Icenowy Zheng (1):
wifi: mt76: mt76x2u: add TP-Link TL-WDN6200 ID to device table
Igor Pylypiv (1):
scsi: pm80xx: Set phy_attached to zero when device is gone
Ilya Maximets (2):
net: openvswitch: fix nested key length validation in the set() action
openvswitch: fix lockup on tx to unregistering netdev with carrier
Jan Beulich (1):
xenfs/xensyms: respect hypervisor's "next" indication
Jan Kara (2):
jbd2: remove wrong sb->s_sequence check
ext4: simplify checking quota limits in ext4_statfs()
Jann Horn (1):
ext4: don't treat fhandle lookup of ea_inode as FS corruption
Jason Xing (1):
page_pool: avoid infinite loop to schedule delayed worker
Jean-Marc Eurin (1):
ACPI PPTT: Fix coding mistakes in a couple of sizeof() calls
Jeff Layton (1):
nfs: move nfs_fhandle_hash to common include file
Johannes Berg (1):
Revert "wifi: mac80211: Update skb's control block key in ieee80211_tx_dequeue()"
Johannes Kimmel (1):
btrfs: correctly escape subvol in btrfs_show_options()
Jonas Gorski (1):
net: b53: enable BPDU reception for management port
Jonathan Cameron (1):
iio: adc: ad7768-1: Move setting of val a bit later to avoid unnecessary return value check
Josh Poimboeuf (2):
pwm: mediatek: Prevent divide-by-zero in pwm_mediatek_config() x86/bugs: Don't fill RSB on VMEXIT with eIBRS+retpoline
Kai Mäkisara (1):
scsi: st: Fix array overflow in st_setup()
Kaixin Wang (1):
HSI: ssi_protocol: Fix use after free vulnerability in ssi_protocol Driver Due to Race Condition
Kamal Dasu (1):
mtd: rawnand: brcmnand: fix PM resume warning
Kan Liang (1):
perf/x86/intel/uncore: Fix the scale of IIO free running counters on SNR
Karina Yankevich (1):
media: v4l2-dv-timings: prevent possible overflow in v4l2_detect_gtf()
Kees Cook (1):
xen/mcelog: Add __nonstring annotations for unterminated strings
Krzysztof Kozlowski (1):
gpio: zynq: Fix wakeup source leaks on device unbind
Kunihiko Hayashi (3):
misc: pci_endpoint_test: Avoid issue of interrupts remaining after request_irq error
misc: pci_endpoint_test: Fix 'irq_type' to convey the correct type
misc: pci_endpoint_test: Fix displaying 'irq_type' after 'request_irq' error
Kuniyuki Iwashima (1):
tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink().
Leonid Arapov (1):
fbdev: omapfb: Add 'plane' value check
Luiz Augusto von Dentz (1):
Bluetooth: hci_event: Fix sending MGMT_EV_DEVICE_FOUND for invalid address
Ma Ke (1):
PCI: Fix reference leak in pci_alloc_child_bus()
Manjunatha Venkatesh (1):
i3c: Add NULL pointer check in i3c_master_queue_ibi()
Marek Behún (3):
net: dsa: mv88e6xxx: workaround RGMII transmit delay erratum for 6320 family
net: dsa: mv88e6xxx: fix VTU methods for 6320 family
crypto: atmel-sha204a - Set hwrng quality to lowest possible
Mark Rutland (1):
perf: arm_pmu: Don't disable counter in armpmu_add()
Martin Kepplinger (1):
usb: dwc3: support continuous runtime PM with dual role
Mathieu Desnoyers (1):
mm: add missing release barrier on PGDAT_RECLAIM_LOCKED unlock
Matthew Majewski (1):
media: vim2m: print device name after registering device
Max Grobecker (1):
x86/cpu: Don't clear X86_FEATURE_LAHF_LM flag in init_amd_k8() on AMD when running in a virtual machine
Maxim Mikityanskiy (1):
ALSA: hda: intel: Fix Optimus when GPU has no sound
Meir Elisha (1):
md/raid1: Add check for missing source disk in process_checks()
Miao Li (2):
usb: quirks: add DELAY_INIT quirk for Silicon Motion Flash Drive
usb: quirks: Add delay init quirk for SanDisk 3.2Gen1 Flash Drive
Miaoqian Lin (1):
scsi: iscsi: Fix missing scsi_host_put() in error path
Michael Ehrenreich (1):
USB: serial: ftdi_sio: add support for Abacus Electrics Optical Probe
Mikulas Patocka (1):
dm-integrity: set ti->error on memory allocation failure
Ming Lei (1):
selftests: ublk: fix test_stripe_04
Murad Masimov (1):
media: streamzap: prevent processing IR data on URB failure
Myrrh Periwinkle (1):
x86/e820: Fix handling of subpage regions when calculating nosave ranges in e820__register_nosave_regions()
Nathan Chancellor (3):
riscv: Avoid fortify warning in syscall_get_arguments()
kbuild: Add '-fno-builtin-wcslen'
powerpc/prom_init: Use -ffreestanding to avoid a reference to bcmp
Nikita Zhandarovich (1):
drm/repaper: fix integer overflows in repeat functions
Niklas Cassel (1):
ata: libata-eh: Do not use ATAPI DMA for a device limited to PIO mode
Niklas Söderlund (1):
media: i2c: adv748x: Fix test pattern selection mask
Ojaswin Mujoo (1):
ext4: protect ext4_release_dquot against freezing
Oleg Nesterov (1):
sched/isolation: Make CONFIG_CPU_ISOLATION depend on CONFIG_SMP
Oliver Neukum (2):
USB: storage: quirk for ADATA Portable HDD CH94
USB: VLI disk crashes if LPM is used
Philip Yang (1):
drm/amdkfd: Fix pqm_destroy_queue race with GPU reset
Qingfang Deng (1):
net: phy: leds: fix memory leak
Rafael J. Wysocki (1):
cpufreq: Reference count policy in cpufreq_update_limits()
Ralph Siemsen (1):
usb: cdns3: Fix deadlock when using NCM gadget
Rand Deeb (2):
fs/jfs: cast inactags to s64 to prevent potential overflow fs/jfs: Prevent integer overflow in AG size calculation
Remi Pommarel (2):
wifi: mac80211: Update skb's control block key in ieee80211_tx_dequeue()
wifi: mac80211: Purge vif txq in ieee80211_do_stop()
Ricard Wanderlof (1):
ALSA: usb-audio: Fix CME quirk for UF series keyboards
Ricardo Cañuelo Navarro (1):
sctp: detect and prevent references to a freed transport in sendmsg
Rolf Eike Beer (1):
drm/sti: remove duplicate object names
Ryan Roberts (1):
sparc/mm: disable preemption in lazy mmu mode
Ryo Takakura (1):
serial: sifive: lock port in startup()/shutdown() callbacks
Sakari Ailus (2):
media: i2c: ov7251: Set enable GPIO low in probe
media: i2c: ov7251: Introduce 1 ms delay between regulators and en GPIO
Sergiu Cuciurean (1):
iio: adc: ad7768-1: Fix conversion result sign
Seunghwan Baek (1):
mmc: cqhci: Fix checking of CQHCI_HALT state
Srinivas Pandruvada (1):
platform/x86: ISST: Correct command storage data length
Stanislav Fomichev (1):
net: vlan: don't propagate flags on open
T Pratham (1):
lib: scatterlist: fix sg_split_phys to preserve original scatterlist offsets
Thadeu Lima de Souza Cascardo (1):
i2c: cros-ec-tunnel: defer probe if parent EC is not present
Theodore Ts'o (2):
ext4: don't over-report free space or inodes in statvfs
ext4: optimize __ext4_check_dir_entry()
Thomas Bogendoerfer (1):
MIPS: cm: Fix warning if MIPS_CM is disabled
Thomas Weißschuh (1):
KVM: s390: Don't use %pK through tracepoints
Thorsten Leemhuis (1):
module: sign with sha512 instead of sha1 by default
Tom Lendacky (1):
crypto: ccp - Fix check for the primary ASP device
Tomasz Pakuła (3):
HID: pidff: Convert infinite length from Linux API to PID standard
HID: pidff: Do not send effect envelope if it's empty
HID: pidff: Fix null pointer dereference in pidff_find_fields
Trevor Woerner (1):
thermal/drivers/rockchip: Add missing rk3328 mapping entry
Tung Nguyen (2):
tipc: fix memory leak in tipc_link_xmit
tipc: fix NULL pointer dereference in tipc_mon_reinit_self()
Uwe Kleine-König (1):
pwm: fsl-ftm: Handle clk_get_rate() returning 0
Vasiliy Kovalev (1):
hfs/hfsplus: fix slab-out-of-bounds in hfs_bnode_read_key
Vikash Garodia (3):
media: venus: hfi: add a check to handle OOB in sfr region
media: venus: hfi: add check to handle incorrect queue size
media: venus: hfi_parser: add check to avoid out of bound access
Vinicius Costa Gomes (1):
dmaengine: dmatest: Fix dmatest waiting less when interrupted
WangYuli (4):
nvmet-fc: Remove unused functions
MIPS: dec: Declare which_prom() as static
MIPS: cevt-ds1287: Add missing ds1287.h include
MIPS: ds1287: Match ds1287_set_base_clock() function types
Wentao Liang (3):
ata: sata_sx4: Add error handling in pdc20621_i2c_read()
mtd: inftlcore: Add error check for inftl_read_oob()
mtd: rawnand: Add status chack in r852_ready()
Willem de Bruijn (1):
bpf: support SKF_NET_OFF and SKF_LL_OFF on skb frags
Xiangsheng Hou (1):
virtiofs: add filesystem context source name check
Xiaogang Chen (1):
udmabuf: fix a buf size overflow issue during udmabuf creation
Xie Yongji (1):
virtio-net: Add validation for used length
Yu-Chun Lin (1):
parisc: PDT: Fix missing prototype warning
Yuan Can (1):
media: siano: Fix error handling in smsdvb_module_init()
Yue Haibing (1):
RDMA/usnic: Fix passing zero to PTR_ERR in usnic_ib_pci_probe()
Zhongqiu Han (1):
pm: cpupower: bench: Prevent NULL dereference on malloc failure
Zijun Hu (3):
of/irq: Fix device node refcount leakages in of_irq_count() of/irq: Fix device node refcount leakage in API irq_of_parse_and_map() of/irq: Fix device node refcount leakages in of_irq_init()
zhoumin (1):
ftrace: Add cond_resched() to ftrace_graph_set_hash()
Greg Kroah-Hartman
maintainerMakefile +4 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 292 +SUBLEVEL = 293 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -930,6 +930,9 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) # Require designated initializers for all marked structures KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init) +# Ensure compilers do not transform certain loops into calls to wcslen() +KBUILD_CFLAGS += -fno-builtin-wcslen + # change __FILE__ to the relative path from the srctree KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
arch/arm64/boot/dts/mediatek/mt8173.dtsi +2 -4
@@ -1161,8 +1161,7 @@ }; pwm0: pwm@1401e000 { - compatible = "mediatek,mt8173-disp-pwm", - "mediatek,mt6595-disp-pwm"; + compatible = "mediatek,mt8173-disp-pwm"; reg = <0 0x1401e000 0 0x1000>; #pwm-cells = <2>; clocks = <&mmsys CLK_MM_DISP_PWM026M>,
@@ -1172,8 +1171,7 @@ }; pwm1: pwm@1401f000 { - compatible = "mediatek,mt8173-disp-pwm", - "mediatek,mt6595-disp-pwm"; + compatible = "mediatek,mt8173-disp-pwm"; reg = <0 0x1401f000 0 0x1000>; #pwm-cells = <2>; clocks = <&mmsys CLK_MM_DISP_PWM126M>,
arch/arm64/include/asm/cputype.h +2 -0
@@ -73,6 +73,7 @@#define ARM_CPU_PART_CORTEX_A76 0xD0B#define ARM_CPU_PART_NEOVERSE_N1 0xD0C#define ARM_CPU_PART_CORTEX_A77 0xD0D +#define ARM_CPU_PART_CORTEX_A76AE 0xD0E#define ARM_CPU_PART_NEOVERSE_V1 0xD40#define ARM_CPU_PART_CORTEX_A78 0xD41#define ARM_CPU_PART_CORTEX_X1 0xD44
@@ -124,6 +125,7 @@#define MIDR_CORTEX_A76 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A76)#define MIDR_NEOVERSE_N1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N1)#define MIDR_CORTEX_A77 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A77) +#define MIDR_CORTEX_A76AE MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A76AE)#define MIDR_NEOVERSE_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V1)#define MIDR_CORTEX_A78 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78)#define MIDR_CORTEX_X1 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X1)
arch/mips/dec/prom/init.c +1 -1
@@ -42,7 +42,7 @@ int (*__pmax_close)(int);* Detect which PROM the DECSTATION has, and set the callback vectors * appropriately. */ -void __init which_prom (s32 magic,s32 *prom_vec) +static void __init which_prom (s32 magic,s32 *prom_vec) {/* * No sign of the REX PROM's magic number means we assume a non-REX
arch/mips/include/asm/ds1287.h +1 -1
@@ -8,7 +8,7 @@#define __ASM_DS1287_Hextern int ds1287_timer_state (void ); -extern void ds1287_set_base_clock (unsigned int clock); +extern int ds1287_set_base_clock (unsigned int hz);extern int ds1287_clockevent_init (int irq);#endif
arch/mips/include/asm/mips-cm.h +22 -0
@@ -47,6 +47,16 @@ extern phys_addr_t __mips_cm_phys_base(void);*/ extern int mips_cm_is64; +/* +* mips_cm_is_l2_hci_broken - determine if HCI is broken +* +* Some CM reports show that Hardware Cache Initialization is +* complete, but in reality it's not the case. They also incorrectly +* indicate that Hardware Cache Initialization is supported. This +* flags allows warning about this broken feature. +*/ +extern bool mips_cm_is_l2_hci_broken; +/** * mips_cm_error_report - Report CM cache errors */
@@ -85,6 +95,18 @@ static inline bool mips_cm_present(void)#endif } +/** +* mips_cm_update_property - update property from the device tree +* +* Retrieve the properties from the device tree if a CM node exist and +* update the internal variable based on this. +*/ +#ifdef CONFIG_MIPS_CM +extern void mips_cm_update_property (void ); +#else +static inline void mips_cm_update_property (void ) {} +#endif +/** * mips_cm_has_l2sync - determine whether an L2-only sync region is present *
arch/mips/kernel/cevt-ds1287.c +1 -0
@@ -10,6 +10,7 @@#include <linux/mc146818rtc.h> #include <linux/irq.h> +#include <asm/ds1287.h> #include <asm/time.h> int ds1287_timer_state (void )
arch/mips/kernel/mips-cm.c +14 -0
@@ -5,6 +5,7 @@*/ #include <linux/errno.h> +#include <linux/of.h> #include <linux/percpu.h> #include <linux/spinlock.h>
@@ -14,6 +15,7 @@void __iomem *mips_gcr_base;void __iomem *mips_cm_l2sync_base;int mips_cm_is64; +bool mips_cm_is_l2_hci_broken;static char *cm2_tr[8 ] = {"mem" ,"gcr" ,"gic" ,"mmio" ,
@@ -196,6 +198,18 @@ static void mips_cm_probe_l2sync(void) mips_cm_l2sync_base =ioremap_nocache (addr,MIPS_CM_L2SYNC_SIZE ); } +void mips_cm_update_property (void ) +{ +struct device_node *cm_node; + + cm_node =of_find_compatible_node (of_root,NULL ,"mobileye,eyeq6-cm" ); +if (!cm_node) +return ; +pr_info ("HCI (Hardware Cache Init for the L2 cache) in GCR_L2_RAM_CONFIG from the CM3 is broken" ); + mips_cm_is_l2_hci_broken = true; +of_node_put (cm_node); +} +int mips_cm_probe (void ) {phys_addr_t addr;
arch/parisc/kernel/pdt.c +2 -0
@@ -60,6 +60,7 @@ static unsigned long pdt_entry[MAX_PDT_ENTRIES] __page_aligned_bss;#define PDT_ADDR_PERM_ERR (pdt_type != PDT_PDC ? 2UL : 0UL)#define PDT_ADDR_SINGLE_ERR 1UL +#ifdef CONFIG_PROC_FS /* report PDT entries via /proc/meminfo */ void arch_report_meminfo (struct seq_file *m) {
@@ -71,6 +72,7 @@ void arch_report_meminfo(struct seq_file *m)seq_printf (m,"PDT_cur_entries: %7lu\n" , pdt_status.pdt_entries); } +#endif static int get_info_pat_new (void ) {
arch/powerpc/kernel/Makefile +1 -0
@@ -21,6 +21,7 @@ CFLAGS_prom.o += $(DISABLE_LATENT_ENTROPY_PLUGIN) CFLAGS_prom_init.o += $(call cc-option, -fno-stack-protector) CFLAGS_prom_init.o += -DDISABLE_BRANCH_PROFILING +CFLAGS_prom_init.o += -ffreestanding ifdef CONFIG_FUNCTION_TRACER # Do not trace early boot code
arch/riscv/include/asm/syscall.h +5 -2
@@ -67,8 +67,11 @@ static inline void syscall_get_arguments(struct task_struct *task, unsigned long *args) { args[0 ] = regs->orig_a0; - args++; -memcpy (args, ®s->a1,5 *sizeof (args[0 ])); + args[1 ] = regs->a1; + args[2 ] = regs->a2; + args[3 ] = regs->a3; + args[4 ] = regs->a4; + args[5 ] = regs->a5; } static inline void syscall_set_arguments(struct task_struct *task,
arch/s390/kvm/trace-s390.h +2 -2
@@ -56,7 +56,7 @@ TRACE_EVENT(kvm_s390_create_vcpu, __entry->sie_block = sie_block; ), -TP_printk ("create cpu %d at 0x%pK, sie block at 0x%pK" , +TP_printk ("create cpu %d at 0x%p, sie block at 0x%p" , __entry->id, __entry->vcpu, __entry->sie_block) );
@@ -255,7 +255,7 @@ TRACE_EVENT(kvm_s390_enable_css, __entry->kvm = kvm; ), -TP_printk ("enabling channel I/O support (kvm @ %pK)\n" , +TP_printk ("enabling channel I/O support (kvm @ %p)\n" , __entry->kvm) );
arch/sparc/mm/tlb.c +4 -1
@@ -53,8 +53,10 @@ void flush_tlb_pending(void)void arch_enter_lazy_mmu_mode (void ) { -struct tlb_batch *tb =this_cpu_ptr (&tlb_batch); +struct tlb_batch *tb; +preempt_disable (); + tb =this_cpu_ptr (&tlb_batch); tb->active =1 ; }
@@ -65,6 +67,7 @@ void arch_leave_lazy_mmu_mode(void)if (tb->tlb_nr)flush_tlb_pending (); tb->active =0 ; +preempt_enable (); } static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr,
arch/x86/events/intel/ds.c +5 -3
@@ -985,8 +985,10 @@ static u64 pebs_update_adaptive_cfg(struct perf_event *event)* + precise_ip < 2 for the non event IP * + For RTM TSX weight we need GPRs for the abort code. */ - gprs = (sample_type &PERF_SAMPLE_REGS_INTR ) && - (attr->sample_regs_intr &PEBS_GP_REGS ); + gprs = ((sample_type &PERF_SAMPLE_REGS_INTR ) && + (attr->sample_regs_intr &PEBS_GP_REGS )) || + ((sample_type &PERF_SAMPLE_REGS_USER ) && + (attr->sample_regs_user &PEBS_GP_REGS )); tsx_weight = (sample_type & PERF_SAMPLE_WEIGHT) && ((attr->config & INTEL_ARCH_EVENT_MASK) ==
@@ -1569,7 +1571,7 @@ static void setup_pebs_adaptive_sample_data(struct perf_event *event, regs->flags &= ~PERF_EFLAGS_EXACT ; } -if (sample_type &PERF_SAMPLE_REGS_INTR ) +if (sample_type & (PERF_SAMPLE_REGS_INTR |PERF_SAMPLE_REGS_USER ))adaptive_pebs_save_regs (regs, gprs); }
arch/x86/events/intel/uncore_snbep.c +8 -8
@@ -4220,28 +4220,28 @@ static struct uncore_event_desc snr_uncore_iio_freerunning_events[] = {INTEL_UNCORE_EVENT_DESC (ioclk,"event=0xff,umask=0x10" ),/* Free-Running IIO BANDWIDTH IN Counters */ INTEL_UNCORE_EVENT_DESC (bw_in_port0,"event=0xff,umask=0x20" ), -INTEL_UNCORE_EVENT_DESC (bw_in_port0.scale,"3.814697266e-6" ), +INTEL_UNCORE_EVENT_DESC (bw_in_port0.scale,"3.0517578125e-5" ),INTEL_UNCORE_EVENT_DESC (bw_in_port0.unit,"MiB" ),INTEL_UNCORE_EVENT_DESC (bw_in_port1,"event=0xff,umask=0x21" ), -INTEL_UNCORE_EVENT_DESC (bw_in_port1.scale,"3.814697266e-6" ), +INTEL_UNCORE_EVENT_DESC (bw_in_port1.scale,"3.0517578125e-5" ),INTEL_UNCORE_EVENT_DESC (bw_in_port1.unit,"MiB" ),INTEL_UNCORE_EVENT_DESC (bw_in_port2,"event=0xff,umask=0x22" ), -INTEL_UNCORE_EVENT_DESC (bw_in_port2.scale,"3.814697266e-6" ), +INTEL_UNCORE_EVENT_DESC (bw_in_port2.scale,"3.0517578125e-5" ),INTEL_UNCORE_EVENT_DESC (bw_in_port2.unit,"MiB" ),INTEL_UNCORE_EVENT_DESC (bw_in_port3,"event=0xff,umask=0x23" ), -INTEL_UNCORE_EVENT_DESC (bw_in_port3.scale,"3.814697266e-6" ), +INTEL_UNCORE_EVENT_DESC (bw_in_port3.scale,"3.0517578125e-5" ),INTEL_UNCORE_EVENT_DESC (bw_in_port3.unit,"MiB" ),INTEL_UNCORE_EVENT_DESC (bw_in_port4,"event=0xff,umask=0x24" ), -INTEL_UNCORE_EVENT_DESC (bw_in_port4.scale,"3.814697266e-6" ), +INTEL_UNCORE_EVENT_DESC (bw_in_port4.scale,"3.0517578125e-5" ),INTEL_UNCORE_EVENT_DESC (bw_in_port4.unit,"MiB" ),INTEL_UNCORE_EVENT_DESC (bw_in_port5,"event=0xff,umask=0x25" ), -INTEL_UNCORE_EVENT_DESC (bw_in_port5.scale,"3.814697266e-6" ), +INTEL_UNCORE_EVENT_DESC (bw_in_port5.scale,"3.0517578125e-5" ),INTEL_UNCORE_EVENT_DESC (bw_in_port5.unit,"MiB" ),INTEL_UNCORE_EVENT_DESC (bw_in_port6,"event=0xff,umask=0x26" ), -INTEL_UNCORE_EVENT_DESC (bw_in_port6.scale,"3.814697266e-6" ), +INTEL_UNCORE_EVENT_DESC (bw_in_port6.scale,"3.0517578125e-5" ),INTEL_UNCORE_EVENT_DESC (bw_in_port6.unit,"MiB" ),INTEL_UNCORE_EVENT_DESC (bw_in_port7,"event=0xff,umask=0x27" ), -INTEL_UNCORE_EVENT_DESC (bw_in_port7.scale,"3.814697266e-6" ), +INTEL_UNCORE_EVENT_DESC (bw_in_port7.scale,"3.0517578125e-5" ), INTEL_UNCORE_EVENT_DESC(bw_in_port7.unit, "MiB"), { /* end: all zeroes */ }, };
arch/x86/kernel/cpu/amd.c +1 -1
@@ -808,7 +808,7 @@ static void init_amd_k8(struct cpuinfo_x86 *c)* (model = 0x14) and later actually support it. * (AMD Erratum #110, docId: 25759). */ -if (c->x86_model <0x14 &&cpu_has (c,X86_FEATURE_LAHF_LM )) { +if (c->x86_model <0x14 &&cpu_has (c,X86_FEATURE_LAHF_LM ) && !cpu_has (c,X86_FEATURE_HYPERVISOR )) {clear_cpu_cap (c,X86_FEATURE_LAHF_LM );if (!rdmsrl_amd_safe (0xc001100d , &value)) { value &= ~BIT_64 (32 );
arch/x86/kernel/cpu/bugs.c +4 -4
@@ -1348,20 +1348,20 @@ static void __init spectre_v2_determine_rsb_fill_type_at_vmexit(enum spectre_v2_case SPECTRE_V2_NONE :return ; -case SPECTRE_V2_EIBRS_LFENCE :case SPECTRE_V2_EIBRS : +case SPECTRE_V2_EIBRS_LFENCE : +case SPECTRE_V2_EIBRS_RETPOLINE :if (boot_cpu_has_bug (X86_BUG_EIBRS_PBRSB )) { -setup_force_cpu_cap (X86_FEATURE_RSB_VMEXIT_LITE );pr_info ("Spectre v2 / PBRSB-eIBRS: Retire a single CALL on VMEXIT\n" ); +setup_force_cpu_cap (X86_FEATURE_RSB_VMEXIT_LITE ); }return ; -case SPECTRE_V2_EIBRS_RETPOLINE :case SPECTRE_V2_RETPOLINE :case SPECTRE_V2_LFENCE :case SPECTRE_V2_IBRS : -setup_force_cpu_cap (X86_FEATURE_RSB_VMEXIT );pr_info ("Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\n" ); +setup_force_cpu_cap (X86_FEATURE_RSB_VMEXIT );return ; }
arch/x86/kernel/e820.c +8 -9
@@ -738,22 +738,21 @@ void __init e820__memory_setup_extended(u64 phys_addr, u32 data_len)void __init e820__register_nosave_regions (unsigned long limit_pfn) {int i; -unsigned long pfn =0 ; +u64 last_addr =0 ;for (i =0 ; i < e820_table->nr_entries; i++) {struct e820_entry *entry = &e820_table->entries[i]; -if (pfn <PFN_UP (entry->addr)) -register_nosave_region (pfn,PFN_UP (entry->addr)); - - pfn =PFN_DOWN (entry->addr + entry->size); -if (entry->type !=E820_TYPE_RAM && entry->type !=E820_TYPE_RESERVED_KERN ) -register_nosave_region (PFN_UP (entry->addr), pfn); +continue ; -if (pfn >= limit_pfn) -break ; +if (last_addr < entry->addr) +register_nosave_region (PFN_DOWN (last_addr),PFN_UP (entry->addr)); + + last_addr = entry->addr + entry->size; } + +register_nosave_region (PFN_DOWN (last_addr), limit_pfn); }#ifdef CONFIG_ACPI
crypto/crypto_null.c +26 -13
@@ -17,10 +17,10 @@#include <crypto/internal/skcipher.h> #include <linux/init.h> #include <linux/module.h> -#include <linux/mm.h> +#include <linux/spinlock.h> #include <linux/string.h> -static DEFINE_MUTEX (crypto_default_null_skcipher_lock); +static DEFINE_SPINLOCK (crypto_default_null_skcipher_lock);static struct crypto_sync_skcipher *crypto_default_null_skcipher;static int crypto_default_null_skcipher_refcnt;
@@ -152,23 +152,32 @@ MODULE_ALIAS_CRYPTO("cipher_null");struct crypto_sync_skcipher *crypto_get_default_null_skcipher (void ) { +struct crypto_sync_skcipher *ntfm =NULL ;struct crypto_sync_skcipher *tfm; -mutex_lock (&crypto_default_null_skcipher_lock); +spin_lock_bh (&crypto_default_null_skcipher_lock); tfm = crypto_default_null_skcipher;if (!tfm) { - tfm =crypto_alloc_sync_skcipher ("ecb(cipher_null)" ,0 ,0 ); -if (IS_ERR (tfm)) - goto unlock; - - crypto_default_null_skcipher = tfm; +spin_unlock_bh (&crypto_default_null_skcipher_lock); + + ntfm =crypto_alloc_sync_skcipher ("ecb(cipher_null)" ,0 ,0 ); +if (IS_ERR (ntfm)) +return ntfm; + +spin_lock_bh (&crypto_default_null_skcipher_lock); + tfm = crypto_default_null_skcipher; +if (!tfm) { + tfm = ntfm; + ntfm =NULL ; + crypto_default_null_skcipher = tfm; + } } crypto_default_null_skcipher_refcnt++; +spin_unlock_bh (&crypto_default_null_skcipher_lock); -unlock: -mutex_unlock (&crypto_default_null_skcipher_lock); +crypto_free_sync_skcipher (ntfm);return tfm; }
@@ -176,12 +185,16 @@ EXPORT_SYMBOL_GPL(crypto_get_default_null_skcipher);void crypto_put_default_null_skcipher (void ) { -mutex_lock (&crypto_default_null_skcipher_lock); +struct crypto_sync_skcipher *tfm =NULL ; + +spin_lock_bh (&crypto_default_null_skcipher_lock);if (!--crypto_default_null_skcipher_refcnt) { -crypto_free_sync_skcipher (crypto_default_null_skcipher); + tfm = crypto_default_null_skcipher; crypto_default_null_skcipher =NULL ; } -mutex_unlock (&crypto_default_null_skcipher_lock); +spin_unlock_bh (&crypto_default_null_skcipher_lock); + +crypto_free_sync_skcipher (tfm); }EXPORT_SYMBOL_GPL (crypto_put_default_null_skcipher);
drivers/acpi/pptt.c +2 -2
@@ -216,7 +216,7 @@ static int acpi_pptt_leaf_node(struct acpi_table_header *table_hdr, node_entry =ACPI_PTR_DIFF (node, table_hdr); entry = ACPI_ADD_PTR(struct acpi_subtable_header, table_hdr,sizeof (struct acpi_table_pptt )); - proc_sz =sizeof (struct acpi_pptt_processor *); + proc_sz =sizeof (struct acpi_pptt_processor );while ((unsigned long )entry + proc_sz < table_end) { cpu_node = (struct acpi_pptt_processor *)entry;
@@ -257,7 +257,7 @@ static struct acpi_pptt_processor *acpi_find_processor_node(struct acpi_table_he table_end = (unsigned long )table_hdr + table_hdr->length; entry = ACPI_ADD_PTR(struct acpi_subtable_header, table_hdr,sizeof (struct acpi_table_pptt )); - proc_sz =sizeof (struct acpi_pptt_processor *); + proc_sz =sizeof (struct acpi_pptt_processor );/* find the processor structure associated with this cpuid */ while ((unsigned long )entry + proc_sz < table_end) {
drivers/ata/ahci.c +2 -0
@@ -558,6 +558,8 @@ static const struct pci_device_id ahci_pci_tbl[] = { .driver_data = board_ahci_yes_fbs }, { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a3), .driver_data = board_ahci_yes_fbs }, + { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9215), + .driver_data = board_ahci_yes_fbs }, { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230), .driver_data = board_ahci_yes_fbs }, { PCI_DEVICE(PCI_VENDOR_ID_TTI, 0x0642), /* highpoint rocketraid 642L */
drivers/ata/libata-eh.c +9 -2
@@ -1603,8 +1603,15 @@ unsigned int atapi_eh_request_sense(struct ata_device *dev, tf.flags |=ATA_TFLAG_ISADDR |ATA_TFLAG_DEVICE ; tf.command =ATA_CMD_PACKET ; -/* is it pointless to prefer PIO for "safety reasons"? */ -if (ap->flags &ATA_FLAG_PIO_DMA ) { +/* +* Do not use DMA if the connected device only supports PIO, even if the +* port prefers PIO commands via DMA. +* +* Ideally, we should call atapi_check_dma() to check if it is safe for +* the LLD to use DMA for REQUEST_SENSE, but we don't have a qc. +* Since we can't check the command, perhaps we should only use pio? +*/ +if ((ap->flags &ATA_FLAG_PIO_DMA ) && !(dev->flags &ATA_DFLAG_PIO )) { tf.protocol =ATAPI_PROT_DMA ; tf.feature |=ATAPI_PKT_DMA ; }else {
drivers/ata/pata_pxa.c +6 -0
@@ -223,10 +223,16 @@ static int pxa_ata_probe(struct platform_device *pdev) ap->ioaddr.cmd_addr =devm_ioremap (&pdev->dev, cmd_res->start,resource_size (cmd_res)); +if (!ap->ioaddr.cmd_addr) +return -ENOMEM ; ap->ioaddr.ctl_addr =devm_ioremap (&pdev->dev, ctl_res->start,resource_size (ctl_res)); +if (!ap->ioaddr.ctl_addr) +return -ENOMEM ; ap->ioaddr.bmdma_addr =devm_ioremap (&pdev->dev, dma_res->start,resource_size (dma_res)); +if (!ap->ioaddr.bmdma_addr) +return -ENOMEM ;/* * Adjust register offsets
drivers/ata/sata_sx4.c +44 -74
322 lines not on this page · raw message
drivers/bluetooth/btrtl.c +2 -0
@@ -605,6 +605,8 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,rtl_dev_err (hdev,"mandatory config file %s not found" , btrtl_dev->ic_info->cfg_name); ret = btrtl_dev->cfg_len; +if (!ret) + ret = -EINVAL ; goto err_free; } }
drivers/bluetooth/hci_ldisc.c +14 -5
@@ -102,7 +102,8 @@ static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)if (!skb) {percpu_down_read (&hu->proto_lock); -if (test_bit (HCI_UART_PROTO_READY , &hu->flags)) +if (test_bit (HCI_UART_PROTO_READY , &hu->flags) || +test_bit (HCI_UART_PROTO_INIT , &hu->flags)) skb = hu->proto->dequeue (hu);percpu_up_read (&hu->proto_lock);
@@ -124,7 +125,8 @@ int hci_uart_tx_wakeup(struct hci_uart *hu)if (!percpu_down_read_trylock (&hu->proto_lock))return 0 ; -if (!test_bit (HCI_UART_PROTO_READY , &hu->flags)) +if (!test_bit (HCI_UART_PROTO_READY , &hu->flags) && + !test_bit (HCI_UART_PROTO_INIT , &hu->flags)) goto no_schedule;set_bit (HCI_UART_TX_WAKEUP , &hu->tx_state);
@@ -278,7 +280,8 @@ static int hci_uart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)percpu_down_read (&hu->proto_lock); -if (!test_bit (HCI_UART_PROTO_READY , &hu->flags)) { +if (!test_bit (HCI_UART_PROTO_READY , &hu->flags) && + !test_bit (HCI_UART_PROTO_INIT , &hu->flags)) {percpu_up_read (&hu->proto_lock);return -EUNATCH ; }
@@ -576,7 +579,8 @@ static void hci_uart_tty_wakeup(struct tty_struct *tty)if (tty != hu->tty)return ; -if (test_bit (HCI_UART_PROTO_READY , &hu->flags)) +if (test_bit (HCI_UART_PROTO_READY , &hu->flags) || +test_bit (HCI_UART_PROTO_INIT , &hu->flags))hci_uart_tx_wakeup (hu); }
@@ -602,7 +606,8 @@ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data,percpu_down_read (&hu->proto_lock); -if (!test_bit (HCI_UART_PROTO_READY , &hu->flags)) { +if (!test_bit (HCI_UART_PROTO_READY , &hu->flags) && + !test_bit (HCI_UART_PROTO_INIT , &hu->flags)) {percpu_up_read (&hu->proto_lock);return ; }
@@ -703,12 +708,16 @@ static int hci_uart_set_proto(struct hci_uart *hu, int id) hu->proto = p; +set_bit (HCI_UART_PROTO_INIT , &hu->flags); + err =hci_uart_register_dev (hu);if (err) {return err; }set_bit (HCI_UART_PROTO_READY , &hu->flags); +clear_bit (HCI_UART_PROTO_INIT , &hu->flags); +return 0 ; }
drivers/bluetooth/hci_uart.h +1 -0
@@ -89,6 +89,7 @@ struct hci_uart {#define HCI_UART_PROTO_SET 0#define HCI_UART_REGISTERED 1#define HCI_UART_PROTO_READY 2 +#define HCI_UART_PROTO_INIT 4/* TX states */ #define HCI_UART_SENDING 1
drivers/char/virtio_console.c +4 -3
@@ -1619,8 +1619,8 @@ static void handle_control_message(struct virtio_device *vdev,break ;case VIRTIO_CONSOLE_RESIZE : {struct { -__u16 rows; -__u16 cols; +__virtio16 rows; +__virtio16 cols; } size;if (!is_console_port (port))
@@ -1628,7 +1628,8 @@ static void handle_control_message(struct virtio_device *vdev,memcpy (&size, buf->buf + buf->offset +sizeof (*cpkt),sizeof (size)); -set_console_size (port, size.rows, size.cols); +set_console_size (port,virtio16_to_cpu (vdev, size.rows), +virtio16_to_cpu (vdev, size.cols)); port->cons.hvc->irq_requested =1 ;resize_console (port);
drivers/clk/clk.c +4 -0
@@ -4727,6 +4727,10 @@ of_clk_get_hw_from_clkspec(struct of_phandle_args *clkspec)if (!clkspec)return ERR_PTR (-EINVAL ); +/* Check if node in clkspec is in disabled/fail state */ +if (!of_device_is_available (clkspec->np)) +return ERR_PTR (-ENOENT ); +mutex_lock (&of_clk_mutex);list_for_each_entry (provider, &of_clk_providers, link) {if (provider->node == clkspec->np) {
drivers/cpufreq/cpufreq.c +8 -0
@@ -2531,10 +2531,18 @@ EXPORT_SYMBOL(cpufreq_update_policy);*/ void cpufreq_update_limits (unsigned int cpu) { +struct cpufreq_policy *policy; + + policy =cpufreq_cpu_get (cpu); +if (!policy) +return ; +if (cpufreq_driver->update_limits) cpufreq_driver->update_limits (cpu);else cpufreq_update_policy (cpu); + +cpufreq_cpu_put (policy); }EXPORT_SYMBOL_GPL (cpufreq_update_limits);
drivers/cpufreq/scpi-cpufreq.c +10 -3
@@ -39,9 +39,16 @@ static struct scpi_ops *scpi_ops;static unsigned int scpi_cpufreq_get_rate (unsigned int cpu) { -struct cpufreq_policy *policy =cpufreq_cpu_get_raw (cpu); -struct scpi_data *priv = policy->driver_data; -unsigned long rate =clk_get_rate (priv->clk); +struct cpufreq_policy *policy; +struct scpi_data *priv; +unsigned long rate; + + policy =cpufreq_cpu_get_raw (cpu); +if (unlikely (!policy)) +return 0 ; + + priv = policy->driver_data; + rate =clk_get_rate (priv->clk);return rate /1000 ; }
drivers/crypto/atmel-sha204a.c +6 -1
@@ -107,7 +107,12 @@ static int atmel_sha204a_probe(struct i2c_client *client, i2c_priv->hwrng.name =dev_name (&client->dev); i2c_priv->hwrng.read = atmel_sha204a_rng_read; - i2c_priv->hwrng.quality =1024 ; + +/* +* According to review by Bill Cox [1], this HWRNG has very low entropy. +* [1] https://www.metzdowd.com/pipermail/cryptography/2014-December/023858.html +*/ + i2c_priv->hwrng.quality =1 ; ret =devm_hwrng_register (&client->dev, &i2c_priv->hwrng);if (ret)
drivers/crypto/ccp/sp-pci.c +9 -6
@@ -118,14 +118,17 @@ static bool sp_pci_is_master(struct sp_device *sp) pdev_new =to_pci_dev (dev_new); pdev_cur =to_pci_dev (dev_cur); -if (pdev_new->bus->number < pdev_cur->bus->number) -return true; +if (pci_domain_nr (pdev_new->bus) !=pci_domain_nr (pdev_cur->bus)) +return pci_domain_nr (pdev_new->bus) <pci_domain_nr (pdev_cur->bus); -if (PCI_SLOT (pdev_new->devfn) <PCI_SLOT (pdev_cur->devfn)) -return true; +if (pdev_new->bus->number != pdev_cur->bus->number) +return pdev_new->bus->number < pdev_cur->bus->number; -if (PCI_FUNC (pdev_new->devfn) <PCI_FUNC (pdev_cur->devfn)) -return true; +if (PCI_SLOT (pdev_new->devfn) !=PCI_SLOT (pdev_cur->devfn)) +return PCI_SLOT (pdev_new->devfn) <PCI_SLOT (pdev_cur->devfn); + +if (PCI_FUNC (pdev_new->devfn) !=PCI_FUNC (pdev_cur->devfn)) +return PCI_FUNC (pdev_new->devfn) <PCI_FUNC (pdev_cur->devfn);return false; }
drivers/dma-buf/udmabuf.c +1 -1
@@ -138,7 +138,7 @@ static long udmabuf_create(const struct udmabuf_create_list *head,if (!ubuf)return -ENOMEM ; - pglimit = (size_limit_mb *1024 *1024 ) >>PAGE_SHIFT ; + pglimit = ((u64 )size_limit_mb *1024 *1024 ) >>PAGE_SHIFT ;for (i =0 ; i < head->count; i++) {if (!IS_ALIGNED (list[i].offset,PAGE_SIZE )) goto err;
drivers/dma/dmatest.c +3 -3
@@ -809,9 +809,9 @@ static int dmatest_func(void *data) }else {dma_async_issue_pending (chan); -wait_event_freezable_timeout (thread->done_wait, - done->done, -msecs_to_jiffies (params->timeout)); +wait_event_timeout (thread->done_wait, + done->done, +msecs_to_jiffies (params->timeout)); status =dma_async_is_tx_complete (chan, cookie,NULL ,NULL );
drivers/gpio/gpio-zynq.c +1 -0
@@ -943,6 +943,7 @@ static int zynq_gpio_remove(struct platform_device *pdev) ret =pm_runtime_get_sync (&pdev->dev);if (ret <0 )dev_warn (&pdev->dev,"pm_runtime_get_sync() Failed\n" ); +device_init_wakeup (&pdev->dev,0 );gpiochip_remove (&gpio->chip);clk_disable_unprepare (gpio->clk);device_set_wakeup_capable (&pdev->dev,0 );
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +10 -0
@@ -169,6 +169,11 @@ static int set_queue_properties_from_user(struct queue_properties *q_properties,return -EINVAL ; } +if (args->ring_size <KFD_MIN_QUEUE_RING_SIZE ) { + args->ring_size =KFD_MIN_QUEUE_RING_SIZE ; +pr_debug ("Size lower. clamped to KFD_MIN_QUEUE_RING_SIZE" ); + } +if (!access_ok ((const void __user *) args->read_pointer_address,sizeof (uint32_t ))) {pr_err ("Can't access read pointer\n" );
@@ -373,6 +378,11 @@ static int kfd_ioctl_update_queue(struct file *filp, struct kfd_process *p,return -EINVAL ; } +if (args->ring_size <KFD_MIN_QUEUE_RING_SIZE ) { + args->ring_size =KFD_MIN_QUEUE_RING_SIZE ; +pr_debug ("Size lower. clamped to KFD_MIN_QUEUE_RING_SIZE" ); + } + properties.queue_address = args->ring_base_address; properties.queue_size = args->ring_size; properties.queue_percent = args->queue_percentage;
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +1 -1
@@ -380,7 +380,7 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)pr_err ("Pasid %d destroy queue %d failed, ret %d\n" , pqm->process->pasid, pqn->q->properties.queue_id, retval); -if (retval != -ETIME ) +if (retval != -ETIME && retval != -EIO ) goto err_destroy_queue; }
drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.c +1 -1
@@ -189,7 +189,7 @@ int vega20_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed)uint32_t tach_period, crystal_clock_freq;int result =0 ; -if (!speed) +if (!speed || speed >UINT_MAX /8 )return -EINVAL ;if (PP_CAP (PHM_PlatformCaps_MicrocodeFanControl)) {
drivers/gpu/drm/drm_atomic_helper.c +1 -1
@@ -1225,7 +1225,7 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state) mode = &new_crtc_state->mode; adjusted_mode = &new_crtc_state->adjusted_mode; -if (!new_crtc_state->mode_changed) +if (!new_crtc_state->mode_changed && !new_crtc_state->connectors_changed)continue ; DRM_DEBUG_ATOMIC("modeset on [ENCODER:%d:%s]\n",
drivers/gpu/drm/drm_panel_orientation_quirks.c +8 -2
@@ -166,10 +166,10 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T103HAF"), }, .driver_data = (void *)&lcd800x1280_rightside_up, - }, { /* AYA NEO AYANEO 2 */ + }, { /* AYA NEO AYANEO 2/2S */ .matches = {DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"AYANEO" ), - DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "AYANEO 2"), + DMI_MATCH(DMI_PRODUCT_NAME, "AYANEO 2"), }, .driver_data = (void *)&lcd1200x1920_rightside_up, }, { /* AYA NEO 2021 */
@@ -235,6 +235,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), }, .driver_data = (void *)&gpd_win2, + }, { /* GPD Win 2 (correct DMI strings) */ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"GPD" ), +DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"WIN2" ) + }, + .driver_data = (void *)&lcd720x1280_rightside_up, }, { /* GPD Win 3 */ .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "GPD"),
drivers/gpu/drm/mediatek/mtk_dpi.c +9 -0
@@ -366,6 +366,7 @@ static void mtk_dpi_power_off(struct mtk_dpi *dpi)mtk_dpi_disable (dpi);clk_disable_unprepare (dpi->pixel_clk); +clk_disable_unprepare (dpi->tvd_clk);clk_disable_unprepare (dpi->engine_clk); }
@@ -382,6 +383,12 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi) goto err_refcount; } + ret =clk_prepare_enable (dpi->tvd_clk); +if (ret) { +dev_err (dpi->dev,"Failed to enable tvd pll: %d\n" , ret); + goto err_engine; + } + ret =clk_prepare_enable (dpi->pixel_clk);if (ret) {dev_err (dpi->dev,"Failed to enable pixel clock: %d\n" , ret);
@@ -391,6 +398,8 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)return 0 ; err_pixel: +clk_disable_unprepare (dpi->tvd_clk); +err_engine:clk_disable_unprepare (dpi->engine_clk); err_refcount: dpi->refcount--;
drivers/gpu/drm/nouveau/nouveau_bo.c +3 -0
@@ -139,6 +139,9 @@ nouveau_bo_del_ttm(struct ttm_buffer_object *bo)WARN_ON (nvbo->pin_refcnt >0 );nv10_bo_put_tile_region (dev, nvbo->tile,NULL ); +if (bo->base.import_attach) +drm_prime_gem_destroy (&bo->base, bo->sg); +/* * If nouveau_bo_new() allocated this buffer, the GEM object was never * initialized, so don't attempt to release it.
drivers/gpu/drm/nouveau/nouveau_gem.c +0 -3
@@ -50,9 +50,6 @@ nouveau_gem_object_del(struct drm_gem_object *gem)return ; } -if (gem->import_attach) -drm_prime_gem_destroy (gem, nvbo->bo.sg); -ttm_bo_put (&nvbo->bo);pm_runtime_mark_last_busy (dev);
drivers/gpu/drm/sti/Makefile +0 -2
@@ -7,8 +7,6 @@ sti-drm-y := \ sti_compositor.o \ sti_crtc.o \ sti_plane.o \ - sti_crtc.o \ - sti_plane.o \ sti_hdmi.o \ sti_hdmi_tx3g4c28phy.o \ sti_dvo.o \
drivers/gpu/drm/tiny/repaper.c +2 -2
@@ -454,7 +454,7 @@ static void repaper_frame_fixed_repeat(struct repaper_epd *epd, u8 fixed_value, enum repaper_stage stage) {u64 start =local_clock (); -u64 end = start + (epd->factored_stage_time *1000 *1000 ); +u64 end = start + ((u64 )epd->factored_stage_time *1000 *1000 ); do { repaper_frame_fixed(epd, fixed_value, stage);
@@ -465,7 +465,7 @@ static void repaper_frame_data_repeat(struct repaper_epd *epd, const u8 *image, const u8 *mask, enum repaper_stage stage) { u64 start = local_clock(); -u64 end = start + (epd->factored_stage_time *1000 *1000 ); +u64 end = start + ((u64 )epd->factored_stage_time *1000 *1000 ); do { repaper_frame_data(epd, image, mask, stage);
drivers/hid/usbhid/hid-pidff.c +41 -19
109 lines not on this page · raw message
drivers/hsi/clients/ssi_protocol.c +1 -0
@@ -403,6 +403,7 @@ static void ssip_reset(struct hsi_client *cl)del_timer (&ssi->rx_wd);del_timer (&ssi->tx_wd);del_timer (&ssi->keep_alive); +cancel_work_sync (&ssi->work); ssi->main_state =0 ; ssi->send_state =0 ; ssi->recv_state =0 ;
drivers/i2c/busses/i2c-cros-ec-tunnel.c +3 -0
@@ -247,6 +247,9 @@ static int ec_i2c_probe(struct platform_device *pdev)u32 remote_bus;int err; +if (!ec) +return dev_err_probe (dev, -EPROBE_DEFER ,"couldn't find parent EC device\n" ); +if (!ec->cmd_xfer) {dev_err (dev,"Missing sendrecv\n" );return -EINVAL ;
drivers/i3c/master.c +3 -0
@@ -2198,6 +2198,9 @@ static void i3c_master_unregister_i3c_devs(struct i3c_master_controller *master)*/ void i3c_master_queue_ibi (struct i3c_dev_desc *dev,struct i3c_ibi_slot *slot) { +if (!dev->ibi || !slot) +return ; +atomic_inc (&dev->ibi->pending_ibis);queue_work (dev->common.master->wq, &slot->work); }
drivers/iio/adc/ad7768-1.c +2 -3
@@ -142,7 +142,7 @@ static const struct iio_chan_spec ad7768_channels[] = { .channel = 0, .scan_index = 0, .scan_type = { - .sign = 'u', + .sign = 's', .realbits = 24, .storagebits = 32, .shift = 8,
@@ -369,12 +369,11 @@ static int ad7768_read_raw(struct iio_dev *indio_dev,return ret; ret =ad7768_scan_direct (indio_dev); -if (ret >=0 ) - *val = ret;iio_device_release_direct_mode (indio_dev);if (ret <0 )return ret; + *val =sign_extend32 (ret, chan->scan_type.realbits -1 );return IIO_VAL_INT ;
drivers/infiniband/hw/qib/qib_fs.c +1 -0
@@ -56,6 +56,7 @@ static int qibfs_mknod(struct inode *dir, struct dentry *dentry,struct inode *inode =new_inode (dir->i_sb);if (!inode) { +dput (dentry); error = -EPERM ; goto bail; }
drivers/infiniband/hw/usnic/usnic_ib_main.c +7 -7
@@ -380,7 +380,7 @@ static void *usnic_ib_device_add(struct pci_dev *dev)if (!us_ibdev) {usnic_err ("Device %s context alloc failed\n" ,netdev_name (pci_get_drvdata (dev))); -return ERR_PTR (-EFAULT ); +return NULL ; } us_ibdev->ufdev =usnic_fwd_dev_alloc (dev);
@@ -520,8 +520,8 @@ static struct usnic_ib_dev *usnic_ib_discover_pf(struct usnic_vnic *vnic) } us_ibdev =usnic_ib_device_add (parent_pci); -if (IS_ERR_OR_NULL (us_ibdev)) { - us_ibdev = us_ibdev ? us_ibdev :ERR_PTR (-EFAULT ); +if (!us_ibdev) { + us_ibdev =ERR_PTR (-EFAULT ); goto out; }
@@ -584,10 +584,10 @@ static int usnic_ib_pci_probe(struct pci_dev *pdev, } pf =usnic_ib_discover_pf (vf->vnic); -if (IS_ERR_OR_NULL (pf)) { -usnic_err ("Failed to discover pf of vnic %s with err%ld\n" , -pci_name (pdev),PTR_ERR (pf)); - err = pf ?PTR_ERR (pf) : -EFAULT ; +if (IS_ERR (pf)) { + err =PTR_ERR (pf); +usnic_err ("Failed to discover pf of vnic %s with err%d\n" , +pci_name (pdev), err); goto out_clean_vnic; }
drivers/infiniband/ulp/srpt/ib_srpt.c +6 -2
@@ -79,12 +79,16 @@ module_param(srpt_srq_size, int, 0444);MODULE_PARM_DESC (srpt_srq_size,"Shared receive queue (SRQ) size." ); +static int srpt_set_u64_x (const char *buffer,const struct kernel_param *kp) +{ +return kstrtou64 (buffer,16 , (u64 *)kp->arg); +}static int srpt_get_u64_x (char *buffer,const struct kernel_param *kp) {return sprintf (buffer,"0x%016llx" , *(u64 *)kp->arg); } -module_param_call (srpt_service_guid,NULL , srpt_get_u64_x, &srpt_service_guid, -0444 ); +module_param_call (srpt_service_guid, srpt_set_u64_x, srpt_get_u64_x, + &srpt_service_guid,0444 );MODULE_PARM_DESC (srpt_service_guid,"Using this value for ioc_guid, id_ext, and cm_listen_id instead of using the node_guid of the first HCA." );
drivers/mcb/mcb-parse.c +1 -1
@@ -101,7 +101,7 @@ static int chameleon_parse_gdd(struct mcb_bus *bus, ret =mcb_device_register (bus, mdev);if (ret <0 ) - goto err; +return ret;return 0 ;
drivers/md/dm-integrity.c +3 -0
@@ -4112,16 +4112,19 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) ic->recalc_bitmap =dm_integrity_alloc_page_list (n_bitmap_pages);if (!ic->recalc_bitmap) { + ti->error ="Could not allocate memory for bitmap" ; r = -ENOMEM ; goto bad; } ic->may_write_bitmap =dm_integrity_alloc_page_list (n_bitmap_pages);if (!ic->may_write_bitmap) { + ti->error ="Could not allocate memory for bitmap" ; r = -ENOMEM ; goto bad; } ic->bbs =kvmalloc_array (ic->n_bitmap_blocks,sizeof (struct bitmap_block_status ),GFP_KERNEL );if (!ic->bbs) { + ti->error ="Could not allocate memory for bitmap" ; r = -ENOMEM ; goto bad; }
drivers/md/raid1.c +16 -10
@@ -2051,14 +2051,9 @@ static int fix_sync_read_error(struct r1bio *r1_bio)if (!rdev_set_badblocks (rdev, sect, s,0 )) abort =1 ; } -if (abort) { - conf->recovery_disabled = - mddev->recovery_disabled; -set_bit (MD_RECOVERY_INTR , &mddev->recovery); -md_done_sync (mddev, r1_bio->sectors,0 ); -put_buf (r1_bio); +if (abort)return 0 ; - } +/* Try next page */ sectors -= s; sect += s;
@@ -2198,10 +2193,21 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)int disks = conf->raid_disks *2 ;struct bio *wbio; -if (!test_bit (R1BIO_Uptodate, &r1_bio->state)) -/* ouch - failed to read all of that. */ -if (!fix_sync_read_error (r1_bio)) +if (!test_bit (R1BIO_Uptodate, &r1_bio->state)) { +/* +* ouch - failed to read all of that. +* No need to fix read error for check/repair +* because all member disks are read. +*/ +if (test_bit (MD_RECOVERY_REQUESTED , &mddev->recovery) || + !fix_sync_read_error (r1_bio)) { + conf->recovery_disabled = mddev->recovery_disabled; +set_bit (MD_RECOVERY_INTR , &mddev->recovery); +md_done_sync (mddev, r1_bio->sectors,0 ); +put_buf (r1_bio);return ; + } + }if (test_bit (MD_RECOVERY_REQUESTED , &mddev->recovery))process_checks (r1_bio);
drivers/media/common/siano/smsdvb-main.c +2 -0
@@ -1210,6 +1210,8 @@ static int __init smsdvb_module_init(void)smsdvb_debugfs_register (); rc =smscore_register_hotplug (smsdvb_hotplug); +if (rc) +smsdvb_debugfs_unregister ();pr_debug ("\n" );
drivers/media/i2c/adv748x/adv748x.h +1 -1
@@ -321,7 +321,7 @@ struct adv748x_state {/* Free run pattern select */ #define ADV748X_SDP_FRP 0x14 -#define ADV748X_SDP_FRP_MASK GENMASK(3, 1) +#define ADV748X_SDP_FRP_MASK GENMASK(2, 0)/* Saturation */ #define ADV748X_SDP_SD_SAT_U 0xe3/* user_map_rw_reg_e3 */
drivers/media/i2c/ov7251.c +3 -1
@@ -748,6 +748,8 @@ static int ov7251_set_power_on(struct ov7251 *ov7251)return ret; } +usleep_range (1000 ,1100 ); +gpiod_set_value_cansleep (ov7251->enable_gpio,1 );/* wait at least 65536 external clock cycles */
@@ -1330,7 +1332,7 @@ static int ov7251_probe(struct i2c_client *client)return PTR_ERR (ov7251->analog_regulator); } - ov7251->enable_gpio =devm_gpiod_get (dev,"enable" ,GPIOD_OUT_HIGH ); + ov7251->enable_gpio =devm_gpiod_get (dev,"enable" ,GPIOD_OUT_LOW );if (IS_ERR (ov7251->enable_gpio)) {dev_err (dev,"cannot get enable gpio\n" );return PTR_ERR (ov7251->enable_gpio);
drivers/media/platform/qcom/venus/hfi_parser.c +2 -0
@@ -19,6 +19,8 @@ static void init_codecs(struct venus_core *core)struct venus_caps *caps = core->caps, *cap;unsigned long bit; + core->codecs_count =0 ; +if (hweight_long (core->dec_codecs) +hweight_long (core->enc_codecs) >MAX_CODEC_NUM )return ;
drivers/media/platform/qcom/venus/hfi_venus.c +16 -2
@@ -188,6 +188,9 @@ static int venus_write_queue(struct venus_hfi_device *hdev,/* ensure rd/wr indices's are read from memory */ rmb (); +if (qsize >IFACEQ_QUEUE_SIZE /4 ) +return -EINVAL ; +if (wr_idx >= rd_idx) empty_space = qsize - (wr_idx - rd_idx);else
@@ -256,6 +259,9 @@ static int venus_read_queue(struct venus_hfi_device *hdev, wr_idx = qhdr->write_idx; qsize = qhdr->q_size; +if (qsize >IFACEQ_QUEUE_SIZE /4 ) +return -EINVAL ; +/* make sure data is valid before using it */ rmb ();
@@ -970,18 +976,26 @@ static void venus_sfr_print(struct venus_hfi_device *hdev) {struct device *dev = hdev->core->dev;struct hfi_sfr *sfr = hdev->sfr.kva; +u32 size;void *p;if (!sfr)return ; - p =memchr (sfr->data,'\0' , sfr->buf_size); + size = sfr->buf_size; +if (!size) +return ; + +if (size >ALIGNED_SFR_SIZE ) + size =ALIGNED_SFR_SIZE ; + + p =memchr (sfr->data,'\0' , size);/* * SFR isn't guaranteed to be NULL terminated since SYS_ERROR indicates * that Venus is in the process of crashing. */ if (!p) - sfr->data[sfr->buf_size -1 ] ='\0' ; + sfr->data[size -1 ] ='\0' ;dev_err_ratelimited (dev,"SFR message from FW: %s\n" , sfr->data); }
drivers/media/platform/vim2m.c +3 -3
@@ -1334,9 +1334,6 @@ static int vim2m_probe(struct platform_device *pdev) vfd->v4l2_dev = &dev->v4l2_dev;video_set_drvdata (vfd, dev); -v4l2_info (&dev->v4l2_dev, -"Device registered as /dev/video%d\n" , vfd->num); -platform_set_drvdata (pdev, dev); dev->m2m_dev =v4l2_m2m_init (&m2m_ops);
@@ -1363,6 +1360,9 @@ static int vim2m_probe(struct platform_device *pdev) goto error_m2m; } +v4l2_info (&dev->v4l2_dev, +"Device registered as /dev/video%d\n" , vfd->num); +#ifdef CONFIG_MEDIA_CONTROLLER ret =v4l2_m2m_register_media_controller (dev->m2m_dev, vfd,MEDIA_ENT_F_PROC_VIDEO_SCALER );
drivers/media/rc/streamzap.c +38 -30
83 lines not on this page · raw message
drivers/media/v4l2-core/v4l2-dv-timings.c +2 -2
@@ -755,7 +755,7 @@ bool v4l2_detect_gtf(unsigned frame_height,u64 num;u32 den; - num = ((image_width *GTF_D_C_PRIME * (u64 )hfreq) - + num = (((u64 )image_width *GTF_D_C_PRIME * hfreq) - ((u64 )image_width *GTF_D_M_PRIME *1000 )); den = (hfreq * (100 -GTF_D_C_PRIME ) +GTF_D_M_PRIME *1000 ) * (2 *GTF_CELL_GRAN );
@@ -765,7 +765,7 @@ bool v4l2_detect_gtf(unsigned frame_height,u64 num;u32 den; - num = ((image_width *GTF_S_C_PRIME * (u64 )hfreq) - + num = (((u64 )image_width *GTF_S_C_PRIME * hfreq) - ((u64 )image_width *GTF_S_M_PRIME *1000 )); den = (hfreq * (100 -GTF_S_C_PRIME ) +GTF_S_M_PRIME *1000 ) * (2 *GTF_CELL_GRAN );
drivers/misc/pci_endpoint_test.c +20 -16
@@ -27,14 +27,14 @@#define DRV_MODULE_NAME "pci-endpoint-test"#define IRQ_TYPE_UNDEFINED -1 -#define IRQ_TYPE_LEGACY 0 +#define IRQ_TYPE_INTX 0#define IRQ_TYPE_MSI 1#define IRQ_TYPE_MSIX 2#define PCI_ENDPOINT_TEST_MAGIC 0x0#define PCI_ENDPOINT_TEST_COMMAND 0x4 -#define COMMAND_RAISE_LEGACY_IRQ BIT(0) +#define COMMAND_RAISE_INTX_IRQ BIT(0)#define COMMAND_RAISE_MSI_IRQ BIT(1)#define COMMAND_RAISE_MSIX_IRQ BIT(2)#define COMMAND_READ BIT(3)
@@ -170,8 +170,8 @@ static bool pci_endpoint_test_alloc_irq_vectors(struct pci_endpoint_test *test,bool res = true;switch (type) { -case IRQ_TYPE_LEGACY : - irq =pci_alloc_irq_vectors (pdev,1 ,1 ,PCI_IRQ_LEGACY ); +case IRQ_TYPE_INTX : + irq =pci_alloc_irq_vectors (pdev,1 ,1 ,PCI_IRQ_INTX );if (irq <0 )dev_err (dev,"Failed to get Legacy interrupt\n" );break ;
@@ -230,8 +230,8 @@ static bool pci_endpoint_test_request_irq(struct pci_endpoint_test *test)return true; fail: -switch (irq_type) { -case IRQ_TYPE_LEGACY : +switch (test->irq_type) { +case IRQ_TYPE_INTX :dev_err (dev,"Failed to request IRQ %d for Legacy\n" ,pci_irq_vector (pdev, i));break ;
@@ -247,6 +247,9 @@ static bool pci_endpoint_test_request_irq(struct pci_endpoint_test *test)break ; } + test->num_irqs = i; +pci_endpoint_test_release_irq (test); +return false; }
@@ -278,15 +281,15 @@ static bool pci_endpoint_test_bar(struct pci_endpoint_test *test,return true; } -static bool pci_endpoint_test_legacy_irq (struct pci_endpoint_test *test) +static bool pci_endpoint_test_intx_irq (struct pci_endpoint_test *test) {u32 val;pci_endpoint_test_writel (test,PCI_ENDPOINT_TEST_IRQ_TYPE , -IRQ_TYPE_LEGACY ); +IRQ_TYPE_INTX );pci_endpoint_test_writel (test,PCI_ENDPOINT_TEST_IRQ_NUMBER ,0 );pci_endpoint_test_writel (test,PCI_ENDPOINT_TEST_COMMAND , -COMMAND_RAISE_LEGACY_IRQ ); +COMMAND_RAISE_INTX_IRQ ); val =wait_for_completion_timeout (&test->irq_raised,msecs_to_jiffies (1000 ));if (!val)
@@ -341,7 +344,7 @@ static bool pci_endpoint_test_copy(struct pci_endpoint_test *test, size_t size)if (size >SIZE_MAX - alignment) goto err; -if (irq_type <IRQ_TYPE_LEGACY || irq_type >IRQ_TYPE_MSIX ) { +if (irq_type <IRQ_TYPE_INTX || irq_type >IRQ_TYPE_MSIX ) {dev_err (dev,"Invalid IRQ type option\n" ); goto err; }
@@ -437,7 +440,7 @@ static bool pci_endpoint_test_write(struct pci_endpoint_test *test, size_t size)if (size >SIZE_MAX - alignment) goto err; -if (irq_type <IRQ_TYPE_LEGACY || irq_type >IRQ_TYPE_MSIX ) { +if (irq_type <IRQ_TYPE_INTX || irq_type >IRQ_TYPE_MSIX ) {dev_err (dev,"Invalid IRQ type option\n" ); goto err; }
@@ -506,7 +509,7 @@ static bool pci_endpoint_test_read(struct pci_endpoint_test *test, size_t size)if (size >SIZE_MAX - alignment) goto err; -if (irq_type <IRQ_TYPE_LEGACY || irq_type >IRQ_TYPE_MSIX ) { +if (irq_type <IRQ_TYPE_INTX || irq_type >IRQ_TYPE_MSIX ) {dev_err (dev,"Invalid IRQ type option\n" ); goto err; }
@@ -557,7 +560,7 @@ static bool pci_endpoint_test_set_irq(struct pci_endpoint_test *test,struct pci_dev *pdev = test->pdev;struct device *dev = &pdev->dev; -if (req_irq_type <IRQ_TYPE_LEGACY || req_irq_type >IRQ_TYPE_MSIX ) { +if (req_irq_type <IRQ_TYPE_INTX || req_irq_type >IRQ_TYPE_MSIX ) {dev_err (dev,"Invalid IRQ type option\n" );return false; }
@@ -574,6 +577,7 @@ static bool pci_endpoint_test_set_irq(struct pci_endpoint_test *test,if (!pci_endpoint_test_request_irq (test)) goto err; + irq_type = test->irq_type;return true; err:
@@ -603,8 +607,8 @@ static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd, goto ret; ret =pci_endpoint_test_bar (test, bar);break ; -case PCITEST_LEGACY_IRQ : - ret =pci_endpoint_test_legacy_irq (test); +case PCITEST_INTX_IRQ : + ret =pci_endpoint_test_intx_irq (test);break ;case PCITEST_MSI :case PCITEST_MSIX :
@@ -664,7 +668,7 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev, test->irq_type =IRQ_TYPE_UNDEFINED ;if (no_msi) - irq_type =IRQ_TYPE_LEGACY ; + irq_type =IRQ_TYPE_INTX ; data = (struct pci_endpoint_test_data *)ent->driver_data;if (data) {
drivers/mmc/host/cqhci.c +1 -1
@@ -580,7 +580,7 @@ static int cqhci_request(struct mmc_host *mmc, struct mmc_request *mrq)cqhci_writel (cq_host,0 ,CQHCI_CTL ); mmc->cqe_on = true;pr_debug ("%s: cqhci: CQE on\n" ,mmc_hostname (mmc)); -if (cqhci_readl (cq_host,CQHCI_CTL ) &&CQHCI_HALT ) { +if (cqhci_readl (cq_host,CQHCI_CTL ) &CQHCI_HALT ) {pr_err ("%s: cqhci: CQE failed to exit halt state\n" ,mmc_hostname (mmc)); }
drivers/mtd/inftlcore.c +5 -4
@@ -482,10 +482,11 @@ static inline u16 INFTL_findwriteunit(struct INFTLrecord *inftl, unsigned block) silly =MAX_LOOPS ;while (thisEUN <= inftl->lastEUN) { -inftl_read_oob (mtd, (thisEUN * inftl->EraseSize) + - blockofs,8 , &retlen, (char *)&bci); - - status = bci.Status | bci.Status1; +if (inftl_read_oob (mtd, (thisEUN * inftl->EraseSize) + + blockofs,8 , &retlen, (char *)&bci) <0 ) + status =SECTOR_IGNORE ; +else + status = bci.Status | bci.Status1;pr_debug ("INFTL: status of block %d in EUN %d is %x\n" , block , writeEUN, status);
drivers/mtd/nand/raw/brcmnand/brcmnand.c +1 -1
@@ -2560,7 +2560,7 @@ static int brcmnand_resume(struct device *dev)brcmnand_save_restore_cs_config (host,1 );/* Reset the chip, required by some chips after power-up */ -nand_reset_op (chip); +nand_reset (chip,0 ); }return 0 ;
drivers/mtd/nand/raw/r852.c +3 -0
@@ -387,6 +387,9 @@ static int r852_wait(struct nand_chip *chip)static int r852_ready (struct nand_chip *chip) {struct r852_device *dev =r852_get_dev (nand_to_mtd (chip)); +if (dev->card_unstable) +return 0 ; +return !(r852_read_reg (dev,R852_CARD_STA ) &R852_CARD_STA_BUSY ); }
drivers/net/dsa/b53/b53_common.c +10 -0
@@ -671,6 +671,15 @@ static void b53_enable_mib(struct b53_device *dev)b53_write8 (dev,B53_MGMT_PAGE ,B53_GLOBAL_CONFIG , gc); } +static void b53_enable_stp (struct b53_device *dev) +{ +u8 gc; + +b53_read8 (dev,B53_MGMT_PAGE ,B53_GLOBAL_CONFIG , &gc); + gc |=GC_RX_BPDU_EN ; +b53_write8 (dev,B53_MGMT_PAGE ,B53_GLOBAL_CONFIG , gc); +} +static u16 b53_default_pvid (struct b53_device *dev) {if (is5325 (dev) ||is5365 (dev))
@@ -777,6 +786,7 @@ static int b53_switch_reset(struct b53_device *dev) }b53_enable_mib (dev); +b53_enable_stp (dev);return b53_flush_arl (dev,FAST_AGE_STATIC ); }
drivers/net/dsa/mv88e6xxx/chip.c +21 -4
@@ -2613,6 +2613,21 @@ static int mv88e6xxx_stats_setup(struct mv88e6xxx_chip *chip)return mv88e6xxx_g1_stats_clear (chip); } +static int mv88e6320_setup_errata (struct mv88e6xxx_chip *chip) +{ +u16 dummy; +int err; + +/* Workaround for erratum +* 3.3 RGMII timing may be out of spec when transmit delay is enabled +*/ + err =mv88e6xxx_port_hidden_write (chip,0 ,0xf ,0x7 ,0xe000 ); +if (err) +return err; + +return mv88e6xxx_port_hidden_read (chip,0 ,0xf ,0x7 , &dummy); +} +/* Check if the errata has already been applied. */ static bool mv88e6390_setup_errata_applied (struct mv88e6xxx_chip *chip) {
@@ -3811,6 +3826,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {static const struct mv88e6xxx_ops mv88e6320_ops = {/* MV88E6XXX_FAMILY_6320 */ + .setup_errata = mv88e6320_setup_errata, .ieee_pri_map = mv88e6085_g1_ieee_pri_map, .ip_pri_map = mv88e6085_g1_ip_pri_map, .irl_init_all = mv88e6352_g2_irl_init_all,
@@ -3845,8 +3861,8 @@ static const struct mv88e6xxx_ops mv88e6320_ops = { .mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu, .pot_clear = mv88e6xxx_g2_pot_clear, .reset = mv88e6352_g1_reset, - .vtu_getnext = mv88e6185_g1_vtu_getnext, - .vtu_loadpurge = mv88e6185_g1_vtu_loadpurge, + .vtu_getnext = mv88e6352_g1_vtu_getnext, + .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, .gpio_ops = &mv88e6352_gpio_ops, .avb_ops = &mv88e6352_avb_ops, .ptp_ops = &mv88e6352_ptp_ops,
@@ -3855,6 +3871,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {static const struct mv88e6xxx_ops mv88e6321_ops = {/* MV88E6XXX_FAMILY_6320 */ + .setup_errata = mv88e6320_setup_errata, .ieee_pri_map = mv88e6085_g1_ieee_pri_map, .ip_pri_map = mv88e6085_g1_ip_pri_map, .irl_init_all = mv88e6352_g2_irl_init_all,
@@ -3888,8 +3905,8 @@ static const struct mv88e6xxx_ops mv88e6321_ops = { .watchdog_ops = &mv88e6390_watchdog_ops, .mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu, .reset = mv88e6352_g1_reset, - .vtu_getnext = mv88e6185_g1_vtu_getnext, - .vtu_loadpurge = mv88e6185_g1_vtu_loadpurge, + .vtu_getnext = mv88e6352_g1_vtu_getnext, + .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, .gpio_ops = &mv88e6352_gpio_ops, .avb_ops = &mv88e6352_avb_ops, .ptp_ops = &mv88e6352_ptp_ops,
drivers/net/phy/phy_led_triggers.c +13 -10
@@ -91,9 +91,8 @@ int phy_led_triggers_register(struct phy_device *phy)if (!phy->phy_num_led_triggers)return 0 ; - phy->led_link_trigger =devm_kzalloc (&phy->mdio.dev, -sizeof (*phy->led_link_trigger), -GFP_KERNEL ); + phy->led_link_trigger =kzalloc (sizeof (*phy->led_link_trigger), +GFP_KERNEL );if (!phy->led_link_trigger) { err = -ENOMEM ; goto out_clear;
@@ -108,10 +107,9 @@ int phy_led_triggers_register(struct phy_device *phy)if (err) goto out_free_link; - phy->phy_led_triggers =devm_kcalloc (&phy->mdio.dev, - phy->phy_num_led_triggers, -sizeof (struct phy_led_trigger ), -GFP_KERNEL ); + phy->phy_led_triggers =kcalloc (phy->phy_num_led_triggers, +sizeof (struct phy_led_trigger ), +GFP_KERNEL );if (!phy->phy_led_triggers) { err = -ENOMEM ; goto out_unreg_link;
@@ -131,11 +129,11 @@ int phy_led_triggers_register(struct phy_device *phy) out_unreg:while (i--)phy_led_trigger_unregister (&phy->phy_led_triggers[i]); -devm_kfree (&phy->mdio.dev, phy->phy_led_triggers); +kfree (phy->phy_led_triggers); out_unreg_link:phy_led_trigger_unregister (phy->led_link_trigger); out_free_link: -devm_kfree (&phy->mdio.dev, phy->led_link_trigger); +kfree (phy->led_link_trigger); phy->led_link_trigger =NULL ; out_clear: phy->phy_num_led_triggers =0 ;
@@ -149,8 +147,13 @@ void phy_led_triggers_unregister(struct phy_device *phy)for (i =0 ; i < phy->phy_num_led_triggers; i++)phy_led_trigger_unregister (&phy->phy_led_triggers[i]); +kfree (phy->phy_led_triggers); + phy->phy_led_triggers =NULL ; -if (phy->led_link_trigger) +if (phy->led_link_trigger) {phy_led_trigger_unregister (phy->led_link_trigger); +kfree (phy->led_link_trigger); + phy->led_link_trigger =NULL ; + } }EXPORT_SYMBOL_GPL (phy_led_triggers_unregister);
drivers/net/ppp/ppp_synctty.c +5 -0
@@ -516,6 +516,11 @@ ppp_sync_txmunge(struct syncppp *ap, struct sk_buff *skb)unsigned char *data;int islcp; +/* Ensure we can safely access protocol field and LCP code */ +if (!pskb_may_pull (skb,3 )) { +kfree_skb (skb); +return NULL ; + } data = skb->data; proto =get_unaligned_be16 (data);
drivers/net/virtio_net.c +14 -8
@@ -717,6 +717,12 @@ static struct sk_buff *receive_small(struct net_device *dev, len -= vi->hdr_len; stats->bytes += len; +if (unlikely (len >GOOD_PACKET_LEN )) { +pr_debug ("%s: rx error: len %u exceeds max size %d\n" , + dev->name, len,GOOD_PACKET_LEN ); + dev->stats.rx_length_errors++; + goto err_len; + }rcu_read_lock (); xdp_prog =rcu_dereference (rq->xdp_prog);if (xdp_prog) {
@@ -819,6 +825,7 @@ static struct sk_buff *receive_small(struct net_device *dev, err_xdp:rcu_read_unlock (); stats->xdp_drops++; +err_len: stats->drops++;put_page (page); xdp_xmit:
@@ -871,6 +878,13 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, head_skb =NULL ; stats->bytes += len - vi->hdr_len; + truesize =mergeable_ctx_to_truesize (ctx); +if (unlikely (len > truesize)) { +pr_debug ("%s: rx error: len %u exceeds truesize %lu\n" , + dev->name, len, (unsigned long )ctx); + dev->stats.rx_length_errors++; + goto err_skb; + }rcu_read_lock (); xdp_prog =rcu_dereference (rq->xdp_prog);if (xdp_prog) {
@@ -990,14 +1004,6 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, }rcu_read_unlock (); - truesize =mergeable_ctx_to_truesize (ctx); -if (unlikely (len > truesize)) { -pr_debug ("%s: rx error: len %u exceeds truesize %lu\n" , - dev->name, len, (unsigned long )ctx); - dev->stats.rx_length_errors++; - goto err_skb; - } - head_skb =page_to_skb (vi, rq, page, offset, len, truesize, !xdp_prog, metasize); curr_skb = head_skb;
drivers/net/wireless/atmel/at76c50x-usb.c +1 -1
@@ -2554,7 +2554,7 @@ static void at76_disconnect(struct usb_interface *interface)wiphy_info (priv->hw->wiphy,"disconnecting\n" );at76_delete_device (priv); -usb_put_dev (priv->udev); +usb_put_dev (interface_to_usbdev (interface));dev_info (&interface->dev,"disconnected\n" ); }
drivers/net/wireless/mediatek/mt76/mt76x2/usb.c +1 -0
@@ -19,6 +19,7 @@ static const struct usb_device_id mt76x2u_device_table[] = { { USB_DEVICE(0x0846, 0x9053) }, /* Netgear A6210 */ { USB_DEVICE(0x045e, 0x02e6) }, /* XBox One Wireless Adapter */ { USB_DEVICE(0x045e, 0x02fe) }, /* XBox One Wireless Adapter */ + { USB_DEVICE(0x2357, 0x0137) }, /* TP-Link TL-WDN6200 */ { }, };
drivers/net/wireless/ti/wl1251/tx.c +3 -1
@@ -342,8 +342,10 @@ void wl1251_tx_work(struct work_struct *work)while ((skb =skb_dequeue (&wl->tx_queue))) {if (!woken_up) { ret =wl1251_ps_elp_wakeup (wl); -if (ret <0 ) +if (ret <0 ) { +skb_queue_head (&wl->tx_queue, skb); goto out; + } woken_up = true; }
drivers/ntb/hw/idt/ntb_hw_idt.c +7 -11
@@ -1041,7 +1041,7 @@ static inline char *idt_get_mw_name(enum idt_mw_type mw_type)static struct idt_mw_cfg *idt_scan_mws (struct idt_ntb_dev *ndev,int port,unsigned char *mw_cnt) { -struct idt_mw_cfg mws[IDT_MAX_NR_MWS ], *ret_mws; +struct idt_mw_cfg *mws;const struct idt_ntb_bar *bars;enum idt_mw_type mw_type;unsigned char widx, bidx, en_cnt;
@@ -1049,6 +1049,11 @@ static struct idt_mw_cfg *idt_scan_mws(struct idt_ntb_dev *ndev, int port,int aprt_size;u32 data; + mws =devm_kcalloc (&ndev->ntb.pdev->dev,IDT_MAX_NR_MWS , +sizeof (*mws),GFP_KERNEL ); +if (!mws) +return ERR_PTR (-ENOMEM ); +/* Retrieve the array of the BARs registers */ bars = portdata_tbl[port].bars;
@@ -1103,16 +1108,7 @@ static struct idt_mw_cfg *idt_scan_mws(struct idt_ntb_dev *ndev, int port, } } -/* Allocate memory for memory window descriptors */ - ret_mws =devm_kcalloc (&ndev->ntb.pdev->dev, *mw_cnt,sizeof (*ret_mws), -GFP_KERNEL ); -if (!ret_mws) -return ERR_PTR (-ENOMEM ); - -/* Copy the info of detected memory windows */ -memcpy (ret_mws, mws, (*mw_cnt)*sizeof (*ret_mws)); - -return ret_mws; +return mws; }/*
drivers/ntb/ntb_transport.c +1 -1
@@ -1340,7 +1340,7 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev) qp_count =ilog2 (qp_bitmap);if (nt->use_msi) { qp_count -=1 ; - nt->msi_db_mask =1 << qp_count; + nt->msi_db_mask =BIT_ULL (qp_count);ntb_db_clear_mask (ndev, nt->msi_db_mask); }
drivers/nvme/target/fc.c +0 -14
@@ -146,20 +146,6 @@ struct nvmet_fc_tgt_assoc {struct work_struct del_work; }; - -static inline int -nvmet_fc_iodnum (struct nvmet_fc_ls_iod *iodptr) -{ -return (iodptr - iodptr->tgtport->iod); -} - -static inline int -nvmet_fc_fodnum (struct nvmet_fc_fcp_iod *fodptr) -{ -return (fodptr - fodptr->queue->fod); -} - -/* * Association and Connection IDs: *
drivers/of/irq.c +11 -2
@@ -36,11 +36,15 @@unsigned int irq_of_parse_and_map (struct device_node *dev,int index) {struct of_phandle_args oirq; +unsigned int ret;if (of_irq_parse_one (dev, index, &oirq))return 0 ; -return irq_create_of_mapping (&oirq); + ret =irq_create_of_mapping (&oirq); +of_node_put (oirq.np); + +return ret; }EXPORT_SYMBOL_GPL (irq_of_parse_and_map);
@@ -443,8 +447,10 @@ int of_irq_count(struct device_node *dev)struct of_phandle_args irq;int nr =0 ; -while (of_irq_parse_one (dev, nr, &irq) ==0 ) +while (of_irq_parse_one (dev, nr, &irq) ==0 ) { +of_node_put (irq.np); nr++; + }return nr; }
@@ -549,6 +555,8 @@ void __init of_irq_init(const struct of_device_id *matches) desc->interrupt_parent);if (ret) {of_node_clear_flag (desc->dev,OF_POPULATED ); +of_node_put (desc->interrupt_parent); +of_node_put (desc->dev);kfree (desc);continue ; }
@@ -579,6 +587,7 @@ void __init of_irq_init(const struct of_device_id *matches) err:list_for_each_entry_safe (desc, temp_desc, &intc_desc_list, list) {list_del (&desc->list); +of_node_put (desc->interrupt_parent);of_node_put (desc->dev);kfree (desc); }
drivers/pci/probe.c +4 -1
@@ -1041,7 +1041,10 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent, add_dev:pci_set_bus_msi_domain (child); ret =device_register (&child->dev); -WARN_ON (ret <0 ); +if (WARN_ON (ret <0 )) { +put_device (&child->dev); +return NULL ; + }pcibios_add_bus (child);
drivers/perf/arm_pmu.c +3 -5
@@ -262,12 +262,10 @@ armpmu_add(struct perf_event *event, int flags)if (idx <0 )return idx; -/* -* If there is an event in the counter we are going to use then make -* sure it is disabled. -*/ +/* The newly-allocated counter should be empty */ +WARN_ON_ONCE (hw_events->events[idx]); + event->hw.idx = idx; - armpmu->disable (event); hw_events->events[idx] = event; hwc->state =PERF_HES_STOPPED |PERF_HES_UPTODATE ;
drivers/platform/x86/asus-laptop.c +6 -3
@@ -428,11 +428,14 @@ static int asus_pega_lucid_set(struct asus_laptop *asus, int unit, bool enable)static int pega_acc_axis (struct asus_laptop *asus,int curr,char *method) { +unsigned long long val = (unsigned long long )curr; +acpi_status status;int i, delta; -unsigned long long val; -for (i =0 ; i <PEGA_ACC_RETRIES ; i++) { -acpi_evaluate_integer (asus->handle, method,NULL , &val); +for (i =0 ; i <PEGA_ACC_RETRIES ; i++) { + status =acpi_evaluate_integer (asus->handle, method,NULL , &val); +if (ACPI_FAILURE (status)) +continue ;/* The output is noisy. From reading the ASL * dissassembly, timeout errors are returned with 1's * in the high word, and the lack of locking around
drivers/platform/x86/intel_speed_select_if/isst_if_common.c +1 -1
@@ -74,7 +74,7 @@ static DECLARE_HASHTABLE(isst_hash, 8);static DEFINE_MUTEX (isst_hash_lock);static int isst_store_new_cmd (int cmd,u32 cpu,int mbox_cmd_type,u32 param, -u32 data) +u64 data) {struct isst_cmd *sst_cmd;
drivers/pwm/pwm-fsl-ftm.c +6 -0
@@ -123,6 +123,9 @@ static unsigned int fsl_pwm_ticks_to_ns(struct fsl_pwm_chip *fpc,unsigned long long exval; rate =clk_get_rate (fpc->clk[fpc->period.clk_select]); +if (rate >> fpc->period.clk_ps ==0 ) +return 0 ; + exval = ticks; exval *=1000000000UL ;do_div (exval, rate >> fpc->period.clk_ps);
@@ -195,6 +198,9 @@ static unsigned int fsl_pwm_calculate_duty(struct fsl_pwm_chip *fpc,unsigned int period = fpc->period.mod_period +1 ;unsigned int period_ns =fsl_pwm_ticks_to_ns (fpc, period); +if (!period_ns) +return 0 ; + duty = (unsigned long long )duty_ns * period;do_div (duty, period_ns);
drivers/pwm/pwm-mediatek.c +18 -2
@@ -30,12 +30,14 @@#define PWM45DWIDTH_FIXUP 0x30#define PWMTHRES 0x30#define PWM45THRES_FIXUP 0x34 +#define PWM_CK_26M_SEL 0x210#define PWM_CLK_DIV_MAX 7struct pwm_mediatek_of_data {unsigned int num_pwms;bool pwm45_fixup; +bool has_ck_26m_sel; };/**
@@ -123,17 +125,25 @@ static int pwm_mediatek_config(struct pwm_chip *chip, struct pwm_device *pwm,struct pwm_mediatek_chip *pc =to_pwm_mediatek_chip (chip);u32 clkdiv =0 , cnt_period, cnt_duty, reg_width =PWMDWIDTH , reg_thres =PWMTHRES ; +unsigned long clk_rate;u64 resolution;int ret; ret =pwm_mediatek_clk_enable (chip, pwm); -if (ret <0 )return ret; + clk_rate =clk_get_rate (pc->clk_pwms[pwm->hwpwm]); +if (!clk_rate) +return -EINVAL ; + +/* Make sure we use the bus clock and not the 26MHz clock */ +if (pc->soc->has_ck_26m_sel) +writel (0 , pc->regs +PWM_CK_26M_SEL ); +/* Using resolution in picosecond gets accuracy higher */ resolution = (u64 )NSEC_PER_SEC *1000 ; -do_div (resolution,clk_get_rate (pc->clk_pwms[pwm->hwpwm])); +do_div (resolution, clk_rate); cnt_period =DIV_ROUND_CLOSEST_ULL ((u64 )period_ns *1000 , resolution);while (cnt_period >8191 ) {
@@ -280,31 +290,37 @@ static int pwm_mediatek_remove(struct platform_device *pdev)static const struct pwm_mediatek_of_data mt2712_pwm_data = { .num_pwms =8 , .pwm45_fixup = false, + .has_ck_26m_sel = false, };static const struct pwm_mediatek_of_data mt7622_pwm_data = { .num_pwms =6 , .pwm45_fixup = false, + .has_ck_26m_sel = true, };static const struct pwm_mediatek_of_data mt7623_pwm_data = { .num_pwms =5 , .pwm45_fixup = true, + .has_ck_26m_sel = false, };static const struct pwm_mediatek_of_data mt7628_pwm_data = { .num_pwms =4 , .pwm45_fixup = true, + .has_ck_26m_sel = false, };static const struct pwm_mediatek_of_data mt7629_pwm_data = { .num_pwms =1 , .pwm45_fixup = false, + .has_ck_26m_sel = false, };static const struct pwm_mediatek_of_data mt8516_pwm_data = { .num_pwms =5 , .pwm45_fixup = false, + .has_ck_26m_sel = true, };static const struct of_device_id pwm_mediatek_of_match[] = {
drivers/scsi/pm8001/pm8001_sas.c +1 -0
@@ -893,6 +893,7 @@ static void pm8001_dev_gone_notify(struct domain_device *dev)spin_lock_irqsave (&pm8001_ha->lock, flags); }PM8001_CHIP_DISP ->dereg_dev_req (pm8001_ha, device_id); + pm8001_ha->phy[pm8001_dev->attached_phy].phy_attached =0 ;pm8001_free_dev (pm8001_dev); }else { PM8001_DISC_DBG(pm8001_ha,
drivers/scsi/scsi_transport_iscsi.c +5 -2
@@ -2924,11 +2924,14 @@ iscsi_set_host_param(struct iscsi_transport *transport, }/* see similar check in iscsi_if_set_param() */ -if (strlen (data) > ev->u.set_host_param.len) -return -EINVAL ; +if (strlen (data) > ev->u.set_host_param.len) { + err = -EINVAL ; + goto out; + } err = transport->set_host_param (shost, ev->u.set_host_param.param, data, ev->u.set_host_param.len); +out:scsi_host_put (shost);return err; }
drivers/scsi/st.c +1 -1
@@ -4124,7 +4124,7 @@ static void validate_options(void)*/ static int __init st_setup (char *str) { -int i, len, ints[5 ]; +int i, len, ints[ARRAY_SIZE (parms) +1 ];char *stp; stp =get_options (str,ARRAY_SIZE (ints), ints);
drivers/staging/comedi/drivers/jr3_pci.c +11 -4
@@ -88,6 +88,7 @@ struct jr3_pci_poll_delay {struct jr3_pci_dev_private {struct timer_list timer;struct comedi_device *dev; +bool timer_enable; };union jr3_pci_single_range {
@@ -612,10 +613,11 @@ static void jr3_pci_poll_dev(struct timer_list *t) delay = sub_delay.max; } } +if (devpriv->timer_enable) { + devpriv->timer.expires = jiffies +msecs_to_jiffies (delay); +add_timer (&devpriv->timer); + }spin_unlock_irqrestore (&dev->spinlock, flags); - - devpriv->timer.expires = jiffies +msecs_to_jiffies (delay); -add_timer (&devpriv->timer); } static struct jr3_pci_subdev_private *
@@ -764,6 +766,7 @@ static int jr3_pci_auto_attach(struct comedi_device *dev, devpriv->dev = dev;timer_setup (&devpriv->timer, jr3_pci_poll_dev,0 ); devpriv->timer.expires = jiffies +msecs_to_jiffies (1000 ); + devpriv->timer_enable = true;add_timer (&devpriv->timer);return 0 ;
@@ -773,8 +776,12 @@ static void jr3_pci_detach(struct comedi_device *dev) {struct jr3_pci_dev_private *devpriv = dev->private; -if (devpriv) +if (devpriv) { +spin_lock_bh (&dev->spinlock); + devpriv->timer_enable = false; +spin_unlock_bh (&dev->spinlock);del_timer_sync (&devpriv->timer); + }comedi_pci_detach (dev); }
drivers/thermal/rockchip_thermal.c +1 -0
@@ -360,6 +360,7 @@ static const struct tsadc_table rk3328_code_table[] = { {296, -40000}, {304, -35000}, {313, -30000}, + {322, -25000}, {331, -20000}, {340, -15000}, {349, -10000},
drivers/tty/serial/sifive.c +6 -0
@@ -596,8 +596,11 @@ static void sifive_serial_break_ctl(struct uart_port *port, int break_state)static int sifive_serial_startup (struct uart_port *port) {struct sifive_serial_port *ssp =port_to_sifive_serial_port (port); +unsigned long flags; +uart_port_lock_irqsave (&ssp->port, &flags);__ssp_enable_rxwm (ssp); +uart_port_unlock_irqrestore (&ssp->port, flags);return 0 ; }
@@ -605,9 +608,12 @@ static int sifive_serial_startup(struct uart_port *port)static void sifive_serial_shutdown (struct uart_port *port) {struct sifive_serial_port *ssp =port_to_sifive_serial_port (port); +unsigned long flags; +uart_port_lock_irqsave (&ssp->port, &flags);__ssp_disable_rxwm (ssp);__ssp_disable_txwm (ssp); +uart_port_unlock_irqrestore (&ssp->port, flags); }/**
drivers/usb/cdns3/gadget.c +2 -0
@@ -1920,6 +1920,7 @@ static int cdns3_gadget_ep_disable(struct usb_ep *ep) "%s is already disabled\n", priv_ep->name))return 0 ; +local_bh_disable ();spin_lock_irqsave (&priv_dev->lock, flags);trace_cdns3_gadget_ep_disable (priv_ep);
@@ -1976,6 +1977,7 @@ static int cdns3_gadget_ep_disable(struct usb_ep *ep) priv_ep->flags &= ~EP_ENABLED ;spin_unlock_irqrestore (&priv_dev->lock, flags); +local_bh_enable ();return ret; }
drivers/usb/core/quirks.c +9 -0
@@ -366,6 +366,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x0781, 0x5583), .driver_info = USB_QUIRK_NO_LPM }, { USB_DEVICE(0x0781, 0x5591), .driver_info = USB_QUIRK_NO_LPM }, + /* SanDisk Corp. SanDisk 3.2Gen1 */ + { USB_DEVICE(0x0781, 0x55a3), .driver_info = USB_QUIRK_DELAY_INIT }, + /* Realforce 87U Keyboard */ { USB_DEVICE(0x0853, 0x011b), .driver_info = USB_QUIRK_NO_LPM },
@@ -380,6 +383,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x0904, 0x6103), .driver_info = USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL }, + /* Silicon Motion Flash Drive */ + { USB_DEVICE(0x090c, 0x1000), .driver_info = USB_QUIRK_DELAY_INIT }, + /* Sound Devices USBPre2 */ { USB_DEVICE(0x0926, 0x0202), .driver_info = USB_QUIRK_ENDPOINT_BLACKLIST },
@@ -534,6 +540,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x2040, 0x7200), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, + /* VLI disk */ + { USB_DEVICE(0x2109, 0x0711), .driver_info = USB_QUIRK_NO_LPM }, + /* Raydium Touchscreen */ { USB_DEVICE(0x2386, 0x3114), .driver_info = USB_QUIRK_NO_LPM },
drivers/usb/dwc3/core.c +8 -3
@@ -122,17 +122,19 @@ static void __dwc3_set_mode(struct work_struct *work)if (dwc->dr_mode !=USB_DR_MODE_OTG )return ; +pm_runtime_get_sync (dwc->dev); +if (dwc->current_dr_role ==DWC3_GCTL_PRTCAP_OTG )dwc3_otg_update (dwc,0 );if (!dwc->desired_dr_role) -return ; + goto out;if (dwc->desired_dr_role == dwc->current_dr_role) -return ; + goto out;if (dwc->desired_dr_role ==DWC3_GCTL_PRTCAP_OTG && dwc->edev) -return ; + goto out;switch (dwc->current_dr_role) {case DWC3_GCTL_PRTCAP_HOST :
@@ -196,6 +198,9 @@ static void __dwc3_set_mode(struct work_struct *work)break ; } +out: +pm_runtime_mark_last_busy (dwc->dev); +pm_runtime_put_autosuspend (dwc->dev); }void dwc3_set_mode (struct dwc3 *dwc,u32 mode)
drivers/usb/dwc3/gadget.c +6 -0
@@ -3652,6 +3652,12 @@ static irqreturn_t dwc3_check_event_buf(struct dwc3_event_buffer *evt)if (!count)return IRQ_NONE ; +if (count > evt->length) { +dev_err_ratelimited (dwc->dev,"invalid count(%u) > evt->length(%u)\n" , + count, evt->length); +return IRQ_NONE ; + } + evt->count = count; evt->flags |=DWC3_EVENT_PENDING ;
drivers/usb/gadget/udc/aspeed-vhub/dev.c +3 -0
@@ -542,6 +542,9 @@ int ast_vhub_init_dev(struct ast_vhub *vhub, unsigned int idx) d->vhub = vhub; d->index = idx; d->name =devm_kasprintf (parent,GFP_KERNEL ,"port%d" , idx+1 ); +if (!d->name) +return -ENOMEM ; + d->regs = vhub->regs +0x100 +0x10 * idx;ast_vhub_init_ep0 (vhub, &d->ep0, d);
drivers/usb/host/max3421-hcd.c +7 -0
@@ -1956,6 +1956,12 @@ max3421_remove(struct spi_device *spi)return 0 ; } +static const struct spi_device_id max3421_spi_ids[] = { + {"max3421" }, + { }, +}; +MODULE_DEVICE_TABLE (spi, max3421_spi_ids); +static const struct of_device_id max3421_of_match_table[] = { { .compatible ="maxim,max3421" , }, {},
@@ -1965,6 +1971,7 @@ MODULE_DEVICE_TABLE(of, max3421_of_match_table);static struct spi_driver max3421_driver = { .probe = max3421_probe, .remove = max3421_remove, + .id_table = max3421_spi_ids, .driver = { .name ="max3421-hcd" , .of_match_table =of_match_ptr (max3421_of_match_table),
drivers/usb/host/ohci-pci.c +23 -0
@@ -165,6 +165,25 @@ static int ohci_quirk_amd700(struct usb_hcd *hcd)return 0 ; } +static int ohci_quirk_loongson (struct usb_hcd *hcd) +{ +struct pci_dev *pdev =to_pci_dev (hcd->self.controller); + +/* +* Loongson's LS7A OHCI controller (rev 0x02) has a +* flaw. MMIO register with offset 0x60/64 is treated +* as legacy PS2-compatible keyboard/mouse interface. +* Since OHCI only use 4KB BAR resource, LS7A OHCI's +* 32KB BAR is wrapped around (the 2nd 4KB BAR space +* is the same as the 1st 4KB internally). So add 4KB +* offset (0x1000) to the OHCI registers as a quirk. +*/ +if (pdev->revision ==0x2 ) + hcd->regs +=SZ_4K ;/* SZ_4K = 0x1000 */ + +return 0 ; +} +static int ohci_quirk_qemu (struct usb_hcd *hcd) {struct ohci_hcd *ohci =hcd_to_ohci (hcd);
@@ -224,6 +243,10 @@ static const struct pci_device_id ohci_pci_quirks[] = { PCI_DEVICE(PCI_VENDOR_ID_ATI, 0x4399), .driver_data = (unsigned long )ohci_quirk_amd700, }, + { +PCI_DEVICE (PCI_VENDOR_ID_LOONGSON ,0x7a24 ), + .driver_data = (unsigned long)ohci_quirk_loongson, + }, { .vendor =PCI_VENDOR_ID_APPLE , .device = 0x003f,
drivers/usb/serial/ftdi_sio.c +2 -0
@@ -1071,6 +1071,8 @@ static const struct usb_device_id id_table_combined[] = { { USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 1) }, { USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 2) }, { USB_DEVICE_INTERFACE_NUMBER(ALTERA_VID, ALTERA_UB3_602E_PID, 3) }, +/* Abacus Electrics */ + { USB_DEVICE(FTDI_VID, ABACUS_OPTICAL_PROBE_PID) }, { } /* Terminating entry */ };
drivers/usb/serial/ftdi_sio_ids.h +5 -0
@@ -435,6 +435,11 @@#define LINX_FUTURE_1_PID 0xF44B/* Linx future device */ #define LINX_FUTURE_2_PID 0xF44C/* Linx future device */ +/* +* Abacus Electrics +*/ +#define ABACUS_OPTICAL_PROBE_PID 0xf458/* ABACUS ELECTRICS Optical Probe */ +/* * Oceanic product ids */
drivers/usb/serial/option.c +3 -0
@@ -611,6 +611,7 @@ static void option_instat_callback(struct urb *urb);/* Sierra Wireless products */ #define SIERRA_VENDOR_ID 0x1199#define SIERRA_PRODUCT_EM9191 0x90d3 +#define SIERRA_PRODUCT_EM9291 0x90e3/* UNISOC (Spreadtrum) products */ #define UNISOC_VENDOR_ID 0x1782
@@ -2432,6 +2433,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9291, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9291, 0xff, 0xff, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) }, { USB_DEVICE_INTERFACE_CLASS(0x1bbb, 0x0530, 0xff), /* TCL IK512 MBIM */
drivers/usb/serial/usb-serial-simple.c +7 -0
@@ -101,6 +101,11 @@ DEVICE(nokia, NOKIA_IDS); { USB_DEVICE(0x09d7, 0x0100) } /* NovAtel FlexPack GPS */DEVICE_N (novatel_gps,NOVATEL_IDS ,3 ); +/* OWON electronic test and measurement equipment driver */ +#define OWON_IDS () \ + { USB_DEVICE(0x5345, 0x1234) }/* HDS200 oscilloscopes and others */ +DEVICE (owon,OWON_IDS ); +/* Siemens USB/MPI adapter */ #define SIEMENS_IDS () \ { USB_DEVICE(0x908, 0x0004) }
@@ -135,6 +140,7 @@ static struct usb_serial_driver * const serial_drivers[] = { &motorola_tetra_device, &nokia_device, &novatel_gps_device, + &owon_device, &siemens_mpi_device, &suunto_device, &vivopay_device,
@@ -154,6 +160,7 @@ static const struct usb_device_id id_table[] = {MOTOROLA_TETRA_IDS (),NOKIA_IDS (),NOVATEL_IDS (), +OWON_IDS (),SIEMENS_IDS (),SUUNTO_IDS (), VIVOPAY_IDS(),
drivers/usb/storage/unusual_uas.h +7 -0
@@ -83,6 +83,13 @@ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NO_REPORT_LUNS), +/* Reported-by: Oliver Neukum <[email protected]> */ +UNUSUAL_DEV (0x125f ,0xa94a ,0x0160 ,0x0160 , +"ADATA" , +"Portable HDD CH94" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , +US_FL_NO_ATA_1X ), +/* Reported-by: Benjamin Tissoires <[email protected]> */ UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999, "Initio Corporation",
drivers/video/fbdev/omap2/omapfb/dss/dispc.c +5 -1
@@ -2787,9 +2787,13 @@ int dispc_ovl_setup(enum omap_plane plane, const struct omap_overlay_info *oi, bool mem_to_mem) {int r; -enum omap_overlay_caps caps =dss_feat_get_overlay_caps (plane); +enum omap_overlay_caps caps;enum omap_channel channel; +if (plane ==OMAP_DSS_WB ) +return -EINVAL ; + + caps =dss_feat_get_overlay_caps (plane); channel =dispc_ovl_get_channel_out (plane); DSSDBG("dispc_ovl_setup %d, pa %pad, pa_uv %pad, sw %d, %d,%d, %dx%d ->"
drivers/xen/xenfs/xensyms.c +2 -2
@@ -48,7 +48,7 @@ static int xensyms_next_sym(struct xensyms *xs)return -ENOMEM ;set_xen_guest_handle (symdata->name, xs->name); - symdata->symnum--;/* Rewind */ + symdata->symnum = symnum;/* Rewind */ ret =HYPERVISOR_platform_op (&xs->op);if (ret <0 )
@@ -78,7 +78,7 @@ static void *xensyms_next(struct seq_file *m, void *p, loff_t *pos) {struct xensyms *xs = (struct xensyms *)m->private; - xs->op.u.symdata.symnum = ++(*pos); + *pos = xs->op.u.symdata.symnum;if (xensyms_next_sym (xs))return NULL ;
fs/Kconfig +1 -0
@@ -292,6 +292,7 @@ config GRACE_PERIOD config LOCKD tristate depends on FILE_LOCKING + select CRC32 select GRACE_PERIOD config LOCKD_V4
fs/btrfs/super.c +1 -2
@@ -1380,8 +1380,7 @@ static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry) subvol_name =btrfs_get_subvol_name_from_objectid (info,BTRFS_I (d_inode (dentry))->root->root_key.objectid);if (!IS_ERR (subvol_name)) { -seq_puts (seq,",subvol=" ); -seq_escape (seq, subvol_name," \t\n\\" ); +seq_show_option (seq,"subvol" , subvol_name);kfree (subvol_name); }return 0 ;
fs/ext4/dir.c +7 -5
@@ -72,6 +72,7 @@ int __ext4_check_dir_entry(const char *function, unsigned int line,const char *error_msg =NULL ;const int rlen =ext4_rec_len_from_disk (de->rec_len, dir->i_sb->s_blocksize); +const int next_offset = ((char *) de - buf) + rlen;if (unlikely (rlen <EXT4_DIR_REC_LEN (1 ))) error_msg ="rec_len is smaller than minimal" ;
@@ -79,16 +80,17 @@ int __ext4_check_dir_entry(const char *function, unsigned int line, error_msg ="rec_len % 4 != 0" ; else if (unlikely(rlen < EXT4_DIR_REC_LEN(de->name_len))) error_msg ="rec_len is too small for name_len" ; - else if (unlikely(((char *) de - buf) + rlen > size)) + else if (unlikely(next_offset > size)) error_msg ="directory entry overrun" ; - else if (unlikely(((char *) de - buf) + rlen > - size - EXT4_DIR_REC_LEN(1) && - ((char *) de - buf) + rlen != size)) { + else if (unlikely(next_offset > size - EXT4_DIR_REC_LEN(1) && + next_offset != size)) error_msg ="directory entry too close to block end" ; - } else if (unlikely(le32_to_cpu(de->inode) > le32_to_cpu(EXT4_SB(dir->i_sb)->s_es->s_inodes_count))) error_msg ="inode out of bounds" ; + else if (unlikely(next_offset == size && de->name_len == 1 && + de->name[0] == '.')) + error_msg ="'.' directory cannot be the last in data block" ; else return 0;
fs/ext4/inode.c +50 -19
105 lines not on this page · raw message
fs/ext4/namei.c +1 -1
@@ -1918,7 +1918,7 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,* split it in half by count; each resulting block will have at least * half the space free. */ -if (i >0 ) +if (i >=0 ) split = count - move;else split = count/2 ;
fs/ext4/super.c +37 -24
92 lines not on this page · raw message
fs/ext4/xattr.c +10 -1
@@ -1152,15 +1152,24 @@ ext4_xattr_inode_dec_ref_all(handle_t *handle, struct inode *parent, {struct inode *ea_inode;struct ext4_xattr_entry *entry; +struct ext4_iloc iloc;bool dirty = false;unsigned int ea_ino;int err;int credits; +void *end; + +if (block_csum) + end = (void *)bh->b_data + bh->b_size; +else { +ext4_get_inode_loc (parent, &iloc); + end = (void *)ext4_raw_inode (&iloc) +EXT4_SB (parent->i_sb)->s_inode_size; + }/* One credit for dec ref on ea_inode, one for orphan list addition, */ credits =2 + extra_credits; -for (entry = first; !IS_LAST_ENTRY (entry); +for (entry = first; (void *)entry < end && !IS_LAST_ENTRY (entry); entry =EXT4_XATTR_NEXT (entry)) {if (!entry->e_value_inum)continue ;
fs/fuse/virtio_fs.c +3 -0
@@ -1206,6 +1206,9 @@ static int virtio_fs_get_tree(struct fs_context *fsc)struct fuse_conn *fc;int err; +if (!fsc->source) +return invalf (fsc,"No source specified" ); +/* This gets a reference on virtio_fs object. This ptr gets installed * in fc->iq->priv. Once fuse_conn is going away, it calls ->put() * to drop the reference to this object.
fs/hfs/bnode.c +6 -0
@@ -70,6 +70,12 @@ void hfs_bnode_read_key(struct hfs_bnode *node, void *key, int off)else key_len = tree->max_key_len +1 ; +if (key_len >sizeof (hfs_btree_key) || key_len <1 ) { +memset (key,0 ,sizeof (hfs_btree_key)); +pr_err ("hfs: Invalid key length: %d\n" , key_len); +return ; + } +hfs_bnode_read (node, key, off, key_len); }
fs/hfsplus/bnode.c +6 -0
@@ -69,6 +69,12 @@ void hfs_bnode_read_key(struct hfs_bnode *node, void *key, int off)else key_len = tree->max_key_len +2 ; +if (key_len >sizeof (hfsplus_btree_key) || key_len <1 ) { +memset (key,0 ,sizeof (hfsplus_btree_key)); +pr_err ("hfsplus: Invalid key length: %d\n" , key_len); +return ; + } +hfs_bnode_read (node, key, off, key_len); }
fs/isofs/export.c +1 -1
@@ -180,7 +180,7 @@ static struct dentry *isofs_fh_to_parent(struct super_block *sb,return NULL ;return isofs_export_iget (sb, - fh_len >2 ? ifid->parent_block :0 , + fh_len >3 ? ifid->parent_block :0 , ifid->parent_offset, fh_len >4 ? ifid->parent_generation :0 ); }
fs/jbd2/journal.c +0 -1
@@ -1432,7 +1432,6 @@ int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,/* Log is no longer empty */ write_lock (&journal->j_state_lock); -WARN_ON (!sb->s_sequence); journal->j_flags &= ~JBD2_FLUSHED ;write_unlock (&journal->j_state_lock);
fs/jfs/jfs_dmap.c +7 -3
@@ -204,6 +204,10 @@ int dbMount(struct inode *ipbmap) bmp->db_aglevel =le32_to_cpu (dbmp_le->dn_aglevel); bmp->db_agheight =le32_to_cpu (dbmp_le->dn_agheight); bmp->db_agwidth =le32_to_cpu (dbmp_le->dn_agwidth); +if (!bmp->db_agwidth) { + err = -EINVAL ; + goto err_release_metapage; + } bmp->db_agstart =le32_to_cpu (dbmp_le->dn_agstart); bmp->db_agl2size =le32_to_cpu (dbmp_le->dn_agl2size); if (bmp->db_agl2size > L2MAXL2SIZE - L2MAXAG ||
@@ -3465,7 +3469,7 @@ int dbExtendFS(struct inode *ipbmap, s64 blkno, s64 nblocks) oldl2agsize = bmp->db_agl2size; bmp->db_agl2size = l2agsize; - bmp->db_agsize =1 << l2agsize; + bmp->db_agsize = (s64 )1 << l2agsize;/* compute new number of AG */ agno = bmp->db_numag;
@@ -3728,8 +3732,8 @@ void dbFinalizeBmap(struct inode *ipbmap)* system size is not a multiple of the group size). */ inactfree = (inactags && ag_rem) ? - ((inactags -1 ) << bmp->db_agl2size) + ag_rem - : inactags << bmp->db_agl2size; + (((s64 )inactags -1 ) << bmp->db_agl2size) + ag_rem + : ((s64 )inactags << bmp->db_agl2size);/* determine how many free blocks are in the active * allocation groups plus the average number of free blocks
fs/jfs/jfs_imap.c +1 -1
@@ -458,7 +458,7 @@ struct inode *diReadSpecial(struct super_block *sb, ino_t inum, int secondary) dp += inum %8 ;/* 8 inodes per 4K page */ /* copy on-disk inode to in-memory inode */ -if ((copy_from_dinode (dp, ip)) !=0 ) { +if ((copy_from_dinode (dp, ip) !=0 ) || (ip->i_nlink ==0 )) {/* handle bad return by returning NULL for ip */ set_nlink (ip,1 );/* Don't want iput() deleting it */ iput (ip);
fs/nfs/Kconfig +1 -1
@@ -2,6 +2,7 @@ config NFS_FS tristate "NFS client support" depends on INET && FILE_LOCKING && MULTIUSER + select CRC32 select LOCKD select SUNRPC select NFS_ACL_SUPPORT if NFS_V3_ACL
@@ -194,5 +195,4 @@ config NFS_USE_KERNEL_DNS config NFS_DEBUG bool depends on NFS_FS && SUNRPC_DEBUG - select CRC32 default y
fs/nfs/internal.h +0 -22
@@ -720,33 +720,11 @@ u64 nfs_timespec_to_change_attr(const struct timespec *ts)return ((u64 )ts->tv_sec <<30 ) + ts->tv_nsec; } -#ifdef CONFIG_CRC32 -/** -* nfs_fhandle_hash - calculate the crc32 hash for the filehandle -* @fh - pointer to filehandle -* -* returns a crc32 hash for the filehandle that is compatible with -* the one displayed by "wireshark". -*/ -static inline u32 nfs_fhandle_hash (const struct nfs_fh *fh) -{ -return ~crc32_le (0xFFFFFFFF , &fh->data[0 ], fh->size); -}static inline u32 nfs_stateid_hash (const nfs4_stateid *stateid) {return ~crc32_le (0xFFFFFFFF , &stateid->other[0 ],NFS4_STATEID_OTHER_SIZE ); } -#else -static inline u32 nfs_fhandle_hash (const struct nfs_fh *fh) -{ -return 0 ; -} -static inline u32 nfs_stateid_hash (nfs4_stateid *stateid) -{ -return 0 ; -} -#endif static inline bool nfs_error_is_fatal (int err) {
fs/nfs/nfs4session.h +0 -4
@@ -147,16 +147,12 @@ static inline void nfs4_copy_sessionid(struct nfs4_sessionid *dst, memcpy(dst->data, src->data, NFS4_MAX_SESSIONID_LEN); } -#ifdef CONFIG_CRC32 /* * nfs_session_id_hash - calculate the crc32 hash for the session id * @session - pointer to session */ #define nfs_session_id_hash (sess_id) \ (~crc32_le(0xFFFFFFFF, &(sess_id)->data[0], sizeof((sess_id)->data))) -#else -#define nfs_session_id_hash (session) (0) -#endif #else /* defined(CONFIG_NFS_V4_1) */ static inline int nfs4_init_session (struct nfs_client *clp)
fs/nfsd/Kconfig +1 -0
@@ -4,6 +4,7 @@ config NFSD depends on INET depends on FILE_LOCKING depends on FSNOTIFY + select CRC32 select LOCKD
Lines of this file are not shown. View the raw message.
net/core/filter.c +44 -36
80 lines not on this page · raw message
sound/usb/midi.c +74 -6
80 lines not on this page · raw message
tools/testing/selftests/ublk/test_stripe_04.sh new file +24 -0
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.