Linux 4.9.283
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.9.283 kernel.
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/mtd/gpmc-nand.txt | 2 Makefile | 2 arch/arc/mm/cache.c | 2 arch/arm/boot/compressed/Makefile | 2 arch/arm/boot/dts/tegra20-tamonten.dtsi | 14 - arch/arm/kernel/Makefile | 6 arch/arm/kernel/return_address.c | 4 arch/arm64/boot/dts/exynos/exynos7.dtsi | 2 arch/m68k/emu/nfeth.c | 4 arch/mips/mti-malta/malta-dtshim.c | 2 arch/openrisc/kernel/entry.S | 2 arch/parisc/kernel/signal.c | 6 arch/powerpc/boot/crt0.S | 3 arch/powerpc/kernel/module_64.c | 2 arch/powerpc/perf/hv-gpci.c | 2 arch/s390/kernel/dis.c | 2 arch/s390/kernel/jump_label.c | 2 arch/s390/net/bpf_jit_comp.c | 9 - arch/x86/events/amd/ibs.c | 8 + arch/x86/kernel/reboot.c | 3 arch/x86/kvm/x86.c | 4 arch/x86/mm/init_64.c | 6 arch/x86/xen/enlighten.c | 7 arch/x86/xen/p2m.c | 4 arch/xtensa/Kconfig | 2 arch/xtensa/platforms/iss/console.c | 17 +- certs/Makefile | 8 + drivers/ata/libata-core.c | 6 drivers/ata/sata_dwc_460ex.c | 12 - drivers/base/power/wakeirq.c | 12 + drivers/base/regmap/regmap.c | 2 drivers/bcma/main.c | 6 drivers/block/Kconfig | 4 drivers/block/cryptoloop.c | 2 drivers/clk/mvebu/kirkwood.c | 1 drivers/crypto/mxs-dcp.c | 81 ++++++----- drivers/crypto/omap-sham.c | 2 drivers/crypto/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c | 4 drivers/crypto/qat/qat_c62xvf/adf_c62xvf_hw_data.c | 4 drivers/crypto/qat/qat_common/adf_common_drv.h | 8 - drivers/crypto/qat/qat_common/adf_init.c | 5 drivers/crypto/qat/qat_common/adf_isr.c | 7 drivers/crypto/qat/qat_common/adf_pf2vf_msg.c | 3 drivers/crypto/qat/qat_common/adf_vf2pf_msg.c | 12 - drivers/crypto/qat/qat_common/adf_vf_isr.c | 7 drivers/crypto/qat/qat_dh895xccvf/adf_dh895xccvf_hw_data.c | 4 drivers/crypto/talitos.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.c | 2 drivers/gpu/drm/msm/dsi/dsi.c | 6 drivers/i2c/busses/i2c-highlander.c | 2 drivers/i2c/busses/i2c-iop3xx.c | 6 drivers/i2c/busses/i2c-mt65xx.c | 2 drivers/i2c/busses/i2c-s3c2410.c | 2 drivers/iio/dac/ad5624r_spi.c | 18 ++ drivers/media/i2c/tc358743.c | 2 drivers/media/rc/rc-loopback.c | 2 drivers/media/usb/dvb-usb/nova-t-usb2.c | 6 drivers/media/usb/dvb-usb/vp702x.c | 12 + drivers/media/usb/go7007/go7007-driver.c | 26 --- drivers/media/usb/stkwebcam/stk-webcam.c | 6 drivers/media/usb/uvc/uvc_v4l2.c | 34 +++- drivers/mfd/ab8500-core.c | 2 drivers/mfd/stmpe.c | 4 drivers/mfd/tc3589x.c | 2 drivers/mfd/wm8994-irq.c | 2 drivers/misc/vmw_vmci/vmci_queue_pair.c | 6 drivers/mmc/host/dw_mmc.c | 1 drivers/mmc/host/moxart-mmc.c | 1 drivers/mmc/host/rtsx_pci_sdmmc.c | 36 +++- drivers/mtd/nand/atmel_nand.c | 1 drivers/mtd/nand/cafe_nand.c | 4 drivers/net/dsa/b53/b53_common.c | 3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 2 drivers/net/ethernet/chelsio/cxgb/cxgb2.c | 1 drivers/net/ethernet/qlogic/qed/qed_main.c | 7 drivers/net/ethernet/qlogic/qede/qede_main.c | 2 drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | 1 drivers/net/ethernet/rdc/r6040.c | 9 + drivers/net/ethernet/renesas/sh_eth.c | 1 drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 18 +- drivers/net/ethernet/wiznet/w5100.c | 2 drivers/net/ethernet/xilinx/ll_temac_main.c | 4 drivers/net/phy/dp83640_reg.h | 2 drivers/net/usb/cdc_mbim.c | 5 drivers/net/wireless/ath/ath.h | 3 drivers/net/wireless/ath/ath5k/mac80211-ops.c | 2 drivers/net/wireless/ath/ath6kl/wmi.c | 4 drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 3 drivers/net/wireless/ath/ath9k/htc_drv_main.c | 2 drivers/net/wireless/ath/ath9k/hw.c | 12 - drivers/net/wireless/ath/ath9k/hw.h | 1 drivers/net/wireless/ath/ath9k/main.c | 95 ++++++++++++- drivers/net/wireless/ath/key.c | 41 +++-- drivers/nvme/host/pci.c | 7 drivers/parport/ieee1284_ops.c | 2 drivers/pci/msi.c | 3 drivers/pci/pci.c | 15 +- drivers/pci/quirks.c | 13 - drivers/pci/syscall.c | 4 drivers/pinctrl/pinctrl-single.c | 1 drivers/platform/chrome/cros_ec_proto.c | 9 + drivers/power/supply/axp288_fuel_gauge.c | 4 drivers/power/supply/max17042_battery.c | 8 - drivers/rtc/rtc-tps65910.c | 2 drivers/scsi/BusLogic.c | 4 drivers/soc/qcom/smsm.c | 11 + drivers/spi/spi-pic32.c | 1 drivers/staging/board/board.c | 7 drivers/staging/ks7010/ks7010_sdio.c | 2 drivers/tty/hvc/hvsi.c | 19 ++ drivers/tty/serial/8250/8250_pci.c | 2 drivers/tty/serial/8250/8250_port.c | 3 drivers/tty/serial/jsm/jsm_neo.c | 2 drivers/tty/serial/jsm/jsm_tty.c | 3 drivers/tty/tty_io.c | 4 drivers/usb/gadget/composite.c | 8 - drivers/usb/gadget/function/u_ether.c | 5 drivers/usb/gadget/udc/at91_udc.c | 4 drivers/usb/gadget/udc/mv_u3d_core.c | 19 +- drivers/usb/host/ehci-orion.c | 8 - drivers/usb/host/fotg210-hcd.c | 41 ++--- drivers/usb/host/fotg210.h | 5 drivers/usb/host/ohci-tmio.c | 3 drivers/usb/host/xhci.c | 24 +-- drivers/usb/phy/phy-fsl-usb.c | 2 drivers/usb/phy/phy-isp1301.c | 2 drivers/usb/phy/phy-tahvo.c | 4 drivers/usb/phy/phy-twl6030-usb.c | 5 drivers/usb/serial/mos7720.c | 4 drivers/usb/usbip/vhci_hcd.c | 24 +++ drivers/vfio/Kconfig | 2 drivers/video/fbdev/asiliantfb.c | 3 drivers/video/fbdev/core/fbmem.c | 7 drivers/video/fbdev/kyro/fbdev.c | 8 + drivers/video/fbdev/riva/fbdev.c | 3 fs/btrfs/inode.c | 2 fs/cifs/cifs_unicode.c | 9 - fs/cifs/sess.c | 2 fs/ext4/inline.c | 6 fs/gfs2/acl.c | 27 +-- fs/gfs2/lock_dlm.c | 5 fs/udf/misc.c | 13 + fs/udf/super.c | 25 ++- include/crypto/public_key.h | 4 include/linux/hugetlb.h | 9 + include/linux/pci.h | 5 include/linux/power/max17042_battery.h | 2 include/linux/skbuff.h | 2 include/uapi/linux/serial_reg.h | 1 kernel/events/core.c | 2 kernel/fork.c | 1 kernel/pid_namespace.c | 2 lib/test_bpf.c | 13 + mm/kmemleak.c | 2 mm/page_alloc.c | 8 - net/bluetooth/cmtp/cmtp.h | 2 net/bluetooth/hci_core.c | 14 + net/bluetooth/hci_event.c | 15 ++ net/bluetooth/sco.c | 50 +++--- net/caif/chnl_net.c | 19 -- net/core/flow_dissector.c | 12 + net/dccp/minisocks.c | 2 net/ipv4/icmp.c | 23 ++- net/ipv4/igmp.c | 2 net/ipv4/ip_output.c | 5 net/ipv4/route.c | 46 ++++-- net/ipv4/tcp_input.c | 2 net/ipv4/tcp_ipv4.c | 5 net/l2tp/l2tp_core.c | 4 net/netlabel/netlabel_cipso_v4.c | 12 - net/netlink/af_netlink.c | 4 net/sched/cls_flower.c | 4 net/sunrpc/auth_gss/svcauth_gss.c | 2 net/tipc/socket.c | 2 net/unix/af_unix.c | 2 security/integrity/ima/ima_mok.c | 2 security/smack/smack_access.c | 17 +- sound/core/pcm_lib.c | 2 sound/soc/intel/boards/bytcr_rt5640.c | 9 - 179 files changed, 933 insertions(+), 489 deletions(-)
Adrian Bunk (1):
bnx2x: Fix enabling network interfaces without VFs
Andreas Obergschwandtner (1):
ARM: tegra: tamonten: Fix UART pad setting
Andrew Morton (1):
mm/kmemleak.c: make cond_resched() rate-limiting more efficient
Andy Shevchenko (2):
ata: sata_dwc_460ex: No need to call phy_exit() befre phy_init()
PCI: Sync __pci_register_driver() stub for CONFIG_PCI=n
Anirudh Rayabharam (1):
usbip: give back URBs for unsent unlink requests during cleanup
Austin Kim (1):
IMA: remove -Wmissing-prototypes warning
Baptiste Lepers (1):
events: Reuse value read using READ_ONCE instead of re-reading it
Ben Dooks (1):
ARM: 8918/2: only build return_address() if needed
Bob Peterson (1):
gfs2: Don't call dlm after protocol is unmounted
Christoph Hellwig (1):
cryptoloop: add a deprecation warning
Christophe JAILLET (4):
nvme-pci: Fix an error handling path in 'nvme_probe()'
drm/msm/dsi: Fix some reference counted resource leaks
staging: ks7010: Fix the initialization of the 'sleep_status' structure
mtd: rawnand: cafe: Fix a resource leak in the error handling path of 'cafe_nand_probe()'
Christophe Leroy (1):
crypto: talitos - reduce max key size for SEC1
Colin Ian King (2):
Bluetooth: increase BTNAMSIZ to 21 chars to fix potential buffer overflow
parport: remove non-zero check on count
Damien Le Moal (1):
libata: fix ata_host_start()
Dan Carpenter (2):
Bluetooth: sco: prevent information leak in sco_conn_defer_accept()
ath6kl: wmi: fix an error code in ath6kl_wmi_sync_point()
Daniele Palmas (1):
net: usb: cdc_mbim: avoid altsetting toggling for Telit LN920
David Heidelberg (1):
ARM: 9105/1: atags_to_fdt: don't warn about stack size
Desmond Cheong Zhi Xi (3):
Bluetooth: fix repeated calls to sco_sock_kill
Bluetooth: skip invalid hci_sync_conn_complete_evt
Bluetooth: avoid circular locks in sco_sock_connect
Ding Hui (1):
cifs: fix wrong release in sess_alloc_buffer() failed path
Dinghao Liu (1):
qlcnic: Remove redundant unlock in qlcnic_pinit_from_rom
Dmitry Osipenko (1):
rtc: tps65910: Correct driver module alias
Dongliang Mu (2):
media: dvb-usb: fix uninit-value in dvb_usb_adapter_dvb_init
media: dvb-usb: fix uninit-value in vp702x_read_mac_addr
Eric Dumazet (3):
ipv4: make exception cache less predictible
net-caif: avoid user-triggerable WARN_ON(1) net/af_unix: fix a data-race in unix_dgram_poll
Esben Haabendal (1):
net: ll_temac: Remove left-over debug message
Evgeny Novikov (1):
usb: ehci-orion: Handle errors of clk_prepare_enable() in probe
Fangrui Song (1):
powerpc/boot: Delete unneeded .globl _zimage_start
Florian Fainelli (1):
r6040: Restore MDIO clock frequency after MAC reset
Geert Uytterhoeven (1):
staging: board: Fix uninitialized spinlock when attaching genpd
Giovanni Cabiddu (4):
crypto: qat - do not ignore errors from enable_vf2pf_comms()
crypto: qat - handle both source of interrupt in VF ISR
crypto: qat - do not export adf_iov_putmsg()
crypto: qat - use proper type for vf_mask
Greg Kroah-Hartman (3):
mtd: nand: atmel_nand: remove build warning in atmel_nand_remove()
serial: 8250_pci: make setup_port() parameters explicitly unsigned Linux 4.9.283
Grygorii Strashko (1):
PM / wakeirq: Enable dedicated wakeirq for suspend
Gustavo A. R. Silva (2):
ipv4: ip_output.c: Fix out-of-bounds warning in ip_copy_addrs()
flow_dissector: Fix out-of-bounds warnings
Hans de Goede (3):
power: supply: axp288_fuel_gauge: Report register-address on readb / writeb errors
libata: add ATA_HORKAGE_NO_NCQ_TRIM for Samsung 860 and 870 SSDs
ASoC: Intel: bytcr_rt5640: Move "Platform Clock" routes to the maps for the matching in-/output
Heiko Carstens (1):
s390/jump_label: print real address in a case of a jump label bug
Hoang Le (1):
tipc: increase timeout in tipc_sk_enqueue()
Ilya Leoshkevich (1):
s390/bpf: Fix 64-bit subtraction of the -0x80000000 constant
J. Bruce Fields (1):
rpc: fix gss_svc_init cleanup on failure
Jack Pham (1):
usb: gadget: composite: Allow bMaxPower=0 if self-powered
Jan Kara (2):
gfs2: Don't clear SGID when inheriting ACLs
udf: Check LVID earlier
Jason Gunthorpe (1):
vfio: Use config not menuconfig for VFIO_NOIOMMU
Javier Martinez Canillas (1):
usb: phy: isp1301: Fix build warning when CONFIG_OF is disabled
Jeongtae Park (1):
regmap: fix the offset of register error log
Jiri Slaby (2):
xtensa: ISS: don't panic in rs_init
hvsi: don't panic on tty_register_driver failure
Johan Almbladh (2):
bpf/tests: Fix copy-and-paste error in double word test bpf/tests: Do not PASS tests without actually testing the result
Jonathan Cameron (1):
iio: dac: ad5624r: Fix incorrect handling of an optional regulator.
Jouni Malinen (5):
ath: Use safer key clearing with key cache entries
ath9k: Clear key cache explicitly on disabling hardware
ath: Export ath_hw_keysetmac()
ath: Modify ath_key_delete() to not need full key entry
ath9k: Postpone key cache entry deletion for TXQ frames reference it
Juergen Gross (2):
xen: fix setting of max_pfn in shared_info
xen: reset legacy rtc flag for PV domU
Kai-Heng Feng (1):
Bluetooth: Move shutdown callback before flushing tx and rx queue
Kajol Jain (1):
powerpc/perf/hv-gpci: Fix counter value parsing
Kelly Devilliv (2):
usb: host: fotg210: fix the endpoint's transactional opportunities calculation
usb: host: fotg210: fix the actual_length of an iso packet
Kim Phillips (1):
perf/x86/amd/ibs: Work around erratum #1197
Krzysztof Kozlowski (2):
arm64: dts: exynos: correct GIC CPU interfaces address range on Exynos7
power: supply: max17042: handle fails of reading status register
Krzysztof Wilczyński (1):
PCI: Return ~0 data on pciconfig_read() CAP_SYS_ADMIN failure
Len Baker (1):
CIFS: Fix a potencially linear read overflow
Lin, Zhenpeng (1):
dccp: don't duplicate ccid when cloning dccp sock
Linus Walleij (1):
clk: kirkwood: Fix a clocking boot regression
Liu Jian (1):
igmp: Add ip_mc_list lock in ip_check_mc_rcu
Liu Zixian (1):
mm/hugetlb: initialize hugetlb_usage in mm_init
Maciej W. Rozycki (2):
serial: 8250: Define RX trigger levels for OxSemi 950 devices
scsi: BusLogic: Fix missing pr_cont() use
Maciej Żenczykowski (1):
usb: gadget: u_ether: fix a potential null pointer dereference
Marc Zyngier (1):
mfd: Don't use irq_create_mapping() to resolve a mapping
Marco Chiappero (2):
crypto: qat - fix reuse of completion variable
crypto: qat - fix naming for init/shutdown VF to PF notifications
Marek Behún (2):
PCI: Call Max Payload Size-related fixup quirks early
PCI: Restrict ASMedia ASM1062 SATA Max Payload Size Supported
Marek Marczykowski-Górecki (1):
PCI/MSI: Skip masking MSI-X on Xen PV
Martin KaFai Lau (1):
tcp: seq_file: Avoid skipping sk during tcp_seek_last_pos
Mathias Nyman (1):
Revert "USB: xhci: fix U1/U2 handling for hardware with XHCI_INTEL_HOST quirk set"
Mathieu Desnoyers (1):
ipv4/icmp: l3mdev: Perform icmp error route lookup on source device routing table (v2)
Mauro Carvalho Chehab (1):
media: uvc: don't do DMA on stack
Miaoqing Pan (1):
ath9k: fix sleeping in atomic context
Michael Ellerman (1):
powerpc/module64: Fix comment in R_PPC64_ENTRY handling
Mike Rapoport (1):
x86/mm: Fix kern_addr_valid() to cope with existing but not present entries
Mikulas Patocka (1):
parisc: fix crash with signals and alloca
Miquel Raynal (1):
dt-bindings: mtd: gpmc: Fix the ECC bytes vs. OOB bytes equation
Muchun Song (1):
mm/page_alloc: speed up the iteration of max_order
Nadezda Lutovinova (1):
usb: gadget: mv_u3d: request_irq() after initializing UDC
Nathan Chancellor (1):
net: ethernet: stmmac: Do not use unreachable() in ipq806x_gmac_probe()
Nguyen Dinh Phi (1):
tty: Fix data race between tiocsti() and flush_to_ldisc()
Oleksij Rempel (1):
MIPS: Malta: fix alignment of the devicetree buffer
Patryk Duda (1):
platform/chrome: cros_ec_proto: Send command again when timeout occurs
Paul Blakey (1):
net/sched: cls_flower: Use mask for addr_type
Paul Gortmaker (1):
x86/reboot: Limit Dell Optiplex 990 quirk to early BIOS versions
Pavel Skripkin (5):
media: stkwebcam: fix memory leak in stk_camera_probe
m68k: emu: Fix invalid free in nfeth_cleanup()
media: go7007: remove redundant initialization
net: cipso: fix warnings in netlbl_cipsov4_add_std
Bluetooth: add timeout sanity check to hci_inquiry
Philipp Zabel (1):
tc358743: fix register i2c_rd/wr function fix
Qu Wenruo (1):
Revert "btrfs: compression: don't try to compress if we don't have enough pages"
Rafael J. Wysocki (2):
PCI: PM: Enable PME if it can be signaled from D3cold
PCI: Use pci_update_current_state() in pci_enable_device_flags()
Rafał Miłecki (1):
net: dsa: b53: Fix calculating number of switch ports
Randy Dunlap (4):
xtensa: fix kconfig unmet dependency warning for HAVE_FUTEX_CMPXCHG
openrisc: don't printk() unconditionally
ptp: dp83640: don't define PAGE0
ARC: export clear_user_page() for modules
Sean Anderson (2):
crypto: mxs-dcp - Check for DMA mapping errors
crypto: mxs-dcp - Use sg_mapping_iter to copy data
Sean Young (1):
media: rc-loopback: return number of emitters rather than error
Sebastian Krzyszkowiak (1):
power: supply: max17042_battery: fix typo in MAx17042_TOFF
Sergey Shtylyov (9):
i2c: highlander: add IRQ check
usb: gadget: udc: at91: add IRQ check
usb: phy: fsl-usb: add IRQ check
usb: phy: twl6030: add IRQ checks
usb: host: ohci-tmio: add IRQ check
usb: phy: tahvo: add IRQ check
i2c: iop3xx: fix deferred probing
i2c: s3c2410: fix IRQ check
i2c: mt65xx: fix IRQ check
Shai Malin (2):
qed: Fix the VF msix vectors flow
qede: Fix memset corruption
Stefan Berger (1):
certs: Trigger creation of RSA module signing key if it's not an RSA key
Stephan Gerhold (1):
soc: qcom: smsm: Fix missed interrupts if state changes while masked
Stian Skjelstad (1):
udf_get_extendedattr() had no boundary checks.
Tetsuo Handa (1):
fbmem: don't allow too huge resolutions
Theodore Ts'o (1):
ext4: fix race writing to an inline_data file while its xattrs are changing
Thomas Hebb (1):
mmc: rtsx_pci: Fix long reads when clock is prescaled
Tianjia Zhang (1):
Smack: Fix wrong semantics in smk_access_entry()
Tom Rix (1):
USB: serial: mos7720: improve OOM-handling in read_mos_reg()
Tony Lindgren (4):
crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop()
spi: spi-pic32: Fix issue with uninitialized dma_slave_config
mmc: dw_mmc: Fix issue with uninitialized dma_slave_config
mmc: moxart: Fix issue with uninitialized dma_slave_config
Tuo Li (1):
gpu: drm: amd: amdgpu: amdgpu_i2c: fix possible uninitialized-variable access in amdgpu_i2c_router_select_ddc_port()
Vasily Averin (1):
memcg: enable accounting for pids in nested pid namespaces
Vasily Gorbik (1):
s390/disassembler: correct disassembly lines alignment
Wang Hai (1):
VMCI: fix NULL pointer dereference when unmapping queue pair
Xiyu Yang (1):
net/l2tp: Fix reference count leak in l2tp_udp_recv_core
Yajun Deng (1):
netlink: Deal with ESRCH error in nlmsg_notify()
Yang Li (1):
ethtool: Fix an error code in cxgb2.c
Yang Yingliang (1):
net: w5100: check return value after calling platform_get_resource()
Yoshihiro Shimoda (1):
net: renesas: sh_eth: Fix freeing wrong tx descriptor
Zekun Shen (1):
ath9k: fix OOB read ar9300_eeprom_restore_internal
Zelin Deng (1):
KVM: x86: Update vCPU's hv_clock before back to guest when tsc_offset is adjusted
Zenghui Yu (1):
bcma: Fix memory leak for internally-handled cores
Zhen Lei (1):
pinctrl: single: Fix error return code in pcs_parse_bits_in_pinctrl_entry()
Zheyu Ma (5):
video: fbdev: kyro: fix a DoS bug by restricting user input
tty: serial: jsm: hold port lock when reporting modem line changes
video: fbdev: asiliantfb: Error out if 'pixclock' equals zero
video: fbdev: kyro: Error out if 'pixclock' equals zero
video: fbdev: riva: Error out if 'pixclock' equals zero
Zubin Mithra (1):
ALSA: pcm: fix divide error in snd_pcm_lib_ioctl
zhenggy (1):
tcp: fix tp->undo_retrans accounting in tcp_sacktag_one()
zhenwei pi (1):
crypto: public_key: fix overflow during implicit conversion
王贇 (1):
net: fix NULL pointer reference in cipso_v4_doi_free
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/mtd/gpmc-nand.txt +1 -1
@@ -123,7 +123,7 @@ on various other factors also like; so the device should have enough free bytes available its OOB/Spare area to accommodate ECC for entire page. In general following expression helps in determining if given device can accommodate ECC syndrome: - "2 + (PAGESIZE / 512) * ECC_BYTES" >= OOBSIZE" + "2 + (PAGESIZE / 512) * ECC_BYTES" <= OOBSIZE" where OOBSIZE number of bytes in OOB/spare area PAGESIZE number of bytes in main-area of device page
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 282 +SUBLEVEL = 283 EXTRAVERSION = NAME = Roaring Lionus
arch/arc/mm/cache.c +1 -1
@@ -923,7 +923,7 @@ void clear_user_page(void *to, unsigned long u_vaddr, struct page *page)clear_page (to);clear_bit (PG_dc_clean, &page->flags); } - +EXPORT_SYMBOL (clear_user_page);/********************************************************************** * Explicit Cache flush request from user space via syscall
arch/arm/boot/compressed/Makefile +2 -0
@@ -86,6 +86,8 @@ $(addprefix $(obj)/,$(libfdt_objs) atags_to_fdt.o): \ $(addprefix $(obj)/,$(libfdt_hdrs)) ifeq ($(CONFIG_ARM_ATAG_DTB_COMPAT),y) +CFLAGS_REMOVE_atags_to_fdt.o += -Wframe-larger-than=${CONFIG_FRAME_WARN} +CFLAGS_atags_to_fdt.o += -Wframe-larger-than=1280 OBJS += $(libfdt_objs) atags_to_fdt.o endif
arch/arm/boot/dts/tegra20-tamonten.dtsi +7 -7
@@ -184,8 +184,9 @@ nvidia,pins = "ata", "atb", "atc", "atd", "ate", "cdev1", "cdev2", "dap1", "dtb", "gma", "gmb", "gmc", "gmd", "gme", "gpu7", - "gpv", "i2cp", "pta", "rm", "slxa", - "slxk", "spia", "spib", "uac"; + "gpv", "i2cp", "irrx", "irtx", "pta", + "rm", "slxa", "slxk", "spia", "spib", + "uac"; nvidia,pull = <TEGRA_PIN_PULL_NONE>; nvidia,tristate = <TEGRA_PIN_DISABLE>; };
@@ -210,7 +211,7 @@ conf_ddc { nvidia,pins = "ddc", "dta", "dtd", "kbca", "kbcb", "kbcc", "kbcd", "kbce", "kbcf", - "sdc"; + "sdc", "uad", "uca"; nvidia,pull = <TEGRA_PIN_PULL_UP>; nvidia,tristate = <TEGRA_PIN_DISABLE>; };
@@ -220,10 +221,9 @@ "lvp0", "owc", "sdb"; nvidia,tristate = <TEGRA_PIN_ENABLE>; }; - conf_irrx { - nvidia,pins = "irrx", "irtx", "sdd", "spic", - "spie", "spih", "uaa", "uab", "uad", - "uca", "ucb"; + conf_sdd { + nvidia,pins = "sdd", "spic", "spie", "spih", + "uaa", "uab", "ucb"; nvidia,pull = <TEGRA_PIN_PULL_UP>; nvidia,tristate = <TEGRA_PIN_ENABLE>; };
arch/arm/kernel/Makefile +5 -1
@@ -16,10 +16,14 @@ CFLAGS_REMOVE_return_address.o = -pg # Object file lists. obj-y := elf.o entry-common.o irq.o opcodes.o \ - process.o ptrace.o reboot.o return_address.o \ + process.o ptrace.o reboot.o \ setup.o signal.o sigreturn_codes.o \ stacktrace.o sys_arm.o time.o traps.o +ifneq ($(CONFIG_ARM_UNWIND),y) +obj-$(CONFIG_FRAME_POINTER) += return_address.o +endif + obj-$(CONFIG_ATAGS) += atags_parse.o obj-$(CONFIG_ATAGS_PROC) += atags_proc.o obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += atags_compat.o
arch/arm/kernel/return_address.c +0 -4
@@ -10,8 +10,6 @@*/ #include <linux/export.h> #include <linux/ftrace.h> - -#if defined(CONFIG_FRAME_POINTER ) && !defined(CONFIG_ARM_UNWIND )#include <linux/sched.h> #include <asm/stacktrace.h>
@@ -56,6 +54,4 @@ void *return_address(unsigned int level)return NULL ; } -#endif /* if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) */ -EXPORT_SYMBOL_GPL (return_address);
arch/arm64/boot/dts/exynos/exynos7.dtsi +1 -1
@@ -94,7 +94,7 @@ #address-cells = <0>; interrupt-controller; reg = <0x11001000 0x1000>, - <0x11002000 0x1000>, + <0x11002000 0x2000>, <0x11004000 0x2000>, <0x11006000 0x2000>; };
arch/m68k/emu/nfeth.c +2 -2
@@ -260,8 +260,8 @@ static void __exit nfeth_cleanup(void)for (i =0 ; i <MAX_UNIT ; i++) {if (nfeth_dev[i]) { -unregister_netdev (nfeth_dev[0 ]); -free_netdev (nfeth_dev[0 ]); +unregister_netdev (nfeth_dev[i]); +free_netdev (nfeth_dev[i]); } }free_irq (nfEtherIRQ, nfeth_interrupt);
arch/mips/mti-malta/malta-dtshim.c +1 -1
@@ -26,7 +26,7 @@#define ROCIT_CONFIG_GEN1_MEMMAP_SHIFT 8#define ROCIT_CONFIG_GEN1_MEMMAP_MASK (0xf << 8) -static unsigned char fdt_buf[16 <<10 ]__initdata ; +static unsigned char fdt_buf[16 <<10 ]__initdata __aligned(8) ;/* determined physical memory size, not overridden by command line args */ extern unsigned long physical_memsize;
arch/openrisc/kernel/entry.S +2 -0
@@ -491,6 +491,7 @@ EXCEPTION_ENTRY(_external_irq_handler) l.bnf 1f // ext irq enabled, all ok. l.nop +#ifdef CONFIG_PRINTK l.addi r1,r1,-0x8 l.movhi r3,hi(42f) l.ori r3,r3,lo(42f)
@@ -504,6 +505,7 @@ EXCEPTION_ENTRY(_external_irq_handler) .string "\n\rESR interrupt bug: in _external_irq_handler (ESR %x)\n\r" .align 4 .previous +#endif l.ori r4,r4,SPR_SR_IEE // fix the bug // l.sw PT_SR(r1),r4
arch/parisc/kernel/signal.c +6 -0
@@ -239,6 +239,12 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs,#endif usp = (regs->gr[30 ] & ~(0x01UL )); +#ifdef CONFIG_64BIT +if (is_compat_task ()) { +/* The gcc alloca implementation leaves garbage in the upper 32 bits of sp */ + usp = (compat_uint_t )usp; + } +#endif /*FIXME: frame_size parameter is unused, remove it. */ frame =get_sigframe (&ksig->ka, usp,sizeof (*frame));
arch/powerpc/boot/crt0.S +0 -3
@@ -49,9 +49,6 @@ p_end: .long _end p_pstack: .long _platform_stack_top #endif - .globl _zimage_start - /* Clang appears to require the .weak directive to be after the symbol - * is defined. See https://bugs.llvm.org/show_bug.cgi?id=38921 */ .weak _zimage_start _zimage_start: .globl _zimage_start_lib
arch/powerpc/kernel/module_64.c +1 -1
@@ -691,7 +691,7 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,/* * If found, replace it with: * addis r2, r12, (.TOC.-func)@ha -* addi r2, r12, (.TOC.-func)@l +* addi r2, r2, (.TOC.-func)@l */ ((uint32_t *)location)[0 ] =0x3c4c0000 +PPC_HA (value); ((uint32_t *)location)[1 ] =0x38420000 +PPC_LO (value);
arch/powerpc/perf/hv-gpci.c +1 -1
@@ -168,7 +168,7 @@ static unsigned long single_gpci_request(u32 req, u32 starting_index,*/ count =0 ;for (i = offset; i < offset + length; i++) - count |= arg->bytes[i] << (i - offset); + count |= (u64)(arg->bytes[i]) << ((length -1 - (i - offset)) *8 ); *value = count; out:
arch/s390/kernel/dis.c +1 -1
@@ -2018,7 +2018,7 @@ void show_code(struct pt_regs *regs) start += opsize;pr_cont ("%s" , buffer); ptr = buffer; - ptr +=sprintf (ptr,"\n\t " ); + ptr +=sprintf (ptr,"\n " ); hops++; }pr_cont ("\n" );
arch/s390/kernel/jump_label.c +1 -1
@@ -43,7 +43,7 @@ static void jump_label_bug(struct jump_entry *entry, struct insn *expected,unsigned char *ipe = (unsigned char *)expected;unsigned char *ipn = (unsigned char *)new; -pr_emerg ("Jump label code mismatch at %pS [%p]\n" , ipc, ipc); +pr_emerg ("Jump label code mismatch at %pS [%px]\n" , ipc, ipc);pr_emerg ("Found: %6ph\n" , ipc);pr_emerg ("Expected: %6ph\n" , ipe);pr_emerg ("New: %6ph\n" , ipn);
arch/s390/net/bpf_jit_comp.c +7 -2
@@ -625,8 +625,13 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int icase BPF_ALU64 |BPF_SUB |BPF_K :/* dst = dst - imm */ if (!imm)break ; -/* agfi %dst,-imm */ -EMIT6_IMM (0xc2080000 , dst_reg, -imm); +if (imm ==-0x80000000 ) { +/* algfi %dst,0x80000000 */ +EMIT6_IMM (0xc20a0000 , dst_reg,0x80000000 ); + }else { +/* agfi %dst,-imm */ +EMIT6_IMM (0xc2080000 , dst_reg, -imm); + }break ;/* * BPF_MUL
arch/x86/events/amd/ibs.c +8 -0
@@ -89,6 +89,7 @@ struct perf_ibs {unsigned long offset_mask[1 ];int offset_max; unsigned int fetch_count_reset_broken : 1; + unsigned int fetch_ignore_if_zero_rip : 1;struct cpu_perf_ibs __percpu *pcpu;struct attribute **format_attrs;
@@ -673,6 +674,10 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)if (check_rip && (ibs_data.regs[2 ] &IBS_RIP_INVALID )) { regs.flags &= ~PERF_EFLAGS_EXACT ; }else { +/* Workaround for erratum #1197 */ +if (perf_ibs->fetch_ignore_if_zero_rip && !(ibs_data.regs[1 ])) + goto out; +set_linear_ip (®s, ibs_data.regs[1 ]); regs.flags |=PERF_EFLAGS_EXACT ; }
@@ -766,6 +771,9 @@ static __init void perf_event_ibs_init(void)if (boot_cpu_data.x86 >=0x16 && boot_cpu_data.x86 <=0x18 ) perf_ibs_fetch.fetch_count_reset_broken =1 ; +if (boot_cpu_data.x86 ==0x19 && boot_cpu_data.x86_model <0x10 ) + perf_ibs_fetch.fetch_ignore_if_zero_rip =1 ; +perf_ibs_pmu_init (&perf_ibs_fetch,"ibs_fetch" );if (ibs_caps &IBS_CAPS_OPCNT ) {
arch/x86/kernel/reboot.c +2 -1
@@ -389,10 +389,11 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { }, {/* Handle problems with rebooting on the OptiPlex 990. */ .callback = set_pci_reboot, - .ident = "Dell OptiPlex 990", + .ident = "Dell OptiPlex 990 BIOS A0x", .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"Dell Inc." ),DMI_MATCH (DMI_PRODUCT_NAME ,"OptiPlex 990" ), + DMI_MATCH(DMI_BIOS_VERSION, "A0"), }, }, { /* Handle problems with rebooting on Dell 300's */
arch/x86/kvm/x86.c +4 -0
@@ -2315,6 +2315,10 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)if (!msr_info->host_initiated) {s64 adj = data - vcpu->arch.ia32_tsc_adjust_msr;adjust_tsc_offset_guest (vcpu, adj); +/* Before back to guest, tsc_timestamp must be adjusted +* as well, otherwise guest's percpu pvclock time could jump. +*/ +kvm_make_request (KVM_REQ_CLOCK_UPDATE , vcpu); } vcpu->arch.ia32_tsc_adjust_msr = data; }
arch/x86/mm/init_64.c +3 -3
@@ -1126,21 +1126,21 @@ int kern_addr_valid(unsigned long addr)return 0 ; pud =pud_offset (pgd, addr); -if (pud_none (*pud)) +if (!pud_present (*pud))return 0 ;if (pud_large (*pud))return pfn_valid (pud_pfn (*pud)); pmd =pmd_offset (pud, addr); -if (pmd_none (*pmd)) +if (!pmd_present (*pmd))return 0 ;if (pmd_large (*pmd))return pfn_valid (pmd_pfn (*pmd)); pte =pte_offset_kernel (pmd, addr); -if (pte_none (*pte)) +if (!pte_present (*pte))return 0 ;return pfn_valid (pte_pfn (*pte));
arch/x86/xen/enlighten.c +7 -0
@@ -1576,6 +1576,11 @@ static int xen_cpuhp_setup(void)return rc >=0 ?0 : rc; } +static void __init xen_domu_set_legacy_features (void ) +{ + x86_platform.legacy.rtc =0 ; +} +/* First C function to be called on Xen boot */ asmlinkage __visible void __init xen_start_kernel(void) {
@@ -1741,6 +1746,8 @@ asmlinkage __visible void __init xen_start_kernel(void)add_preferred_console ("hvc" ,0 ,NULL );if (pci_xen) x86_init.pci.arch_init = pci_xen_init; + x86_platform.set_legacy_features = + xen_domu_set_legacy_features; }else { const struct dom0_vga_console_info *info = (void *)((char *)xen_start_info +
arch/x86/xen/p2m.c +2 -2
@@ -623,8 +623,8 @@ int xen_alloc_p2m_entry(unsigned long pfn) }/* Expanded the p2m? */ -if (pfn > xen_p2m_last_pfn) { - xen_p2m_last_pfn = pfn; +if (pfn >= xen_p2m_last_pfn) { + xen_p2m_last_pfn =ALIGN (pfn +1 ,P2M_PER_PAGE ); HYPERVISOR_shared_info->arch.max_pfn = xen_p2m_last_pfn; }
arch/xtensa/Kconfig +1 -1
@@ -17,7 +17,7 @@ config XTENSA select HAVE_DMA_API_DEBUG select HAVE_EXIT_THREAD select HAVE_FUNCTION_TRACER - select HAVE_FUTEX_CMPXCHG if !MMU + select HAVE_FUTEX_CMPXCHG if !MMU && FUTEX select HAVE_HW_BREAKPOINT if PERF_EVENTS select HAVE_IRQ_TIME_ACCOUNTING select HAVE_MEMBLOCK
arch/xtensa/platforms/iss/console.c +14 -3
@@ -182,9 +182,13 @@ static const struct tty_operations serial_ops = {int __init rs_init (void ) { -tty_port_init (&serial_port); +int ret; serial_driver =alloc_tty_driver (SERIAL_MAX_NUM_LINES ); +if (!serial_driver) +return -ENOMEM ; + +tty_port_init (&serial_port);printk ("%s %s\n" , serial_name, serial_version);
@@ -204,8 +208,15 @@ int __init rs_init(void)tty_set_operations (serial_driver, &serial_ops);tty_port_link_device (&serial_port, serial_driver,0 ); -if (tty_register_driver (serial_driver)) -panic ("Couldn't register serial driver\n" ); + ret =tty_register_driver (serial_driver); +if (ret) { +pr_err ("Couldn't register serial driver\n" ); +tty_driver_kref_put (serial_driver); +tty_port_destroy (&serial_port); + +return ret; + } +return 0 ; }
certs/Makefile +8 -0
@@ -39,11 +39,19 @@ endif redirect_openssl = 2>&1 quiet_redirect_openssl = 2>&1 silent_redirect_openssl = 2>/dev/null +openssl_available = $(shell openssl help 2>/dev/null && echo yes) # We do it this way rather than having a boolean option for enabling an # external private key, because 'make randconfig' might enable such a # boolean option and we unfortunately can't make it depend on !RANDCONFIG. ifeq ($(CONFIG_MODULE_SIG_KEY),"certs/signing_key.pem") + +ifeq ($(openssl_available),yes) +X509TEXT=$(shell openssl x509 -in "certs/signing_key.pem" -text 2>/dev/null) + +$(if $(findstring rsaEncryption,$(X509TEXT)),,$(shell rm -f "certs/signing_key.pem")) +endif + $(obj)/signing_key.pem: $(obj)/x509.genkey @$(kecho) "###" @$(kecho) "### Now generating an X.509 key pair to be used for signing modules."
drivers/ata/libata-core.c +5 -1
@@ -4447,6 +4447,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { ATA_HORKAGE_ZERO_AFTER_TRIM, }, {"Samsung SSD 850*" ,NULL ,ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, }, + { "Samsung SSD 860*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | + ATA_HORKAGE_ZERO_AFTER_TRIM, }, + { "Samsung SSD 870*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | + ATA_HORKAGE_ZERO_AFTER_TRIM, }, { "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },
@@ -6213,7 +6217,7 @@ int ata_host_start(struct ata_host *host) have_stop =1 ; } -if (host->ops->host_stop) +if (host->ops && host->ops->host_stop) have_stop =1 ;if (have_stop) {
drivers/ata/sata_dwc_460ex.c +4 -8
@@ -1253,24 +1253,20 @@ static int sata_dwc_probe(struct platform_device *ofdev) irq =irq_of_parse_and_map (np,0 );if (irq ==NO_IRQ ) {dev_err (&ofdev->dev,"no SATA DMA irq\n" ); - err = -ENODEV ; - goto error_out; +return -ENODEV ; }#ifdef CONFIG_SATA_DWC_OLD_DMA if (!of_find_property (np,"dmas" ,NULL )) { err =sata_dwc_dma_init_old (ofdev, hsdev);if (err) - goto error_out; +return err; }#endif hsdev->phy =devm_phy_optional_get (hsdev->dev,"sata-phy" ); -if (IS_ERR (hsdev->phy)) { - err =PTR_ERR (hsdev->phy); - hsdev->phy =NULL ; - goto error_out; - } +if (IS_ERR (hsdev->phy)) +return PTR_ERR (hsdev->phy); err =phy_init (hsdev->phy);if (err)
drivers/base/power/wakeirq.c +10 -2
@@ -319,8 +319,12 @@ void dev_pm_arm_wake_irq(struct wake_irq *wirq)if (!wirq)return ; -if (device_may_wakeup (wirq->dev)) +if (device_may_wakeup (wirq->dev)) { +if (wirq->status &WAKE_IRQ_DEDICATED_ALLOCATED ) +enable_irq (wirq->irq); +enable_irq_wake (wirq->irq); + } }/**
@@ -335,6 +339,10 @@ void dev_pm_disarm_wake_irq(struct wake_irq *wirq)if (!wirq)return ; -if (device_may_wakeup (wirq->dev)) +if (device_may_wakeup (wirq->dev)) {disable_irq_wake (wirq->irq); + +if (wirq->status &WAKE_IRQ_DEDICATED_ALLOCATED ) +disable_irq_nosync (wirq->irq); + } }
drivers/base/regmap/regmap.c +1 -1
@@ -1375,7 +1375,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,if (ret) {dev_err (map->dev,"Error in caching of register: %x ret: %d\n" , - reg + i, ret); + reg +regmap_get_offset (map, i), ret);return ret; } }
drivers/bcma/main.c +3 -3
@@ -239,6 +239,7 @@ EXPORT_SYMBOL(bcma_core_irq);void bcma_prepare_core (struct bcma_bus *bus,struct bcma_device *core) { +device_initialize (&core->dev); core->dev.release = bcma_release_core_dev; core->dev.bus = &bcma_bus_type;dev_set_name (&core->dev,"bcma%d:%d" , bus->num, core->core_index);
@@ -302,11 +303,10 @@ static void bcma_register_core(struct bcma_bus *bus, struct bcma_device *core) {int err; - err =device_register (&core->dev); + err =device_add (&core->dev);if (err) {bcma_err (bus,"Could not register dev for core 0x%03X\n" , core->id.id); -put_device (&core->dev);return ; } core->dev_registered = true;
@@ -397,7 +397,7 @@ void bcma_unregister_cores(struct bcma_bus *bus)/* Now noone uses internally-handled cores, we can free them */ list_for_each_entry_safe (core, tmp, &bus->cores, list) {list_del (&core->list); -kfree (core); +put_device (&core->dev); } }
drivers/block/Kconfig +2 -2
@@ -257,7 +257,7 @@ config BLK_DEV_LOOP_MIN_COUNT dynamically allocated with the /dev/loop-control interface. config BLK_DEV_CRYPTOLOOP - tristate "Cryptoloop Support" + tristate "Cryptoloop Support (DEPRECATED)" select CRYPTO select CRYPTO_CBC depends on BLK_DEV_LOOP
@@ -269,7 +269,7 @@ config BLK_DEV_CRYPTOLOOP WARNING: This device is not safe for journaled file systems like ext3 or Reiserfs. Please use the Device Mapper crypto module instead, which can be configured to be on-disk compatible with the - cryptoloop device. + cryptoloop device. cryptoloop support will be removed in Linux 5.16. source "drivers/block/drbd/Kconfig"
drivers/block/cryptoloop.c +2 -0
@@ -203,6 +203,8 @@ init_cryptoloop(void)if (rc)printk (KERN_ERR "cryptoloop: loop_register_transfer failed\n" ); +else +pr_warn ("the cryptoloop driver has been deprecated and will be removed in in Linux 5.16\n" );return rc; }
drivers/clk/mvebu/kirkwood.c +1 -0
@@ -254,6 +254,7 @@ static const char *powersave_parents[] = {static const struct clk_muxing_soc_desc kirkwood_mux_desc[]__initconst = { {"powersave" , powersave_parents,ARRAY_SIZE (powersave_parents),11 ,1 ,0 }, + { } }; static struct clk *clk_muxing_get_src(
drivers/crypto/mxs-dcp.c +44 -37
161 lines not on this page · raw message
drivers/crypto/omap-sham.c +1 -1
@@ -1745,7 +1745,7 @@ static void omap_sham_done_task(unsigned long data)if (test_and_clear_bit (FLAGS_OUTPUT_READY , &dd->flags)) goto finish; }else if (test_bit (FLAGS_DMA_READY , &dd->flags)) { -if (test_and_clear_bit (FLAGS_DMA_ACTIVE , &dd->flags)) { +if (test_bit (FLAGS_DMA_ACTIVE , &dd->flags)) {omap_sham_update_dma_stop (dd);if (dd->err) { err = dd->err;
drivers/crypto/qat/qat_c3xxxvf/adf_c3xxxvf_hw_data.c +2 -2
@@ -123,10 +123,10 @@ void adf_init_hw_data_c3xxxiov(struct adf_hw_device_data *hw_data) hw_data->enable_error_correction = adf_vf_void_noop; hw_data->init_admin_comms = adf_vf_int_noop; hw_data->exit_admin_comms = adf_vf_void_noop; - hw_data->send_admin_init = adf_vf2pf_init; + hw_data->send_admin_init = adf_vf2pf_notify_init; hw_data->init_arb = adf_vf_int_noop; hw_data->exit_arb = adf_vf_void_noop; - hw_data->disable_iov = adf_vf2pf_shutdown; + hw_data->disable_iov = adf_vf2pf_notify_shutdown; hw_data->get_accel_mask = get_accel_mask; hw_data->get_ae_mask = get_ae_mask; hw_data->get_num_accels = get_num_accels;
drivers/crypto/qat/qat_c62xvf/adf_c62xvf_hw_data.c +2 -2
@@ -123,10 +123,10 @@ void adf_init_hw_data_c62xiov(struct adf_hw_device_data *hw_data) hw_data->enable_error_correction = adf_vf_void_noop; hw_data->init_admin_comms = adf_vf_int_noop; hw_data->exit_admin_comms = adf_vf_void_noop; - hw_data->send_admin_init = adf_vf2pf_init; + hw_data->send_admin_init = adf_vf2pf_notify_init; hw_data->init_arb = adf_vf_int_noop; hw_data->exit_arb = adf_vf_void_noop; - hw_data->disable_iov = adf_vf2pf_shutdown; + hw_data->disable_iov = adf_vf2pf_notify_shutdown; hw_data->get_accel_mask = get_accel_mask; hw_data->get_ae_mask = get_ae_mask; hw_data->get_num_accels = get_num_accels;
drivers/crypto/qat/qat_common/adf_common_drv.h +4 -4
@@ -239,8 +239,8 @@ void adf_enable_vf2pf_interrupts(struct adf_accel_dev *accel_dev,void adf_enable_pf2vf_interrupts (struct adf_accel_dev *accel_dev);void adf_disable_pf2vf_interrupts (struct adf_accel_dev *accel_dev); -int adf_vf2pf_init (struct adf_accel_dev *accel_dev); -void adf_vf2pf_shutdown (struct adf_accel_dev *accel_dev); +int adf_vf2pf_notify_init (struct adf_accel_dev *accel_dev); +void adf_vf2pf_notify_shutdown (struct adf_accel_dev *accel_dev);int adf_init_pf_wq (void );void adf_exit_pf_wq (void );int adf_init_vf_wq (void );
@@ -263,12 +263,12 @@ static inline void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev) { } -static inline int adf_vf2pf_init (struct adf_accel_dev *accel_dev) +static inline int adf_vf2pf_notify_init (struct adf_accel_dev *accel_dev) {return 0 ; } -static inline void adf_vf2pf_shutdown (struct adf_accel_dev *accel_dev) +static inline void adf_vf2pf_notify_shutdown (struct adf_accel_dev *accel_dev) { }
drivers/crypto/qat/qat_common/adf_init.c +3 -2
@@ -101,6 +101,7 @@ int adf_dev_init(struct adf_accel_dev *accel_dev)struct service_hndl *service;struct list_head *list_itr;struct adf_hw_device_data *hw_data = accel_dev->hw_device; +int ret;if (!hw_data) { dev_err(&GET_DEV(accel_dev),
@@ -167,9 +168,9 @@ int adf_dev_init(struct adf_accel_dev *accel_dev) } hw_data->enable_error_correction (accel_dev); - hw_data->enable_vf2pf_comms (accel_dev); + ret = hw_data->enable_vf2pf_comms (accel_dev); -return 0 ; +return ret; }EXPORT_SYMBOL_GPL (adf_dev_init);
drivers/crypto/qat/qat_common/adf_isr.c +4 -3
@@ -59,6 +59,8 @@#include "adf_transport_access_macros.h" #include "adf_transport_internal.h" +#define ADF_MAX_NUM_VFS 32 +static int adf_enable_msix (struct adf_accel_dev *accel_dev) {struct adf_accel_pci *pci_dev_info = &accel_dev->accel_pci_dev;
@@ -111,7 +113,7 @@ static irqreturn_t adf_msix_isr_ae(int irq, void *dev_ptr)struct adf_bar *pmisc = &GET_BARS (accel_dev)[hw_data->get_misc_bar_id (hw_data)];void __iomem *pmisc_bar_addr = pmisc->virt_addr; -u32 vf_mask; +unsigned long vf_mask;/* Get the interrupt sources triggered by VFs */ vf_mask = ((ADF_CSR_RD(pmisc_bar_addr, ADF_ERRSOU5) &
@@ -132,8 +134,7 @@ static irqreturn_t adf_msix_isr_ae(int irq, void *dev_ptr)* unless the VF is malicious and is attempting to * flood the host OS with VF2PF interrupts. */ -for_each_set_bit (i, (const unsigned long *)&vf_mask, - (sizeof (vf_mask) *BITS_PER_BYTE )) { +for_each_set_bit (i, &vf_mask,ADF_MAX_NUM_VFS ) { vf_info = accel_dev->pf.vf_info + i;if (!__ratelimit (&vf_info->vf2pf_ratelimit)) {
drivers/crypto/qat/qat_common/adf_pf2vf_msg.c +2 -1
@@ -231,7 +231,6 @@ int adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr)return ret; } -EXPORT_SYMBOL_GPL (adf_iov_putmsg);void adf_vf2pf_req_hndl (struct adf_accel_vf_info *vf_info) {
@@ -361,6 +360,8 @@ static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev) msg |=ADF_PFVF_COMPATIBILITY_VERSION <<ADF_VF2PF_COMPAT_VER_REQ_SHIFT ;BUILD_BUG_ON (ADF_PFVF_COMPATIBILITY_VERSION >255 ); +reinit_completion (&accel_dev->vf.iov_msg_completion); +/* Send request from VF to PF */ ret =adf_iov_putmsg (accel_dev, msg,0 );if (ret) {
drivers/crypto/qat/qat_common/adf_vf2pf_msg.c +6 -6
@@ -49,14 +49,14 @@#include "adf_pf2vf_msg.h" /** -* adf_vf2pf_init() - send init msg to PF +* adf_vf2pf_notify_init() - send init msg to PF * @accel_dev: Pointer to acceleration VF device. * * Function sends an init messge from the VF to a PF * * Return: 0 on success, error code otherwise. */ -int adf_vf2pf_init (struct adf_accel_dev *accel_dev) +int adf_vf2pf_notify_init (struct adf_accel_dev *accel_dev) {u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM | (ADF_VF2PF_MSGTYPE_INIT <<ADF_VF2PF_MSGTYPE_SHIFT ));
@@ -69,17 +69,17 @@ int adf_vf2pf_init(struct adf_accel_dev *accel_dev)set_bit (ADF_STATUS_PF_RUNNING , &accel_dev->status);return 0 ; } -EXPORT_SYMBOL_GPL (adf_vf2pf_init); +EXPORT_SYMBOL_GPL (adf_vf2pf_notify_init);/** -* adf_vf2pf_shutdown() - send shutdown msg to PF +* adf_vf2pf_notify_shutdown() - send shutdown msg to PF * @accel_dev: Pointer to acceleration VF device. * * Function sends a shutdown messge from the VF to a PF * * Return: void */ -void adf_vf2pf_shutdown (struct adf_accel_dev *accel_dev) +void adf_vf2pf_notify_shutdown (struct adf_accel_dev *accel_dev) {u32 msg = (ADF_VF2PF_MSGORIGIN_SYSTEM | (ADF_VF2PF_MSGTYPE_SHUTDOWN <<ADF_VF2PF_MSGTYPE_SHIFT ));
@@ -89,4 +89,4 @@ void adf_vf2pf_shutdown(struct adf_accel_dev *accel_dev)dev_err (&GET_DEV (accel_dev),"Failed to send Shutdown event to PF\n" ); } -EXPORT_SYMBOL_GPL (adf_vf2pf_shutdown); +EXPORT_SYMBOL_GPL (adf_vf2pf_notify_shutdown);
drivers/crypto/qat/qat_common/adf_vf_isr.c +4 -3
@@ -203,6 +203,7 @@ static irqreturn_t adf_isr(int irq, void *privdata)struct adf_bar *pmisc = &GET_BARS (accel_dev)[hw_data->get_misc_bar_id (hw_data)];void __iomem *pmisc_bar_addr = pmisc->virt_addr; +bool handled = false;u32 v_int;/* Read VF INT source CSR to determine the source of VF interrupt */
@@ -215,7 +216,7 @@ static irqreturn_t adf_isr(int irq, void *privdata)/* Schedule tasklet to handle interrupt BH */ tasklet_hi_schedule (&accel_dev->vf.pf2vf_bh_tasklet); -return IRQ_HANDLED ; + handled = true; }/* Check bundle interrupt */
@@ -227,10 +228,10 @@ static irqreturn_t adf_isr(int irq, void *privdata)WRITE_CSR_INT_FLAG_AND_COL (bank->csr_addr, bank->bank_number,0 );tasklet_hi_schedule (&bank->resp_handler); -return IRQ_HANDLED ; + handled = true; } -return IRQ_NONE ; +return handled ?IRQ_HANDLED :IRQ_NONE ; }static int adf_request_msi_irq (struct adf_accel_dev *accel_dev)
drivers/crypto/qat/qat_dh895xccvf/adf_dh895xccvf_hw_data.c +2 -2
@@ -123,10 +123,10 @@ void adf_init_hw_data_dh895xcciov(struct adf_hw_device_data *hw_data) hw_data->enable_error_correction = adf_vf_void_noop; hw_data->init_admin_comms = adf_vf_int_noop; hw_data->exit_admin_comms = adf_vf_void_noop; - hw_data->send_admin_init = adf_vf2pf_init; + hw_data->send_admin_init = adf_vf2pf_notify_init; hw_data->init_arb = adf_vf_int_noop; hw_data->exit_arb = adf_vf_void_noop; - hw_data->disable_iov = adf_vf2pf_shutdown; + hw_data->disable_iov = adf_vf2pf_notify_shutdown; hw_data->get_accel_mask = get_accel_mask; hw_data->get_ae_mask = get_ae_mask; hw_data->get_num_accels = get_num_accels;
drivers/crypto/talitos.c +4 -0
@@ -816,7 +816,11 @@ static void talitos_unregister_rng(struct device *dev)* HMAC_SNOOP_NO_AFEA (HSNA) instead of type IPSEC_ESP */ #define TALITOS_CRA_PRIORITY_AEAD_HSNA (TALITOS_CRA_PRIORITY - 1) +#ifdef CONFIG_CRYPTO_DEV_TALITOS_SEC2 #define TALITOS_MAX_KEY_SIZE (AES_MAX_KEY_SIZE + SHA512_BLOCK_SIZE) +#else +#define TALITOS_MAX_KEY_SIZE (AES_MAX_KEY_SIZE + SHA256_BLOCK_SIZE) +#endif #define TALITOS_MAX_IV_LENGTH 16/* max of AES_BLOCK_SIZE, DES3_EDE_BLOCK_SIZE */ struct talitos_ctx {
drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.c +1 -1
@@ -339,7 +339,7 @@ static void amdgpu_i2c_put_byte(struct amdgpu_i2c_chan *i2c_bus,void amdgpu_i2c_router_select_ddc_port (const struct amdgpu_connector *amdgpu_connector) { -u8 val; +u8 val =0 ;if (!amdgpu_connector->router.ddc_valid)return ;
drivers/gpu/drm/msm/dsi/dsi.c +3 -3
@@ -36,8 +36,10 @@ static int dsi_get_phy(struct msm_dsi *msm_dsi) } phy_pdev =of_find_device_by_node (phy_node); -if (phy_pdev) +if (phy_pdev) { msm_dsi->phy =platform_get_drvdata (phy_pdev); + msm_dsi->phy_dev = &phy_pdev->dev; + }of_node_put (phy_node);
@@ -46,8 +48,6 @@ static int dsi_get_phy(struct msm_dsi *msm_dsi)return -EPROBE_DEFER ; } - msm_dsi->phy_dev =get_device (&phy_pdev->dev); -return 0 ; }
drivers/i2c/busses/i2c-highlander.c +1 -1
@@ -382,7 +382,7 @@ static int highlander_i2c_probe(struct platform_device *pdev)platform_set_drvdata (pdev, dev); dev->irq =platform_get_irq (pdev,0 ); -if (iic_force_poll) +if (dev->irq <0 || iic_force_poll) dev->irq =0 ;if (dev->irq) {
drivers/i2c/busses/i2c-iop3xx.c +2 -4
@@ -456,16 +456,14 @@ iop3xx_i2c_probe(struct platform_device *pdev) irq =platform_get_irq (pdev,0 );if (irq <0 ) { - ret = -ENXIO ; + ret = irq; goto unmap; } ret =request_irq (irq, iop3xx_i2c_irq_handler,0 , pdev->name, adapter_data); -if (ret) { - ret = -EIO ; +if (ret) goto unmap; - }memcpy (new_adapter->name, pdev->name,strlen (pdev->name)); new_adapter->owner =THIS_MODULE ;
drivers/i2c/busses/i2c-mt65xx.c +1 -1
@@ -708,7 +708,7 @@ static int mtk_i2c_probe(struct platform_device *pdev)return PTR_ERR (i2c->pdmabase); irq =platform_get_irq (pdev,0 ); -if (irq <=0 ) +if (irq <0 )return irq;init_completion (&i2c->msg_complete);
drivers/i2c/busses/i2c-s3c2410.c +1 -1
@@ -1181,7 +1181,7 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)*/ if (!(i2c->quirks &QUIRK_POLL )) { i2c->irq = ret =platform_get_irq (pdev,0 ); -if (ret <=0 ) { +if (ret <0 ) {dev_err (&pdev->dev,"cannot find IRQ\n" );clk_unprepare (i2c->clk);return ret;
drivers/iio/dac/ad5624r_spi.c +17 -1
@@ -231,7 +231,7 @@ static int ad5624r_probe(struct spi_device *spi)if (!indio_dev)return -ENOMEM ; st =iio_priv (indio_dev); - st->reg =devm_regulator_get (&spi->dev,"vcc" ); + st->reg =devm_regulator_get_optional (&spi->dev,"vref" );if (!IS_ERR (st->reg)) { ret =regulator_enable (st->reg);if (ret)
@@ -242,6 +242,22 @@ static int ad5624r_probe(struct spi_device *spi) goto error_disable_reg; voltage_uv = ret; + }else { +if (PTR_ERR (st->reg) != -ENODEV ) +return PTR_ERR (st->reg); +/* Backwards compatibility. This naming is not correct */ + st->reg =devm_regulator_get_optional (&spi->dev,"vcc" ); +if (!IS_ERR (st->reg)) { + ret =regulator_enable (st->reg); +if (ret) +return ret; + + ret =regulator_get_voltage (st->reg); +if (ret <0 ) + goto error_disable_reg; + + voltage_uv = ret; + } }spi_set_drvdata (spi, indio_dev);
drivers/media/i2c/tc358743.c +1 -1
@@ -237,7 +237,7 @@ static void i2c_wr16(struct v4l2_subdev *sd, u16 reg, u16 val)static void i2c_wr16_and_or (struct v4l2_subdev *sd,u16 reg,u16 mask,u16 val) { -i2c_wrreg (sd, reg, (i2c_rdreg (sd, reg,2 ) & mask) | val,2 ); +i2c_wrreg (sd, reg, (i2c_rdreg (sd, reg,1 ) & mask) | val,1 ); }static u32 i2c_rd32 (struct v4l2_subdev *sd,u16 reg)
drivers/media/rc/rc-loopback.c +1 -1
@@ -55,7 +55,7 @@ static int loop_set_tx_mask(struct rc_dev *dev, u32 mask)if ((mask & (RXMASK_REGULAR |RXMASK_LEARNING )) != mask) {dprintk ("invalid tx mask: %u\n" , mask); -return -EINVAL ; +return 2 ; }dprintk ("setting tx mask: %u\n" , mask);
drivers/media/usb/dvb-usb/nova-t-usb2.c +4 -2
@@ -133,7 +133,7 @@ static int nova_t_rc_query(struct dvb_usb_device *d, u32 *event, int *state)static int nova_t_read_mac_address (struct dvb_usb_device *d,u8 mac[6 ]) { -int i; +int i, ret;u8 b; mac[0 ] =0x00 ;
@@ -142,7 +142,9 @@ static int nova_t_read_mac_address (struct dvb_usb_device *d, u8 mac[6])/* this is a complete guess, but works for my box */ for (i =136 ; i <139 ; i++) { -dibusb_read_eeprom_byte (d,i, &b); + ret =dibusb_read_eeprom_byte (d, i, &b); +if (ret) +return ret; mac[5 - (i -136 )] = b; }
drivers/media/usb/dvb-usb/vp702x.c +9 -3
@@ -294,16 +294,22 @@ static int vp702x_rc_query(struct dvb_usb_device *d, u32 *event, int *state)static int vp702x_read_mac_addr (struct dvb_usb_device *d,u8 mac[6 ]) {u8 i, *buf; +int ret;struct vp702x_device_state *st = d->priv;mutex_lock (&st->buf_mutex); buf = st->buf; -for (i =6 ; i <12 ; i++) -vp702x_usb_in_op (d,READ_EEPROM_REQ , i,1 , &buf[i -6 ],1 ); +for (i =6 ; i <12 ; i++) { + ret =vp702x_usb_in_op (d,READ_EEPROM_REQ , i,1 , + &buf[i -6 ],1 ); +if (ret <0 ) + goto err; + }memcpy (mac, buf,6 ); +err:mutex_unlock (&st->buf_mutex); -return 0 ; +return ret; }static int vp702x_frontend_attach (struct dvb_usb_adapter *adap)
drivers/media/usb/go7007/go7007-driver.c +0 -26
@@ -698,49 +698,23 @@ struct go7007 *go7007_alloc(const struct go7007_board_info *board, struct device *dev) {struct go7007 *go; -int i; go =kzalloc (sizeof (struct go7007 ),GFP_KERNEL );if (go ==NULL )return NULL ; go->dev = dev; go->board_info = board; - go->board_id =0 ; go->tuner_type =-1 ; - go->channel_number =0 ; - go->name[0 ] =0 ;mutex_init (&go->hw_lock);init_waitqueue_head (&go->frame_waitq);spin_lock_init (&go->spinlock); go->status =STATUS_INIT ; -memset (&go->i2c_adapter,0 ,sizeof (go->i2c_adapter)); - go->i2c_adapter_online =0 ; - go->interrupt_available =0 ;init_waitqueue_head (&go->interrupt_waitq); - go->input =0 ;go7007_update_board (go); - go->encoder_h_halve =0 ; - go->encoder_v_halve =0 ; - go->encoder_subsample =0 ; go->format =V4L2_PIX_FMT_MJPEG ; go->bitrate =1500000 ; go->fps_scale =1 ; - go->pali =0 ; go->aspect_ratio =GO7007_RATIO_1_1 ; - go->gop_size =0 ; - go->ipb =0 ; - go->closed_gop =0 ; - go->repeat_seqhead =0 ; - go->seq_header_enable =0 ; - go->gop_header_enable =0 ; - go->dvd_mode =0 ; - go->interlace_coding =0 ; -for (i =0 ; i <4 ; ++i) - go->modet[i].enable =0 ; -for (i =0 ; i <1624 ; ++i) - go->modet_map[i] =0 ; - go->audio_deliver =NULL ; - go->audio_enabled =0 ;return go; }
drivers/media/usb/stkwebcam/stk-webcam.c +4 -2
@@ -1362,7 +1362,7 @@ static int stk_camera_probe(struct usb_interface *interface,if (!dev->isoc_ep) {STK_ERROR ("Could not find isoc-in endpoint" ); err = -ENODEV ; - goto error; + goto error_put; } dev->vsettings.palette =V4L2_PIX_FMT_RGB565 ; dev->vsettings.mode =MODE_VGA ;
@@ -1375,10 +1375,12 @@ static int stk_camera_probe(struct usb_interface *interface, err =stk_register_video_device (dev);if (err) - goto error; + goto error_put;return 0 ; +error_put: +usb_put_intf (interface); error:v4l2_ctrl_handler_free (hdl);v4l2_device_unregister (&dev->v4l2_dev);
drivers/media/usb/uvc/uvc_v4l2.c +23 -11
@@ -881,8 +881,8 @@ static int uvc_ioctl_g_input(struct file *file, void *fh, unsigned int *input) {struct uvc_fh *handle = fh;struct uvc_video_chain *chain = handle->chain; +u8 *buf;int ret; -u8 i;if (chain->selector ==NULL || (chain->dev->quirks &UVC_QUIRK_IGNORE_SELECTOR_UNIT )) {
@@ -890,22 +890,27 @@ static int uvc_ioctl_g_input(struct file *file, void *fh, unsigned int *input)return 0 ; } + buf =kmalloc (1 ,GFP_KERNEL ); +if (!buf) +return -ENOMEM ; + ret =uvc_query_ctrl (chain->dev,UVC_GET_CUR , chain->selector->id, chain->dev->intfnum,UVC_SU_INPUT_SELECT_CONTROL , - &i,1 ); -if (ret <0 ) -return ret; + buf,1 ); +if (!ret) + *input = *buf -1 ; - *input = i -1 ; -return 0 ; +kfree (buf); + +return ret; }static int uvc_ioctl_s_input (struct file *file,void *fh,unsigned int input) {struct uvc_fh *handle = fh;struct uvc_video_chain *chain = handle->chain; +u8 *buf;int ret; -u32 i; ret =uvc_acquire_privileges (handle);if (ret <0 )
@@ -921,10 +926,17 @@ static int uvc_ioctl_s_input(struct file *file, void *fh, unsigned int input)if (input >= chain->selector->bNrInPins)return -EINVAL ; - i = input +1 ; -return uvc_query_ctrl (chain->dev,UVC_SET_CUR , chain->selector->id, - chain->dev->intfnum,UVC_SU_INPUT_SELECT_CONTROL , - &i,1 ); + buf =kmalloc (1 ,GFP_KERNEL ); +if (!buf) +return -ENOMEM ; + + *buf = input +1 ; + ret =uvc_query_ctrl (chain->dev,UVC_SET_CUR , chain->selector->id, + chain->dev->intfnum,UVC_SU_INPUT_SELECT_CONTROL , + buf,1 ); +kfree (buf); + +return ret; } static int uvc_ioctl_queryctrl(struct file *file, void *fh,
drivers/mfd/ab8500-core.c +1 -1
@@ -489,7 +489,7 @@ static int ab8500_handle_hierarchical_line(struct ab8500 *ab8500,if (line ==AB8540_INT_GPIO43F || line ==AB8540_INT_GPIO44F ) line +=1 ; -handle_nested_irq (irq_create_mapping (ab8500->domain, line)); +handle_nested_irq (irq_find_mapping (ab8500->domain, line)); }return 0 ;
drivers/mfd/stmpe.c +2 -2
@@ -1033,7 +1033,7 @@ static irqreturn_t stmpe_irq(int irq, void *data)if (variant->id_val ==STMPE801_ID || variant->id_val ==STMPE1600_ID ) { -int base =irq_create_mapping (stmpe->domain,0 ); +int base =irq_find_mapping (stmpe->domain,0 );handle_nested_irq (base);return IRQ_HANDLED ;
@@ -1061,7 +1061,7 @@ static irqreturn_t stmpe_irq(int irq, void *data)while (status) {int bit =__ffs (status);int line = bank *8 + bit; -int nestedirq =irq_create_mapping (stmpe->domain, line); +int nestedirq =irq_find_mapping (stmpe->domain, line);handle_nested_irq (nestedirq); status &= ~(1 << bit);
drivers/mfd/tc3589x.c +1 -1
@@ -187,7 +187,7 @@ static irqreturn_t tc3589x_irq(int irq, void *data)while (status) {int bit =__ffs (status); -int virq =irq_create_mapping (tc3589x->domain, bit); +int virq =irq_find_mapping (tc3589x->domain, bit);handle_nested_irq (virq); status &= ~(1 << bit);
drivers/mfd/wm8994-irq.c +1 -1
@@ -159,7 +159,7 @@ static irqreturn_t wm8994_edge_irq(int irq, void *data)struct wm8994 *wm8994 = data;while (gpio_get_value_cansleep (wm8994->pdata.irq_gpio)) -handle_nested_irq (irq_create_mapping (wm8994->edge_irq,0 )); +handle_nested_irq (irq_find_mapping (wm8994->edge_irq,0 ));return IRQ_HANDLED ; }
drivers/misc/vmw_vmci/vmci_queue_pair.c +4 -2
@@ -2344,7 +2344,8 @@ int vmci_qp_broker_map(struct vmci_handle handle, is_local = entry->qp.flags &VMCI_QPFLAG_LOCAL ; result =VMCI_SUCCESS ; -if (context_id !=VMCI_HOST_CONTEXT_ID ) { +if (context_id !=VMCI_HOST_CONTEXT_ID && + !QPBROKERSTATE_HAS_MEM (entry)) {struct vmci_qp_page_store page_store; page_store.pages = guest_mem;
@@ -2454,7 +2455,8 @@ int vmci_qp_broker_unmap(struct vmci_handle handle, is_local = entry->qp.flags &VMCI_QPFLAG_LOCAL ; -if (context_id !=VMCI_HOST_CONTEXT_ID ) { +if (context_id !=VMCI_HOST_CONTEXT_ID && +QPBROKERSTATE_HAS_MEM (entry)) {qp_acquire_queue_mutex (entry->produce_q); result =qp_save_headers (entry);if (result <VMCI_SUCCESS )
drivers/mmc/host/dw_mmc.c +1 -0
@@ -762,6 +762,7 @@ static int dw_mci_edmac_start_dma(struct dw_mci *host,int ret =0 ;/* Set external dma config: burst size, burst width */ +memset (&cfg,0 ,sizeof (cfg)); cfg.dst_addr = host->phy_regs + fifo_offset; cfg.src_addr = cfg.dst_addr; cfg.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ;
drivers/mmc/host/moxart-mmc.c +1 -0
@@ -633,6 +633,7 @@ static int moxart_probe(struct platform_device *pdev) host->dma_chan_tx, host->dma_chan_rx); host->have_dma = true; +memset (&cfg,0 ,sizeof (cfg)); cfg.src_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ; cfg.dst_addr_width =DMA_SLAVE_BUSWIDTH_4_BYTES ;
drivers/mmc/host/rtsx_pci_sdmmc.c +23 -13
@@ -552,9 +552,22 @@ static int sd_write_long_data(struct realtek_pci_sdmmc *host,return 0 ; } +static inline void sd_enable_initial_mode (struct realtek_pci_sdmmc *host) +{ +rtsx_pci_write_register (host->pcr,SD_CFG1 , +SD_CLK_DIVIDE_MASK ,SD_CLK_DIVIDE_128 ); +} + +static inline void sd_disable_initial_mode (struct realtek_pci_sdmmc *host) +{ +rtsx_pci_write_register (host->pcr,SD_CFG1 , +SD_CLK_DIVIDE_MASK ,SD_CLK_DIVIDE_0 ); +} +static int sd_rw_multi (struct realtek_pci_sdmmc *host,struct mmc_request *mrq) {struct mmc_data *data = mrq->data; +int err;if (host->sg_count <0 ) { data->error = host->sg_count;
@@ -563,22 +576,19 @@ static int sd_rw_multi(struct realtek_pci_sdmmc *host, struct mmc_request *mrq)return data->error; } -if (data->flags &MMC_DATA_READ ) -return sd_read_long_data (host, mrq); +if (data->flags &MMC_DATA_READ ) { +if (host->initial_mode) +sd_disable_initial_mode (host); -return sd_write_long_data (host, mrq); -} + err =sd_read_long_data (host, mrq); -static inline void sd_enable_initial_mode (struct realtek_pci_sdmmc *host) -{ -rtsx_pci_write_register (host->pcr,SD_CFG1 , -SD_CLK_DIVIDE_MASK ,SD_CLK_DIVIDE_128 ); -} +if (host->initial_mode) +sd_enable_initial_mode (host); -static inline void sd_disable_initial_mode (struct realtek_pci_sdmmc *host) -{ -rtsx_pci_write_register (host->pcr,SD_CFG1 , -SD_CLK_DIVIDE_MASK ,SD_CLK_DIVIDE_0 ); +return err; + } + +return sd_write_long_data (host, mrq); } static void sd_normal_rw(struct realtek_pci_sdmmc *host,
drivers/mtd/nand/atmel_nand.c +0 -1
@@ -2334,7 +2334,6 @@ static int atmel_nand_probe(struct platform_device *pdev)static int atmel_nand_remove (struct platform_device *pdev) {struct atmel_nand_host *host =platform_get_drvdata (pdev); -struct mtd_info *mtd =nand_to_mtd (&host->nand_chip);nand_release (&host->nand_chip);
drivers/mtd/nand/cafe_nand.c +3 -1
@@ -700,7 +700,7 @@ static int cafe_nand_probe(struct pci_dev *pdev, "CAFE NAND", mtd);if (err) {dev_warn (&pdev->dev,"Could not register IRQ %d\n" , pdev->irq); - goto out_ior; + goto out_free_rs; }/* Disable master reset, enable NAND clock */
@@ -808,6 +808,8 @@ static int cafe_nand_probe(struct pci_dev *pdev,/* Disable NAND IRQ in global IRQ mask register */ cafe_writel (cafe, ~1 &cafe_readl (cafe,GLOBAL_IRQ_MASK ),GLOBAL_IRQ_MASK );free_irq (pdev->irq, mtd); + out_free_rs: +free_rs (cafe->rs); out_ior:pci_iounmap (pdev, cafe->mmio); out_free_mtd:
drivers/net/dsa/b53/b53_common.c +1 -2
@@ -1798,9 +1798,8 @@ static int b53_switch_init(struct b53_device *dev) dev->cpu_port =5 ; } -/* cpu port is always last */ - dev->num_ports = dev->cpu_port +1 ; dev->enabled_ports |=BIT (dev->cpu_port); + dev->num_ports =fls (dev->enabled_ports); dev->ports = devm_kzalloc(dev->dev, sizeof(struct b53_port) * dev->num_ports,
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c +1 -1
@@ -1241,7 +1241,7 @@ int bnx2x_iov_init_one(struct bnx2x *bp, int int_mode_param,/* SR-IOV capability was enabled but there are no VFs*/ if (iov->total ==0 ) { - err = -EINVAL ; + err =0 ; goto failed; }
drivers/net/ethernet/chelsio/cxgb/cxgb2.c +1 -0
@@ -1133,6 +1133,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)if (!adapter->registered_device_map) {pr_err ("%s: could not register any net devices\n" ,pci_name (pdev)); + err = -EINVAL ; goto out_release_adapter_res; }
drivers/net/ethernet/qlogic/qed/qed_main.c +6 -1
@@ -374,7 +374,12 @@ static int qed_enable_msix(struct qed_dev *cdev, rc = cnt; } -if (rc >0 ) { +/* For VFs, we should return with an error in case we didn't get the +* exact number of msix vectors as we requested. +* Not doing that will lead to a crash when starting queues for +* this VF. +*/ +if ((IS_PF (cdev) && rc >0 ) || (IS_VF (cdev) && rc == cnt)) {/* MSI-x configuration was achieved */ int_params->out.int_mode =QED_INT_MODE_MSIX ; int_params->out.num_vectors = rc;
drivers/net/ethernet/qlogic/qede/qede_main.c +1 -1
@@ -3145,6 +3145,7 @@ static void qede_sync_free_irqs(struct qede_dev *edev) } edev->int_info.used_cnt =0 ; + edev->int_info.msix_cnt =0 ; }static int qede_req_msix_irqs (struct qede_dev *edev)
@@ -3644,7 +3645,6 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode) err4:qede_sync_free_irqs (edev); -memset (&edev->int_info.msix_cnt,0 ,sizeof (struct qed_int_info )); err3:qede_napi_disable_remove (edev); err2:
drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c +0 -1
@@ -440,7 +440,6 @@ int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter)QLCWR32 (adapter,QLCNIC_CRB_PEG_NET_4 +0x3c ,1 );msleep (20 ); -qlcnic_rom_unlock (adapter);/* big hammer don't reset CAM block on reset */ QLCWR32 (adapter,QLCNIC_ROMUSB_GLB_SW_RESET ,0xfeffffff );
drivers/net/ethernet/rdc/r6040.c +8 -1
@@ -133,6 +133,8 @@#define PHY_ST 0x8A/* PHY status register */ #define MAC_SM 0xAC/* MAC status machine */ #define MAC_SM_RST 0x0002/* MAC status machine reset */ +#define MD_CSC 0xb6/* MDC speed control register */ +#define MD_CSC_DEFAULT 0x0030#define MAC_ID 0xBE/* Identifier register */ #define TX_DCNT 0x80/* TX descriptor count */
@@ -368,8 +370,9 @@ static void r6040_reset_mac(struct r6040_private *lp) {void __iomem *ioaddr = lp->base;int limit =MAC_DEF_TIMEOUT ; -u16 cmd; +u16 cmd, md_csc; + md_csc =ioread16 (ioaddr +MD_CSC );iowrite16 (MAC_RST , ioaddr +MCR1 );while (limit--) { cmd =ioread16 (ioaddr +MCR1 );
@@ -381,6 +384,10 @@ static void r6040_reset_mac(struct r6040_private *lp)iowrite16 (MAC_SM_RST , ioaddr +MAC_SM );iowrite16 (0 , ioaddr +MAC_SM );mdelay (5 ); + +/* Restore MDIO clock frequency */ +if (md_csc !=MD_CSC_DEFAULT ) +iowrite16 (md_csc, ioaddr +MD_CSC ); }static void r6040_init_mac_regs (struct net_device *dev)
drivers/net/ethernet/renesas/sh_eth.c +1 -0
@@ -2333,6 +2333,7 @@ static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)else txdesc->status |=cpu_to_le32 (TD_TACT ); +wmb ();/* cur_tx must be incremented after TACT bit was set */ mdp->cur_tx++;if (!(sh_eth_read (ndev,EDTRR ) &sh_eth_get_edtrr_trns (mdp)))
drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c +8 -10
@@ -300,10 +300,7 @@ static int ipq806x_gmac_probe(struct platform_device *pdev) val &= ~NSS_COMMON_GMAC_CTL_PHY_IFACE_SEL ;break ;default : -dev_err (&pdev->dev,"Unsupported PHY mode: \"%s\"\n" , -phy_modes (gmac->phy_mode)); - err = -EINVAL ; - goto err_remove_config_dt; + goto err_unsupported_phy; }regmap_write (gmac->nss_common,NSS_COMMON_GMAC_CTL (gmac->id), val);
@@ -320,10 +317,7 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)NSS_COMMON_CLK_SRC_CTRL_OFFSET (gmac->id);break ;default : -dev_err (&pdev->dev,"Unsupported PHY mode: \"%s\"\n" , -phy_modes (gmac->phy_mode)); - err = -EINVAL ; - goto err_remove_config_dt; + goto err_unsupported_phy; }regmap_write (gmac->nss_common,NSS_COMMON_CLK_SRC_CTRL , val);
@@ -340,8 +334,7 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)NSS_COMMON_CLK_GATE_GMII_TX_EN (gmac->id);break ;default : -/* We don't get here; the switch above will have errored out */ -unreachable (); + goto err_unsupported_phy; }regmap_write (gmac->nss_common,NSS_COMMON_CLK_GATE , val);
@@ -372,6 +365,11 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)return 0 ; +err_unsupported_phy: +dev_err (&pdev->dev,"Unsupported PHY mode: \"%s\"\n" , +phy_modes (gmac->phy_mode)); + err = -EINVAL ; + err_remove_config_dt:stmmac_remove_config_dt (pdev, plat_dat);
drivers/net/ethernet/wiznet/w5100.c +2 -0
@@ -1060,6 +1060,8 @@ static int w5100_mmio_probe(struct platform_device *pdev) mac_addr = data->mac_addr; mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!mem) +return -EINVAL ;if (resource_size (mem) <W5100_BUS_DIRECT_SIZE ) ops = &w5100_mmio_indirect_ops;else
drivers/net/ethernet/xilinx/ll_temac_main.c +1 -3
@@ -735,10 +735,8 @@ temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)/* Kick off the transfer */ lp->dma_out (lp,TX_TAILDESC_PTR , tail_p);/* DMA start */ -if (temac_check_tx_bd_space (lp,MAX_SKB_FRAGS +1 )) { -netdev_info (ndev,"%s -> netif_stop_queue\n" , __func__); +if (temac_check_tx_bd_space (lp,MAX_SKB_FRAGS +1 ))netif_stop_queue (ndev); - }return NETDEV_TX_OK ; }
drivers/net/phy/dp83640_reg.h +1 -1
@@ -4,7 +4,7 @@#ifndef HAVE_DP83640_REGISTERS #define HAVE_DP83640_REGISTERS -#define PAGE0 0x0000 +/* #define PAGE0 0x0000 */ #define PHYCR2 0x001c/* PHY Control Register 2 */ #define PAGE4 0x0004
drivers/net/usb/cdc_mbim.c +5 -0
@@ -647,6 +647,11 @@ static const struct usb_device_id mbim_devs[] = { .driver_info = (unsigned long)&cdc_mbim_info_avoid_altsetting_toggle, }, +/* Telit LN920 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x1bc7, 0x1061, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), + .driver_info = (unsigned long )&cdc_mbim_info_avoid_altsetting_toggle, + }, + /* default entry */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), .driver_info = (unsigned long)&cdc_mbim_info_zlp,
drivers/net/wireless/ath/ath.h +2 -1
@@ -199,12 +199,13 @@ struct sk_buff *ath_rxbuf_alloc(struct ath_common *common,bool ath_is_mybeacon (struct ath_common *common,struct ieee80211_hdr *hdr);void ath_hw_setbssidmask (struct ath_common *common); -void ath_key_delete (struct ath_common *common,struct ieee80211_key_conf *key); +void ath_key_delete (struct ath_common *common,u8 hw_key_idx);int ath_key_config (struct ath_common *common,struct ieee80211_vif *vif,struct ieee80211_sta *sta,struct ieee80211_key_conf *key);bool ath_hw_keyreset (struct ath_common *common,u16 entry); +bool ath_hw_keysetmac (struct ath_common *common,u16 entry,const u8 *mac);void ath_hw_cycle_counters_update (struct ath_common *common);int32_t ath_hw_get_listen_time (struct ath_common *common);
drivers/net/wireless/ath/ath5k/mac80211-ops.c +1 -1
@@ -522,7 +522,7 @@ ath5k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, }break ;case DISABLE_KEY : -ath_key_delete (common, key); +ath_key_delete (common, key->hw_key_idx);break ;default : ret = -EINVAL ;
drivers/net/wireless/ath/ath6kl/wmi.c +3 -1
@@ -2513,8 +2513,10 @@ static int ath6kl_wmi_sync_point(struct wmi *wmi, u8 if_idx) goto free_data_skb;for (index =0 ; index < num_pri_streams; index++) { -if (WARN_ON (!data_sync_bufs[index].skb)) +if (WARN_ON (!data_sync_bufs[index].skb)) { + ret = -ENOMEM ; goto free_data_skb; + } ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev, data_sync_bufs[index].
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +2 -1
@@ -3346,7 +3346,8 @@ static int ar9300_eeprom_restore_internal(struct ath_hw *ah,"Found block at %x: code=%d ref=%d length=%d major=%d minor=%d\n" , cptr, code, reference, length, major, minor);if ((!AR_SREV_9485 (ah) && length >=1024 ) || - (AR_SREV_9485 (ah) && length >EEPROM_DATA_LEN_9485 )) { + (AR_SREV_9485 (ah) && length >EEPROM_DATA_LEN_9485 ) || + (length > cptr)) {ath_dbg (common,EEPROM ,"Skipping bad header\n" ); cptr -=COMP_HDR_LEN ;continue ;
drivers/net/wireless/ath/ath9k/htc_drv_main.c +1 -1
@@ -1460,7 +1460,7 @@ static int ath9k_htc_set_key(struct ieee80211_hw *hw, }break ;case DISABLE_KEY : -ath_key_delete (common, key); +ath_key_delete (common, key->hw_key_idx);break ;default : ret = -EINVAL ;
drivers/net/wireless/ath/ath9k/hw.c +7 -5
@@ -1595,7 +1595,6 @@ static void ath9k_hw_apply_gpio_override(struct ath_hw *ah)ath9k_hw_gpio_request_out (ah, i,NULL ,AR_GPIO_OUTPUT_MUX_AS_OUTPUT );ath9k_hw_set_gpio (ah, i, !!(ah->gpio_val &BIT (i))); -ath9k_hw_gpio_free (ah, i); } }
@@ -2702,14 +2701,17 @@ static void ath9k_hw_gpio_cfg_output_mux(struct ath_hw *ah, u32 gpio, u32 type)static void ath9k_hw_gpio_cfg_soc (struct ath_hw *ah,u32 gpio,bool out,const char *label) { +int err; +if (ah->caps.gpio_requested &BIT (gpio))return ; -/* may be requested by BSP, free anyway */ -gpio_free (gpio); - -if (gpio_request_one (gpio, out ?GPIOF_OUT_INIT_LOW :GPIOF_IN , label)) + err =gpio_request_one (gpio, out ?GPIOF_OUT_INIT_LOW :GPIOF_IN , label); +if (err) { +ath_err (ath9k_hw_common (ah),"request GPIO%d failed:%d\n" , + gpio, err);return ; + } ah->caps.gpio_requested |=BIT (gpio); }
drivers/net/wireless/ath/ath9k/hw.h +1 -0
@@ -815,6 +815,7 @@ struct ath_hw {struct ath9k_pacal_info pacal_info;struct ar5416Stats stats;struct ath9k_tx_queue_info txq[ATH9K_NUM_TX_QUEUES ]; +DECLARE_BITMAP (pending_del_keymap,ATH_KEYMAX );enum ath9k_int imask;u32 imrs2_reg;
drivers/net/wireless/ath/ath9k/main.c +92 -3
135 lines not on this page · raw message
drivers/net/wireless/ath/key.c +25 -16
68 lines not on this page · raw message
drivers/nvme/host/pci.c +4 -3
@@ -1927,7 +1927,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) result =nvme_dev_map (dev);if (result) - goto free; + goto put_pci;INIT_WORK (&dev->reset_work, nvme_reset_work);INIT_WORK (&dev->remove_work, nvme_remove_dead_ctrl_work);
@@ -1938,7 +1938,7 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) result =nvme_setup_prp_pools (dev);if (result) - goto put_pci; + goto unmap; result =nvme_init_ctrl (&dev->ctrl, &pdev->dev, &nvme_pci_ctrl_ops, id->driver_data);
@@ -1953,9 +1953,10 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) release_pools:nvme_release_prp_pools (dev); + unmap: +nvme_dev_unmap (dev); put_pci:put_device (dev->dev); -nvme_dev_unmap (dev); free:kfree (dev->queues);kfree (dev);
drivers/parport/ieee1284_ops.c +1 -1
@@ -534,7 +534,7 @@ size_t parport_ieee1284_ecp_read_data (struct parport *port, goto out;/* Yield the port for a while. */ -if (count && dev->port->irq !=PARPORT_IRQ_NONE ) { +if (dev->port->irq !=PARPORT_IRQ_NONE ) {parport_release (dev);schedule_timeout_interruptible (msecs_to_jiffies (40 ));parport_claim_or_block (dev);
drivers/pci/msi.c +3 -0
@@ -777,6 +777,9 @@ static void msix_mask_all(void __iomem *base, int tsize)u32 ctrl =PCI_MSIX_ENTRY_CTRL_MASKBIT ;int i; +if (pci_msi_ignore_mask) +return ; +for (i =0 ; i < tsize; i++, base +=PCI_MSIX_ENTRY_SIZE )writel (ctrl, base +PCI_MSIX_ENTRY_VECTOR_CTRL ); }
drivers/pci/pci.c +9 -6
@@ -1384,11 +1384,7 @@ static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)* so that things like MSI message writing will behave as expected * (e.g. if the device really is in D0 at enable time). */ -if (dev->pm_cap) { -u16 pmcsr; -pci_read_config_word (dev, dev->pm_cap +PCI_PM_CTRL , &pmcsr); - dev->current_state = (pmcsr &PCI_PM_CTRL_STATE_MASK ); - } +pci_update_current_state (dev, dev->current_state);if (atomic_inc_return (&dev->enable_cnt) >1 )return 0 ;/* already enabled */
@@ -1926,7 +1922,14 @@ int __pci_enable_wake(struct pci_dev *dev, pci_power_t state,if (enable) {int error; -if (pci_pme_capable (dev, state)) +/* +* Enable PME signaling if the device can signal PME from +* D3cold regardless of whether or not it can signal PME from +* the current target state, because that will allow it to +* signal PME when the hierarchy above it goes into D3cold and +* the device itself ends up in D3cold as a result of that. +*/ +if (pci_pme_capable (dev, state) ||pci_pme_capable (dev, PCI_D3cold))pci_pme_active (dev, true);else ret =1 ;
drivers/pci/quirks.c +7 -6
@@ -2994,12 +2994,13 @@ static void fixup_mpss_256(struct pci_dev *dev) { dev->pcie_mpss =1 ;/* 256 bytes */ } -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_SOLARFLARE , -PCI_DEVICE_ID_SOLARFLARE_SFC4000A_0 , fixup_mpss_256); -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_SOLARFLARE , -PCI_DEVICE_ID_SOLARFLARE_SFC4000A_1 , fixup_mpss_256); -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_SOLARFLARE , -PCI_DEVICE_ID_SOLARFLARE_SFC4000B , fixup_mpss_256); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SOLARFLARE , +PCI_DEVICE_ID_SOLARFLARE_SFC4000A_0 , fixup_mpss_256); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SOLARFLARE , +PCI_DEVICE_ID_SOLARFLARE_SFC4000A_1 , fixup_mpss_256); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SOLARFLARE , +PCI_DEVICE_ID_SOLARFLARE_SFC4000B , fixup_mpss_256); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_ASMEDIA ,0x0612 , fixup_mpss_256);/* Intel 5000 and 5100 Memory controllers have an errata with read completion * coalescing (which is enabled by default on some BIOSes) and MPS of 256B.
drivers/pci/syscall.c +3 -1
@@ -23,8 +23,10 @@ SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,long err;int cfg_ret; + err = -EPERM ; + dev =NULL ;if (!capable (CAP_SYS_ADMIN )) -return -EPERM ; + goto error; err = -ENODEV ; dev =pci_get_bus_and_slot (bus, dfn);
drivers/pinctrl/pinctrl-single.c +1 -0
@@ -1335,6 +1335,7 @@ static int pcs_parse_bits_in_pinctrl_entry(struct pcs_device *pcs,if (PCS_HAS_PINCONF ) {dev_err (pcs->dev,"pinconf not supported\n" ); + res = -ENOTSUPP ; goto free_pingroups; }
drivers/platform/chrome/cros_ec_proto.c +9 -0
@@ -183,6 +183,15 @@ static int cros_ec_host_command_proto_query(struct cros_ec_device *ec_dev, msg->insize =sizeof (struct ec_response_get_protocol_info ); ret =send_command (ec_dev, msg); +/* +* Send command once again when timeout occurred. +* Fingerprint MCU (FPMCU) is restarted during system boot which +* introduces small window in which FPMCU won't respond for any +* messages sent by kernel. There is no need to wait before next +* attempt because we waited at least EC_MSG_DEADLINE_MS. +*/ +if (ret == -ETIMEDOUT ) + ret =send_command (ec_dev, msg);if (ret <0 ) { dev_dbg(ec_dev->dev,
drivers/power/supply/axp288_fuel_gauge.c +2 -2
@@ -169,7 +169,7 @@ static int fuel_gauge_reg_readb(struct axp288_fg_info *info, int reg) }if (ret <0 ) { -dev_err (&info->pdev->dev,"axp288 reg read err:%d\n" , ret); +dev_err (&info->pdev->dev,"Error reading reg 0x%02x err: %d\n" , reg, ret);return ret; }
@@ -183,7 +183,7 @@ static int fuel_gauge_reg_writeb(struct axp288_fg_info *info, int reg, u8 val) ret =regmap_write (info->regmap, reg, (unsigned int )val);if (ret <0 ) -dev_err (&info->pdev->dev,"axp288 reg write err:%d\n" , ret); +dev_err (&info->pdev->dev,"Error writing reg 0x%02x err: %d\n" , reg, ret);return ret; }
drivers/power/supply/max17042_battery.c +6 -2
@@ -644,7 +644,7 @@ static inline void max17042_override_por_values(struct max17042_chip *chip)struct max17042_config_data *config = chip->pdata->config_data;max17042_override_por (map,MAX17042_TGAIN , config->tgain); -max17042_override_por (map, MAx17042_TOFF, config->toff); +max17042_override_por (map,MAX17042_TOFF , config->toff);max17042_override_por (map,MAX17042_CGAIN , config->cgain);max17042_override_por (map,MAX17042_COFF , config->coff);
@@ -760,8 +760,12 @@ static irqreturn_t max17042_thread_handler(int id, void *dev) {struct max17042_chip *chip = dev;u32 val; +int ret; + + ret =regmap_read (chip->regmap,MAX17042_STATUS , &val); +if (ret) +return IRQ_HANDLED ; -regmap_read (chip->regmap,MAX17042_STATUS , &val);if ((val &STATUS_INTR_SOCMIN_BIT ) || (val &STATUS_INTR_SOCMAX_BIT )) {dev_info (&chip->client->dev,"SOC threshold INTR\n" );
drivers/rtc/rtc-tps65910.c +1 -1
@@ -332,6 +332,6 @@ static struct platform_driver tps65910_rtc_driver = { };module_platform_driver (tps65910_rtc_driver); -MODULE_ALIAS ("platform:rtc-tps65910" ); +MODULE_ALIAS ("platform:tps65910-rtc" );MODULE_AUTHOR ("Venu Byravarasu <[email protected]>" );MODULE_LICENSE ("GPL" );
drivers/scsi/BusLogic.c +2 -2
@@ -3597,7 +3597,7 @@ static void blogic_msg(enum blogic_msglevel msglevel, char *fmt,if (buf[0 ] !='\n' || len >1 )printk ("%sscsi%d: %s" , blogic_msglevelmap[msglevel], adapter->host_no, buf); }else -printk ("%s" , buf); +pr_cont ("%s" , buf); }else {if (begin) {if (adapter !=NULL && adapter->adapter_initd)
@@ -3605,7 +3605,7 @@ static void blogic_msg(enum blogic_msglevel msglevel, char *fmt,else printk ("%s%s" , blogic_msglevelmap[msglevel], buf); }else -printk ("%s" , buf); +pr_cont ("%s" , buf); } begin = (buf[len -1 ] =='\n' ); }
drivers/soc/qcom/smsm.c +8 -3
@@ -117,7 +117,7 @@ struct smsm_entry {DECLARE_BITMAP (irq_enabled,32 );DECLARE_BITMAP (irq_rising,32 );DECLARE_BITMAP (irq_falling,32 ); -u32 last_value; +unsigned long last_value;u32 *remote_state;u32 *subscription;
@@ -212,8 +212,7 @@ static irqreturn_t smsm_intr(int irq, void *data)u32 val; val =readl (entry->remote_state); - changed = val ^ entry->last_value; - entry->last_value = val; + changed = val ^xchg (&entry->last_value, val);for_each_set_bit (i, entry->irq_enabled,32 ) {if (!(changed &BIT (i)))
@@ -274,6 +273,12 @@ static void smsm_unmask_irq(struct irq_data *irqd)struct qcom_smsm *smsm = entry->smsm;u32 val; +/* Make sure our last cached state is up-to-date */ +if (readl (entry->remote_state) &BIT (irq)) +set_bit (irq, &entry->last_value); +else +clear_bit (irq, &entry->last_value); +set_bit (irq, entry->irq_enabled);if (entry->subscription) {
drivers/spi/spi-pic32.c +1 -0
@@ -369,6 +369,7 @@ static int pic32_spi_dma_config(struct pic32_spi *pic32s, u32 dma_width)struct dma_slave_config cfg;int ret; +memset (&cfg,0 ,sizeof (cfg)); cfg.device_fc = true; cfg.src_addr = pic32s->dma_base + buf_offset; cfg.dst_addr = pic32s->dma_base + buf_offset;
drivers/staging/board/board.c +6 -1
@@ -139,6 +139,7 @@ int __init board_staging_register_clock(const struct board_staging_clk *bsc)static int board_staging_add_dev_domain (struct platform_device *pdev,const char *domain) { +struct device *dev = &pdev->dev;struct of_phandle_args pd_args;struct device_node *np;
@@ -151,7 +152,11 @@ static int board_staging_add_dev_domain(struct platform_device *pdev, pd_args.np = np; pd_args.args_count =0 ; -return of_genpd_add_device (&pd_args, &pdev->dev); +/* Initialization similar to device_pm_init_common() */ +spin_lock_init (&dev->power.lock); + dev->power.early_init = true; + +return of_genpd_add_device (&pd_args, dev); }#else static inline int board_staging_add_dev_domain(struct platform_device *pdev,
drivers/staging/ks7010/ks7010_sdio.c +1 -1
@@ -1037,9 +1037,9 @@ static int ks7010_sdio_probe(struct sdio_func *func,memset (&priv->wstats,0 ,sizeof (priv->wstats));/* sleep mode */ +atomic_set (&priv->sleepstatus.status,0 );atomic_set (&priv->sleepstatus.doze_request,0 );atomic_set (&priv->sleepstatus.wakeup_request,0 ); -atomic_set (&priv->sleepstatus.wakeup_request,0 );trx_device_init (priv);hostif_init (priv);
drivers/tty/hvc/hvsi.c +16 -3
@@ -1051,7 +1051,7 @@ static const struct tty_operations hvsi_ops = {static int __init hvsi_init (void ) { -int i; +int i, ret; hvsi_driver =alloc_tty_driver (hvsi_count);if (!hvsi_driver)
@@ -1082,12 +1082,25 @@ static int __init hvsi_init(void) } hvsi_wait = wait_for_state;/* irqs active now */ -if (tty_register_driver (hvsi_driver)) -panic ("Couldn't register hvsi console driver\n" ); + ret =tty_register_driver (hvsi_driver); +if (ret) { +pr_err ("Couldn't register hvsi console driver\n" ); + goto err_free_irq; + }printk (KERN_DEBUG "HVSI: registered %i devices\n" , hvsi_count);return 0 ; +err_free_irq: + hvsi_wait = poll_for_state; +for (i =0 ; i < hvsi_count; i++) { +struct hvsi_struct *hp = &hvsi_ports[i]; + +free_irq (hp->virq, hp); + } +tty_driver_kref_put (hvsi_driver); + +return ret; }device_initcall (hvsi_init);
drivers/tty/serial/8250/8250_pci.c +1 -1
@@ -73,7 +73,7 @@ static void moan_device(const char *str, struct pci_dev *dev)static int setup_port (struct serial_private *priv,struct uart_8250_port *port, -int bar,int offset,int regshift) +u8 bar,unsigned int offset,int regshift) {struct pci_dev *dev = priv->dev;
drivers/tty/serial/8250/8250_port.c +2 -1
@@ -125,7 +125,8 @@ static const struct serial8250_config uart_config[] = { .name = "16C950/954", .fifo_size = 128, .tx_loadsz = 128, - .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01, + .rxtrig_bytes = {16, 32, 112, 120},/* UART_CAP_EFR breaks billionon CF bluetooth card. */ .flags = UART_CAP_FIFO | UART_CAP_SLEEP, },
drivers/tty/serial/jsm/jsm_neo.c +2 -0
@@ -827,7 +827,9 @@ static void neo_parse_isr(struct jsm_board *brd, u32 port)/* Parse any modem signal changes */ jsm_dbg (INTR , &ch->ch_bd->pci_dev,"MOD_STAT: sending to parse_modem_sigs\n" ); +spin_lock_irqsave (&ch->uart_port.lock, lock_flags);neo_parse_modem (ch,readb (&ch->ch_neo_uart->msr)); +spin_unlock_irqrestore (&ch->uart_port.lock, lock_flags); } }
drivers/tty/serial/jsm/jsm_tty.c +3 -0
@@ -195,6 +195,7 @@ static void jsm_tty_break(struct uart_port *port, int break_state)static int jsm_tty_open (struct uart_port *port) { +unsigned long lock_flags;struct jsm_board *brd;struct jsm_channel *channel = container_of(port, struct jsm_channel, uart_port);
@@ -248,6 +249,7 @@ static int jsm_tty_open(struct uart_port *port) channel->ch_cached_lsr =0 ; channel->ch_stops_sent =0 ; +spin_lock_irqsave (&port->lock, lock_flags); termios = &port->state->port.tty->termios; channel->ch_c_cflag = termios->c_cflag; channel->ch_c_iflag = termios->c_iflag;
@@ -267,6 +269,7 @@ static int jsm_tty_open(struct uart_port *port)jsm_carrier (channel); channel->ch_open_count++; +spin_unlock_irqrestore (&port->lock, lock_flags);jsm_dbg (OPEN , &channel->ch_bd->pci_dev,"finish\n" );return 0 ;
drivers/tty/tty_io.c +2 -2
@@ -2312,8 +2312,6 @@ static int tty_fasync(int fd, struct file *filp, int on)* Locking: * Called functions take tty_ldiscs_lock * current->signal->tty check is safe without locks -* -* FIXME: may race normal receive processing */ static int tiocsti (struct tty_struct *tty,char __user *p)
@@ -2329,8 +2327,10 @@ static int tiocsti(struct tty_struct *tty, char __user *p) ld =tty_ldisc_ref_wait (tty);if (!ld)return -EIO ; +tty_buffer_lock_exclusive (tty->port);if (ld->ops->receive_buf) ld->ops->receive_buf (tty, &ch, &mbz,1 ); +tty_buffer_unlock_exclusive (tty->port);tty_ldisc_deref (ld);return 0 ; }
drivers/usb/gadget/composite.c +6 -2
@@ -481,7 +481,7 @@ static u8 encode_bMaxPower(enum usb_device_speed speed, {unsigned val; -if (c->MaxPower) +if (c->MaxPower || (c->bmAttributes &USB_CONFIG_ATT_SELFPOWER )) val = c->MaxPower;else val =CONFIG_USB_GADGET_VBUS_DRAW ;
@@ -886,7 +886,11 @@ static int set_config(struct usb_composite_dev *cdev, }/* when we return, be sure our power usage is valid */ - power = c->MaxPower ? c->MaxPower :CONFIG_USB_GADGET_VBUS_DRAW ; +if (c->MaxPower || (c->bmAttributes &USB_CONFIG_ATT_SELFPOWER )) + power = c->MaxPower; +else + power =CONFIG_USB_GADGET_VBUS_DRAW ; +if (gadget->speed <USB_SPEED_SUPER ) power =min (power,500U );else
drivers/usb/gadget/function/u_ether.c +3 -2
@@ -499,8 +499,9 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb, }spin_unlock_irqrestore (&dev->lock, flags); -if (skb && !in) { -dev_kfree_skb_any (skb); +if (!in) { +if (skb) +dev_kfree_skb_any (skb);return NETDEV_TX_OK ; }
drivers/usb/gadget/udc/at91_udc.c +3 -1
@@ -1895,7 +1895,9 @@ static int at91udc_probe(struct platform_device *pdev)clk_disable (udc->iclk);/* request UDC and maybe VBUS irqs */ - udc->udp_irq =platform_get_irq (pdev,0 ); + udc->udp_irq = retval =platform_get_irq (pdev,0 ); +if (retval <0 ) + goto err_unprepare_iclk; retval =devm_request_irq (dev, udc->udp_irq, at91_udc_irq,0 , driver_name, udc);if (retval) {
drivers/usb/gadget/udc/mv_u3d_core.c +10 -9
@@ -1912,14 +1912,6 @@ static int mv_u3d_probe(struct platform_device *dev) goto err_get_irq; } u3d->irq = r->start; -if (request_irq (u3d->irq, mv_u3d_irq, -IRQF_SHARED , driver_name, u3d)) { - u3d->irq =0 ; -dev_err (&dev->dev,"Request irq %d for u3d failed\n" , - u3d->irq); - retval = -ENODEV ; - goto err_request_irq; - }/* initialize gadget structure */ u3d->gadget.ops = &mv_u3d_ops;/* usb_gadget_ops */
@@ -1932,6 +1924,15 @@ static int mv_u3d_probe(struct platform_device *dev)mv_u3d_eps_init (u3d); +if (request_irq (u3d->irq, mv_u3d_irq, +IRQF_SHARED , driver_name, u3d)) { + u3d->irq =0 ; +dev_err (&dev->dev,"Request irq %d for u3d failed\n" , + u3d->irq); + retval = -ENODEV ; + goto err_request_irq; + } +/* external vbus detection */ if (u3d->vbus) { u3d->clock_gating =1 ;
@@ -1955,8 +1956,8 @@ static int mv_u3d_probe(struct platform_device *dev) err_unregister:free_irq (u3d->irq, u3d); -err_request_irq: err_get_irq: +err_request_irq:kfree (u3d->status_req); err_alloc_status_req:kfree (u3d->eps);
drivers/usb/host/ehci-orion.c +6 -2
@@ -218,8 +218,11 @@ static int ehci_orion_drv_probe(struct platform_device *pdev)* the clock does not exists. */ priv->clk =devm_clk_get (&pdev->dev,NULL ); -if (!IS_ERR (priv->clk)) -clk_prepare_enable (priv->clk); +if (!IS_ERR (priv->clk)) { + err =clk_prepare_enable (priv->clk); +if (err) + goto err_put_hcd; + } priv->phy =devm_phy_optional_get (&pdev->dev,"usb" );if (IS_ERR (priv->phy)) {
@@ -280,6 +283,7 @@ static int ehci_orion_drv_probe(struct platform_device *pdev) err_phy_get:if (!IS_ERR (priv->clk))clk_disable_unprepare (priv->clk); +err_put_hcd:usb_put_hcd (hcd); err: dev_err(&pdev->dev, "init %s fail, %d\n",
drivers/usb/host/fotg210-hcd.c +19 -22
119 lines not on this page · raw message
drivers/usb/host/fotg210.h +0 -5
@@ -682,11 +682,6 @@ static inline unsigned fotg210_read_frame_index(struct fotg210_hcd *fotg210) return fotg210_readl(fotg210, &fotg210->regs->frame_index); } -#define fotg210_itdlen (urb, desc, t) ({ \ - usb_pipein((urb)->pipe) ? \ - (desc)->length - FOTG210_ITD_LENGTH(t) : \ - FOTG210_ITD_LENGTH(t); \ -})/*-------------------------------------------------------------------------*/ #endif /* __LINUX_FOTG210_H */
drivers/usb/host/ohci-tmio.c +3 -0
@@ -202,6 +202,9 @@ static int ohci_hcd_tmio_drv_probe(struct platform_device *dev)if (!cell)return -EINVAL ; +if (irq <0 ) +return irq; + hcd =usb_create_hcd (&ohci_tmio_hc_driver, &dev->dev,dev_name (&dev->dev));if (!hcd) { ret = -ENOMEM ;
drivers/usb/host/xhci.c +12 -12
@@ -4419,19 +4419,19 @@ static u16 xhci_calculate_u1_timeout(struct xhci_hcd *xhci, {unsigned long long timeout_ns; -if (xhci->quirks &XHCI_INTEL_HOST ) - timeout_ns =xhci_calculate_intel_u1_timeout (udev, desc); -else - timeout_ns = udev->u1_params.sel; -/* Prevent U1 if service interval is shorter than U1 exit latency */ if (usb_endpoint_xfer_int (desc) ||usb_endpoint_xfer_isoc (desc)) { -if (xhci_service_interval_to_ns (desc) <= timeout_ns) { +if (xhci_service_interval_to_ns (desc) <= udev->u1_params.mel) {dev_dbg (&udev->dev,"Disable U1, ESIT shorter than exit latency\n" );return USB3_LPM_DISABLED ; } } +if (xhci->quirks &XHCI_INTEL_HOST ) + timeout_ns =xhci_calculate_intel_u1_timeout (udev, desc); +else + timeout_ns = udev->u1_params.sel; +/* The U1 timeout is encoded in 1us intervals. * Don't return a timeout of zero, because that's USB3_LPM_DISABLED. */
@@ -4483,19 +4483,19 @@ static u16 xhci_calculate_u2_timeout(struct xhci_hcd *xhci, {unsigned long long timeout_ns; -if (xhci->quirks &XHCI_INTEL_HOST ) - timeout_ns =xhci_calculate_intel_u2_timeout (udev, desc); -else - timeout_ns = udev->u2_params.sel; -/* Prevent U2 if service interval is shorter than U2 exit latency */ if (usb_endpoint_xfer_int (desc) ||usb_endpoint_xfer_isoc (desc)) { -if (xhci_service_interval_to_ns (desc) <= timeout_ns) { +if (xhci_service_interval_to_ns (desc) <= udev->u2_params.mel) {dev_dbg (&udev->dev,"Disable U2, ESIT shorter than exit latency\n" );return USB3_LPM_DISABLED ; } } +if (xhci->quirks &XHCI_INTEL_HOST ) + timeout_ns =xhci_calculate_intel_u2_timeout (udev, desc); +else + timeout_ns = udev->u2_params.sel; +/* The U2 timeout is encoded in 256us intervals */ timeout_ns =DIV_ROUND_UP_ULL (timeout_ns,256 *1000 );/* If the necessary timeout value is bigger than what we can set in the
drivers/usb/phy/phy-fsl-usb.c +2 -0
@@ -891,6 +891,8 @@ int usb_otg_start(struct platform_device *pdev)/* request irq */ p_otg->irq =platform_get_irq (pdev,0 ); +if (p_otg->irq <0 ) +return p_otg->irq; status =request_irq (p_otg->irq, fsl_otg_isr,IRQF_SHARED , driver_name, p_otg);if (status) {
drivers/usb/phy/phy-isp1301.c +1 -1
@@ -136,7 +136,7 @@ static int isp1301_remove(struct i2c_client *client)static struct i2c_driver isp1301_driver = { .driver = { .name =DRV_NAME , - .of_match_table =of_match_ptr (isp1301_of_match), + .of_match_table = isp1301_of_match, }, .probe = isp1301_probe, .remove = isp1301_remove,
drivers/usb/phy/phy-tahvo.c +3 -1
@@ -404,7 +404,9 @@ static int tahvo_usb_probe(struct platform_device *pdev)dev_set_drvdata (&pdev->dev, tu); - tu->irq =platform_get_irq (pdev,0 ); + tu->irq = ret =platform_get_irq (pdev,0 ); +if (ret <0 ) +return ret; ret =request_threaded_irq (tu->irq,NULL , tahvo_usb_vbus_interrupt,IRQF_ONESHOT ,"tahvo-vbus" , tu);
drivers/usb/phy/phy-twl6030-usb.c +5 -0
@@ -352,6 +352,11 @@ static int twl6030_usb_probe(struct platform_device *pdev) twl->irq2 =platform_get_irq (pdev,1 ); twl->linkstat =MUSB_UNKNOWN ; +if (twl->irq1 <0 ) +return twl->irq1; +if (twl->irq2 <0 ) +return twl->irq2; + twl->comparator.set_vbus = twl6030_set_vbus; twl->comparator.start_srp = twl6030_start_srp;
drivers/usb/serial/mos7720.c +3 -1
@@ -229,8 +229,10 @@ static int read_mos_reg(struct usb_serial *serial, unsigned int serial_portnum,int status; buf =kmalloc (1 ,GFP_KERNEL ); -if (!buf) +if (!buf) { + *data =0 ;return -ENOMEM ; + } status =usb_control_msg (usbdev, pipe, request, requesttype, value, index, buf,1 ,MOS_WDR_TIMEOUT );
drivers/usb/usbip/vhci_hcd.c +24 -0
@@ -762,8 +762,32 @@ static void vhci_device_unlink_cleanup(struct vhci_device *vdev)spin_lock (&vdev->priv_lock);list_for_each_entry_safe (unlink, tmp, &vdev->unlink_tx, list) { +struct urb *urb; + +/* give back urb of unsent unlink request */ pr_info ("unlink cleanup tx %lu\n" , unlink->unlink_seqnum); + + urb =pickup_urb_and_free_priv (vdev, unlink->unlink_seqnum); +if (!urb) { +list_del (&unlink->list); +kfree (unlink); +continue ; + } + + urb->status = -ENODEV ; + +usb_hcd_unlink_urb_from_ep (hcd, urb); +list_del (&unlink->list); + +spin_unlock (&vdev->priv_lock); +spin_unlock_irqrestore (&vhci->lock, flags); + +usb_hcd_giveback_urb (hcd, urb, urb->status); + +spin_lock_irqsave (&vhci->lock, flags); +spin_lock (&vdev->priv_lock); +kfree (unlink); }
drivers/vfio/Kconfig +1 -1
@@ -31,7 +31,7 @@ menuconfig VFIO If you don't know what to do here, say N. -menuconfig VFIO_NOIOMMU +config VFIO_NOIOMMU bool "VFIO No-IOMMU support" depends on VFIO help
drivers/video/fbdev/asiliantfb.c +3 -0
@@ -227,6 +227,9 @@ static int asiliantfb_check_var(struct fb_var_screeninfo *var, {unsigned long Ftarget, ratio, remainder; +if (!var->pixclock) +return -EINVAL ; + ratio =1000000 / var->pixclock; remainder =1000000 % var->pixclock; Ftarget =1000000 * ratio + (1000000 * remainder) / var->pixclock;
drivers/video/fbdev/core/fbmem.c +7 -0
@@ -32,6 +32,7 @@#include <linux/device.h> #include <linux/efi.h> #include <linux/fb.h> +#include <linux/overflow.h> #include <asm/fb.h>
@@ -981,6 +982,7 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)if ((var->activate &FB_ACTIVATE_FORCE ) ||memcmp (&info->var, var,sizeof (struct fb_var_screeninfo ))) {u32 activate = var->activate; +u32 unused;/* When using FOURCC mode, make sure the red, green, blue and * transp fields are set to 0.
@@ -1005,6 +1007,11 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)if (var->xres <8 || var->yres <8 )return -EINVAL ; +/* Too huge resolution causes multiplication overflow. */ +if (check_mul_overflow (var->xres, var->yres, &unused) || +check_mul_overflow (var->xres_virtual, var->yres_virtual, &unused)) +return -EINVAL ; + ret = info->fbops->fb_check_var (var, info);if (ret)
drivers/video/fbdev/kyro/fbdev.c +8 -0
@@ -372,6 +372,11 @@ static int kyro_dev_overlay_viewport_set(u32 x, u32 y, u32 ulWidth, u32 ulHeight/* probably haven't called CreateOverlay yet */ return -EINVAL ; +if (ulWidth ==0 || ulWidth ==0xffffffff || + ulHeight ==0 || ulHeight ==0xffffffff || + (x <2 && ulWidth +2 ==0 )) +return -EINVAL ; +/* Stop Ramdac Output */ DisableRamdacOutput (deviceInfo.pSTGReg);
@@ -394,6 +399,9 @@ static int kyrofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) {struct kyrofb_info *par = info->par; +if (!var->pixclock) +return -EINVAL ; +if (var->bits_per_pixel !=16 && var->bits_per_pixel !=32 ) {printk (KERN_WARNING "kyrofb: depth not supported: %u\n" , var->bits_per_pixel);return -EINVAL ;
drivers/video/fbdev/riva/fbdev.c +3 -0
@@ -1088,6 +1088,9 @@ static int rivafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)int mode_valid =0 ;NVTRACE_ENTER (); +if (!var->pixclock) +return -EINVAL ; +switch (var->bits_per_pixel) { case 1 ... 8: var->red.offset = var->green.offset = var->blue.offset =0 ;
fs/btrfs/inode.c +1 -1
@@ -484,7 +484,7 @@ static noinline void compress_file_range(struct inode *inode,* inode has not been flagged as nocompress. This flag can * change at any time if we discover bad compression ratios. */ -if (nr_pages >1 &&inode_need_compress (inode)) { +if (inode_need_compress (inode)) {WARN_ON (pages); pages =kcalloc (nr_pages,sizeof (struct page *),GFP_NOFS );if (!pages) {
fs/cifs/cifs_unicode.c +2 -7
@@ -367,14 +367,9 @@ cifs_strndup_from_utf16(const char *src, const int maxlen,if (!dst)return NULL ;cifs_from_utf16 (dst, (__le16 *) src, len, maxlen, codepage, -NO_MAP_UNI_RSVD ); +NO_MAP_UNI_RSVD ); }else { - len =strnlen (src, maxlen); - len++; - dst =kmalloc (len,GFP_KERNEL ); -if (!dst) -return NULL ; -strlcpy (dst, src, len); + dst =kstrndup (src, maxlen,GFP_KERNEL ); }return dst;
fs/cifs/sess.c +1 -1
@@ -602,7 +602,7 @@ sess_alloc_buffer(struct sess_data *sess_data, int wct)return 0 ; out_free_smb_buf: -kfree (smb_buf); +cifs_small_buf_release (smb_buf); sess_data->iov[0 ].iov_base =NULL ; sess_data->iov[0 ].iov_len =0 ; sess_data->buf0_type =CIFS_NO_BUFFER ;
fs/ext4/inline.c +6 -0
@@ -747,6 +747,12 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,ext4_write_lock_xattr (inode, &no_expand);BUG_ON (!ext4_has_inline_data (inode)); +/* +* ei->i_inline_off may have changed since ext4_write_begin() +* called ext4_try_to_write_inline_data() +*/ + (void )ext4_find_inline_data_nolock (inode); + kaddr =kmap_atomic (page);ext4_write_inline_data (inode, &iloc, kaddr, pos, len);kunmap_atomic (kaddr);
fs/gfs2/acl.c +14 -13
@@ -86,19 +86,6 @@ int __gfs2_set_acl(struct inode *inode, struct posix_acl *acl, int type)char *data;const char *name =gfs2_acl_name (type); -if (acl && acl->a_count >GFS2_ACL_MAX_ENTRIES (GFS2_SB (inode))) -return -E2BIG ; - -if (type ==ACL_TYPE_ACCESS ) { -umode_t mode = inode->i_mode; - - error =posix_acl_update_mode (inode, &inode->i_mode, &acl); -if (error) -return error; -if (mode != inode->i_mode) -mark_inode_dirty (inode); - } -if (acl) { len =posix_acl_to_xattr (&init_user_ns, acl,NULL ,0 );if (len ==0 )
@@ -130,6 +117,9 @@ int gfs2_set_acl(struct inode *inode, struct posix_acl *acl, int type)bool need_unlock = false;int ret; +if (acl && acl->a_count >GFS2_ACL_MAX_ENTRIES (GFS2_SB (inode))) +return -E2BIG ; + ret =gfs2_rsqa_alloc (ip);if (ret)return ret;
@@ -140,7 +130,18 @@ int gfs2_set_acl(struct inode *inode, struct posix_acl *acl, int type)return ret; need_unlock = true; } +if (type ==ACL_TYPE_ACCESS && acl) { +umode_t mode = inode->i_mode; + + ret =posix_acl_update_mode (inode, &inode->i_mode, &acl); +if (ret) + goto unlock; +if (mode != inode->i_mode) +mark_inode_dirty (inode); + } + ret =__gfs2_set_acl (inode, acl, type); +unlock:if (need_unlock)gfs2_glock_dq_uninit (&gh);return ret;
fs/gfs2/lock_dlm.c +5 -0
@@ -296,6 +296,11 @@ static void gdlm_put_lock(struct gfs2_glock *gl)gfs2_sbstats_inc (gl,GFS2_LKS_DCOUNT );gfs2_update_request_times (gl); +/* don't want to call dlm if we've unmounted the lock protocol */ +if (test_bit (DFL_UNMOUNT , &ls->ls_recover_flags)) { +gfs2_glock_free (gl); +return ; + }/* don't want to skip dlm_unlock writing the lvb when lock has one */ if (test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags) &&
fs/udf/misc.c +11 -2
@@ -175,13 +175,22 @@ struct genericFormat *udf_get_extendedattr(struct inode *inode, uint32_t type,else offset =le32_to_cpu (eahd->appAttrLocation); -while (offset < iinfo->i_lenEAttr) { +while (offset +sizeof (*gaf) < iinfo->i_lenEAttr) { +uint32_t attrLength; + gaf = (struct genericFormat *)&ea[offset]; + attrLength =le32_to_cpu (gaf->attrLength); + +/* Detect undersized elements and buffer overflows */ +if ((attrLength <sizeof (*gaf)) || + (attrLength > (iinfo->i_lenEAttr - offset))) +break ; +if (le32_to_cpu (gaf->attrType) == type && gaf->attrSubtype == subtype)return gaf;else - offset +=le32_to_cpu (gaf->attrLength); + offset += attrLength; } }
fs/udf/super.c +16 -9
@@ -115,16 +115,10 @@ struct logicalVolIntegrityDescImpUse *udf_sb_lvidiu(struct super_block *sb)return NULL ; lvid = (struct logicalVolIntegrityDesc *)UDF_SB (sb)->s_lvid_bh->b_data; partnum =le32_to_cpu (lvid->numOfPartitions); -if ((sb->s_blocksize -sizeof (struct logicalVolIntegrityDescImpUse ) - - offsetof(struct logicalVolIntegrityDesc , impUse)) / - (2 *sizeof (uint32_t )) < partnum) { -udf_err (sb,"Logical volume integrity descriptor corrupted " -"(numOfPartitions = %u)!\n" , partnum); -return NULL ; - }/* The offset is to skip freeSpaceTable and sizeTable arrays */ offset = partnum *2 *sizeof (uint32_t ); -return (struct logicalVolIntegrityDescImpUse *)&(lvid->impUse[offset]); +return (struct logicalVolIntegrityDescImpUse *) + (((uint8_t *)(lvid +1 )) + offset); }/* UDF filesystem type */
@@ -1571,6 +1565,7 @@ static void udf_load_logicalvolint(struct super_block *sb, struct kernel_extent_struct udf_sb_info *sbi =UDF_SB (sb);struct logicalVolIntegrityDesc *lvid;int indirections =0 ; +u32 parts, impuselen;while (++indirections <=UDF_MAX_LVID_NESTING ) { final_bh =NULL ;
@@ -1597,15 +1592,27 @@ static void udf_load_logicalvolint(struct super_block *sb, struct kernel_extent_ lvid = (struct logicalVolIntegrityDesc *)final_bh->b_data;if (lvid->nextIntegrityExt.extLength ==0 ) -return ; + goto check; loc =leea_to_cpu (lvid->nextIntegrityExt); }udf_warn (sb,"Too many LVID indirections (max %u), ignoring.\n" ,UDF_MAX_LVID_NESTING ); +out_err:brelse (sbi->s_lvid_bh); sbi->s_lvid_bh =NULL ; +return ; +check: + parts =le32_to_cpu (lvid->numOfPartitions); + impuselen =le32_to_cpu (lvid->lengthOfImpUse); +if (parts >= sb->s_blocksize || impuselen >= sb->s_blocksize || +sizeof (struct logicalVolIntegrityDesc ) + impuselen + +2 * parts *sizeof (u32) > sb->s_blocksize) { +udf_warn (sb,"Corrupted LVID (parts=%u, impuselen=%u), " +"ignoring.\n" , parts, impuselen); + goto out_err; + } }
include/crypto/public_key.h +2 -2
@@ -35,9 +35,9 @@ extern void public_key_free(struct public_key *key);struct public_key_signature {struct asymmetric_key_id *auth_ids[2 ];u8 *s;/* Signature */ -u32 s_size;/* Number of bytes in signature */ u8 *digest; -u8 digest_size;/* Number of bytes in digest */ +u32 s_size;/* Number of bytes in signature */ +u32 digest_size;/* Number of bytes in digest */ const char *pkey_algo;const char *hash_algo; };
include/linux/hugetlb.h +9 -0
@@ -482,6 +482,11 @@ static inline spinlock_t *huge_pte_lockptr(struct hstate *h,void hugetlb_report_usage (struct seq_file *m,struct mm_struct *mm); +static inline void hugetlb_count_init (struct mm_struct *mm) +{ +atomic_long_set (&mm->hugetlb_usage,0 ); +} +static inline void hugetlb_count_add (long l,struct mm_struct *mm) {atomic_long_add (l, &mm->hugetlb_usage);
@@ -527,6 +532,10 @@ static inline spinlock_t *huge_pte_lockptr(struct hstate *h,return &mm->page_table_lock; } +static inline void hugetlb_count_init (struct mm_struct *mm) +{ +} +static inline void hugetlb_report_usage (struct seq_file *f,struct mm_struct *m) { }
include/linux/pci.h +3 -2
@@ -1552,8 +1552,9 @@ static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }static inline void pci_disable_device (struct pci_dev *dev) { }static inline int pci_assign_resource (struct pci_dev *dev,int i) {return -EBUSY ; } -static inline int __pci_register_driver (struct pci_driver *drv, -struct module *owner) +static inline int __must_check __pci_register_driver (struct pci_driver *drv, +struct module *owner, +const char *mod_name) {return 0 ; }static inline int pci_register_driver (struct pci_driver *drv) {return 0 ; }
include/linux/power/max17042_battery.h +1 -1
@@ -75,7 +75,7 @@ enum max17042_register { MAX17042_RelaxCFG =0x2A , MAX17042_MiscCFG =0x2B ,MAX17042_TGAIN =0x2C , - MAx17042_TOFF =0x2D , +MAX17042_TOFF =0x2D ,MAX17042_CGAIN =0x2E , MAX17042_COFF = 0x2F,
include/linux/skbuff.h +1 -1
@@ -1613,7 +1613,7 @@ static inline void __skb_insert(struct sk_buff *newsk, newsk->next = next; newsk->prev = prev; next->prev = prev->next = newsk; - list->qlen++; +WRITE_ONCE (list->qlen, list->qlen +1 ); } static inline void __skb_queue_splice(const struct sk_buff_head *list,
include/uapi/linux/serial_reg.h +1 -0
@@ -61,6 +61,7 @@* ST16C654: 8 16 56 60 8 16 32 56 PORT_16654 * TI16C750: 1 16 32 56 xx xx xx xx PORT_16750 * TI16C752: 8 16 56 60 8 16 32 56 +* OX16C950: 16 32 112 120 16 32 64 112 PORT_16C950 * Tegra: 1 4 8 14 16 8 4 1 PORT_TEGRA */ #define UART_FCR_R_TRIG_00 0x00
kernel/events/core.c +1 -1
@@ -8115,7 +8115,7 @@ static void perf_event_addr_filters_apply(struct perf_event *event)if (task ==TASK_TOMBSTONE )return ; - mm =get_task_mm (event->ctx->task); + mm =get_task_mm (task);if (!mm) goto restart;
kernel/fork.c +1 -0
@@ -789,6 +789,7 @@ static struct mm_struct *mm_init(struct mm_struct *mm, struct task_struct *p, mm->pmd_huge_pte =NULL ;#endif mm_init_uprobes_state (mm); +hugetlb_count_init (mm);if (current->mm) { mm->flags = current->mm->flags &MMF_INIT_MASK ;
kernel/pid_namespace.c +1 -1
@@ -52,7 +52,7 @@ static struct kmem_cache *create_pid_cachep(int nr_ids)snprintf (pcache->name,sizeof (pcache->name),"pid_%d" , nr_ids); cachep =kmem_cache_create (pcache->name,sizeof (struct pid ) + (nr_ids -1 ) *sizeof (struct upid ), -0 ,SLAB_HWCACHE_ALIGN ,NULL ); +0 ,SLAB_HWCACHE_ALIGN |SLAB_ACCOUNT ,NULL );if (cachep ==NULL ) goto err_cachep;
lib/test_bpf.c +10 -3
@@ -4295,8 +4295,8 @@ static struct bpf_test tests[] = { .u.insns_int = {BPF_LD_IMM64 (R0 ,0 ),BPF_LD_IMM64 (R1 ,0xffffffffffffffffLL ), -BPF_STX_MEM (BPF_W ,R10 ,R1 ,-40 ), -BPF_LDX_MEM (BPF_W ,R0 ,R10 ,-40 ), +BPF_STX_MEM (BPF_DW ,R10 ,R1 ,-40 ), +BPF_LDX_MEM (BPF_DW ,R0 ,R10 ,-40 ),BPF_EXIT_INSN (), }, INTERNAL,
@@ -5744,7 +5744,14 @@ static int run_one(const struct bpf_prog *fp, struct bpf_test *test)u64 duration;u32 ret; -if (test->test[i].data_size ==0 && +/* +* NOTE: Several sub-tests may be present, in which case +* a zero {data_size, result} tuple indicates the end of +* the sub-test array. The first test is always run, +* even if both data_size and result happen to be zero. +*/ +if (i >0 && + test->test[i].data_size ==0 && test->test[i].result ==0 )break ;
mm/kmemleak.c +1 -1
@@ -1442,7 +1442,7 @@ static void kmemleak_scan(void)if (page_count (page) ==0 )continue ;scan_block (page, page +1 ,NULL ); -if (!(pfn % (MAX_SCAN_SIZE /sizeof (*page)))) +if (!(pfn &63 ))cond_resched (); } }
mm/page_alloc.c +4 -4
@@ -814,7 +814,7 @@ static inline void __free_one_page(struct page *page,struct page *buddy;unsigned int max_order; - max_order = min_t(unsigned int, MAX_ORDER, pageblock_order + 1); + max_order = min_t(unsigned int, MAX_ORDER - 1, pageblock_order);VM_BUG_ON (!zone_is_initialized (zone));VM_BUG_ON_PAGE (page->flags &PAGE_FLAGS_CHECK_AT_PREP , page);
@@ -829,7 +829,7 @@ static inline void __free_one_page(struct page *page,VM_BUG_ON_PAGE (bad_range (zone, page), page); continue_merging: -while (order < max_order -1 ) { +while (order < max_order) { buddy_idx =__find_buddy_index (page_idx, order); buddy = page + (buddy_idx - page_idx);if (!page_is_buddy (page, buddy, order))
@@ -850,7 +850,7 @@ static inline void __free_one_page(struct page *page, page_idx = combined_idx; order++; } -if (max_order <MAX_ORDER ) { +if (order <MAX_ORDER -1 ) {/* If we are here, it means order is >= pageblock_order. * We want to prevent merge between freepages on isolate * pageblock and normal pageblock. Without this, pageblock
@@ -871,7 +871,7 @@ static inline void __free_one_page(struct page *page, is_migrate_isolate(buddy_mt))) goto done_merging; } - max_order++; + max_order = order +1 ; goto continue_merging; }
net/bluetooth/cmtp/cmtp.h +1 -1
@@ -26,7 +26,7 @@#include <linux/types.h> #include <net/bluetooth/bluetooth.h> -#define BTNAMSIZ 18 +#define BTNAMSIZ 21/* CMTP ioctl defines */ #define CMTPCONNADD _IOW('C', 200, int)
net/bluetooth/hci_core.c +14 -0
@@ -1223,6 +1223,12 @@ int hci_inquiry(void __user *arg) goto done; } +/* Restrict maximum inquiry length to 60 seconds */ +if (ir.length >60 ) { + err = -EINVAL ; + goto done; + } +hci_dev_lock (hdev);if (inquiry_cache_age (hdev) >INQUIRY_CACHE_AGE_MAX ||inquiry_cache_empty (hdev) || ir.flags &IREQ_CACHE_FLUSH ) {
@@ -1546,6 +1552,14 @@ int hci_dev_do_close(struct hci_dev *hdev)hci_request_cancel_all (hdev);hci_req_sync_lock (hdev); +if (!hci_dev_test_flag (hdev,HCI_UNREGISTER ) && + !hci_dev_test_flag (hdev,HCI_USER_CHANNEL ) && +test_bit (HCI_UP , &hdev->flags)) { +/* Execute vendor specific shutdown routine */ +if (hdev->shutdown) + hdev->shutdown (hdev); + } +if (!test_and_clear_bit (HCI_UP , &hdev->flags)) {cancel_delayed_work_sync (&hdev->cmd_timer);hci_req_sync_unlock (hdev);
net/bluetooth/hci_event.c +15 -0
@@ -3761,6 +3761,21 @@ static void hci_sync_conn_complete_evt(struct hci_dev *hdev,switch (ev->status) {case 0x00 : +/* The synchronous connection complete event should only be +* sent once per new connection. Receiving a successful +* complete event when the connection status is already +* BT_CONNECTED means that the device is misbehaving and sent +* multiple complete event packets for the same new connection. +* +* Registering the device more than once can corrupt kernel +* memory, hence upon detecting this invalid event, we report +* an error and ignore the packet. +*/ +if (conn->state ==BT_CONNECTED ) { +bt_dev_err (hdev,"Ignoring connect complete event for existing connection" ); + goto unlock; + } + conn->handle =__le16_to_cpu (ev->handle); conn->state =BT_CONNECTED ; conn->type = ev->link_type;
net/bluetooth/sco.c +22 -28
63 lines not on this page · raw message
net/ipv4/route.c +30 -16
46 lines not on this page · 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.