Linux 4.9.228
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.9.228 kernel.
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/display/mediatek/mediatek,dpi.txt | 6 Documentation/virtual/kvm/api.txt | 2 Makefile | 15 arch/arm/kernel/ptrace.c | 4 arch/arm/mach-tegra/tegra.c | 4 arch/arm/mm/proc-macros.S | 3 arch/arm64/include/asm/kvm_host.h | 6 arch/m68k/include/asm/mac_via.h | 1 arch/m68k/mac/config.c | 21 arch/m68k/mac/via.c | 6 arch/mips/Makefile | 13 arch/mips/boot/compressed/Makefile | 2 arch/mips/include/asm/kvm_host.h | 6 arch/mips/kernel/genex.S | 6 arch/mips/kernel/mips-cm.c | 6 arch/mips/kernel/setup.c | 10 arch/mips/kernel/time.c | 70 +++ arch/mips/kernel/vmlinux.lds.S | 2 arch/powerpc/platforms/cell/spufs/file.c | 113 +++- arch/sparc/kernel/ptrace_32.c | 228 ++++------ arch/sparc/kernel/ptrace_64.c | 17 arch/x86/boot/compressed/head_32.S | 5 arch/x86/boot/compressed/head_64.S | 1 arch/x86/include/asm/cpufeatures.h | 2 arch/x86/include/asm/nospec-branch.h | 1 arch/x86/kernel/cpu/bugs.c | 94 ++-- arch/x86/kernel/process.c | 28 - arch/x86/kernel/process.h | 2 arch/x86/kernel/reboot.c | 8 arch/x86/kernel/time.c | 4 arch/x86/kernel/vmlinux.lds.S | 4 arch/x86/kvm/svm.c | 2 arch/x86/kvm/vmx.c | 2 arch/x86/mm/init.c | 2 arch/x86/pci/fixup.c | 4 block/blk-mq.c | 8 drivers/acpi/cppc_acpi.c | 4 drivers/acpi/device_pm.c | 2 drivers/acpi/evged.c | 22 drivers/acpi/scan.c | 28 - drivers/acpi/sysfs.c | 4 drivers/char/agp/intel-gtt.c | 4 drivers/clocksource/dw_apb_timer_of.c | 6 drivers/cpuidle/sysfs.c | 6 drivers/crypto/talitos.c | 2 drivers/firmware/efi/efivars.c | 4 drivers/macintosh/windfarm_pm112.c | 22 drivers/md/md.c | 3 drivers/media/dvb-core/dvb_frontend.c | 2 drivers/media/platform/rcar-fcp.c | 5 drivers/media/tuners/si2157.c | 15 drivers/media/usb/dvb-usb/dibusb-mb.c | 2 drivers/media/usb/go7007/snd-go7007.c | 35 - drivers/mmc/host/sdhci-esdhc-imx.c | 2 drivers/mtd/nand/brcmnand/brcmnand.c | 11 drivers/mtd/nand/pasemi_nand.c | 4 drivers/net/can/usb/kvaser_usb.c | 6 drivers/net/ethernet/allwinner/sun4i-emac.c | 4 drivers/net/ethernet/amazon/ena/ena_com.c | 6 drivers/net/ethernet/ibm/ibmvnic.c | 8 drivers/net/ethernet/intel/e1000/e1000_main.c | 4 drivers/net/ethernet/intel/e1000e/e1000.h | 1 drivers/net/ethernet/intel/e1000e/netdev.c | 12 drivers/net/ethernet/intel/igb/igb_ethtool.c | 3 drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 2 drivers/net/ethernet/nxp/lpc_eth.c | 3 drivers/net/macvlan.c | 4 drivers/net/vmxnet3/vmxnet3_ethtool.c | 2 drivers/net/vxlan.c | 4 drivers/net/wireless/ath/ath9k/hif_usb.c | 58 +- drivers/net/wireless/ath/ath9k/hif_usb.h | 6 drivers/net/wireless/ath/ath9k/htc_drv_init.c | 10 drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 6 drivers/net/wireless/ath/ath9k/htc_hst.c | 3 drivers/net/wireless/ath/ath9k/wmi.c | 5 drivers/net/wireless/ath/ath9k/wmi.h | 3 drivers/net/wireless/ath/carl9170/fw.c | 4 drivers/net/wireless/ath/carl9170/main.c | 21 drivers/net/wireless/broadcom/b43/main.c | 2 drivers/net/wireless/broadcom/b43legacy/main.c | 1 drivers/net/wireless/broadcom/b43legacy/xmit.c | 1 drivers/net/wireless/marvell/mwifiex/cfg80211.c | 14 drivers/net/wireless/realtek/rtlwifi/usb.c | 8 drivers/pci/probe.c | 24 - drivers/pinctrl/samsung/pinctrl-exynos.c | 9 drivers/power/reset/vexpress-poweroff.c | 1 drivers/scsi/scsi_lib.c | 4 drivers/spi/spi-bcm-qspi.c | 8 drivers/spi/spi-bcm2835.c | 4 drivers/spi/spi-bcm2835aux.c | 4 drivers/spi/spi-dw-mid.c | 16 drivers/spi/spi-dw.c | 14 drivers/spi/spi-pxa2xx.c | 4 drivers/spi/spi.c | 5 drivers/staging/android/ion/ion_heap.c | 4 drivers/staging/greybus/sdio.c | 10 drivers/video/fbdev/w100fb.c | 2 drivers/w1/masters/omap_hdq.c | 10 fs/btrfs/file-item.c | 6 fs/btrfs/inode.c | 6 fs/btrfs/send.c | 67 ++ fs/ext4/ext4_extents.h | 9 fs/ext4/fsync.c | 28 - fs/fat/inode.c | 6 fs/fs-writeback.c | 1 fs/nilfs2/segment.c | 2 fs/overlayfs/copy_up.c | 2 fs/proc/inode.c | 2 fs/proc/self.c | 2 fs/proc/thread_self.c | 2 include/linux/kgdb.h | 2 include/linux/sunrpc/gss_api.h | 1 include/linux/sunrpc/svcauth_gss.h | 3 include/uapi/linux/dvb/frontend.h | 1 include/uapi/linux/kvm.h | 2 kernel/cpu_pm.c | 4 kernel/debug/debug_core.c | 1 kernel/events/core.c | 23 - kernel/exit.c | 25 - kernel/sched/fair.c | 2 lib/mpi/longlong.h | 2 mm/huge_memory.c | 31 + mm/slub.c | 4 net/bluetooth/hci_event.c | 1 net/ipv6/ipv6_sockglue.c | 13 net/netfilter/nft_nat.c | 4 net/sunrpc/auth_gss/gss_mech_switch.c | 12 net/sunrpc/auth_gss/svcauth_gss.c | 18 security/integrity/evm/evm_crypto.c | 2 security/integrity/ima/ima.h | 7 security/integrity/ima/ima_policy.c | 3 security/smack/smackfs.c | 10 sound/core/pcm_native.c | 5 sound/isa/es1688/es1688.c | 4 sound/usb/card.c | 20 sound/usb/usbaudio.h | 2 tools/objtool/check.c | 6 tools/perf/builtin-probe.c | 3 tools/perf/util/dso.c | 16 tools/perf/util/dso.h | 1 tools/perf/util/probe-finder.c | 1 tools/perf/util/symbol.c | 2 142 files changed, 1010 insertions(+), 565 deletions(-)
Adrian Hunter (1):
perf symbols: Fix debuginfo search for Ubuntu
Al Viro (2):
sparc32: fix register window handling in genregs32_[gs]et()
sparc64: fix misuses of access_process_vm() in genregs32_[sg]et()
Alexander Sverdlin (1):
macvlan: Skip loopback packets in RX handler
Anders Roxell (1):
power: vexpress: add suppress_bind_attrs to true
Andrea Arcangeli (1):
mm: thp: make the THP mapcount atomic against __split_huge_pmd_locked()
Andy Shevchenko (2):
spi: No need to assign dummy value in spi_unregister_controller()
spi: dw: Zero DMA Tx and Rx configurations on stack
Anthony Steinhauser (3):
x86/speculation: Prevent rogue cross-process SSBD shutdown x86/speculation: Avoid force-disabling IBPB based on STIBP and enhanced IBRS. x86/speculation: PR_SPEC_FORCE_DISABLE enforcement for indirect branches.
Ard Biesheuvel (3):
efi/efivars: Add missing kobject_put() in sysfs entry creation error path
ACPI: GED: add support for _Exx / _Lxx handler methods
ACPI: GED: use correct trigger type field in _Exx / _Lxx handling
Arthur Kiyanovski (1):
net: ena: fix error returning in ena_com_get_hash_function()
Arvind Sankar (2):
x86/boot: Correct relocation destination on old linkers x86/mm: Stop printing BRK addresses
Ashok Raj (1):
PCI: Program MPS for RCiEP devices
Barret Rhoden (1):
perf: Add cond_resched() to task_function_call()
Bob Haarman (1):
x86_64: Fix jiffies ODR violation
Brad Love (1):
media: si2157: Better check for running tuner in init
Casey Schaufler (1):
Smack: slab-out-of-bounds in vsscanf
Chris Wilson (1):
agp/intel: Reinforce the barrier after GTT updates
Christian Lamparter (1):
carl9170: remove P2P_GO support
Christoph Hellwig (1):
staging: android: ion: use vmap instead of vm_map_ram
Christophe JAILLET (1):
video: fbdev: w100fb: Fix a potential double free.
Chuhong Yuan (2):
ALSA: es1688: Add the missed snd_card_free()
media: go7007: fix a miss of snd_card_free
Colin Ian King (2):
media: dvb_frontend: ensure that inital front end status initialized
media: dvb: return -EREMOTEIO on i2c transfer failure.
Dan Carpenter (1):
rtlwifi: Fix a double free in _rtl_usb_tx_urb_setup()
Daniel Thompson (1):
kgdb: Fix spurious true from in_dbg_master()
Dmitry Osipenko (1):
ARM: tegra: Correct PL310 Auxiliary Control Register initialization
Douglas Anderson (2):
kgdb: Prevent infinite recursive entries to the debugger kernel/cpu_pm: Fix uninitted local in cpu_pm
Eric Biggers (1):
ext4: fix race between ext4_sync_parent() and rename()
Eric W. Biederman (1):
proc: Use new_inode not new_inode_pseudo
Filipe Manana (1):
btrfs: do not ignore error from btrfs_next_leaf() when inserting checksums
Finn Thain (1):
m68k: mac: Don't call via_flush_cache() on Mac IIfx
Fredrik Strupe (1):
ARM: 8977/1: ptrace: Fix mask for thumb breakpoint hook
Giuliano Procida (1):
blk-mq: move blk_mq_update_nr_hw_queues synchronize_rcu call
Greg Kroah-Hartman (1):
Linux 4.9.228
Guoqing Jiang (1):
md: don't flush workqueue unconditionally in md_open
H. Nikolaus Schaller (1):
w1: omap-hdq: cleanup to add missing newline for some dev_dbg
Haibo Chen (1):
mmc: sdhci-esdhc-imx: fix the mask for tuning start point
Hangbin Liu (1):
ipv6: fix IPV6_ADDRFORM operation logic
Harshad Shirwadkar (1):
ext4: fix EXT_MAX_EXTENT/INDEX to check for zeroed eh_max
Hill Ma (1):
x86/reboot/quirks: Add MacBook6,1 reboot quirk
Hsin-Yu Chao (1):
Bluetooth: Add SCO fallback for invalid LMP parameters error
Ido Schimmel (1):
vxlan: Avoid infinite loop when suppressing NS messages with invalid options
Jann Horn (1):
exit: Move preemption fixup up, move blocking operations down
Jens Axboe (1):
sched/fair: Don't NUMA balance for kthreads
Jeremy Kerr (1):
powerpc/spufs: fix copy_to_user while atomic
Jia-Ju Bai (1):
net: vmxnet3: fix possible buffer overflow caused by bad DMA value in vmxnet3_get_rss()
Jiaxun Yang (2):
MIPS: Truncate link address into 32bit for 32bit kernel
PCI: Don't disable decoding when mmio_always_on is set
Jitao Shi (1):
dt-bindings: display: mediatek: control dpi pins mode to avoid leakage
Johannes Thumshirn (1):
scsi: return correct blkprep status code in case scsi_init_io() fails.
Jon Doron (1):
x86/kvm/hyper-v: Explicitly align hcall param for kvm_hyperv_exit
Jonathan Bakker (1):
pinctrl: samsung: Save/restore eint_mask over suspend for EINT_TYPE GPIOs
Julien Thierry (1):
objtool: Ignore empty alternatives
Justin Chen (1):
spi: bcm-qspi: when tx/rx buffer is NULL set to 0
Kai-Heng Feng (1):
igb: Report speed and duplex as unknown when device is runtime suspended
Kees Cook (1):
e1000: Distribute switch variables for initialization
Kieran Bingham (1):
media: platform: fcp: Set appropriate DMA parameters
Krzysztof Struczynski (1):
ima: Fix ima digest hash table key calculation
Larry Finger (3):
b43legacy: Fix case where channel status is corrupted
b43: Fix connection problem with WPA3
b43_legacy: Fix connection problem with WPA3
Linus Walleij (1):
ARM: 8978/1: mm: make act_mm() respect THREAD_SIZE
Lukas Wunner (5):
spi: bcm2835aux: Fix controller unregister order
spi: dw: Fix controller unregister order
spi: Fix controller unregister order
spi: pxa2xx: Fix controller unregister order
spi: bcm2835: Fix controller unregister order
Marc Zyngier (1):
KVM: arm64: Make vcpu_cp1x() work on Big Endian hosts
Marcos Paulo de Souza (1):
btrfs: send: emit file capabilities after chown
Masahiro Yamada (1):
kbuild: force to build vmlinux if CONFIG_MODVERSION=y
Masami Hiramatsu (1):
perf probe: Do not show the skipped events
Masashi Honma (1):
ath9k_htc: Silence undersized packet warnings
Michael Ellerman (1):
drivers/macintosh: Fix memleak in windfarm_pm112 driver
Michał Mirosław (1):
ALSA: pcm: disallow linking stream to itself
Miquel Raynal (1):
mtd: rawnand: pasemi: Fix the probe error path
Nathan Chancellor (1):
lib/mpi: Fix 64-bit MIPS build with Clang
NeilBrown (2):
sunrpc: svcauth_gss_register_pseudoflavor must reject duplicate registrations.
sunrpc: clean up properly in gss_mech_unregister()
OGAWA Hirofumi (1):
fat: don't allow to mount if the FAT length == 0
Omar Sandoval (1):
btrfs: fix error handling when submitting direct I/O bio
Pablo Neira Ayuso (1):
netfilter: nft_nat: return EOPNOTSUPP if type or flags are not supported
Pali Rohár (1):
mwifiex: Fix memory corruption in dump_station
Paolo Bonzini (1):
KVM: nSVM: leave ASID aside in copy_vmcb_control_area
Punit Agrawal (1):
e1000e: Relax condition to trigger reset for ME workaround
Qiujun Huang (4):
ath9k: Fix use-after-free Read in ath9k_wmi_ctrl_rx
ath9k: Fix use-after-free Write in ath9k_htc_rx_msg
ath9x: Fix stack-out-of-bounds Write in ath9k_hif_usb_rx_cb
ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb
Qiushi Wu (3):
ACPI: sysfs: Fix reference count leak in acpi_sysfs_add_hotplug_profile()
ACPI: CPPC: Fix reference count leak in acpi_cppc_processor_probe()
cpuidle: Fix three reference count leaks
Rafael J. Wysocki (1):
ACPI: PM: Avoid using power resources if there are none for D0
Roberto Sassu (2):
ima: Directly assign the ima_default_policy pointer to ima_rules
evm: Fix possible memory leak in evm_calc_hmac_or_hash()
Ryusuke Konishi (1):
nilfs2: fix null pointer dereference at nilfs_segctor_do_construct()
Sasha Levin (1):
spi: dw: fix possible race condition
Sean Christopherson (1):
KVM: nVMX: Consult only the "basic" exit reason when routing nested exit
Serge Semin (5):
spi: dw: Enable interrupts in accordance with DMA xfer mode
clocksource: dw_apb_timer_of: Fix missing clockevent timers
mips: cm: Fix an invalid error code of INTVN_*_ERR
mips: Add udelay lpj numbers adjustment
spi: dw: Return any value retrieved from the dma_transfer callback
Su Kang Yin (1):
crypto: talitos - fix ECB and CBC algs ivsize
Takashi Iwai (1):
ALSA: usb-audio: Fix inconsistent card PM state after resume
Tejun Heo (1):
cgroup, blkcg: Prepare some symbols for module and !CONFIG_CGROUP usages
Thomas Falcon (1):
drivers/net/ibmvnic: Update VNIC protocol version reporting
Thomas Lendacky (1):
x86/speculation: Add support for STIBP always-on preferred mode
Tiezhu Yang (1):
MIPS: Make sparse_init() using top-down allocation
Ulf Hansson (1):
staging: greybus: sdio: Respect the cmd->busy_timeout from the mmc core
Waiman Long (1):
x86/speculation: Change misspelled STIPB to STIBP
Wang Hai (1):
mm/slub: fix a memory leak in sysfs_slab_add()
Wei Yongjun (1):
net: lpc-enet: fix error return code in lpc_mii_init()
Xiaochun Lee (1):
x86/PCI: Mark Intel C620 MROMs as having non-compliant BARs
Xiaolong Huang (1):
can: kvaser_usb: kvaser_usb_leaf: Fix some info-leaks to USB devices
Xie XiuQi (1):
ixgbe: fix signed-integer-overflow warning
Xing Li (2):
KVM: MIPS: Define KVM_ENTRYHI_ASID to cpu_asid_mask(&boot_cpu_data)
KVM: MIPS: Fix VPN2_MASK definition for variable cpu_vmbits
YuanJunQing (1):
MIPS: Fix IRQ tracing when call handle_fpe() and handle_msa_fpe()
Yunjian Wang (1):
net: allwinner: Fix use correct return type for ndo_start_xmit()
Yuxuan Shui (1):
ovl: initialize error in ovl_copy_xattr
Álvaro Fernández Rojas (1):
mtd: rawnand: brcmnand: fix hamming oob layout
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/display/mediatek/mediatek,dpi.txt +6 -0
@@ -16,6 +16,9 @@ Required properties: Documentation/devicetree/bindings/graph.txt. This port should be connected to the input port of an attached HDMI or LVDS encoder chip. +Optional properties: +- pinctrl-names: Contain "default" and "sleep". + Example: dpi0: dpi@1401d000 {
@@ -26,6 +29,9 @@ dpi0: dpi@1401d000 { <&mmsys CLK_MM_DPI_ENGINE>, <&apmixedsys CLK_APMIXED_TVDPLL>; clock-names = "pixel", "engine", "pll"; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&dpi_pin_func>; + pinctrl-1 = <&dpi_pin_idle>; port { dpi0_out: endpoint {
Documentation/virtual/kvm/api.txt +2 -0
@@ -3534,9 +3534,11 @@ EOI was received. #define KVM_EXIT_HYPERV_SYNIC 1 #define KVM_EXIT_HYPERV_HCALL 2 __u32 type; + __u32 pad1; union { struct { __u32 msr; + __u32 pad2; __u64 control; __u64 evt_page; __u64 msg_page;
Makefile +9 -6
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 227 +SUBLEVEL = 228 EXTRAVERSION = NAME = Roaring Lionus
@@ -313,12 +313,8 @@ KBUILD_MODULES := KBUILD_BUILTIN := 1 # If we have only "make modules", don't compile built-in objects. -# When we're building modules with modversions, we need to consider -# the built-in objects during the descend as well, in order to -# make sure the checksums are up to date before we record them. - ifeq ($(MAKECMDGOALS),modules) - KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) + KBUILD_BUILTIN := endif # If we have "make <whatever> modules", compile modules
@@ -1237,6 +1233,13 @@ ifdef CONFIG_MODULES all: modules +# When we're building modules with modversions, we need to consider +# the built-in objects during the descend as well, in order to +# make sure the checksums are up to date before we record them. +ifdef CONFIG_MODVERSIONS + KBUILD_BUILTIN := 1 +endif + # Build modules # # A module can be listed more than once in obj-m resulting in
arch/arm/kernel/ptrace.c +2 -2
@@ -227,8 +227,8 @@ static struct undef_hook arm_break_hook = { };static struct undef_hook thumb_break_hook = { - .instr_mask =0xffff , - .instr_val =0xde01 , + .instr_mask =0xffffffff , + .instr_val =0x0000de01 , .cpsr_mask =PSR_T_BIT , .cpsr_val =PSR_T_BIT , .fn = break_trap,
arch/arm/mach-tegra/tegra.c +2 -2
@@ -137,8 +137,8 @@ static const char * const tegra_dt_board_compat[] = { };DT_MACHINE_START (TEGRA_DT ,"NVIDIA Tegra SoC (Flattened Device Tree)" ) - .l2c_aux_val = 0x3c400001, - .l2c_aux_mask = 0xc20fc3fe, + .l2c_aux_val = 0x3c400000, + .l2c_aux_mask = 0xc20fc3ff, .smp = smp_ops(tegra_smp_ops), .map_io = tegra_map_common_io, .init_early = tegra_init_early,
arch/arm/mm/proc-macros.S +2 -1
@@ -4,6 +4,7 @@ * VMA_VM_FLAGS * VM_EXEC */ +#include <linux/const.h> #include <asm/asm-offsets.h> #include <asm/thread_info.h>
@@ -34,7 +35,7 @@ * act_mm - get current->active_mm */ .macro act_mm, rd - bic \rd, sp, #8128 + bic \rd, sp, #(THREAD_SIZE - 1) & ~63 bic \rd, \rd, #63 ldr \rd, [\rd, #TI_TASK] ldr \rd, [\rd, #TSK_ACTIVE_MM]
arch/arm64/include/asm/kvm_host.h +4 -2
@@ -290,8 +290,10 @@ struct kvm_vcpu_arch {* CP14 and CP15 live in the same array, as they are backed by the * same system registers. */ -#define vcpu_cp14 (v,r) ((v)->arch.ctxt.copro[(r)]) -#define vcpu_cp15 (v,r) ((v)->arch.ctxt.copro[(r)]) +#define CPx_BIAS IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) + +#define vcpu_cp14 (v,r) ((v)->arch.ctxt.copro[(r) ^ CPx_BIAS]) +#define vcpu_cp15 (v,r) ((v)->arch.ctxt.copro[(r) ^ CPx_BIAS])#ifdef CONFIG_CPU_BIG_ENDIAN #define vcpu_cp15_64_high (v,r) vcpu_cp15((v),(r))
arch/m68k/include/asm/mac_via.h +1 -0
@@ -256,6 +256,7 @@ extern int rbv_present,via_alt_mapping;struct irq_desc ; +extern void via_l2_flush (int writeback);extern void via_register_interrupts (void );extern void via_irq_enable (int );extern void via_irq_disable (int );
arch/m68k/mac/config.c +2 -19
@@ -61,7 +61,6 @@ extern void iop_preinit(void);extern void iop_init (void );extern void via_init (void );extern void via_init_clock (irq_handler_t func); -extern void via_flush_cache (void );extern void oss_init (void );extern void psc_init (void );extern void baboon_init (void );
@@ -132,21 +131,6 @@ int __init mac_parse_bootinfo(const struct bi_record *record)return unknown; } -/* -* Flip into 24bit mode for an instant - flushes the L2 cache card. We -* have to disable interrupts for this. Our IRQ handlers will crap -* themselves if they take an IRQ in 24bit mode! -*/ - -static void mac_cache_card_flush (int writeback) -{ -unsigned long flags; - -local_irq_save (flags); -via_flush_cache (); -local_irq_restore (flags); -} -void __init config_mac (void ) {if (!MACH_IS_MAC )
@@ -179,9 +163,8 @@ void __init config_mac(void)* not. */ -if (macintosh_config->ident ==MAC_MODEL_IICI - || macintosh_config->ident ==MAC_MODEL_IIFX ) - mach_l2_flush = mac_cache_card_flush; +if (macintosh_config->ident ==MAC_MODEL_IICI ) + mach_l2_flush = via_l2_flush; }
arch/m68k/mac/via.c +5 -1
@@ -299,10 +299,14 @@ void via_debug_dump(void)* the system into 24-bit mode for an instant. */ -void via_flush_cache (void ) +void via_l2_flush (int writeback) { +unsigned long flags; + +local_irq_save (flags); via2[gBufB] &= ~VIA2B_vMode32; via2[gBufB] |= VIA2B_vMode32; +local_irq_restore (flags); }/*
arch/mips/Makefile +12 -1
@@ -256,12 +256,23 @@ ifdef CONFIG_64BIT endif endif +# When linking a 32-bit executable the LLVM linker cannot cope with a +# 32-bit load address that has been sign-extended to 64 bits. Simply +# remove the upper 32 bits then, as it is safe to do so with other +# linkers. +ifdef CONFIG_64BIT + load-ld = $(load-y) +else + load-ld = $(subst 0xffffffff,0x,$(load-y)) +endif + KBUILD_AFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y) -KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y) +KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y) -DLINKER_LOAD_ADDRESS=$(load-ld) KBUILD_CPPFLAGS += -DDATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0) bootvars-y = VMLINUX_LOAD_ADDRESS=$(load-y) \ + LINKER_LOAD_ADDRESS=$(load-ld) \ VMLINUX_ENTRY_ADDRESS=$(entry-y) \ PLATFORM="$(platform-y)" ifdef CONFIG_32BIT
arch/mips/boot/compressed/Makefile +1 -1
@@ -87,7 +87,7 @@ ifneq ($(zload-y),) VMLINUZ_LOAD_ADDRESS := $(zload-y) else VMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \ - $(obj)/vmlinux.bin $(VMLINUX_LOAD_ADDRESS)) + $(obj)/vmlinux.bin $(LINKER_LOAD_ADDRESS)) endif vmlinuzobjs-y += $(obj)/piggy.o
arch/mips/include/asm/kvm_host.h +5 -1
@@ -243,8 +243,12 @@ enum emulation_result {#define MIPS3_PG_SHIFT 6#define MIPS3_PG_FRAME 0x3fffffc0 +#if defined(CONFIG_64BIT ) +#define VPN2_MASK GENMASK(cpu_vmbits - 1, 13) +#else #define VPN2_MASK 0xffffe000 -#define KVM_ENTRYHI_ASID MIPS_ENTRYHI_ASID +#endif +#define KVM_ENTRYHI_ASID cpu_asid_mask(&boot_cpu_data)#define TLB_IS_GLOBAL (x) ((x).tlb_lo[0] & (x).tlb_lo[1] & ENTRYLO_G)#define TLB_VPN2 (x) ((x).tlb_hi & VPN2_MASK)#define TLB_ASID (x) ((x).tlb_hi & KVM_ENTRYHI_ASID)
arch/mips/kernel/genex.S +3 -3
@@ -429,20 +429,20 @@ NESTED(nmi_handler, PT_SIZE, sp) .endm .macro __build_clear_fpe + CLI + TRACE_IRQS_OFF .set push /* gas fails to assemble cfc1 for some archs (octeon).*/ \ .set mips1 SET_HARDFLOAT cfc1 a1, fcr31 .set pop - CLI - TRACE_IRQS_OFF .endm .macro __build_clear_msa_fpe - _cfcmsa a1, MSA_CSR CLI TRACE_IRQS_OFF + _cfcmsa a1, MSA_CSR .endm .macro __build_clear_ade
arch/mips/kernel/mips-cm.c +3 -3
@@ -123,9 +123,9 @@ static char *cm2_causes[32] = {"COH_RD_ERR" ,"MMIO_WR_ERR" ,"MMIO_RD_ERR" ,"0x07" ,"0x08" ,"0x09" ,"0x0a" ,"0x0b" ,"0x0c" ,"0x0d" ,"0x0e" ,"0x0f" , -"0x10" ,"0x11" ,"0x12" ,"0x13" , -"0x14" ,"0x15" ,"0x16" ,"INTVN_WR_ERR" , -"INTVN_RD_ERR" ,"0x19" ,"0x1a" ,"0x1b" , +"0x10" ,"INTVN_WR_ERR" ,"INTVN_RD_ERR" ,"0x13" , +"0x14" ,"0x15" ,"0x16" ,"0x17" , +"0x18" ,"0x19" ,"0x1a" ,"0x1b" ,"0x1c" ,"0x1d" ,"0x1e" ,"0x1f" };
arch/mips/kernel/setup.c +10 -0
@@ -847,7 +847,17 @@ static void __init arch_mem_init(char **cmdline_p) BOOTMEM_DEFAULT);#endif device_tree_init (); + +/* +* In order to reduce the possibility of kernel panic when failed to +* get IO TLB memory under CONFIG_SWIOTLB, it is better to allocate +* low memory as small as possible before plat_swiotlb_setup(), so +* make sparse_init() using top-down allocation. +*/ +memblock_set_bottom_up (false);sparse_init (); +memblock_set_bottom_up (true); +plat_swiotlb_setup ();dma_contiguous_reserve (PFN_PHYS (max_low_pfn));
arch/mips/kernel/time.c +70 -0
82 lines not on this page · raw message
arch/mips/kernel/vmlinux.lds.S +1 -1
@@ -49,7 +49,7 @@ SECTIONS /* . = 0xa800000000300000; */ . = 0xffffffff80300000; #endif - . = VMLINUX_LOAD_ADDRESS; + . = LINKER_LOAD_ADDRESS; /* read-only */ _text = .; /* Text and read-only data */ .text : {
arch/powerpc/platforms/cell/spufs/file.c +75 -38
234 lines not on this page · raw message
arch/sparc/kernel/ptrace_32.c +98 -130
262 lines not on this page · raw message
arch/sparc/kernel/ptrace_64.c +3 -14
@@ -533,19 +533,13 @@ static int genregs32_get(struct task_struct *target,for (; count >0 && pos <32 ; count--) {if (access_process_vm (target, (unsigned long ) - ®_window[pos], + ®_window[pos++], ®,sizeof (reg),FOLL_FORCE ) !=sizeof (reg))return -EFAULT ; -if (access_process_vm (target, - (unsigned long ) u, - ®,sizeof (reg), -FOLL_FORCE |FOLL_WRITE ) - !=sizeof (reg)) +if (put_user (reg, u++))return -EFAULT ; - pos++; - u++; } } }
@@ -645,12 +639,7 @@ static int genregs32_set(struct task_struct *target, } }else {for (; count >0 && pos <32 ; count--) { -if (access_process_vm (target, - (unsigned long ) - u, - ®,sizeof (reg), -FOLL_FORCE ) - !=sizeof (reg)) +if (get_user (reg, u++))return -EFAULT ; if (access_process_vm(target, (unsigned long)
arch/x86/boot/compressed/head_32.S +3 -2
@@ -48,16 +48,17 @@ * Position Independent Executable (PIE) so that linker won't optimize * R_386_GOT32X relocation to its fixed symbol address. Older * linkers generate R_386_32 relocations against locally defined symbols, - * _bss, _ebss, _got and _egot, in PIE. It isn't wrong, just less + * _bss, _ebss, _got, _egot and _end, in PIE. It isn't wrong, just less * optimal than R_386_RELATIVE. But the x86 kernel fails to properly handle * R_386_32 relocations when relocating the kernel. To generate - * R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as + * R_386_RELATIVE relocations, we mark _bss, _ebss, _got, _egot and _end as * hidden: */ .hidden _bss .hidden _ebss .hidden _got .hidden _egot + .hidden _end __HEAD ENTRY(startup_32)
arch/x86/boot/compressed/head_64.S +1 -0
@@ -40,6 +40,7 @@ .hidden _ebss .hidden _got .hidden _egot + .hidden _end __HEAD .code32
arch/x86/include/asm/cpufeatures.h +1 -1
@@ -273,6 +273,7 @@#define X86_FEATURE_AMD_IBPB (13*32+12)/* "" Indirect Branch Prediction Barrier */ #define X86_FEATURE_AMD_IBRS (13*32+14)/* "" Indirect Branch Restricted Speculation */ #define X86_FEATURE_AMD_STIBP (13*32+15)/* "" Single Thread Indirect Branch Predictors */ +#define X86_FEATURE_AMD_STIBP_ALWAYS_ON (13*32+17)/* "" Single Thread Indirect Branch Predictors always-on preferred */ #define X86_FEATURE_AMD_SSBD (13*32+24)/* "" Speculative Store Bypass Disable */ #define X86_FEATURE_VIRT_SSBD (13*32+25)/* Virtualized Speculative Store Bypass Disable */ #define X86_FEATURE_AMD_SSB_NO (13*32+26)/* "" Speculative Store Bypass is fixed in hardware. */
@@ -312,7 +313,6 @@#define X86_FEATURE_SUCCOR (17*32+1)/* Uncorrectable error containment and recovery */ #define X86_FEATURE_SMCA (17*32+3)/* Scalable MCA */ -/* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */ #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2)/* AVX-512 Neural Network Instructions */ #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3)/* AVX-512 Multiply Accumulation Single precision */
arch/x86/include/asm/nospec-branch.h +1 -0
@@ -223,6 +223,7 @@ enum spectre_v2_mitigation {enum spectre_v2_user_mitigation {SPECTRE_V2_USER_NONE ,SPECTRE_V2_USER_STRICT , +SPECTRE_V2_USER_STRICT_PREFERRED ,SPECTRE_V2_USER_PRCTL ,SPECTRE_V2_USER_SECCOMP , };
arch/x86/kernel/cpu/bugs.c +63 -31
181 lines not on this page · raw message
arch/x86/kernel/process.c +10 -18
@@ -337,28 +337,20 @@ static __always_inline void __speculation_ctrl_update(unsigned long tifp,u64 msr = x86_spec_ctrl_base;bool updmsr = false; -/* -* If TIF_SSBD is different, select the proper mitigation -* method. Note that if SSBD mitigation is disabled or permanentely -* enabled this branch can't be taken because nothing can set -* TIF_SSBD. -*/ -if (tif_diff & _TIF_SSBD) { -if (static_cpu_has (X86_FEATURE_VIRT_SSBD )) { +/* Handle change of TIF_SSBD depending on the mitigation method. */ +if (static_cpu_has (X86_FEATURE_VIRT_SSBD )) { +if (tif_diff & _TIF_SSBD)amd_set_ssb_virt_state (tifn); - }else if (static_cpu_has (X86_FEATURE_LS_CFG_SSBD )) { + }else if (static_cpu_has (X86_FEATURE_LS_CFG_SSBD )) { +if (tif_diff & _TIF_SSBD)amd_set_core_ssb_state (tifn); - }else if (static_cpu_has (X86_FEATURE_SPEC_CTRL_SSBD ) || -static_cpu_has (X86_FEATURE_AMD_SSBD )) { - msr |=ssbd_tif_to_spec_ctrl (tifn); - updmsr = true; - } + }else if (static_cpu_has (X86_FEATURE_SPEC_CTRL_SSBD ) || +static_cpu_has (X86_FEATURE_AMD_SSBD )) { + updmsr |= !!(tif_diff & _TIF_SSBD); + msr |=ssbd_tif_to_spec_ctrl (tifn); } -/* -* Only evaluate TIF_SPEC_IB if conditional STIBP is enabled, -* otherwise avoid the MSR write. -*/ +/* Only evaluate TIF_SPEC_IB if conditional STIBP is enabled. */ if (IS_ENABLED (CONFIG_SMP ) &&static_branch_unlikely (&switch_to_cond_stibp)) { updmsr |= !!(tif_diff & _TIF_SPEC_IB);
arch/x86/kernel/process.h +1 -1
@@ -19,7 +19,7 @@ static inline void switch_to_extra(struct task_struct *prev,if (IS_ENABLED (CONFIG_SMP )) {/* * Avoid __switch_to_xtra() invocation when conditional -* STIPB is disabled and the only different bit is +* STIBP is disabled and the only different bit is * TIF_SPEC_IB. For CONFIG_SMP=n TIF_SPEC_IB is not * in the TIF_WORK_CTXSW masks. */
arch/x86/kernel/reboot.c +8 -0
@@ -198,6 +198,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5"), }, }, + { /* Handle problems with rebooting on Apple MacBook6,1 */ + .callback = set_pci_reboot, + .ident = "Apple MacBook6,1", + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Apple Inc." ), + DMI_MATCH(DMI_PRODUCT_NAME, "MacBook6,1"), + }, + }, { /* Handle problems with rebooting on Apple MacBookPro5 */ .callback = set_pci_reboot, .ident = "Apple MacBookPro5",
arch/x86/kernel/time.c +0 -4
@@ -23,10 +23,6 @@#include <asm/hpet.h> #include <asm/time.h> -#ifdef CONFIG_X86_64 -__visible volatile unsigned long jiffies __cacheline_aligned_in_smp = INITIAL_JIFFIES; -#endif -unsigned long profile_pc (struct pt_regs *regs) {unsigned long pc =instruction_pointer (regs);
arch/x86/kernel/vmlinux.lds.S +2 -2
@@ -34,13 +34,13 @@ OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT) #ifdef CONFIG_X86_32 OUTPUT_ARCH(i386) ENTRY(phys_startup_32) -jiffies = jiffies_64; #else OUTPUT_ARCH(i386:x86-64) ENTRY(phys_startup_64) -jiffies_64 = jiffies; #endif +jiffies = jiffies_64; + #if defined(CONFIG_X86_64) /* * On 64-bit, align RODATA to 2MB so we retain large page mappings for
arch/x86/kvm/svm.c +1 -1
@@ -2734,7 +2734,7 @@ static inline void copy_vmcb_control_area(struct vmcb *dst_vmcb, struct vmcb *fr dst->iopm_base_pa = from->iopm_base_pa; dst->msrpm_base_pa = from->msrpm_base_pa; dst->tsc_offset = from->tsc_offset; - dst->asid = from->asid; +/* asid not copied, it is handled manually for svm->vmcb. */ dst->tlb_ctl = from->tlb_ctl; dst->int_ctl = from->int_ctl; dst->int_vector = from->int_vector;
arch/x86/kvm/vmx.c +1 -1
@@ -8207,7 +8207,7 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu)return true; } -switch (exit_reason) { +switch ((u16 )exit_reason) {case EXIT_REASON_EXCEPTION_NMI :if (is_nmi (intr_info))return false;
arch/x86/mm/init.c +0 -2
@@ -110,8 +110,6 @@ __ref void *alloc_low_pages(unsigned int num) }else { pfn = pgt_buf_end; pgt_buf_end += num; -printk (KERN_DEBUG "BRK [%#010lx, %#010lx] PGTABLE\n" , - pfn <<PAGE_SHIFT , (pgt_buf_end <<PAGE_SHIFT ) -1 ); }for (i =0 ; i < num; i++) {
arch/x86/pci/fixup.c +4 -0
@@ -571,6 +571,10 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2fc0, pci_invalid_bar);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x6f60 , pci_invalid_bar);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x6fa0 , pci_invalid_bar);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0x6fc0 , pci_invalid_bar); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0xa1ec , pci_invalid_bar); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0xa1ed , pci_invalid_bar); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0xa26c , pci_invalid_bar); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_INTEL ,0xa26d , pci_invalid_bar);/* * Device [1022:7914]
block/blk-mq.c +4 -4
@@ -2331,6 +2331,10 @@ void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues)list_for_each_entry (q, &set->tag_list, tag_set_list)blk_mq_freeze_queue (q); +/* +* Sync with blk_mq_queue_tag_busy_iter. +*/ +synchronize_rcu (); set->nr_hw_queues = nr_hw_queues;list_for_each_entry (q, &set->tag_list, tag_set_list) {
@@ -2346,10 +2350,6 @@ void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues)list_for_each_entry (q, &set->tag_list, tag_set_list)blk_mq_unfreeze_queue (q); -/* -* Sync with blk_mq_queue_tag_busy_iter. -*/ -synchronize_rcu (); }EXPORT_SYMBOL_GPL (blk_mq_update_nr_hw_queues);
drivers/acpi/cppc_acpi.c +3 -1
@@ -793,8 +793,10 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr) ret =kobject_init_and_add (&cpc_ptr->kobj, &cppc_ktype, &cpu_dev->kobj,"acpi_cppc" ); -if (ret) +if (ret) { +kobject_put (&cpc_ptr->kobj); goto out_free; + }kfree (output.pointer);return 0 ;
drivers/acpi/device_pm.c +1 -1
@@ -171,7 +171,7 @@ int acpi_device_set_power(struct acpi_device *device, int state)* possibly drop references to the power resources in use. */ state =ACPI_STATE_D3_HOT ; -/* If _PR3 is not available, use D3hot as the target state. */ +/* If D3cold is not supported, use D3hot as the target state. */ if (!device->power.states[ACPI_STATE_D3_COLD ].flags.valid) target_state = state; }else if (!device->power.states[state].flags.valid) {
drivers/acpi/evged.c +19 -3
@@ -82,6 +82,8 @@ static acpi_status acpi_ged_request_interrupt(struct acpi_resource *ares,struct resource r;struct acpi_resource_irq *p = &ares->data.irq;struct acpi_resource_extended_irq *pext = &ares->data.extended_irq; +char ev_name[5 ]; +u8 trigger;if (ares->type ==ACPI_RESOURCE_TYPE_END_TAG )return AE_OK ;
@@ -90,14 +92,28 @@ static acpi_status acpi_ged_request_interrupt(struct acpi_resource *ares,dev_err (dev,"unable to parse IRQ resource\n" );return AE_ERROR ; } -if (ares->type ==ACPI_RESOURCE_TYPE_IRQ ) +if (ares->type ==ACPI_RESOURCE_TYPE_IRQ ) { gsi = p->interrupts[0 ]; -else + trigger = p->triggering; + }else { gsi = pext->interrupts[0 ]; + trigger = pext->triggering; + } irq = r.start; -if (ACPI_FAILURE (acpi_get_handle (handle,"_EVT" , &evt_handle))) { +switch (gsi) { + case 0 ... 255: +sprintf (ev_name,"_%c%02hhX" , + trigger ==ACPI_EDGE_SENSITIVE ?'E' :'L' , gsi); + +if (ACPI_SUCCESS (acpi_get_handle (handle, ev_name, &evt_handle))) +break ; +/* fall through */ +default : +if (ACPI_SUCCESS (acpi_get_handle (handle,"_EVT" , &evt_handle))) +break ; +dev_err (dev,"cannot locate _EVT method\n" );return AE_ERROR ; }
drivers/acpi/scan.c +19 -9
@@ -927,12 +927,9 @@ static void acpi_bus_init_power_state(struct acpi_device *device, int state)if (buffer.length && package && package->type ==ACPI_TYPE_PACKAGE - && package->package.count) { -int err =acpi_extract_power_resources (package,0 , - &ps->resources); -if (!err) - device->power.flags.power_resources =1 ; - } + && package->package.count) +acpi_extract_power_resources (package,0 , &ps->resources); +ACPI_FREE (buffer.pointer); }
@@ -979,14 +976,27 @@ static void acpi_bus_get_power_flags(struct acpi_device *device)acpi_bus_init_power_state (device, i);INIT_LIST_HEAD (&device->power.states[ACPI_STATE_D3_COLD ].resources); -if (!list_empty (&device->power.states[ACPI_STATE_D3_HOT ].resources)) - device->power.states[ACPI_STATE_D3_COLD ].flags.valid =1 ; -/* Set defaults for D0 and D3hot states (always valid) */ +/* Set the defaults for D0 and D3hot (always supported). */ device->power.states[ACPI_STATE_D0 ].flags.valid =1 ; device->power.states[ACPI_STATE_D0 ].power =100 ; device->power.states[ACPI_STATE_D3_HOT ].flags.valid =1 ; +/* +* Use power resources only if the D0 list of them is populated, because +* some platforms may provide _PR3 only to indicate D3cold support and +* in those cases the power resources list returned by it may be bogus. +*/ +if (!list_empty (&device->power.states[ACPI_STATE_D0 ].resources)) { + device->power.flags.power_resources =1 ; +/* +* D3cold is supported if the D3hot list of power resources is +* not empty. +*/ +if (!list_empty (&device->power.states[ACPI_STATE_D3_HOT ].resources)) + device->power.states[ACPI_STATE_D3_COLD ].flags.valid =1 ; + } +if (acpi_bus_init_power (device)) device->flags.power_manageable =0 ; }
drivers/acpi/sysfs.c +3 -1
@@ -898,8 +898,10 @@ void acpi_sysfs_add_hotplug_profile(struct acpi_hotplug_profile *hotplug, error =kobject_init_and_add (&hotplug->kobj, &acpi_hotplug_profile_ktype, hotplug_kobj,"%s" , name); -if (error) +if (error) { +kobject_put (&hotplug->kobj); goto err_out; + }kobject_uevent (&hotplug->kobj,KOBJ_ADD );return ;
drivers/char/agp/intel-gtt.c +3 -1
@@ -845,6 +845,7 @@ void intel_gtt_insert_page(dma_addr_t addr, unsigned int flags) { intel_private.driver->write_entry (addr, pg, flags); +readl (intel_private.gtt + pg);if (intel_private.driver->chipset_flush) intel_private.driver->chipset_flush (); }
@@ -870,7 +871,7 @@ void intel_gtt_insert_sg_entries(struct sg_table *st, j++; } } -wmb (); +readl (intel_private.gtt + j -1 );if (intel_private.driver->chipset_flush) intel_private.driver->chipset_flush (); }
@@ -1104,6 +1105,7 @@ static void i9xx_cleanup(void)static void i9xx_chipset_flush (void ) { +wmb ();if (intel_private.i9xx_flush_page)writel (1 , intel_private.i9xx_flush_page); }
drivers/clocksource/dw_apb_timer_of.c +2 -4
@@ -146,10 +146,6 @@ static int num_called;static int __init dw_apb_timer_init (struct device_node *timer) {switch (num_called) { -case 0 : -pr_debug ("%s: found clockevent timer\n" , __func__); -add_clockevent (timer); -break ;case 1 :pr_debug ("%s: found clocksource timer\n" , __func__);add_clocksource (timer);
@@ -160,6 +156,8 @@ static int __init dw_apb_timer_init(struct device_node *timer)#endif break ;default : +pr_debug ("%s: found clockevent timer\n" , __func__); +add_clockevent (timer);break ; }
drivers/cpuidle/sysfs.c +3 -3
@@ -412,7 +412,7 @@ static int cpuidle_add_state_sysfs(struct cpuidle_device *device) ret =kobject_init_and_add (&kobj->kobj, &ktype_state_cpuidle, &kdev->kobj,"state%d" , i);if (ret) { -kfree (kobj); +kobject_put (&kobj->kobj); goto error_state; }kobject_uevent (&kobj->kobj,KOBJ_ADD );
@@ -542,7 +542,7 @@ static int cpuidle_add_driver_sysfs(struct cpuidle_device *dev) ret =kobject_init_and_add (&kdrv->kobj, &ktype_driver_cpuidle, &kdev->kobj,"driver" );if (ret) { -kfree (kdrv); +kobject_put (&kdrv->kobj);return ret; }
@@ -636,7 +636,7 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev) error =kobject_init_and_add (&kdev->kobj, &ktype_cpuidle, &cpu_dev->kobj,"cpuidle" );if (error) { -kfree (kdev); +kobject_put (&kdev->kobj);return error; }
drivers/crypto/talitos.c +1 -1
@@ -2636,7 +2636,6 @@ static struct talitos_alg_template driver_algs[] = { .cra_ablkcipher = { .min_keysize = AES_MIN_KEY_SIZE, .max_keysize = AES_MAX_KEY_SIZE, - .ivsize = AES_BLOCK_SIZE, } }, .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
@@ -2670,6 +2669,7 @@ static struct talitos_alg_template driver_algs[] = { .cra_ablkcipher = { .min_keysize = AES_MIN_KEY_SIZE, .max_keysize = AES_MAX_KEY_SIZE, + .ivsize = AES_BLOCK_SIZE, .setkey = ablkcipher_aes_setkey, } },
drivers/firmware/efi/efivars.c +3 -1
@@ -586,8 +586,10 @@ efivar_create_sysfs_entry(struct efivar_entry *new_var) ret =kobject_init_and_add (&new_var->kobj, &efivar_ktype,NULL ,"%s" , short_name);kfree (short_name); -if (ret) +if (ret) { +kobject_put (&new_var->kobj);return ret; + }kobject_uevent (&new_var->kobj,KOBJ_ADD );if (efivar_entry_add (new_var, &efivar_sysfs_list)) {
drivers/macintosh/windfarm_pm112.c +14 -8
@@ -13,6 +13,7 @@#include <linux/device.h> #include <linux/platform_device.h> #include <linux/reboot.h> +#include <linux/slab.h> #include <asm/prom.h> #include <asm/smu.h>
@@ -133,14 +134,6 @@ static int create_cpu_loop(int cpu)s32 tmax;int fmin; -/* Get PID params from the appropriate SAT */ - hdr =smu_sat_get_sdb_partition (chip,0xC8 + core,NULL ); -if (hdr ==NULL ) { -printk (KERN_WARNING "windfarm: can't get CPU PID fan config\n" ); -return -EINVAL ; - } - piddata = (struct smu_sdbp_cpupiddata *)&hdr[1 ]; -/* Get FVT params to get Tmax; if not found, assume default */ hdr =smu_sat_get_sdb_partition (chip,0xC4 + core,NULL );if (hdr) {
@@ -153,6 +146,16 @@ static int create_cpu_loop(int cpu)if (tmax < cpu_all_tmax) cpu_all_tmax = tmax; +kfree (hdr); + +/* Get PID params from the appropriate SAT */ + hdr =smu_sat_get_sdb_partition (chip,0xC8 + core,NULL ); +if (hdr ==NULL ) { +printk (KERN_WARNING "windfarm: can't get CPU PID fan config\n" ); +return -EINVAL ; + } + piddata = (struct smu_sdbp_cpupiddata *)&hdr[1 ]; +/* * Darwin has a minimum fan speed of 1000 rpm for the 4-way and * 515 for the 2-way. That appears to be overkill, so for now,
@@ -175,6 +178,9 @@ static int create_cpu_loop(int cpu) pid.min = fmin;wf_cpu_pid_init (&cpu_pid[cpu], &pid); + +kfree (hdr); +return 0 ; }
drivers/md/md.c +2 -1
@@ -7101,7 +7101,8 @@ static int md_open(struct block_device *bdev, fmode_t mode)*/ mddev_put (mddev);/* Wait until bdev->bd_disk is definitely gone */ -flush_workqueue (md_misc_wq); +if (work_pending (&mddev->del_work)) +flush_workqueue (md_misc_wq);/* Then retry the open from the top */ return -ERESTARTSYS ; }
drivers/media/dvb-core/dvb_frontend.c +1 -1
@@ -629,7 +629,7 @@ static int dvb_frontend_thread(void *data)struct dvb_frontend *fe = data;struct dtv_frontend_properties *c = &fe->dtv_property_cache;struct dvb_frontend_private *fepriv = fe->frontend_priv; -enum fe_status s; +enum fe_status s =FE_NONE ;enum dvbfe_algo algo;bool re_tune = false;bool semheld = false;
drivers/media/platform/rcar-fcp.c +5 -0
@@ -12,6 +12,7 @@*/ #include <linux/device.h> +#include <linux/dma-mapping.h> #include <linux/list.h> #include <linux/module.h> #include <linux/mutex.h>
@@ -24,6 +25,7 @@struct rcar_fcp_device {struct list_head list;struct device *dev; +struct device_dma_parameters dma_parms; };static LIST_HEAD (fcp_devices);
@@ -140,6 +142,9 @@ static int rcar_fcp_probe(struct platform_device *pdev) fcp->dev = &pdev->dev; + fcp->dev->dma_parms = &fcp->dma_parms; +dma_set_max_seg_size (fcp->dev,DMA_BIT_MASK (32 )); +pm_runtime_enable (&pdev->dev);mutex_lock (&fcp_lock);
drivers/media/tuners/si2157.c +7 -8
@@ -84,24 +84,23 @@ static int si2157_init(struct dvb_frontend *fe)struct si2157_cmd cmd;const struct firmware *fw;const char *fw_name; -unsigned int uitmp, chip_id; +unsigned int chip_id, xtal_trim;dev_dbg (&client->dev,"\n" ); -/* Returned IF frequency is garbage when firmware is not running */ -memcpy (cmd.args,"\x15\x00\x06\x07" ,4 ); +/* Try to get Xtal trim property, to verify tuner still running */ +memcpy (cmd.args,"\x15\x00\x04\x02" ,4 ); cmd.wlen =4 ; cmd.rlen =4 ; ret =si2157_cmd_execute (client, &cmd); -if (ret) - goto err; - uitmp = cmd.args[2 ] <<0 | cmd.args[3 ] <<8 ; -dev_dbg (&client->dev,"if_frequency kHz=%u\n" , uitmp); + xtal_trim = cmd.args[2 ] | (cmd.args[3 ] <<8 ); -if (uitmp == dev->if_frequency /1000 ) +if (ret ==0 && xtal_trim <16 ) goto warm; + dev->if_frequency =0 ;/* we no longer know current tuner state */ +/* power up */ if (dev->chiptype ==SI2157_CHIPTYPE_SI2146 ) {memcpy (cmd.args,"\xc0\x05\x01\x00\x00\x0b\x00\x00\x01" ,9 );
drivers/media/usb/dvb-usb/dibusb-mb.c +1 -1
@@ -84,7 +84,7 @@ static int dibusb_tuner_probe_and_attach(struct dvb_usb_adapter *adap)if (i2c_transfer (&adap->dev->i2c_adap, msg,2 ) !=2 ) {err ("tuner i2c write failed." ); - ret = -EREMOTEIO ; +return -EREMOTEIO ; }if (adap->fe_adap[0 ].fe->ops.i2c_gate_ctrl)
drivers/media/usb/go7007/snd-go7007.c +17 -18
@@ -243,22 +243,18 @@ int go7007_snd_init(struct go7007 *go) gosnd->capturing =0 ; ret =snd_card_new (go->dev, index[dev], id[dev],THIS_MODULE ,0 , &gosnd->card); -if (ret <0 ) { -kfree (gosnd); -return ret; - } +if (ret <0 ) + goto free_snd; + ret =snd_device_new (gosnd->card,SNDRV_DEV_LOWLEVEL , go, &go7007_snd_device_ops); -if (ret <0 ) { -kfree (gosnd); -return ret; - } +if (ret <0 ) + goto free_card; + ret =snd_pcm_new (gosnd->card,"go7007" ,0 ,0 ,1 , &gosnd->pcm); -if (ret <0 ) { -snd_card_free (gosnd->card); -kfree (gosnd); -return ret; - } +if (ret <0 ) + goto free_card; +strlcpy (gosnd->card->driver,"go7007" ,sizeof (gosnd->card->driver));strlcpy (gosnd->card->shortname, go->name,sizeof (gosnd->card->driver)); strlcpy(gosnd->card->longname, gosnd->card->shortname,
@@ -269,11 +265,8 @@ int go7007_snd_init(struct go7007 *go) &go7007_snd_capture_ops); ret =snd_card_register (gosnd->card); -if (ret <0 ) { -snd_card_free (gosnd->card); -kfree (gosnd); -return ret; - } +if (ret <0 ) + goto free_card; gosnd->substream =NULL ; go->snd_context = gosnd;
@@ -281,6 +274,12 @@ int go7007_snd_init(struct go7007 *go) ++dev;return 0 ; + +free_card: +snd_card_free (gosnd->card); +free_snd: +kfree (gosnd); +return ret; }EXPORT_SYMBOL (go7007_snd_init);
drivers/mmc/host/sdhci-esdhc-imx.c +1 -1
@@ -79,7 +79,7 @@#define ESDHC_STD_TUNING_EN (1 << 24)/* NOTE: the minimum valid tuning start tap for mx6sl is 1 */ #define ESDHC_TUNING_START_TAP_DEFAULT 0x1 -#define ESDHC_TUNING_START_TAP_MASK 0xff +#define ESDHC_TUNING_START_TAP_MASK 0x7f#define ESDHC_TUNING_STEP_MASK 0x00070000#define ESDHC_TUNING_STEP_SHIFT 16
drivers/mtd/nand/brcmnand/brcmnand.c +7 -4
@@ -911,11 +911,14 @@ static int brcmnand_hamming_ooblayout_free(struct mtd_info *mtd, int section,if (!section) {/* * Small-page NAND use byte 6 for BBI while large-page -* NAND use byte 0. +* NAND use bytes 0 and 1. */ -if (cfg->page_size >512 ) - oobregion->offset++; - oobregion->length--; +if (cfg->page_size >512 ) { + oobregion->offset +=2 ; + oobregion->length -=2 ; + }else { + oobregion->length--; + } } }
drivers/mtd/nand/pasemi_nand.c +3 -1
@@ -164,7 +164,7 @@ static int pasemi_nand_probe(struct platform_device *ofdev)if (mtd_device_register (pasemi_nand_mtd,NULL ,0 )) {dev_err (dev,"Unable to register MTD device\n" ); err = -ENODEV ; - goto out_lpc; + goto out_cleanup_nand; } dev_info(dev, "PA Semi NAND flash at %pR, control at I/O %x\n", &res,
@@ -172,6 +172,8 @@ static int pasemi_nand_probe(struct platform_device *ofdev)return 0 ; + out_cleanup_nand: +nand_cleanup (chip); out_lpc:release_region (lpcctl,4 ); out_ior:
drivers/net/can/usb/kvaser_usb.c +3 -3
@@ -791,7 +791,7 @@ static int kvaser_usb_simple_msg_async(struct kvaser_usb_net_priv *priv,if (!urb)return -ENOMEM ; - buf =kmalloc (sizeof (struct kvaser_msg ),GFP_ATOMIC ); + buf =kzalloc (sizeof (struct kvaser_msg ),GFP_ATOMIC );if (!buf) {usb_free_urb (urb);return -ENOMEM ;
@@ -1459,7 +1459,7 @@ static int kvaser_usb_set_opt_mode(const struct kvaser_usb_net_priv *priv)struct kvaser_msg *msg;int rc; - msg =kmalloc (sizeof (*msg),GFP_KERNEL ); + msg =kzalloc (sizeof (*msg),GFP_KERNEL );if (!msg)return -ENOMEM ;
@@ -1592,7 +1592,7 @@ static int kvaser_usb_flush_queue(struct kvaser_usb_net_priv *priv)struct kvaser_msg *msg;int rc; - msg =kmalloc (sizeof (*msg),GFP_KERNEL ); + msg =kzalloc (sizeof (*msg),GFP_KERNEL );if (!msg)return -ENOMEM ;
drivers/net/ethernet/allwinner/sun4i-emac.c +2 -2
@@ -412,7 +412,7 @@ static void emac_timeout(struct net_device *dev)/* Hardware start transmission. * Send a packet to media from the upper layer. */ -static int emac_start_xmit (struct sk_buff *skb,struct net_device *dev) +static netdev_tx_t emac_start_xmit (struct sk_buff *skb,struct net_device *dev) {struct emac_board_info *db =netdev_priv (dev);unsigned long channel;
@@ -420,7 +420,7 @@ static int emac_start_xmit(struct sk_buff *skb, struct net_device *dev) channel = db->tx_fifo_stat &3 ;if (channel ==3 ) -return 1 ; +return NETDEV_TX_BUSY ; channel = (channel ==1 ?1 :0 );
drivers/net/ethernet/amazon/ena/ena_com.c +4 -2
@@ -2096,6 +2096,9 @@ int ena_com_get_hash_function(struct ena_com_dev *ena_dev, rss->hash_key;int rc; +if (unlikely (!func)) +return -EINVAL ; + rc = ena_com_get_feature_ex(ena_dev, &get_resp, ENA_ADMIN_RSS_HASH_FUNCTION, rss->hash_key_dma_addr,
@@ -2108,8 +2111,7 @@ int ena_com_get_hash_function(struct ena_com_dev *ena_dev,if (rss->hash_func) rss->hash_func--; -if (func) - *func = rss->hash_func; + *func = rss->hash_func;if (key)memcpy (key, hash_key->key, (size_t )(hash_key->keys_num) <<2 );
drivers/net/ethernet/ibm/ibmvnic.c +3 -5
@@ -3362,12 +3362,10 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,dev_err (dev,"Error %ld in VERSION_EXCHG_RSP\n" , rc);break ; } -dev_info (dev,"Partner protocol version is %d\n" , - crq->version_exchange_rsp.version); -if (be16_to_cpu (crq->version_exchange_rsp.version) < - ibmvnic_version) - ibmvnic_version = + ibmvnic_version =be16_to_cpu (crq->version_exchange_rsp.version); +dev_info (dev,"Partner protocol version is %d\n" , + ibmvnic_version);send_cap_queries (adapter);break ;case QUERY_CAPABILITY_RSP :
drivers/net/ethernet/intel/e1000/e1000_main.c +3 -1
@@ -3167,8 +3167,9 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, hdr_len =skb_transport_offset (skb) +tcp_hdrlen (skb);if (skb->data_len && hdr_len == len) {switch (hw->mac_type) { +case e1000_82544: {unsigned int pull_size; -case e1000_82544: +/* Make sure we have room to chop off 4 bytes, * and that the end alignment will work out to * this hardware's requirements
@@ -3189,6 +3190,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, } len =skb_headlen (skb);break ; + }default :/* do nothing */ break ;
drivers/net/ethernet/intel/e1000e/e1000.h +0 -1
@@ -589,7 +589,6 @@ static inline u32 __er32(struct e1000_hw *hw, unsigned long reg)#define er32 (reg) __er32(hw, E1000_##reg) -s32 __ew32_prepare (struct e1000_hw *hw);void __ew32 (struct e1000_hw *hw,unsigned long reg,u32 val);#define ew32 (reg, val) __ew32(hw, E1000_##reg, (val))
drivers/net/ethernet/intel/e1000e/netdev.c +5 -7
@@ -136,14 +136,12 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = {* has bit 24 set while ME is accessing MAC CSR registers, wait if it is set * and try again a number of times. **/ -s32 __ew32_prepare (struct e1000_hw *hw) +static void __ew32_prepare (struct e1000_hw *hw) {s32 i =E1000_ICH_FWSM_PCIM2PCI_COUNT ;while ((er32 (FWSM ) &E1000_ICH_FWSM_PCIM2PCI ) && --i)udelay (50 ); - -return i; }void __ew32 (struct e1000_hw *hw,unsigned long reg,u32 val)
@@ -624,11 +622,11 @@ static void e1000e_update_rdt_wa(struct e1000_ring *rx_ring, unsigned int i) {struct e1000_adapter *adapter = rx_ring->adapter;struct e1000_hw *hw = &adapter->hw; -s32 ret_val =__ew32_prepare (hw); +__ew32_prepare (hw);writel (i, rx_ring->tail); -if (unlikely (!ret_val && (i !=readl (rx_ring->tail)))) { +if (unlikely (i !=readl (rx_ring->tail))) {u32 rctl =er32 (RCTL );ew32 (RCTL , rctl & ~E1000_RCTL_EN );
@@ -641,11 +639,11 @@ static void e1000e_update_tdt_wa(struct e1000_ring *tx_ring, unsigned int i) {struct e1000_adapter *adapter = tx_ring->adapter;struct e1000_hw *hw = &adapter->hw; -s32 ret_val =__ew32_prepare (hw); +__ew32_prepare (hw);writel (i, tx_ring->tail); -if (unlikely (!ret_val && (i !=readl (tx_ring->tail)))) { +if (unlikely (i !=readl (tx_ring->tail))) {u32 tctl =er32 (TCTL );ew32 (TCTL , tctl & ~E1000_TCTL_EN );
drivers/net/ethernet/intel/igb/igb_ethtool.c +2 -1
@@ -153,7 +153,8 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)u32 status;u32 speed; - status =rd32 (E1000_STATUS ); + status =pm_runtime_suspended (&adapter->pdev->dev) ? +0 :rd32 (E1000_STATUS );if (hw->phy.media_type == e1000_media_type_copper) { ecmd->supported = (SUPPORTED_10baseT_Half |
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +1 -1
@@ -2219,7 +2219,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw) }/* Configure pause time (2 TCs per register) */ - reg = hw->fc.pause_time *0x00010001 ; + reg = hw->fc.pause_time *0x00010001U ;for (i =0 ; i < (MAX_TRAFFIC_CLASS /2 ); i++)IXGBE_WRITE_REG (hw,IXGBE_FCTTV (i), reg);
drivers/net/ethernet/nxp/lpc_eth.c +2 -1
@@ -845,7 +845,8 @@ static int lpc_mii_init(struct netdata_local *pldat)if (mdiobus_register (pldat->mii_bus)) goto err_out_unregister_bus; -if (lpc_mii_probe (pldat->ndev) !=0 ) + err =lpc_mii_probe (pldat->ndev); +if (err) goto err_out_unregister_bus;return 0 ;
drivers/net/macvlan.c +4 -0
@@ -421,6 +421,10 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)int ret;rx_handler_result_t handle_res; +/* Packets from dev_loopback_xmit() do not have L2 header, bail out */ +if (unlikely (skb->pkt_type ==PACKET_LOOPBACK )) +return RX_HANDLER_PASS ; + port =macvlan_port_get_rcu (skb->dev);if (is_multicast_ether_addr (eth->h_dest)) {unsigned int hash;
drivers/net/vmxnet3/vmxnet3_ethtool.c +2 -0
@@ -691,6 +691,8 @@ vmxnet3_get_rss(struct net_device *netdev, u32 *p, u8 *key, u8 *hfunc) *hfunc =ETH_RSS_HASH_TOP ;if (!p)return 0 ; +if (n >UPT1_RSS_MAX_IND_TABLE_SIZE ) +return 0 ;while (n--) p[n] = rssConf->indTable[n];return 0 ;
drivers/net/vxlan.c +4 -0
@@ -1521,6 +1521,10 @@ static struct sk_buff *vxlan_na_create(struct sk_buff *request, daddr =eth_hdr (request)->h_source; ns_olen = request->len -skb_transport_offset (request) -sizeof (*ns);for (i =0 ; i < ns_olen-1 ; i += (ns->opt[i+1 ]<<3 )) { +if (!ns->opt[i +1 ]) { +kfree_skb (reply); +return NULL ; + }if (ns->opt[i] ==ND_OPT_SOURCE_LL_ADDR ) { daddr = ns->opt + i +sizeof (struct nd_opt_hdr );break ;
drivers/net/wireless/ath/ath9k/hif_usb.c +45 -13
164 lines not on this page · raw message
drivers/net/wireless/ath/ath9k/hif_usb.h +6 -0
@@ -84,6 +84,11 @@ struct tx_buf {struct list_head list; }; +struct rx_buf { +struct sk_buff *skb; +struct hif_device_usb *hif_dev; +}; +#define HIF_USB_TX_STOP BIT(0)#define HIF_USB_TX_FLUSH BIT(1)
@@ -131,5 +136,6 @@ struct hif_device_usb {int ath9k_hif_usb_init (void );void ath9k_hif_usb_exit (void ); +void ath9k_hif_usb_dealloc_urbs (struct hif_device_usb *hif_dev);#endif /* HTC_USB_H */
drivers/net/wireless/ath/ath9k/htc_drv_init.c +7 -3
@@ -931,8 +931,9 @@ static int ath9k_init_device(struct ath9k_htc_priv *priv,int ath9k_htc_probe_device (struct htc_target *htc_handle,struct device *dev,u16 devid,char *product,u32 drv_info) { -struct ieee80211_hw *hw; +struct hif_device_usb *hif_dev;struct ath9k_htc_priv *priv; +struct ieee80211_hw *hw;int ret; hw =ieee80211_alloc_hw (sizeof (struct ath9k_htc_priv ), &ath9k_htc_ops);
@@ -967,7 +968,10 @@ int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,return 0 ; err_init: -ath9k_deinit_wmi (priv); +ath9k_stop_wmi (priv); + hif_dev = (struct hif_device_usb *)htc_handle->hif_dev; +ath9k_hif_usb_dealloc_urbs (hif_dev); +ath9k_destoy_wmi (priv); err_free:ieee80211_free_hw (hw);return ret;
@@ -982,7 +986,7 @@ void ath9k_htc_disconnect_device(struct htc_target *htc_handle, bool hotunplug) htc_handle->drv_priv->ah->ah_flags |=AH_UNPLUGGED ;ath9k_deinit_device (htc_handle->drv_priv); -ath9k_deinit_wmi (htc_handle->drv_priv); +ath9k_stop_wmi (htc_handle->drv_priv);ieee80211_free_hw (htc_handle->drv_priv->hw); } }
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +3 -3
@@ -998,9 +998,9 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,* which are not PHY_ERROR (short radar pulses have a length of 3) */ if (unlikely (!rs_datalen || (rs_datalen <10 && !is_phyerr))) { -ath_warn (common, -"Short RX data len, dropping (dlen: %d)\n" , - rs_datalen); +ath_dbg (common,ANY , +"Short RX data len, dropping (dlen: %d)\n" , + rs_datalen); goto rx_next; }
drivers/net/wireless/ath/ath9k/htc_hst.c +3 -0
@@ -114,6 +114,9 @@ static void htc_process_conn_rsp(struct htc_target *target,if (svc_rspmsg->status ==HTC_SERVICE_SUCCESS ) { epid = svc_rspmsg->endpoint_id; +if (epid <0 || epid >=ENDPOINT_MAX ) +return ; + service_id =be16_to_cpu (svc_rspmsg->service_id); max_msglen =be16_to_cpu (svc_rspmsg->max_msg_len); endpoint = &target->endpoint[epid];
drivers/net/wireless/ath/ath9k/wmi.c +4 -1
@@ -112,14 +112,17 @@ struct wmi *ath9k_init_wmi(struct ath9k_htc_priv *priv)return wmi; } -void ath9k_deinit_wmi (struct ath9k_htc_priv *priv) +void ath9k_stop_wmi (struct ath9k_htc_priv *priv) {struct wmi *wmi = priv->wmi;mutex_lock (&wmi->op_mutex); wmi->stopped = true;mutex_unlock (&wmi->op_mutex); +} +void ath9k_destoy_wmi (struct ath9k_htc_priv *priv) +{kfree (priv->wmi); }
drivers/net/wireless/ath/ath9k/wmi.h +2 -1
@@ -179,7 +179,6 @@ struct wmi { };struct wmi *ath9k_init_wmi (struct ath9k_htc_priv *priv); -void ath9k_deinit_wmi (struct ath9k_htc_priv *priv);int ath9k_wmi_connect (struct htc_target *htc,struct wmi *wmi,enum htc_endpoint_id *wmi_ctrl_epid); int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
@@ -189,6 +188,8 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,void ath9k_wmi_event_tasklet (unsigned long data);void ath9k_fatal_work (struct work_struct *work);void ath9k_wmi_event_drain (struct ath9k_htc_priv *priv); +void ath9k_stop_wmi (struct ath9k_htc_priv *priv); +void ath9k_destoy_wmi (struct ath9k_htc_priv *priv);#define WMI_CMD (_wmi_cmd) \ do { \
drivers/net/wireless/ath/carl9170/fw.c +1 -3
@@ -351,9 +351,7 @@ static int carl9170_fw(struct ar9170 *ar, const __u8 *data, size_t len) ar->hw->wiphy->interface_modes |=BIT (NL80211_IFTYPE_ADHOC );if (SUPP (CARL9170FW_WLANTX_CAB )) { - if_comb_types |= -BIT (NL80211_IFTYPE_AP ) | -BIT (NL80211_IFTYPE_P2P_GO ); + if_comb_types |=BIT (NL80211_IFTYPE_AP );#ifdef CONFIG_MAC80211_MESH if_comb_types |=
drivers/net/wireless/ath/carl9170/main.c +4 -17
@@ -582,11 +582,10 @@ static int carl9170_init_interface(struct ar9170 *ar, ar->disable_offload |= ((vif->type !=NL80211_IFTYPE_STATION ) && (vif->type !=NL80211_IFTYPE_AP )); -/* While the driver supports HW offload in a single -* P2P client configuration, it doesn't support HW -* offload in the favourit, concurrent P2P GO+CLIENT -* configuration. Hence, HW offload will always be -* disabled for P2P. +/* The driver used to have P2P GO+CLIENT support, +* but since this was dropped and we don't know if +* there are any gremlins lurking in the shadows, +* so best we keep HW offload disabled for P2P. */ ar->disable_offload |= vif->p2p;
@@ -639,18 +638,6 @@ static int carl9170_op_add_interface(struct ieee80211_hw *hw,if (vif->type ==NL80211_IFTYPE_STATION )break ; -/* P2P GO [master] use-case -* Because the P2P GO station is selected dynamically -* by all participating peers of a WIFI Direct network, -* the driver has be able to change the main interface -* operating mode on the fly. -*/ -if (main_vif->p2p && vif->p2p && - vif->type ==NL80211_IFTYPE_AP ) { - old_main = main_vif; -break ; - } - err = -EBUSY ;rcu_read_unlock ();
drivers/net/wireless/broadcom/b43/main.c +1 -1
@@ -5596,7 +5596,7 @@ static struct b43_wl *b43_wireless_init(struct b43_bus_dev *dev)/* fill hw info */ ieee80211_hw_set (hw,RX_INCLUDES_FCS );ieee80211_hw_set (hw,SIGNAL_DBM ); - +ieee80211_hw_set (hw,MFP_CAPABLE ); hw->wiphy->interface_modes =BIT (NL80211_IFTYPE_AP ) | BIT(NL80211_IFTYPE_MESH_POINT) |
drivers/net/wireless/broadcom/b43legacy/main.c +1 -0
@@ -3835,6 +3835,7 @@ static int b43legacy_wireless_init(struct ssb_device *dev)/* fill hw info */ ieee80211_hw_set (hw,RX_INCLUDES_FCS );ieee80211_hw_set (hw,SIGNAL_DBM ); +ieee80211_hw_set (hw,MFP_CAPABLE );/* Allow WPA3 in software */ hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_AP) |
drivers/net/wireless/broadcom/b43legacy/xmit.c +1 -0
@@ -571,6 +571,7 @@ void b43legacy_rx(struct b43legacy_wldev *dev,default :b43legacywarn (dev->wl,"Unexpected value for chanstat (0x%X)\n" , chanstat); + goto drop; }memcpy (IEEE80211_SKB_RXCB (skb), &status,sizeof (status));
drivers/net/wireless/marvell/mwifiex/cfg80211.c +6 -8
@@ -1446,7 +1446,8 @@ mwifiex_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *dev, int idx, u8 *mac, struct station_info *sinfo) { struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev); -static struct mwifiex_sta_node *node; +struct mwifiex_sta_node *node; +int i;if ((GET_BSS_ROLE (priv) ==MWIFIEX_BSS_ROLE_STA ) && priv->media_connected && idx ==0 ) {
@@ -1456,13 +1457,10 @@ mwifiex_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *dev,mwifiex_send_cmd (priv,HOST_CMD_APCMD_STA_LIST , HostCmd_ACT_GEN_GET,0 ,NULL , true); -if (node && (&node->list == &priv->sta_list)) { - node =NULL ; -return -ENOENT ; - } - - node =list_prepare_entry (node, &priv->sta_list, list); -list_for_each_entry_continue (node, &priv->sta_list, list) { + i =0 ; +list_for_each_entry (node, &priv->sta_list, list) { +if (i++ != idx) +continue ;ether_addr_copy (mac, node->mac_addr);return mwifiex_dump_station_info (priv, node, sinfo); }
drivers/net/wireless/realtek/rtlwifi/usb.c +2 -6
@@ -927,10 +927,8 @@ static struct urb *_rtl_usb_tx_urb_setup(struct ieee80211_hw *hw,WARN_ON (NULL == skb); _urb =usb_alloc_urb (0 ,GFP_ATOMIC ); -if (!_urb) { -kfree_skb (skb); +if (!_urb)return NULL ; - }_rtl_install_trx_info (rtlusb, skb, ep_num);usb_fill_bulk_urb (_urb, rtlusb->udev,usb_sndbulkpipe (rtlusb->udev, ep_num), skb->data, skb->len, _rtl_tx_complete, skb);
@@ -945,7 +943,6 @@ static void _rtl_usb_transmit(struct ieee80211_hw *hw, struct sk_buff *skb,struct rtl_usb *rtlusb =rtl_usbdev (rtl_usbpriv (hw));u32 ep_num;struct urb *_urb =NULL ; -struct sk_buff *_skb =NULL ;WARN_ON (NULL == rtlusb->usb_tx_aggregate_hdl);if (unlikely (IS_USB_STOP (rtlusb))) {
@@ -955,8 +952,7 @@ static void _rtl_usb_transmit(struct ieee80211_hw *hw, struct sk_buff *skb,return ; } ep_num = rtlusb->ep_map.ep_mapping[qnum]; - _skb = skb; - _urb =_rtl_usb_tx_urb_setup (hw, _skb, ep_num); + _urb =_rtl_usb_tx_urb_setup (hw, skb, ep_num);if (unlikely (!_urb)) {RT_TRACE (rtlpriv,COMP_ERR ,DBG_EMERG ,"Can't allocate urb. Drop skb!\n" );
drivers/pci/probe.c +22 -2
@@ -1251,7 +1251,7 @@ int pci_setup_device(struct pci_dev *dev)/* device class may be changed after fixup */ class = dev->class >>8 ; -if (dev->non_compliant_bars) { +if (dev->non_compliant_bars && !dev->mmio_always_on) {pci_read_config_word (dev,PCI_COMMAND , &cmd);if (cmd & (PCI_COMMAND_IO |PCI_COMMAND_MEMORY )) {dev_info (&dev->dev,"device has non-compliant BARs; disabling IO/MEM decoding\n" );
@@ -1360,13 +1360,33 @@ static void pci_configure_mps(struct pci_dev *dev)struct pci_dev *bridge =pci_upstream_bridge (dev);int mps, p_mps, rc; -if (!pci_is_pcie (dev) || !bridge || !pci_is_pcie (bridge)) +if (!pci_is_pcie (dev))return ;/* MPS and MRRS fields are of type 'RsvdP' for VFs, short-circuit out */ if (dev->is_virtfn)return ; +/* +* For Root Complex Integrated Endpoints, program the maximum +* supported value unless limited by the PCIE_BUS_PEER2PEER case. +*/ +if (pci_pcie_type (dev) ==PCI_EXP_TYPE_RC_END ) { +if (pcie_bus_config ==PCIE_BUS_PEER2PEER ) + mps =128 ; +else + mps =128 << dev->pcie_mpss; + rc =pcie_set_mps (dev, mps); +if (rc) { +pci_warn (dev,"can't set Max Payload Size to %d; if necessary, use \"pci=pcie_bus_safe\" and report a bug\n" , + mps); + } +return ; + } + +if (!bridge || !pci_is_pcie (bridge)) +return ; + mps =pcie_get_mps (dev); p_mps =pcie_get_mps (bridge);
drivers/pinctrl/samsung/pinctrl-exynos.c +9 -0
@@ -289,6 +289,7 @@ struct exynos_eint_gpio_save {u32 eint_con;u32 eint_fltcon0;u32 eint_fltcon1; +u32 eint_mask; };/*
@@ -585,10 +586,13 @@ static void exynos_pinctrl_suspend_bank( + 2 * bank->eint_offset); save->eint_fltcon1 =readl (regs +EXYNOS_GPIO_EFLTCON_OFFSET +2 * bank->eint_offset +4 ); + save->eint_mask =readl (regs + bank->irq_chip->eint_mask + + bank->eint_offset);pr_debug ("%s: save con %#010x\n" , bank->name, save->eint_con);pr_debug ("%s: save fltcon0 %#010x\n" , bank->name, save->eint_fltcon0);pr_debug ("%s: save fltcon1 %#010x\n" , bank->name, save->eint_fltcon1); +pr_debug ("%s: save mask %#010x\n" , bank->name, save->eint_mask); }static void exynos_pinctrl_suspend (struct samsung_pinctrl_drv_data *drvdata)
@@ -617,6 +621,9 @@ static void exynos_pinctrl_resume_bank(pr_debug ("%s: fltcon1 %#010x => %#010x\n" , bank->name,readl (regs +EXYNOS_GPIO_EFLTCON_OFFSET +2 * bank->eint_offset +4 ), save->eint_fltcon1); +pr_debug ("%s: mask %#010x => %#010x\n" , bank->name, +readl (regs + bank->irq_chip->eint_mask + + bank->eint_offset), save->eint_mask);writel (save->eint_con, regs +EXYNOS_GPIO_ECON_OFFSET + bank->eint_offset);
@@ -624,6 +631,8 @@ static void exynos_pinctrl_resume_bank( + 2 * bank->eint_offset);writel (save->eint_fltcon1, regs +EXYNOS_GPIO_EFLTCON_OFFSET +2 * bank->eint_offset +4 ); +writel (save->eint_mask, regs + bank->irq_chip->eint_mask + + bank->eint_offset); }static void exynos_pinctrl_resume (struct samsung_pinctrl_drv_data *drvdata)
drivers/power/reset/vexpress-poweroff.c +1 -0
@@ -150,6 +150,7 @@ static struct platform_driver vexpress_reset_driver = { .driver = { .name = "vexpress-reset", .of_match_table = vexpress_reset_of_match, + .suppress_bind_attrs = true, }, };
drivers/scsi/scsi_lib.c +2 -2
@@ -1029,10 +1029,10 @@ int scsi_init_io(struct scsi_cmnd *cmd)struct scsi_device *sdev = cmd->device;struct request *rq = cmd->request;bool is_mq = (rq->mq_ctx !=NULL ); -int error; +int error =BLKPREP_KILL ;if (WARN_ON_ONCE (!rq->nr_phys_segments)) -return -EINVAL ; + goto err_exit; error =scsi_init_sgtable (rq, &cmd->sdb);if (error)
drivers/spi/spi-bcm-qspi.c +4 -4
@@ -698,7 +698,7 @@ static void read_from_hw(struct bcm_qspi *qspi, int slots)if (buf) buf[tp.byte] =read_rxram_slot_u8 (qspi, slot);dev_dbg (&qspi->pdev->dev,"RD %02x\n" , - buf ? buf[tp.byte] :0xff ); + buf ? buf[tp.byte] :0x0 ); }else {u16 *buf = tp.trans->rx_buf;
@@ -706,7 +706,7 @@ static void read_from_hw(struct bcm_qspi *qspi, int slots) buf[tp.byte /2 ] =read_rxram_slot_u16 (qspi, slot);dev_dbg (&qspi->pdev->dev,"RD %04x\n" , - buf ? buf[tp.byte] :0xffff ); + buf ? buf[tp.byte /2 ] :0x0 ); } update_qspi_trans_byte_count(qspi, &tp,
@@ -761,13 +761,13 @@ static int write_to_hw(struct bcm_qspi *qspi, struct spi_device *spi)while (!tstatus && slot <MSPI_NUM_CDRAM ) {if (tp.trans->bits_per_word <=8 ) {const u8 *buf = tp.trans->tx_buf; -u8 val = buf ? buf[tp.byte] :0xff ; +u8 val = buf ? buf[tp.byte] :0x00 ;write_txram_slot_u8 (qspi, slot, val);dev_dbg (&qspi->pdev->dev,"WR %02x\n" , val); }else {const u16 *buf = tp.trans->tx_buf; -u16 val = buf ? buf[tp.byte /2 ] :0xffff ; +u16 val = buf ? buf[tp.byte /2 ] :0x0000 ;write_txram_slot_u16 (qspi, slot, val);dev_dbg (&qspi->pdev->dev,"WR %04x\n" , val);
drivers/spi/spi-bcm2835.c +3 -1
@@ -793,7 +793,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev) goto out_clk_disable; } - err =devm_spi_register_master (&pdev->dev, master); + err =spi_register_master (master);if (err) {dev_err (&pdev->dev,"could not register SPI master: %d\n" , err); goto out_clk_disable;
@@ -813,6 +813,8 @@ static int bcm2835_spi_remove(struct platform_device *pdev)struct spi_master *master =platform_get_drvdata (pdev);struct bcm2835_spi *bs =spi_master_get_devdata (master); +spi_unregister_master (master); +/* Clear FIFOs, and disable the HW block */ bcm2835_wr (bs,BCM2835_SPI_CS ,BCM2835_SPI_CS_CLEAR_RX |BCM2835_SPI_CS_CLEAR_TX );
drivers/spi/spi-bcm2835aux.c +3 -1
@@ -485,7 +485,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) goto out_clk_disable; } - err =devm_spi_register_master (&pdev->dev, master); + err =spi_register_master (master);if (err) {dev_err (&pdev->dev,"could not register SPI master: %d\n" , err); goto out_clk_disable;
@@ -505,6 +505,8 @@ static int bcm2835aux_spi_remove(struct platform_device *pdev)struct spi_master *master =platform_get_drvdata (pdev);struct bcm2835aux_spi *bs =spi_master_get_devdata (master); +spi_unregister_master (master); +bcm2835aux_spi_reset_hw (bs);/* disable the HW block by releasing the clock */
drivers/spi/spi-dw-mid.c +11 -5
@@ -155,6 +155,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_tx(struct dw_spi *dws,if (!xfer->tx_buf)return NULL ; +memset (&txconf,0 ,sizeof (txconf)); txconf.direction =DMA_MEM_TO_DEV ; txconf.dst_addr = dws->dma_addr; txconf.dst_maxburst =16 ;
@@ -201,6 +202,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws,if (!xfer->rx_buf)return NULL ; +memset (&rxconf,0 ,sizeof (rxconf)); rxconf.direction =DMA_DEV_TO_MEM ; rxconf.src_addr = dws->dma_addr; rxconf.src_maxburst =16 ;
@@ -226,19 +228,23 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws,static int mid_spi_dma_setup (struct dw_spi *dws,struct spi_transfer *xfer) { -u16 dma_ctrl =0 ; +u16 imr =0 , dma_ctrl =0 ;dw_writel (dws,DW_SPI_DMARDLR ,0xf );dw_writel (dws,DW_SPI_DMATDLR ,0x10 ); -if (xfer->tx_buf) +if (xfer->tx_buf) { dma_ctrl |=SPI_DMA_TDMAE ; -if (xfer->rx_buf) + imr |=SPI_INT_TXOI ; + } +if (xfer->rx_buf) { dma_ctrl |=SPI_DMA_RDMAE ; + imr |=SPI_INT_RXUI |SPI_INT_RXOI ; + }dw_writel (dws,DW_SPI_DMACR , dma_ctrl);/* Set the interrupt mask */ -spi_umask_intr (dws,SPI_INT_TXOI |SPI_INT_RXUI |SPI_INT_RXOI ); +spi_umask_intr (dws, imr); dws->transfer_handler = dma_transfer;
@@ -268,7 +274,7 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer)dma_async_issue_pending (dws->txchan); } -return 0 ; +return 1 ; }static void mid_spi_dma_stop (struct dw_spi *dws)
drivers/spi/spi-dw.c +7 -7
@@ -384,11 +384,8 @@ static int dw_spi_transfer_one(struct spi_master *master,spi_enable_chip (dws,1 ); -if (dws->dma_mapped) { - ret = dws->dma_ops->dma_transfer (dws, transfer); -if (ret <0 ) -return ret; - } +if (dws->dma_mapped) +return dws->dma_ops->dma_transfer (dws, transfer);if (chip->poll_mode)return poll_transfer (dws);
@@ -500,6 +497,8 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)snprintf (dws->name,sizeof (dws->name),"dw_spi%d" , dws->bus_num);spin_lock_init (&dws->buf_lock); +spi_master_set_devdata (master, dws); + ret =request_irq (dws->irq, dw_spi_irq,IRQF_SHARED , dws->name, master);if (ret <0 ) {dev_err (dev,"can not get IRQ\n" );
@@ -531,8 +530,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws) } } -spi_master_set_devdata (master, dws); - ret =devm_spi_register_master (dev, master); + ret =spi_register_master (master);if (ret) {dev_err (&master->dev,"problem registering spi master\n" ); goto err_dma_exit;
@@ -556,6 +554,8 @@ void dw_spi_remove_host(struct dw_spi *dws) {dw_spi_debugfs_remove (dws); +spi_unregister_master (dws->master); +if (dws->dma_ops && dws->dma_ops->dma_exit) dws->dma_ops->dma_exit (dws);
drivers/spi/spi-pxa2xx.c +3 -1
@@ -1774,7 +1774,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)/* Register with the SPI framework */ platform_set_drvdata (pdev, drv_data); - status =devm_spi_register_master (&pdev->dev, master); + status =spi_register_master (master);if (status !=0 ) {dev_err (&pdev->dev,"problem registering spi master\n" ); goto out_error_clock_enabled;
@@ -1804,6 +1804,8 @@ static int pxa2xx_spi_remove(struct platform_device *pdev)pm_runtime_get_sync (&pdev->dev); +spi_unregister_master (drv_data->master); +/* Disable the SSP at the peripheral and SOC level */ pxa2xx_spi_write (drv_data,SSCR0 ,0 );clk_disable_unprepare (ssp->clk);
drivers/spi/spi.c +2 -3
@@ -2025,18 +2025,17 @@ static int __unregister(struct device *dev, void *null)*/ void spi_unregister_master (struct spi_master *master) { -int dummy; -if (master->queued) {if (spi_destroy_queue (master))dev_err (&master->dev,"queue remove failed\n" ); } +device_for_each_child (&master->dev,NULL , __unregister); +mutex_lock (&board_lock);list_del (&master->list);mutex_unlock (&board_lock); - dummy =device_for_each_child (&master->dev,NULL , __unregister);device_unregister (&master->dev); }EXPORT_SYMBOL_GPL (spi_unregister_master);
drivers/staging/android/ion/ion_heap.c +2 -2
@@ -105,12 +105,12 @@ int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,static int ion_heap_clear_pages (struct page **pages,int num,pgprot_t pgprot) { -void *addr =vm_map_ram (pages, num,-1 , pgprot); +void *addr =vmap (pages, num,VM_MAP , pgprot);if (!addr)return -ENOMEM ;memset (addr,0 ,PAGE_SIZE * num); -vm_unmap_ram (addr, num); +vunmap (addr);return 0 ; }
drivers/staging/greybus/sdio.c +7 -3
@@ -413,6 +413,7 @@ static int gb_sdio_command(struct gb_sdio_host *host, struct mmc_command *cmd)struct gb_sdio_command_request request = {0 };struct gb_sdio_command_response response;struct mmc_data *data = host->mrq->data; +unsigned int timeout_ms;u8 cmd_flags;u8 cmd_type;int i;
@@ -471,9 +472,12 @@ static int gb_sdio_command(struct gb_sdio_host *host, struct mmc_command *cmd) request.data_blksz =cpu_to_le16 (data->blksz); } - ret =gb_operation_sync (host->connection,GB_SDIO_TYPE_COMMAND , - &request,sizeof (request), &response, -sizeof (response)); + timeout_ms = cmd->busy_timeout ? cmd->busy_timeout : +GB_OPERATION_TIMEOUT_DEFAULT ; + + ret =gb_operation_sync_timeout (host->connection,GB_SDIO_TYPE_COMMAND , + &request,sizeof (request), &response, +sizeof (response), timeout_ms);if (ret <0 ) goto out;
drivers/video/fbdev/w100fb.c +2 -0
@@ -583,6 +583,7 @@ static void w100fb_restore_vidmem(struct w100fb_par *par) memsize=par->mach->mem->size;memcpy_toio (remapped_fbuf + (W100_FB_BASE -MEM_WINDOW_BASE ), par->saved_extmem, memsize);vfree (par->saved_extmem); + par->saved_extmem =NULL ; }if (par->saved_intmem) { memsize=MEM_INT_SIZE ;
@@ -591,6 +592,7 @@ static void w100fb_restore_vidmem(struct w100fb_par *par)else memcpy_toio (remapped_fbuf + (W100_FB_BASE -MEM_WINDOW_BASE ), par->saved_intmem, memsize);vfree (par->saved_intmem); + par->saved_intmem =NULL ; } }
drivers/w1/masters/omap_hdq.c +5 -5
@@ -204,7 +204,7 @@ static int hdq_write_byte(struct hdq_data *hdq_data, u8 val, u8 *status)/* check irqstatus */ if (!(*status &OMAP_HDQ_INT_STATUS_TXCOMPLETE )) {dev_dbg (hdq_data->dev,"timeout waiting for" -" TXCOMPLETE/RXCOMPLETE, %x" , *status); +" TXCOMPLETE/RXCOMPLETE, %x\n" , *status); ret = -ETIMEDOUT ; goto out; }
@@ -215,7 +215,7 @@ static int hdq_write_byte(struct hdq_data *hdq_data, u8 val, u8 *status) OMAP_HDQ_FLAG_CLEAR, &tmp_status);if (ret) {dev_dbg (hdq_data->dev,"timeout waiting GO bit" -" return to zero, %x" , tmp_status); +" return to zero, %x\n" , tmp_status); } out:
@@ -231,7 +231,7 @@ static irqreturn_t hdq_isr(int irq, void *_hdq)spin_lock_irqsave (&hdq_data->hdq_spinlock, irqflags); hdq_data->hdq_irqstatus =hdq_reg_in (hdq_data,OMAP_HDQ_INT_STATUS );spin_unlock_irqrestore (&hdq_data->hdq_spinlock, irqflags); -dev_dbg (hdq_data->dev,"hdq_isr: %x" , hdq_data->hdq_irqstatus); +dev_dbg (hdq_data->dev,"hdq_isr: %x\n" , hdq_data->hdq_irqstatus); if (hdq_data->hdq_irqstatus & (OMAP_HDQ_INT_STATUS_TXCOMPLETE | OMAP_HDQ_INT_STATUS_RXCOMPLETE
@@ -339,7 +339,7 @@ static int omap_hdq_break(struct hdq_data *hdq_data) tmp_status = hdq_data->hdq_irqstatus;/* check irqstatus */ if (!(tmp_status &OMAP_HDQ_INT_STATUS_TIMEOUT )) { -dev_dbg (hdq_data->dev,"timeout waiting for TIMEOUT, %x" , +dev_dbg (hdq_data->dev,"timeout waiting for TIMEOUT, %x\n" , tmp_status); ret = -ETIMEDOUT ; goto out;
@@ -366,7 +366,7 @@ static int omap_hdq_break(struct hdq_data *hdq_data) &tmp_status);if (ret)dev_dbg (hdq_data->dev,"timeout waiting INIT&GO bits" -" return to zero, %x" , tmp_status); +" return to zero, %x\n" , tmp_status); out:mutex_unlock (&hdq_data->hdq_mutex);
fs/btrfs/file-item.c +4 -2
@@ -779,10 +779,12 @@ int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans, nritems =btrfs_header_nritems (path->nodes[0 ]);if (!nritems || (path->slots[0 ] >= nritems -1 )) { ret =btrfs_next_leaf (root, path); -if (ret ==1 ) +if (ret <0 ) { + goto out; + }else if (ret >0 ) { found_next =1 ; -if (ret !=0 ) goto insert; + } slot = path->slots[0 ]; }btrfs_item_key_to_cpu (path->nodes[0 ], &found_key, slot);
fs/btrfs/inode.c +3 -3
@@ -8494,7 +8494,6 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip, bio->bi_private = dip; bio->bi_end_io = btrfs_end_dio_bio;btrfs_io_bio (bio)->logical = file_offset; -atomic_inc (&dip->pending_bios);while (bvec <= (orig_bio->bi_io_vec + orig_bio->bi_vcnt -1 )) { nr_sectors =BTRFS_BYTES_TO_BLKS (root->fs_info, bvec->bv_len);
@@ -8560,7 +8559,8 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip,if (!ret)return 0 ; -bio_put (bio); +if (bio != orig_bio) +bio_put (bio); out_err: dip->errors =1 ;/*
@@ -8607,7 +8607,7 @@ static void btrfs_submit_direct(struct bio *dio_bio, struct inode *inode, io_bio->bi_private = dip; dip->orig_bio = io_bio; dip->dio_bio = dio_bio; -atomic_set (&dip->pending_bios,0 ); +atomic_set (&dip->pending_bios,1 ); btrfs_bio =btrfs_io_bio (io_bio); btrfs_bio->logical = file_offset;
fs/btrfs/send.c +67 -0
91 lines not on this page · raw message
fs/ext4/ext4_extents.h +6 -3
@@ -169,10 +169,13 @@ struct ext4_ext_path { (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1)#define EXT_LAST_INDEX (__hdr__) \ (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_entries) - 1) -#define EXT_MAX_EXTENT (__hdr__) \ - (EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1) +#define EXT_MAX_EXTENT (__hdr__) \ + ((le16_to_cpu((__hdr__)->eh_max)) ? \ + ((EXT_FIRST_EXTENT((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1)) \ + : 0)#define EXT_MAX_INDEX (__hdr__) \ - (EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1) + ((le16_to_cpu((__hdr__)->eh_max)) ? \ + ((EXT_FIRST_INDEX((__hdr__)) + le16_to_cpu((__hdr__)->eh_max) - 1)) : 0)static inline struct ext4_extent_header *ext_inode_hdr (struct inode *inode) {
fs/ext4/fsync.c +13 -15
@@ -43,30 +43,28 @@*/ static int ext4_sync_parent (struct inode *inode) { -struct dentry *dentry =NULL ; -struct inode *next; +struct dentry *dentry, *next;int ret =0 ;if (!ext4_test_inode_state (inode,EXT4_STATE_NEWENTRY ))return 0 ; - inode =igrab (inode); + dentry =d_find_any_alias (inode); +if (!dentry) +return 0 ;while (ext4_test_inode_state (inode,EXT4_STATE_NEWENTRY )) {ext4_clear_inode_state (inode,EXT4_STATE_NEWENTRY ); - dentry =d_find_any_alias (inode); -if (!dentry) -break ; - next =igrab (d_inode (dentry->d_parent)); + + next =dget_parent (dentry);dput (dentry); -if (!next) -break ; -iput (inode); - inode = next; + dentry = next; + inode = dentry->d_inode; +/* * The directory inode may have gone through rmdir by now. But * the inode itself and its blocks are still allocated (we hold -* a reference to the inode so it didn't go through -* ext4_evict_inode()) and so we are safe to flush metadata -* blocks and the inode. +* a reference to the inode via its dentry), so it didn't go +* through ext4_evict_inode()) and so we are safe to flush +* metadata blocks and the inode. */ ret =sync_mapping_buffers (inode->i_mapping);if (ret)
@@ -75,7 +73,7 @@ static int ext4_sync_parent(struct inode *inode)if (ret)break ; } -iput (inode); +dput (dentry);return ret; }
fs/fat/inode.c +6 -0
@@ -1512,6 +1512,12 @@ static int fat_read_bpb(struct super_block *sb, struct fat_boot_sector *b, goto out; } +if (bpb->fat_fat_length ==0 && bpb->fat32_length ==0 ) { +if (!silent) +fat_msg (sb,KERN_ERR ,"bogus number of FAT sectors" ); + goto out; + } + error =0 ; out:
fs/fs-writeback.c +1 -0
@@ -269,6 +269,7 @@ void __inode_attach_wb(struct inode *inode, struct page *page)if (unlikely (cmpxchg (&inode->i_wb,NULL , wb)))wb_put (wb); } +EXPORT_SYMBOL_GPL (__inode_attach_wb);/** * locked_inode_to_wb_and_lock_list - determine a locked inode's wb and lock it
fs/nilfs2/segment.c +2 -0
@@ -2793,6 +2793,8 @@ int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root)if (!nilfs->ns_writer)return -ENOMEM ; +inode_attach_wb (nilfs->ns_bdev->bd_inode,NULL ); + err =nilfs_segctor_start_thread (nilfs->ns_writer);if (err) {kfree (nilfs->ns_writer);
fs/overlayfs/copy_up.c +1 -1
@@ -56,7 +56,7 @@ int ovl_copy_xattr(struct dentry *old, struct dentry *new) {ssize_t list_size, size, value_size =0 ;char *buf, *name, *value =NULL ; -int uninitialized_var (error ); +int error =0 ;size_t slen; if (!(old->d_inode->i_opflags & IOP_XATTR) ||
fs/proc/inode.c +1 -1
@@ -417,7 +417,7 @@ const struct inode_operations proc_link_inode_operations = {struct inode *proc_get_inode (struct super_block *sb,struct proc_dir_entry *de) { -struct inode *inode =new_inode_pseudo (sb); +struct inode *inode =new_inode (sb);if (inode) { inode->i_ino = de->low_ino;
fs/proc/self.c +1 -1
@@ -53,7 +53,7 @@ int proc_setup_self(struct super_block *s)inode_lock (root_inode); self =d_alloc_name (s->s_root,"self" );if (self) { -struct inode *inode =new_inode_pseudo (s); +struct inode *inode =new_inode (s);if (inode) { inode->i_ino = self_inum; inode->i_mtime = inode->i_atime = inode->i_ctime =current_time (inode);
fs/proc/thread_self.c +1 -1
@@ -55,7 +55,7 @@ int proc_setup_thread_self(struct super_block *s)inode_lock (root_inode); thread_self =d_alloc_name (s->s_root,"thread-self" );if (thread_self) { -struct inode *inode =new_inode_pseudo (s); +struct inode *inode =new_inode (s);if (inode) { inode->i_ino = thread_self_inum; inode->i_mtime = inode->i_atime = inode->i_ctime =current_time (inode);
include/linux/kgdb.h +1 -1
@@ -317,7 +317,7 @@ extern void gdbstub_exit(int status);extern int kgdb_single_step;extern atomic_t kgdb_active;#define in_dbg_master () \ - (raw_smp_processor_id() == atomic_read(&kgdb_active)) + (irqs_disabled() && (smp_processor_id() == atomic_read(&kgdb_active)))extern bool dbg_is_early;extern void __init dbg_late_init (void );#else /* ! CONFIG_KGDB */
include/linux/sunrpc/gss_api.h +1 -0
@@ -82,6 +82,7 @@ struct pf_desc {u32 service;char *name;char *auth_domain_name; +struct auth_domain *domain;bool datatouch; };
include/linux/sunrpc/svcauth_gss.h +2 -1
@@ -20,7 +20,8 @@ int gss_svc_init(void);void gss_svc_shutdown (void );int gss_svc_init_net (struct net *net);void gss_svc_shutdown_net (struct net *net); -int svcauth_gss_register_pseudoflavor (u32 pseudoflavor,char * name); +struct auth_domain *svcauth_gss_register_pseudoflavor (u32 pseudoflavor, +char *name);u32 svcauth_gss_flavor (struct auth_domain *dom);#endif /* __KERNEL__ */
include/uapi/linux/dvb/frontend.h +1 -0
@@ -127,6 +127,7 @@ enum fe_sec_mini_cmd {* to reset DiSEqC, tone and parameters */ enum fe_status { +FE_NONE =0x00 ,FE_HAS_SIGNAL =0x01 ,FE_HAS_CARRIER =0x02 ,FE_HAS_VITERBI =0x04 ,
include/uapi/linux/kvm.h +2 -0
@@ -159,9 +159,11 @@ struct kvm_hyperv_exit {#define KVM_EXIT_HYPERV_SYNIC 1#define KVM_EXIT_HYPERV_HCALL 2__u32 type; +__u32 pad1;union {struct {__u32 msr; +__u32 pad2;__u64 control;__u64 evt_page;__u64 msg_page;
kernel/cpu_pm.c +2 -2
@@ -97,7 +97,7 @@ EXPORT_SYMBOL_GPL(cpu_pm_unregister_notifier);*/ int cpu_pm_enter (void ) { -int nr_calls; +int nr_calls =0 ;int ret =0 ;read_lock (&cpu_pm_notifier_lock);
@@ -156,7 +156,7 @@ EXPORT_SYMBOL_GPL(cpu_pm_exit);*/ int cpu_cluster_pm_enter (void ) { -int nr_calls; +int nr_calls =0 ;int ret =0 ;read_lock (&cpu_pm_notifier_lock);
kernel/debug/debug_core.c +1 -0
@@ -443,6 +443,7 @@ static int kgdb_reenter_check(struct kgdb_state *ks)if (exception_level >1 ) {dump_stack (); + kgdb_io_module_registered = false;panic ("Recursive entry to debugger" ); }
kernel/events/core.c +14 -9
@@ -90,11 +90,11 @@ static void remote_function(void *data)* @info: the function call argument * * Calls the function @func when the task is currently running. This might -* be on the current CPU, which just calls the function directly +* be on the current CPU, which just calls the function directly. This will +* retry due to any failures in smp_call_function_single(), such as if the +* task_cpu() goes offline concurrently. * -* returns: @func return value, or -* -ESRCH - when the process isn't running -* -EAGAIN - when the process moved away +* returns @func return value or -ESRCH when the process isn't running */ static int task_function_call (struct task_struct *p,remote_function_f func,void *info)
@@ -107,11 +107,16 @@ task_function_call(struct task_struct *p, remote_function_f func, void *info) };int ret; -do { - ret =smp_call_function_single (task_cpu (p), remote_function, &data,1 ); -if (!ret) - ret = data.ret; - }while (ret == -EAGAIN ); +for (;;) { + ret =smp_call_function_single (task_cpu (p), remote_function, + &data,1 ); + ret = !ret ? data.ret : -EAGAIN ; + +if (ret != -EAGAIN ) +break ; + +cond_resched (); + }return ret; }
kernel/exit.c +16 -9
@@ -739,8 +739,12 @@ void __noreturn do_exit(long code)int group_dead; TASKS_RCU(int tasks_rcu_i); -profile_task_exit (tsk); -kcov_task_exit (tsk); +/* +* We can get here from a kernel oops, sometimes with preemption off. +* Start by checking for critical errors. +* Then fix up important state like USER_DS and preemption. +* Then do everything else. +*/ WARN_ON (blk_needs_flush_plug (tsk));
@@ -758,6 +762,16 @@ void __noreturn do_exit(long code)*/ set_fs (USER_DS );
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.