Linux 4.9.249
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.9.249 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
------------
Makefile | 2 arch/arc/kernel/stacktrace.c | 23 ++++--- arch/arm/boot/dts/at91-sama5d3_xplained.dts | 7 ++ arch/arm/boot/dts/at91-sama5d4_xplained.dts | 7 ++ arch/arm/boot/dts/at91sam9rl.dtsi | 19 +++-- arch/arm/boot/dts/exynos5410-odroidxu.dts | 6 + arch/arm/boot/dts/exynos5410-pinctrl.dtsi | 28 ++++++++ arch/arm/boot/dts/exynos5410.dtsi | 4 + arch/arm/kernel/head.S | 6 - arch/arm64/boot/dts/exynos/exynos7.dtsi | 4 - arch/arm64/boot/dts/rockchip/rk3399.dtsi | 3 arch/arm64/include/asm/kvm_host.h | 1 arch/arm64/kvm/sys_regs.c | 1 arch/mips/bcm47xx/Kconfig | 1 arch/powerpc/include/asm/cputable.h | 5 - arch/powerpc/perf/core-book3s.c | 10 +++ arch/powerpc/platforms/pseries/suspend.c | 1 arch/powerpc/xmon/nonstdio.c | 2 arch/um/drivers/xterm.c | 5 + arch/x86/kernel/kprobes/core.c | 5 + drivers/acpi/acpi_pnp.c | 3 drivers/acpi/resource.c | 2 drivers/block/xen-blkback/xenbus.c | 1 drivers/bus/mips_cdmm.c | 4 - drivers/clk/clk-s2mps11.c | 1 drivers/clk/mvebu/armada-37xx-xtal.c | 4 - drivers/clk/tegra/clk-id.h | 1 drivers/clk/tegra/clk-tegra-periph.c | 2 drivers/clk/ti/fapll.c | 11 ++- drivers/clocksource/arm_arch_timer.c | 23 ++++--- drivers/clocksource/cadence_ttc_timer.c | 18 ++--- drivers/cpufreq/highbank-cpufreq.c | 7 ++ drivers/cpufreq/loongson1-cpufreq.c | 1 drivers/cpufreq/scpi-cpufreq.c | 1 drivers/cpufreq/sti-cpufreq.c | 7 ++ drivers/crypto/omap-aes.c | 3 drivers/crypto/talitos.c | 6 - drivers/extcon/extcon-max77693.c | 2 drivers/gpu/drm/drm_dp_aux_dev.c | 2 drivers/gpu/drm/gma500/cdv_intel_dp.c | 2 drivers/gpu/drm/omapdrm/omap_dmm_tiler.c | 1 drivers/gpu/drm/tegra/sor.c | 10 ++- drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c | 8 ++ drivers/hsi/controllers/omap_ssi_core.c | 2 drivers/iio/adc/rockchip_saradc.c | 2 drivers/iio/industrialio-buffer.c | 6 - drivers/iio/pressure/mpl3115.c | 9 ++ drivers/infiniband/core/cm.c | 2 drivers/infiniband/hw/cxgb4/cq.c | 3 drivers/infiniband/hw/mthca/mthca_cq.c | 2 drivers/infiniband/hw/mthca/mthca_dev.h | 1 drivers/infiniband/sw/rxe/rxe_req.c | 3 drivers/input/keyboard/cros_ec_keyb.c | 1 drivers/input/misc/cm109.c | 7 +- drivers/input/mouse/cyapa_gen6.c | 2 drivers/input/serio/i8042-x86ia64io.h | 42 ++++++++++++ drivers/input/touchscreen/ads7846.c | 8 +- drivers/input/touchscreen/goodix.c | 12 +++ drivers/irqchip/irq-alpine-msi.c | 3 drivers/md/dm-ioctl.c | 1 drivers/md/dm-table.c | 6 - drivers/md/md.c | 7 +- drivers/media/common/siano/smsdvb-main.c | 5 + drivers/media/pci/netup_unidvb/netup_unidvb_spi.c | 5 - drivers/media/pci/saa7146/mxb.c | 19 +++-- drivers/media/pci/solo6x10/solo6x10-g723.c | 2 drivers/media/rc/sunxi-cir.c | 2 drivers/media/usb/gspca/gspca.c | 1 drivers/media/usb/msi2500/msi2500.c | 2 drivers/memstick/core/memstick.c | 1 drivers/memstick/host/r592.c | 12 ++- drivers/mtd/cmdlinepart.c | 14 ++++ drivers/net/can/softing/softing_main.c | 9 ++ drivers/net/ethernet/allwinner/sun4i-emac.c | 7 +- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 - drivers/net/ethernet/korina.c | 2 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 20 ++++-- drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 7 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 1 drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 6 - drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 13 +++- drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 36 ++++++++--- drivers/net/wireless/intersil/orinoco/orinoco_usb.c | 14 ++-- drivers/net/wireless/st/cw1200/main.c | 2 drivers/nfc/s3fwrn5/firmware.c | 4 - drivers/pci/slot.c | 6 - drivers/pinctrl/intel/pinctrl-baytrail.c | 8 ++ drivers/pinctrl/intel/pinctrl-merrifield.c | 8 ++ drivers/pinctrl/pinctrl-amd.c | 7 -- drivers/pinctrl/pinctrl-falcon.c | 14 ++-- drivers/platform/x86/acer-wmi.c | 1 drivers/ps3/ps3stor_lib.c | 2 drivers/s390/block/dasd_alias.c | 12 +++ drivers/scsi/be2iscsi/be_main.c | 4 - drivers/scsi/bnx2i/Kconfig | 1 drivers/scsi/fnic/fnic_main.c | 1 drivers/scsi/mpt3sas/mpt3sas_base.c | 2 drivers/scsi/pm8001/pm8001_init.c | 3 drivers/soc/qcom/smp2p.c | 5 - drivers/soc/tegra/fuse/speedo-tegra210.c | 2 drivers/soc/ti/knav_dma.c | 13 +++- drivers/soc/ti/knav_qmss_queue.c | 4 - drivers/spi/Kconfig | 3 drivers/spi/spi-bcm2835aux.c | 17 +---- drivers/spi/spi-davinci.c | 2 drivers/spi/spi-img-spfi.c | 4 - drivers/spi/spi-pic32.c | 1 drivers/spi/spi-rb4xx.c | 2 drivers/spi/spi-sc18is602.c | 13 ---- drivers/spi/spi-sh.c | 13 +--- drivers/spi/spi-st-ssc4.c | 5 - drivers/spi/spi-tegra114.c | 2 drivers/spi/spi-tegra20-sflash.c | 1 drivers/spi/spi-tegra20-slink.c | 2 drivers/spi/spi-ti-qspi.c | 1 drivers/spi/spi.c | 21 ++++++ drivers/staging/comedi/drivers/mf6x4.c | 3 drivers/staging/greybus/audio_codec.c | 2 drivers/staging/speakup/speakup_dectlk.c | 2 drivers/tty/serial/8250/8250_omap.c | 5 - drivers/tty/serial/serial_core.c | 4 + drivers/usb/chipidea/ci_hdrc_imx.c | 3 drivers/usb/core/quirks.c | 3 drivers/usb/gadget/function/f_acm.c | 2 drivers/usb/gadget/function/f_fs.c | 5 + drivers/usb/gadget/function/f_midi.c | 6 + drivers/usb/gadget/function/f_rndis.c | 4 - drivers/usb/gadget/udc/dummy_hcd.c | 2 drivers/usb/host/ehci-omap.c | 1 drivers/usb/host/oxu210hp-hcd.c | 4 - drivers/usb/host/xhci-hub.c | 4 + drivers/usb/misc/sisusbvga/Kconfig | 2 drivers/usb/serial/keyspan_pda.c | 63 ++++++++++--------- drivers/usb/serial/mos7720.c | 2 drivers/usb/serial/option.c | 23 ++++++- drivers/vfio/pci/vfio_pci.c | 4 - drivers/watchdog/qcom-wdt.c | 2 fs/btrfs/inode.c | 2 fs/btrfs/qgroup.c | 4 - fs/btrfs/scrub.c | 17 ++--- fs/btrfs/tests/btrfs-tests.c | 8 ++ fs/ceph/caps.c | 11 ++- fs/ext4/mballoc.c | 1 fs/jffs2/readinode.c | 16 ++++ fs/jfs/jfs_dmap.h | 2 fs/lockd/host.c | 20 +++--- fs/nfs/inode.c | 2 fs/nfs/nfs4proc.c | 10 ++- fs/nfs_common/grace.c | 6 + fs/nfsd/nfssvc.c | 3 include/linux/seq_buf.h | 2 include/linux/sunrpc/xprt.h | 1 include/linux/trace_seq.h | 4 - kernel/cpu.c | 6 + net/bluetooth/hci_event.c | 17 +++-- net/bridge/br_vlan.c | 4 - net/ipv4/tcp_output.c | 9 +- net/mac80211/mesh_pathtbl.c | 4 - net/sunrpc/xprt.c | 65 +++++++++++++++----- net/sunrpc/xprtrdma/module.c | 1 net/sunrpc/xprtrdma/transport.c | 1 net/sunrpc/xprtsock.c | 4 + net/wireless/nl80211.c | 2 scripts/checkpatch.pl | 2 sound/core/oss/pcm_oss.c | 28 +++++--- sound/soc/codecs/wm_adsp.c | 5 - sound/soc/jz4740/jz4740-i2s.c | 4 + sound/soc/soc-pcm.c | 2 sound/usb/clock.c | 6 + sound/usb/format.c | 2 sound/usb/stream.c | 6 - tools/perf/util/parse-regs-options.c | 2 172 files changed, 831 insertions(+), 341 deletions(-)
Alan Stern (1):
media: gspca: Fix memory leak in probe
Alexander Sverdlin (1):
serial: 8250_omap: Avoid FIFO corruption caused by MDR1 access
Alexandre Belloni (1):
ARM: dts: at91: at91sam9rl: fix ADC triggers
Alexey Kardashevskiy (1):
serial_core: Check for port state when tty is in error state
Andy Shevchenko (2):
pinctrl: merrifield: Set default bias in case no particular value given
pinctrl: baytrail: Avoid clearing debounce value when turning it off
Anmol Karn (1):
Bluetooth: Fix null pointer dereference in hci_event_packet()
Anton Ivanov (1):
um: chan_xterm: Fix fd leak
Antti Palosaari (1):
media: msi2500: assign SPI bus number dynamically
Ard Biesheuvel (1):
ARM: p2v: fix handling of LPAE translation in BE mode
Arnd Bergmann (3):
RDMa/mthca: Work around -Wenum-conversion warning
seq_buf: Avoid type mismatch for seq_buf_init
Input: cyapa_gen6 - fix out-of-bounds stack access
Athira Rajeev (1):
powerpc/perf: Exclude kernel samples while counting events in user space.
Bob Pearson (1):
RDMA/rxe: Compute PSN windows correctly
Bongsu Jeon (1):
nfc: s3fwrn5: Release the nfc firmware
Bui Quang Minh (1):
USB: dummy-hcd: Fix uninitialized array use in init()
Calum Mackay (1):
lockd: don't use interval-based rebinding over TCP
Cezary Rojewski (1):
ASoC: pcm: DRAIN support reactivation
Cheng Lin (1):
nfs_common: need lock during iterate through the list
Chris Chiu (1):
Input: i8042 - add Acer laptops to the i8042 reset list
Christophe JAILLET (3):
net: bcmgenet: Fix a resource leak in an error handling path in the probe functin
net: allwinner: Fix some resources leak in the error handling path of the probe and in the remove function
clk: s2mps11: Fix a resource leak in error handling paths in the probe function
Christophe Leroy (3):
crypto: talitos - Fix return type of current_desc_hdr() powerpc/feature: Fix CPU_FTRS_ALWAYS by removing CPU_FTRS_GENERIC_32 powerpc/xmon: Change printk() to pr_cont()
Chuhong Yuan (1):
ASoC: jz4740-i2s: add missed checks for clk_get()
Chunguang Xu (1):
ext4: fix a memory leak of ext4_free_data
Coiby Xu (1):
pinctrl: amd: remove debounce filter setting in IRQ type setting
Cristian Birsan (2):
ARM: dts: at91: sama5d4_xplained: add pincontrol for USB Host
ARM: dts: at91: sama5d3_xplained: add pincontrol for USB Host
Dae R. Jeong (1):
md: fix a warning caused by a race between concurrent md_ioctl()s
Dan Carpenter (4):
scsi: be2iscsi: Revert "Fix a theoretical leak in beiscsi_create_eqs()"
media: saa7146: fix array overflow in vidioc_s_audio()
ASoC: wm_adsp: remove "ctl" from list on error in wm_adsp_create_control()
qlcnic: Fix error code in probe
Daniel Scally (1):
Revert "ACPI / resources: Use AE_CTRL_TERMINATE to terminate resources walks"
Dave Kleikamp (1):
jfs: Fix array index bounds check in dbAdjTree
Dmitry Osipenko (1):
clk: tegra: Fix duplicated SE clock entry
Dmitry Torokhov (3):
Input: cm109 - do not stomp on control URB
Input: ads7846 - fix unaligned access on 7845
Input: cros_ec_keyb - send 'scancodes' in addition to key events
Dwaipayan Ray (1):
checkpatch: fix unescaped left brace
Eric Dumazet (1):
mac80211: mesh: fix mesh_pathtbl_init() error path
Evan Green (1):
soc: qcom: smp2p: Safely acquire spinlock without IRQs
Fabio Estevam (1):
usb: chipidea: ci_hdrc_imx: Pass DISABLE_DEVICE_STREAMING flag to imx6ul
Filipe Manana (1):
Btrfs: fix selftests failure due to uninitialized i_mode in test inodes
Fugang Duan (1):
net: stmmac: delete the eee_ctrl_timer after napi disabled
Greg Kroah-Hartman (1):
Linux 4.9.249
Hui Wang (1):
ACPI: PNP: compare the string length in the matching_id()
Ian Abbott (1):
staging: comedi: mf6x4: Fix AI end-of-conversion detection
Jack Pham (1):
usb: gadget: f_fs: Re-use SS descriptors for SuperSpeedPlus
Jason Gunthorpe (1):
vfio-pci: Use io_remap_pfn_range() for PCI IO memory
Jing Xiangfeng (2):
HSI: omap_ssi: Don't jump to free ID in ssi_add_controller()
memstick: r592: Fix error return in r592_probe()
Johan Hovold (8):
USB: serial: option: add interface-number sanity check to flag handling
USB: serial: mos7720: fix parallel-port state restore
USB: serial: keyspan_pda: fix dropped unthrottle interrupts
USB: serial: keyspan_pda: fix write deadlock
USB: serial: keyspan_pda: fix stalled writes
USB: serial: keyspan_pda: fix write-wakeup use-after-free
USB: serial: keyspan_pda: fix tx-unthrottle use-after-free
USB: serial: keyspan_pda: fix write unthrottling
Johannes Berg (1):
iwlwifi: pcie: limit memory read spin time
Jonathan Cameron (1):
iio:pressure:mpl3115: Force alignment of buffer
Jubin Zhong (1):
PCI: Fix pci_slot_release() NULL pointer dereference
Julian Sax (1):
HID: i2c-hid: add Vero K147 to descriptor override
Kamal Heib (1):
RDMA/cxgb4: Validate the number of CQEs
Keita Suzuki (1):
media: siano: fix memory leak of debugfs members in smsdvb_hotplug
Keqian Zhu (1):
clocksource/drivers/arm_arch_timer: Correct fault programming of CNTKCTL_EL1.EVNTI
Krzysztof Kozlowski (3):
ARM: dts: exynos: fix roles of USB 3.0 ports on Odroid XU
ARM: dts: exynos: fix USB 3.0 VBUS control and over-current pins on Exynos5410
ARM: dts: exynos: fix USB 3.0 pins supply being turned off on Odroid XU
Leon Romanovsky (1):
RDMA/cm: Fix an attempt to use non-valid pointer when cleaning timewait
Li Jun (1):
xhci: Give USB2 ports time to enter U3 in bus suspend
Luis Henriques (1):
ceph: fix race in concurrent __ceph_remove_cap invocations
Lukas Wunner (9):
spi: bcm2835aux: Fix use-after-free on unbind
spi: Prevent adding devices below an unregistering controller
media: netup_unidvb: Don't leak SPI master in probe error path
spi: spi-sh: Fix use-after-free on unbind
spi: davinci: Fix use-after-free on unbind
spi: pic32: Don't leak DMA channels in probe error path
spi: rb4xx: Don't leak SPI master in probe error path
spi: sc18is602: Don't leak SPI master in probe error path
spi: st-ssc4: Fix unbalanced pm_runtime_disable() in probe error path
Manivannan Sadhasivam (1):
watchdog: qcom: Avoid context switch in restart handler
Marc Zyngier (2):
irqchip/alpine-msi: Fix freeing of interrupts on allocation error path
KVM: arm64: Introduce handling of AArch32 TTBCR2 traps
Marek Szyprowski (1):
extcon: max77693: Fix modalias string
Markus Reichl (1):
arm64: dts: rockchip: Assign a fixed index to mmc devices on rk3399 boards.
Martin Blumenstingl (1):
net: stmmac: dwmac-meson8b: fix mask definition of the m250_sel mux
Masami Hiramatsu (1):
x86/kprobes: Restore BTF if the single-stepping is cancelled
Moshe Shemesh (1):
net/mlx4_en: Avoid scheduling restart task if it is already running
Nathan Chancellor (1):
spi: bcm2835aux: Restore err assignment in bcm2835aux_spi_probe
Nathan Lynch (1):
powerpc/pseries/hibernation: drop pseries_suspend_begin() from suspend ops
Neal Cardwell (1):
tcp: fix cwnd-limited bug for TSO deferral where we send nothing
Necip Fazil Yildiran (1):
MIPS: BCM47XX: fix kconfig dependency bug for BCM47XX_BCMA
NeilBrown (1):
NFS: switch nfsiod to be an UNBOUND workqueue.
Nicholas Piggin (1):
kernel/cpu: add arch override for clear_tasks_mm_cpumask() mm handling
Nicolin Chen (1):
soc/tegra: fuse: Fix index bug in get_process_id
Nuno Sá (1):
iio: buffer: Fix demux update
Oleksij Rempel (1):
Input: ads7846 - fix integer overflow on Rt calculation
Olga Kornievskaia (1):
NFSv4.2: condition READDIR's mask for security label based on LSM state
Oliver Neukum (1):
USB: add RESET_RESUME quirk for Snapscan 1212
Pali Rohár (4):
cpufreq: highbank: Add missing MODULE_DEVICE_TABLE
cpufreq: st: Add missing MODULE_DEVICE_TABLE
cpufreq: loongson1: Add missing MODULE_ALIAS
cpufreq: scpi: Add missing MODULE_ALIAS
Pavel Machek (1):
btrfs: fix return value mixup in btrfs_get_extent
Pawel Wieczorkiewicz (1):
xen-blkback: set ring->xenblkd to NULL after kthread_stop()
Paweł Chmiel (1):
arm64: dts: exynos: Correct psci compatible used on Exynos7
Peilin Ye (1):
Bluetooth: Fix slab-out-of-bounds read in hci_le_direct_adv_report_evt()
Qinglang Miao (7):
drm/tegra: sor: Disable clocks on error in tegra_sor_init()
media: solo6x10: fix missing snd_card_free in error handling case
memstick: fix a double-free bug in memstick_check
cw1200: fix missing destroy_workqueue() on error in cw1200_init_common
mips: cdmm: fix use-after-free in mips_cdmm_bus_discover
dm ioctl: fix error return code in target_message
iio: adc: rockchip_saradc: fix missing clk_disable_unprepare() on error in rockchip_saradc_resume
Qu Wenruo (2):
btrfs: quota: Set rescan progress to (u64)-1 if we hit last leaf
btrfs: scrub: Don't use inode page cache in scrub_handle_errored_block()
Randy Dunlap (1):
scsi: bnx2i: Requires MMU
Sara Sharon (1):
cfg80211: initialize rekey_data
Sean Young (1):
media: sunxi-cir: ensure IR is handled when it is continuous
Sebastian Andrzej Siewior (1):
orinoco: Move context allocation after processing the skb
Simon Beginn (1):
Input: goodix - add upside-down quirk for Teclast X98 Pro tablet
Sreekanth Reddy (1):
scsi: mpt3sas: Increase IOCInit request timeout to 30s
Stefan Haberland (3):
s390/dasd: prevent inconsistent LCU device data s390/dasd: fix list corruption of pavgroup group list s390/dasd: fix list corruption of lcu list
Sven Eckelmann (1):
mtd: parser: cmdline: Fix parsing of part-names with colons
Takashi Iwai (5):
ALSA: usb-audio: Fix potential out-of-bounds shift
ALSA: usb-audio: Fix control 'access overflow' errors from chmap
ALSA: pcm: oss: Fix potential out-of-bounds shift
ALSA: pcm: oss: Fix a few more UBSAN fixes
ALSA: usb-audio: Disable sample read check if firmware doesn't give back
Terry Zhou (1):
clk: mvebu: a3700: fix the XTAL MODE pin to MPP1_9
Thomas Gleixner (2):
USB: sisusbvga: Make console support depend on BROKEN dm table: Remove BUG_ON(in_interrupt())
Timo Witte (1):
platform/x86: acer-wmi: add automatic keyboard background light toggle key as KEY_LIGHTS_TOGGLE
Tom Rix (1):
drm/gma500: fix double free of gma_connector
Trond Myklebust (1):
SUNRPC: xprt_load_transport() needs to support the netid "rdma6"
Vincent Stehlé (2):
powerpc/ps3: use dma_mapping_error()
net: korina: fix return value
Vineet Gupta (1):
ARC: stack unwinding: don't assume non-current task is sleeping
Will McVicker (2):
USB: gadget: f_midi: setup SuperSpeed Plus descriptors
USB: gadget: f_rndis: fix bitrate for SuperSpeed and above
Yang Yingliang (2):
drm/omap: dmm_tiler: fix return error code in omap_dmm_probe()
speakup: fix uninitialized flush_lock
Yu Kuai (2):
clocksource/drivers/cadence_ttc: Fix memory leak in ttc_setup_clockevent()
pinctrl: falcon: add missing put_device() call in pinctrl_falcon_probe()
Zhang Changzhong (2):
net: bridge: vlan: fix error return code in __vlan_add()
scsi: fnic: Fix error return code in fnic_probe()
Zhang Qilong (14):
can: softing: softing_netdev_open(): fix error handling
spi: img-spfi: fix reference leak in img_spfi_resume
spi: spi-ti-qspi: fix reference leak in ti_qspi_setup
spi: tegra20-slink: fix reference leak in slink ops of tegra20
spi: tegra20-sflash: fix reference leak in tegra_sflash_resume
spi: tegra114: fix reference leak in tegra spi ops
staging: greybus: codecs: Fix reference counter leak in error handling
crypto: omap-aes - Fix PM disable depth imbalance in omap_aes_probe
soc: ti: knav_qmss: fix reference leak in knav_queue_probe
soc: ti: Fix reference imbalance in knav_dma_probe
scsi: pm80xx: Fix error return in pm8001_pci_probe()
usb: ehci-omap: Fix PM disable depth umbalance in ehci_hcd_omap_probe
usb: oxu210hp-hcd: Fix memory leak in oxu_create
clk: ti: Fix memleak in ti_fapll_synth_setup
Zhe Li (1):
jffs2: Fix GC exit abnormally
Zheng Zengkai (1):
perf record: Fix memory leak when using '--user-regs=?' to list registers
Zhihao Cheng (1):
drivers: soc: ti: knav_qmss_queue: Fix error return code in knav_queue_probe
Zwane Mwaikambo (1):
drm/dp_aux_dev: check aux_dev before use in drm_dp_aux_dev_get_by_minor()
kazuo ito (1):
nfsd: Fix message level for normal termination
taehyun.cho (1):
USB: gadget: f_acm: add support for SuperSpeed Plus
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 248 +SUBLEVEL = 249 EXTRAVERSION = NAME = Roaring Lionus
arch/arc/kernel/stacktrace.c +15 -8
@@ -39,15 +39,15 @@#ifdef CONFIG_ARC_DW2_UNWIND -static void seed_unwind_frame_info (struct task_struct *tsk, -struct pt_regs *regs, -struct unwind_frame_info *frame_info) +static int +seed_unwind_frame_info (struct task_struct *tsk,struct pt_regs *regs, +struct unwind_frame_info *frame_info) {/* * synchronous unwinding (e.g. dump_stack) * - uses current values of SP and friends */ -if (tsk ==NULL && regs ==NULL ) { +if (regs ==NULL && (tsk ==NULL || tsk == current)) {unsigned long fp, sp, blink, ret; frame_info->task = current;
@@ -66,11 +66,15 @@ static void seed_unwind_frame_info(struct task_struct *tsk, frame_info->call_frame =0 ; }else if (regs ==NULL ) {/* -* Asynchronous unwinding of sleeping task -* - Gets SP etc from task's pt_regs (saved bottom of kernel -* mode stack of task) +* Asynchronous unwinding of a likely sleeping task +* - first ensure it is actually sleeping +* - if so, it will be in __switch_to, kernel mode SP of task +* is safe-kept and BLINK at a well known location in there */ +if (tsk->state ==TASK_RUNNING ) +return -1 ; + frame_info->task = tsk; frame_info->regs.r27 =TSK_K_FP (tsk);
@@ -104,6 +108,8 @@ static void seed_unwind_frame_info(struct task_struct *tsk, frame_info->regs.r63 = regs->ret; frame_info->call_frame = 0; } + +return 0 ; }#endif
@@ -117,7 +123,8 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,unsigned int address;struct unwind_frame_info frame_info; -seed_unwind_frame_info (tsk, regs, &frame_info); +if (seed_unwind_frame_info (tsk, regs, &frame_info)) +return 0 ;while (1 ) { address =UNW_PC (&frame_info);
arch/arm/boot/dts/at91-sama5d3_xplained.dts +7 -0
@@ -231,6 +231,11 @@ atmel,pins = <AT91_PIOE 9 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PE9, conflicts with A9 */ }; + pinctrl_usb_default: usb_default { + atmel,pins = + <AT91_PIOE 3 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOE 4 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; }; }; };
@@ -288,6 +293,8 @@ &pioE 3 GPIO_ACTIVE_LOW &pioE 4 GPIO_ACTIVE_LOW >; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usb_default>; status = "okay"; };
arch/arm/boot/dts/at91-sama5d4_xplained.dts +7 -0
@@ -152,6 +152,11 @@ atmel,pins = <AT91_PIOE 31 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; }; + pinctrl_usb_default: usb_default { + atmel,pins = + <AT91_PIOE 11 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOE 14 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; pinctrl_key_gpio: key_gpio_0 { atmel,pins = <AT91_PIOE 8 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
@@ -177,6 +182,8 @@ &pioE 11 GPIO_ACTIVE_HIGH &pioE 14 GPIO_ACTIVE_HIGH >; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usb_default>; status = "okay"; };
arch/arm/boot/dts/at91sam9rl.dtsi +11 -8
@@ -266,23 +266,26 @@ atmel,adc-use-res = "highres"; trigger0 { - trigger-name = "timer-counter-0"; + trigger-name = "external-rising"; trigger-value = <0x1>; + trigger-external; }; + trigger1 { - trigger-name = "timer-counter-1"; - trigger-value = <0x3>; + trigger-name = "external-falling"; + trigger-value = <0x2>; + trigger-external; }; trigger2 { - trigger-name = "timer-counter-2"; - trigger-value = <0x5>; + trigger-name = "external-any"; + trigger-value = <0x3>; + trigger-external; }; trigger3 { - trigger-name = "external"; - trigger-value = <0x13>; - trigger-external; + trigger-name = "continuous"; + trigger-value = <0x6>; }; };
arch/arm/boot/dts/exynos5410-odroidxu.dts +4 -2
@@ -271,6 +271,8 @@ regulator-name = "vddq_lcd"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; + /* Supplies also GPK and GPJ */ + regulator-always-on; }; ldo8_reg: LDO8 {
@@ -560,11 +562,11 @@ }; &usbdrd_dwc3_0 { - dr_mode = "host"; + dr_mode = "peripheral"; }; &usbdrd_dwc3_1 { - dr_mode = "peripheral"; + dr_mode = "host"; }; &usbdrd3_0 {
arch/arm/boot/dts/exynos5410-pinctrl.dtsi +28 -0
@@ -563,6 +563,34 @@ interrupt-controller; #interrupt-cells = <2>; }; + + usb3_1_oc: usb3-1-oc { + samsung,pins = "gpk2-4", "gpk2-5"; + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; + samsung,pin-pud = <EXYNOS_PIN_PULL_UP>; + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; + }; + + usb3_1_vbusctrl: usb3-1-vbusctrl { + samsung,pins = "gpk2-6", "gpk2-7"; + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; + samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>; + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; + }; + + usb3_0_oc: usb3-0-oc { + samsung,pins = "gpk3-0", "gpk3-1"; + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; + samsung,pin-pud = <EXYNOS_PIN_PULL_UP>; + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; + }; + + usb3_0_vbusctrl: usb3-0-vbusctrl { + samsung,pins = "gpk3-2", "gpk3-3"; + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; + samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>; + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; + }; }; &pinctrl_2 {
arch/arm/boot/dts/exynos5410.dtsi +4 -0
@@ -314,6 +314,8 @@ &usbdrd3_0 { clocks = <&clock CLK_USBD300>; clock-names = "usbdrd30"; + pinctrl-names = "default"; + pinctrl-0 = <&usb3_0_oc>, <&usb3_0_vbusctrl>; }; &usbdrd_phy0 {
@@ -325,6 +327,8 @@ &usbdrd3_1 { clocks = <&clock CLK_USBD301>; clock-names = "usbdrd30"; + pinctrl-names = "default"; + pinctrl-0 = <&usb3_1_oc>, <&usb3_1_vbusctrl>; }; &usbdrd_dwc3_1 {
arch/arm/kernel/head.S +1 -5
@@ -673,12 +673,8 @@ ARM_BE8(rev16 ip, ip) ldrcc r7, [r4], #4 @ use branch for delay slot bcc 1b bx lr -#else -#ifdef CONFIG_CPU_ENDIAN_BE8 - moveq r0, #0x00004000 @ set bit 22, mov to mvn instruction #else moveq r0, #0x400000 @ set bit 22, mov to mvn instruction -#endif b 2f 1: ldr ip, [r7, r3] #ifdef CONFIG_CPU_ENDIAN_BE8
@@ -687,7 +683,7 @@ ARM_BE8(rev16 ip, ip) tst ip, #0x000f0000 @ check the rotation field orrne ip, ip, r6, lsl #24 @ mask in offset bits 31-24 biceq ip, ip, #0x00004000 @ clear bit 22 - orreq ip, ip, r0 @ mask in offset bits 7-0 + orreq ip, ip, r0, ror #8 @ mask in offset bits 7-0 #else bic ip, ip, #0x000000ff tst ip, #0xf00 @ check the rotation field
arch/arm64/boot/dts/exynos/exynos7.dtsi +3 -1
@@ -65,8 +65,10 @@ }; psci { - compatible = "arm,psci-0.2"; + compatible = "arm,psci"; method = "smc"; + cpu_off = <0x84000002>; + cpu_on = <0xC4000003>; }; soc: soc {
arch/arm64/boot/dts/rockchip/rk3399.dtsi +3 -0
@@ -65,6 +65,9 @@ i2c6 = &i2c6; i2c7 = &i2c7; i2c8 = &i2c8; + mmc0 = &sdio0; + mmc1 = &sdmmc; + mmc2 = &sdhci; serial0 = &uart0; serial1 = &uart1; serial2 = &uart2;
arch/arm64/include/asm/kvm_host.h +1 -0
@@ -161,6 +161,7 @@ enum vcpu_sysreg {#define c2_TTBR1 (TTBR1_EL1 * 2)/* Translation Table Base Register 1 */ #define c2_TTBR1_high (c2_TTBR1 + 1)/* TTBR1 top 32 bits */ #define c2_TTBCR (TCR_EL1 * 2)/* Translation Table Base Control R. */ +#define c2_TTBCR2 (c2_TTBCR + 1)/* Translation Table Base Control R. 2 */ #define c3_DACR (DACR32_EL2 * 2)/* Domain Access Control Register */ #define c5_DFSR (ESR_EL1 * 2)/* Data Fault Status Register */ #define c5_IFSR (IFSR32_EL2 * 2)/* Instruction Fault Status Register */
arch/arm64/kvm/sys_regs.c +1 -0
@@ -1315,6 +1315,7 @@ static const struct sys_reg_desc cp15_regs[] = { { Op1( 0), CRn( 2), CRm( 0), Op2( 0), access_vm_reg, NULL, c2_TTBR0 }, { Op1( 0), CRn( 2), CRm( 0), Op2( 1), access_vm_reg, NULL, c2_TTBR1 }, { Op1( 0), CRn( 2), CRm( 0), Op2( 2), access_vm_reg, NULL, c2_TTBCR }, + { Op1( 0), CRn( 2), CRm( 0), Op2( 3), access_vm_reg, NULL, c2_TTBCR2 }, { Op1( 0), CRn( 3), CRm( 0), Op2( 0), access_vm_reg, NULL, c3_DACR }, { Op1( 0), CRn( 5), CRm( 0), Op2( 0), access_vm_reg, NULL, c5_DFSR }, { Op1( 0), CRn( 5), CRm( 0), Op2( 1), access_vm_reg, NULL, c5_IFSR },
arch/mips/bcm47xx/Kconfig +1 -0
@@ -26,6 +26,7 @@ config BCM47XX_BCMA select BCMA select BCMA_HOST_SOC select BCMA_DRIVER_MIPS + select BCMA_DRIVER_PCI if PCI select BCMA_DRIVER_PCI_HOSTMODE if PCI select BCMA_DRIVER_GPIO default y
arch/powerpc/include/asm/cputable.h +0 -5
@@ -419,7 +419,6 @@ enum { CPU_FTR_DBELL | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ CPU_FTR_DEBUG_LVL_EXC | CPU_FTR_EMB_HV | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_CELL_TB_BUG | CPU_FTR_SMT) -#define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN)/* 64-bit CPUs */ #define CPU_FTRS_POWER4 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
@@ -510,8 +509,6 @@ enum { CPU_FTRS_7447 | CPU_FTRS_7447A | CPU_FTRS_82XX | CPU_FTRS_G2_LE | CPU_FTRS_E300 | CPU_FTRS_E300C2 | CPU_FTRS_CLASSIC32 | -#else - CPU_FTRS_GENERIC_32 |#endif #ifdef CONFIG_8xx CPU_FTRS_8XX |
@@ -562,8 +559,6 @@ enum { CPU_FTRS_7447 & CPU_FTRS_7447A & CPU_FTRS_82XX & CPU_FTRS_G2_LE & CPU_FTRS_E300 & CPU_FTRS_E300C2 & CPU_FTRS_CLASSIC32 & -#else - CPU_FTRS_GENERIC_32 &#endif #ifdef CONFIG_8xx CPU_FTRS_8XX &
arch/powerpc/perf/core-book3s.c +10 -0
@@ -2022,6 +2022,16 @@ static void record_and_restart(struct perf_event *event, unsigned long val,local64_set (&event->hw.period_left, left);perf_event_update_userpage (event); +/* +* Due to hardware limitation, sometimes SIAR could sample a kernel +* address even when freeze on supervisor state (kernel) is set in +* MMCR2. Check attr.exclude_kernel and address to drop the sample in +* these cases. +*/ +if (event->attr.exclude_kernel && record) +if (is_kernel_addr (mfspr (SPRN_SIAR ))) + record =0 ; +/* * Finally record data if requested. */
arch/powerpc/platforms/pseries/suspend.c +0 -1
@@ -224,7 +224,6 @@ static struct bus_type suspend_subsys = {static const struct platform_suspend_ops pseries_suspend_ops = { .valid = suspend_valid_only_mem, - .begin = pseries_suspend_begin, .prepare_late = pseries_prepare_late, .enter = pseries_suspend_enter, };
arch/powerpc/xmon/nonstdio.c +1 -1
@@ -182,7 +182,7 @@ void xmon_printf(const char *format, ...)if (n && rc ==0 ) {/* No udbg hooks, fallback to printk() - dangerous */ -printk ("%s" , xmon_outbuf); +pr_cont ("%s" , xmon_outbuf); } }
arch/um/drivers/xterm.c +5 -0
@@ -18,6 +18,7 @@struct xterm_chan {int pid;int helper_pid; +int chan_fd;char *title;int device;int raw;
@@ -33,6 +34,7 @@ static void *xterm_init(char *str, int device, const struct chan_opts *opts)return NULL ; *data = ((struct xterm_chan ) { .pid =-1 , .helper_pid =-1 , + .chan_fd =-1 , .device = device, .title = opts->xterm_title, .raw = opts->raw } );
@@ -149,6 +151,7 @@ static int xterm_open(int input, int output, int primary, void *d, goto out_kill; } + data->chan_fd = fd; new =xterm_fd (fd, &data->helper_pid);if (new <0 ) { err = new;
@@ -206,6 +209,8 @@ static void xterm_close(int fd, void *d)os_kill_process (data->helper_pid,0 ); data->helper_pid =-1 ; +if (data->chan_fd !=-1 ) +os_close_file (data->chan_fd);os_close_file (fd); }
arch/x86/kernel/kprobes/core.c +5 -0
@@ -1018,6 +1018,11 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)* So clear it by resetting the current kprobe: */ regs->flags &= ~X86_EFLAGS_TF ; +/* +* Since the single step (trap) has been cancelled, +* we need to restore BTF here. +*/ +restore_btf ();/* * If the TF flag was set before the kprobe hit,
drivers/acpi/acpi_pnp.c +3 -0
@@ -320,6 +320,9 @@ static bool matching_id(const char *idstr, const char *list_id) {int i; +if (strlen (idstr) !=strlen (list_id)) +return false; +if (memcmp (idstr, list_id,3 ))return false;
drivers/acpi/resource.c +1 -1
@@ -532,7 +532,7 @@ static acpi_status acpi_dev_process_resource(struct acpi_resource *ares, ret = c->preproc (ares, c->preproc_data);if (ret <0 ) { c->error = ret; -return AE_CTRL_TERMINATE ; +return AE_ABORT_METHOD ; }else if (ret >0 ) {return AE_OK ; }
drivers/block/xen-blkback/xenbus.c +1 -0
@@ -262,6 +262,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)if (ring->xenblkd) {kthread_stop (ring->xenblkd); + ring->xenblkd =NULL ;wake_up (&ring->shutdown_wq); }
drivers/bus/mips_cdmm.c +1 -3
@@ -544,10 +544,8 @@ static void mips_cdmm_bus_discover(struct mips_cdmm_bus *bus)dev_set_name (&dev->dev,"cdmm%u-%u" , cpu, id); ++id; ret =device_register (&dev->dev); -if (ret) { +if (ret)put_device (&dev->dev); -kfree (dev); - } } }
drivers/clk/clk-s2mps11.c +1 -0
@@ -211,6 +211,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev)return ret; err_reg: +of_node_put (s2mps11_clks[0 ].clk_np);while (--i >=0 )clkdev_drop (s2mps11_clks[i].lookup);
drivers/clk/mvebu/armada-37xx-xtal.c +2 -2
@@ -15,8 +15,8 @@#include <linux/platform_device.h> #include <linux/regmap.h> -#define NB_GPIO1_LATCH 0xC -#define XTAL_MODE BIT(31) +#define NB_GPIO1_LATCH 0x8 +#define XTAL_MODE BIT(9)static int armada_3700_xtal_clock_probe (struct platform_device *pdev) {
drivers/clk/tegra/clk-id.h +1 -0
@@ -233,6 +233,7 @@ enum clk_id { tegra_clk_sdmmc4_8, tegra_clk_sdmmc4_9, tegra_clk_se, + tegra_clk_se_10, tegra_clk_soc_therm, tegra_clk_soc_therm_8, tegra_clk_sor0,
drivers/clk/tegra/clk-tegra-periph.c +1 -1
@@ -648,7 +648,7 @@ static struct tegra_periph_init_data periph_clks[] = {INT8 ("host1x" , mux_pllm_pllc2_c_c3_pllp_plla,CLK_SOURCE_HOST1X ,28 ,0 , tegra_clk_host1x_8),INT8 ("host1x" , mux_pllc4_out1_pllc_pllc4_out2_pllp_clkm_plla_pllc4_out0,CLK_SOURCE_HOST1X ,28 ,0 , tegra_clk_host1x_9),INT8 ("se" , mux_pllp_pllc2_c_c3_pllm_clkm,CLK_SOURCE_SE ,127 ,TEGRA_PERIPH_ON_APB , tegra_clk_se), -INT8 ("se" , mux_pllp_pllc2_c_c3_clkm,CLK_SOURCE_SE ,127 ,TEGRA_PERIPH_ON_APB , tegra_clk_se), +INT8 ("se" , mux_pllp_pllc2_c_c3_clkm,CLK_SOURCE_SE ,127 ,TEGRA_PERIPH_ON_APB , tegra_clk_se_10),INT8 ("2d" , mux_pllm_pllc2_c_c3_pllp_plla,CLK_SOURCE_2D ,21 ,0 , tegra_clk_gr2d_8),INT8 ("3d" , mux_pllm_pllc2_c_c3_pllp_plla,CLK_SOURCE_3D ,24 ,0 , tegra_clk_gr3d_8), INT8("vic03", mux_pllm_pllc_pllp_plla_pllc2_c3_clkm, CLK_SOURCE_VIC03, 178, 0, tegra_clk_vic03),
drivers/clk/ti/fapll.c +9 -2
@@ -497,6 +497,7 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd, {struct clk_init_data *init;struct fapll_synth *synth; +struct clk *clk =ERR_PTR (-ENOMEM ); init =kzalloc (sizeof (*init),GFP_KERNEL );if (!init)
@@ -519,13 +520,19 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd, synth->hw.init = init; synth->clk_pll = pll_clk; -return clk_register (NULL , &synth->hw); + clk =clk_register (NULL , &synth->hw); +if (IS_ERR (clk)) { +pr_err ("failed to register clock\n" ); + goto free; + } + +return clk; free:kfree (synth);kfree (init); -return ERR_PTR (-ENOMEM ); +return clk; }static void __init ti_fapll_setup (struct device_node *node)
drivers/clocksource/arm_arch_timer.c +16 -7
@@ -426,15 +426,24 @@ static void arch_timer_evtstrm_enable(int divider)static void arch_timer_configure_evtstream (void ) { -int evt_stream_div, pos; +int evt_stream_div, lsb; + +/* +* As the event stream can at most be generated at half the frequency +* of the counter, use half the frequency when computing the divider. +*/ + evt_stream_div = arch_timer_rate /ARCH_TIMER_EVT_STREAM_FREQ /2 ; + +/* +* Find the closest power of two to the divisor. If the adjacent bit +* of lsb (last set bit, starts from 0) is set, then we use (lsb + 1). +*/ + lsb =fls (evt_stream_div) -1 ; +if (lsb >0 && (evt_stream_div &BIT (lsb -1 ))) + lsb++; -/* Find the closest power of two to the divisor */ - evt_stream_div = arch_timer_rate /ARCH_TIMER_EVT_STREAM_FREQ ; - pos =fls (evt_stream_div); -if (pos >1 && !(evt_stream_div & (1 << (pos -2 )))) - pos--;/* enable event stream */ -arch_timer_evtstrm_enable (min (pos,15 )); +arch_timer_evtstrm_enable (max (0 ,min (lsb,15 ))); }static void arch_counter_set_user_access (void )
drivers/clocksource/cadence_ttc_timer.c +9 -9
@@ -418,10 +418,8 @@ static int __init ttc_setup_clockevent(struct clk *clk, ttcce->ttc.clk = clk; err =clk_prepare_enable (ttcce->ttc.clk); -if (err) { -kfree (ttcce); -return err; - } +if (err) + goto out_kfree; ttcce->ttc.clk_rate_change_nb.notifier_call = ttc_rate_change_clockevent_cb;
@@ -431,7 +429,7 @@ static int __init ttc_setup_clockevent(struct clk *clk, &ttcce->ttc.clk_rate_change_nb);if (err) {pr_warn ("Unable to register clock notifier.\n" ); -return err; + goto out_kfree; } ttcce->ttc.freq =clk_get_rate (ttcce->ttc.clk);
@@ -460,15 +458,17 @@ static int __init ttc_setup_clockevent(struct clk *clk, err =request_irq (irq, ttc_clock_event_interrupt,IRQF_TIMER , ttcce->ce.name, ttcce); -if (err) { -kfree (ttcce); -return err; - } +if (err) + goto out_kfree;clockevents_config_and_register (&ttcce->ce, ttcce->ttc.freq /PRESCALE ,1 ,0xfffe );return 0 ; + +out_kfree: +kfree (ttcce); +return err; }/**
drivers/cpufreq/highbank-cpufreq.c +7 -0
@@ -104,6 +104,13 @@ static int hb_cpufreq_driver_init(void) }module_init (hb_cpufreq_driver_init); +static const struct of_device_id __maybe_unused hb_cpufreq_of_match[] = { + { .compatible ="calxeda,highbank" }, + { .compatible ="calxeda,ecx-2000" }, + { }, +}; +MODULE_DEVICE_TABLE (of, hb_cpufreq_of_match); +MODULE_AUTHOR ("Mark Langsdorf <[email protected]>" );MODULE_DESCRIPTION ("Calxeda Highbank cpufreq driver" );MODULE_LICENSE ("GPL" );
drivers/cpufreq/loongson1-cpufreq.c +1 -0
@@ -217,6 +217,7 @@ static struct platform_driver ls1x_cpufreq_platdrv = {module_platform_driver (ls1x_cpufreq_platdrv); +MODULE_ALIAS ("platform:ls1x-cpufreq" );MODULE_AUTHOR ("Kelvin Cheung <[email protected]>" );MODULE_DESCRIPTION ("Loongson1 CPUFreq driver" );MODULE_LICENSE ("GPL" );
drivers/cpufreq/scpi-cpufreq.c +1 -0
@@ -111,6 +111,7 @@ static struct platform_driver scpi_cpufreq_platdrv = { };module_platform_driver (scpi_cpufreq_platdrv); +MODULE_ALIAS ("platform:scpi-cpufreq" );MODULE_AUTHOR ("Sudeep Holla <[email protected]>" );MODULE_DESCRIPTION ("ARM SCPI CPUFreq interface driver" );MODULE_LICENSE ("GPL v2" );
drivers/cpufreq/sti-cpufreq.c +7 -0
@@ -294,6 +294,13 @@ static int sti_cpufreq_init(void) }module_init (sti_cpufreq_init); +static const struct of_device_id __maybe_unused sti_cpufreq_of_match[] = { + { .compatible ="st,stih407" }, + { .compatible ="st,stih410" }, + { }, +}; +MODULE_DEVICE_TABLE (of, sti_cpufreq_of_match); +MODULE_DESCRIPTION ("STMicroelectronics CPUFreq/OPP driver" );MODULE_AUTHOR ("Ajitpal Singh <[email protected]>" );MODULE_AUTHOR ("Lee Jones <[email protected]>" );
drivers/crypto/omap-aes.c +2 -1
@@ -1172,7 +1172,7 @@ static int omap_aes_probe(struct platform_device *pdev)if (err <0 ) {dev_err (dev,"%s: failed to get_sync(%d)\n" , __func__, err); - goto err_res; + goto err_pm_disable; }omap_aes_dma_stop (dd);
@@ -1257,6 +1257,7 @@ static int omap_aes_probe(struct platform_device *pdev)omap_aes_dma_cleanup (dd); err_irq:tasklet_kill (&dd->done_task); +err_pm_disable:pm_runtime_disable (dev); err_res: dd =NULL ;
drivers/crypto/talitos.c +3 -3
@@ -447,7 +447,7 @@ DEF_TALITOS2_DONE(ch1_3, TALITOS2_ISR_CH_1_3_DONE)/* * locate current (offending) descriptor */ -static u32 current_desc_hdr (struct device *dev,int ch) +static __be32 current_desc_hdr (struct device *dev,int ch) {struct talitos_private *priv =dev_get_drvdata (dev);int tail, iter;
@@ -478,13 +478,13 @@ static u32 current_desc_hdr(struct device *dev, int ch)/* * user diagnostics; report root cause of error based on execution unit status */ -static void report_eu_error (struct device *dev,int ch,u32 desc_hdr) +static void report_eu_error (struct device *dev,int ch,__be32 desc_hdr) {struct talitos_private *priv =dev_get_drvdata (dev);int i;if (!desc_hdr) - desc_hdr =in_be32 (priv->chan[ch].reg +TALITOS_DESCBUF ); + desc_hdr =cpu_to_be32 (in_be32 (priv->chan[ch].reg +TALITOS_DESCBUF ));switch (desc_hdr &DESC_HDR_SEL0_MASK ) {case DESC_HDR_SEL0_AFEU :
drivers/extcon/extcon-max77693.c +1 -1
@@ -1272,4 +1272,4 @@ module_platform_driver(max77693_muic_driver);MODULE_DESCRIPTION ("Maxim MAX77693 Extcon driver" );MODULE_AUTHOR ("Chanwoo Choi <[email protected]>" );MODULE_LICENSE ("GPL" ); -MODULE_ALIAS ("platform:extcon-max77693" ); +MODULE_ALIAS ("platform:max77693-muic" );
drivers/gpu/drm/drm_dp_aux_dev.c +1 -1
@@ -59,7 +59,7 @@ static struct drm_dp_aux_dev *drm_dp_aux_dev_get_by_minor(unsigned index)mutex_lock (&aux_idr_mutex); aux_dev =idr_find (&aux_idr, index); -if (!kref_get_unless_zero (&aux_dev->refcount)) +if (aux_dev && !kref_get_unless_zero (&aux_dev->refcount)) aux_dev =NULL ;mutex_unlock (&aux_idr_mutex);
drivers/gpu/drm/gma500/cdv_intel_dp.c +1 -1
@@ -2126,7 +2126,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_devDRM_INFO ("failed to retrieve link info, disabling eDP\n" );cdv_intel_dp_encoder_destroy (encoder);cdv_intel_dp_destroy (connector); - goto err_priv; + goto err_connector; }else { DRM_DEBUG_KMS("DPCD: Rev=%x LN_Rate=%x LN_CNT=%x LN_DOWNSP=%x\n", intel_dp->dpcd[0], intel_dp->dpcd[1],
drivers/gpu/drm/omapdrm/omap_dmm_tiler.c +1 -0
@@ -747,6 +747,7 @@ static int omap_dmm_probe(struct platform_device *dev) &omap_dmm->refill_pa, GFP_KERNEL);if (!omap_dmm->refill_va) {dev_err (&dev->dev,"could not allocate refill memory\n" ); + ret = -ENOMEM ; goto fail; }
drivers/gpu/drm/tegra/sor.c +8 -2
@@ -2375,17 +2375,23 @@ static int tegra_sor_init(struct host1x_client *client)if (err <0 ) {dev_err (sor->dev,"failed to deassert SOR reset: %d\n" , err); +clk_disable_unprepare (sor->clk);return err; } } err =clk_prepare_enable (sor->clk_safe); -if (err <0 ) +if (err <0 ) { +clk_disable_unprepare (sor->clk);return err; + } err =clk_prepare_enable (sor->clk_dp); -if (err <0 ) +if (err <0 ) { +clk_disable_unprepare (sor->clk_safe); +clk_disable_unprepare (sor->clk);return err; + }return 0 ; }
drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c +8 -0
@@ -397,6 +397,14 @@ static const struct dmi_system_id i2c_hid_dmi_desc_override_table[] = { }, .driver_data = (void *)&sipodev_desc }, + { + .ident = "Vero K147", + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VERO"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "K147"), + }, + .driver_data = (void *)&sipodev_desc + }, { } /* Terminate list */ };
drivers/hsi/controllers/omap_ssi_core.c +1 -1
@@ -391,7 +391,7 @@ static int ssi_add_controller(struct hsi_controller *ssi, err =ida_simple_get (&platform_omap_ssi_ida,0 ,0 ,GFP_KERNEL );if (err <0 ) - goto out_err; +return err; ssi->id = err; ssi->owner =THIS_MODULE ;
drivers/iio/adc/rockchip_saradc.c +1 -1
@@ -378,7 +378,7 @@ static int rockchip_saradc_resume(struct device *dev) ret =clk_prepare_enable (info->clk);if (ret) -return ret; +clk_disable_unprepare (info->pclk);return ret; }
drivers/iio/industrialio-buffer.c +3 -3
@@ -1335,12 +1335,12 @@ static int iio_buffer_update_demux(struct iio_dev *indio_dev, indio_dev->masklength, in_ind + 1);while (in_ind != out_ind) { - in_ind =find_next_bit (indio_dev->active_scan_mask, - indio_dev->masklength, - in_ind +1 ); length =iio_storage_bytes_for_si (indio_dev, in_ind);/* Make sure we are aligned */ in_loc =roundup (in_loc, length) + length; + in_ind =find_next_bit (indio_dev->active_scan_mask, + indio_dev->masklength, + in_ind +1 ); } length =iio_storage_bytes_for_si (indio_dev, in_ind); out_loc =roundup (out_loc, length);
drivers/iio/pressure/mpl3115.c +8 -1
@@ -139,7 +139,14 @@ static irqreturn_t mpl3115_trigger_handler(int irq, void *p)struct iio_poll_func *pf = p;struct iio_dev *indio_dev = pf->indio_dev;struct mpl3115_data *data =iio_priv (indio_dev); -u8 buffer[16 ];/* 32-bit channel + 16-bit channel + padding + ts */ +/* +* 32-bit channel + 16-bit channel + padding + ts +* Note that it is possible for only one of the first 2 +* channels to be enabled. If that happens, the first element +* of the buffer may be either 16 or 32-bits. As such we cannot +* use a simple structure definition to express this data layout. +*/ +u8 buffer[16 ]__aligned(8) ;int ret, pos =0 ;mutex_lock (&data->lock);
drivers/infiniband/core/cm.c +2 -0
@@ -1252,6 +1252,7 @@ int ib_send_cm_req(struct ib_cm_id *cm_id, id.local_id);if (IS_ERR (cm_id_priv->timewait_info)) { ret =PTR_ERR (cm_id_priv->timewait_info); + cm_id_priv->timewait_info =NULL ; goto out; }
@@ -1683,6 +1684,7 @@ static int cm_req_handler(struct cm_work *work) id.local_id);if (IS_ERR (cm_id_priv->timewait_info)) { ret =PTR_ERR (cm_id_priv->timewait_info); + cm_id_priv->timewait_info =NULL ; goto destroy; } cm_id_priv->timewait_info->work.remote_id = req_msg->local_comm_id;
drivers/infiniband/hw/cxgb4/cq.c +3 -0
@@ -893,6 +893,9 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev, rhp =to_c4iw_dev (ibdev); +if (entries <1 || entries > ibdev->attrs.max_cqe) +return ERR_PTR (-EINVAL ); +if (vector >= rhp->rdev.lldi.nciq)return ERR_PTR (-EINVAL );
drivers/infiniband/hw/mthca/mthca_cq.c +1 -1
@@ -609,7 +609,7 @@ static inline int mthca_poll_one(struct mthca_dev *dev, entry->byte_len =MTHCA_ATOMIC_BYTE_LEN ;break ;default : - entry->opcode =MTHCA_OPCODE_INVALID ; + entry->opcode =0xFF ;break ; } }else {
drivers/infiniband/hw/mthca/mthca_dev.h +0 -1
@@ -105,7 +105,6 @@ enum {MTHCA_OPCODE_ATOMIC_CS =0x11 ,MTHCA_OPCODE_ATOMIC_FA =0x12 , MTHCA_OPCODE_BIND_MW = 0x18, -MTHCA_OPCODE_INVALID =0xff }; enum {
drivers/infiniband/sw/rxe/rxe_req.c +2 -1
@@ -661,7 +661,8 @@ int rxe_requester(void *arg) }if (unlikely (qp_type (qp) ==IB_QPT_RC && - qp->req.psn > (qp->comp.psn +RXE_MAX_UNACKED_PSNS ))) { +psn_compare (qp->req.psn, (qp->comp.psn + +RXE_MAX_UNACKED_PSNS )) >0 )) { qp->req.wait_psn =1 ; goto exit; }
drivers/input/keyboard/cros_ec_keyb.c +1 -0
@@ -140,6 +140,7 @@ static void cros_ec_keyb_process(struct cros_ec_keyb *ckdev,"changed: [r%d c%d]: byte %02x\n" , row, col, new_state); +input_event (idev,EV_MSC ,MSC_SCAN , pos);input_report_key (idev, keycodes[pos], new_state); }
drivers/input/misc/cm109.c +5 -2
@@ -571,12 +571,15 @@ static int cm109_input_open(struct input_dev *idev) dev->ctl_data->byte[HID_OR2 ] = dev->keybit; dev->ctl_data->byte[HID_OR3 ] =0x00 ; + dev->ctl_urb_pending =1 ; error =usb_submit_urb (dev->urb_ctl,GFP_KERNEL ); -if (error) +if (error) { + dev->ctl_urb_pending =0 ;dev_err (&dev->intf->dev,"%s: usb_submit_urb (urb_ctl) failed %d\n" , __func__, error); -else + }else { dev->open =1 ; + }mutex_unlock (&dev->pm_mutex);
drivers/input/mouse/cyapa_gen6.c +1 -1
@@ -573,7 +573,7 @@ static int cyapa_pip_retrieve_data_structure(struct cyapa *cyapa,memset (&cmd,0 ,sizeof (cmd));put_unaligned_le16 (PIP_OUTPUT_REPORT_ADDR , &cmd.head.addr); -put_unaligned_le16 (sizeof (cmd), &cmd.head.length -2 ); +put_unaligned_le16 (sizeof (cmd) -2 , &cmd.head.length); cmd.head.report_id =PIP_APP_CMD_REPORT_ID ; cmd.head.cmd_code =PIP_RETRIEVE_DATA_STRUCTURE ;put_unaligned_le16 (read_offset, &cmd.read_offset);
drivers/input/serio/i8042-x86ia64io.h +42 -0
48 lines not on this page · raw message
drivers/input/touchscreen/ads7846.c +5 -3
@@ -35,6 +35,7 @@#include <linux/regulator/consumer.h> #include <linux/module.h> #include <asm/irq.h> +#include <asm/unaligned.h> /* * This code has been heavily tested on a Nokia 770, and lightly
@@ -410,7 +411,7 @@ static int ads7845_read12_ser(struct device *dev, unsigned command)if (status ==0 ) {/* BE12 value, then padding */ - status =be16_to_cpu (*((u16 *)&req->sample[1 ])); + status =get_unaligned_be16 (&req->sample[1 ]); status = status >>3 ; status &=0x0fff ; }
@@ -785,10 +786,11 @@ static void ads7846_report_state(struct ads7846 *ts)/* compute touch pressure resistance using equation #2 */ Rt = z2; Rt -= z1; - Rt *= x; Rt *= ts->x_plate_ohms; + Rt =DIV_ROUND_CLOSEST (Rt,16 ); + Rt *= x; Rt /= z1; - Rt = (Rt +2047 ) >>12 ; + Rt =DIV_ROUND_CLOSEST (Rt,256 ); }else { Rt =0 ; }
drivers/input/touchscreen/goodix.c +12 -0
@@ -98,6 +98,18 @@ static const struct dmi_system_id rotated_screen[] = { DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"), }, }, + { + .ident = "Teclast X98 Pro", + .matches = { +/* +* Only match BIOS date, because the manufacturers +* BIOS does not report the board name at all +* (sometimes)... +*/ +DMI_MATCH (DMI_BOARD_VENDOR ,"TECLAST" ), + DMI_MATCH(DMI_BIOS_DATE, "10/28/2015"), + }, + }, { .ident ="WinBook TW100" , .matches = {
drivers/irqchip/irq-alpine-msi.c +1 -2
@@ -165,8 +165,7 @@ static int alpine_msix_middle_domain_alloc(struct irq_domain *domain,return 0 ; err_sgi: -while (--i >=0 ) -irq_domain_free_irqs_parent (domain, virq, i); +irq_domain_free_irqs_parent (domain, virq, i -1 );alpine_msix_free_sgi (priv, sgi, nr_irqs);return err; }
drivers/md/dm-ioctl.c +1 -0
@@ -1549,6 +1549,7 @@ static int target_message(struct dm_ioctl *param, size_t param_size)if (!argc) {DMWARN ("Empty message received." ); + r = -EINVAL ; goto out_argv; }
drivers/md/dm-table.c +0 -6
@@ -1250,12 +1250,6 @@ void dm_table_event_callback(struct dm_table *t,void dm_table_event (struct dm_table *t) { -/* -* You can no longer call dm_table_event() from interrupt -* context, use a bottom half instead. -*/ -BUG_ON (in_interrupt ()); -mutex_lock (&_event_lock);if (t->event_fn) t->event_fn (t->event_context);
drivers/md/md.c +5 -2
@@ -6857,8 +6857,11 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode, err = -EBUSY ; goto out; } -WARN_ON_ONCE (test_bit (MD_CLOSING , &mddev->flags)); -set_bit (MD_CLOSING , &mddev->flags); +if (test_and_set_bit (MD_CLOSING , &mddev->flags)) { +mutex_unlock (&mddev->open_mutex); + err = -EBUSY ; + goto out; + } did_set_md_closing = true;mutex_unlock (&mddev->open_mutex);sync_blockdev (bdev);
drivers/media/common/siano/smsdvb-main.c +4 -1
@@ -1180,12 +1180,15 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev, rc =dvb_create_media_graph (&client->adapter, true);if (rc <0 ) {pr_err ("dvb_create_media_graph failed %d\n" , rc); - goto client_error; + goto media_graph_error; }pr_info ("DVB interface registered.\n" );return 0 ; +media_graph_error: +smsdvb_debugfs_release (client); + client_error:dvb_unregister_frontend (&client->frontend);
drivers/media/pci/netup_unidvb/netup_unidvb_spi.c +3 -2
@@ -184,7 +184,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev)struct spi_master *master;struct netup_spi *nspi; - master =spi_alloc_master (&ndev->pci_dev->dev, + master =devm_spi_alloc_master (&ndev->pci_dev->dev,sizeof (struct netup_spi ));if (!master) { dev_err(&ndev->pci_dev->dev,
@@ -217,6 +217,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev) ndev->pci_slot, ndev->pci_func);if (!spi_new_device (master, &netup_spi_board)) { +spi_unregister_master (master); ndev->spi =NULL ;dev_err (&ndev->pci_dev->dev,"%s(): unable to create SPI device\n" , __func__);
@@ -235,13 +236,13 @@ void netup_spi_release(struct netup_unidvb_dev *ndev)if (!spi)return ; +spi_unregister_master (spi->master);spin_lock_irqsave (&spi->lock, flags); reg =readw (&spi->regs->control_stat);writew (reg |NETUP_SPI_CTRL_IRQ , &spi->regs->control_stat); reg =readw (&spi->regs->control_stat);writew (reg & ~NETUP_SPI_CTRL_IMASK , &spi->regs->control_stat);spin_unlock_irqrestore (&spi->lock, flags); -spi_unregister_master (spi->master); ndev->spi =NULL ; }
drivers/media/pci/saa7146/mxb.c +10 -9
@@ -652,16 +652,17 @@ static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *struct mxb *mxb = (struct mxb *)dev->ext_priv;DEB_D ("VIDIOC_S_AUDIO %d\n" , a->index); -if (mxb_inputs[mxb->cur_input].audioset & (1 << a->index)) { -if (mxb->cur_audinput != a->index) { - mxb->cur_audinput = a->index; -tea6420_route (mxb, a->index); -if (mxb->cur_audinput ==0 ) -mxb_update_audmode (mxb); - } -return 0 ; +if (a->index >=32 || + !(mxb_inputs[mxb->cur_input].audioset & (1 << a->index))) +return -EINVAL ; + +if (mxb->cur_audinput != a->index) { + mxb->cur_audinput = a->index; +tea6420_route (mxb, a->index); +if (mxb->cur_audinput ==0 ) +mxb_update_audmode (mxb); } -return -EINVAL ; +return 0 ; }#ifdef CONFIG_VIDEO_ADV_DEBUG
drivers/media/pci/solo6x10/solo6x10-g723.c +1 -1
@@ -385,7 +385,7 @@ int solo_g723_init(struct solo_dev *solo_dev) ret =snd_ctl_add (card,snd_ctl_new1 (&kctl, solo_dev));if (ret <0 ) -return ret; + goto snd_error; ret =solo_snd_pcm_init (solo_dev);if (ret <0 )
drivers/media/rc/sunxi-cir.c +2 -0
@@ -132,6 +132,8 @@ static irqreturn_t sunxi_ir_irq(int irqno, void *dev_id) }else if (status ®_RXINT_RPEI_EN ) {ir_raw_event_set_idle (ir->rc, true);ir_raw_event_handle (ir->rc); + }else { +ir_raw_event_handle (ir->rc); }spin_unlock (&ir->ir_lock);
drivers/media/usb/gspca/gspca.c +1 -0
@@ -2145,6 +2145,7 @@ int gspca_dev_probe2(struct usb_interface *intf,input_unregister_device (gspca_dev->input_dev);#endif v4l2_ctrl_handler_free (gspca_dev->vdev.ctrl_handler); +v4l2_device_unregister (&gspca_dev->v4l2_dev);kfree (gspca_dev->usb_buf);kfree (gspca_dev);return ret;
drivers/media/usb/msi2500/msi2500.c +1 -1
@@ -1250,7 +1250,7 @@ static int msi2500_probe(struct usb_interface *intf, } dev->master = master; - master->bus_num =0 ; + master->bus_num =-1 ; master->num_chipselect =1 ; master->transfer_one_message = msi2500_transfer_one_message;spi_master_set_devdata (master, dev);
drivers/memstick/core/memstick.c +0 -1
@@ -469,7 +469,6 @@ static void memstick_check(struct work_struct *work) host->card = card;if (device_register (&card->dev)) {put_device (&card->dev); -kfree (host->card); host->card =NULL ; } }else
drivers/memstick/host/r592.c +8 -4
@@ -762,8 +762,10 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto error3; dev->mmio =pci_ioremap_bar (pdev,0 ); -if (!dev->mmio) +if (!dev->mmio) { + error = -ENOMEM ; goto error4; + } dev->irq = pdev->irq;spin_lock_init (&dev->irq_lock);
@@ -790,12 +792,14 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id) &dev->dummy_dma_page_physical_address, GFP_KERNEL);r592_stop_dma (dev ,0 ); -if (request_irq (dev->irq, &r592_irq,IRQF_SHARED , -DRV_NAME , dev)) + error =request_irq (dev->irq, &r592_irq,IRQF_SHARED , +DRV_NAME , dev); +if (error) goto error6;r592_update_card_detect (dev); -if (memstick_add_host (host)) + error =memstick_add_host (host); +if (error) goto error7;message ("driver successfully loaded" );
drivers/mtd/cmdlinepart.c +13 -1
@@ -228,7 +228,7 @@ static int mtdpart_setup_real(char *s)struct cmdline_mtd_partition *this_mtd;struct mtd_partition *parts;int mtd_id_len, num_parts; -char *p, *mtd_id, *semicol; +char *p, *mtd_id, *semicol, *open_parenth;/* * Replace the first ';' by a NULL char so strrchr can work
@@ -238,6 +238,14 @@ static int mtdpart_setup_real(char *s)if (semicol) *semicol ='\0' ; +/* +* make sure that part-names with ":" will not be handled as +* part of the mtd-id with an ":" +*/ + open_parenth =strchr (s,'(' ); +if (open_parenth) + *open_parenth ='\0' ; + mtd_id = s;/*
@@ -247,6 +255,10 @@ static int mtdpart_setup_real(char *s)*/ p =strrchr (s,':' ); +/* Restore the '(' now. */ +if (open_parenth) + *open_parenth ='(' ; +/* Restore the ';' now. */ if (semicol) *semicol =';' ;
drivers/net/can/softing/softing_main.c +7 -2
@@ -393,8 +393,13 @@ static int softing_netdev_open(struct net_device *ndev)/* check or determine and set bittime */ ret =open_candev (ndev); -if (!ret) - ret =softing_startstop (ndev,1 ); +if (ret) +return ret; + + ret =softing_startstop (ndev,1 ); +if (ret <0 ) +close_candev (ndev); +return ret; }
drivers/net/ethernet/allwinner/sun4i-emac.c +5 -2
@@ -827,13 +827,13 @@ static int emac_probe(struct platform_device *pdev) db->clk =devm_clk_get (&pdev->dev,NULL );if (IS_ERR (db->clk)) { ret =PTR_ERR (db->clk); - goto out_iounmap; + goto out_dispose_mapping; } ret =clk_prepare_enable (db->clk);if (ret) {dev_err (&pdev->dev,"Error couldn't enable clock (%d)\n" , ret); - goto out_iounmap; + goto out_dispose_mapping; } ret =sunxi_sram_claim (&pdev->dev);
@@ -890,6 +890,8 @@ static int emac_probe(struct platform_device *pdev)sunxi_sram_release (&pdev->dev); out_clk_disable_unprepare:clk_disable_unprepare (db->clk); +out_dispose_mapping: +irq_dispose_mapping (ndev->irq); out_iounmap:iounmap (db->membase); out:
@@ -908,6 +910,7 @@ static int emac_remove(struct platform_device *pdev)unregister_netdev (ndev);sunxi_sram_release (&pdev->dev);clk_disable_unprepare (db->clk); +irq_dispose_mapping (ndev->irq);iounmap (db->membase);free_netdev (ndev);
drivers/net/ethernet/broadcom/genet/bcmgenet.c +3 -1
@@ -3433,8 +3433,10 @@ static int bcmgenet_probe(struct platform_device *pdev)clk_disable_unprepare (priv->clk); err =register_netdev (dev); -if (err) +if (err) { +bcmgenet_mii_exit (dev); goto err; + }return err;
drivers/net/ethernet/korina.c +1 -1
@@ -216,7 +216,7 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)dev_kfree_skb_any (skb);spin_unlock_irqrestore (&lp->lock, flags); -return NETDEV_TX_BUSY ; +return NETDEV_TX_OK ; } }
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +13 -7
@@ -1311,8 +1311,10 @@ static void mlx4_en_tx_timeout(struct net_device *dev) } priv->port_stats.tx_timeout++; -en_dbg (DRV , priv,"Scheduling watchdog\n" ); -queue_work (mdev->workqueue, &priv->watchdog_task); +if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , &priv->state)) { +en_dbg (DRV , priv,"Scheduling port restart\n" ); +queue_work (mdev->workqueue, &priv->restart_task); + } }
@@ -1746,6 +1748,7 @@ int mlx4_en_start_port(struct net_device *dev)local_bh_enable (); } +clear_bit (MLX4_EN_STATE_FLAG_RESTARTING , &priv->state);netif_tx_start_all_queues (dev);netif_device_attach (dev);
@@ -1900,7 +1903,7 @@ void mlx4_en_stop_port(struct net_device *dev, int detach)static void mlx4_en_restart (struct work_struct *work) { struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv, - watchdog_task); + restart_task);struct mlx4_en_dev *mdev = priv->mdev;struct net_device *dev = priv->dev;
@@ -2220,7 +2223,7 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)if (netif_running (dev)) {mutex_lock (&mdev->state_lock);if (!mdev->device_up) { -/* NIC is probably restarting - let watchdog task reset +/* NIC is probably restarting - let restart task reset * the port */ en_dbg (DRV , priv,"Change MTU called with card down!?\n" ); }else {
@@ -2229,7 +2232,9 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)if (err) {en_err (priv,"Failed restarting port:%d\n" , priv->port); -queue_work (mdev->workqueue, &priv->watchdog_task); +if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , + &priv->state)) +queue_work (mdev->workqueue, &priv->restart_task); } }mutex_unlock (&mdev->state_lock);
@@ -2701,7 +2706,8 @@ static int mlx4_xdp_set(struct net_device *dev, struct bpf_prog *prog)if (err) {en_err (priv,"Failed starting port %d for XDP change\n" , priv->port); -queue_work (mdev->workqueue, &priv->watchdog_task); +if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , &priv->state)) +queue_work (mdev->workqueue, &priv->restart_task); } }
@@ -3080,7 +3086,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, priv->counter_index =MLX4_SINK_COUNTER_INDEX (mdev->dev);spin_lock_init (&priv->stats_lock);INIT_WORK (&priv->rx_mode_task, mlx4_en_do_set_rx_mode); -INIT_WORK (&priv->watchdog_task, mlx4_en_restart); +INIT_WORK (&priv->restart_task, mlx4_en_restart);INIT_WORK (&priv->linkstate_task, mlx4_en_linkstate);INIT_DELAYED_WORK (&priv->stats_task, mlx4_en_do_get_stats);INIT_DELAYED_WORK (&priv->service_task, mlx4_en_service_task);
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +6 -1
@@ -522,6 +522,10 @@ struct mlx4_en_stats_bitmap {struct mutex mutex;/* for mutual access to stats bitmap */ }; +enum { +MLX4_EN_STATE_FLAG_RESTARTING , +}; +struct mlx4_en_priv {struct mlx4_en_dev *mdev;struct mlx4_en_port_profile *prof;
@@ -586,7 +590,7 @@ struct mlx4_en_priv {struct mlx4_en_cq *rx_cq[MAX_RX_RINGS ];struct mlx4_qp drop_qp;struct work_struct rx_mode_task; -struct work_struct watchdog_task; +struct work_struct restart_task;struct work_struct linkstate_task;struct delayed_work stats_task;struct delayed_work service_task;
@@ -632,6 +636,7 @@ struct mlx4_en_priv {u32 pflags;u8 rss_key[MLX4_EN_RSS_KEY_SIZE ];u8 rss_hash_fn; +unsigned long state; };enum mlx4_en_wol {
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +1 -0
@@ -2507,6 +2507,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)qlcnic_sriov_vf_register_map (ahw);break ;default : + err = -EINVAL ; goto err_out_free_hw_res; }
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +3 -3
@@ -30,7 +30,6 @@#define PRG_ETH0_RGMII_MODE BIT(0)/* mux to choose between fclk_div2 (bit unset) and mpll2 (bit set) */ -#define PRG_ETH0_CLK_M250_SEL_SHIFT 4#define PRG_ETH0_CLK_M250_SEL_MASK GENMASK(4, 4)#define PRG_ETH0_TXDLY_SHIFT 5
@@ -123,8 +122,9 @@ static int meson8b_init_clk(struct meson8b_dwmac *dwmac) init.num_parents =MUX_CLK_NUM_PARENTS ; dwmac->m250_mux.reg = dwmac->regs +PRG_ETH0 ; - dwmac->m250_mux.shift =PRG_ETH0_CLK_M250_SEL_SHIFT ; - dwmac->m250_mux.mask =PRG_ETH0_CLK_M250_SEL_MASK ; + dwmac->m250_mux.shift =__ffs (PRG_ETH0_CLK_M250_SEL_MASK ); + dwmac->m250_mux.mask =PRG_ETH0_CLK_M250_SEL_MASK >> + dwmac->m250_mux.shift; dwmac->m250_mux.flags =0 ; dwmac->m250_mux.table =NULL ; dwmac->m250_mux.hw.init = &init;
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +10 -3
@@ -1901,9 +1901,6 @@ static int stmmac_release(struct net_device *dev) {struct stmmac_priv *priv =netdev_priv (dev); -if (priv->eee_enabled) -del_timer_sync (&priv->eee_ctrl_timer); -/* Stop and disconnect the PHY */ if (priv->phydev) {phy_stop (priv->phydev);
@@ -1924,6 +1921,11 @@ static int stmmac_release(struct net_device *dev)if (priv->lpi_irq >0 )free_irq (priv->lpi_irq, dev); +if (priv->eee_enabled) { + priv->tx_path_in_lpi_mode = false; +del_timer_sync (&priv->eee_ctrl_timer); + } +/* Stop TX/RX DMA and clear the descriptors */ priv->hw->dma->stop_tx (priv->ioaddr); priv->hw->dma->stop_rx (priv->ioaddr);
@@ -3503,6 +3505,11 @@ int stmmac_suspend(struct device *dev)napi_disable (&priv->napi); +if (priv->eee_enabled) { + priv->tx_path_in_lpi_mode = false; +del_timer_sync (&priv->eee_ctrl_timer); + } +/* Stop TX/RX DMA */ priv->hw->dma->stop_tx (priv->ioaddr); priv->hw->dma->stop_rx (priv->ioaddr);
drivers/net/wireless/intel/iwlwifi/pcie/trans.c +27 -9
@@ -1904,18 +1904,36 @@ static int iwl_trans_pcie_read_mem(struct iwl_trans *trans, u32 addr, void *buf, int dwords) {unsigned long flags; -int offs, ret =0 ; +int offs =0 ;u32 *vals = buf; -if (iwl_trans_grab_nic_access (trans, &flags)) { -iwl_write32 (trans,HBUS_TARG_MEM_RADDR , addr); -for (offs =0 ; offs < dwords; offs++) - vals[offs] =iwl_read32 (trans,HBUS_TARG_MEM_RDAT ); -iwl_trans_release_nic_access (trans, &flags); - }else { - ret = -EBUSY ; +while (offs < dwords) { +/* limit the time we spin here under lock to 1/2s */ +ktime_t timeout =ktime_add_us (ktime_get (),500 *USEC_PER_MSEC ); + +if (iwl_trans_grab_nic_access (trans, &flags)) { +iwl_write32 (trans,HBUS_TARG_MEM_RADDR , + addr +4 * offs); + +while (offs < dwords) { + vals[offs] =iwl_read32 (trans, +HBUS_TARG_MEM_RDAT ); + offs++; + +/* calling ktime_get is expensive so +* do it once in 128 reads +*/ +if (offs %128 ==0 &&ktime_after (ktime_get (), + timeout)) +break ; + } +iwl_trans_release_nic_access (trans, &flags); + }else { +return -EBUSY ; + } } -return ret; + +return 0 ; } static int iwl_trans_pcie_write_mem(struct iwl_trans *trans, u32 addr,
drivers/net/wireless/intersil/orinoco/orinoco_usb.c +7 -7
@@ -1224,13 +1224,6 @@ static netdev_tx_t ezusb_xmit(struct sk_buff *skb, struct net_device *dev)if (skb->len <ETH_HLEN ) goto drop; - ctx =ezusb_alloc_ctx (upriv,EZUSB_RID_TX ,0 ); -if (!ctx) - goto busy; - -memset (ctx->buf,0 ,BULK_BUF_SIZE ); - buf = ctx->buf->data; - tx_control =0 ; err = orinoco_process_xmit_skb(skb, dev, priv, &tx_control,
@@ -1238,6 +1231,13 @@ static netdev_tx_t ezusb_xmit(struct sk_buff *skb, struct net_device *dev)if (err) goto drop; + ctx =ezusb_alloc_ctx (upriv,EZUSB_RID_TX ,0 ); +if (!ctx) + goto drop; + +memset (ctx->buf,0 ,BULK_BUF_SIZE ); + buf = ctx->buf->data; + {__le16 *tx_cntl = (__le16 *)buf; *tx_cntl =cpu_to_le16 (tx_control);
drivers/net/wireless/st/cw1200/main.c +2 -0
@@ -385,6 +385,7 @@ static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr, CW1200_LINK_ID_MAX, cw1200_skb_dtor, priv)) { +destroy_workqueue (priv->workqueue);ieee80211_free_hw (hw);return NULL ; }
@@ -396,6 +397,7 @@ static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr,for (; i >0 ; i--)cw1200_queue_deinit (&priv->tx_queue[i -1 ]);cw1200_queue_stats_deinit (&priv->tx_queue_stats); +destroy_workqueue (priv->workqueue);ieee80211_free_hw (hw);return NULL ; }
drivers/nfc/s3fwrn5/firmware.c +3 -1
@@ -304,8 +304,10 @@ static int s3fwrn5_fw_request_firmware(struct s3fwrn5_fw_info *fw_info)if (ret <0 )return ret; -if (fw->fw->size <S3FWRN5_FW_IMAGE_HEADER_SIZE ) +if (fw->fw->size <S3FWRN5_FW_IMAGE_HEADER_SIZE ) { +release_firmware (fw->fw);return -EINVAL ; + }memcpy (fw->date, fw->fw->data +0x00 ,12 ); fw->date[12 ] ='\0' ;
drivers/pci/slot.c +3 -3
@@ -307,6 +307,9 @@ struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, goto err; } +INIT_LIST_HEAD (&slot->list); +list_add (&slot->list, &parent->slots); + err =kobject_init_and_add (&slot->kobj, &pci_slot_ktype,NULL ,"%s" , slot_name);if (err) {
@@ -314,9 +317,6 @@ struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, goto err; } -INIT_LIST_HEAD (&slot->list); -list_add (&slot->list, &parent->slots); -down_read (&pci_bus_sem);list_for_each_entry (dev, &parent->devices, bus_list)if (PCI_SLOT (dev->devfn) == slot_nr)
drivers/pinctrl/intel/pinctrl-baytrail.c +7 -1
@@ -1266,7 +1266,6 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,break ;case PIN_CONFIG_INPUT_DEBOUNCE : debounce =readl (db_reg); - debounce &= ~BYT_DEBOUNCE_PULSE_MASK ;if (arg) conf |=BYT_DEBOUNCE_EN ;
@@ -1275,24 +1274,31 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,switch (arg) {case 375 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_375US ;break ;case 750 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_750US ;break ;case 1500 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_1500US ;break ;case 3000 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_3MS ;break ;case 6000 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_6MS ;break ;case 12000 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_12MS ;break ;case 24000 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_24MS ;break ;default :
drivers/pinctrl/intel/pinctrl-merrifield.c +8 -0
@@ -731,6 +731,10 @@ static int mrfld_config_set_pin(struct mrfld_pinctrl *mp, unsigned int pin, mask |= BUFCFG_Px_EN_MASK |BUFCFG_PUPD_VAL_MASK ; bits |=BUFCFG_PU_EN ; +/* Set default strength value in case none is given */ +if (arg ==1 ) + arg =20000 ; +switch (arg) {case 50000 : bits |=BUFCFG_PUPD_VAL_50K <<BUFCFG_PUPD_VAL_SHIFT ;
@@ -751,6 +755,10 @@ static int mrfld_config_set_pin(struct mrfld_pinctrl *mp, unsigned int pin, mask |= BUFCFG_Px_EN_MASK |BUFCFG_PUPD_VAL_MASK ; bits |=BUFCFG_PD_EN ; +/* Set default strength value in case none is given */ +if (arg ==1 ) + arg =20000 ; +switch (arg) {case 50000 : bits |=BUFCFG_PUPD_VAL_50K <<BUFCFG_PUPD_VAL_SHIFT ;
drivers/pinctrl/pinctrl-amd.c +0 -7
@@ -404,7 +404,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) pin_reg &= ~BIT (LEVEL_TRIG_OFF ); pin_reg &= ~(ACTIVE_LEVEL_MASK <<ACTIVE_LEVEL_OFF ); pin_reg |=ACTIVE_HIGH <<ACTIVE_LEVEL_OFF ; - pin_reg |=DB_TYPE_REMOVE_GLITCH <<DB_CNTRL_OFF ;irq_set_handler_locked (d, handle_edge_irq);break ;
@@ -412,7 +411,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) pin_reg &= ~BIT (LEVEL_TRIG_OFF ); pin_reg &= ~(ACTIVE_LEVEL_MASK <<ACTIVE_LEVEL_OFF ); pin_reg |=ACTIVE_LOW <<ACTIVE_LEVEL_OFF ; - pin_reg |=DB_TYPE_REMOVE_GLITCH <<DB_CNTRL_OFF ;irq_set_handler_locked (d, handle_edge_irq);break ;
@@ -420,7 +418,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) pin_reg &= ~BIT (LEVEL_TRIG_OFF ); pin_reg &= ~(ACTIVE_LEVEL_MASK <<ACTIVE_LEVEL_OFF ); pin_reg |=BOTH_EADGE <<ACTIVE_LEVEL_OFF ; - pin_reg |=DB_TYPE_REMOVE_GLITCH <<DB_CNTRL_OFF ;irq_set_handler_locked (d, handle_edge_irq);break ;
@@ -428,8 +425,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) pin_reg |=LEVEL_TRIGGER <<LEVEL_TRIG_OFF ; pin_reg &= ~(ACTIVE_LEVEL_MASK <<ACTIVE_LEVEL_OFF ); pin_reg |=ACTIVE_HIGH <<ACTIVE_LEVEL_OFF ; - pin_reg &= ~(DB_CNTRl_MASK <<DB_CNTRL_OFF ); - pin_reg |=DB_TYPE_PRESERVE_LOW_GLITCH <<DB_CNTRL_OFF ;irq_set_handler_locked (d, handle_level_irq);break ;
@@ -437,8 +432,6 @@ static int amd_gpio_irq_set_type(struct irq_data *d, unsigned int type) pin_reg |=LEVEL_TRIGGER <<LEVEL_TRIG_OFF ; pin_reg &= ~(ACTIVE_LEVEL_MASK <<ACTIVE_LEVEL_OFF ); pin_reg |=ACTIVE_LOW <<ACTIVE_LEVEL_OFF ; - pin_reg &= ~(DB_CNTRl_MASK <<DB_CNTRL_OFF ); - pin_reg |=DB_TYPE_PRESERVE_HIGH_GLITCH <<DB_CNTRL_OFF ;irq_set_handler_locked (d, handle_level_irq);break ;
drivers/pinctrl/pinctrl-falcon.c +9 -5
@@ -438,24 +438,28 @@ static int pinctrl_falcon_probe(struct platform_device *pdev)/* load and remap the pad resources of the different banks */ for_each_compatible_node (np,NULL ,"lantiq,pad-falcon" ) { -struct platform_device *ppdev =of_find_device_by_node (np);const __be32 *bank =of_get_property (np,"lantiq,bank" ,NULL );struct resource res; +struct platform_device *ppdev;u32 avail;int pins;if (!of_device_is_available (np))continue ; -if (!ppdev) { -dev_err (&pdev->dev,"failed to find pad pdev\n" ); -continue ; - }if (!bank || *bank >=PORTS )continue ;if (of_address_to_resource (np,0 , &res))continue ; + + ppdev =of_find_device_by_node (np); +if (!ppdev) { +dev_err (&pdev->dev,"failed to find pad pdev\n" ); +continue ; + } + falcon_info.clk[*bank] =clk_get (&ppdev->dev,NULL ); +put_device (&ppdev->dev);if (IS_ERR (falcon_info.clk[*bank])) {dev_err (&ppdev->dev,"failed to get clock\n" );return PTR_ERR (falcon_info.clk[*bank]);
drivers/platform/x86/acer-wmi.c +1 -0
@@ -124,6 +124,7 @@ static const struct key_entry acer_wmi_keymap[] __initconst = { {KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */ {KE_IGNORE, 0x81, {KEY_SLEEP} }, {KE_KEY, 0x82, {KEY_TOUCHPAD_TOGGLE} }, /* Touch Pad Toggle */ + {KE_IGNORE, 0x84, {KEY_KBDILLUMTOGGLE} }, /* Automatic Keyboard background light toggle */ {KE_KEY, KEY_TOUCHPAD_ON, {KEY_TOUCHPAD_ON} }, {KE_KEY, KEY_TOUCHPAD_OFF, {KEY_TOUCHPAD_OFF} }, {KE_IGNORE, 0x83, {KEY_TOUCHPAD_TOGGLE} },
drivers/ps3/ps3stor_lib.c +1 -1
@@ -201,7 +201,7 @@ int ps3stor_setup(struct ps3_storage_device *dev, irq_handler_t handler) dev->bounce_lpar =ps3_mm_phys_to_lpar (__pa (dev->bounce_buf)); dev->bounce_dma =dma_map_single (&dev->sbd.core, dev->bounce_buf, dev->bounce_size,DMA_BIDIRECTIONAL ); -if (!dev->bounce_dma) { +if (dma_mapping_error (&dev->sbd.core, dev->bounce_dma)) {dev_err (&dev->sbd.core,"%s:%u: map DMA region failed\n" , __func__, __LINE__); error = -ENODEV ;
drivers/s390/block/dasd_alias.c +11 -1
@@ -255,7 +255,6 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device)return ; device->discipline->get_uid (device, &uid);spin_lock_irqsave (&lcu->lock, flags); -list_del_init (&device->alias_list);/* make sure that the workers don't use this device */ if (device == lcu->suc_data.device) {spin_unlock_irqrestore (&lcu->lock, flags);
@@ -282,6 +281,7 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device)spin_lock_irqsave (&aliastree.lock, flags);spin_lock (&lcu->lock); +list_del_init (&device->alias_list);if (list_empty (&lcu->grouplist) &&list_empty (&lcu->active_devices) &&list_empty (&lcu->inactive_devices)) {
@@ -502,6 +502,14 @@ static int _lcu_update(struct dasd_device *refdev, struct alias_lcu *lcu)return rc;spin_lock_irqsave (&lcu->lock, flags); +/* +* there is another update needed skip the remaining handling +* the data might already be outdated +* but especially do not add the device to an LCU with pending +* update +*/ +if (lcu->flags &NEED_UAC_UPDATE ) + goto out; lcu->pav =NO_PAV ;for (i =0 ; i <MAX_DEVICES_PER_LCU ; ++i) {switch (lcu->uac->unit[i].ua_type) {
@@ -520,6 +528,7 @@ static int _lcu_update(struct dasd_device *refdev, struct alias_lcu *lcu) alias_list) {_add_device_to_lcu (lcu, device, refdev); } +out:spin_unlock_irqrestore (&lcu->lock, flags);return 0 ; }
@@ -624,6 +633,7 @@ int dasd_alias_add_device(struct dasd_device *device) }if (lcu->flags &UPDATE_PENDING ) {list_move (&device->alias_list, &lcu->active_devices); + private->pavgroup =NULL ;_schedule_lcu_update (lcu, device); }spin_unlock_irqrestore (&lcu->lock, flags);
drivers/scsi/be2iscsi/be_main.c +2 -2
@@ -3052,7 +3052,6 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba,if (!eq_vaddress) goto create_eq_error; - mem->dma = paddr; mem->va = eq_vaddress; ret =be_fill_queue (eq, phba->params.num_eq_entries,sizeof (struct be_eq_entry ), eq_vaddress);
@@ -3062,6 +3061,7 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba, goto create_eq_error; } + mem->dma = paddr; ret =beiscsi_cmd_eq_create (&phba->ctrl, eq, phwi_context->cur_eqd);if (ret) {
@@ -3116,7 +3116,6 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba,if (!cq_vaddress) goto create_cq_error; - mem->dma = paddr; ret =be_fill_queue (cq, phba->params.num_cq_entries,sizeof (struct sol_cqe ), cq_vaddress);if (ret) {
@@ -3126,6 +3125,7 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba, goto create_cq_error; } + mem->dma = paddr; ret =beiscsi_cmd_cq_create (&phba->ctrl, cq, eq, false, false,0 );if (ret) {
drivers/scsi/bnx2i/Kconfig +1 -0
@@ -3,6 +3,7 @@ config SCSI_BNX2_ISCSI depends on NET depends on PCI depends on (IPV6 || IPV6=n) + depends on MMU select SCSI_ISCSI_ATTRS select NETDEVICES select ETHERNET
drivers/scsi/fnic/fnic_main.c +1 -0
@@ -735,6 +735,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)for (i =0 ; i <FNIC_IO_LOCKS ; i++)spin_lock_init (&fnic->io_req_lock[i]); + err = -ENOMEM ; fnic->io_req_pool =mempool_create_slab_pool (2 , fnic_io_req_cache);if (!fnic->io_req_pool) goto err_out_free_resources;
drivers/scsi/mpt3sas/mpt3sas_base.c +1 -1
@@ -4477,7 +4477,7 @@ _base_send_ioc_init(struct MPT3SAS_ADAPTER *ioc) r =_base_handshake_req_reply_wait (ioc,sizeof (Mpi2IOCInitRequest_t), (u32 *)&mpi_request, -sizeof (Mpi2IOCInitReply_t), (u16 *)&mpi_reply,10 ); +sizeof (Mpi2IOCInitReply_t), (u16 *)&mpi_reply,30 );if (r !=0 ) { pr_err(MPT3SAS_FMT "%s: handshake failed (r=%d)\n",
drivers/scsi/pm8001/pm8001_init.c +2 -1
@@ -1061,7 +1061,8 @@ static int pm8001_pci_probe(struct pci_dev *pdev,pm8001_init_sas_add (pm8001_ha);/* phy setting support for motherboard controller */ -if (pm8001_configure_phy_settings (pm8001_ha)) + rc =pm8001_configure_phy_settings (pm8001_ha); +if (rc) goto err_out_shost;pm8001_post_sas_ha_init (shost, chip);
drivers/soc/qcom/smp2p.c +3 -2
@@ -314,15 +314,16 @@ static int qcom_smp2p_inbound_entry(struct qcom_smp2p *smp2p,static int smp2p_update_bits (void *data,u32 mask,u32 value) {struct smp2p_entry *entry = data; +unsigned long flags;u32 orig;u32 val; -spin_lock (&entry->lock); +spin_lock_irqsave (&entry->lock, flags); val = orig =readl (entry->value); val &= ~mask; val |= value;writel (val, entry->value); -spin_unlock (&entry->lock); +spin_unlock_irqrestore (&entry->lock, flags);if (val != orig)qcom_smp2p_kick (entry->smp2p);
drivers/soc/tegra/fuse/speedo-tegra210.c +1 -1
@@ -105,7 +105,7 @@ static int get_process_id(int value, const u32 *speedos, unsigned int num)unsigned int i;for (i =0 ; i < num; i++) -if (value < speedos[num]) +if (value < speedos[i])return i;return -EINVAL ;
drivers/soc/ti/knav_dma.c +11 -2
@@ -752,8 +752,9 @@ static int knav_dma_probe(struct platform_device *pdev)pm_runtime_enable (kdev->dev); ret =pm_runtime_get_sync (kdev->dev);if (ret <0 ) { +pm_runtime_put_noidle (kdev->dev);dev_err (kdev->dev,"unable to enable pktdma, err %d\n" , ret); -return ret; + goto err_pm_disable; }/* Initialise all packet dmas */
@@ -767,13 +768,21 @@ static int knav_dma_probe(struct platform_device *pdev)if (list_empty (&kdev->list)) {dev_err (dev,"no valid dma instance\n" ); -return -ENODEV ; + ret = -ENODEV ; + goto err_put_sync; }debugfs_create_file ("knav_dma" ,S_IFREG |S_IRUGO ,NULL ,NULL , &knav_dma_debug_ops);return ret; + +err_put_sync: +pm_runtime_put_sync (kdev->dev); +err_pm_disable: +pm_runtime_disable (kdev->dev); + +return ret; }static int knav_dma_remove (struct platform_device *pdev)
drivers/soc/ti/knav_qmss_queue.c +3 -1
@@ -1717,6 +1717,7 @@ static int knav_queue_probe(struct platform_device *pdev)pm_runtime_enable (&pdev->dev); ret =pm_runtime_get_sync (&pdev->dev);if (ret <0 ) { +pm_runtime_put_noidle (&pdev->dev);dev_err (dev,"Failed to enable QMSS\n" );return ret; }
@@ -1784,9 +1785,10 @@ static int knav_queue_probe(struct platform_device *pdev)if (ret) goto err; - regions =of_get_child_by_name (node,"descriptor-regions" ); + regions =of_get_child_by_name (node,"descriptor-regions" );if (!regions) {dev_err (dev,"descriptor-regions not specified\n" ); + ret = -ENODEV ; goto err; } ret =knav_queue_setup_regions (kdev, regions);
drivers/spi/Kconfig +3 -0
@@ -763,4 +763,7 @@ endif # SPI_MASTER # (slave support would go here) +config SPI_DYNAMIC + def_bool ACPI || OF_DYNAMIC || SPI_SLAVE + endif # SPI
drivers/spi/spi-bcm2835aux.c +6 -11
@@ -407,7 +407,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)unsigned long clk_hz;int err; - master =spi_alloc_master (&pdev->dev,sizeof (*bs)); + master =devm_spi_alloc_master (&pdev->dev,sizeof (*bs));if (!master) {dev_err (&pdev->dev,"spi_alloc_master() failed\n" );return -ENOMEM ;
@@ -439,30 +439,27 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)/* the main area */ res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); bs->regs =devm_ioremap_resource (&pdev->dev, res); -if (IS_ERR (bs->regs)) { - err =PTR_ERR (bs->regs); - goto out_master_put; - } +if (IS_ERR (bs->regs)) +return PTR_ERR (bs->regs); bs->clk =devm_clk_get (&pdev->dev,NULL );if ((!bs->clk) || (IS_ERR (bs->clk))) { err =PTR_ERR (bs->clk);dev_err (&pdev->dev,"could not get clk: %d\n" , err); - goto out_master_put; +return err; } bs->irq =platform_get_irq (pdev,0 );if (bs->irq <=0 ) {dev_err (&pdev->dev,"could not get IRQ: %d\n" , bs->irq); - err = bs->irq ? bs->irq : -ENODEV ; - goto out_master_put; +return bs->irq ? bs->irq : -ENODEV ; }/* this also enables the HW block */ err =clk_prepare_enable (bs->clk);if (err) {dev_err (&pdev->dev,"could not prepare clock: %d\n" , err); - goto out_master_put; +return err; }/* just checking if the clock returns a sane value */
@@ -495,8 +492,6 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) out_clk_disable:clk_disable_unprepare (bs->clk); -out_master_put: -spi_master_put (master);return err; }
drivers/spi/spi-davinci.c +1 -1
@@ -1099,13 +1099,13 @@ static int davinci_spi_remove(struct platform_device *pdev)spi_bitbang_stop (&dspi->bitbang);clk_disable_unprepare (dspi->clk); -spi_master_put (master);if (dspi->dma_rx) {dma_release_channel (dspi->dma_rx);dma_release_channel (dspi->dma_tx); } +spi_master_put (master);return 0 ; }
drivers/spi/spi-img-spfi.c +3 -1
@@ -771,8 +771,10 @@ static int img_spfi_resume(struct device *dev)int ret; ret =pm_runtime_get_sync (dev); -if (ret) +if (ret) { +pm_runtime_put_noidle (dev);return ret; + }spfi_reset (spfi);pm_runtime_put (dev);
drivers/spi/spi-pic32.c +1 -0
@@ -839,6 +839,7 @@ static int pic32_spi_probe(struct platform_device *pdev)return 0 ; err_bailout: +pic32_spi_dma_unprep (pic32s);clk_disable_unprepare (pic32s->clk); err_master:spi_master_put (master);
drivers/spi/spi-rb4xx.c +1 -1
@@ -148,7 +148,7 @@ static int rb4xx_spi_probe(struct platform_device *pdev)if (IS_ERR (spi_base))return PTR_ERR (spi_base); - master =spi_alloc_master (&pdev->dev,sizeof (*rbspi)); + master =devm_spi_alloc_master (&pdev->dev,sizeof (*rbspi));if (!master)return -ENOMEM ;
drivers/spi/spi-sc18is602.c +2 -11
@@ -247,13 +247,12 @@ static int sc18is602_probe(struct i2c_client *client,struct sc18is602_platform_data *pdata =dev_get_platdata (dev);struct sc18is602 *hw;struct spi_master *master; -int error;if (!i2c_check_functionality (client->adapter,I2C_FUNC_I2C |I2C_FUNC_SMBUS_WRITE_BYTE_DATA ))return -EINVAL ; - master =spi_alloc_master (dev,sizeof (struct sc18is602 )); + master =devm_spi_alloc_master (dev,sizeof (struct sc18is602 ));if (!master)return -ENOMEM ;
@@ -304,15 +303,7 @@ static int sc18is602_probe(struct i2c_client *client, master->min_speed_hz = hw->freq /128 ; master->max_speed_hz = hw->freq /4 ; - error =devm_spi_register_master (dev, master); -if (error) - goto error_reg; - -return 0 ; - -error_reg: -spi_master_put (master); -return error; +return devm_spi_register_master (dev, master); }static const struct i2c_device_id sc18is602_id[] = {
drivers/spi/spi-sh.c +4 -9
@@ -450,7 +450,7 @@ static int spi_sh_probe(struct platform_device *pdev)return -ENODEV ; } - master =spi_alloc_master (&pdev->dev,sizeof (struct spi_sh_data )); + master =devm_spi_alloc_master (&pdev->dev,sizeof (struct spi_sh_data ));if (master ==NULL ) {dev_err (&pdev->dev,"spi_alloc_master error.\n" );return -ENOMEM ;
@@ -468,16 +468,14 @@ static int spi_sh_probe(struct platform_device *pdev)break ;default :dev_err (&pdev->dev,"No support width\n" ); - ret = -ENODEV ; - goto error1; +return -ENODEV ; } ss->irq = irq; ss->master = master; ss->addr =devm_ioremap (&pdev->dev, res->start,resource_size (res));if (ss->addr ==NULL ) {dev_err (&pdev->dev,"ioremap error.\n" ); - ret = -ENOMEM ; - goto error1; +return -ENOMEM ; }INIT_LIST_HEAD (&ss->queue);spin_lock_init (&ss->lock);
@@ -487,7 +485,7 @@ static int spi_sh_probe(struct platform_device *pdev) ret =request_irq (irq, spi_sh_irq,0 ,"spi_sh" , ss);if (ret <0 ) {dev_err (&pdev->dev,"request_irq error\n" ); - goto error1; +return ret; } master->num_chipselect =2 ;
@@ -506,9 +504,6 @@ static int spi_sh_probe(struct platform_device *pdev) error3:free_irq (irq, ss); - error1: -spi_master_put (master); -return ret; }
drivers/spi/spi-st-ssc4.c +3 -2
@@ -379,13 +379,14 @@ static int spi_st_probe(struct platform_device *pdev) ret =devm_spi_register_master (&pdev->dev, master);if (ret) {dev_err (&pdev->dev,"Failed to register master\n" ); - goto clk_disable; + goto rpm_disable; }return 0 ; -clk_disable: +rpm_disable:pm_runtime_disable (&pdev->dev); +clk_disable:clk_disable_unprepare (spi_st->clk); put_master:spi_master_put (master);
drivers/spi/spi-tegra114.c +2 -0
@@ -801,6 +801,7 @@ static int tegra_spi_setup(struct spi_device *spi) ret =pm_runtime_get_sync (tspi->dev);if (ret <0 ) { +pm_runtime_put_noidle (tspi->dev);dev_err (tspi->dev,"pm runtime failed, e = %d\n" , ret);return ret; }
@@ -1214,6 +1215,7 @@ static int tegra_spi_resume(struct device *dev) ret =pm_runtime_get_sync (dev);if (ret <0 ) { +pm_runtime_put_noidle (dev);dev_err (dev,"pm runtime failed, e = %d\n" , ret);return ret; }
drivers/spi/spi-tegra20-sflash.c +1 -0
@@ -564,6 +564,7 @@ static int tegra_sflash_resume(struct device *dev) ret =pm_runtime_get_sync (dev);if (ret <0 ) { +pm_runtime_put_noidle (dev);dev_err (dev,"pm runtime failed, e = %d\n" , ret);return ret; }
drivers/spi/spi-tegra20-slink.c +2 -0
@@ -761,6 +761,7 @@ static int tegra_slink_setup(struct spi_device *spi) ret =pm_runtime_get_sync (tspi->dev);if (ret <0 ) { +pm_runtime_put_noidle (tspi->dev);dev_err (tspi->dev,"pm runtime failed, e = %d\n" , ret);return ret; }
@@ -1197,6 +1198,7 @@ static int tegra_slink_resume(struct device *dev) ret =pm_runtime_get_sync (dev);if (ret <0 ) { +pm_runtime_put_noidle (dev);dev_err (dev,"pm runtime failed, e = %d\n" , ret);return ret; }
drivers/spi/spi-ti-qspi.c +1 -0
@@ -175,6 +175,7 @@ static int ti_qspi_setup(struct spi_device *spi) ret =pm_runtime_get_sync (qspi->dev);if (ret <0 ) { +pm_runtime_put_noidle (qspi->dev);dev_err (qspi->dev,"pm_runtime_get_sync() failed\n" );return ret; }
drivers/spi/spi.c +20 -1
@@ -422,6 +422,12 @@ static LIST_HEAD(spi_master_list);*/ static DEFINE_MUTEX (board_lock); +/* +* Prevents addition of devices with same chip select and +* addition of devices below an unregistering controller. +*/ +static DEFINE_MUTEX (spi_add_lock); +/** * spi_alloc_device - Allocate a new SPI device * @master: Controller to which device is connected
@@ -500,7 +506,6 @@ static int spi_dev_check(struct device *dev, void *data)*/ int spi_add_device (struct spi_device *spi) { -static DEFINE_MUTEX (spi_add_lock);struct spi_master *master = spi->master;struct device *dev = master->dev.parent;int status;
@@ -529,6 +534,13 @@ int spi_add_device(struct spi_device *spi) goto done; } +/* Controller may unregister concurrently */ +if (IS_ENABLED (CONFIG_SPI_DYNAMIC ) && + !device_is_registered (&master->dev)) { + status = -ENODEV ; + goto done; + } +if (master->cs_gpios) spi->cs_gpio = master->cs_gpios[spi->chip_select];
@@ -2070,6 +2082,10 @@ static int __unregister(struct device *dev, void *null)*/ void spi_unregister_master (struct spi_master *master) { +/* Prevent addition of new devices, unregister existing ones */ +if (IS_ENABLED (CONFIG_SPI_DYNAMIC )) +mutex_lock (&spi_add_lock); +device_for_each_child (&master->dev,NULL , __unregister);if (master->queued) {
@@ -2089,6 +2105,9 @@ void spi_unregister_master(struct spi_master *master)if (!devres_find (master->dev.parent, devm_spi_release_master, devm_spi_match_master, master))put_device (&master->dev); + +if (IS_ENABLED (CONFIG_SPI_DYNAMIC )) +mutex_unlock (&spi_add_lock); }EXPORT_SYMBOL_GPL (spi_unregister_master);
drivers/staging/comedi/drivers/mf6x4.c +2 -1
@@ -121,8 +121,9 @@ static int mf6x4_ai_eoc(struct comedi_device *dev,struct mf6x4_private *devpriv = dev->private;unsigned int status; +/* EOLC goes low at end of conversion. */ status =ioread32 (devpriv->gpioc_reg); -if (status &MF6X4_GPIOC_EOLC ) +if ((status &MF6X4_GPIOC_EOLC ) ==0 )return 0 ;return -EBUSY ; }
drivers/staging/greybus/audio_codec.c +2 -0
@@ -491,6 +491,7 @@ static int gbcodec_hw_params(struct snd_pcm_substream *substream,if (ret) {dev_err_ratelimited (dai->dev,"%d: Error during set_config\n" , ret); +gb_pm_runtime_put_noidle (bundle);mutex_unlock (&codec->lock);return ret; }
@@ -562,6 +563,7 @@ static int gbcodec_prepare(struct snd_pcm_substream *substream,break ; }if (ret) { +gb_pm_runtime_put_noidle (bundle);mutex_unlock (&codec->lock);dev_err_ratelimited (dai->dev,"set_data_size failed:%d\n" , ret);
drivers/staging/speakup/speakup_dectlk.c +1 -1
@@ -47,7 +47,7 @@ static unsigned char get_index(void);static int in_escape;static int is_flushing; -static spinlock_t flush_lock; +static DEFINE_SPINLOCK (flush_lock);static DECLARE_WAIT_QUEUE_HEAD (flush);static struct var_t vars[] = {
drivers/tty/serial/8250/8250_omap.c +0 -5
@@ -161,11 +161,6 @@ static void omap_8250_mdr1_errataset(struct uart_8250_port *up, struct omap8250_priv *priv) {u8 timeout =255 ; -u8 old_mdr1; - - old_mdr1 =serial_in (up,UART_OMAP_MDR1 ); -if (old_mdr1 == priv->mdr1) -return ;serial_out (up,UART_OMAP_MDR1 , priv->mdr1);udelay (2 );
drivers/tty/serial/serial_core.c +4 -0
@@ -1415,6 +1415,10 @@ static void uart_set_ldisc(struct tty_struct *tty) {struct uart_state *state = tty->driver_data;struct uart_port *uport; +struct tty_port *port = &state->port; + +if (!tty_port_initialized (port)) +return ;mutex_lock (&state->port.mutex); uport =uart_port_check (state);
drivers/usb/chipidea/ci_hdrc_imx.c +2 -1
@@ -63,7 +63,8 @@ static const struct ci_hdrc_imx_platform_flag imx6sx_usb_data = {static const struct ci_hdrc_imx_platform_flag imx6ul_usb_data = { .flags =CI_HDRC_SUPPORTS_RUNTIME_PM | -CI_HDRC_TURN_VBUS_EARLY_ON , +CI_HDRC_TURN_VBUS_EARLY_ON | +CI_HDRC_DISABLE_DEVICE_STREAMING , };static const struct ci_hdrc_imx_platform_flag imx7d_usb_data = {
drivers/usb/core/quirks.c +3 -0
@@ -189,6 +189,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x06a3, 0x0006), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, + /* Agfa SNAPSCAN 1212U */ + { USB_DEVICE(0x06bd, 0x0001), .driver_info = USB_QUIRK_RESET_RESUME }, + /* Guillemot Webcam Hercules Dualpix Exchange (2nd ID) */ { USB_DEVICE(0x06f8, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME },
drivers/usb/gadget/function/f_acm.c +1 -1
@@ -687,7 +687,7 @@ acm_bind(struct usb_configuration *c, struct usb_function *f) acm_ss_out_desc.bEndpointAddress = acm_fs_out_desc.bEndpointAddress; status =usb_assign_descriptors (f, acm_fs_function, acm_hs_function, - acm_ss_function,NULL ); + acm_ss_function, acm_ss_function);if (status) goto fail;
drivers/usb/gadget/function/f_fs.c +4 -1
@@ -1228,6 +1228,7 @@ static long ffs_epfile_ioctl(struct file *file, unsigned code,switch (epfile->ffs->gadget->speed) {case USB_SPEED_SUPER : +case USB_SPEED_SUPER_PLUS : desc_idx =2 ;break ;case USB_SPEED_HIGH :
@@ -3067,7 +3068,8 @@ static int _ffs_func_bind(struct usb_configuration *c, }if (likely (super)) { - func->function.ss_descriptors =vla_ptr (vlabuf, d, ss_descs); + func->function.ss_descriptors = func->function.ssp_descriptors = +vla_ptr (vlabuf, d, ss_descs); ss_len = ffs_do_descs(ffs->ss_descs_count, vla_ptr(vlabuf, d, raw_descs) + fs_len + hs_len, d_raw_descs__sz - fs_len - hs_len,
@@ -3507,6 +3509,7 @@ static void ffs_func_unbind(struct usb_configuration *c, func->function.fs_descriptors =NULL ; func->function.hs_descriptors =NULL ; func->function.ss_descriptors =NULL ; + func->function.ssp_descriptors =NULL ; func->interfaces_nums =NULL ;ffs_event_add (ffs,FUNCTIONFS_UNBIND );
drivers/usb/gadget/function/f_midi.c +6 -0
@@ -1008,6 +1008,12 @@ static int f_midi_bind(struct usb_configuration *c, struct usb_function *f) f->hs_descriptors =usb_copy_descriptors (midi_function);if (!f->hs_descriptors) goto fail_f_midi; + +if (gadget_is_superspeed_plus (c->cdev->gadget)) { + f->ssp_descriptors =usb_copy_descriptors (midi_function); +if (!f->ssp_descriptors) + goto fail_f_midi; + } }kfree (midi_function);
drivers/usb/gadget/function/f_rndis.c +3 -1
@@ -91,8 +91,10 @@ static inline struct f_rndis *func_to_rndis(struct usb_function *f)/* peak (theoretical) bulk transfer rate in bits-per-second */ static unsigned int bitrate (struct usb_gadget *g) { +if (gadget_is_superspeed (g) && g->speed >=USB_SPEED_SUPER_PLUS ) +return 4250000000U ;if (gadget_is_superspeed (g) && g->speed ==USB_SPEED_SUPER ) -return 13 *1024 *8 *1000 *8 ; +return 3750000000U ;else if (gadget_is_dualspeed (g) && g->speed ==USB_SPEED_HIGH )return 13 *512 *8 *1000 *8 ;else
drivers/usb/gadget/udc/dummy_hcd.c +1 -1
@@ -2736,7 +2736,7 @@ static int __init init(void) {int retval = -ENOMEM ;int i; -struct dummy *dum[MAX_NUM_UDC ]; +struct dummy *dum[MAX_NUM_UDC ] = {};if (usb_disabled ())return -ENODEV ;
drivers/usb/host/ehci-omap.c +1 -0
@@ -237,6 +237,7 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev) err_pm_runtime:pm_runtime_put_sync (dev); +pm_runtime_disable (dev); err_phy:for (i =0 ; i < omap->nports; i++) {
drivers/usb/host/oxu210hp-hcd.c +3 -1
@@ -3734,8 +3734,10 @@ static struct usb_hcd *oxu_create(struct platform_device *pdev, oxu->is_otg = otg; ret =usb_add_hcd (hcd, irq,IRQF_SHARED ); -if (ret <0 ) +if (ret <0 ) { +usb_put_hcd (hcd);return ERR_PTR (ret); + }device_wakeup_enable (hcd->self.controller);return hcd;
drivers/usb/host/xhci-hub.c +4 -0
@@ -1424,6 +1424,10 @@ int xhci_bus_suspend(struct usb_hcd *hcd) hcd->state =HC_STATE_SUSPENDED ; bus_state->next_statechange = jiffies +msecs_to_jiffies (10 );spin_unlock_irqrestore (&xhci->lock, flags); + +if (bus_state->bus_suspended) +usleep_range (5000 ,10000 ); +return 0 ; }
drivers/usb/misc/sisusbvga/Kconfig +1 -1
@@ -15,7 +15,7 @@ config USB_SISUSBVGA config USB_SISUSBVGA_CON bool "Text console and mode switching support" if USB_SISUSBVGA - depends on VT + depends on VT && BROKEN select FONT_8x16 ---help--- Say Y here if you want a VGA text console via the USB dongle or
drivers/usb/serial/keyspan_pda.c +34 -29
160 lines not on this page · raw message
drivers/usb/serial/mos7720.c +2 -0
@@ -640,6 +640,8 @@ static void parport_mos7715_restore_state(struct parport *pp,spin_unlock (&release_lock);return ; } + mos_parport->shadowDCR = s->u.pc.ctr; + mos_parport->shadowECR = s->u.pc.ecr;write_parport_reg_nonblock (mos_parport,MOS7720_DCR , mos_parport->shadowDCR); write_parport_reg_nonblock(mos_parport, MOS7720_ECR,
drivers/usb/serial/option.c +21 -2
@@ -563,6 +563,9 @@ static void option_instat_callback(struct urb *urb);/* Device flags */ +/* Highest interface number which can be used with NCTRL() and RSVD() */ +#define FLAG_IFNUM_MAX 7 +/* Interface does not support modem-control requests */ #define NCTRL (ifnum) ((BIT(ifnum) & 0xff) << 8)
@@ -2086,6 +2089,14 @@ static struct usb_serial_driver * const serial_drivers[] = {module_usb_serial_driver (serial_drivers, option_ids); +static bool iface_is_reserved (unsigned long device_flags,u8 ifnum) +{ +if (ifnum >FLAG_IFNUM_MAX ) +return false; + +return device_flags &RSVD (ifnum); +} +static int option_probe (struct usb_serial *serial,const struct usb_device_id *id) {
@@ -2103,7 +2114,7 @@ static int option_probe(struct usb_serial *serial,* the same class/subclass/protocol as the serial interfaces. Look at * the Windows driver .INF files for reserved interface numbers. */ -if (device_flags &RSVD (iface_desc->bInterfaceNumber)) +if (iface_is_reserved (device_flags, iface_desc->bInterfaceNumber))return -ENODEV ;/* * Don't bind network interface on Samsung GT-B3730, it is handled by
@@ -2120,6 +2131,14 @@ static int option_probe(struct usb_serial *serial,return 0 ; } +static bool iface_no_modem_control (unsigned long device_flags,u8 ifnum) +{ +if (ifnum >FLAG_IFNUM_MAX ) +return false; + +return device_flags &NCTRL (ifnum); +} +static int option_attach (struct usb_serial *serial) {struct usb_interface_descriptor *iface_desc;
@@ -2135,7 +2154,7 @@ static int option_attach(struct usb_serial *serial) iface_desc = &serial->interface->cur_altsetting->desc; -if (!(device_flags &NCTRL (iface_desc->bInterfaceNumber))) +if (!iface_no_modem_control (device_flags, iface_desc->bInterfaceNumber)) data->use_send_setup =1 ;if (device_flags &ZLP )
drivers/vfio/pci/vfio_pci.c +2 -2
@@ -1403,8 +1403,8 @@ static int vfio_pci_mmap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)mutex_unlock (&vdev->vma_lock); -if (remap_pfn_range (vma, vma->vm_start, vma->vm_pgoff, - vma->vm_end - vma->vm_start, vma->vm_page_prot)) +if (io_remap_pfn_range (vma, vma->vm_start, vma->vm_pgoff, + vma->vm_end - vma->vm_start, vma->vm_page_prot)) ret =VM_FAULT_SIGBUS ; up_out:
drivers/watchdog/qcom-wdt.c +1 -1
@@ -121,7 +121,7 @@ static int qcom_wdt_restart(struct watchdog_device *wdd, unsigned long action,*/ wmb (); -msleep (150 ); +mdelay (150 );return 0 ; }
fs/btrfs/inode.c +1 -1
@@ -7000,7 +7000,7 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, found_type == BTRFS_FILE_EXTENT_PREALLOC) {/* Only regular file could have regular/prealloc extent */ if (!S_ISREG (inode->i_mode)) { - ret = -EUCLEAN ; + err = -EUCLEAN ;btrfs_crit (root->fs_info,"regular/prealloc extent found for non-regular inode %llu" ,btrfs_ino (inode));
fs/btrfs/qgroup.c +3 -1
@@ -2340,8 +2340,10 @@ qgroup_rescan_leaf(struct btrfs_fs_info *fs_info, struct btrfs_path *path, }btrfs_put_tree_mod_seq (fs_info, &tree_mod_seq_elem); -if (done && !ret) +if (done && !ret) { ret =1 ; + fs_info->qgroup_rescan_progress.objectid = (u64)-1 ; + }return ret; }
fs/btrfs/scrub.c +9 -8
@@ -919,11 +919,6 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check) have_csum = sblock_to_check->pagev[0 ]->have_csum; dev = sblock_to_check->pagev[0 ]->dev; -if (sctx->is_dev_replace && !is_metadata && !have_csum) { - sblocks_for_recheck =NULL ; - goto nodatasum_case; - } -/* * read all mirrors one after the other. This includes to * re-read the extent or metadata block that failed (that was
@@ -1036,13 +1031,19 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check) goto out; } -if (!is_metadata && !have_csum) { +/* +* NOTE: Even for nodatasum case, it's still possible that it's a +* compressed data extent, thus scrub_fixup_nodatasum(), which write +* inode page cache onto disk, could cause serious data corruption. +* +* So here we could only read from disk, and hope our recovery could +* reach disk before the newer write. +*/ +if (0 && !is_metadata && !have_csum) {struct scrub_fixup_nodatasum *fixup_nodatasum;WARN_ON (sctx->is_dev_replace); -nodatasum_case: -/* * !is_metadata and !have_csum, this means that the data * might not be COWed, that it might be modified
fs/btrfs/tests/btrfs-tests.c +7 -1
@@ -51,7 +51,13 @@ static struct file_system_type test_type = {struct inode *btrfs_new_test_inode (void ) { -return new_inode (test_mnt->mnt_sb); +struct inode *inode; + + inode =new_inode (test_mnt->mnt_sb); +if (inode) +inode_init_owner (inode,NULL ,S_IFREG ); + +return inode; }static int btrfs_init_test_fs (void )
fs/ceph/caps.c +9 -2
@@ -927,12 +927,19 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release) {struct ceph_mds_session *session = cap->session;struct ceph_inode_info *ci = cap->ci; -struct ceph_mds_client *mdsc = -ceph_sb_to_client (ci->vfs_inode.i_sb)->mdsc; +struct ceph_mds_client *mdsc;int removed =0 ; +/* 'ci' being NULL means the remove have already occurred */ +if (!ci) { +dout ("%s: cap inode is NULL\n" , __func__); +return ; + } +dout ("__ceph_remove_cap %p from %p\n" , cap, &ci->vfs_inode); + mdsc =ceph_inode_to_client (&ci->vfs_inode)->mdsc; +/* remove from inode's cap rbtree, and clear auth cap */ rb_erase (&cap->ci_node, &ci->i_caps);if (ci->i_auth_cap == cap)
fs/ext4/mballoc.c +1 -0
@@ -4650,6 +4650,7 @@ ext4_mb_free_metadata(handle_t *handle, struct ext4_buddy *e4b,ext4_group_first_block_no (sb, group) +EXT4_C2B (sbi, cluster), "Block already on to-be-freed list"); +kmem_cache_free (ext4_free_data_cachep, new_entry);return 0 ; } }
fs/jffs2/readinode.c +16 -0
@@ -672,6 +672,22 @@ static inline int read_direntry(struct jffs2_sb_info *c, struct jffs2_raw_node_rjffs2_free_full_dirent (fd);return -EIO ; } + +#ifdef CONFIG_JFFS2_SUMMARY +/* +* we use CONFIG_JFFS2_SUMMARY because without it, we +* have checked it while mounting +*/ + crc =crc32 (0 , fd->name, rd->nsize); +if (unlikely (crc !=je32_to_cpu (rd->name_crc))) { +JFFS2_NOTICE ("name CRC failed on dirent node at" +"%#08x: read %#08x,calculated %#08x\n" , +ref_offset (ref),je32_to_cpu (rd->node_crc), crc); +jffs2_mark_node_obsolete (c, ref); +jffs2_free_full_dirent (fd); +return 0 ; + } +#endif } fd->nhash =full_name_hash (NULL , fd->name, rd->nsize);
fs/jfs/jfs_dmap.h +1 -1
@@ -196,7 +196,7 @@ typedef union dmtree {#define dmt_leafidx t1.leafidx#define dmt_height t1.height#define dmt_budmin t1.budmin -#define dmt_stree t1.stree +#define dmt_stree t2.stree/* * on-disk aggregate disk allocation map descriptor.
fs/lockd/host.c +11 -9
@@ -430,12 +430,7 @@ nlm_bind_host(struct nlm_host *host)* RPC rebind is required */ if ((clnt = host->h_rpcclnt) !=NULL ) { -if (time_after_eq (jiffies, host->h_nextrebind)) { -rpc_force_rebind (clnt); - host->h_nextrebind = jiffies +NLM_HOST_REBIND ; -dprintk ("lockd: next rebind in %lu jiffies\n" , - host->h_nextrebind - jiffies); - } +nlm_rebind_host (host); }else {unsigned long increment = nlmsvc_timeout;struct rpc_timeout timeparms = {
@@ -483,13 +478,20 @@ nlm_bind_host(struct nlm_host *host)return clnt; } -/* -* Force a portmap lookup of the remote lockd port +/** +* nlm_rebind_host - If needed, force a portmap lookup of the peer's lockd port +* @host: NLM host handle for peer +* +* This is not needed when using a connection-oriented protocol, such as TCP. +* The existing autobind mechanism is sufficient to force a rebind when +* required, e.g. on connection state transitions. */ void nlm_rebind_host (struct nlm_host *host) { -dprintk ("lockd: rebind host %s\n" , host->h_name); +if (host->h_proto !=IPPROTO_UDP ) +return ; +if (host->h_rpcclnt &&time_after_eq (jiffies, host->h_nextrebind)) {rpc_force_rebind (host->h_rpcclnt); host->h_nextrebind = jiffies +NLM_HOST_REBIND ;
fs/nfs/inode.c +1 -1
@@ -1995,7 +1995,7 @@ static int nfsiod_start(void) {struct workqueue_struct *wq;dprintk ("RPC: creating workqueue nfsiod\n" ); - wq =alloc_workqueue ("nfsiod" ,WQ_MEM_RECLAIM ,0 ); + wq =alloc_workqueue ("nfsiod" ,WQ_MEM_RECLAIM |WQ_UNBOUND ,0 );if (wq ==NULL )return -ENOMEM ; nfsiod_workqueue = wq;
fs/nfs/nfs4proc.c +8 -2
@@ -4334,12 +4334,12 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, u64 cookie, struct page **pages, unsigned int count, int plus) { struct inode *dir = d_inode(dentry); +struct nfs_server *server =NFS_SERVER (dir);struct nfs4_readdir_arg args = { .fh =NFS_FH (dir), .pages = pages, .pgbase =0 , .count = count, - .bitmask =NFS_SERVER (d_inode (dentry))->attr_bitmask, .plus = plus, };struct nfs4_readdir_res res;
@@ -4354,9 +4354,15 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,dprintk ("%s: dentry = %pd2, cookie = %Lu\n" , __func__, dentry, (unsigned long long )cookie); +if (!(server->caps &NFS_CAP_SECURITY_LABEL )) + args.bitmask = server->attr_bitmask_nl; +else + args.bitmask = server->attr_bitmask; +nfs4_setup_readdir (cookie,NFS_I (dir)->cookieverf, dentry, &args); res.pgbase = args.pgbase; - status =nfs4_call_sync (NFS_SERVER (dir)->client,NFS_SERVER (dir), &msg, &args.seq_args, &res.seq_res,0 ); + status =nfs4_call_sync (server->client, server, &msg, &args.seq_args, + &res.seq_res,0 );if (status >=0 ) {memcpy (NFS_I (dir)->cookieverf, res.verifier.data,NFS4_VERIFIER_SIZE ); status += args.pgbase;
fs/nfs_common/grace.c +5 -1
@@ -75,10 +75,14 @@ __state_in_grace(struct net *net, bool open)if (!open)return !list_empty (grace_list); +spin_lock (&grace_lock);list_for_each_entry (lm, grace_list, list) { -if (lm->block_opens) +if (lm->block_opens) { +spin_unlock (&grace_lock);return true; + } } +spin_unlock (&grace_lock);return false; }
fs/nfsd/nfssvc.c +1 -2
@@ -393,8 +393,7 @@ static void nfsd_last_thread(struct svc_serv *serv, struct net *net)return ;nfsd_shutdown_net (net); -printk (KERN_WARNING "nfsd: last server has exited, flushing export " -"cache\n" ); +pr_info ("nfsd: last server has exited, flushing export cache\n" );nfsd_export_flush (net); }
include/linux/seq_buf.h +1 -1
@@ -29,7 +29,7 @@ static inline void seq_buf_clear(struct seq_buf *s) }static inline void -seq_buf_init (struct seq_buf *s,unsigned char *buf,unsigned int size) +seq_buf_init (struct seq_buf *s,char *buf,unsigned int size) { s->buffer = buf; s->size = size;
include/linux/sunrpc/xprt.h +1 -0
@@ -310,6 +310,7 @@ struct xprt_class {struct rpc_xprt * (*setup)(struct xprt_create *);struct module *owner;char name[32 ]; +const char * netid[]; };/*
include/linux/trace_seq.h +2 -2
@@ -11,7 +11,7 @@*/ struct trace_seq { -unsigned char buffer[PAGE_SIZE ]; +char buffer[PAGE_SIZE ];struct seq_buf seq;int full; };
@@ -50,7 +50,7 @@ static inline int trace_seq_used(struct trace_seq *s)* that is about to be written to and then return the result * of that write. */ -static inline unsigned char * +static inline char *trace_seq_buffer_ptr (struct trace_seq *s) {return s->buffer +seq_buf_used (&s->seq);
kernel/cpu.c +5 -1
@@ -815,6 +815,10 @@ void __unregister_cpu_notifier(struct notifier_block *nb)EXPORT_SYMBOL (__unregister_cpu_notifier);#ifdef CONFIG_HOTPLUG_CPU +#ifndef arch_clear_mm_cpumask_cpu +#define arch_clear_mm_cpumask_cpu (cpu, mm) cpumask_clear_cpu(cpu, mm_cpumask(mm)) +#endif +/** * clear_tasks_mm_cpumask - Safely clear tasks' mm_cpumask for a CPU * @cpu: a CPU id
@@ -850,7 +854,7 @@ void clear_tasks_mm_cpumask(int cpu) t =find_lock_task_mm (p);if (!t)continue ; -cpumask_clear_cpu (cpu,mm_cpumask (t->mm)); +arch_clear_mm_cpumask_cpu (cpu, t->mm);task_unlock (t); }rcu_read_unlock ();
net/bluetooth/hci_event.c +10 -7
@@ -4350,6 +4350,11 @@ static void hci_phy_link_complete_evt(struct hci_dev *hdev,return ; } +if (!hcon->amp_mgr) { +hci_dev_unlock (hdev); +return ; + } +if (ev->status) {hci_conn_del (hcon);hci_dev_unlock (hdev);
@@ -5141,20 +5146,18 @@ static void hci_le_direct_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb) {u8 num_reports = skb->data[0 ]; -void *ptr = &skb->data[1 ]; +struct hci_ev_le_direct_adv_info *ev = (void *)&skb->data[1 ]; -hci_dev_lock (hdev); +if (!num_reports || skb->len < num_reports *sizeof (*ev) +1 ) +return ; -while (num_reports--) { -struct hci_ev_le_direct_adv_info *ev = ptr; +hci_dev_lock (hdev); +for (; num_reports; num_reports--, ev++)process_adv_report (hdev, ev->evt_type, &ev->bdaddr, ev->bdaddr_type, &ev->direct_addr, ev->direct_addr_type, ev->rssi,NULL ,0 ); - ptr +=sizeof (*ev); - } -hci_dev_unlock (hdev); }
net/bridge/br_vlan.c +3 -1
@@ -238,8 +238,10 @@ static int __vlan_add(struct net_bridge_vlan *v, u16 flags) } masterv =br_vlan_get_master (br, v->vid); -if (!masterv) +if (!masterv) { + err = -ENOMEM ; goto out_filt; + } v->brvlan = masterv; v->stats = masterv->stats; }
net/ipv4/tcp_output.c +6 -3
@@ -1532,7 +1532,8 @@ static void tcp_cwnd_validate(struct sock *sk, bool is_cwnd_limited)* window, and remember whether we were cwnd-limited then. */ if (!before (tp->snd_una, tp->max_packets_seq) || - tp->packets_out > tp->max_packets_out) { + tp->packets_out > tp->max_packets_out || + is_cwnd_limited) { tp->max_packets_out = tp->packets_out; tp->max_packets_seq = tp->snd_nxt; tp->is_cwnd_limited = is_cwnd_limited;
@@ -2259,6 +2260,10 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,break ; } + is_cwnd_limited |= (tcp_packets_in_flight (tp) >= tp->snd_cwnd); +if (likely (sent_pkts || is_cwnd_limited)) +tcp_cwnd_validate (sk, is_cwnd_limited); +if (likely (sent_pkts)) {if (tcp_in_cwnd_reduction (sk)) tp->prr_out += sent_pkts;
@@ -2266,8 +2271,6 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,/* Send one loss probe per tail loss episode. */ if (push_one !=2 )tcp_schedule_loss_probe (sk); - is_cwnd_limited |= (tcp_packets_in_flight (tp) >= tp->snd_cwnd); -tcp_cwnd_validate (sk, is_cwnd_limited);return false; }return !tp->packets_out &&tcp_send_head (sk);
net/mac80211/mesh_pathtbl.c +1 -3
@@ -61,6 +61,7 @@ static struct mesh_table *mesh_table_alloc(void)INIT_HLIST_HEAD (&newtbl->known_gates);atomic_set (&newtbl->entries,0 );spin_lock_init (&newtbl->gates_lock); +rhashtable_init (&newtbl->rhead, &mesh_rht_params);return newtbl; }
@@ -849,9 +850,6 @@ int mesh_pathtbl_init(struct ieee80211_sub_if_data *sdata) goto free_path; } -rhashtable_init (&tbl_path->rhead, &mesh_rht_params); -rhashtable_init (&tbl_mpp->rhead, &mesh_rht_params); - sdata->u.mesh.mesh_paths = tbl_path; sdata->u.mesh.mpp_paths = tbl_mpp;
net/sunrpc/xprt.c +49 -16
80 lines not on this page · raw message
net/sunrpc/xprtrdma/module.c +1 -0
@@ -19,6 +19,7 @@ MODULE_DESCRIPTION("RPC/RDMA Transport");MODULE_LICENSE ("Dual BSD/GPL" );MODULE_ALIAS ("svcrdma" );MODULE_ALIAS ("xprtrdma" ); +MODULE_ALIAS ("rpcrdma6" ); static void __exit rpc_rdma_cleanup(void) {
net/sunrpc/xprtrdma/transport.c +1 -0
@@ -777,6 +777,7 @@ static struct xprt_class xprt_rdma = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_RDMA, .setup = xprt_setup_rdma, + .netid = { "rdma", "rdma6", "" }, }; void xprt_rdma_cleanup(void)
net/sunrpc/xprtsock.c +4 -0
@@ -3147,6 +3147,7 @@ static struct xprt_class xs_local_transport = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_LOCAL, .setup = xs_setup_local, + .netid = { "" }, }; static struct xprt_class xs_udp_transport = {
@@ -3155,6 +3156,7 @@ static struct xprt_class xs_udp_transport = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_UDP, .setup = xs_setup_udp, + .netid = { "udp", "udp6", "" }, }; static struct xprt_class xs_tcp_transport = {
@@ -3163,6 +3165,7 @@ static struct xprt_class xs_tcp_transport = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_TCP, .setup = xs_setup_tcp, + .netid = { "tcp", "tcp6", "" }, }; static struct xprt_class xs_bc_tcp_transport = {
@@ -3171,6 +3174,7 @@ static struct xprt_class xs_bc_tcp_transport = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_BC_TCP, .setup = xs_setup_bc_tcp, + .netid = { "" }, }; /**
net/wireless/nl80211.c +1 -1
@@ -10428,7 +10428,7 @@ static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info)struct net_device *dev = info->user_ptr[1 ];struct wireless_dev *wdev = dev->ieee80211_ptr;struct nlattr *tb[NUM_NL80211_REKEY_DATA ]; -struct cfg80211_gtk_rekey_data rekey_data; +struct cfg80211_gtk_rekey_data rekey_data = {};int err;if (!info->attrs[NL80211_ATTR_REKEY_DATA ])
scripts/checkpatch.pl +1 -1
@@ -3818,7 +3818,7 @@ sub process { $fix) { fix_delete_line($fixlinenr, $rawline); my $fixed_line = $rawline; - $fixed_line =~ /(^..*$Type\s*$Ident\(.*\)\s*){(.*)$/; + $fixed_line =~ /(^..*$Type\s*$Ident\(.*\)\s*)\{(.*)$/; my $line1 = $1; my $line2 = $2; fix_insert_line($fixlinenr, ltrim($line1));
sound/core/oss/pcm_oss.c +19 -9
@@ -719,6 +719,8 @@ static int snd_pcm_oss_period_size(struct snd_pcm_substream *substream, oss_buffer_size =snd_pcm_plug_client_size (substream,snd_pcm_hw_param_value_max (slave_params,SNDRV_PCM_HW_PARAM_BUFFER_SIZE ,NULL )) * oss_frame_size; +if (!oss_buffer_size) +return -EINVAL ; oss_buffer_size =rounddown_pow_of_two (oss_buffer_size);if (atomic_read (&substream->mmap_count)) {if (oss_buffer_size > runtime->oss.mmap_bytes)
@@ -754,17 +756,21 @@ static int snd_pcm_oss_period_size(struct snd_pcm_substream *substream, min_period_size =snd_pcm_plug_client_size (substream,snd_pcm_hw_param_value_min (slave_params,SNDRV_PCM_HW_PARAM_PERIOD_SIZE ,NULL )); - min_period_size *= oss_frame_size; - min_period_size =roundup_pow_of_two (min_period_size); -if (oss_period_size < min_period_size) - oss_period_size = min_period_size; +if (min_period_size) { + min_period_size *= oss_frame_size; + min_period_size =roundup_pow_of_two (min_period_size); +if (oss_period_size < min_period_size) + oss_period_size = min_period_size; + } max_period_size =snd_pcm_plug_client_size (substream,snd_pcm_hw_param_value_max (slave_params,SNDRV_PCM_HW_PARAM_PERIOD_SIZE ,NULL )); - max_period_size *= oss_frame_size; - max_period_size =rounddown_pow_of_two (max_period_size); -if (oss_period_size > max_period_size) - oss_period_size = max_period_size; +if (max_period_size) { + max_period_size *= oss_frame_size; + max_period_size =rounddown_pow_of_two (max_period_size); +if (oss_period_size > max_period_size) + oss_period_size = max_period_size; + } oss_periods = oss_buffer_size / oss_period_size;
@@ -2001,11 +2007,15 @@ static int snd_pcm_oss_set_subdivide(struct snd_pcm_oss_file *pcm_oss_file, intstatic int snd_pcm_oss_set_fragment1 (struct snd_pcm_substream *substream,unsigned int val) {struct snd_pcm_runtime *runtime; +int fragshift; runtime = substream->runtime;if (runtime->oss.subdivision || runtime->oss.fragshift)return -EINVAL ; - runtime->oss.fragshift = val &0xffff ; + fragshift = val &0xffff ; +if (fragshift >=31 ) +return -EINVAL ; + runtime->oss.fragshift = fragshift; runtime->oss.maxfrags = (val >>16 ) &0xffff ;if (runtime->oss.fragshift <4 )/* < 16 */ runtime->oss.fragshift =4 ;
sound/soc/codecs/wm_adsp.c +3 -2
@@ -1156,7 +1156,7 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, ctl_work =kzalloc (sizeof (*ctl_work),GFP_KERNEL );if (!ctl_work) { ret = -ENOMEM ; - goto err_ctl_cache; + goto err_list_del; } ctl_work->dsp = dsp;
@@ -1166,7 +1166,8 @@ static int wm_adsp_create_control(struct wm_adsp *dsp,return 0 ; -err_ctl_cache: +err_list_del: +list_del (&ctl->list);kfree (ctl->cache); err_ctl_name:kfree (ctl->name);
sound/soc/jz4740/jz4740-i2s.c +4 -0
@@ -315,10 +315,14 @@ static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id,switch (clk_id) {case JZ4740_I2S_CLKSRC_EXT : parent =clk_get (NULL ,"ext" );
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.