Linux 4.4.249
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.4.249 kernel.
All users of the 4.4 kernel series must upgrade.
The updated 4.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 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/kernel/head.S | 6 -- 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/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 | 3 - drivers/bus/mips_cdmm.c | 4 - drivers/clk/clk-s2mps11.c | 1 drivers/clk/ti/fapll.c | 11 +++ drivers/clocksource/arm_arch_timer.c | 23 +++++--- drivers/cpufreq/highbank-cpufreq.c | 7 ++ drivers/cpufreq/ls1x-cpufreq.c | 1 drivers/cpufreq/scpi-cpufreq.c | 1 drivers/crypto/talitos.c | 6 +- drivers/extcon/extcon-max77693.c | 2 drivers/gpu/drm/gma500/cdv_intel_dp.c | 2 drivers/gpu/drm/omapdrm/omap_dmm_tiler.c | 1 drivers/iio/adc/rockchip_saradc.c | 2 drivers/iio/pressure/mpl3115.c | 9 ++- drivers/infiniband/core/cm.c | 2 drivers/infiniband/hw/mthca/mthca_cq.c | 2 drivers/infiniband/hw/mthca/mthca_dev.h | 1 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/md/dm-ioctl.c | 1 drivers/md/dm-table.c | 6 -- 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 | 17 +++-- drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 7 ++ drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 1 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 13 +++- drivers/net/wireless/cw1200/main.c | 2 drivers/net/wireless/orinoco/orinoco_usb.c | 14 ++-- drivers/net/xen-netback/xenbus.c | 4 + drivers/nfc/s3fwrn5/firmware.c | 4 + drivers/pci/slot.c | 6 +- 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 | 3 - drivers/scsi/bnx2i/Kconfig | 1 drivers/scsi/fnic/fnic_main.c | 1 drivers/scsi/pm8001/pm8001_init.c | 3 - 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-img-spfi.c | 4 + drivers/spi/spi-rb4xx.c | 2 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/speakup/speakup_dectlk.c | 2 drivers/tty/serial/8250/8250_omap.c | 5 - drivers/usb/chipidea/ci_hdrc_imx.c | 3 - drivers/usb/core/quirks.c | 3 + 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/cp210x.c | 2 drivers/usb/serial/keyspan_pda.c | 63 +++++++++++----------- drivers/usb/serial/mos7720.c | 2 drivers/usb/serial/option.c | 23 +++++++- drivers/xen/xen-pciback/xenbus.c | 2 drivers/xen/xenbus/xenbus_client.c | 8 ++ drivers/xen/xenbus/xenbus_probe.c | 1 drivers/xen/xenbus/xenbus_probe.h | 2 drivers/xen/xenbus/xenbus_probe_backend.c | 7 ++ drivers/xen/xenbus/xenbus_xs.c | 38 ++++++++----- 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 +- include/linux/seq_buf.h | 2 include/linux/trace_seq.h | 4 - include/xen/xenbus.h | 15 ++++- net/bluetooth/hci_event.c | 17 +++-- net/bridge/br_vlan.c | 4 + net/ipv4/tcp_output.c | 9 ++- 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/format.c | 2 sound/usb/stream.c | 6 +- tools/perf/util/parse-regs-options.c | 2 128 files changed, 618 insertions(+), 252 deletions(-)
Alan Stern (1):
media: gspca: Fix memory leak in probe
Alexander Sverdlin (1):
serial: 8250_omap: Avoid FIFO corruption caused by MDR1 access
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.
Bongsu Jeon (1):
nfc: s3fwrn5: Release the nfc firmware
Brant Merryman (1):
USB: serial: cp210x: enable usb generic throttle/unthrottle
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 (2):
crypto: talitos - Fix return type of current_desc_hdr() powerpc/feature: Fix CPU_FTRS_ALWAYS by removing CPU_FTRS_GENERIC_32
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
Dan Carpenter (3):
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 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
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.4.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
Jing Xiangfeng (1):
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
Jonathan Cameron (1):
iio:pressure:mpl3115: Force alignment of buffer
Jubin Zhong (1):
PCI: Fix pci_slot_release() NULL pointer dereference
Keqian Zhu (1):
clocksource/drivers/arm_arch_timer: Correct fault programming of CNTKCTL_EL1.EVNTI
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 (4):
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: rb4xx: Don't leak SPI master in probe error path
Marek Szyprowski (1):
extcon: max77693: Fix modalias string
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.
Nicolin Chen (1):
soc/tegra: fuse: Fix index bug in get_process_id
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 (3):
cpufreq: highbank: 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
Peilin Ye (1):
Bluetooth: Fix slab-out-of-bounds read in hci_le_direct_adv_report_evt()
Qinglang Miao (6):
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
SeongJae Park (5):
xen/xenbus: Allow watches discard events before queueing xen/xenbus: Add 'will_handle' callback support in xenbus_watch_path() xen/xenbus/xen_bus_type: Support will_handle watch callback xen/xenbus: Count pending messages for each watch xenbus/xenbus_backend: Disallow pending watch messages
Simon Beginn (1):
Input: goodix - add upside-down quirk for Teclast X98 Pro tablet
Stefan Haberland (2):
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 (4):
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
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
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 (1):
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 (1):
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 (12):
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
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
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 248 +SUBLEVEL = 249 EXTRAVERSION = NAME = Blurry Fish Butt
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/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/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
@@ -400,7 +400,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 | \
@@ -479,8 +478,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 |
@@ -530,8 +527,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
@@ -2020,6 +2020,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/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
@@ -1014,6 +1014,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
@@ -506,7 +506,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 +2 -1
@@ -553,7 +553,8 @@ static int xen_blkbk_probe(struct xenbus_device *dev,/* setup back pointer */ be->blkif->be = be; - err =xenbus_watch_pathfmt (dev, &be->backend_watch, backend_changed, + err =xenbus_watch_pathfmt (dev, &be->backend_watch,NULL , + backend_changed,"%s/%s" , dev->nodename,"physical-device" );if (err) goto fail;
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
@@ -263,6 +263,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/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
@@ -310,15 +310,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/cpufreq/highbank-cpufreq.c +7 -0
@@ -104,6 +104,13 @@ out_put_node: }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/ls1x-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 ("Loongson 1 CPUFreq driver" );MODULE_LICENSE ("GPL" );
drivers/cpufreq/scpi-cpufreq.c +1 -0
@@ -119,6 +119,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/crypto/talitos.c +3 -3
@@ -440,7 +440,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;
@@ -471,13 +471,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
@@ -1262,4 +1262,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/gma500/cdv_intel_dp.c +1 -1
@@ -2125,7 +2125,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
@@ -720,6 +720,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/iio/adc/rockchip_saradc.c +1 -1
@@ -359,7 +359,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/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; }
@@ -1681,6 +1682,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/mthca/mthca_cq.c +1 -1
@@ -612,7 +612,7 @@ static inline int mthca_poll_one(struct mthca_dev *dev, entry->opcode =IB_WC_BIND_MW ;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/input/keyboard/cros_ec_keyb.c +1 -0
@@ -137,6 +137,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
@@ -546,12 +546,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
@@ -77,6 +77,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/md/dm-ioctl.c +1 -0
@@ -1539,6 +1539,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
@@ -1154,12 +1154,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/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
@@ -2130,6 +2130,7 @@ out: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
@@ -1254,7 +1254,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
@@ -763,8 +763,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);
@@ -791,12 +793,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
@@ -853,13 +853,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);
@@ -916,6 +916,8 @@ out_release_sram: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:
@@ -934,6 +936,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
@@ -3518,8 +3518,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 +11 -6
@@ -1313,8 +1313,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); + } }
@@ -1730,6 +1732,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);
@@ -1891,7 +1894,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;
@@ -2121,7 +2124,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 {
@@ -2130,7 +2133,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);
@@ -2850,7 +2855,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
@@ -495,6 +495,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;
@@ -560,7 +564,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;
@@ -605,6 +609,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
@@ -2506,6 +2506,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/stmmac_main.c +10 -3
@@ -1897,9 +1897,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);
@@ -1920,6 +1917,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);
@@ -3068,6 +3070,11 @@ int stmmac_suspend(struct net_device *ndev)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/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/net/wireless/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/xen-netback/xenbus.c +3 -1
@@ -697,12 +697,14 @@ static int xen_register_watchers(struct xenbus_device *dev, struct xenvif *vif)return -ENOMEM ;snprintf (node, maxlen,"%s/rate" , dev->nodename); vif->credit_watch.node = node; + vif->credit_watch.will_handle =NULL ; vif->credit_watch.callback = xen_net_rate_changed; err =register_xenbus_watch (&vif->credit_watch);if (err) {pr_err ("Failed to set watcher %s\n" , vif->credit_watch.node);kfree (node); vif->credit_watch.node =NULL ; + vif->credit_watch.will_handle =NULL ; vif->credit_watch.callback =NULL ; }return err;
@@ -847,7 +849,7 @@ static void connect(struct backend_info *be)xenvif_carrier_on (be->vif);unregister_hotplug_status_watch (be); - err =xenbus_watch_pathfmt (dev, &be->hotplug_status_watch, + err =xenbus_watch_pathfmt (dev, &be->hotplug_status_watch,NULL , hotplug_status_changed,"%s/%s" , dev->nodename,"hotplug-status" );if (!err)
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 @@ placeholder: 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 @@ placeholder: 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/pinctrl-amd.c +0 -7
@@ -399,7 +399,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 ;
@@ -407,7 +406,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 ;
@@ -415,7 +413,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 ;
@@ -423,8 +420,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 ;
@@ -432,8 +427,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 +2 -1
@@ -258,7 +258,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);
@@ -285,6 +284,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)) {
@@ -637,6 +637,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 (&lcu->lock);
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/pm8001/pm8001_init.c +2 -1
@@ -1063,7 +1063,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/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
@@ -706,4 +706,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
@@ -381,7 +381,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 ;
@@ -411,30 +411,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 */
@@ -467,8 +464,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-img-spfi.c +3 -1
@@ -773,8 +773,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-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-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
@@ -159,6 +159,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
@@ -418,6 +418,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
@@ -496,7 +502,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;
@@ -525,6 +530,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];
@@ -1962,6 +1974,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) {
@@ -1981,6 +1997,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/speakup/speakup_dectlk.c +1 -1
@@ -51,7 +51,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
@@ -155,11 +155,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/usb/chipidea/ci_hdrc_imx.c +2 -1
@@ -58,7 +58,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_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
@@ -2741,7 +2741,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
@@ -3741,8 +3741,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
@@ -1400,6 +1400,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/cp210x.c +2 -0
@@ -252,6 +252,8 @@ static struct usb_serial_driver cp210x_device = { .close = cp210x_close, .break_ctl = cp210x_break_ctl, .set_termios = cp210x_set_termios, + .throttle = usb_serial_generic_throttle, + .unthrottle = usb_serial_generic_unthrottle, .tiocmget = cp210x_tiocmget, .tiocmset = cp210x_tiocmset, .attach = cp210x_startup,
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/xen/xen-pciback/xenbus.c +1 -1
@@ -691,7 +691,7 @@ static int xen_pcibk_xenbus_probe(struct xenbus_device *dev,/* watch the backend node for backend configuration information */ err =xenbus_watch_path (dev, dev->nodename, &pdev->be_watch, - xen_pcibk_be_watch); +NULL , xen_pcibk_be_watch);if (err) goto out;
drivers/xen/xenbus/xenbus_client.c +7 -1
@@ -114,18 +114,22 @@ EXPORT_SYMBOL_GPL(xenbus_strstate);*/ int xenbus_watch_path (struct xenbus_device *dev,const char *path,struct xenbus_watch *watch, +bool (*will_handle)(struct xenbus_watch *, +const char **,unsigned int ),void (*callback)(struct xenbus_watch *,const char **,unsigned int )) {int err; watch->node = path; + watch->will_handle = will_handle; watch->callback = callback; err =register_xenbus_watch (watch);if (err) { watch->node =NULL ; + watch->will_handle =NULL ; watch->callback =NULL ;xenbus_dev_fatal (dev, err,"adding watch on %s" , path); }
@@ -152,6 +156,8 @@ EXPORT_SYMBOL_GPL(xenbus_watch_path);*/ int xenbus_watch_pathfmt (struct xenbus_device *dev,struct xenbus_watch *watch, +bool (*will_handle)(struct xenbus_watch *, +const char **,unsigned int ),void (*callback)(struct xenbus_watch *,const char **,unsigned int ),const char *pathfmt, ...)
@@ -168,7 +174,7 @@ int xenbus_watch_pathfmt(struct xenbus_device *dev,xenbus_dev_fatal (dev, -ENOMEM ,"allocating path for watch" );return -ENOMEM ; } - err =xenbus_watch_path (dev, path, watch, callback); + err =xenbus_watch_path (dev, path, watch, will_handle, callback);if (err)kfree (path);
drivers/xen/xenbus/xenbus_probe.c +1 -0
@@ -137,6 +137,7 @@ static int watch_otherend(struct xenbus_device *dev) container_of(dev->dev.bus, struct xen_bus_type, bus);return xenbus_watch_pathfmt (dev, &dev->otherend_watch, + bus->otherend_will_handle, bus->otherend_changed,"%s/%s" , dev->otherend,"state" ); }
drivers/xen/xenbus/xenbus_probe.h +2 -0
@@ -42,6 +42,8 @@ struct xen_bus_type {int (*get_bus_id)(char bus_id[XEN_BUS_ID_SIZE ],const char *nodename);int (*probe)(struct xen_bus_type *bus,const char *type,const char *dir); +bool (*otherend_will_handle)(struct xenbus_watch *watch, +const char **vec,unsigned int len);void (*otherend_changed)(struct xenbus_watch *watch,const char **vec,unsigned int len);struct bus_type bus;
drivers/xen/xenbus/xenbus_probe_backend.c +7 -0
@@ -181,6 +181,12 @@ static int xenbus_probe_backend(struct xen_bus_type *bus, const char *type,return err; } +static bool frontend_will_handle (struct xenbus_watch *watch, +const char **vec,unsigned int len) +{ +return watch->nr_pending ==0 ; +} +static void frontend_changed (struct xenbus_watch *watch,const char **vec,unsigned int len) {
@@ -192,6 +198,7 @@ static struct xen_bus_type xenbus_backend = { .levels = 3, /* backend/type/<frontend>/<id> */ .get_bus_id = backend_bus_id, .probe = xenbus_probe_backend, + .otherend_will_handle = frontend_will_handle, .otherend_changed = frontend_changed, .bus = { .name = "xen-backend",
drivers/xen/xenbus/xenbus_xs.c +25 -13
@@ -701,6 +701,8 @@ int register_xenbus_watch(struct xenbus_watch *watch)sprintf (token,"%lX" , (long )watch); + watch->nr_pending =0 ; +down_read (&xs_state.watch_mutex);spin_lock (&watches_lock);
@@ -750,12 +752,15 @@ void unregister_xenbus_watch(struct xenbus_watch *watch)/* Cancel pending watch events. */ spin_lock (&watch_events_lock); -list_for_each_entry_safe (msg, tmp, &watch_events, list) { -if (msg->u.watch.handle != watch) -continue ; -list_del (&msg->list); -kfree (msg->u.watch.vec); -kfree (msg); +if (watch->nr_pending) { +list_for_each_entry_safe (msg, tmp, &watch_events, list) { +if (msg->u.watch.handle != watch) +continue ; +list_del (&msg->list); +kfree (msg->u.watch.vec); +kfree (msg); + } + watch->nr_pending =0 ; }spin_unlock (&watch_events_lock);
@@ -802,7 +807,6 @@ void xs_suspend_cancel(void)static int xenwatch_thread (void *unused) { -struct list_head *ent;struct xs_stored_msg *msg;for (;;) {
@@ -815,13 +819,15 @@ static int xenwatch_thread(void *unused)mutex_lock (&xenwatch_mutex);spin_lock (&watch_events_lock); - ent = watch_events.next; -if (ent != &watch_events) -list_del (ent); + msg =list_first_entry_or_null (&watch_events, + struct xs_stored_msg, list); +if (msg) { +list_del (&msg->list); + msg->u.watch.handle->nr_pending--; + }spin_unlock (&watch_events_lock); -if (ent != &watch_events) { - msg = list_entry(ent, struct xs_stored_msg, list); +if (msg) { msg->u.watch.handle->callback( msg->u.watch.handle, (const char **)msg->u.watch.vec,
@@ -903,9 +909,15 @@ static int process_msg(void)spin_lock (&watches_lock); msg->u.watch.handle =find_watch ( msg->u.watch.vec[XS_WATCH_TOKEN ]); -if (msg->u.watch.handle !=NULL ) { +if (msg->u.watch.handle !=NULL && + (!msg->u.watch.handle->will_handle || + msg->u.watch.handle->will_handle ( + msg->u.watch.handle, + (const char **)msg->u.watch.vec, + msg->u.watch.vec_size))) {spin_lock (&watch_events_lock);list_add_tail (&msg->list, &watch_events); + msg->u.watch.handle->nr_pending++;wake_up (&watch_events_waitq);spin_unlock (&watch_events_lock); }else {
fs/btrfs/inode.c +1 -1
@@ -6923,7 +6923,7 @@ again: 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
@@ -2288,8 +2288,10 @@ out: }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
@@ -918,11 +918,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
@@ -1035,13 +1030,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 COW'ed, that it might be modified
fs/btrfs/tests/btrfs-tests.c +7 -1
@@ -48,7 +48,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; }int btrfs_init_test_fs (void )
fs/ceph/caps.c +9 -2
@@ -920,12 +920,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
@@ -4646,6 +4646,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 (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
@@ -1964,7 +1964,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
@@ -4047,12 +4047,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;
@@ -4067,9 +4067,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; }
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/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);
include/xen/xenbus.h +14 -1
@@ -58,6 +58,15 @@ struct xenbus_watch/* Path being watched. */ const char *node; +unsigned int nr_pending; + +/* +* Called just before enqueing new event while a spinlock is held. +* The event will be discarded if this callback returns false. +*/ +bool (*will_handle)(struct xenbus_watch *, +const char **vec,unsigned int len); +/* Callback (executed in a process context with no locks held). */ void (*callback)(struct xenbus_watch *,const char **vec,unsigned int len);
@@ -194,10 +203,14 @@ void xenbus_suspend_cancel(void);int xenbus_watch_path (struct xenbus_device *dev,const char *path,struct xenbus_watch *watch, +bool (*will_handle)(struct xenbus_watch *, +const char **,unsigned int ),void (*callback)(struct xenbus_watch *,const char **,unsigned int )); -__printf(4, 5) +__printf(5, 6)int xenbus_watch_pathfmt (struct xenbus_device *dev,struct xenbus_watch *watch, +bool (*will_handle)(struct xenbus_watch *, +const char **,unsigned int ),void (*callback)(struct xenbus_watch *,const char **,unsigned int ),const char *pathfmt, ...);
net/bluetooth/hci_event.c +10 -7
@@ -4336,6 +4336,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);
@@ -5114,20 +5119,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
@@ -225,8 +225,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; }
net/ipv4/tcp_output.c +6 -3
@@ -1501,7 +1501,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;
@@ -2172,6 +2173,10 @@ repair: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;
@@ -2179,8 +2184,6 @@ repair:/* 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/wireless/nl80211.c +1 -1
@@ -9836,7 +9836,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
@@ -3580,7 +3580,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
@@ -718,6 +718,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)
@@ -753,17 +755,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;
@@ -2000,11 +2006,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
@@ -852,7 +852,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;
@@ -862,7 +862,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" ); +if (IS_ERR (parent)) +return PTR_ERR (parent);clk_set_parent (i2s->clk_i2s, parent);break ;case JZ4740_I2S_CLKSRC_PLL : parent =clk_get (NULL ,"pll half" ); +if (IS_ERR (parent)) +return PTR_ERR (parent);clk_set_parent (i2s->clk_i2s, parent); ret =clk_set_rate (i2s->clk_i2s, freq);break ;
sound/soc/soc-pcm.c +2 -0
@@ -2075,6 +2075,7 @@ static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd)case SNDRV_PCM_TRIGGER_START :case SNDRV_PCM_TRIGGER_RESUME :case SNDRV_PCM_TRIGGER_PAUSE_RELEASE : +case SNDRV_PCM_TRIGGER_DRAIN : ret =dpcm_dai_trigger_fe_be (substream, cmd, true);break ;case SNDRV_PCM_TRIGGER_STOP :
@@ -2092,6 +2093,7 @@ static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd)case SNDRV_PCM_TRIGGER_START :case SNDRV_PCM_TRIGGER_RESUME :case SNDRV_PCM_TRIGGER_PAUSE_RELEASE : +case SNDRV_PCM_TRIGGER_DRAIN : ret =dpcm_dai_trigger_fe_be (substream, cmd, false);break ;case SNDRV_PCM_TRIGGER_STOP :
sound/usb/format.c +2 -0
@@ -52,6 +52,8 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip,case UAC_VERSION_1 :default : {struct uac_format_type_i_discrete_descriptor *fmt = _fmt; +if (format >=64 ) +return 0 ;/* invalid format */ sample_width = fmt->bBitResolution; sample_bytes = fmt->bSubframeSize; format =1 << format;
sound/usb/stream.c +3 -3
@@ -187,16 +187,16 @@ static int usb_chmap_ctl_get(struct snd_kcontrol *kcontrol,struct snd_pcm_chmap *info =snd_kcontrol_chip (kcontrol);struct snd_usb_substream *subs = info->private_data;struct snd_pcm_chmap_elem *chmap =NULL ; -int i; +int i =0 ; -memset (ucontrol->value.integer.value,0 , -sizeof (ucontrol->value.integer.value));if (subs->cur_audiofmt) chmap = subs->cur_audiofmt->chmap;if (chmap) {for (i =0 ; i < chmap->channels; i++) ucontrol->value.integer.value[i] = chmap->map[i]; } +for (; i < subs->channels_max; i++) + ucontrol->value.integer.value[i] =0 ;return 0 ; }
tools/perf/util/parse-regs-options.c +1 -1
@@ -40,7 +40,7 @@ parse_regs(const struct option *opt, const char *str, int unset) }fputc ('\n' , stderr);/* just printing available regs */ -return -1 ; + goto error; }for (r = sample_reg_masks; r->name; r++) {if (!strcasecmp (s, r->name))