4.0.5-stable review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 4.0.5-stable review
This is the start of the stable review cycle for the 4.0.5 release. There are 148 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri Jun 5 11:41:24 UTC 2015. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.0.5-rc1.gz
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.0.5-rc1
Andrew Morton <[email protected]>
fs/binfmt_elf.c:load_elf_binary(): return -EINVAL on zero-length mappings
NeilBrown <[email protected]>
md: fix race when unfreezing sync_action
Naidu Tellapati <[email protected]>
pwm: img: Impose upper and lower timebase steps value
Kevin Cernekee <[email protected]>
UBI: block: Add missing cache flushes
Vineet Gupta <[email protected]>
ARC: unbork !LLSC build
Wei Yongjun <[email protected]>
power/reset: at91: fix return value check in at91_reset_platform_probe()
Sasha Levin <[email protected]>
vfs: read file_handle only once in handle_to_path
Oded Gabbay <[email protected]>
drm/amdkfd: Don't report local memory size
Junichi Nomura <[email protected]>
dm: fix reload failure of 0 path multipath mapping on blk-mq devices
Joe Thornber <[email protected]>
dm: fix casting bug in dm_merge_bvec()
Christian König <[email protected]>
drm/radeon: partially revert "fix VM_CONTEXT*_PAGE_TABLE_END_ADDR handling"
Alex Deucher <[email protected]>
Revert "drm/radeon: only mark audio as connected if the monitor supports it (v3)"
Alex Deucher <[email protected]>
drm/radeon/audio: make sure connector is valid in hotplug case
Alex Deucher <[email protected]>
drm/radeon: don't share plls if monitors differ in audio support
Daniel Vetter <[email protected]>
drm/plane-helper: Adapt cursor hack to transitional helpers
Alex Deucher <[email protected]>
drm/radeon: retry dcpd fetch
Christian König <[email protected]>
drm/radeon: fix VM_CONTEXT*_PAGE_TABLE_END_ADDR handling
Alex Deucher <[email protected]>
drm/radeon: add new bonaire pci id
Liad Kaufman <[email protected]>
iwlwifi: pcie: prevent using unmapped memory in fw monitor
Haim Dreyfuss <[email protected]>
iwlwifi: mvm: Free fw_status after use to avoid memory leak
Luciano Coelho <[email protected]>
iwlwifi: mvm: clean net-detect info if device was reset during suspend
Rafael J. Wysocki <[email protected]>
ACPI / init: Fix the ordering of acpi_reserve_resources()
Mark Hounschell <[email protected]>
sd: Disable support for 256 byte/sector disks
K. Y. Srinivasan <[email protected]>
storvsc: Set the SRB flags correctly when no data transfer is needed
Benjamin Tissoires <[email protected]>
Input: elantech - fix semi-mt protocol for v3 HW
Larry Finger <[email protected]>
rtlwifi: rtl8192cu: Fix kernel deadlock
Paul Burton <[email protected]>
MIPS: fix FP mode selection in lieu of .MIPS.abiflags data
Benjamin Tissoires <[email protected]>
Revert "HID: logitech-hidpp: support combo keyboard touchpad TK820"
Eric Work <[email protected]>
md/raid0: fix restore to sector variable in raid0_make_request
NeilBrown <[email protected]>
md/raid5: don't record new size if resize_stripes fails.
Nadav Haklai <[email protected]>
thermal: armada: Update Armada 380 thermal sensor coefficients
Jean Delvare <[email protected]>
firmware: dmi_scan: Fix ordering of product_uuid
Scott Mayhew <[email protected]>
svcrpc: fix potential GSSX_ACCEPT_SEC_CONTEXT decoding failures
Christoph Hellwig <[email protected]>
nfsd: fix the check for confirmed openowner in nfs4_preprocess_stateid_op
Christoph Hellwig <[email protected]>
nfsd/blocklayout: pretend we can send deviceid notifications
Mel Gorman <[email protected]>
mm, numa: really disable NUMA balancing by default on single node machines
Andi Kleen <[email protected]>
tools/vm: fix page-flags build
Vladimir Davydov <[email protected]>
kernfs: do not account ino_ida allocations to memcg
Vladimir Davydov <[email protected]>
gfp: add __GFP_NOACCOUNT
Helge Deller <[email protected]>
parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures
Russell King <[email protected]>
ARM: fix missing syscall trace exit
Inki Dae <[email protected]>
ARM: dts: set display clock correctly for exynos4412-trats2
Shawn Guo <[email protected]>
ARM: dts: fix imx27 dtb build rule
Philippe Reynes <[email protected]>
ARM: dts: imx27: only map 4 Kbyte for fec registers
Krzysztof Kozlowski <[email protected]>
ARM: EXYNOS: Fix dereference of ERR_PTR returned by of_genpd_get_from_provider
Mark Rutland <[email protected]>
ARM: 8356/1: mm: handle non-pmd-aligned end of RAM
Shaohua Li <[email protected]>
sched: always use blk_schedule_flush_plug in io_schedule_out
Thomas Gleixner <[email protected]>
sched: Handle priority boosted tasks proper in setscheduler()
Martin Schwidefsky <[email protected]>
s390/mm: correct return value of pmd_pfn
Johannes Berg <[email protected]>
mac80211: don't use napi_gro_receive() outside NAPI context
Janusz Dziedzic <[email protected]>
mac80211: move WEP tailroom size check
Harald Freudenberger <[email protected]>
crypto: s390/ghash - Fix incorrect ghash icv buffer handling.
Michael Brunner <[email protected]>
gpio: gpio-kempld: Fix get_direction return value
Ard Biesheuvel <[email protected]>
ARM: 8325/1: exynos: move resume code to .text section
Scott Branden <[email protected]>
rt2x00: add new rt2800usb device DWA 130
Xi Wang <[email protected]>
arm64: bpf: fix signedness bug in loading 64-bit immediate
Martin K. Petersen <[email protected]>
libata: Blacklist queued TRIM on all Samsung 800-series
Gabriele Mazzotta <[email protected]>
libata: Ignore spurious PHY event on LPM policy change
Gabriele Mazzotta <[email protected]>
libata: Add helper to determine when PHY events should be ignored
Dan Williams <[email protected]>
ahci: avoton port-disable reset-quirk
Darrick J. Wong <[email protected]>
jbd2: fix r_count overflows leading to buffer overflow in journal recovery
Eryu Guan <[email protected]>
ext4: check for zero length extent explicitly
Lukas Czerner <[email protected]>
ext4: fix NULL pointer dereference when journal restart fails
Theodore Ts'o <[email protected]>
ext4: fix lazytime optimization
Peter Hurley <[email protected]>
pty: Fix input race when closing
Pan Xinhui <[email protected]>
tty/n_gsm.c: fix a memory leak when gsmtty is removed
Ludovic Desroches <[email protected]>
mmc: atmel-mci: fix bad variable type for clkdiv
Anton Blanchard <[email protected]>
powerpc: Align TOC to 256 bytes
Daniel Axtens <[email protected]>
powerpc/mce: fix off by one errors in mce event handling
Krzysztof Opasiak <[email protected]>
usb: gadget: configfs: Fix interfaces array NULL-termination
Hans de Goede <[email protected]>
usb-storage: Add NO_WP_DETECT quirk for Lacie 059f:0651 devices
Mark Edwards <[email protected]>
USB: cp210x: add ID for KCF Technologies PRN device
Jason A. Donenfeld <[email protected]>
USB: pl2303: Remove support for Samsung I330
Jason A. Donenfeld <[email protected]>
USB: visor: Match I330 phone more precisely
Joe Lawrence <[email protected]>
xhci: gracefully handle xhci_irq dead device
Mathias Nyman <[email protected]>
xhci: Solve full event ring by increasing TRBS_PER_SEGMENT to 256
Mathias Nyman <[email protected]>
xhci: fix isoc endpoint dequeue from advancing too far on transaction error
Andy Grover <[email protected]>
target/pscsi: Don't leak scsi_host if hba is VIRTUAL_HOST
Stephane Eranian <[email protected]>
perf/x86/rapl: Enable Broadwell-U RAPL support
Malcolm Priestley <[email protected]>
staging: vt6655: lock MACvWriteBSSIDAddress.
Malcolm Priestley <[email protected]>
staging: vt6655: vnt_tx_packet Correct TX order of OWNED_BY_NIC
Malcolm Priestley <[email protected]>
staging: vt6655: Fix 80211 control and management status reporting.
Malcolm Priestley <[email protected]>
staging: vt6655: implement IEEE80211_TX_STAT_NOACK_TRANSMITTED
Malcolm Priestley <[email protected]>
staging: vt6655: device_free_tx_buf use only ieee80211_tx_status_irqsafe
Malcolm Priestley <[email protected]>
staging: vt6656: use ieee80211_tx_info to select packet type.
Sławomir Demeszko <[email protected]>
staging: gdm724x: Correction of variable usage after applying ALIGN()
Tatyana Nikolova <[email protected]>
RDMA/core: Fix for parsing netlink string attribute
Zidan Wang <[email protected]>
ASoC: wm8994: correct BCLK DIV 348 to 384
Zidan Wang <[email protected]>
ASoC: wm8960: fix "RINPUT3" audio route error
Koro Chen <[email protected]>
ASoC: dapm: Modify widget stream name according to prefix
Vasily Khoruzhick <[email protected]>
ASoC: uda1380: Avoid accessing i2c bus when codec is disabled
Axel Lin <[email protected]>
ASoC: mc13783: Fix wrong mask value used in mc13xxx_reg_rmw() calls
Takashi Iwai <[email protected]>
ALSA: hda - Fix noise on AMD radeon 290x controller
Takashi Iwai <[email protected]>
Revert "ALSA: hda - Add mute-LED mode control to Thinkpad"
Vittorio G (VittGam) <[email protected]>
ALSA: usb-audio: Add quirk for MS LifeCam HD-3000
Ansgar Hegerfeld <[email protected]>
ALSA: hda/realtek - ALC292 dock fix for Thinkpad L450
David Henningsson <[email protected]>
ALSA: hda - Add headset mic quirk for Dell Inspiron 5548
Takashi Iwai <[email protected]>
ALSA: hda - Add headphone quirk for Lifebook E752
David Henningsson <[email protected]>
ALSA: hda - Add Conexant codecs CX20721, CX20722, CX20723 and CX20724
Takashi Iwai <[email protected]>
ALSA: usb-audio: Add quirk for MS LifeCam Studio
Steven Rostedt <[email protected]>
module: Call module notifier on failure after complete_formation()
Al Viro <[email protected]>
d_walk() might skip too much
Jan Kara <[email protected]>
lib: Fix strnlen_user() to not touch memory after specified maximum
Arend van Spriel <[email protected]>
brcmfmac: avoid null pointer access when brcmf_msgbuf_get_pktid() fails
Dong Aisheng <[email protected]>
clk: add missing lock when call clk_core_enable in clk_set_parent
Javier Martinez Canillas <[email protected]>
clk: exynos5420: Restore GATE_BUS_TOP on suspend
Guenter Roeck <[email protected]>
hwmon: (nct6683) Add missing sysfs attribute initialization
Guenter Roeck <[email protected]>
hwmon: (nct6775) Add missing sysfs attribute initialization
Guenter Roeck <[email protected]>
hwmon: (tmp401) Do not auto-detect chip on I2C address 0x37
Thomas Betker <[email protected]>
iio: adc: xilinx: Fix VREFN sign
Thomas Betker <[email protected]>
iio: adc: xilinx: Fix VREFP scale
Thomas Betker <[email protected]>
iio: adc: xilinx: Fix "vccaux" channel .address
Thomas Betker <[email protected]>
iio: adc: xilinx: Fix register addresses
Naidu Tellapati <[email protected]>
iio: adc: cc10001: Fix regulator_get_voltage() return value check
Naidu Tellapati <[email protected]>
iio: adc: cc10001: Add delay before setting START bit
Naidu Tellapati <[email protected]>
iio: adc: cc10001: Fix incorrect use of power-up/power-down register
Naidu Tellapati <[email protected]>
iio: adc: cc10001: Fix the channel number mapping
Ivan T. Ivanov <[email protected]>
iio: adc: spmi-vadc: Fix overflow in output value normalization
Srinivas Pandruvada <[email protected]>
iio: pressure: hid-sensor-press: Fix modifier
Srinivas Pandruvada <[email protected]>
iio: light: hid-sensor-prox: Fix modifier
Alban Bedel <[email protected]>
iio:st_sensors: Fix oops when probing SPI devices
Jacob Pan <[email protected]>
iio/axp288_adc: add missing channel info mask
Chris Lesiak <[email protected]>
hwmon: (ntc_thermistor) Ensure iio channel is of type IIO_VOLTAGE
David Vrabel <[email protected]>
xen/events: don't bind non-percpu VIRQs with percpu chip
Filipe Manana <[email protected]>
Btrfs: fix racy system chunk allocation when setting block group ro
Ilya Dryomov <[email protected]>
Revert "libceph: clear r_req_lru_item in __unregister_linger_request()"
Ilya Dryomov <[email protected]>
libceph: request a new osdmap if lingering request maps to no osd
Johan Hovold <[email protected]>
mfd: da9052: Fix broken regulator probe
Miklos Szeredi <[email protected]>
ovl: mount read-only if workdir can't be created
Miklos Szeredi <[email protected]>
ovl: don't remove non-empty opaque directory
Rusty Russell <[email protected]>
lguest: fix out-by-one error in address checking.
Dave Chinner <[email protected]>
xfs: xfs_iozero can return positive errno
Dave Chinner <[email protected]>
xfs: xfs_attr_inactive leaves inconsistent attr fork state behind
Bob Copeland <[email protected]>
omfs: fix sign confusion for bitmap loop counter
Sasha Levin <[email protected]>
fs, omfs: add NULL terminator in the end up the token list
John Stultz <[email protected]>
ktime: Fix ktime_divns to do signed division
Liang Li <[email protected]>
kvm/fpu: Enable eager restore kvm FPU for MPX
Xiao Guangrong <[email protected]>
KVM: MMU: fix SMAP virtualization
Andrea Arcangeli <[email protected]>
kvm: fix crash in kvm_vcpu_reload_apic_access_page
Xiao Guangrong <[email protected]>
KVM: MMU: fix smap permission check
Paolo Bonzini <[email protected]>
KVM: MMU: fix CR4.SMEP=1, CR0.WP=0 with shadow pages
Ingo Molnar <[email protected]>
x86/fpu: Disable XSAVES* support for now
Borislav Petkov <[email protected]>
x86/mce: Fix MCE severity messages
Paolo Bonzini <[email protected]>
Revert "KVM: x86: drop fpu_activate hook"
Will Deacon <[email protected]>
iommu/arm-smmu: Fix sign-extension of upstream bus addresses at stage 1
Oded Gabbay <[email protected]>
iommu/amd: Fix bug in put_pasid_state_wait
Eric W. Biederman <[email protected]>
fs_pin: Allow for the possibility that m_list or s_list go unused.
Eric W. Biederman <[email protected]>
mnt: Fail collect_mounts when applied to unmounted mounts
-------------
Diffstat:
Documentation/hwmon/tmp401 | 2 +- Documentation/serial/tty.txt | 3 + Documentation/virtual/kvm/mmu.txt | 18 +++- Makefile | 4 +- arch/arc/include/asm/atomic.h | 2 +- arch/arm/boot/dts/Makefile | 2 +- arch/arm/boot/dts/exynos4412-trats2.dts | 2 +- arch/arm/boot/dts/imx27.dtsi | 2 +- arch/arm/kernel/entry-common.S | 4 +- arch/arm/mach-exynos/pm_domains.c | 4 +- arch/arm/mach-exynos/sleep.S | 31 +++---- arch/arm/mm/mmu.c | 20 ++--- arch/arm64/net/bpf_jit_comp.c | 2 +- arch/mips/kernel/elf.c | 32 +++---- arch/parisc/include/asm/elf.h | 4 + arch/parisc/kernel/sys_parisc.c | 3 + arch/powerpc/kernel/mce.c | 4 +- arch/powerpc/kernel/vmlinux.lds.S | 1 + arch/s390/crypto/ghash_s390.c | 25 +++--- arch/s390/include/asm/pgtable.h | 2 +- arch/x86/include/asm/kvm_host.h | 3 + arch/x86/kernel/cpu/mcheck/mce.c | 7 +- arch/x86/kernel/cpu/perf_event_intel_rapl.c | 1 + arch/x86/kernel/i387.c | 15 ++++ arch/x86/kvm/cpuid.c | 4 + arch/x86/kvm/cpuid.h | 8 ++ arch/x86/kvm/mmu.c | 16 +++- arch/x86/kvm/mmu.h | 4 +- arch/x86/kvm/paging_tmpl.h | 7 ++ arch/x86/kvm/svm.c | 1 + arch/x86/kvm/vmx.c | 1 + arch/x86/kvm/x86.c | 26 ++++-- drivers/acpi/osl.c | 6 +- drivers/ata/ahci.c | 103 +++++++++++++++++++++-- drivers/ata/libahci.c | 3 +- drivers/ata/libata-core.c | 34 +++++++- drivers/ata/libata-eh.c | 3 + drivers/clk/clk.c | 8 ++ drivers/clk/samsung/clk-exynos5420.c | 1 + drivers/firmware/dmi_scan.c | 7 +- drivers/gpio/gpio-kempld.c | 2 +- drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 2 +- drivers/gpu/drm/drm_plane_helper.c | 3 + drivers/gpu/drm/radeon/atombios_crtc.c | 4 +- drivers/gpu/drm/radeon/atombios_dp.c | 20 +++-- drivers/gpu/drm/radeon/cik.c | 2 +- drivers/gpu/drm/radeon/evergreen_hdmi.c | 5 +- drivers/gpu/drm/radeon/ni.c | 3 +- drivers/gpu/drm/radeon/radeon_audio.c | 27 +++--- drivers/gpu/drm/radeon/radeon_connectors.c | 8 +- drivers/gpu/drm/radeon/si.c | 2 +- drivers/hid/hid-logitech-hidpp.c | 20 ----- drivers/hwmon/nct6683.c | 2 + drivers/hwmon/nct6775.c | 2 + drivers/hwmon/ntc_thermistor.c | 9 ++ drivers/hwmon/tmp401.c | 2 +- drivers/iio/accel/st_accel_core.c | 1 + drivers/iio/adc/axp288_adc.c | 12 +-- drivers/iio/adc/cc10001_adc.c | 60 +++++++------ drivers/iio/adc/qcom-spmi-vadc.c | 7 +- drivers/iio/adc/xilinx-xadc-core.c | 5 +- drivers/iio/adc/xilinx-xadc.h | 6 +- drivers/iio/common/st_sensors/st_sensors_core.c | 2 - drivers/iio/gyro/st_gyro_core.c | 1 + drivers/iio/light/hid-sensor-prox.c | 2 - drivers/iio/magnetometer/st_magn_core.c | 1 + drivers/iio/pressure/hid-sensor-press.c | 2 - drivers/iio/pressure/st_pressure_core.c | 1 + drivers/infiniband/core/iwpm_msg.c | 2 +- drivers/input/mouse/elantech.c | 2 +- drivers/iommu/amd_iommu_v2.c | 1 + drivers/iommu/arm-smmu.c | 30 +------ drivers/lguest/core.c | 2 +- drivers/md/dm-table.c | 16 ++-- drivers/md/dm.c | 17 ++-- drivers/md/md.c | 14 +-- drivers/md/raid0.c | 4 +- drivers/md/raid5.c | 3 +- drivers/mfd/da9052-core.c | 8 +- drivers/mmc/host/atmel-mci.c | 9 +- drivers/mtd/ubi/block.c | 2 + drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | 12 ++- drivers/net/wireless/iwlwifi/mvm/d3.c | 13 +-- drivers/net/wireless/iwlwifi/pcie/trans.c | 11 +-- drivers/net/wireless/rt2x00/rt2800usb.c | 1 + drivers/net/wireless/rtlwifi/usb.c | 2 +- drivers/power/reset/at91-reset.c | 4 +- drivers/pwm/pwm-img.c | 76 ++++++++++++++--- drivers/regulator/da9052-regulator.c | 5 +- drivers/scsi/sd.c | 19 ++--- drivers/scsi/storvsc_drv.c | 3 +- drivers/staging/gdm724x/gdm_mux.c | 16 ++-- drivers/staging/vt6655/device_main.c | 40 +++++---- drivers/staging/vt6656/rxtx.c | 14 ++- drivers/target/target_core_pscsi.c | 3 + drivers/target/target_core_pscsi.h | 1 + drivers/thermal/armada_thermal.c | 6 +- drivers/tty/hvc/hvc_xen.c | 2 +- drivers/tty/n_gsm.c | 5 +- drivers/tty/n_hdlc.c | 4 +- drivers/tty/n_tty.c | 22 ++++- drivers/tty/pty.c | 5 +- drivers/tty/tty_buffer.c | 41 ++++++--- drivers/usb/gadget/configfs.c | 1 + drivers/usb/host/xhci-ring.c | 7 +- drivers/usb/host/xhci.h | 2 +- drivers/usb/serial/cp210x.c | 1 + drivers/usb/serial/pl2303.c | 1 - drivers/usb/serial/pl2303.h | 4 - drivers/usb/serial/visor.c | 2 +- drivers/usb/storage/unusual_devs.h | 7 ++ drivers/xen/events/events_base.c | 12 ++- fs/binfmt_elf.c | 2 +- fs/btrfs/extent-tree.c | 2 + fs/btrfs/volumes.c | 1 + fs/dcache.c | 8 +- fs/exec.c | 3 + fs/ext4/ext4_jbd2.c | 6 ++ fs/ext4/extents.c | 2 +- fs/ext4/inode.c | 2 +- fs/fhandle.c | 5 +- fs/fs_pin.c | 4 +- fs/jbd2/recovery.c | 10 ++- fs/jbd2/revoke.c | 18 ++-- fs/jbd2/transaction.c | 25 ++++-- fs/kernfs/dir.c | 9 +- fs/namespace.c | 7 +- fs/nfsd/blocklayout.c | 11 +++ fs/nfsd/nfs4state.c | 21 ++--- fs/omfs/inode.c | 6 +- fs/overlayfs/copy_up.c | 3 + fs/overlayfs/dir.c | 33 ++++++-- fs/overlayfs/super.c | 10 +-- fs/xfs/libxfs/xfs_attr_leaf.c | 8 +- fs/xfs/libxfs/xfs_attr_leaf.h | 2 +- fs/xfs/xfs_attr_inactive.c | 83 ++++++++++-------- fs/xfs/xfs_file.c | 2 +- fs/xfs/xfs_inode.c | 12 +-- include/drm/drm_pciids.h | 1 + include/linux/fs_pin.h | 2 + include/linux/gfp.h | 2 + include/linux/ktime.h | 27 ++++-- include/linux/libata.h | 10 +++ include/linux/memcontrol.h | 4 + include/linux/sched/rt.h | 7 +- include/linux/tty.h | 2 +- include/xen/events.h | 2 +- kernel/locking/rtmutex.c | 12 +-- kernel/module.c | 3 + kernel/sched/core.c | 31 ++++--- kernel/time/hrtimer.c | 14 +-- lib/strnlen_user.c | 3 +- mm/kmemleak.c | 3 +- mm/mempolicy.c | 2 +- net/ceph/osd_client.c | 33 +++++--- net/mac80211/ieee80211_i.h | 3 + net/mac80211/rx.c | 5 +- net/mac80211/wep.c | 6 +- net/sunrpc/auth_gss/gss_rpc_xdr.c | 23 +++-- sound/pci/hda/hda_intel.c | 2 + sound/pci/hda/patch_conexant.c | 12 +++ sound/pci/hda/patch_realtek.c | 9 ++ sound/pci/hda/thinkpad_helper.c | 1 - sound/soc/codecs/mc13783.c | 4 +- sound/soc/codecs/uda1380.c | 2 +- sound/soc/codecs/wm8960.c | 2 +- sound/soc/codecs/wm8994.c | 2 +- sound/soc/soc-dapm.c | 11 ++- sound/usb/quirks.c | 2 + tools/vm/Makefile | 2 +- 170 files changed, 1068 insertions(+), 561 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/148 mnt: Fail collect_mounts when applied to unmounted mounts
4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Eric W. Biederman" <[email protected]>
commit cd4a40174b71acd021877341684d8bb1dc8ea4ae upstream.
The only users of collect_mounts are in audit_tree.c
In audit_trim_trees and audit_add_tree_rule the path passed into collect_mounts is generated from kern_path passed an audit_tree
pathname which is guaranteed to be an absolute path. In those casescollect_mounts is obviously intended to work on mounted paths and if a race results in paths that are unmounted when collect_mounts it is reasonable to fail early.
The paths passed into audit_tag_tree don't have the absolute path check. But are used to play with fsnotify and otherwise interact with the audit_trees, so again operating only on mounted paths appears reasonable.
Avoid having to worry about what happens when we try and audit unmounted filesystems by restricting collect_mounts to mounts that appear in the mount tree.
--- fs/namespace.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
fs/namespace.c +5 -2
@@ -1709,8 +1709,11 @@ struct vfsmount *collect_mounts(struct p {struct mount *tree;namespace_lock (); - tree =copy_tree (real_mount (path->mnt), path->dentry, -CL_COPY_ALL |CL_PRIVATE ); +if (!check_mnt (real_mount (path->mnt))) + tree =ERR_PTR (-EINVAL ); +else + tree =copy_tree (real_mount (path->mnt), path->dentry, +CL_COPY_ALL |CL_PRIVATE );namespace_unlock ();if (IS_ERR (tree))return ERR_CAST (tree);
Greg Kroah-Hartman
maintainerPATCH 2/148 fs_pin: Allow for the possibility that m_list or s_list go unused.
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Eric W. Biederman" <[email protected]>
commit 820f9f147dcce2602eefd9b575bbbd9ea14f0953 upstream.
This is needed to support lazily umounting locked mounts. Because the entire unmounted subtree needs to stay together until there are no users with references to any part of the subtree.
To support this guarantee that the fs_pin m_list and s_list nodes are initialized by initializing them in init_fs_pin allowing for the possibility that pin_insert_group does not touch them.
Further use hlist_del_init in pin_remove so that there is a hlist_unhashed test before the list we attempt to update the previous list item.
--- fs/fs_pin.c | 4 ++-- include/linux/fs_pin.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-)
fs/fs_pin.c +2 -2
@@ -9,8 +9,8 @@ static DEFINE_SPINLOCK(pin_lock);void pin_remove (struct fs_pin *pin) {spin_lock (&pin_lock); -hlist_del (&pin->m_list); -hlist_del (&pin->s_list); +hlist_del_init (&pin->m_list); +hlist_del_init (&pin->s_list);spin_unlock (&pin_lock);spin_lock_irq (&pin->wait.lock); pin->done =1 ;
include/linux/fs_pin.h +2 -0
@@ -13,6 +13,8 @@ struct vfsmount;static inline void init_fs_pin (struct fs_pin *p,void (*kill)(struct fs_pin *)) {init_waitqueue_head (&p->wait); +INIT_HLIST_NODE (&p->s_list); +INIT_HLIST_NODE (&p->m_list); p->kill = kill; }
Greg Kroah-Hartman
maintainerPATCH 3/148 iommu/amd: Fix bug in put_pasid_state_wait
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oded Gabbay <[email protected]>
commit 1bf1b431d98d7e5b5419876d4c219469e60693e1 upstream.
This patch fixes a bug in put_pasid_state_wait that appeared in kernel 4.0 The bug is that pasid_state->count wasn't decremented before entering the wait_event. Thus, the condition in wait_event will never be true.
The fix is to decrement (atomically) the pasid_state->count before the wait_event.
--- drivers/iommu/amd_iommu_v2.c | 1 + 1 file changed, 1 insertion(+)
drivers/iommu/amd_iommu_v2.c +1 -0
@@ -266,6 +266,7 @@ static void put_pasid_state(struct pasidstatic void put_pasid_state_wait (struct pasid_state *pasid_state) { +atomic_dec (&pasid_state->count);wait_event (pasid_state->wq, !atomic_read (&pasid_state->count));free_pasid_state (pasid_state); }
Greg Kroah-Hartman
maintainerPATCH 4/148 iommu/arm-smmu: Fix sign-extension of upstream bus addresses at stage 1
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Will Deacon <[email protected]>
commit 5dc5616ee850eaba055bb469a6c4a471d489140e upstream.
Stage 1 translation is controlled by two sets of page tables (TTBR0 and TTBR1) which grow up and down from zero respectively in the ARMv8 translation regime. For the SMMU, we only care about TTBR0 and, in the case of a 48-bit virtual space, we expect to map virtual addresses 0x0 through to 0xffff_ffff_ffff.
Given that some masters may be incapable of emitting virtual addresses targetting TTBR1 (e.g. because they sit on a 48-bit bus), the SMMU architecture allows bit 47 to be sign-extended, halving the virtual range of TTBR0 but allowing TTBR1 to be used. This is controlled by the SEP field in TTBCR2.
The SMMU driver incorrectly enables this sign-extension feature, which causes problems when userspace addresses are programmed into a master device with the SMMU expecting to map the incoming transactions via TTBR0; if the top bit of address is set, we will instead get a translation fault since TTBR1 walks are disabled in the TTBCR.
This patch fixes the issue by disabling sign-extension of a fixed virtual address bit and instead basing the behaviour on the upstream bus
size: the incoming address is zero extended unless the upstream bus is only 49 bits wide, in which case bit 48 is used as the sign bit and is replicated to the upper bits.
--- drivers/iommu/arm-smmu.c | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-)
drivers/iommu/arm-smmu.c +2 -28
@@ -224,14 +224,7 @@#define RESUME_TERMINATE (1 << 0)#define TTBCR2_SEP_SHIFT 15 -#define TTBCR2_SEP_MASK 0x7 - -#define TTBCR2_ADDR_32 0 -#define TTBCR2_ADDR_36 1 -#define TTBCR2_ADDR_40 2 -#define TTBCR2_ADDR_42 3 -#define TTBCR2_ADDR_44 4 -#define TTBCR2_ADDR_48 5 +#define TTBCR2_SEP_UPSTREAM (0x7 << TTBCR2_SEP_SHIFT)#define TTBRn_HI_ASID_SHIFT 16
@@ -783,26 +776,7 @@ static void arm_smmu_init_context_bank(swritel_relaxed (reg, cb_base +ARM_SMMU_CB_TTBCR );if (smmu->version >ARM_SMMU_V1 ) { reg = pgtbl_cfg->arm_lpae_s1_cfg.tcr >>32 ; -switch (smmu->va_size) { -case 32 : - reg |= (TTBCR2_ADDR_32 <<TTBCR2_SEP_SHIFT ); -break ; -case 36 : - reg |= (TTBCR2_ADDR_36 <<TTBCR2_SEP_SHIFT ); -break ; -case 40 : - reg |= (TTBCR2_ADDR_40 <<TTBCR2_SEP_SHIFT ); -break ; -case 42 : - reg |= (TTBCR2_ADDR_42 <<TTBCR2_SEP_SHIFT ); -break ; -case 44 : - reg |= (TTBCR2_ADDR_44 <<TTBCR2_SEP_SHIFT ); -break ; -case 48 : - reg |= (TTBCR2_ADDR_48 <<TTBCR2_SEP_SHIFT ); -break ; - } + reg |=TTBCR2_SEP_UPSTREAM ;writel_relaxed (reg, cb_base +ARM_SMMU_CB_TTBCR2 ); } }else {
Greg Kroah-Hartman
maintainerPATCH 5/148 Revert "KVM: x86: drop fpu_activate hook"
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paolo Bonzini <[email protected]>
commit 0fdd74f7784b5cdff7075736992bbb149b1ae49c upstream.
This reverts commit 4473b570a7ebb502f63f292ccfba7df622e5fdd3. We'll use the hook again.
--- arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/svm.c | 1 + arch/x86/kvm/vmx.c | 1 + 3 files changed, 3 insertions(+)
arch/x86/include/asm/kvm_host.h +1 -0
@@ -735,6 +735,7 @@ struct kvm_x86_ops {void (*cache_reg)(struct kvm_vcpu *vcpu,enum kvm_reg reg);unsigned long (*get_rflags)(struct kvm_vcpu *vcpu);void (*set_rflags)(struct kvm_vcpu *vcpu,unsigned long rflags); +void (*fpu_activate)(struct kvm_vcpu *vcpu);void (*fpu_deactivate)(struct kvm_vcpu *vcpu);void (*tlb_flush)(struct kvm_vcpu *vcpu);
arch/x86/kvm/svm.c +1 -0
@@ -4374,6 +4374,7 @@ static struct kvm_x86_ops svm_x86_ops = .cache_reg = svm_cache_reg, .get_rflags = svm_get_rflags, .set_rflags = svm_set_rflags, + .fpu_activate = svm_fpu_activate, .fpu_deactivate = svm_fpu_deactivate, .tlb_flush = svm_flush_tlb,
arch/x86/kvm/vmx.c +1 -0
@@ -10179,6 +10179,7 @@ static struct kvm_x86_ops vmx_x86_ops = .cache_reg = vmx_cache_reg, .get_rflags = vmx_get_rflags, .set_rflags = vmx_set_rflags, + .fpu_activate = vmx_fpu_activate, .fpu_deactivate = vmx_fpu_deactivate, .tlb_flush = vmx_flush_tlb,
Greg Kroah-Hartman
maintainerPATCH 6/148 x86/mce: Fix MCE severity messages
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Borislav Petkov <[email protected]>
commit 17fea54bf0ab34fa09a06bbde2f58ed7bbdf9299 upstream.
Derek noticed that a critical MCE gets reported with the wrong error type description:
[Hardware Error]: CPU 34: Machine Check Exception: 5 Bank 9: f200003f000100b0 [Hardware Error]: RIP !INEXACT! 10:<ffffffff812e14c1> {intel_idle+0xb1/0x170} [Hardware Error]: TSC 49587b8e321cb
[Hardware Error]: PROCESSOR 0:306e4 TIME 1431561296 SOCKET 1 APIC 29 [Hardware Error]: Some CPUs didn't answer in synchronization [Hardware Error]: Machine check: Invalid
^^^^^^^
The last line with 'Invalid' should have printed the high level MCE error type description we get from mce_severity, i.e. something like:
[Hardware Error]: Machine check: Action required: data load error in a user process
this happens due to the fact that mce_no_way_out() iterates over all MCA banks and possibly overwrites the @msg argument which is used in the panic printing later.
Change behavior to take the message of only and the (last) critical MCE it detects.
--- arch/x86/kernel/cpu/mcheck/mce.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
arch/x86/kernel/cpu/mcheck/mce.c +5 -2
@@ -705,6 +705,7 @@ static int mce_no_way_out(struct mce *m, struct pt_regs *regs) {int i, ret =0 ; +char *tmp;for (i =0 ; i < mca_cfg.banks; i++) { m->status =mce_rdmsrl (MSR_IA32_MCx_STATUS (i));
@@ -713,9 +714,11 @@ static int mce_no_way_out(struct mce *m,if (quirk_no_way_out)quirk_no_way_out (i, m, regs); } -if (mce_severity (m, mca_cfg.tolerant, msg, true) >= -MCE_PANIC_SEVERITY ) + +if (mce_severity (m, mca_cfg.tolerant, &tmp, true) >=MCE_PANIC_SEVERITY ) { + *msg = tmp; ret =1 ; + } }return ret; }
Greg Kroah-Hartman
maintainerPATCH 7/148 x86/fpu: Disable XSAVES* support for now
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ingo Molnar <[email protected]>
commit e88221c50cadade0eb4f7f149f4967d760212695 upstream.
The kernel's handling of 'compacted' xsave state layout is buggy:
http://marc.info/?l=linux-kernel&m=142967852317199
I don't have such a system, and the description there is vague, but from extrapolation I guess that there were two kinds of bugs observed:
- boot crashes, due to size calculations being wrong and the dynamic allocation allocating a too small xstate area. (This is now fixed in the new FPU code - but still present in stable kernels.)
- FPU state corruption and ABI breakage: if signal handlers try to change the FPU state in standard format, which then the kernel tries to restore in the compacted format.
These breakages are scary, but they only occur on a small number of systems that have XSAVES* CPU support. Yet we have had XSAVES support in the upstream kernel for a large number of stable kernel releases, and the fixes are involved and unproven.
So do the safe resolution first: disable XSAVES* support and only use the standard xstate format. This makes the code work and is easy to backport.
On top of this we can work on enabling (and testing!) proper compacted format support, without backporting pressure, on top of the new, cleaned up FPU code.
--- arch/x86/kernel/i387.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
arch/x86/kernel/i387.c +15 -0
@@ -169,6 +169,21 @@ static void init_thread_xstate(void) xstate_size =sizeof (struct i387_fxsave_struct ); else xstate_size =sizeof (struct i387_fsave_struct ); + +/* +* Quirk: we don't yet handle the XSAVES* instructions +* correctly, as we don't correctly convert between +* standard and compacted format when interfacing +* with user-space - so disable it for now. +* +* The difference is small: with recent CPUs the +* compacted format is only marginally smaller than +* the standard FPU state format. +* +* ( This is easy to backport while we are fixing +* XSAVES* support. ) +*/ +setup_clear_cpu_cap (X86_FEATURE_XSAVES ); }/*
Greg Kroah-Hartman
maintainerPATCH 8/148 KVM: MMU: fix CR4.SMEP=1, CR0.WP=0 with shadow pages
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paolo Bonzini <[email protected]>
commit 898761158be7682082955e3efa4ad24725305fc7 upstream.
smep_andnot_wp is initialized in kvm_init_shadow_mmu and shadow pages should not be reused for different values of it. Thus, it has to be added to the mask in kvm_mmu_pte_write.
--- arch/x86/kvm/mmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kvm/mmu.c +1 -1
@@ -4238,7 +4238,7 @@ void kvm_mmu_pte_write(struct kvm_vcpu * ++vcpu->kvm->stat.mmu_pte_write;kvm_mmu_audit (vcpu,AUDIT_PRE_PTE_WRITE ); - mask.cr0_wp = mask.cr4_pae = mask.nxe =1 ; + mask.cr0_wp = mask.cr4_pae = mask.nxe = mask.smep_andnot_wp =1 ;for_each_gfn_indirect_valid_sp (vcpu->kvm, sp, gfn) {if (detect_write_misaligned (sp, gpa, bytes) ||detect_write_flooding (sp)) {
Greg Kroah-Hartman
maintainerPATCH 9/148 KVM: MMU: fix smap permission check
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiao Guangrong <[email protected]>
commit 7cbeed9bce7580479bb97457dad220cb3594b875 upstream.
Current permission check assumes that RSVD bit in PFEC is always zero, however, it is not true since MMIO #PF will use it to quickly identify MMIO access
Fix it by clearing the bit if walking guest page table is needed
--- arch/x86/kvm/mmu.h | 2 ++ arch/x86/kvm/paging_tmpl.h | 7 +++++++ 2 files changed, 9 insertions(+)
arch/x86/kvm/mmu.h +2 -0
@@ -166,6 +166,8 @@ static inline bool permission_fault(struint index = (pfec >>1 ) + (smap >> (X86_EFLAGS_AC_BIT -PFERR_RSVD_BIT +1 )); +WARN_ON (pfec &PFERR_RSVD_MASK ); +return (mmu->permissions[index] >> pte_access) &1 ; }
arch/x86/kvm/paging_tmpl.h +7 -0
@@ -718,6 +718,13 @@ static int FNAME(page_fault)(struct kvm_ mmu_is_nested(vcpu));if (likely (r !=RET_MMIO_PF_INVALID ))return r; + +/* +* page fault with PFEC.RSVD = 1 is caused by shadow +* page fault, should not be used to walk guest page +* table. +*/ + error_code &= ~PFERR_RSVD_MASK ; }; r =mmu_topup_memory_caches (vcpu);
Greg Kroah-Hartman
maintainerPATCH 10/148 kvm: fix crash in kvm_vcpu_reload_apic_access_page
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Arcangeli <[email protected]>
commit e8fd5e9e9984675f45b9a5485909c143fbde248f upstream.
memslot->userfault_addr is set by the kernel with a mmap executed from the kernel but the userland can still munmap it and lead to the below oops after memslot->userfault_addr points to a host virtual address that has no vma or mapping.
[ 327.538306] BUG: unable to handle kernel paging request at fffffffffffffffe [ 327.538407] IP: [<ffffffff811a7b55>] put_page+0x5/0x50 [ 327.538474] PGD 1a01067 PUD 1a03067 PMD 0 [ 327.538529] Oops: 0000 [#1] SMP [ 327.538574] Modules linked in: macvtap macvlan xt_CHECKSUM iptable_mangle ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ipt_REJECT iptable_filter ip_tables tun bridge stp llc rpcsec_gss_krb5 nfsv4 dns_resolver nfs fscache xprtrdma ib_isert iscsi_target_mod ib_iser libiscsi scsi_transport_iscsi ib_srpt target_core_mod ib_srp scsi_transport_srp scsi_tgt ib_ipoib rdma_ucm ib_ucm ib_uverbs ib_umad rdma_cm ib_cm iw_cm ipmi_devintf iTCO_wdt iTCO_vendor_support intel_powerclamp coretemp dcdbas intel_rapl kvm_intel kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel lrw gf128mul glue_helper ablk_helper cryptd pcspkr sb_edac edac_core ipmi_si ipmi_msghandler acpi_pad wmi acpi_power_meter lpc_ich mfd_core mei_me [ 327.539488] mei shpchp nfsd auth_rpcgss nfs_acl lockd grace sunrpc mlx4_ib ib_sa ib_mad ib_core mlx4_en vxlan ib_addr ip_tunnel xfs libcrc32c sd_mod crc_t10dif crct10dif_common crc32c_intel mgag200 syscopyarea sysfillrect sysimgblt i2c_algo_bit drm_kms_helper ttm drm ahci i2c_core libahci mlx4_core libata tg3 ptp pps_core megaraid_sas ntb dm_mirror dm_region_hash dm_log dm_mod [ 327.539956] CPU: 3 PID: 3161 Comm: qemu-kvm Not tainted 3.10.0-240.el7.userfault19.4ca4011.x86_64.debug #1 [ 327.540045] Hardware name: Dell Inc. PowerEdge R420/0CN7CM, BIOS 2.1.2 01/20/2014 [ 327.540115] task: ffff8803280ccf00 ti: ffff880317c58000 task.ti: ffff880317c58000 [ 327.540184] RIP: 0010:[<ffffffff811a7b55>] [<ffffffff811a7b55>] put_page+0x5/0x50 [ 327.540261] RSP: 0018:ffff880317c5bcf8 EFLAGS: 00010246 [ 327.540313] RAX: 00057ffffffff000 RBX: ffff880616a20000 RCX: 0000000000000000 [ 327.540379] RDX: 0000000000002014 RSI: 00057ffffffff000 RDI: fffffffffffffffe [ 327.540445] RBP: ffff880317c5bd10 R08: 0000000000000103 R09: 0000000000000000 [ 327.540511] R10: 0000000000000000 R11: 0000000000000000 R12: fffffffffffffffe [ 327.540576] R13: 0000000000000000 R14: ffff880317c5bd70 R15: ffff880317c5bd50 [ 327.540643] FS: 00007fd230b7f700(0000) GS:ffff880630800000(0000) knlGS:0000000000000000 [ 327.540717] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 327.540771] CR2: fffffffffffffffe CR3: 000000062a2c3000 CR4: 00000000000427e0 [ 327.540837] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 327.540904] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 327.540974] Stack: [ 327.541008] ffffffffa05d6d0c ffff880616a20000 0000000000000000 ffff880317c5bdc0 [ 327.541093] ffffffffa05ddaa2 0000000000000000 00000000002191bf 00000042f3feab2d [ 327.541177] 00000042f3feab2d 0000000000000002 0000000000000001 0321000000000000 [ 327.541261] Call Trace: [ 327.541321] [<ffffffffa05d6d0c>] ? kvm_vcpu_reload_apic_access_page+0x6c/0x80 [kvm] [ 327.543615] [<ffffffffa05ddaa2>] vcpu_enter_guest+0x3f2/0x10f0 [kvm] [ 327.545918] [<ffffffffa05e2f10>] kvm_arch_vcpu_ioctl_run+0x2b0/0x5a0 [kvm] [ 327.548211] [<ffffffffa05e2d02>] ? kvm_arch_vcpu_ioctl_run+0xa2/0x5a0 [kvm] [ 327.550500] [<ffffffffa05ca845>] kvm_vcpu_ioctl+0x2b5/0x680 [kvm] [ 327.552768] [<ffffffff810b8d12>] ? creds_are_invalid.part.1+0x12/0x50 [ 327.555069] [<ffffffff810b8d71>] ? creds_are_invalid+0x21/0x30 [ 327.557373] [<ffffffff812d6066>] ? inode_has_perm.isra.49.constprop.65+0x26/0x80 [ 327.559663] [<ffffffff8122d985>] do_vfs_ioctl+0x305/0x530 [ 327.561917] [<ffffffff8122dc51>] SyS_ioctl+0xa1/0xc0 [ 327.564185] [<ffffffff816de829>] system_call_fastpath+0x16/0x1b [ 327.566480] Code: 0b 31 f6 4c 89 e7 e8 4b 7f ff ff 0f 0b e8 24 fd ff ff e9 a9 fd ff ff 66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 66 66 66 66 90 <48> f7 07 00 c0 00 00 55 48 89 e5 75 2a 8b 47 1c 85 c0 74 1e f0
--- arch/x86/kvm/x86.c | 2 ++ 1 file changed, 2 insertions(+)
arch/x86/kvm/x86.c +2 -0
@@ -6141,6 +6141,8 @@ void kvm_vcpu_reload_apic_access_page(streturn ; page =gfn_to_page (vcpu->kvm,APIC_DEFAULT_PHYS_BASE >>PAGE_SHIFT ); +if (is_error_page (page)) +return ; kvm_x86_ops->set_apic_access_page_addr (vcpu,page_to_phys (page));/*
Greg Kroah-Hartman
maintainerPATCH 11/148 KVM: MMU: fix SMAP virtualization
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiao Guangrong <[email protected]>
commit 0be0226f07d14b153a5eedf2bb86e1eb7dcefab5 upstream.
KVM may turn a user page to a kernel page when kernel writes a readonly user page if CR0.WP = 1. This shadow page entry will be reused after SMAP is enabled so that kernel is allowed to access this user page
Fix it by setting SMAP && !CR0.WP into shadow page's role and reset mmu once CR4.SMAP is updated
--- Documentation/virtual/kvm/mmu.txt | 18 ++++++++++++++---- arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/mmu.c | 16 ++++++++++++---- arch/x86/kvm/mmu.h | 2 -- arch/x86/kvm/x86.c | 8 +++----- 5 files changed, 30 insertions(+), 15 deletions(-)
Documentation/virtual/kvm/mmu.txt +14 -4
@@ -169,6 +169,10 @@ Shadow pages contain the following infor Contains the value of cr4.smep && !cr0.wp for which the page is valid (pages for which this is true are different from other pages; see the treatment of cr0.wp=0 below). + role.smap_andnot_wp: + Contains the value of cr4.smap && !cr0.wp for which the page is valid + (pages for which this is true are different from other pages; see the + treatment of cr0.wp=0 below). gfn: Either the guest page table containing the translations shadowed by this page, or the base page frame for linear translations. See role.direct.
@@ -344,10 +348,16 @@ on fault type: (user write faults generate a #PF) -In the first case there is an additional complication if CR4.SMEP is -enabled: since we've turned the page into a kernel page, the kernel may now -execute it. We handle this by also setting spte.nx. If we get a user -fetch or read fault, we'll change spte.u=1 and spte.nx=gpte.nx back. +In the first case there are two additional complications: +- if CR4.SMEP is enabled: since we've turned the page into a kernel page, + the kernel may now execute it. We handle this by also setting spte.nx. + If we get a user fetch or read fault, we'll change spte.u=1 and + spte.nx=gpte.nx back. +- if CR4.SMAP is disabled: since the page has been changed to a kernel + page, it can not be reused when CR4.SMAP is enabled. We set + CR4.SMAP && !CR0.WP into shadow page's role to avoid this case. Note, + here we do not care the case that CR4.SMAP is enabled since KVM will + directly inject #PF to guest due to failed permission check. To prevent an spte that was converted into a kernel page with cr0.wp=0 from being written by the kernel after cr0.wp has changed to 1, we make
arch/x86/include/asm/kvm_host.h +1 -0
@@ -212,6 +212,7 @@ union kvm_mmu_page_role { unsigned nxe:1; unsigned cr0_wp:1; unsigned smep_andnot_wp:1; + unsigned smap_andnot_wp:1; }; };
arch/x86/kvm/mmu.c +12 -4
@@ -3736,8 +3736,8 @@ static void reset_rsvds_bits_mask_ept(st } } -void update_permission_bitmask (struct kvm_vcpu *vcpu, -struct kvm_mmu *mmu,bool ept) +static void update_permission_bitmask (struct kvm_vcpu *vcpu, +struct kvm_mmu *mmu,bool ept) {unsigned bit, byte, pfec;u8 map;
@@ -3918,6 +3918,7 @@ static void init_kvm_tdp_mmu(struct kvm_void kvm_init_shadow_mmu (struct kvm_vcpu *vcpu) {bool smep =kvm_read_cr4_bits (vcpu,X86_CR4_SMEP ); +bool smap =kvm_read_cr4_bits (vcpu,X86_CR4_SMAP );struct kvm_mmu *context = &vcpu->arch.mmu;MMU_WARN_ON (VALID_PAGE (context->root_hpa));
@@ -3936,6 +3937,8 @@ void kvm_init_shadow_mmu(struct kvm_vcpu context->base_role.cr0_wp =is_write_protection (vcpu); context->base_role.smep_andnot_wp = smep && !is_write_protection (vcpu); + context->base_role.smap_andnot_wp + = smap && !is_write_protection (vcpu); }EXPORT_SYMBOL_GPL (kvm_init_shadow_mmu);
@@ -4207,12 +4210,18 @@ void kvm_mmu_pte_write(struct kvm_vcpu * const u8 *new, int bytes) {gfn_t gfn = gpa >>PAGE_SHIFT ; -union kvm_mmu_page_role mask = { .word =0 };struct kvm_mmu_page *sp;LIST_HEAD (invalid_list);u64 entry, gentry, *spte;int npte;bool remote_flush, local_flush, zap_page; +union kvm_mmu_page_role mask = (union kvm_mmu_page_role ) { + .cr0_wp =1 , + .cr4_pae =1 , + .nxe =1 , + .smep_andnot_wp =1 , + .smap_andnot_wp =1 , + };/* * If we don't have indirect shadow pages, it means no page is
@@ -4238,7 +4247,6 @@ void kvm_mmu_pte_write(struct kvm_vcpu * ++vcpu->kvm->stat.mmu_pte_write;kvm_mmu_audit (vcpu,AUDIT_PRE_PTE_WRITE ); - mask.cr0_wp = mask.cr4_pae = mask.nxe = mask.smep_andnot_wp =1 ;for_each_gfn_indirect_valid_sp (vcpu->kvm, sp, gfn) {if (detect_write_misaligned (sp, gpa, bytes) ||detect_write_flooding (sp)) {
arch/x86/kvm/mmu.h +0 -2
@@ -71,8 +71,6 @@ enum {int handle_mmio_page_fault_common (struct kvm_vcpu *vcpu,u64 addr,bool direct);void kvm_init_shadow_mmu (struct kvm_vcpu *vcpu);void kvm_init_shadow_ept_mmu (struct kvm_vcpu *vcpu,bool execonly); -void update_permission_bitmask (struct kvm_vcpu *vcpu,struct kvm_mmu *mmu, -bool ept);static inline unsigned int kvm_mmu_available_pages (struct kvm *kvm) {
arch/x86/kvm/x86.c +3 -5
@@ -702,8 +702,9 @@ EXPORT_SYMBOL_GPL(kvm_set_xcr);int kvm_set_cr4 (struct kvm_vcpu *vcpu,unsigned long cr4) {unsigned long old_cr4 =kvm_read_cr4 (vcpu); -unsigned long pdptr_bits =X86_CR4_PGE |X86_CR4_PSE | -X86_CR4_PAE |X86_CR4_SMEP ; +unsigned long pdptr_bits =X86_CR4_PGE |X86_CR4_PSE |X86_CR4_PAE | +X86_CR4_SMEP |X86_CR4_SMAP ; +if (cr4 &CR4_RESERVED_BITS )return 1 ;
@@ -744,9 +745,6 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, u (!(cr4 & X86_CR4_PCIDE) && (old_cr4 & X86_CR4_PCIDE)))kvm_mmu_reset_context (vcpu); -if ((cr4 ^ old_cr4) &X86_CR4_SMAP ) -update_permission_bitmask (vcpu, vcpu->arch.walk_mmu, false); -if ((cr4 ^ old_cr4) &X86_CR4_OSXSAVE )kvm_update_cpuid (vcpu);
Greg Kroah-Hartman
maintainerPATCH 12/148 kvm/fpu: Enable eager restore kvm FPU for MPX
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Liang Li <[email protected]>
commit c447e76b4cabb49ddae8e49c5758f031f35d55fb upstream.
The MPX feature requires eager KVM FPU restore support. We have verified that MPX cannot work correctly with the current lazy KVM FPU restore mechanism. Eager KVM FPU restore should be enabled if the MPX feature is exposed to VM.
--- arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/cpuid.c | 4 ++++ arch/x86/kvm/cpuid.h | 8 ++++++++ arch/x86/kvm/x86.c | 16 ++++++++++++++-- 4 files changed, 27 insertions(+), 2 deletions(-)
arch/x86/include/asm/kvm_host.h +1 -0
@@ -405,6 +405,7 @@ struct kvm_vcpu_arch {struct kvm_mmu_memory_cache mmu_page_header_cache;struct fpu guest_fpu; +bool eager_fpu;u64 xcr0;u64 guest_supported_xcr0;u32 guest_xstate_size;
arch/x86/kvm/cpuid.c +4 -0
@@ -16,6 +16,8 @@#include <linux/module.h> #include <linux/vmalloc.h> #include <linux/uaccess.h> +#include <asm/i387.h> /* For use_eager_fpu. Ugh! */ +#include <asm/fpu-internal.h> /* For use_eager_fpu. Ugh! */ #include <asm/user.h> #include <asm/xsave.h> #include "cpuid.h"
@@ -95,6 +97,8 @@ int kvm_update_cpuid(struct kvm_vcpu *vcif (best && (best->eax & (F (XSAVES ) |F (XSAVEC )))) best->ebx =xstate_required_size (vcpu->arch.xcr0, true); + vcpu->arch.eager_fpu =guest_cpuid_has_mpx (vcpu); +/* * The existing code assumes virtual address is 48-bit in the canonical * address checks; exit if it is ever changed.
arch/x86/kvm/cpuid.h +8 -0
@@ -111,4 +111,12 @@ static inline bool guest_cpuid_has_rtm(s best =kvm_find_cpuid_entry (vcpu,7 ,0 ); return best && (best->ebx & bit(X86_FEATURE_RTM)); } + +static inline bool guest_cpuid_has_mpx (struct kvm_vcpu *vcpu) +{ +struct kvm_cpuid_entry2 *best; + + best =kvm_find_cpuid_entry (vcpu,7 ,0 ); +return best && (best->ebx &bit (X86_FEATURE_MPX )); +}#endif
arch/x86/kvm/x86.c +14 -2
@@ -6996,7 +6996,9 @@ void kvm_put_guest_fpu(struct kvm_vcpu *fpu_save_init (&vcpu->arch.guest_fpu);__kernel_fpu_end (); ++vcpu->stat.fpu_reload; -kvm_make_request (KVM_REQ_DEACTIVATE_FPU , vcpu); +if (!vcpu->arch.eager_fpu) +kvm_make_request (KVM_REQ_DEACTIVATE_FPU , vcpu); +trace_kvm_fpu (0 ); }
@@ -7012,11 +7014,21 @@ void kvm_arch_vcpu_free(struct kvm_vcpustruct kvm_vcpu *kvm_arch_vcpu_create (struct kvm *kvm,unsigned int id) { +struct kvm_vcpu *vcpu; +if (check_tsc_unstable () &&atomic_read (&kvm->online_vcpus) !=0 )printk_once (KERN_WARNING "kvm: SMP vm created on host with unstable TSC; " "guest TSC will not be reliable\n" ); -return kvm_x86_ops->vcpu_create (kvm, id); + + vcpu = kvm_x86_ops->vcpu_create (kvm, id); + +/* +* Activate fpu unconditionally in case the guest needs eager FPU. It will be +* deactivated soon if it doesn't. +*/ + kvm_x86_ops->fpu_activate (vcpu); +return vcpu; }int kvm_arch_vcpu_setup (struct kvm_vcpu *vcpu)
Greg Kroah-Hartman
maintainerPATCH 13/148 ktime: Fix ktime_divns to do signed division
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Stultz <[email protected]>
commit f7bcb70ebae0dcdb5a2d859b09e4465784d99029 upstream.
It was noted that the 32bit implementation of ktime_divns() was doing unsigned division and didn't properly handle negative values.
And when a ktime helper was changed to utilize ktime_divns, it caused a regression on some IR blasters. See the following bugzilla for details:
https://bugzilla.redhat.com/show_bug.cgi?id=1200353
This patch fixes the problem in ktime_divns by checking and preserving the sign bit, and then reapplying it if appropriate after the division, it also changes the return type to a s64 to make it more obvious this is expected.
Nicolas also pointed out that negative dividers would cause infinite loops on 32bit systems, negative dividers is unlikely for users of this function, but out of caution this patch adds checks for negative dividers for both 32-bit (BUG_ON) and 64-bit(WARN_ON) versions to make sure no such use cases creep in.
[ tglx: Hand an u64 to do_div() to avoid the compiler warning ]
--- include/linux/ktime.h | 27 +++++++++++++++++++++------ kernel/time/hrtimer.c | 14 ++++++++------ 2 files changed, 29 insertions(+), 12 deletions(-)
include/linux/ktime.h +21 -6
@@ -166,19 +166,34 @@ static inline bool ktime_before(const kt }#if BITS_PER_LONG <64 -extern u64 __ktime_divns (const ktime_t kt,s64 div); -static inline u64 ktime_divns (const ktime_t kt,s64 div) +extern s64 __ktime_divns (const ktime_t kt,s64 div); +static inline s64 ktime_divns (const ktime_t kt,s64 div) { +/* +* Negative divisors could cause an inf loop, +* so bug out here. +*/ +BUG_ON (div <0 );if (__builtin_constant_p (div) && !(div >>32 )) { -u64 ns = kt.tv64; -do_div (ns, div); -return ns; +s64 ns = kt.tv64; +u64 tmp = ns <0 ? -ns : ns; + +do_div (tmp, div); +return ns <0 ? -tmp : tmp; }else {return __ktime_divns (kt, div); } }#else /* BITS_PER_LONG < 64 */ -# define ktime_divns (kt, div) (u64)((kt).tv64 / (div)) +static inline s64 ktime_divns (const ktime_t kt,s64 div) +{ +/* +* 32-bit implementation cannot handle negative divisors, +* so catch them on 64bit as well. +*/ +WARN_ON (div <0 ); +return kt.tv64 / div; +}#endif static inline s64 ktime_to_us (const ktime_t kt)
kernel/time/hrtimer.c +8 -6
@@ -266,21 +266,23 @@ lock_hrtimer_base(const struct hrtimer */* * Divide a ktime value by a nanosecond value */ -u64 __ktime_divns (const ktime_t kt,s64 div) +s64 __ktime_divns (const ktime_t kt,s64 div) { -u64 dclc;int sft =0 ; +s64 dclc; +u64 tmp; dclc =ktime_to_ns (kt); + tmp = dclc <0 ? -dclc : dclc; +/* Make sure the divisor is less than 2^32: */ while (div >>32 ) { sft++; div >>=1 ; } - dclc >>= sft; -do_div (dclc, (unsigned long ) div); - -return dclc; + tmp >>= sft; +do_div (tmp, (unsigned long ) div); +return dclc <0 ? -tmp : tmp; }EXPORT_SYMBOL_GPL (__ktime_divns);#endif /* BITS_PER_LONG >= 64 */
Greg Kroah-Hartman
maintainerPATCH 14/148 fs, omfs: add NULL terminator in the end up the token list
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sasha Levin <[email protected]>
commit dcbff39da3d815f08750552fdd04f96b51751129 upstream.
match_token() expects a NULL terminator at the end of the token list so that it would know where to stop. Not having one causes it to overrun to invalid memory.
In practice, passing a mount option that omfs didn't recognize would sometimes panic the system.
--- fs/omfs/inode.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/omfs/inode.c +2 -1
@@ -359,7 +359,7 @@ nomem: }enum { - Opt_uid, Opt_gid, Opt_umask, Opt_dmask, Opt_fmask + Opt_uid, Opt_gid, Opt_umask, Opt_dmask, Opt_fmask, Opt_err };static const match_table_t tokens = {
@@ -368,6 +368,7 @@ static const match_table_t tokens = { {Opt_umask, "umask=%o"}, {Opt_dmask, "dmask=%o"}, {Opt_fmask, "fmask=%o"}, + {Opt_err, NULL}, };static int parse_options (char *options,struct omfs_sb_info *sbi)
Greg Kroah-Hartman
maintainerPATCH 15/148 omfs: fix sign confusion for bitmap loop counter
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bob Copeland <[email protected]>
commit c0345ee57d461343586b5e1e2f9c3c3766d07fe6 upstream.
The count variable is used to iterate down to (below) zero from the size of the bitmap and handle the one-filling the remainder of the last partial bitmap block. The loop conditional expects count to be signed in order to detect when the final block is processed, after which count goes negative.
Unfortunately, a recent change made this unsigned along with some other related fields. The result of is this is that during mount, omfs_get_imap will overrun the bitmap array and corrupt memory unless number of blocks happens to be a multiple of 8 * blocksize.
Fix by changing count back to signed: it is guaranteed to fit in an s32 without overflow due to an enforced limit on the number of blocks in the filesystem.
--- fs/omfs/inode.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/omfs/inode.c +2 -1
@@ -306,7 +306,8 @@ static const struct super_operations omf*/ static int omfs_get_imap (struct super_block *sb) { -unsigned int bitmap_size, count, array_size; +unsigned int bitmap_size, array_size; +int count;struct omfs_sb_info *sbi =OMFS_SB (sb);struct buffer_head *bh;unsigned long **ptr;
Greg Kroah-Hartman
maintainerPATCH 16/148 xfs: xfs_attr_inactive leaves inconsistent attr fork state behind
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Chinner <[email protected]>
commit 6dfe5a049f2d48582050339d2a6b6fda36dfd14c upstream.
xfs_attr_inactive() is supposed to clean up the attribute fork when the inode is being freed. While it removes attribute fork extents, it completely ignores attributes in local format, which means that there can still be active attributes on the inode after xfs_attr_inactive() has run.
This leads to problems with concurrent inode writeback - the in-core inode attribute fork is removed without locking on the assumption that nothing will be attempting to access the attribute fork after a call to xfs_attr_inactive() because it isn't supposed to exist on disk any more.
To fix this, make xfs_attr_inactive() completely remove all traces of the attribute fork from the inode, regardless of it's state. Further, also remove the in-core attribute fork structure safely so that there is nothing further that needs to be done by callers to clean up the attribute fork. This means we can remove the in-core and on-disk attribute forks atomically.
Also, on error simply remove the in-memory attribute fork. There's nothing that can be done with it once we have failed to remove the on-disk attribute fork, so we may as well just blow it away here anyway.
--- fs/xfs/libxfs/xfs_attr_leaf.c | 8 ++-- fs/xfs/libxfs/xfs_attr_leaf.h | 2 - fs/xfs/xfs_attr_inactive.c | 83 ++++++++++++++++++++++++------------------ fs/xfs/xfs_inode.c | 12 ++---- 4 files changed, 58 insertions(+), 47 deletions(-)
fs/xfs/libxfs/xfs_attr_leaf.c +4 -4
@@ -498,8 +498,8 @@ xfs_attr_shortform_add(xfs_da_args_t *ar* After the last attribute is removed revert to original inode format, * making all literal area available to the data fork once more. */ -STATIC void -xfs_attr_fork_reset ( +void +xfs_attr_fork_remove (struct xfs_inode *ip,struct xfs_trans *tp) {
@@ -565,7 +565,7 @@ xfs_attr_shortform_remove(xfs_da_args_t (mp->m_flags & XFS_MOUNT_ATTR2) && (dp->i_d.di_format != XFS_DINODE_FMT_BTREE) && !(args->op_flags & XFS_DA_OP_ADDNAME)) { - xfs_attr_fork_reset(dp, args->trans); + xfs_attr_fork_remove(dp, args->trans); } else {xfs_idata_realloc (dp, -size,XFS_ATTR_FORK ); dp->i_d.di_forkoff =xfs_attr_shortform_bytesfit (dp, totsize);
@@ -828,7 +828,7 @@ xfs_attr3_leaf_to_shortform(if (forkoff ==-1 ) {ASSERT (dp->i_mount->m_flags &XFS_MOUNT_ATTR2 );ASSERT (dp->i_d.di_format !=XFS_DINODE_FMT_BTREE ); -xfs_attr_fork_reset (dp, args->trans); +xfs_attr_fork_remove (dp, args->trans); goto out; }
fs/xfs/libxfs/xfs_attr_leaf.h +1 -1
@@ -53,7 +53,7 @@ int xfs_attr_shortform_remove(struct xfsint xfs_attr_shortform_list (struct xfs_attr_list_context *context);int xfs_attr_shortform_allfit (struct xfs_buf *bp,struct xfs_inode *dp);int xfs_attr_shortform_bytesfit (xfs_inode_t *dp,int bytes); - +void xfs_attr_fork_remove (struct xfs_inode *ip,struct xfs_trans *tp);/* * Internal routines when attribute fork size == XFS_LBSIZE(mp).
fs/xfs/xfs_attr_inactive.c +49 -34
114 lines not on this page · raw message
fs/xfs/xfs_inode.c +4 -8
@@ -1889,21 +1889,17 @@ xfs_inactive(/* * If there are attributes associated with the file then blow them away * now. The code calls a routine that recursively deconstructs the -* attribute fork. We need to just commit the current transaction -* because we can't use it for xfs_attr_inactive(). +* attribute fork. If also blows away the in-core attribute fork. */ -if (ip->i_d.di_anextents >0 ) { -ASSERT (ip->i_d.di_forkoff !=0 ); - +if (XFS_IFORK_Q (ip)) { error =xfs_attr_inactive (ip);if (error)return ; } -if (ip->i_afp) -xfs_idestroy_fork (ip,XFS_ATTR_FORK ); - +ASSERT (!ip->i_afp);ASSERT (ip->i_d.di_anextents ==0 ); +ASSERT (ip->i_d.di_forkoff ==0 );/* * Free the inode.
Greg Kroah-Hartman
maintainerPATCH 17/148 xfs: xfs_iozero can return positive errno
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Chinner <[email protected]>
commit cddc116228cb9d51d3224d23ba3e61fbbc3ec3d2 upstream.
It was missed when we converted everything in XFs to use negative error numbers, so fix it now. Bug introduced in 3.17 by commit 2451337 ("xfs: global error sign conversion"), and should go back to stable kernels.
Thanks to Brian Foster for noticing it.
--- fs/xfs/xfs_file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/xfs/xfs_file.c +1 -1
@@ -125,7 +125,7 @@ xfs_iozero( status =0 ; }while (count); -return (-status); +return status; }int
Greg Kroah-Hartman
maintainerPATCH 18/148 lguest: fix out-by-one error in address checking.
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rusty Russell <[email protected]>
commit 83a35114d0e4583e6b0ca39502e68b6a92e2910c upstream.
This bug has been there since day 1; addresses in the top guest physical page weren't considered valid. You could map that page (the check in check_gpte() is correct), but if a guest tried to put a pagetable there we'd check that address manually when walking it, and kill the guest.
--- drivers/lguest/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/lguest/core.c +1 -1
@@ -173,7 +173,7 @@ static void unmap_switcher(void)bool lguest_address_ok (const struct lguest *lg,unsigned long addr,unsigned long len) { -return (addr+len) /PAGE_SIZE < lg->pfn_limit && (addr+len >= addr); +return addr+len <= lg->pfn_limit *PAGE_SIZE && (addr+len >= addr); }/*
Greg Kroah-Hartman
maintainerPATCH 19/148 ovl: dont remove non-empty opaque directory
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miklos Szeredi <[email protected]>
commit d377c5eb54dd05aeb3094b7740252d19ba7791f7 upstream.
When removing an opaque directory we can't just call rmdir() to check for emptiness, because the directory will need to be replaced with a whiteout. The replacement is done with RENAME_EXCHANGE, which doesn't check emptiness.
Solution is just to check emptiness by reading the directory. In the future we could add a new rename flag to check for emptiness even for RENAME_EXCHANGE to optimize this case.
--- fs/overlayfs/dir.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)
fs/overlayfs/dir.c +19 -5
@@ -506,11 +506,25 @@ static int ovl_remove_and_whiteout(strucstruct dentry *opaquedir =NULL ;int err; -if (is_dir &&OVL_TYPE_MERGE_OR_LOWER (ovl_path_type (dentry))) { - opaquedir =ovl_check_empty_and_clear (dentry); - err =PTR_ERR (opaquedir); -if (IS_ERR (opaquedir)) - goto out; +if (is_dir) { +if (OVL_TYPE_MERGE_OR_LOWER (ovl_path_type (dentry))) { + opaquedir =ovl_check_empty_and_clear (dentry); + err =PTR_ERR (opaquedir); +if (IS_ERR (opaquedir)) + goto out; + }else { +LIST_HEAD (list); + +/* +* When removing an empty opaque directory, then it +* makes no sense to replace it with an exact replica of +* itself. But emptiness still needs to be checked. +*/ + err =ovl_check_empty_dir (dentry, &list); +ovl_cache_free (&list); +if (err) + goto out; + } } err =ovl_lock_rename_workdir (workdir, upperdir);
Greg Kroah-Hartman
maintainerPATCH 20/148 ovl: mount read-only if workdir cant be created
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Miklos Szeredi <[email protected]>
commit cc6f67bcafcb6bbbb2d1be1603dcd95125a52800 upstream.
OpenWRT folks reported that overlayfs fails to mount if upper fs is full, because workdir can't be created. Wordir creation can fail for various other reasons too.
There's no reason that the mount itself should fail, overlayfs can work fine without a workdir, as long as the overlay isn't modified.
So mount it read-only and don't allow remounting read-write.
Add a couple of WARN_ON()s for the impossible case of workdir being used despite being read-only.
--- fs/overlayfs/copy_up.c | 3 +++ fs/overlayfs/dir.c | 9 +++++++++ fs/overlayfs/super.c | 10 +++++----- 3 files changed, 17 insertions(+), 5 deletions(-)
fs/overlayfs/copy_up.c +3 -0
@@ -299,6 +299,9 @@ int ovl_copy_up_one(struct dentry *parenstruct cred *override_cred;char *link =NULL ; +if (WARN_ON (!workdir)) +return -EROFS ; +ovl_path_upper (parent, &parentpath); upperdir = parentpath.dentry;
fs/overlayfs/dir.c +9 -0
@@ -222,6 +222,9 @@ static struct dentry *ovl_clear_empty(ststruct kstat stat;int err; +if (WARN_ON (!workdir)) +return ERR_PTR (-EROFS ); + err =ovl_lock_rename_workdir (workdir, upperdir);if (err) goto out;
@@ -322,6 +325,9 @@ static int ovl_create_over_whiteout(strustruct dentry *newdentry;int err; +if (WARN_ON (!workdir)) +return -EROFS ; + err =ovl_lock_rename_workdir (workdir, upperdir);if (err) goto out;
@@ -506,6 +512,9 @@ static int ovl_remove_and_whiteout(strucstruct dentry *opaquedir =NULL ;int err; +if (WARN_ON (!workdir)) +return -EROFS ; +if (is_dir) {if (OVL_TYPE_MERGE_OR_LOWER (ovl_path_type (dentry))) { opaquedir =ovl_check_empty_and_clear (dentry);
fs/overlayfs/super.c +5 -5
@@ -529,7 +529,7 @@ static int ovl_remount(struct super_bloc {struct ovl_fs *ufs = sb->s_fs_info; -if (!(*flags &MS_RDONLY ) && !ufs->upper_mnt) +if (!(*flags &MS_RDONLY ) && (!ufs->upper_mnt || !ufs->workdir))return -EROFS ;return 0 ;
@@ -925,9 +925,10 @@ static int ovl_fill_super(struct super_b ufs->workdir =ovl_workdir_create (ufs->upper_mnt, workpath.dentry); err =PTR_ERR (ufs->workdir);if (IS_ERR (ufs->workdir)) { -pr_err ("overlayfs: failed to create directory %s/%s\n" , - ufs->config.workdir,OVL_WORKDIR_NAME ); - goto out_put_upper_mnt; +pr_warn ("overlayfs: failed to create directory %s/%s (errno: %i); mounting read-only\n" , + ufs->config.workdir,OVL_WORKDIR_NAME , -err); + sb->s_flags |=MS_RDONLY ; + ufs->workdir =NULL ; } }
@@ -997,7 +998,6 @@ out_put_lower_mnt:kfree (ufs->lower_mnt); out_put_workdir:dput (ufs->workdir); -out_put_upper_mnt:mntput (ufs->upper_mnt); out_put_lowerpath:for (i =0 ; i < numlower; i++)
Greg Kroah-Hartman
maintainerPATCH 21/148 mfd: da9052: Fix broken regulator probe
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit e0c21530fa91f119bfca19640a67380c6b14f12a upstream.
Fix broken probe of da9052 regulators, which since commit b3f6c73db732 ("mfd: da9052-core: Fix platform-device id collision") use a non-deterministic platform-device id to retrieve static regulator information. Fortunately, adequate error handling was in place so probe would simply fail with an error message.
Update the mfd-cell ids to be zero-based and use those to identify the cells when probing the regulator devices.
--- drivers/mfd/da9052-core.c | 8 ++++---- drivers/regulator/da9052-regulator.c | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-)
drivers/mfd/da9052-core.c +4 -4
@@ -433,6 +433,10 @@ EXPORT_SYMBOL_GPL(da9052_adc_read_temp);static const struct mfd_cell da9052_subdev_info[] = { { .name ="da9052-regulator" , + .id =0 , + }, + { + .name ="da9052-regulator" , .id =1 , }, {
@@ -484,10 +488,6 @@ static const struct mfd_cell da9052_subd .id = 13, }, { - .name = "da9052-regulator", - .id = 14, - }, - { .name = "da9052-onkey", }, {
drivers/regulator/da9052-regulator.c +3 -2
@@ -394,6 +394,7 @@ static inline struct da9052_regulator_instatic int da9052_regulator_probe (struct platform_device *pdev) { +const struct mfd_cell *cell =mfd_get_cell (pdev);struct regulator_config config = { };struct da9052_regulator *regulator;struct da9052 *da9052;
@@ -409,7 +410,7 @@ static int da9052_regulator_probe(struct regulator->da9052 = da9052; regulator->info =find_regulator_info (regulator->da9052->chip_id, - pdev->id); + cell->id);if (regulator->info ==NULL ) {dev_err (&pdev->dev,"invalid regulator ID specified\n" );return -EINVAL ;
@@ -419,7 +420,7 @@ static int da9052_regulator_probe(struct config.driver_data = regulator; config.regmap = da9052->regmap;if (pdata && pdata->regulators) { - config.init_data = pdata->regulators[pdev->id]; + config.init_data = pdata->regulators[cell->id]; }else {#ifdef CONFIG_OF struct device_node *nproot = da9052->dev->of_node;
Greg Kroah-Hartman
maintainerPATCH 22/148 libceph: request a new osdmap if lingering request maps to no osd
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilya Dryomov <[email protected]>
commit b0494532214bdfbf241e94fabab5dd46f7b82631 upstream.
This commit does two things. First, if there are any homeless lingering requests, we now request a new osdmap even if the osdmap that is being processed brought no changes, i.e. if a given lingering request turned homeless in one of the previous epochs and remained homeless in the current epoch. Not doing so leaves us with a stale osdmap and as a result we may miss our window for reestablishing the watch and lose notifies.
MON=1 OSD=1:
# cat linger-needmap.sh
#!/bin/bash
rbd create --size 1 test
DEV=$(rbd map test)
ceph osd out 0
rbd map dne/dne # obtain a new osdmap as a side effect (!)
sleep 1
ceph osd in 0
rbd resize --size 2 test
# rbd info test | grep size -> 2M
# blockdev --getsize $DEV -> 1MN.B.: Not obtaining a new osdmap in between "osd out" and "osd in" above is enough to make it miss that resize notify, but that is a bug^Wlimitation of ceph watch/notify v1.
Second, homeless lingering requests are now kicked just like those lingering requests whose mapping has changed. This is mainly to recognize that a homeless lingering request makes no sense and to preserve the invariant that a registered lingering request is not sitting on any of r_req_lru_item lists. This spares us a WARN_ON, which commit ba9d114ec557 ("libceph: clear r_req_lru_item in __unregister_linger_request()") tried to fix the _wrong_ way.
--- net/ceph/osd_client.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-)
net/ceph/osd_client.c +20 -11
@@ -2017,20 +2017,29 @@ static void kick_requests(struct ceph_os err =__map_request (osdc, req, force_resend || force_resend_writes);dout ("__map_request returned %d\n" , err); -if (err ==0 ) -continue ;/* no change and no osd was specified */ if (err <0 )continue ;/* hrm! */ -if (req->r_osd ==NULL ) { -dout ("tid %llu maps to no valid osd\n" , req->r_tid); - needmap++;/* request a newer map */ -continue ; - } +if (req->r_osd ==NULL || err >0 ) { +if (req->r_osd ==NULL ) { +dout ("lingering %p tid %llu maps to no osd\n" , + req, req->r_tid); +/* +* A homeless lingering request makes +* no sense, as it's job is to keep +* a particular OSD connection open. +* Request a newer map and kick the +* request, knowing that it won't be +* resent until we actually get a map +* that can tell us where to send it. +*/ + needmap++; + } -dout ("kicking lingering %p tid %llu osd%d\n" , req, req->r_tid, - req->r_osd ? req->r_osd->o_osd :-1 ); -__register_request (osdc, req); -__unregister_linger_request (osdc, req); +dout ("kicking lingering %p tid %llu osd%d\n" , req, + req->r_tid, req->r_osd ? req->r_osd->o_osd :-1 ); +__register_request (osdc, req); +__unregister_linger_request (osdc, req); + } }reset_changed_osds (osdc);mutex_unlock (&osdc->request_mutex);
Greg Kroah-Hartman
maintainerPATCH 23/148 Revert "libceph: clear r_req_lru_item in __unregister_linger_request()"
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilya Dryomov <[email protected]>
commit 521a04d06a729e5971cdee7f84080387ed320527 upstream.
This reverts commit ba9d114ec5578e6e99a4dfa37ff8ae688040fd64.
.. which introduced a regression that prevented all lingering requests requeued in kick_requests() from ever being sent to the OSDs, resulting in a lot of missed notifies. In retrospect it's pretty obvious that r_req_lru_item item in the case of lingering requests can be used not only for notarget, but also for unsent linkage due to how tightly actual map and enqueue operations are coupled in __map_request().
The assertion that was being silenced is taken care of in the previous ("libceph: request a new osdmap if lingering request maps to no osd")
commit: by always kicking homeless lingering requests we ensure that none of them ends up on the notarget list outside of the critical section guarded by request_mutex.
--- net/ceph/osd_client.c | 2 -- 1 file changed, 2 deletions(-)
net/ceph/osd_client.c +0 -2
@@ -1306,8 +1306,6 @@ static void __unregister_linger_request(if (list_empty (&req->r_osd_item)) req->r_osd =NULL ; } - -list_del_init (&req->r_req_lru_item);/* can be on notarget */ ceph_osdc_put_request (req); }
Greg Kroah-Hartman
maintainerPATCH 24/148 Btrfs: fix racy system chunk allocation when setting block group ro
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <[email protected]>
commit a96295965b600f2dc6ad661c4803c86e87db3d7b upstream.
If while setting a block group read-only we end up allocating a system chunk, through check_system_chunk(), we were not doing it while holding the chunk mutex which is a problem if a concurrent chunk allocation is happening, through do_chunk_alloc(), as it means both block groups can end up using the same logical addresses and physical regions in the device(s). So make sure we hold the chunk mutex.
setting block group ro")
--- fs/btrfs/extent-tree.c | 2 ++ fs/btrfs/volumes.c | 1 + 2 files changed, 3 insertions(+)
fs/btrfs/extent-tree.c +2 -0
@@ -8548,7 +8548,9 @@ int btrfs_set_block_group_ro(struct btrf out:if (cache->flags &BTRFS_BLOCK_GROUP_SYSTEM ) { alloc_flags =update_block_group_flags (root, cache->flags); +lock_chunks (root->fs_info->chunk_root);check_system_chunk (trans, root, alloc_flags); +unlock_chunks (root->fs_info->chunk_root); }btrfs_end_transaction (trans, root);
fs/btrfs/volumes.c +1 -0
@@ -4626,6 +4626,7 @@ int btrfs_alloc_chunk(struct btrfs_trans {u64 chunk_offset; +ASSERT (mutex_is_locked (&extent_root->fs_info->chunk_mutex)); chunk_offset =find_next_chunk (extent_root->fs_info);return __btrfs_alloc_chunk (trans, extent_root, chunk_offset, type); }
Greg Kroah-Hartman
maintainerPATCH 25/148 xen/events: dont bind non-percpu VIRQs with percpu chip
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Vrabel <[email protected]>
commit 77bb3dfdc0d554befad58fdefbc41be5bc3ed38a upstream.
A non-percpu VIRQ (e.g., VIRQ_CONSOLE) may be freed on a different VCPU than it is bound to. This can result in a race between handle_percpu_irq() and removing the action in __free_irq() because handle_percpu_irq() does not take desc->lock. The interrupt handler sees a NULL action and oopses.
Only use the percpu chip/handler for per-CPU VIRQs (like VIRQ_TIMER).
# cat /proc/interrupts | grep virq 40: 87246 0 xen-percpu-virq timer0 44: 0 0 xen-percpu-virq debug0 47: 0 20995 xen-percpu-virq timer1 51: 0 0 xen-percpu-virq debug1 69: 0 0 xen-dyn-virq xen-pcpu 74: 0 0 xen-dyn-virq mce 75: 29 0 xen-dyn-virq hvc_console
--- drivers/tty/hvc/hvc_xen.c | 2 +- drivers/xen/events/events_base.c | 12 ++++++++---- include/xen/events.h | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-)
drivers/tty/hvc/hvc_xen.c +1 -1
@@ -289,7 +289,7 @@ static int xen_initial_domain_console_inreturn -ENOMEM ; } - info->irq =bind_virq_to_irq (VIRQ_CONSOLE ,0 ); + info->irq =bind_virq_to_irq (VIRQ_CONSOLE ,0 , false); info->vtermno =HVC_COOKIE ;spin_lock (&xencons_lock);
drivers/xen/events/events_base.c +8 -4
@@ -957,7 +957,7 @@ unsigned xen_evtchn_nr_channels(void) }EXPORT_SYMBOL_GPL (xen_evtchn_nr_channels); -int bind_virq_to_irq (unsigned int virq,unsigned int cpu) +int bind_virq_to_irq (unsigned int virq,unsigned int cpu,bool percpu) {struct evtchn_bind_virq bind_virq;int evtchn, irq, ret;
@@ -971,8 +971,12 @@ int bind_virq_to_irq(unsigned int virq,if (irq <0 ) goto out; -irq_set_chip_and_handler_name (irq, &xen_percpu_chip, - handle_percpu_irq,"virq" ); +if (percpu) +irq_set_chip_and_handler_name (irq, &xen_percpu_chip, + handle_percpu_irq,"virq" ); +else +irq_set_chip_and_handler_name (irq, &xen_dynamic_chip, + handle_edge_irq,"virq" ); bind_virq.virq = virq; bind_virq.vcpu = cpu;
@@ -1062,7 +1066,7 @@ int bind_virq_to_irqhandler(unsigned int {int irq, retval; - irq =bind_virq_to_irq (virq, cpu); + irq =bind_virq_to_irq (virq, cpu, irqflags &IRQF_PERCPU );if (irq <0 )return irq; retval =request_irq (irq, handler, irqflags, devname, dev_id);
include/xen/events.h +1 -1
@@ -17,7 +17,7 @@ int bind_evtchn_to_irqhandler(unsigned iirq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id); -int bind_virq_to_irq (unsigned int virq,unsigned int cpu); +int bind_virq_to_irq (unsigned int virq,unsigned int cpu,bool percpu); int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, irq_handler_t handler, unsigned long irqflags, const char *devname,
Greg Kroah-Hartman
maintainerPATCH 26/148 hwmon: (ntc_thermistor) Ensure iio channel is of type IIO_VOLTAGE
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Lesiak <[email protected]>
commit adba657533bdd255f7b78bc8a324091f46b294cd upstream.
When configured via device tree, the associated iio device needs to be measuring voltage for the conversion to resistance to be correct. Return -EINVAL if that is not the case.
--- drivers/hwmon/ntc_thermistor.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/hwmon/ntc_thermistor.c +9 -0
@@ -239,8 +239,10 @@ static struct ntc_thermistor_platform_da ntc_thermistor_parse_dt(struct platform_device *pdev) {struct iio_channel *chan; +enum iio_chan_type type;struct device_node *np = pdev->dev.of_node;struct ntc_thermistor_platform_data *pdata; +int ret;if (!np)return NULL ;
@@ -253,6 +255,13 @@ ntc_thermistor_parse_dt(struct platform_if (IS_ERR (chan))return ERR_CAST (chan); + ret =iio_get_channel_type (chan, &type); +if (ret <0 ) +return ERR_PTR (ret); + +if (type !=IIO_VOLTAGE ) +return ERR_PTR (-EINVAL ); +if (of_property_read_u32 (np,"pullup-uv" , &pdata->pullup_uv))return ERR_PTR (-ENODEV );if (of_property_read_u32 (np,"pullup-ohm" , &pdata->pullup_ohm))
Greg Kroah-Hartman
maintainerPATCH 27/148 iio/axp288_adc: add missing channel info mask
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jacob Pan <[email protected]>
commit d0716b0ea4ce11a13477163c14b26e180922ba51 upstream.
Commit 65de7654d39c70c2b ("iio: iio: Fix iio_channel_read return if channel havn't info") added a check for valid info masks.
This patch adds missing channel info masks for all ADC channels. Otherwise, iio_read_channel_raw() would return -EINVAL when called by consumer drivers.
Note that the change of _processed to _raw actually fixes an ABI abuse in the original driver where it was used to avoid some special handling rather than because it was correct.
--- drivers/iio/adc/axp288_adc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/iio/adc/axp288_adc.c +6 -6
@@ -53,39 +53,42 @@ static const struct iio_chan_spec const .channel = 0, .address = AXP288_TS_ADC_H, .datasheet_name = "TS_PIN", + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), }, { .indexed = 1, .type = IIO_TEMP, .channel = 1, .address = AXP288_PMIC_ADC_H, .datasheet_name = "PMIC_TEMP", + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), }, { .indexed = 1, .type = IIO_TEMP, .channel = 2, .address = AXP288_GP_ADC_H, .datasheet_name = "GPADC", + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), }, { .indexed = 1, .type = IIO_CURRENT, .channel = 3, .address = AXP20X_BATT_CHRG_I_H, .datasheet_name = "BATT_CHG_I", - .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), }, { .indexed = 1, .type = IIO_CURRENT, .channel = 4, .address = AXP20X_BATT_DISCHRG_I_H, .datasheet_name = "BATT_DISCHRG_I", - .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), }, { .indexed = 1, .type = IIO_VOLTAGE, .channel = 5, .address = AXP20X_BATT_V_H, .datasheet_name = "BATT_V", - .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), }, };
@@ -151,9 +154,6 @@ static int axp288_adc_read_raw(struct ii chan->address))dev_err (&indio_dev->dev,"TS pin restore\n" );break ; -case IIO_CHAN_INFO_PROCESSED : - ret =axp288_adc_read_channel (val, chan->address, info->regmap); -break ;default : ret = -EINVAL ; }
Greg Kroah-Hartman
maintainerPATCH 28/148 iio:st_sensors: Fix oops when probing SPI devices
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alban Bedel <[email protected]>
commit 8e71c04f863a1754f21b27fb8ecb773d680a0a80 upstream.
In SPI mode the transfer buffer is locked with a mutex. However this mutex is only initilized after the probe, but some transfer needs to be done in the probe.
To fix this bug we move the mutex initialization at the beginning of the device probe.
--- drivers/iio/accel/st_accel_core.c | 1 + drivers/iio/common/st_sensors/st_sensors_core.c | 2 -- drivers/iio/gyro/st_gyro_core.c | 1 + drivers/iio/magnetometer/st_magn_core.c | 1 + drivers/iio/pressure/st_pressure_core.c | 1 + 5 files changed, 4 insertions(+), 2 deletions(-)
drivers/iio/accel/st_accel_core.c +1 -0
@@ -465,6 +465,7 @@ int st_accel_common_probe(struct iio_dev indio_dev->modes =INDIO_DIRECT_MODE ; indio_dev->info = &accel_info; +mutex_init (&adata->tb.buf_lock);st_sensors_power_enable (indio_dev);
drivers/iio/common/st_sensors/st_sensors_core.c +0 -2
@@ -304,8 +304,6 @@ int st_sensors_init_sensor(struct iio_destruct st_sensors_platform_data *of_pdata;int err =0 ; -mutex_init (&sdata->tb.buf_lock); -/* If OF/DT pdata exists, it will take precedence of anything else */ of_pdata =st_sensors_of_probe (indio_dev->dev.parent, pdata);if (of_pdata)
drivers/iio/gyro/st_gyro_core.c +1 -0
@@ -317,6 +317,7 @@ int st_gyro_common_probe(struct iio_dev indio_dev->modes =INDIO_DIRECT_MODE ; indio_dev->info = &gyro_info; +mutex_init (&gdata->tb.buf_lock);st_sensors_power_enable (indio_dev);
drivers/iio/magnetometer/st_magn_core.c +1 -0
@@ -369,6 +369,7 @@ int st_magn_common_probe(struct iio_dev indio_dev->modes =INDIO_DIRECT_MODE ; indio_dev->info = &magn_info; +mutex_init (&mdata->tb.buf_lock);st_sensors_power_enable (indio_dev);
drivers/iio/pressure/st_pressure_core.c +1 -0
@@ -417,6 +417,7 @@ int st_press_common_probe(struct iio_dev indio_dev->modes =INDIO_DIRECT_MODE ; indio_dev->info = &press_info; +mutex_init (&press_data->tb.buf_lock);st_sensors_power_enable (indio_dev);
Greg Kroah-Hartman
maintainerPATCH 29/148 iio: light: hid-sensor-prox: Fix modifier
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Srinivas Pandruvada <[email protected]>
commit c2aab3d58b96002555a3e70004f593b043830248 upstream.
Currently in_proximity_(null)_raw is getting presented as raw sysfs attribute. Same with the scan_elements.
The modifier doesn't apply to this channel.
--- drivers/iio/light/hid-sensor-prox.c | 2 -- 1 file changed, 2 deletions(-)
drivers/iio/light/hid-sensor-prox.c +0 -2
@@ -43,8 +43,6 @@ struct prox_state {static const struct iio_chan_spec prox_channels[] = { { .type =IIO_PROXIMITY , - .modified =1 , - .channel2 =IIO_NO_MOD , .info_mask_separate =BIT (IIO_CHAN_INFO_RAW ), .info_mask_shared_by_type =BIT (IIO_CHAN_INFO_OFFSET ) | BIT(IIO_CHAN_INFO_SCALE) |
Greg Kroah-Hartman
maintainerPATCH 30/148 iio: pressure: hid-sensor-press: Fix modifier
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Srinivas Pandruvada <[email protected]>
commit 964e2255f1d73fc0136bc206a78a1f86bdad72a7 upstream.
Fix "null" in the raw attribute and scan elements.
--- drivers/iio/pressure/hid-sensor-press.c | 2 -- 1 file changed, 2 deletions(-)
drivers/iio/pressure/hid-sensor-press.c +0 -2
@@ -47,8 +47,6 @@ struct press_state {static const struct iio_chan_spec press_channels[] = { { .type =IIO_PRESSURE , - .modified =1 , - .channel2 =IIO_NO_MOD , .info_mask_separate =BIT (IIO_CHAN_INFO_RAW ), .info_mask_shared_by_type =BIT (IIO_CHAN_INFO_OFFSET ) | BIT(IIO_CHAN_INFO_SCALE) |
Greg Kroah-Hartman
maintainerPATCH 31/148 iio: adc: spmi-vadc: Fix overflow in output value normalization
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Ivan T. Ivanov" <[email protected]>
commit 937125aca00e0478c4024afe58bc620a7bbe2a93 upstream.
With 'dx' equal to 0.625V and 15 bit ADC, calculations overflow when difference against GND is ~20% of the ADC range. Fix this.
--- drivers/iio/adc/qcom-spmi-vadc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/iio/adc/qcom-spmi-vadc.c +4 -3
@@ -18,6 +18,7 @@#include <linux/iio/iio.h> #include <linux/interrupt.h> #include <linux/kernel.h> +#include <linux/math64.h> #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h>
@@ -471,11 +472,11 @@ static s32 vadc_calibrate(struct vadc_pr const struct vadc_channel_prop *prop, u16 adc_code) {const struct vadc_prescale_ratio *prescale; -s32 voltage; +s64 voltage; voltage = adc_code - vadc->graph[prop->calibration].gnd; voltage *= vadc->graph[prop->calibration].dx; - voltage = voltage / vadc->graph[prop->calibration].dy; + voltage =div64_s64 (voltage, vadc->graph[prop->calibration].dy);if (prop->calibration ==VADC_CALIB_ABSOLUTE ) voltage += vadc->graph[prop->calibration].dx;
@@ -487,7 +488,7 @@ static s32 vadc_calibrate(struct vadc_pr voltage = voltage * prescale->den; -return voltage / prescale->num; +return div64_s64 (voltage, prescale->num); }static int vadc_decimation_from_dt (u32 value)
Greg Kroah-Hartman
maintainerPATCH 32/148 iio: adc: cc10001: Fix the channel number mapping
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naidu Tellapati <[email protected]>
commit 13415a998adb1802b5bd6bd5a336331589e866a1 upstream.
When some of the ADC channels are reserved for remote CPUs, the scan index and the corresponding channel number doesn't match. This leads to convesion on the incorrect channel during triggered capture.
Fix this by using a scan index to channel mapping encoded in the iio_chan_spec for this purpose while starting conversion on a particular ADC channel in trigger handler.
Also, the channel_map is not really used anywhere but in probe(), so no need to keep track of it. Remove it from device structure.
While here, add 1 to number of channels to register timestamp channel with the IIO core.
--- drivers/iio/adc/cc10001_adc.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-)
drivers/iio/adc/cc10001_adc.c +13 -11
@@ -62,7 +62,6 @@ struct cc10001_adc_device {u16 *buf;struct mutex lock; -unsigned long channel_map;unsigned int start_delay_ns;unsigned int eoc_delay_ns; };
@@ -129,6 +128,7 @@ static irqreturn_t cc10001_adc_trigger_hstruct iio_dev *indio_dev;unsigned int delay_ns;unsigned int channel; +unsigned int scan_idx;bool sample_invalid;u16 *data;int i;
@@ -150,9 +150,10 @@ static irqreturn_t cc10001_adc_trigger_h i =0 ; sample_invalid = false; -for_each_set_bit (channel, indio_dev->active_scan_mask, +for_each_set_bit (scan_idx, indio_dev->active_scan_mask, indio_dev->masklength) { + channel = indio_dev->channels[scan_idx].channel;cc10001_adc_start (adc_dev, channel); data[i] =cc10001_adc_poll_done (indio_dev, channel, delay_ns);
@@ -255,22 +256,22 @@ static const struct iio_info cc10001_adc .update_scan_mode = &cc10001_update_scan_mode, }; -static int cc10001_adc_channel_init (struct iio_dev *indio_dev) +static int cc10001_adc_channel_init (struct iio_dev *indio_dev, +unsigned long channel_map) { -struct cc10001_adc_device *adc_dev =iio_priv (indio_dev);struct iio_chan_spec *chan_array, *timestamp;unsigned int bit, idx =0 ; - indio_dev->num_channels =bitmap_weight (&adc_dev->channel_map, -CC10001_ADC_NUM_CHANNELS ); + indio_dev->num_channels =bitmap_weight (&channel_map, +CC10001_ADC_NUM_CHANNELS ) +1 ; - chan_array =devm_kcalloc (&indio_dev->dev, indio_dev->num_channels +1 , + chan_array =devm_kcalloc (&indio_dev->dev, indio_dev->num_channels,sizeof (struct iio_chan_spec ),GFP_KERNEL );if (!chan_array)return -ENOMEM ; -for_each_set_bit (bit, &adc_dev->channel_map,CC10001_ADC_NUM_CHANNELS ) { +for_each_set_bit (bit, &channel_map,CC10001_ADC_NUM_CHANNELS ) {struct iio_chan_spec *chan = &chan_array[idx]; chan->type =IIO_VOLTAGE ;
@@ -305,6 +306,7 @@ static int cc10001_adc_probe(struct platunsigned long adc_clk_rate;struct resource *res;struct iio_dev *indio_dev; +unsigned long channel_map;int ret; indio_dev =devm_iio_device_alloc (&pdev->dev,sizeof (*adc_dev));
@@ -313,9 +315,9 @@ static int cc10001_adc_probe(struct plat adc_dev =iio_priv (indio_dev); - adc_dev->channel_map =GENMASK (CC10001_ADC_NUM_CHANNELS -1 ,0 ); + channel_map =GENMASK (CC10001_ADC_NUM_CHANNELS -1 ,0 );if (!of_property_read_u32 (node,"adc-reserved-channels" , &ret)) - adc_dev->channel_map &= ~ret; + channel_map &= ~ret; adc_dev->reg =devm_regulator_get (&pdev->dev,"vref" );if (IS_ERR (adc_dev->reg))
@@ -361,7 +363,7 @@ static int cc10001_adc_probe(struct plat adc_dev->start_delay_ns = adc_dev->eoc_delay_ns *CC10001_WAIT_CYCLES ;/* Setup the ADC channels available on the device */ - ret =cc10001_adc_channel_init (indio_dev); + ret =cc10001_adc_channel_init (indio_dev, channel_map);if (ret <0 ) goto err_disable_clk;
Greg Kroah-Hartman
maintainerPATCH 33/148 iio: adc: cc10001: Fix incorrect use of power-up/power-down register
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naidu Tellapati <[email protected]>
commit 713276ea88a295a79aa6633ba639ed47692a8de4 upstream.
At present we are incorrectly setting the register to 0x1 to power up the ADC. Since it is an active high power down register, we need to set the register to 0x0 to actually power up. Conversely, writing 0x1 to the register powers it down.
This commit adds a couple of helpers to make the code clearer and then use them to do the power-up/power-down properly.
--- drivers/iio/adc/cc10001_adc.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-)
drivers/iio/adc/cc10001_adc.c +19 -14
@@ -35,8 +35,9 @@#define CC10001_ADC_EOC_SET BIT(0)#define CC10001_ADC_CHSEL_SAMPLED 0x0c -#define CC10001_ADC_POWER_UP 0x10 -#define CC10001_ADC_POWER_UP_SET BIT(0) +#define CC10001_ADC_POWER_DOWN 0x10 +#define CC10001_ADC_POWER_DOWN_SET BIT(0) +#define CC10001_ADC_DEBUG 0x14#define CC10001_ADC_DATA_COUNT 0x20
@@ -78,6 +79,18 @@ static inline u32 cc10001_adc_read_reg(sreturn readl (adc_dev->reg_base + reg); } +static void cc10001_adc_power_up (struct cc10001_adc_device *adc_dev) +{ +cc10001_adc_write_reg (adc_dev,CC10001_ADC_POWER_DOWN ,0 ); +ndelay (adc_dev->start_delay_ns); +} + +static void cc10001_adc_power_down (struct cc10001_adc_device *adc_dev) +{ +cc10001_adc_write_reg (adc_dev,CC10001_ADC_POWER_DOWN , +CC10001_ADC_POWER_DOWN_SET ); +} +static void cc10001_adc_start (struct cc10001_adc_device *adc_dev,unsigned int channel) {
@@ -139,11 +152,7 @@ static irqreturn_t cc10001_adc_trigger_hmutex_lock (&adc_dev->lock); -cc10001_adc_write_reg (adc_dev,CC10001_ADC_POWER_UP , -CC10001_ADC_POWER_UP_SET ); - -/* Wait for 8 (6+2) clock cycles before activating START */ -ndelay (adc_dev->start_delay_ns); +cc10001_adc_power_up (adc_dev);/* Calculate delay step for eoc and sampled data */ delay_ns = adc_dev->eoc_delay_ns /CC10001_MAX_POLL_COUNT ;
@@ -167,7 +176,7 @@ static irqreturn_t cc10001_adc_trigger_h } done: -cc10001_adc_write_reg (adc_dev,CC10001_ADC_POWER_UP ,0 ); +cc10001_adc_power_down (adc_dev);mutex_unlock (&adc_dev->lock);
@@ -186,11 +195,7 @@ static u16 cc10001_adc_read_raw_voltage(unsigned int delay_ns;u16 val; -cc10001_adc_write_reg (adc_dev,CC10001_ADC_POWER_UP , -CC10001_ADC_POWER_UP_SET ); - -/* Wait for 8 (6+2) clock cycles before activating START */ -ndelay (adc_dev->start_delay_ns); +cc10001_adc_power_up (adc_dev);/* Calculate delay step for eoc and sampled data */ delay_ns = adc_dev->eoc_delay_ns /CC10001_MAX_POLL_COUNT ;
@@ -199,7 +204,7 @@ static u16 cc10001_adc_read_raw_voltage( val =cc10001_adc_poll_done (indio_dev, chan->channel, delay_ns); -cc10001_adc_write_reg (adc_dev,CC10001_ADC_POWER_UP ,0 ); +cc10001_adc_power_down (adc_dev);return val; }
Greg Kroah-Hartman
maintainerPATCH 34/148 iio: adc: cc10001: Add delay before setting START bit
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naidu Tellapati <[email protected]>
commit f29b212edb9e253cafcb4a2ab7842a890989f1a5 upstream.
According to hardware team there should be some delay after setting channel number, start mode and before setting START. Add a one microsecond delay for this purpose.
--- drivers/iio/adc/cc10001_adc.c | 1 + 1 file changed, 1 insertion(+)
drivers/iio/adc/cc10001_adc.c +1 -0
@@ -100,6 +100,7 @@ static void cc10001_adc_start(struct cc1 val = (channel &CC10001_ADC_CH_MASK ) |CC10001_ADC_MODE_SINGLE_CONV ;cc10001_adc_write_reg (adc_dev,CC10001_ADC_CONFIG , val); +udelay (1 ); val =cc10001_adc_read_reg (adc_dev,CC10001_ADC_CONFIG ); val = val |CC10001_ADC_START_CONV ;cc10001_adc_write_reg (adc_dev,CC10001_ADC_CONFIG , val);
Greg Kroah-Hartman
maintainerPATCH 35/148 iio: adc: cc10001: Fix regulator_get_voltage() return value check
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naidu Tellapati <[email protected]>
commit 65a761bf8d55fdcf8ecc4642382a4e76c086e44c upstream.
regulator_get_voltage() returns a non-negative value in case of success, and a negative error in case of error. Let's fix this.
--- drivers/iio/adc/cc10001_adc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/adc/cc10001_adc.c +1 -1
@@ -231,7 +231,7 @@ static int cc10001_adc_read_raw(struct icase IIO_CHAN_INFO_SCALE : ret =regulator_get_voltage (adc_dev->reg); -if (ret) +if (ret <0 )return ret; *val = ret /1000 ;
Greg Kroah-Hartman
maintainerPATCH 36/148 iio: adc: xilinx: Fix register addresses
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Betker <[email protected]>
commit 3960d2c0c4aafe98da47a4a2eb64dfa8e88d8df5 upstream.
Define the register addresses for MIN_VCCPINT, MIN_VCCPAUX, MIN_VCCO_DDR correctly.
--- drivers/iio/adc/xilinx-xadc.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/iio/adc/xilinx-xadc.h +3 -3
@@ -145,9 +145,9 @@ static inline int xadc_write_adc_reg(str#define XADC_REG_MAX_VCCPINT 0x28#define XADC_REG_MAX_VCCPAUX 0x29#define XADC_REG_MAX_VCCO_DDR 0x2a -#define XADC_REG_MIN_VCCPINT 0x2b -#define XADC_REG_MIN_VCCPAUX 0x2c -#define XADC_REG_MIN_VCCO_DDR 0x2d +#define XADC_REG_MIN_VCCPINT 0x2c +#define XADC_REG_MIN_VCCPAUX 0x2d +#define XADC_REG_MIN_VCCO_DDR 0x2e#define XADC_REG_CONF0 0x40#define XADC_REG_CONF1 0x41
Greg Kroah-Hartman
maintainerPATCH 37/148 iio: adc: xilinx: Fix "vccaux" channel .address
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Betker <[email protected]>
commit d6c96c42283601e311a7a1a3d7e51cde9d7fdb6e upstream.
For the "vccaux" channel, read the VCCAUX register, not VCCINT.
--- drivers/iio/adc/xilinx-xadc-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/adc/xilinx-xadc-core.c +1 -1
@@ -1008,7 +1008,7 @@ static const struct iio_event_spec xadc_static const struct iio_chan_spec xadc_channels[] = {XADC_CHAN_TEMP (0 ,8 ,XADC_REG_TEMP ),XADC_CHAN_VOLTAGE (0 ,9 ,XADC_REG_VCCINT ,"vccint" , true), -XADC_CHAN_VOLTAGE (1 ,10 ,XADC_REG_VCCINT ,"vccaux" , true), +XADC_CHAN_VOLTAGE (1 ,10 ,XADC_REG_VCCAUX ,"vccaux" , true),XADC_CHAN_VOLTAGE (2 ,14 ,XADC_REG_VCCBRAM ,"vccbram" , true),XADC_CHAN_VOLTAGE (3 ,5 ,XADC_REG_VCCPINT ,"vccpint" , true),XADC_CHAN_VOLTAGE (4 ,6 ,XADC_REG_VCCPAUX ,"vccpaux" , true),
Greg Kroah-Hartman
maintainerPATCH 38/148 iio: adc: xilinx: Fix VREFP scale
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Betker <[email protected]>
commit 00db4e52f4541965f7fda225eb458a75f892017b upstream.
The scaling factor for VREFP is 3.0/4096, not 1.0/4096; fix this to get correct readings.
--- drivers/iio/adc/xilinx-xadc-core.c | 1 + 1 file changed, 1 insertion(+)
drivers/iio/adc/xilinx-xadc-core.c +1 -0
@@ -856,6 +856,7 @@ static int xadc_read_raw(struct iio_devswitch (chan->address) {case XADC_REG_VCCINT :case XADC_REG_VCCAUX : +case XADC_REG_VREFP :case XADC_REG_VCCBRAM :case XADC_REG_VCCPINT :case XADC_REG_VCCPAUX :
Greg Kroah-Hartman
maintainerPATCH 39/148 iio: adc: xilinx: Fix VREFN sign
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Betker <[email protected]>
commit 97ffae1d30c3f6ceee67d5b0d3e540c08c13c744 upstream.
The VREFN channel is bipolar, not unipolar. Small negative values do occur (e.g., -1mV), and unsigned conversion maps them incorrectly to large positive values (about +1V), so fix this.
--- drivers/iio/adc/xilinx-xadc-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/adc/xilinx-xadc-core.c +1 -1
@@ -997,7 +997,7 @@ static const struct iio_event_spec xadc_ .num_event_specs = (_alarm) ? ARRAY_SIZE(xadc_voltage_events) : 0, \ .scan_index = (_scan_index), \ .scan_type = { \ - .sign = 'u', \ + .sign = ((_addr) == XADC_REG_VREFN) ? 's' : 'u', \ .realbits = 12, \ .storagebits = 16, \ .shift = 4, \
Greg Kroah-Hartman
maintainerPATCH 40/148 hwmon: (tmp401) Do not auto-detect chip on I2C address 0x37
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Guenter Roeck <[email protected]>
commit 9aecac04d8d89e730ae362a748113b19c06a9d39 upstream.
I2C address 0x37 may be used by EEPROMs, which can result in false positives. Do not attempt to detect a chip at this address.
--- Documentation/hwmon/tmp401 | 2 +- drivers/hwmon/tmp401.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
Documentation/hwmon/tmp401 +1 -1
@@ -20,7 +20,7 @@ Supported chips: Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp432.html * Texas Instruments TMP435 Prefix: 'tmp435' - Addresses scanned: I2C 0x37, 0x48 - 0x4f + Addresses scanned: I2C 0x48 - 0x4f Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp435.html Authors:
drivers/hwmon/tmp401.c +1 -1
@@ -44,7 +44,7 @@#include <linux/sysfs.h> /* Addresses to scan */ -static const unsigned short normal_i2c[] = {0x37 ,0x48 ,0x49 ,0x4a ,0x4c ,0x4d , +static const unsigned short normal_i2c[] = {0x48 ,0x49 ,0x4a ,0x4c ,0x4d ,0x4e ,0x4f ,I2C_CLIENT_END };enum chips { tmp401, tmp411, tmp431, tmp432, tmp435 };
Greg Kroah-Hartman
maintainerPATCH 41/148 hwmon: (nct6775) Add missing sysfs attribute initialization
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Guenter Roeck <[email protected]>
commit 1b63bf617206ff35b93c57c67bbe067ac735a85a upstream.
The following error message is seen when loading the nct6775 driver with DEBUG_LOCK_ALLOC enabled.
BUG: key ffff88040b2f0030 not in .data! ------------[ cut here ]------------ WARNING: CPU: 0 PID: 186 at kernel/locking/lockdep.c:2988 lockdep_init_map+0x469/0x630()
DEBUG_LOCKS_WARN_ON(1)
Caused by a missing call to sysfs_attr_init() when initializing sysfs attributes.
--- drivers/hwmon/nct6775.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/hwmon/nct6775.c +2 -0
@@ -994,6 +994,7 @@ nct6775_create_attr_group(struct device (*t)->dev_attr.attr.name, tg->base + i);if ((*t)->s2) { a2 = &su->u.a2; +sysfs_attr_init (&a2->dev_attr.attr); a2->dev_attr.attr.name = su->name; a2->nr = (*t)->u.s.nr + i; a2->index = (*t)->u.s.index;
@@ -1004,6 +1005,7 @@ nct6775_create_attr_group(struct device *attrs = &a2->dev_attr.attr; }else { a = &su->u.a1; +sysfs_attr_init (&a->dev_attr.attr); a->dev_attr.attr.name = su->name; a->index = (*t)->u.index + i; a->dev_attr.attr.mode =
Greg Kroah-Hartman
maintainerPATCH 42/148 hwmon: (nct6683) Add missing sysfs attribute initialization
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Guenter Roeck <[email protected]>
commit c7bd6dc320b85445b6b36a0aff41f929210027c7 upstream.
The following error message is seen when loading the nct6683 driver with DEBUG_LOCK_ALLOC enabled.
BUG: key ffff88040b2f0030 not in .data! ------------[ cut here ]------------ WARNING: CPU: 0 PID: 186 at kernel/locking/lockdep.c:2988 lockdep_init_map+0x469/0x630()
DEBUG_LOCKS_WARN_ON(1)
Caused by a missing call to sysfs_attr_init() when initializing sysfs attributes.
--- drivers/hwmon/nct6683.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/hwmon/nct6683.c +2 -0
@@ -439,6 +439,7 @@ nct6683_create_attr_group(struct device (*t)->dev_attr.attr.name, tg->base + i);if ((*t)->s2) { a2 = &su->u.a2; +sysfs_attr_init (&a2->dev_attr.attr); a2->dev_attr.attr.name = su->name; a2->nr = (*t)->u.s.nr + i; a2->index = (*t)->u.s.index;
@@ -449,6 +450,7 @@ nct6683_create_attr_group(struct device *attrs = &a2->dev_attr.attr; }else { a = &su->u.a1; +sysfs_attr_init (&a->dev_attr.attr); a->dev_attr.attr.name = su->name; a->index = (*t)->u.index + i; a->dev_attr.attr.mode =
Greg Kroah-Hartman
maintainerPATCH 43/148 clk: exynos5420: Restore GATE_BUS_TOP on suspend
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Javier Martinez Canillas <[email protected]>
commit 97372e5a99449b4fffa824a382ad6358066a9918 upstream.
Commit ae43b3289186 ("ARM: 8202/1: dmaengine: pl330: Add runtime Power Management support v12") added pm support for the pl330 dma driver but it makes the clock for the Exynos5420 MDMA0 DMA controller to be gated during suspend and this in turn makes its parent clock aclk266_g2d to be gated. But the clock needs to be ungated prior suspend to allow the system to be suspend and resumed correctly.
Add GATE_BUS_TOP register to the list of registers to be restored when the system enters into a suspend state so aclk266_g2d will be ungated.
Thanks to Abhilash Kesavan for figuring out that this was the issue.
--- drivers/clk/samsung/clk-exynos5420.c | 1 + 1 file changed, 1 insertion(+)
drivers/clk/samsung/clk-exynos5420.c +1 -0
@@ -271,6 +271,7 @@ static const struct samsung_clk_reg_dump { .offset = SRC_MASK_PERIC0, .value = 0x11111110, }, { .offset = SRC_MASK_PERIC1, .value = 0x11111100, }, { .offset = SRC_MASK_ISP, .value = 0x11111000, }, + { .offset = GATE_BUS_TOP, .value = 0xffffffff, }, { .offset = GATE_BUS_DISP1, .value = 0xffffffff, }, { .offset = GATE_IP_PERIC, .value = 0xffffffff, }, };
Greg Kroah-Hartman
maintainerPATCH 44/148 clk: add missing lock when call clk_core_enable in clk_set_parent
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dong Aisheng <[email protected]>
commit d2a5d46b167a9a8231264daf80165b739aecf1d7 upstream.
Before commit 035a61c314eb ("clk: Make clk API return per-user struct clk instances") we acquired the enable_lock in __clk_set_parent_{before,after}() by means of calling clk_enable(). After commit 035a61c314eb we use clk_core_enable() in place of the clk_enable(), and clk_core_enable() doesn't acquire the enable_lock. This opens up a race condition between clk_set_parent() and clk_enable(). Fix it.
--- drivers/clk/clk.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/clk/clk.c +8 -0
@@ -1443,8 +1443,10 @@ static struct clk_core *__clk_set_parent*/ if (clk->prepare_count) {clk_core_prepare (parent); + flags =clk_enable_lock ();clk_core_enable (parent);clk_core_enable (clk); +clk_enable_unlock (flags); }/* update the clk tree topology */
@@ -1459,13 +1461,17 @@ static void __clk_set_parent_after(strucstruct clk_core *parent, struct clk_core *old_parent) { + unsigned long flags; +/* * Finish the migration of prepare state and undo the changes done * for preventing a race with clk_enable(). */ if (core->prepare_count) { + flags =clk_enable_lock ();clk_core_disable (core);clk_core_disable (old_parent); +clk_enable_unlock (flags);clk_core_unprepare (old_parent); } }
@@ -1489,8 +1495,10 @@ static int __clk_set_parent(struct clk_cclk_enable_unlock (flags);if (clk->prepare_count) { + flags =clk_enable_lock ();clk_core_disable (clk);clk_core_disable (parent); +clk_enable_unlock (flags);clk_core_unprepare (parent); }return ret;
Greg Kroah-Hartman
maintainerPATCH 45/148 brcmfmac: avoid null pointer access when brcmf_msgbuf_get_pktid() fails
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arend van Spriel <[email protected]>
commit 7d072b404c5d8f1e0b62b6bc488dfeaa61bd2d8d upstream.
The function brcmf_msgbuf_get_pktid() may return a NULL pointer so the callers should check the return pointer before accessing it to avoid the crash below (see [1]):
brcmfmac: brcmf_msgbuf_get_pktid: Invalid packet id 273 (not in use)
BUG: unable to handle kernel NULL pointer dereference at 0000000000000080 IP: [<ffffffff8145b225>] skb_pull+0x5/0x50 PGD 0 Oops: 0000 [#1] PREEMPT SMP Modules linked in: pci_stub vboxpci(O) vboxnetflt(O) vboxnetadp(O) vboxdrv(O) snd_hda_codec_hdmi bnep mousedev hid_generic ushwmon msr ext4 crc16 mbcache jbd2 sd_mod uas usb_storage ahci libahci libata scsi_mod xhci_pci xhci_hcd usbcore usb_common CPU: 0 PID: 1661 Comm: irq/61-brcmf_pc Tainted: G O 4.0.1-MacbookPro-ARCH #1 Hardware name: Apple Inc. MacBookPro12,1/Mac-E43C1C25D4880AD6, BIOS MBP121.88Z.0167.B02.1503241251 03/24/2015 task: ffff880264203cc0 ti: ffff88025ffe4000 task.ti: ffff88025ffe4000 RIP: 0010:[<ffffffff8145b225>] [<ffffffff8145b225>] skb_pull+0x5/0x50 RSP: 0018:ffff88025ffe7d40 EFLAGS: 00010202 RAX: 0000000000000000 RBX: ffff88008a33c000 RCX: 0000000000000044 RDX: 0000000000000000 RSI: 000000000000004a RDI: 0000000000000000 RBP: ffff88025ffe7da8 R08: 0000000000000096 R09: 000000000000004a R10: 0000000000000000 R11: 000000000000048e R12: ffff88025ff14f00 R13: 0000000000000000 R14: ffff880263b48200 R15: ffff88008a33c000 FS: 0000000000000000(0000) GS:ffff88026ec00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000080 CR3: 000000000180b000 CR4: 00000000003407f0 Stack: ffffffffa06aed74 ffff88025ffe7dc8 ffff880263b48270 ffff880263b48278 05ea88020000004a 0002ffff81014635 000000001720b2f6 ffff88026ec116c0 ffff880263b48200 0000000000010000 ffff880263b4ae00 ffff880264203cc0 Call Trace: [<ffffffffa06aed74>] ? brcmf_msgbuf_process_rx+0x404/0x480 [brcmfmac] [<ffffffff810cea60>] ? irq_finalize_oneshot.part.30+0xf0/0xf0 [<ffffffffa06afb55>] brcmf_proto_msgbuf_rx_trigger+0x35/0xf0 [brcmfmac] [<ffffffffa06baf2a>] brcmf_pcie_isr_thread_v2+0x8a/0x130 [brcmfmac] [<ffffffff810cea80>] irq_thread_fn+0x20/0x50 [<ffffffff810ceddf>] irq_thread+0x13f/0x170 [<ffffffff810cebf0>] ? wake_threads_waitq+0x30/0x30 [<ffffffff810ceca0>] ? irq_thread_dtor+0xb0/0xb0 [<ffffffff81092a08>] kthread+0xd8/0xf0 [<ffffffff81092930>] ? kthread_create_on_node+0x1c0/0x1c0 [<ffffffff8156d898>] ret_from_fork+0x58/0x90 [<ffffffff81092930>] ? kthread_create_on_node+0x1c0/0x1c0 Code: 01 83 e2 f7 88 50 01 48 83 c4 08 5b 5d f3 c3 0f 1f 80 00 00 00 00 83 e2 f7 88 50 01 c3 66 0f 1f 84 00 00 00 00 00 0f 1f RIP [<ffffffff8145b225>] skb_pull+0x5/0x50 RSP <ffff88025ffe7d40> CR2: 0000000000000080 ---[ end trace b074c0f90e7c997d ]---
[1] http://mid.gmane.org/[email protected]
--- drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c +5 -7
@@ -512,11 +512,9 @@ static int brcmf_msgbuf_query_dcmd(struc msgbuf->rx_pktids, msgbuf->ioctl_resp_pktid);if (msgbuf->ioctl_resp_ret_len !=0 ) { -if (!skb) { -brcmf_err ("Invalid packet id idx recv'd %d\n" , - msgbuf->ioctl_resp_pktid); +if (!skb)return -EBADF ; - } +memcpy (buf, skb->data, (len < msgbuf->ioctl_resp_ret_len) ? len : msgbuf->ioctl_resp_ret_len); }
@@ -875,10 +873,8 @@ brcmf_msgbuf_process_txstatus(struct brc flowid -=BRCMF_NROF_H2D_COMMON_MSGRINGS ; skb =brcmf_msgbuf_get_pktid (msgbuf->drvr->bus_if->dev, msgbuf->tx_pktids, idx); -if (!skb) { -brcmf_err ("Invalid packet id idx recv'd %d\n" , idx); +if (!skb)return ; - }set_bit (flowid, msgbuf->txstatus_done_map); commonring = msgbuf->flowrings[flowid];
@@ -1157,6 +1153,8 @@ brcmf_msgbuf_process_rx_complete(struct skb =brcmf_msgbuf_get_pktid (msgbuf->drvr->bus_if->dev, msgbuf->rx_pktids, idx); +if (!skb) +return ;if (data_offset)skb_pull (skb, data_offset);
Greg Kroah-Hartman
maintainerPATCH 46/148 lib: Fix strnlen_user() to not touch memory after specified maximum
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit f18c34e483ff6b1d9866472221e4015b3a4698e4 upstream.
If the specified maximum length of the string is a multiple of unsigned long, we would load one long behind the specified maximum. If that happens to be in a next page, we can hit a page fault although we were not expected to.
Fix the off-by-one bug in the test whether we are at the end of the specified range.
--- lib/strnlen_user.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
lib/strnlen_user.c +2 -1
@@ -57,7 +57,8 @@ static inline long do_strnlen_user(constreturn res +find_zero (data) +1 - align; } res +=sizeof (unsigned long ); -if (unlikely (max <sizeof (unsigned long ))) +/* We already handled 'unsigned long' bytes. Did we do it all ? */ +if (unlikely (max <=sizeof (unsigned long )))break ; max -=sizeof (unsigned long );if (unlikely (__get_user (c,(unsigned long __user *)(src+res))))
Greg Kroah-Hartman
maintainerPATCH 47/148 d_walk() might skip too much
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
commit 2159184ea01e4ae7d15f2017e296d4bc82d5aeb0 upstream.
when we find that a child has died while we'd been trying to ascend, we should go into the first live sibling itself, rather than its sibling.
Off-by-one in question had been introduced in "deal with deadlock in d_walk()" and the fix needs to be backported to all branches this one has been backported to.
--- fs/dcache.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
fs/dcache.c +4 -4
@@ -1205,13 +1205,13 @@ ascend:/* might go back up the wrong parent if we have had a rename. */ if (need_seqretry (&rename_lock, seq)) goto rename_retry; - next = child->d_child.next; -while (unlikely (child->d_flags &DCACHE_DENTRY_KILLED )) { +/* go into the first sibling still alive */ +do { + next = child->d_child.next;if (next == &this_parent->d_subdirs) goto ascend; child = list_entry(next, struct dentry, d_child); - next = next->next; - } + }while (unlikely (child->d_flags &DCACHE_DENTRY_KILLED ));rcu_read_unlock (); goto resume; }
Greg Kroah-Hartman
maintainerPATCH 48/148 module: Call module notifier on failure after complete_formation()
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt <[email protected]>
commit 37815bf866ab6722a47550f8d25ad3f1a16a680c upstream.
The module notifier call chain for MODULE_STATE_COMING was moved up before the parsing of args, into the complete_formation() call. But if the module failed to load after that, the notifier call chain for MODULE_STATE_GOING was never called and that prevented the users of those call chains from cleaning up anything that was allocated.
--- kernel/module.c | 3 +++ 1 file changed, 3 insertions(+)
kernel/module.c +3 -0
@@ -3366,6 +3366,9 @@ static int load_module(struct load_infomodule_bug_cleanup (mod);mutex_unlock (&module_mutex); +blocking_notifier_call_chain (&module_notify_list, +MODULE_STATE_GOING , mod); +/* we can't deallocate the module until we clear memory protection */ unset_module_init_ro_nx (mod);unset_module_core_ro_nx (mod);
Greg Kroah-Hartman
maintainerPATCH 49/148 ALSA: usb-audio: Add quirk for MS LifeCam Studio
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit fa94b0d72511add5822dc4124f2a3eae66b8863f upstream.
Microsoft LifeCam Studio (045e:0772) needs a similar quirk for suppressing the wrong sample rate inquiry.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=98481
--- sound/usb/quirks.c | 1 + 1 file changed, 1 insertion(+)
sound/usb/quirks.c +1 -0
@@ -1117,6 +1117,7 @@ bool snd_usb_get_sample_rate_quirk(strucswitch (chip->usb_id) {case USB_ID (0x045E ,0x075D ):/* MS Lifecam Cinema */ case USB_ID (0x045E ,0x076D ):/* MS Lifecam HD-5000 */ +case USB_ID (0x045E ,0x0772 ):/* MS Lifecam Studio */ case USB_ID (0x04D8 ,0xFEEA ):/* Benchmark DAC1 Pre */ return true; }
Greg Kroah-Hartman
maintainerPATCH 50/148 ALSA: hda - Add Conexant codecs CX20721, CX20722, CX20723 and CX20724
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Henningsson <[email protected]>
commit 6ffc0898b29a2811a6c0569c5dd9b581980110df upstream.
This patch adds support for Conexant HD Audio codecs CX20721, CX20722, CX20723 and CX20724.
--- sound/pci/hda/patch_conexant.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
sound/pci/hda/patch_conexant.c +12 -0
@@ -973,6 +973,14 @@ static const struct hda_codec_preset snd .patch = patch_conexant_auto }, { .id = 0x14f150b9, .name = "CX20665", .patch = patch_conexant_auto }, + { .id = 0x14f150f1, .name = "CX20721", + .patch = patch_conexant_auto }, + { .id = 0x14f150f2, .name = "CX20722", + .patch = patch_conexant_auto }, + { .id = 0x14f150f3, .name = "CX20723", + .patch = patch_conexant_auto }, + { .id = 0x14f150f4, .name = "CX20724", + .patch = patch_conexant_auto }, { .id = 0x14f1510f, .name = "CX20751/2", .patch = patch_conexant_auto }, { .id = 0x14f15110, .name = "CX20751/2",
@@ -1007,6 +1015,10 @@ MODULE_ALIAS("snd-hda-codec-id:14f150ab"MODULE_ALIAS ("snd-hda-codec-id:14f150ac" );MODULE_ALIAS ("snd-hda-codec-id:14f150b8" );MODULE_ALIAS ("snd-hda-codec-id:14f150b9" ); +MODULE_ALIAS ("snd-hda-codec-id:14f150f1" ); +MODULE_ALIAS ("snd-hda-codec-id:14f150f2" ); +MODULE_ALIAS ("snd-hda-codec-id:14f150f3" ); +MODULE_ALIAS ("snd-hda-codec-id:14f150f4" );MODULE_ALIAS ("snd-hda-codec-id:14f1510f" );MODULE_ALIAS ("snd-hda-codec-id:14f15110" );MODULE_ALIAS ("snd-hda-codec-id:14f15111" );
Greg Kroah-Hartman
maintainerPATCH 51/148 ALSA: hda - Add headphone quirk for Lifebook E752
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 88776f366ede7d9cdce60bd2c9753dd6d6fa8b77 upstream.
Fujitsu Lifebook E752 laptop needs a similar quirk done for Lifebook T731. Otherwise the headphone is always muted.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -5027,6 +5027,7 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x104d ,0x9099 ,"Sony VAIO S13" ,ALC275_FIXUP_SONY_DISABLE_AAMIX ),SND_PCI_QUIRK (0x10cf ,0x1475 ,"Lifebook" ,ALC269_FIXUP_LIFEBOOK ),SND_PCI_QUIRK (0x10cf ,0x15dc ,"Lifebook T731" ,ALC269_FIXUP_LIFEBOOK_HP_PIN ), +SND_PCI_QUIRK (0x10cf ,0x1757 ,"Lifebook E752" ,ALC269_FIXUP_LIFEBOOK_HP_PIN ),SND_PCI_QUIRK (0x10cf ,0x1845 ,"Lifebook U904" ,ALC269_FIXUP_LIFEBOOK_EXTMIC ),SND_PCI_QUIRK (0x144d ,0xc109 ,"Samsung Ativ book 9 (NP900X3G)" ,ALC269_FIXUP_INV_DMIC ), SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
Greg Kroah-Hartman
maintainerPATCH 52/148 ALSA: hda - Add headset mic quirk for Dell Inspiron 5548
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Henningsson <[email protected]>
commit 9b5a4e395c2f39fae89f75e4a749be5dba342d22 upstream.
This enables the headset microphone on Dell Inspiron 5548, or at least some variants of it.
--- sound/pci/hda/patch_realtek.c | 7 +++++++ 1 file changed, 7 insertions(+)
sound/pci/hda/patch_realtek.c +7 -0
@@ -5247,6 +5247,13 @@ static const struct snd_hda_pin_quirk al {0x17, 0x40000000}, {0x1d, 0x40700001}, {0x21, 0x02211050}), +SND_HDA_PIN_QUIRK (0x10ec0255 ,0x1028 ,"Dell Inspiron 5548" ,ALC255_FIXUP_DELL1_MIC_NO_PRESENCE , +ALC255_STANDARD_PINS , + {0x12, 0x90a60180}, + {0x14, 0x90170130}, + {0x17, 0x40000000}, + {0x1d, 0x40700001}, + {0x21, 0x02211040}),SND_HDA_PIN_QUIRK (0x10ec0256 ,0x1028 ,"Dell" ,ALC255_FIXUP_DELL1_MIC_NO_PRESENCE ,ALC256_STANDARD_PINS , {0x13, 0x40000000}),
Greg Kroah-Hartman
maintainerPATCH 53/148 ALSA: hda/realtek - ALC292 dock fix for Thinkpad L450
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ansgar Hegerfeld <[email protected]>
commit 09ea997677cd44ebe7f42573119aaf46b775c683 upstream.
The Lenovo ThinkPad L450 requires the ALC292_FIXUP_TPT440_DOCK fix in order to get sound output on the docking stations audio port.
This patch was tested using a ThinkPad L450 (20DSS00B00) using kernel 4.0.3 and a ThinkPad Pro Dock.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -5057,6 +5057,7 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x17aa ,0x5026 ,"Thinkpad" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ),SND_PCI_QUIRK (0x17aa ,0x5034 ,"Thinkpad T450" ,ALC292_FIXUP_TPT440_DOCK ),SND_PCI_QUIRK (0x17aa ,0x5036 ,"Thinkpad T450s" ,ALC292_FIXUP_TPT440_DOCK ), +SND_PCI_QUIRK (0x17aa ,0x503c ,"Thinkpad L450" ,ALC292_FIXUP_TPT440_DOCK ),SND_PCI_QUIRK (0x17aa ,0x5109 ,"Thinkpad" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ),SND_PCI_QUIRK (0x17aa ,0x3bf8 ,"Quanta FL1" ,ALC269_FIXUP_PCM_44K ), SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
Greg Kroah-Hartman
maintainerPATCH 54/148 ALSA: usb-audio: Add quirk for MS LifeCam HD-3000
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Vittorio G (VittGam)" <[email protected]>
commit ae425bb2a05bebe786a25cc8ae64e9d16c4d9b83 upstream.
Microsoft LifeCam HD-3000 (045e:0779) needs a similar quirk for suppressing the unsupported sample rate inquiry.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=98481
--- sound/usb/quirks.c | 1 + 1 file changed, 1 insertion(+)
sound/usb/quirks.c +1 -0
@@ -1118,6 +1118,7 @@ bool snd_usb_get_sample_rate_quirk(struccase USB_ID (0x045E ,0x075D ):/* MS Lifecam Cinema */ case USB_ID (0x045E ,0x076D ):/* MS Lifecam HD-5000 */ case USB_ID (0x045E ,0x0772 ):/* MS Lifecam Studio */ +case USB_ID (0x045E ,0x0779 ):/* MS Lifecam HD-3000 */ case USB_ID (0x04D8 ,0xFEEA ):/* Benchmark DAC1 Pre */ return true; }
Greg Kroah-Hartman
maintainerPATCH 56/148 ALSA: hda - Fix noise on AMD radeon 290x controller
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 0fa372b6c95013af1334b3d5c9b5f03a70ecedab upstream.
A new AMD controller [1002:aac8] seems to need the quirk for other AMD NS HDMI stuff, otherwise it gives noisy sounds.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=99021
--- sound/pci/hda/hda_intel.c | 2 ++ 1 file changed, 2 insertions(+)
sound/pci/hda/hda_intel.c +2 -0
@@ -2108,6 +2108,8 @@ static const struct pci_device_id azx_id .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, { PCI_DEVICE(0x1002, 0xaab0), .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, + { PCI_DEVICE(0x1002, 0xaac8), + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS }, /* VIA VT8251/VT8237A */ { PCI_DEVICE(0x1106, 0x3288), .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
Greg Kroah-Hartman
maintainerPATCH 57/148 ASoC: mc13783: Fix wrong mask value used in mc13xxx_reg_rmw() calls
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Axel Lin <[email protected]>
commit 545774bd6e1427d98dde77244329d2311c5eca6f upstream.
mc13xxx_reg_rmw() won't change any bit if passing 0 to the mask field. Pass AUDIO_SSI_SEL instead of 0 for the mask field to set AUDIO_SSI_SEL bit.
--- sound/soc/codecs/mc13783.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/codecs/mc13783.c +2 -2
@@ -623,14 +623,14 @@ static int mc13783_probe(struct snd_soc_ AUDIO_SSI_SEL, 0); else mc13xxx_reg_rmw(priv->mc13xxx, MC13783_AUDIO_CODEC, - 0, AUDIO_SSI_SEL); +AUDIO_SSI_SEL ,AUDIO_SSI_SEL );if (priv->dac_ssi_port ==MC13783_SSI1_PORT )mc13xxx_reg_rmw (priv->mc13xxx,MC13783_AUDIO_DAC ,AUDIO_SSI_SEL ,0 );else mc13xxx_reg_rmw (priv->mc13xxx,MC13783_AUDIO_DAC , -0 ,AUDIO_SSI_SEL ); +AUDIO_SSI_SEL ,AUDIO_SSI_SEL );return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 58/148 ASoC: uda1380: Avoid accessing i2c bus when codec is disabled
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vasily Khoruzhick <[email protected]>
commit 810e4425c224af6be67dff68c8832af1b5a11f89 upstream.
set_dai_fmt_both() callback is called from snd_soc_runtime_set_dai_fmt() which is called from snd_soc_register_card(), but at this time codec is not powered on yet. Replace direct i2c write with regcache write.
--- sound/soc/codecs/uda1380.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/codecs/uda1380.c +1 -1
@@ -437,7 +437,7 @@ static int uda1380_set_dai_fmt_both(struif ((fmt &SND_SOC_DAIFMT_MASTER_MASK ) !=SND_SOC_DAIFMT_CBS_CFS )return -EINVAL ; -uda1380_write (codec,UDA1380_IFACE , iface); +uda1380_write_reg_cache (codec,UDA1380_IFACE , iface);return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 59/148 ASoC: dapm: Modify widget stream name according to prefix
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Koro Chen <[email protected]>
commit fdb6eb0a12871d5bfaf266c5a0d5259a5437a72f upstream.
When there is prefix specified, currently we will add this prefix in widget->name, but not in widget->sname.
it causes failure at snd_soc_dapm_link_dai_widgets:
if (!w->sname || !strstr(w->sname, dai_w->name))
because dai_w->name has prefix added, but w->sname does not. We should also add prefix for stream name
--- sound/soc/soc-dapm.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
sound/soc/soc-dapm.c +8 -3
@@ -3074,11 +3074,16 @@ snd_soc_dapm_new_control(struct snd_soc_ } prefix =soc_dapm_prefix (dapm); -if (prefix) +if (prefix) { w->name =kasprintf (GFP_KERNEL ,"%s %s" , prefix, widget->name); -else +if (widget->sname) + w->sname =kasprintf (GFP_KERNEL ,"%s %s" , prefix, + widget->sname); + }else { w->name =kasprintf (GFP_KERNEL ,"%s" , widget->name); - +if (widget->sname) + w->sname =kasprintf (GFP_KERNEL ,"%s" , widget->sname); + }if (w->name ==NULL ) {kfree (w);return NULL ;
Greg Kroah-Hartman
maintainerPATCH 60/148 ASoC: wm8960: fix "RINPUT3" audio route error
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zidan Wang <[email protected]>
commit 85e36a1f4a735d991ba5106781ea48e89a0b8901 upstream.
It should be "RINPUT3" instead of "LINPUT3" route to "Right Input Mixer".
--- sound/soc/codecs/wm8960.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/codecs/wm8960.c +1 -1
@@ -395,7 +395,7 @@ static const struct snd_soc_dapm_route a { "Right Input Mixer", "Boost Switch", "Right Boost Mixer", }, { "Right Input Mixer", NULL, "RINPUT1", }, /* Really Boost Switch */ { "Right Input Mixer", NULL, "RINPUT2" }, - { "Right Input Mixer", NULL, "LINPUT3" }, + { "Right Input Mixer", NULL, "RINPUT3" }, { "Left ADC", NULL, "Left Input Mixer" }, { "Right ADC", NULL, "Right Input Mixer" },
Greg Kroah-Hartman
maintainerPATCH 61/148 ASoC: wm8994: correct BCLK DIV 348 to 384
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zidan Wang <[email protected]>
commit 17fc2e0a3db11889e942c5ab15a1fcb876638f25 upstream.
According to the RM of wm8958, BCLK DIV 348 doesn't exist, correct it to 384.
--- sound/soc/codecs/wm8994.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/codecs/wm8994.c +1 -1
@@ -2754,7 +2754,7 @@ static struct { };static int fs_ratios[] = { -64 ,128 ,192 ,256 ,348 ,512 ,768 ,1024 ,1408 ,1536 +64 ,128 ,192 ,256 ,384 ,512 ,768 ,1024 ,1408 ,1536 };static int bclk_divs[] = {
Greg Kroah-Hartman
maintainerPATCH 62/148 RDMA/core: Fix for parsing netlink string attribute
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tatyana Nikolova <[email protected]>
commit ec04847c0c5b471bab2dacceadfdb803a9d1a2ea upstream.
The string iwpm_ulib_name is recorded in a nlmsg as a netlink attribute. Without this fix parsing of the nlmsg by the userspace port mapper service fails because of unknown attribute length, causing the port mapper service not to register the client, which has sent the nlmsg.
--- drivers/infiniband/core/iwpm_msg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/infiniband/core/iwpm_msg.c +1 -1
@@ -33,7 +33,7 @@#include "iwpm_util.h" -static const char iwpm_ulib_name[] ="iWarpPortMapperUser" ; +static const char iwpm_ulib_name[IWPM_ULIBNAME_SIZE ] ="iWarpPortMapperUser" ;static int iwpm_ulib_version =3 ;static int iwpm_user_pid =IWPM_PID_UNDEFINED ;static atomic_t echo_nlmsg_seq;
Greg Kroah-Hartman
maintainerPATCH 64/148 staging: vt6656: use ieee80211_tx_info to select packet type.
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Malcolm Priestley <[email protected]>
commit b23f14302e86628625ac3982a6d23e35888755f2 upstream.
Information for packet type is in ieee80211_tx_info
band IEEE80211_BAND_5GHZ for PK_TYPE_11A.
IEEE80211_TX_RC_USE_CTS_PROTECT via tx_rate flags selects PK_TYPE_11GB
This ensures that the packet is always the right type.
--- drivers/staging/vt6656/rxtx.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
drivers/staging/vt6656/rxtx.c +11 -3
@@ -805,10 +805,18 @@ int vnt_tx_packet(struct vnt_private *prvnt_schedule_command (priv,WLAN_CMD_SETPOWER ); } -if (current_rate >RATE_11M ) - pkt_type = priv->packet_type; -else +if (current_rate >RATE_11M ) { +if (info->band ==IEEE80211_BAND_5GHZ ) { + pkt_type =PK_TYPE_11A ; + }else { +if (tx_rate->flags &IEEE80211_TX_RC_USE_CTS_PROTECT ) + pkt_type =PK_TYPE_11GB ; +else + pkt_type =PK_TYPE_11GA ; + } + }else { pkt_type =PK_TYPE_11B ; + }spin_lock_irqsave (&priv->lock, flags);
Greg Kroah-Hartman
maintainerPATCH 65/148 staging: vt6655: device_free_tx_buf use only ieee80211_tx_status_irqsafe
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Malcolm Priestley <[email protected]>
commit 3fa0917beb29d886550fcf61a6378563d1ce9684 upstream.
TD_FLAGS_NETIF_SKB is only for data.
Fixes issue of ack frames not being reported.
--- drivers/staging/vt6655/device_main.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/staging/vt6655/device_main.c +1 -3
@@ -988,10 +988,8 @@ static void device_free_tx_buf(struct vn PCI_DMA_TODEVICE); } -if (pTDInfo->byFlags &TD_FLAGS_NETIF_SKB ) +if (skb)ieee80211_tx_status_irqsafe (pDevice->hw, skb); -else -dev_kfree_skb_irq (skb); pTDInfo->skb_dma =0 ; pTDInfo->skb =NULL ;
Greg Kroah-Hartman
maintainerPATCH 66/148 staging: vt6655: implement IEEE80211_TX_STAT_NOACK_TRANSMITTED
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Malcolm Priestley <[email protected]>
commit 6e44dc4be009eef60a1744e4a4b830131f6b9a8e upstream.
Make use of this macro for non ack frames.
--- drivers/staging/vt6655/device_main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/staging/vt6655/device_main.c +5 -1
@@ -911,7 +911,11 @@ static int vnt_int_report_rate(struct vnif (!(tsr1 &TSR1_TERR )) { info->status.rates[0 ].idx = idx; - info->flags |=IEEE80211_TX_STAT_ACK ; + +if (info->flags &IEEE80211_TX_CTL_NO_ACK ) + info->flags |=IEEE80211_TX_STAT_NOACK_TRANSMITTED ; +else + info->flags |=IEEE80211_TX_STAT_ACK ; }return 0 ;
Greg Kroah-Hartman
maintainerPATCH 67/148 staging: vt6655: Fix 80211 control and management status reporting.
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Malcolm Priestley <[email protected]>
commit ad3fee9b17b90b8f1ac94b615111b2f14dd90adb upstream.
Currently only TD_FLAGS_NETIF_SKB are reported back to mac80211.
Move vnt_int_report_rate to report all frame types.
--- drivers/staging/vt6655/device_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/staging/vt6655/device_main.c +3 -3
@@ -940,9 +940,6 @@ static int device_tx_srv(struct vnt_priv//Only the status of first TD in the chain is correct if (pTD->m_td1TD1.byTCR &TCR_STP ) {if ((pTD->pTDInfo->byFlags &TD_FLAGS_NETIF_SKB ) !=0 ) { - -vnt_int_report_rate (pDevice, pTD->pTDInfo, byTsr0, byTsr1); -if (!(byTsr1 &TSR1_TERR )) {if (byTsr0 !=0 ) { pr_debug(" Tx[%d] OK but has error. tsr1[%02X] tsr0[%02X]\n",
@@ -961,6 +958,9 @@ static int device_tx_srv(struct vnt_priv (int)uIdx, byTsr1, byTsr0); } } + +vnt_int_report_rate (pDevice, pTD->pTDInfo, byTsr0, byTsr1); +device_free_tx_buf (pDevice, pTD); pDevice->iTDUsed[uIdx]--; }
Greg Kroah-Hartman
maintainerPATCH 68/148 staging: vt6655: vnt_tx_packet Correct TX order of OWNED_BY_NIC
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Malcolm Priestley <[email protected]>
commit d65d2b25d2761153390df8026cca1a528d9b6c5a upstream.
The state of m_td0TD0.f1Owner should change after the buff_addr has been filled otherwise the device grabs the buffer too early.
m_td0TD0.f1Owner is protected by memory barriers on both sides of change.
iTDUsed is best incremented after MACvTransmit.
It appears that f1Owner actually polls to do the memory transfer.
A back port patch will be needed for v3.19
--- drivers/staging/vt6655/device_main.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-)
drivers/staging/vt6655/device_main.c +7 -8
@@ -1203,14 +1203,6 @@ static int vnt_tx_packet(struct vnt_privif (dma_idx ==TYPE_AC0DMA ) head_td->pTDInfo->byFlags =TD_FLAGS_NETIF_SKB ; - priv->iTDUsed[dma_idx]++; - -/* Take ownership */ -wmb (); - head_td->m_td0TD0.f1Owner =OWNED_BY_NIC ; - -/* get Next */ -wmb (); priv->apCurrTD[dma_idx] = head_td->next;spin_unlock_irqrestore (&priv->lock, flags);
@@ -1231,11 +1223,18 @@ static int vnt_tx_packet(struct vnt_priv head_td->buff_addr =cpu_to_le32 (head_td->pTDInfo->skb_dma); +/* Poll Transmit the adapter */ +wmb (); + head_td->m_td0TD0.f1Owner =OWNED_BY_NIC ; +wmb ();/* second memory barrier */ +if (head_td->pTDInfo->byFlags &TD_FLAGS_NETIF_SKB )MACvTransmitAC0 (priv->PortOffset);else MACvTransmit0 (priv->PortOffset); + priv->iTDUsed[dma_idx]++; +spin_unlock_irqrestore (&priv->lock, flags);return 0 ;
Greg Kroah-Hartman
maintainerPATCH 69/148 staging: vt6655: lock MACvWriteBSSIDAddress.
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Malcolm Priestley <[email protected]>
commit 664a5c1d1e33cd89cb7883e8c74638cc482b5da7 upstream.
This function selects page 1 and cause intermittent problems on interrupt handler.
lock call with spin_lock_irqsave.
--- drivers/staging/vt6655/device_main.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/staging/vt6655/device_main.c +8 -1
@@ -1414,9 +1414,16 @@ static void vnt_bss_info_changed(struct priv->current_aid = conf->aid; -if (changed &BSS_CHANGED_BSSID ) +if (changed &BSS_CHANGED_BSSID ) { +unsigned long flags; + +spin_lock_irqsave (&priv->lock, flags); +MACvWriteBSSIDAddress (priv->PortOffset, (u8 *)conf->bssid); +spin_unlock_irqrestore (&priv->lock, flags); + } +if (changed &BSS_CHANGED_BASIC_RATES ) { priv->basic_rates = conf->basic_rates;
Greg Kroah-Hartman
maintainerPATCH 70/148 perf/x86/rapl: Enable Broadwell-U RAPL support
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stephane Eranian <[email protected]>
commit 44b11fee51711ca85aa2b121a49bf029d18a3722 upstream.
This patch enables RAPL counters (energy consumption counters) support for Intel Broadwell-U processors (Model 61):
To use:
$ perf stat -a -I 1000 -e power/energy-cores/,power/energy-pkg/,power/energy-ram/ sleep 10
--- arch/x86/kernel/cpu/perf_event_intel_rapl.c | 1 + 1 file changed, 1 insertion(+)
arch/x86/kernel/cpu/perf_event_intel_rapl.c +1 -0
@@ -680,6 +680,7 @@ static int __init rapl_pmu_init(void)break ;case 60 :/* Haswell */ case 69 :/* Haswell-Celeron */ +case 61 :/* Broadwell */ rapl_cntr_mask =RAPL_IDX_HSW ; rapl_pmu_events_group.attrs = rapl_events_hsw_attr;break ;
Greg Kroah-Hartman
maintainerPATCH 71/148 target/pscsi: Dont leak scsi_host if hba is VIRTUAL_HOST
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Grover <[email protected]>
commit 5a7125c64def3b21f8147eca8b54949a60963942 upstream.
See https://bugzilla.redhat.com/show_bug.cgi?id=1025672
We need to put() the reference to the scsi host that we got in pscsi_configure_device(). In VIRTUAL_HOST mode it is associated with the dev_virt, not the hba_virt.
--- drivers/target/target_core_pscsi.c | 3 +++ drivers/target/target_core_pscsi.h | 1 + 2 files changed, 4 insertions(+)
drivers/target/target_core_pscsi.c +3 -0
@@ -521,6 +521,7 @@ static int pscsi_configure_device(struct " pdv_host_id: %d\n", pdv->pdv_host_id);return -EINVAL ; } + pdv->pdv_lld_host = sh; } }else {if (phv->phv_mode ==PHV_VIRTUAL_HOST_ID ) {
@@ -603,6 +604,8 @@ static void pscsi_free_device(struct se_if ((phv->phv_mode ==PHV_LLD_SCSI_HOST_NO ) && (phv->phv_lld_host !=NULL ))scsi_host_put (phv->phv_lld_host); +else if (pdv->pdv_lld_host) +scsi_host_put (pdv->pdv_lld_host);if ((sd->type ==TYPE_DISK ) || (sd->type ==TYPE_ROM ))scsi_device_put (sd);
drivers/target/target_core_pscsi.h +1 -0
@@ -45,6 +45,7 @@ struct pscsi_dev_virt {int pdv_lun_id;struct block_device *pdv_bd;struct scsi_device *pdv_sd; +struct Scsi_Host *pdv_lld_host; }____cacheline_aligned ; typedef enum phv_modes {
Greg Kroah-Hartman
maintainerPATCH 72/148 xhci: fix isoc endpoint dequeue from advancing too far on transaction error
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathias Nyman <[email protected]>
commit d104d0152a97fade389f47635b73a9ccc7295d0b upstream.
Isoc TDs usually consist of one TRB, sometimes two. When all goes well we receive only one success event for a TD, and move the dequeue pointer to the next TD.
This fails if the TD consists of two TRBs and we get a transfer error on the first TRB, we will then see two events for that TD.
Fix this by making sure the event we get is for the last TRB in that TD before moving the dequeue pointer to the next TD. This will resolve some of the uvc and dvb issues with the
"ERROR Transfer event TRB DMA ptr not part of current TD" error message
--- drivers/usb/host/xhci-ring.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/usb/host/xhci-ring.c +5 -0
@@ -2026,8 +2026,13 @@ static int process_isoc_td(struct xhci_hbreak ;case COMP_DEV_ERR :case COMP_STALL : + frame->status = -EPROTO ; + skip_td = true; +break ;case COMP_TX_ERR : frame->status = -EPROTO ; +if (event_trb != td->last_trb) +return 0 ; skip_td = true;break ;case COMP_STOP :
Greg Kroah-Hartman
maintainerPATCH 73/148 xhci: Solve full event ring by increasing TRBS_PER_SEGMENT to 256
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathias Nyman <[email protected]>
commit 18cc2f4cbbaf825a4fedcf2d60fd388d291e0a38 upstream.
Our event ring consists of only one segment, and we risk filling the event ring in case we get isoc transfers with short intervals such as webcams that fill a TD every microframe (125us)
With 64 TRB segment size one usb camera could fill the event ring in 8ms. A setup with several cameras and other devices can fill up the event ring as it is shared between all devices.
This has occurred when uvcvideo queues 5 * 32TD URBs which then get cancelled when the video mode changes. The cancelled URBs are returned in the xhci interrupt context and blocks the interrupt handler from handling the new events.
A full event ring will block xhci from scheduling traffic and affect all devices conneted to the xhci, will see errors such as Missed Service Intervals for isoc devices, and and Split transaction errors for LS/FS interrupt devices.
Increasing the TRB_PER_SEGMENT will also increase the default endpoint ring size, which is welcome as for most isoc transfer we had to dynamically expand the endpoint ring anyway to be able to queue the 5 * 32TDs uvcvideo queues.
The default size used to be 64 TRBs per segment
--- drivers/usb/host/xhci.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/host/xhci.h +1 -1
@@ -1267,7 +1267,7 @@ union xhci_trb {* since the command ring is 64-byte aligned. * It must also be greater than 16. */ -#define TRBS_PER_SEGMENT 64 +#define TRBS_PER_SEGMENT 256/* Allow two commands + a link TRB, along with any reserved command TRBs */ #define MAX_RSVD_CMD_TRBS (TRBS_PER_SEGMENT - 3)#define TRB_SEGMENT_SIZE (TRBS_PER_SEGMENT*16)
Greg Kroah-Hartman
maintainerPATCH 74/148 xhci: gracefully handle xhci_irq dead device
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Joe Lawrence <[email protected]>
commit 948fa13504f80b9765d2b753691ab94c83a10341 upstream.
If the xHCI host controller has died (ie, device removed) or suffered other serious fatal error (STS_FATAL), then xhci_irq should handle this condition with IRQ_HANDLED instead of -ESHUTDOWN.
--- drivers/usb/host/xhci-ring.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/host/xhci-ring.c +1 -1
@@ -2645,7 +2645,7 @@ irqreturn_t xhci_irq(struct usb_hcd *hcdxhci_halt (xhci); hw_died:spin_unlock (&xhci->lock); -return -ESHUTDOWN ; +return IRQ_HANDLED ; }/*
Greg Kroah-Hartman
maintainerPATCH 75/148 USB: visor: Match I330 phone more precisely
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Jason A. Donenfeld" <[email protected]>
commit 82ee3aeb9295c5fc37fd2ddf20f13ac2b40ec97d upstream.
Samsung has just released a portable USB3 SSD, coming in a very small and nice form factor. It's USB ID is 04e8:8001, which unfortunately is already used by the Palm Visor driver for the Samsung I330 phone cradle. Having pl2303 or visor pick up this device ID results in conflicts with the usb-storage driver, which handles the newly released portable USB3 SSD.
To work around this conflict, I've dug up a mailing list post [1] from a long time ago, in which a user posts the full USB descriptor information. The most specific value in this appears to be the interface class, which has value 255 (0xff). Since usb-storage requires an interface class of 0x8, I believe it's correct to disambiguate the two devices by matching on 0xff inside visor.
[1] http://permalink.gmane.org/gmane.linux.usb.user/4264
--- drivers/usb/serial/visor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/serial/visor.c +1 -1
@@ -95,7 +95,7 @@ static const struct usb_device_id id_tab .driver_info = (kernel_ulong_t)&palm_os_4_probe }, { USB_DEVICE(ACER_VENDOR_ID, ACER_S10_ID), .driver_info = (kernel_ulong_t)&palm_os_4_probe }, - { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID), + { USB_DEVICE_INTERFACE_CLASS(SAMSUNG_VENDOR_ID, SAMSUNG_SCH_I330_ID, 0xff), .driver_info = (kernel_ulong_t)&palm_os_4_probe }, { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_SPH_I500_ID), .driver_info = (kernel_ulong_t)&palm_os_4_probe },
Greg Kroah-Hartman
maintainerPATCH 76/148 USB: pl2303: Remove support for Samsung I330
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Jason A. Donenfeld" <[email protected]>
commit 48ef23a4f686b1e4519d4193c20d26834ff810ff upstream.
This phone is already supported by the visor driver.
--- drivers/usb/serial/pl2303.c | 1 - drivers/usb/serial/pl2303.h | 4 ---- 2 files changed, 5 deletions(-)
drivers/usb/serial/pl2303.c +0 -1
@@ -61,7 +61,6 @@ static const struct usb_device_id id_tab { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) }, { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) }, { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) }, - { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) }, { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1), .driver_info = PL2303_QUIRK_UART_STATE_IDX0 }, { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65),
drivers/usb/serial/pl2303.h +0 -4
@@ -62,10 +62,6 @@#define ALCATEL_VENDOR_ID 0x11f7#define ALCATEL_PRODUCT_ID 0x02df -/* Samsung I330 phone cradle */ -#define SAMSUNG_VENDOR_ID 0x04e8 -#define SAMSUNG_PRODUCT_ID 0x8001 -#define SIEMENS_VENDOR_ID 0x11f5#define SIEMENS_PRODUCT_ID_SX1 0x0001#define SIEMENS_PRODUCT_ID_X65 0x0003
Greg Kroah-Hartman
maintainerPATCH 77/148 USB: cp210x: add ID for KCF Technologies PRN device
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Edwards <[email protected]>
commit c735ed74d83f8ecb45c4c4c95a16853c9c3c8157 upstream.
Added the USB serial console device ID for KCF Technologies PRN device which has a USB port for its serial console.
--- drivers/usb/serial/cp210x.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/serial/cp210x.c +1 -0
@@ -127,6 +127,7 @@ static const struct usb_device_id id_tab { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */ { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */ + { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */ { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
Greg Kroah-Hartman
maintainerPATCH 78/148 usb-storage: Add NO_WP_DETECT quirk for Lacie 059f:0651 devices
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
commit 172115090f5e739660b97694618a2ba86457063a upstream.
Without this flag some versions of these enclosures do not work.
--- drivers/usb/storage/unusual_devs.h | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/usb/storage/unusual_devs.h +7 -0
@@ -766,6 +766,13 @@ UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_GO_SLOW ), +/* Reported by Christian Schaller <[email protected]> */ +UNUSUAL_DEV (0x059f ,0x0651 ,0x0000 ,0x0000 , +"LaCie" , +"External HDD" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , + US_FL_NO_WP_DETECT ), +/* Submitted by Joel Bourquard <[email protected]> * Some versions of this device need the SubClass and Protocol overrides * while others don't.
Greg Kroah-Hartman
maintainerPATCH 79/148 usb: gadget: configfs: Fix interfaces array NULL-termination
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Opasiak <[email protected]>
commit 903124fe1aa284f61745a9dd4fbfa0184e569fff upstream.
memset() to 0 interfaces array before reusingusb_configuration structure.
This commit fix bug:
ln -s functions/acm.1 configs/c.1
ln -s functions/acm.2 configs/c.1
ln -s functions/acm.3 configs/c.1
echo "UDC name" > UDC
echo "" > UDC
rm configs/c.1/acm.*
rmdir functions/*
mkdir functions/ecm.usb0
ln -s functions/ecm.usb0 configs/c.1
echo "UDC name" > UDC
[ 82.220969] Unable to handle kernel NULL pointer dereference at virtual address 00000000 [ 82.229009] pgd = c0004000 [ 82.231698] [00000000] *pgd=00000000 [ 82.235260] Internal error: Oops: 17 [#1] PREEMPT SMP ARM [ 82.240638] Modules linked in: [ 82.243681] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.0.0-rc2 #39 [ 82.249926] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) [ 82.256003] task: c07cd2f0 ti: c07c8000 task.ti: c07c8000 [ 82.261393] PC is at composite_setup+0xe3c/0x1674 [ 82.266073] LR is at composite_setup+0xf20/0x1674 [ 82.270760] pc : [<c03510d4>] lr : [<c03511b8>] psr: 600001d3 [ 82.270760] sp : c07c9df0 ip : c0806448 fp : ed8c9c9c [ 82.282216] r10: 00000001 r9 : 00000000 r8 : edaae918 [ 82.287425] r7 : ed551cc0 r6 : 00007fff r5 : 00000000 r4 : ed799634 [ 82.293934] r3 : 00000003 r2 : 00010002 r1 : edaae918 r0 : 0000002e [ 82.300446] Flags: nZCv IRQs off FIQs off Mode SVC_32 ISA ARM Segment kernel [ 82.307910] Control: 10c5387d Table: 6bc1804a DAC: 00000015 [ 82.313638] Process swapper/0 (pid: 0, stack limit = 0xc07c8210) [ 82.319627] Stack: (0xc07c9df0 to 0xc07ca000) [ 82.323969] 9de0: 00000000 c06e65f4 00000000 c07c9f68 [ 82.332130] 9e00: 00000067 c07c59ac 000003f7 edaae918 ed8c9c98 ed799690 eca2f140 200001d3 [ 82.340289] 9e20: ee79a2d8 c07c9e88 c07c5304 ffff55db 00010002 edaae810 edaae860 eda96d50 [ 82.348448] 9e40: 00000009 ee264510 00000007 c07ca444 edaae860 c0340890 c0827a40 ffff55e0 [ 82.356607] 9e60: c0827a40 eda96e40 ee264510 edaae810 00000000 edaae860 00000007 c07ca444 [ 82.364766] 9e80: edaae860 c0354170 c03407dc c033db4c edaae810 00000000 00000000 00000010 [ 82.372925] 9ea0: 00000032 c0341670 00000000 00000000 00000001 eda96e00 00000000 00000000 [ 82.381084] 9ec0: 00000000 00000032 c0803a23 ee1aa840 00000001 c005d54c 249e2450 00000000 [ 82.389244] 9ee0: 200001d3 ee1aa840 ee1aa8a0 ed84f4c0 00000000 c07c9f68 00000067 c07c59ac [ 82.397403] 9f00: 00000000 c005d688 ee1aa840 ee1aa8a0 c07db4b4 c006009c 00000032 00000000 [ 82.405562] 9f20: 00000001 c005ce20 c07c59ac c005cf34 f002000c c07ca780 c07c9f68 00000057 [ 82.413722] 9f40: f0020000 413fc090 00000001 c00086b4 c000f804 60000053 ffffffff c07c9f9c [ 82.421880] 9f60: c0803a20 c0011fc0 00000000 00000000 c07c9fb8 c001bee0 c07ca4f0 c057004c [ 82.430040] 9f80: c07ca4fc c0803a20 c0803a20 413fc090 00000001 00000000 01000000 c07c9fb0 [ 82.438199] 9fa0: c000f800 c000f804 60000053 ffffffff 00000000 c0050e70 c0803bc0 c0783bd8 [ 82.446358] 9fc0: ffffffff ffffffff c0783664 00000000 00000000 c07b13e8 00000000 c0803e54 [ 82.454517] 9fe0: c07ca480 c07b13e4 c07ce40c 4000406a 00000000 40008074 00000000 00000000 [ 82.462689] [<c03510d4>] (composite_setup) from [<c0340890>] (s3c_hsotg_complete_setup+0xb4/0x418) [ 82.471626] [<c0340890>] (s3c_hsotg_complete_setup) from [<c0354170>] (usb_gadget_giveback_request+0xc/0x10) [ 82.481429] [<c0354170>] (usb_gadget_giveback_request) from [<c033db4c>] (s3c_hsotg_complete_request+0xcc/0x12c) [ 82.491583] [<c033db4c>] (s3c_hsotg_complete_request) from [<c0341670>] (s3c_hsotg_irq+0x4fc/0x558) [ 82.500614] [<c0341670>] (s3c_hsotg_irq) from [<c005d54c>] (handle_irq_event_percpu+0x50/0x150) [ 82.509291] [<c005d54c>] (handle_irq_event_percpu) from [<c005d688>] (handle_irq_event+0x3c/0x5c) [ 82.518145] [<c005d688>] (handle_irq_event) from [<c006009c>] (handle_fasteoi_irq+0xd4/0x18c) [ 82.526650] [<c006009c>] (handle_fasteoi_irq) from [<c005ce20>] (generic_handle_irq+0x20/0x30) [ 82.535242] [<c005ce20>] (generic_handle_irq) from [<c005cf34>] (__handle_domain_irq+0x6c/0xdc) [ 82.543923] [<c005cf34>] (__handle_domain_irq) from [<c00086b4>] (gic_handle_irq+0x2c/0x6c) [ 82.552256] [<c00086b4>] (gic_handle_irq) from [<c0011fc0>] (__irq_svc+0x40/0x74) [ 82.559716] Exception stack(0xc07c9f68 to 0xc07c9fb0) [ 82.564753] 9f60: 00000000 00000000 c07c9fb8 c001bee0 c07ca4f0 c057004c [ 82.572913] 9f80: c07ca4fc c0803a20 c0803a20 413fc090 00000001 00000000 01000000 c07c9fb0 [ 82.581069] 9fa0: c000f800 c000f804 60000053 ffffffff [ 82.586113] [<c0011fc0>] (__irq_svc) from [<c000f804>] (arch_cpu_idle+0x30/0x3c) [ 82.593491] [<c000f804>] (arch_cpu_idle) from [<c0050e70>] (cpu_startup_entry+0x128/0x1a4) [ 82.601740] [<c0050e70>] (cpu_startup_entry) from [<c0783bd8>] (start_kernel+0x350/0x3bc) [ 82.609890] Code: 0a000002 e3530005 05975010 15975008 (e5953000) [ 82.615965] ---[ end trace f57d5f599a5f1bfa ]---
Most of kernel code assume that interface array in struct usb_configuration is NULL terminated.
When gadget is composed with configfs configuration structure may be reused for different functions set.
This bug happens because purge_configs_funcs() sets only next_interface_id to 0. Interface array still contains pointers to already freed interfaces. If in second try we add less interfaces than earlier we may access unallocated memory when trying to get interface descriptors.
--- drivers/usb/gadget/configfs.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/gadget/configfs.c +1 -0
@@ -1295,6 +1295,7 @@ static void purge_configs_funcs(struct g } } c->next_interface_id =0 ; +memset (c->interface,0 ,sizeof (c->interface)); c->superspeed =0 ; c->highspeed =0 ; c->fullspeed =0 ;
Greg Kroah-Hartman
maintainerPATCH 80/148 powerpc/mce: fix off by one errors in mce event handling
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Axtens <[email protected]>
commit ffb2d78eca08a1451137583d4e435aecfd6af809 upstream.
Before 69111bac42f5 ("powerpc: Replace __get_cpu_var uses"), in save_mce_event, index got the value of mce_nest_count, and mce_nest_count was incremented *after* index was set.
However, that patch changed the behaviour so that mce_nest count was incremented *before* setting index.
This causes an off-by-one error, as get_mce_event sets index as mce_nest_count - 1 before reading mce_event. Thus get_mce_event reads bogus data, causing warnings like
"Machine Check Exception, Unknown event version 0 !"
and breaking MCEs handling.
Restore the old behaviour and unbreak MCE handling by subtracting one from the newly incremented value.
The same broken change occured in machine_check_queue_event (which set a queue read by machine_check_process_queued_event). Fix that too, unbreaking printing of MCE information.
--- arch/powerpc/kernel/mce.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/powerpc/kernel/mce.c +2 -2
@@ -73,7 +73,7 @@ void save_mce_event(struct pt_regs *regs uint64_t nip, uint64_t addr) { uint64_t srr1; -int index =__this_cpu_inc_return (mce_nest_count); +int index =__this_cpu_inc_return (mce_nest_count) -1 ;struct machine_check_event *mce =this_cpu_ptr (&mce_event[index]);/*
@@ -184,7 +184,7 @@ void machine_check_queue_event(void)if (!get_mce_event (&evt,MCE_EVENT_RELEASE ))return ; - index =__this_cpu_inc_return (mce_queue_count); + index =__this_cpu_inc_return (mce_queue_count) -1 ;/* If queue is full, just return for now. */ if (index >=MAX_MC_EVT ) {__this_cpu_dec (mce_queue_count);
Greg Kroah-Hartman
maintainerPATCH 81/148 powerpc: Align TOC to 256 bytes
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anton Blanchard <[email protected]>
commit 5e95235ccd5442d4a4fe11ec4eb99ba1b7959368 upstream.
Recent toolchains force the TOC to be 256 byte aligned. We need to enforce this alignment in our linker script, otherwise pointers to our TOC variables (__toc_start, __prom_init_toc_start) could be incorrect.
If they are bad, we die a few hundred instructions into boot.
--- arch/powerpc/kernel/vmlinux.lds.S | 1 + 1 file changed, 1 insertion(+)
arch/powerpc/kernel/vmlinux.lds.S +1 -0
@@ -213,6 +213,7 @@ SECTIONS *(.opd) } + . = ALIGN(256); .got : AT(ADDR(.got) - LOAD_OFFSET) { __toc_start = .; #ifndef CONFIG_RELOCATABLE
Greg Kroah-Hartman
maintainerPATCH 82/148 mmc: atmel-mci: fix bad variable type for clkdiv
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ludovic Desroches <[email protected]>
commit 60c8f783a18feb95ad967c87e9660caf09fb4700 upstream.
clkdiv is declared as an u32 but it can be set to a negative value causing a huge divisor value. Change its type to int to avoid this case.
--- drivers/mmc/host/atmel-mci.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/mmc/host/atmel-mci.c +7 -2
@@ -1304,7 +1304,7 @@ static void atmci_set_ios(struct mmc_hosif (ios->clock) {unsigned int clock_min = ~0U ; -u32 clkdiv; +int clkdiv;spin_lock_bh (&host->lock);if (!host->mode_reg) {
@@ -1328,7 +1328,12 @@ static void atmci_set_ios(struct mmc_hos/* Calculate clock divider */ if (host->caps.has_odd_clk_div) { clkdiv =DIV_ROUND_UP (host->bus_hz, clock_min) -2 ; -if (clkdiv >511 ) { +if (clkdiv <0 ) { +dev_warn (&mmc->class_dev, +"clock %u too fast; using %lu\n" , + clock_min, host->bus_hz /2 ); + clkdiv =0 ; + }else if (clkdiv >511 ) {dev_warn (&mmc->class_dev,"clock %u too slow; using %lu\n" , clock_min, host->bus_hz / (511 +2 ));
Greg Kroah-Hartman
maintainerPATCH 83/148 tty/n_gsm.c: fix a memory leak when gsmtty is removed
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pan Xinhui <[email protected]>
commit 8f9cfeed3eae86c70d3b04445a6f2036b27b6304 upstream.
when gsmtty_remove put dlci, it will cause memory leak if dlci->port's refcount is zero. So we do the cleanup work in .cleanup callback instead.
dlci will be last put in two call chains.
1) gsmld_close -> gsm_cleanup_mux -> gsm_dlci_release -> dlci_put
2) gsmld_remove -> dlci_put
so there is a race. the memory leak depends on the race.
In call chain 2. we hit the memory leak. below comment tells.
release_tty -> tty_driver_remove_tty -> gsmtty_remove -> dlci_put -> tty_port_destructor (WARN_ON(port->itty) and return directly)
|
tty->port->itty = NULL;
|
tty_kref_put ---> release_one_tty -> gsmtty_cleanup (added by our patch)So our patch fix the memory leak by doing the cleanup work after tty core did.
--- drivers/tty/n_gsm.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/tty/n_gsm.c +2 -3
@@ -3170,7 +3170,7 @@ static int gsmtty_break_ctl(struct tty_sreturn gsmtty_modem_update (dlci, encode); } -static void gsmtty_remove (struct tty_driver *driver,struct tty_struct *tty) +static void gsmtty_cleanup (struct tty_struct *tty) {struct gsm_dlci *dlci = tty->driver_data;struct gsm_mux *gsm = dlci->gsm;
@@ -3178,7 +3178,6 @@ static void gsmtty_remove(struct tty_dridlci_put (dlci);dlci_put (gsm->dlci[0 ]);mux_put (gsm); - driver->ttys[tty->index] =NULL ; }/* Virtual ttys for the demux */
@@ -3199,7 +3198,7 @@ static const struct tty_operations gsmtt .tiocmget = gsmtty_tiocmget, .tiocmset = gsmtty_tiocmset, .break_ctl = gsmtty_break_ctl, - .remove = gsmtty_remove, + .cleanup = gsmtty_cleanup, };
Greg Kroah-Hartman
maintainerPATCH 84/148 pty: Fix input race when closing
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Hurley <[email protected]>
commit 1a48632ffed61352a7810ce089dc5a8bcd505a60 upstream.
A read() from a pty master may mistakenly indicate EOF (errno == -EIO) after the pty slave has closed, even though input data remains to be read. For example,
pty slave | input worker | pty master
| |
| | n_tty_read()
pty_write() | | input avail? no
add data | | sleep
schedule worker --->| | .
|---> flush_to_ldisc() | .
pty_close() | fill read buffer | .
wait for worker | wakeup reader --->| .
| read buffer full? |---> input avail ? yes
|<--- yes - exit worker | copy 4096 bytes to user
TTY_OTHER_CLOSED <---| |<--- kick worker
| | **** New read() before worker starts ****
| | n_tty_read()
| | input avail? no
| | TTY_OTHER_CLOSED? yes
| | return -EIO
Several conditions are required to trigger this race:
1. the ldisc read buffer must become full so the input worker exits
2. the read() count parameter must be >= 4096 so the ldisc read buffer is empty
3. the subsequent read() occurs before the kicked worker has processed more input
However, the underlying cause of the race is that data is pipelined, while tty state is not; ie., data already written by the pty slave end is not yet visible to the pty master end, but state changes by the pty slave end are visible to the pty master end immediately.
Pipeline the TTY_OTHER_CLOSED state through input worker to the reader.
1. Introduce TTY_OTHER_DONE which is set by the input worker when TTY_OTHER_CLOSED is set and either the input buffers are flushed or input processing has completed. Readers/polls are woken when TTY_OTHER_DONE is set.
2. Reader/poll checks TTY_OTHER_DONE instead of TTY_OTHER_CLOSED.
3. A new input worker is started from pty_close() after setting TTY_OTHER_CLOSED, which ensures the TTY_OTHER_DONE state will be set if the last input worker is already finished (or just about to exit).
Remove tty_flush_to_ldisc(); no in-tree callers.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=96311
--- Documentation/serial/tty.txt | 3 +++ drivers/tty/n_hdlc.c | 4 ++-- drivers/tty/n_tty.c | 22 ++++++++++++++++++---- drivers/tty/pty.c | 5 +++-- drivers/tty/tty_buffer.c | 41 +++++++++++++++++++++++++++-------------- include/linux/tty.h | 2 +- 6 files changed, 54 insertions(+), 23 deletions(-)
Documentation/serial/tty.txt +3 -0
@@ -198,6 +198,9 @@ TTY_IO_ERROR If set, causes all subsequ TTY_OTHER_CLOSED Device is a pty and the other side has closed. +TTY_OTHER_DONE Device is a pty and the other side has closed and + all pending input processing has been completed. + TTY_NO_WRITE_SPLIT Prevent driver from splitting up writes into smaller chunks.
drivers/tty/n_hdlc.c +2 -2
@@ -600,7 +600,7 @@ static ssize_t n_hdlc_tty_read(struct ttadd_wait_queue (&tty->read_wait, &wait);for (;;) { -if (test_bit (TTY_OTHER_CLOSED , &tty->flags)) { +if (test_bit (TTY_OTHER_DONE , &tty->flags)) { ret = -EIO ;break ; }
@@ -828,7 +828,7 @@ static unsigned int n_hdlc_tty_poll(stru/* set bits for operations that won't block */ if (n_hdlc->rx_buf_list.head) mask |=POLLIN |POLLRDNORM ;/* readable */ -if (test_bit (TTY_OTHER_CLOSED , &tty->flags)) +if (test_bit (TTY_OTHER_DONE , &tty->flags)) mask |=POLLHUP ;if (tty_hung_up_p (filp)) mask |=POLLHUP ;
drivers/tty/n_tty.c +18 -4
@@ -1949,6 +1949,18 @@ static inline int input_available_p(strureturn ldata->commit_head - ldata->read_tail >= amt; } +static inline int check_other_done (struct tty_struct *tty) +{ +int done =test_bit (TTY_OTHER_DONE , &tty->flags); +if (done) { +/* paired with cmpxchg() in check_other_closed(); ensures +* read buffer head index is not stale +*/ +smp_mb__after_atomic (); + } +return done; +} +/** * copy_from_read_buf - copy read data directly * @tty: terminal device
@@ -2167,7 +2179,7 @@ static ssize_t n_tty_read(struct tty_strstruct n_tty_data *ldata = tty->disc_data;unsigned char __user *b = buf;DEFINE_WAIT_FUNC (wait, woken_wake_function); -int c; +int c, done;int minimum, time;ssize_t retval =0 ;long timeout;
@@ -2235,8 +2247,10 @@ static ssize_t n_tty_read(struct tty_str ((minimum - (b - buf)) >= 1)) ldata->minimum_to_wake = (minimum - (b - buf)); + done =check_other_done (tty); +if (!input_available_p (tty,0 )) { -if (test_bit (TTY_OTHER_CLOSED , &tty->flags)) { +if (done) { retval = -EIO ;break ; }
@@ -2443,12 +2457,12 @@ static unsigned int n_tty_poll(struct ttpoll_wait (file, &tty->read_wait, wait);poll_wait (file, &tty->write_wait, wait); +if (check_other_done (tty)) + mask |=POLLHUP ;if (input_available_p (tty,1 )) mask |=POLLIN |POLLRDNORM ;if (tty->packet && tty->link->ctrl_status) mask |=POLLPRI |POLLIN |POLLRDNORM ; -if (test_bit (TTY_OTHER_CLOSED , &tty->flags)) - mask |=POLLHUP ;if (tty_hung_up_p (file)) mask |=POLLHUP ;if (!(mask & (POLLHUP |POLLIN |POLLRDNORM ))) {
drivers/tty/pty.c +3 -2
@@ -53,9 +53,8 @@ static void pty_close(struct tty_struct/* Review - krefs on tty_link ?? */ if (!tty->link)return ; -tty_flush_to_ldisc (tty->link);set_bit (TTY_OTHER_CLOSED , &tty->link->flags); -wake_up_interruptible (&tty->link->read_wait); +tty_flip_buffer_push (tty->link->port);wake_up_interruptible (&tty->link->write_wait);if (tty->driver->subtype ==PTY_TYPE_MASTER ) {set_bit (TTY_OTHER_CLOSED , &tty->flags);
@@ -243,7 +242,9 @@ static int pty_open(struct tty_struct *t goto out;clear_bit (TTY_IO_ERROR , &tty->flags); +/* TTY_OTHER_CLOSED must be cleared before TTY_OTHER_DONE */ clear_bit (TTY_OTHER_CLOSED , &tty->link->flags); +clear_bit (TTY_OTHER_DONE , &tty->link->flags);set_bit (TTY_THROTTLED , &tty->flags);return 0 ;
drivers/tty/tty_buffer.c +27 -14
66 lines not on this page · raw message
include/linux/tty.h +1 -1
@@ -339,6 +339,7 @@ struct tty_file_private {#define TTY_EXCLUSIVE 3/* Exclusive open mode */ #define TTY_DEBUG 4/* Debugging */ #define TTY_DO_WRITE_WAKEUP 5/* Call write_wakeup after queuing new */ +#define TTY_OTHER_DONE 6/* Closed pty has completed input processing */ #define TTY_LDISC_OPEN 11/* Line discipline is open */ #define TTY_PTY_LOCK 16/* pty private */ #define TTY_NO_WRITE_SPLIT 17/* Preserve write boundaries to driver */
@@ -462,7 +463,6 @@ extern int tty_hung_up_p(struct file *fiextern void do_SAK (struct tty_struct *tty);extern void __do_SAK (struct tty_struct *tty);extern void no_tty (void ); -extern void tty_flush_to_ldisc (struct tty_struct *tty);extern void tty_buffer_free_all (struct tty_port *port);extern void tty_buffer_flush (struct tty_struct *tty,struct tty_ldisc *ld);extern void tty_buffer_init (struct tty_port *port);
Greg Kroah-Hartman
maintainerPATCH 85/148 ext4: fix lazytime optimization
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit 8f4d855839179f410fa910a26eb81d646d628f26 upstream.
We had a fencepost error in the lazytime optimization which means that timestamp would get written to the wrong inode.
--- fs/ext4/inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/ext4/inode.c +1 -1
@@ -4233,7 +4233,7 @@ static void ext4_update_other_inodes_timint inode_size =EXT4_INODE_SIZE (sb); oi.orig_ino = orig_ino; - ino = orig_ino & ~(inodes_per_block -1 ); + ino = (orig_ino & ~(inodes_per_block -1 )) +1 ;for (i =0 ; i < inodes_per_block; i++, ino++, buf += inode_size) {if (ino == orig_ino)continue ;
Greg Kroah-Hartman
maintainerPATCH 86/148 ext4: fix NULL pointer dereference when journal restart fails
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukas Czerner <[email protected]>
commit 9d506594069355d1fb2de3f9104667312ff08ed3 upstream.
Currently when journal restart fails, we'll have the h_transaction of the handle set to NULL to indicate that the handle has been effectively aborted. We handle this situation quietly in the jbd2_journal_stop() and just free the handle and exit because everything else has been done before we attempted (and failed) to restart the journal.
Unfortunately there are a number of problems with that approach introduced with commit
41a5b913197c "jbd2: invalidate handle if jbd2_journal_restart() fails"
First of all in ext4 jbd2_journal_stop() will be called through __ext4_journal_stop() where we would try to get a hold of the superblock by dereferencing h_transaction which in this case would lead to NULL pointer dereference and crash.
In addition we're going to free the handle regardless of the refcount which is bad as well, because others up the call chain will still reference the handle so we might potentially reference already freed memory.
Moreover it's expected that we'll get aborted handle as well as detached handle in some of the journalling function as the error propagates up the stack, so it's unnecessary to call WARN_ON every time we get detached handle.
And finally we might leak some memory by forgetting to free reserved handle in jbd2_journal_stop() in the case where handle was detached from the transaction (h_transaction is NULL).
Fix the NULL pointer dereference in __ext4_journal_stop() by just calling jbd2_journal_stop() quietly as suggested by Jan Kara. Also fix the potential memory leak in jbd2_journal_stop() and use proper handle refcounting before we attempt to free it to avoid use-after-free issues.
And finally remove all WARN_ON(!transaction) from the code so that we do not get random traces when something goes wrong because when journal restart fails we will get to some of those functions.
--- fs/ext4/ext4_jbd2.c | 6 ++++++ fs/jbd2/transaction.c | 25 ++++++++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-)
fs/ext4/ext4_jbd2.c +6 -0
@@ -87,6 +87,12 @@ int __ext4_journal_stop(const char *wherext4_put_nojournal (handle);return 0 ; } + +if (!handle->h_transaction) { + err =jbd2_journal_stop (handle); +return handle->h_err ? handle->h_err : err; + } + sb = handle->h_transaction->t_journal->j_private; err = handle->h_err; rc =jbd2_journal_stop (handle);
fs/jbd2/transaction.c +16 -9
@@ -551,7 +551,6 @@ int jbd2_journal_extend(handle_t *handleint result;int wanted; -WARN_ON (!transaction);if (is_handle_aborted (handle))return -EROFS ; journal = transaction->t_journal;
@@ -627,7 +626,6 @@ int jbd2__journal_restart(handle_t *handtid_t tid;int need_to_start, ret; -WARN_ON (!transaction);/* If we've had an abort of any type, don't even think about * actually doing the restart! */ if (is_handle_aborted (handle))
@@ -785,7 +783,6 @@ do_get_write_access(handle_t *handle, stint need_copy =0 ;unsigned long start_lock, time_lock; -WARN_ON (!transaction);if (is_handle_aborted (handle))return -EROFS ; journal = transaction->t_journal;
@@ -1051,7 +1048,6 @@ int jbd2_journal_get_create_access(handlint err;jbd_debug (5 ,"journal_head %p\n" , jh); -WARN_ON (!transaction); err = -EROFS ;if (is_handle_aborted (handle)) goto out;
@@ -1266,7 +1262,6 @@ int jbd2_journal_dirty_metadata(handle_tstruct journal_head *jh;int ret =0 ; -WARN_ON (!transaction);if (is_handle_aborted (handle))return -EROFS ; journal = transaction->t_journal;
@@ -1397,7 +1392,6 @@ int jbd2_journal_forget (handle_t *handlint err =0 ;int was_modified =0 ; -WARN_ON (!transaction);if (is_handle_aborted (handle))return -EROFS ; journal = transaction->t_journal;
@@ -1530,8 +1524,22 @@ int jbd2_journal_stop(handle_t *handle)tid_t tid;pid_t pid; -if (!transaction) - goto free_and_exit; +if (!transaction) { +/* +* Handle is already detached from the transaction so +* there is nothing to do other than decrease a refcount, +* or free the handle if refcount drops to zero +*/ +if (--handle->h_ref >0 ) { +jbd_debug (4 ,"h_ref %d -> %d\n" , handle->h_ref +1 , + handle->h_ref); +return err; + }else { +if (handle->h_rsv_handle) +jbd2_free_handle (handle->h_rsv_handle); + goto free_and_exit; + } + } journal = transaction->t_journal;J_ASSERT (journal_current_handle () == handle);
@@ -2373,7 +2381,6 @@ int jbd2_journal_file_inode(handle_t *hatransaction_t *transaction = handle->h_transaction;journal_t *journal; -WARN_ON (!transaction);if (is_handle_aborted (handle))return -EROFS ; journal = transaction->t_journal;
Greg Kroah-Hartman
maintainerPATCH 87/148 ext4: check for zero length extent explicitly
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eryu Guan <[email protected]>
commit 2f974865ffdfe7b9f46a9940836c8b167342563d upstream.
The following commit introduced a bug when checking for zero length extent
5946d08 ext4: check for overlapping extents in ext4_valid_extent_entries()
Zero length extent could pass the check if lblock is zero.
Adding the explicit check for zero length back.
--- fs/ext4/extents.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/ext4/extents.c +1 -1
@@ -377,7 +377,7 @@ static int ext4_valid_extent(struct inodext4_lblk_t lblock =le32_to_cpu (ext->ee_block);ext4_lblk_t last = lblock + len -1 ; -if (lblock > last) +if (len ==0 || lblock > last)return 0 ;return ext4_data_block_valid (EXT4_SB (inode->i_sb), block, len); }
Greg Kroah-Hartman
maintainerPATCH 88/148 jbd2: fix r_count overflows leading to buffer overflow in journal recovery
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Darrick J. Wong" <[email protected]>
commit e531d0bceb402e643a4499de40dd3fa39d8d2e43 upstream.
The journal revoke block recovery code does not check r_count for sanity, which means that an evil value of r_count could result in the kernel reading off the end of the revoke table and into whatever garbage lies beyond. This could crash the kernel, so fix that.
However, in testing this fix, I discovered that the code to write out the revoke tables also was not correctly checking to see if the block was full -- the current offset check is fine so long as the revoke table space size is a multiple of the record size, but this is not true when either journal_csum_v[23] are set.
--- fs/jbd2/recovery.c | 10 +++++++++- fs/jbd2/revoke.c | 18 ++++++++++-------- 2 files changed, 19 insertions(+), 9 deletions(-)
fs/jbd2/recovery.c +9 -1
@@ -842,15 +842,23 @@ static int scan_revoke_records(journal_t {jbd2_journal_revoke_header_t *header;int offset, max; +int csum_size =0 ; +__u32 rcount;int record_len =4 ; header = (jbd2_journal_revoke_header_t *) bh->b_data; offset =sizeof (jbd2_journal_revoke_header_t); - max =be32_to_cpu (header->r_count); + rcount =be32_to_cpu (header->r_count);if (!jbd2_revoke_block_csum_verify (journal, header))return -EINVAL ; +if (jbd2_journal_has_csum_v2or3 (journal)) + csum_size =sizeof (struct jbd2_journal_revoke_tail ); +if (rcount > journal->j_blocksize - csum_size) +return -EINVAL ; + max = rcount; +if (JBD2_HAS_INCOMPAT_FEATURE (journal,JBD2_FEATURE_INCOMPAT_64BIT )) record_len =8 ;
fs/jbd2/revoke.c +10 -8
@@ -577,7 +577,7 @@ static void write_one_revoke_record(jour {int csum_size =0 ;struct buffer_head *descriptor; -int offset; +int sz, offset;journal_header_t *header;/* If we are already aborting, this all becomes a noop. We
@@ -594,9 +594,14 @@ static void write_one_revoke_record(jourif (jbd2_journal_has_csum_v2or3 (journal)) csum_size =sizeof (struct jbd2_journal_revoke_tail ); +if (JBD2_HAS_INCOMPAT_FEATURE (journal,JBD2_FEATURE_INCOMPAT_64BIT )) + sz =8 ; +else + sz =4 ; +/* Make sure we have a descriptor with space left for the record */ if (descriptor) { -if (offset >= journal->j_blocksize - csum_size) { +if (offset + sz > journal->j_blocksize - csum_size) {flush_descriptor (journal, descriptor, offset, write_op); descriptor =NULL ; }
@@ -619,16 +624,13 @@ static void write_one_revoke_record(jour *descriptorp = descriptor; } -if (JBD2_HAS_INCOMPAT_FEATURE (journal,JBD2_FEATURE_INCOMPAT_64BIT )) { +if (JBD2_HAS_INCOMPAT_FEATURE (journal,JBD2_FEATURE_INCOMPAT_64BIT )) * ((__be64 *)(&descriptor->b_data[offset])) =cpu_to_be64 (record->blocknr); - offset +=8 ; - - }else { +else * ((__be32 *)(&descriptor->b_data[offset])) =cpu_to_be32 (record->blocknr); - offset +=4 ; - } + offset += sz; *offsetp = offset; }
Greg Kroah-Hartman
maintainerPATCH 89/148 ahci: avoton port-disable reset-quirk
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Williams <[email protected]>
commit dbfe8ef5599a5370abc441fcdbb382b656563eb4 upstream.
Avoton AHCI occasionally sees drive probe timeouts at driver load time. When this happens SCR_STATUS indicates device detected, but no D2H FIS reception. Reset the internal link state machines by bouncing port-enable in the PCS register when this occurs.
--- drivers/ata/ahci.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 95 insertions(+), 8 deletions(-)
drivers/ata/ahci.c +95 -8
@@ -66,6 +66,7 @@ enum board_ids { board_ahci_yes_fbs,/* board IDs for specific chipsets in alphabetical order */ + board_ahci_avn, board_ahci_mcp65, board_ahci_mcp77, board_ahci_mcp89,
@@ -84,6 +85,8 @@ enum board_ids {static int ahci_init_one (struct pci_dev *pdev,const struct pci_device_id *ent);static int ahci_vt8251_hardreset (struct ata_link *link,unsigned int *class,unsigned long deadline); +static int ahci_avn_hardreset (struct ata_link *link,unsigned int *class, +unsigned long deadline);static void ahci_mcp89_apple_enable (struct pci_dev *pdev);static bool is_mcp89_apple (struct pci_dev *pdev); static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
@@ -107,6 +110,11 @@ static struct ata_port_operations ahci_p .hardreset = ahci_p5wdh_hardreset, }; +static struct ata_port_operations ahci_avn_ops = { + .inherits = &ahci_ops, + .hardreset = ahci_avn_hardreset, +}; +static const struct ata_port_info ahci_port_info[] = {/* by features */ [board_ahci] = {
@@ -151,6 +159,12 @@ static const struct ata_port_info ahci_p .port_ops = &ahci_ops, },/* by chipsets */ + [board_ahci_avn] = { + .flags = AHCI_FLAG_COMMON, + .pio_mask = ATA_PIO4, + .udma_mask = ATA_UDMA6, + .port_ops = &ahci_avn_ops, + }, [board_ahci_mcp65] = {AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA |AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ),
@@ -290,14 +304,14 @@ static const struct pci_device_id ahci_p { PCI_VDEVICE(INTEL, 0x1f27), board_ahci }, /* Avoton RAID */ { PCI_VDEVICE(INTEL, 0x1f2e), board_ahci }, /* Avoton RAID */ { PCI_VDEVICE(INTEL, 0x1f2f), board_ahci }, /* Avoton RAID */ - { PCI_VDEVICE(INTEL, 0x1f32), board_ahci }, /* Avoton AHCI */ - { PCI_VDEVICE(INTEL, 0x1f33), board_ahci }, /* Avoton AHCI */ - { PCI_VDEVICE(INTEL, 0x1f34), board_ahci }, /* Avoton RAID */ - { PCI_VDEVICE(INTEL, 0x1f35), board_ahci }, /* Avoton RAID */ - { PCI_VDEVICE(INTEL, 0x1f36), board_ahci }, /* Avoton RAID */ - { PCI_VDEVICE(INTEL, 0x1f37), board_ahci }, /* Avoton RAID */ - { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci }, /* Avoton RAID */ - { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f32), board_ahci_avn }, /* Avoton AHCI */ + { PCI_VDEVICE(INTEL, 0x1f33), board_ahci_avn }, /* Avoton AHCI */ + { PCI_VDEVICE(INTEL, 0x1f34), board_ahci_avn }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f35), board_ahci_avn }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f36), board_ahci_avn }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f37), board_ahci_avn }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci_avn }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci_avn }, /* Avoton RAID */ { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Wellsburg RAID */ { PCI_VDEVICE(INTEL, 0x2827), board_ahci }, /* Wellsburg RAID */ { PCI_VDEVICE(INTEL, 0x8d02), board_ahci }, /* Wellsburg AHCI */
@@ -670,6 +684,79 @@ static int ahci_p5wdh_hardreset(struct areturn rc; } +/* +* ahci_avn_hardreset - attempt more aggressive recovery of Avoton ports. +* +* It has been observed with some SSDs that the timing of events in the +* link synchronization phase can leave the port in a state that can not +* be recovered by a SATA-hard-reset alone. The failing signature is +* SStatus.DET stuck at 1 ("Device presence detected but Phy +* communication not established"). It was found that unloading and +* reloading the driver when this problem occurs allows the drive +* connection to be recovered (DET advanced to 0x3). The critical +* component of reloading the driver is that the port state machines are +* reset by bouncing "port enable" in the AHCI PCS configuration +* register. So, reproduce that effect by bouncing a port whenever we +* see DET==1 after a reset. +*/ +static int ahci_avn_hardreset (struct ata_link *link,unsigned int *class, +unsigned long deadline) +{ +const unsigned long *timing =sata_ehc_deb_timing (&link->eh_context); +struct ata_port *ap = link->ap; +struct ahci_port_priv *pp = ap->private_data; +struct ahci_host_priv *hpriv = ap->host->private_data; +u8 *d2h_fis = pp->rx_fis +RX_FIS_D2H_REG ; +unsigned long tmo = deadline - jiffies; +struct ata_taskfile tf; +bool online; +int rc, i; + +DPRINTK ("ENTER\n" ); + +ahci_stop_engine (ap); + +for (i =0 ; i <2 ; i++) { +u16 val; +u32 sstatus; +int port = ap->port_no; +struct ata_host *host = ap->host; +struct pci_dev *pdev =to_pci_dev (host->dev); + +/* clear D2H reception area to properly wait for D2H FIS */ +ata_tf_init (link->device, &tf); + tf.command =ATA_BUSY ; +ata_tf_to_fis (&tf,0 ,0 , d2h_fis); + + rc =sata_link_hardreset (link, timing, deadline, &online, + ahci_check_ready); + +if (sata_scr_read (link,SCR_STATUS , &sstatus) !=0 || + (sstatus &0xf ) !=1 ) +break ; + +ata_link_printk (link,KERN_INFO ,"avn bounce port%d\n" , + port); + +pci_read_config_word (pdev,0x92 , &val); + val &= ~(1 << port); +pci_write_config_word (pdev,0x92 , val); +ata_msleep (ap,1000 ); + val |=1 << port; +pci_write_config_word (pdev,0x92 , val); + deadline += tmo; + } + + hpriv->start_engine (ap); + +if (online) + *class =ahci_dev_classify (ap); + +DPRINTK ("EXIT, rc=%d, class=%u\n" , rc, *class); +return rc; +} + +#ifdef CONFIG_PM static int ahci_pci_device_suspend (struct pci_dev *pdev,pm_message_t mesg) {
Greg Kroah-Hartman
maintainerPATCH 90/148 libata: Add helper to determine when PHY events should be ignored
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gabriele Mazzotta <[email protected]>
commit 8393b811f38acdf7fd8da2028708edad3e68ce1f upstream.
This is a preparation commit that will allow to add other criteria according to which PHY events should be dropped.
--- drivers/ata/libahci.c | 3 +-- drivers/ata/libata-core.c | 19 +++++++++++++++++++ include/linux/libata.h | 1 + 3 files changed, 21 insertions(+), 2 deletions(-)
drivers/ata/libahci.c +1 -2
@@ -1707,8 +1707,7 @@ static void ahci_handle_port_interrupt(sif (unlikely (resetting)) status &= ~PORT_IRQ_BAD_PMP ; -/* if LPM is enabled, PHYRDY doesn't mean anything */ -if (ap->link.lpm_policy >ATA_LPM_MAX_POWER ) { +if (sata_lpm_ignore_phy_events (&ap->link)) { status &= ~PORT_IRQ_PHYRDY ;ahci_scr_write (&ap->link,SCR_ERROR ,SERR_PHYRDY_CHG ); }
drivers/ata/libata-core.c +19 -0
@@ -6728,6 +6728,25 @@ u32 ata_wait_register(struct ata_port *areturn tmp; } +/** +* sata_lpm_ignore_phy_events - test if PHY event should be ignored +* @link: Link receiving the event +* +* Test whether the received PHY event has to be ignored or not. +* +* LOCKING: +* None: +* +* RETURNS: +* True if the event has to be ignored. +*/ +bool sata_lpm_ignore_phy_events (struct ata_link *link) +{ +/* if LPM is enabled, PHYRDY doesn't mean anything */ +return !!(link->lpm_policy >ATA_LPM_MAX_POWER ); +} +EXPORT_SYMBOL_GPL (sata_lpm_ignore_phy_events); +/* * Dummy port_ops */
include/linux/libata.h +1 -0
@@ -1202,6 +1202,7 @@ extern struct ata_device *ata_dev_pair(sextern int ata_do_set_mode (struct ata_link *link,struct ata_device **r_failed_dev);extern void ata_scsi_port_error_handler (struct Scsi_Host *host,struct ata_port *ap);extern void ata_scsi_cmd_error_handler (struct Scsi_Host *host,struct ata_port *ap,struct list_head *eh_q); +extern bool sata_lpm_ignore_phy_events (struct ata_link *link);extern int ata_cable_40wire (struct ata_port *ap);extern int ata_cable_80wire (struct ata_port *ap);
Greg Kroah-Hartman
maintainerPATCH 91/148 libata: Ignore spurious PHY event on LPM policy change
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gabriele Mazzotta <[email protected]>
commit 09c5b4803a80a5451d950d6a539d2eb311dc0fb1 upstream.
When the LPM policy is set to ATA_LPM_MAX_POWER, the device might generate a spurious PHY event that cuases errors on the link. Ignore this event if it occured within 10s after the policy change.
The timeout was chosen observing that on a Dell XPS13 9333 these spurious events can occur up to roughly 6s after the policy change.
--- drivers/ata/libata-core.c | 15 ++++++++++++++- drivers/ata/libata-eh.c | 3 +++ include/linux/libata.h | 9 +++++++++ 3 files changed, 26 insertions(+), 1 deletion(-)
drivers/ata/libata-core.c +14 -1
@@ -6742,8 +6742,21 @@ u32 ata_wait_register(struct ata_port *a*/ bool sata_lpm_ignore_phy_events (struct ata_link *link) { +unsigned long lpm_timeout = link->last_lpm_change + +msecs_to_jiffies (ATA_TMOUT_SPURIOUS_PHY ); +/* if LPM is enabled, PHYRDY doesn't mean anything */ -return !!(link->lpm_policy >ATA_LPM_MAX_POWER ); +if (link->lpm_policy >ATA_LPM_MAX_POWER ) +return true; + +/* ignore the first PHY event after the LPM policy changed +* as it is might be spurious +*/ +if ((link->flags &ATA_LFLAG_CHANGED ) && +time_before (jiffies, lpm_timeout)) +return true; + +return false; }EXPORT_SYMBOL_GPL (sata_lpm_ignore_phy_events);
drivers/ata/libata-eh.c +3 -0
@@ -3489,6 +3489,9 @@ static int ata_eh_set_lpm(struct ata_lin } } + link->last_lpm_change = jiffies; + link->flags |=ATA_LFLAG_CHANGED ; +return 0 ; fail:
include/linux/libata.h +9 -0
@@ -205,6 +205,7 @@ enum {ATA_LFLAG_SW_ACTIVITY = (1 <<7 ),/* keep activity stats */ ATA_LFLAG_NO_LPM = (1 <<8 ),/* disable LPM on this link */ ATA_LFLAG_RST_ONCE = (1 <<9 ),/* limit recovery to one reset */ +ATA_LFLAG_CHANGED = (1 <<10 ),/* LPM state changed on this link */ /* struct ata_port flags */ ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */
@@ -310,6 +311,12 @@ enum {*/ ATA_TMOUT_PMP_SRST_WAIT =5000 , +/* When the LPM policy is set to ATA_LPM_MAX_POWER, there might +* be a spurious PHY event, so ignore the first PHY event that +* occurs within 10s after the policy change. +*/ +ATA_TMOUT_SPURIOUS_PHY =10000 , +/* ATA bus states */ BUS_UNKNOWN =0 , BUS_DMA = 1,
@@ -789,6 +796,8 @@ struct ata_link {struct ata_eh_context eh_context;struct ata_device device[ATA_MAX_DEVICES ]; + +unsigned long last_lpm_change;/* when last LPM change happened */ };#define ATA_LINK_CLEAR_BEGIN offsetof(struct ata_link, active_tag)#define ATA_LINK_CLEAR_END offsetof(struct ata_link, device[0])
Greg Kroah-Hartman
maintainerPATCH 93/148 arm64: bpf: fix signedness bug in loading 64-bit immediate
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xi Wang <[email protected]>
commit 1e4df6b7208140f3c49f316d33a409d3a161f350 upstream.
Consider "(u64)insn1.imm << 32 | imm" in the arm64 JIT. Since imm is signed 32-bit, it is sign-extended to 64-bit, losing the high 32 bits. The fix is to convert imm to u32 first, which will be zero-extended to u64 implicitly.
--- arch/arm64/net/bpf_jit_comp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/net/bpf_jit_comp.c +1 -1
@@ -487,7 +487,7 @@ emit_cond_jmp:return -EINVAL ; } - imm64 = (u64 )insn1.imm <<32 | imm; + imm64 = (u64 )insn1.imm <<32 | (u32 )imm;emit_a64_mov_i64 (dst, imm64, ctx);return 1 ;
Greg Kroah-Hartman
maintainerPATCH 94/148 rt2x00: add new rt2800usb device DWA 130
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Scott Branden <[email protected]>
commit ea345c145ff23197eab34d0c4d0c8a93d7bea8c6 upstream.
Add the USB Id to link the D-Link DWA 130 USB Wifi adapter to the rt2830 driver.
--- drivers/net/wireless/rt2x00/rt2800usb.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/wireless/rt2x00/rt2800usb.c +1 -0
@@ -1040,6 +1040,7 @@ static struct usb_device_id rt2800usb_de { USB_DEVICE(0x07d1, 0x3c17) }, { USB_DEVICE(0x2001, 0x3317) }, { USB_DEVICE(0x2001, 0x3c1b) }, + { USB_DEVICE(0x2001, 0x3c25) },/* Draytek */ { USB_DEVICE(0x07fa, 0x7712) },/* DVICO */
Greg Kroah-Hartman
maintainerPATCH 95/148 ARM: 8325/1: exynos: move resume code to .text section
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ard Biesheuvel <[email protected]>
commit 12833bacf5d904c2dac0c3f52b2ebde5f2c5a2bc upstream.
This code calls cpu_resume() using a straight branch (b), so now that we have moved cpu_resume() back to .text, this should be moved there as well. Any direct references to symbols that will remain in the .data section are replaced with explicit PC-relative references.
--- arch/arm/mach-exynos/sleep.S | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-)
arch/arm/mach-exynos/sleep.S +16 -15
@@ -23,14 +23,7 @@ #define CPU_MASK 0xff0ffff0 #define CPU_CORTEX_A9 0x410fc090 - /* - * The following code is located into the .data section. This is to - * allow l2x0_regs_phys to be accessed with a relative load while we - * can't rely on any MMU translation. We could have put l2x0_regs_phys - * in the .text section as well, but some setups might insist on it to - * be truly read-only. (Reference from: arch/arm/kernel/sleep.S) - */ - .data + .text .align /*
@@ -69,10 +62,12 @@ ENTRY(exynos_cpu_resume_ns) cmp r0, r1 bne skip_cp15 - adr r0, cp15_save_power + adr r0, _cp15_save_power ldr r1, [r0] - adr r0, cp15_save_diag + ldr r1, [r0, r1] + adr r0, _cp15_save_diag ldr r2, [r0] + ldr r2, [r0, r2] mov r0, #SMC_CMD_C15RESUME dsb smc #0
@@ -118,14 +113,20 @@ skip_l2x0: skip_cp15: b cpu_resume ENDPROC(exynos_cpu_resume_ns) + + .align +_cp15_save_power: + .long cp15_save_power - . +_cp15_save_diag: + .long cp15_save_diag - . +#ifdef CONFIG_CACHE_L2X0 +1: .long l2x0_saved_regs - . +#endif /* CONFIG_CACHE_L2X0 */ + + .data .globl cp15_save_diag cp15_save_diag: .long 0 @ cp15 diagnostic .globl cp15_save_power cp15_save_power: .long 0 @ cp15 power control - -#ifdef CONFIG_CACHE_L2X0 - .align -1: .long l2x0_saved_regs - . -#endif /* CONFIG_CACHE_L2X0 */
Greg Kroah-Hartman
maintainerPATCH 96/148 gpio: gpio-kempld: Fix get_direction return value
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Brunner <[email protected]>
commit f230e8ffc03f17bd9d6b90ea890b8252a8cc1821 upstream.
This patch fixes an inverted return value of the gpio get_direction function.
The wrong value causes the direction sysfs entry and GPIO debugfs file to indicate incorrect GPIO direction settings. In some cases it also prevents setting GPIO output values.
The problem is also present in all other stable kernel versions since linux-3.12.
--- drivers/gpio/gpio-kempld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpio/gpio-kempld.c +1 -1
@@ -117,7 +117,7 @@ static int kempld_gpio_get_direction(str = container_of(chip, struct kempld_gpio_data, chip);struct kempld_device_data *pld = gpio->pld; -return kempld_gpio_get_bit (pld,KEMPLD_GPIO_DIR_NUM (offset), offset); +return !kempld_gpio_get_bit (pld,KEMPLD_GPIO_DIR_NUM (offset), offset); }static int kempld_gpio_pincount (struct kempld_device_data *pld)
Greg Kroah-Hartman
maintainerPATCH 97/148 crypto: s390/ghash - Fix incorrect ghash icv buffer handling.
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Harald Freudenberger <[email protected]>
commit a1cae34e23b1293eccbcc8ee9b39298039c3952a upstream.
Multitheaded tests showed that the icv buffer in the current ghash implementation is not handled correctly. A move of this working ghash buffer value to the descriptor context fixed this. Code is tested and verified with an multithreaded application via af_alg interface.
--- arch/s390/crypto/ghash_s390.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-)
arch/s390/crypto/ghash_s390.c +13 -12
@@ -16,11 +16,12 @@#define GHASH_DIGEST_SIZE 16struct ghash_ctx { -u8 icv[16 ]; -u8 key[16 ]; +u8 key[GHASH_BLOCK_SIZE ]; };struct ghash_desc_ctx { +u8 icv[GHASH_BLOCK_SIZE ]; +u8 key[GHASH_BLOCK_SIZE ];u8 buffer[GHASH_BLOCK_SIZE ];u32 bytes; };
@@ -28,8 +29,10 @@ struct ghash_desc_ctx {static int ghash_init (struct shash_desc *desc) {struct ghash_desc_ctx *dctx =shash_desc_ctx (desc); +struct ghash_ctx *ctx =crypto_shash_ctx (desc->tfm);memset (dctx,0 ,sizeof (*dctx)); +memcpy (dctx->key, ctx->key,GHASH_BLOCK_SIZE );return 0 ; }
@@ -45,7 +48,6 @@ static int ghash_setkey(struct crypto_sh }memcpy (ctx->key, key,GHASH_BLOCK_SIZE ); -memset (ctx->icv,0 ,GHASH_BLOCK_SIZE );return 0 ; }
@@ -54,7 +56,6 @@ static int ghash_update(struct shash_des const u8 *src, unsigned int srclen) {struct ghash_desc_ctx *dctx =shash_desc_ctx (desc); -struct ghash_ctx *ctx =crypto_shash_ctx (desc->tfm);unsigned int n;u8 *buf = dctx->buffer;int ret;
@@ -70,7 +71,7 @@ static int ghash_update(struct shash_des src += n;if (!dctx->bytes) { - ret =crypt_s390_kimd (KIMD_GHASH , ctx, buf, + ret =crypt_s390_kimd (KIMD_GHASH , dctx, buf,GHASH_BLOCK_SIZE );if (ret !=GHASH_BLOCK_SIZE )return -EIO ;
@@ -79,7 +80,7 @@ static int ghash_update(struct shash_des n = srclen & ~(GHASH_BLOCK_SIZE -1 );if (n) { - ret =crypt_s390_kimd (KIMD_GHASH , ctx, src, n); + ret =crypt_s390_kimd (KIMD_GHASH , dctx, src, n);if (ret != n)return -EIO ; src += n;
@@ -94,7 +95,7 @@ static int ghash_update(struct shash_desreturn 0 ; } -static int ghash_flush (struct ghash_ctx *ctx,struct ghash_desc_ctx *dctx) +static int ghash_flush (struct ghash_desc_ctx *dctx) {u8 *buf = dctx->buffer;int ret;
@@ -104,24 +105,24 @@ static int ghash_flush(struct ghash_ctxmemset (pos,0 , dctx->bytes); - ret =crypt_s390_kimd (KIMD_GHASH , ctx, buf,GHASH_BLOCK_SIZE ); + ret =crypt_s390_kimd (KIMD_GHASH , dctx, buf,GHASH_BLOCK_SIZE );if (ret !=GHASH_BLOCK_SIZE )return -EIO ; + + dctx->bytes =0 ; } - dctx->bytes =0 ;return 0 ; }static int ghash_final (struct shash_desc *desc,u8 *dst) {struct ghash_desc_ctx *dctx =shash_desc_ctx (desc); -struct ghash_ctx *ctx =crypto_shash_ctx (desc->tfm);int ret; - ret =ghash_flush (ctx, dctx); + ret =ghash_flush (dctx);if (!ret) -memcpy (dst, ctx->icv,GHASH_BLOCK_SIZE ); +memcpy (dst, dctx->icv,GHASH_BLOCK_SIZE );return ret; }
Greg Kroah-Hartman
maintainerPATCH 98/148 mac80211: move WEP tailroom size check
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Janusz Dziedzic <[email protected]>
commit 47b4e1fc4972cc43a19121bc2608a60aef3bf216 upstream.
Remove checking tailroom when adding IV as it uses only headroom, and move the check to the ICV generation that actually needs the tailroom.
In other case I hit such warning and datapath don't work, when testing:
- IBSS + WEP
- ath9k with hw crypt enabled
- IPv6 data (ping6)
WARNING: CPU: 3 PID: 13301 at net/mac80211/wep.c:102 ieee80211_wep_add_iv+0x129/0x190 [mac80211]() [...] Call Trace: [<ffffffff817bf491>] dump_stack+0x45/0x57 [<ffffffff8107746a>] warn_slowpath_common+0x8a/0xc0 [<ffffffff8107755a>] warn_slowpath_null+0x1a/0x20 [<ffffffffc09ae109>] ieee80211_wep_add_iv+0x129/0x190 [mac80211] [<ffffffffc09ae7ab>] ieee80211_crypto_wep_encrypt+0x6b/0xd0 [mac80211] [<ffffffffc09d3fb1>] invoke_tx_handlers+0xc51/0xf30 [mac80211]
[...]
--- net/mac80211/wep.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
net/mac80211/wep.c +4 -2
@@ -98,8 +98,7 @@ static u8 *ieee80211_wep_add_iv(struct i hdr->frame_control |=cpu_to_le16 (IEEE80211_FCTL_PROTECTED ); -if (WARN_ON (skb_tailroom (skb) <IEEE80211_WEP_ICV_LEN || -skb_headroom (skb) <IEEE80211_WEP_IV_LEN )) +if (WARN_ON (skb_headroom (skb) <IEEE80211_WEP_IV_LEN ))return NULL ; hdrlen =ieee80211_hdrlen (hdr->frame_control);
@@ -167,6 +166,9 @@ int ieee80211_wep_encrypt(struct ieee802size_t len;u8 rc4key[3 +WLAN_KEY_LEN_WEP104 ]; +if (WARN_ON (skb_tailroom (skb) <IEEE80211_WEP_ICV_LEN )) +return -1 ; + iv =ieee80211_wep_add_iv (local, skb, keylen, keyidx);if (!iv)return -1 ;
Greg Kroah-Hartman
maintainerPATCH 99/148 mac80211: dont use napi_gro_receive() outside NAPI context
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Berg <[email protected]>
commit 22d3a3c829fa9ecdb493d1f1f2838d543f8d86a3 upstream.
No matter how the driver manages its NAPI context, there's no way sending frames to it from a timer can be correct, since it would corrupt the internal GRO lists.
To avoid that, always use the non-NAPI path when releasing frames from the timer.
--- net/mac80211/ieee80211_i.h | 3 +++ net/mac80211/rx.c | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-)
net/mac80211/ieee80211_i.h +3 -0
@@ -204,6 +204,8 @@ enum ieee80211_packet_rx_flags {* @IEEE80211_RX_CMNTR: received on cooked monitor already * @IEEE80211_RX_BEACON_REPORTED: This frame was already reported * to cfg80211_report_obss_beacon(). +* @IEEE80211_RX_REORDER_TIMER: this frame is released by the +* reorder buffer timeout timer, not the normal RX path * * These flags are used across handling multiple interfaces * for a single frame.
@@ -211,6 +213,7 @@ enum ieee80211_packet_rx_flags {enum ieee80211_rx_flags {IEEE80211_RX_CMNTR =BIT (0 ),IEEE80211_RX_BEACON_REPORTED =BIT (1 ), +IEEE80211_RX_REORDER_TIMER =BIT (2 ), };struct ieee80211_rx_data {
net/mac80211/rx.c +3 -2
@@ -2106,7 +2106,8 @@ ieee80211_deliver_skb(struct ieee80211_r/* deliver to local stack */ skb->protocol =eth_type_trans (skb, dev);memset (skb->cb,0 ,sizeof (skb->cb)); -if (rx->local->napi) +if (!(rx->flags &IEEE80211_RX_REORDER_TIMER ) && + rx->local->napi)napi_gro_receive (rx->local->napi, skb);else netif_receive_skb (skb);
@@ -3215,7 +3216,7 @@ void ieee80211_release_reorder_timeout(s/* This is OK -- must be QoS data frame */ .security_idx = tid, .seqno_idx = tid, - .flags = 0, + .flags = IEEE80211_RX_REORDER_TIMER, };struct tid_ampdu_rx *tid_agg_rx;
Greg Kroah-Hartman
maintainerPATCH 100/148 s390/mm: correct return value of pmd_pfn
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Martin Schwidefsky <[email protected]>
commit 7cded342c09f633666e71ee1ce048f218a9c5836 upstream.
Git commit 152125b7a882df36a55a8eadbea6d0edf1461ee7 "s390/mm: implement dirty bits for large segment table entries" broke the pmd_pfn function, it changed the return value from 'unsigned long' to 'int'. This breaks all machine configurations with memory above the 8TB line.
--- arch/s390/include/asm/pgtable.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/s390/include/asm/pgtable.h +1 -1
@@ -600,7 +600,7 @@ static inline int pmd_large(pmd_t pmd)return (pmd_val (pmd) & _SEGMENT_ENTRY_LARGE) !=0 ; } -static inline int pmd_pfn (pmd_t pmd) +static inline unsigned long pmd_pfn (pmd_t pmd) {unsigned long origin_mask;
Greg Kroah-Hartman
maintainerPATCH 101/148 sched: Handle priority boosted tasks proper in setscheduler()
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Gleixner <[email protected]>
commit 0782e63bc6fe7e2d3408d250df11d388b7799c6b upstream.
Ronny reported that the following scenario is not handled correctly:
T1 (prio = 10) lock(rtmutex); T2 (prio = 20) lock(rtmutex) boost T1 T1 (prio = 20) sys_set_scheduler(prio = 30) T1 prio = 30 .... sys_set_scheduler(prio = 10) T1 prio = 30
The last step is wrong as T1 should now be back at prio 20.
Commit c365c292d059 ("sched: Consider pi boosting in setscheduler()") only handles the case where a boosted tasks tries to lower its priority.
Fix it by taking the new effective priority into account for the decision whether a change of the priority is required.
--- include/linux/sched/rt.h | 7 ++++--- kernel/locking/rtmutex.c | 12 +++++++----- kernel/sched/core.c | 26 ++++++++++++++------------ 3 files changed, 25 insertions(+), 20 deletions(-)
include/linux/sched/rt.h +4 -3
@@ -18,7 +18,7 @@ static inline int rt_task(struct task_st#ifdef CONFIG_RT_MUTEXES extern int rt_mutex_getprio (struct task_struct *p);extern void rt_mutex_setprio (struct task_struct *p,int prio); -extern int rt_mutex_check_prio (struct task_struct *task,int newprio); +extern int rt_mutex_get_effective_prio (struct task_struct *task,int newprio);extern struct task_struct *rt_mutex_get_top_task (struct task_struct *task);extern void rt_mutex_adjust_pi (struct task_struct *p);static inline bool tsk_is_pi_blocked (struct task_struct *tsk)
@@ -31,9 +31,10 @@ static inline int rt_mutex_getprio(strucreturn p->normal_prio; } -static inline int rt_mutex_check_prio (struct task_struct *task,int newprio) +static inline int rt_mutex_get_effective_prio (struct task_struct *task, +int newprio) { -return 0 ; +return newprio; }static inline struct task_struct *rt_mutex_get_top_task (struct task_struct *task)
kernel/locking/rtmutex.c +7 -5
@@ -265,15 +265,17 @@ struct task_struct *rt_mutex_get_top_tas }/* -* Called by sched_setscheduler() to check whether the priority change -* is overruled by a possible priority boosting. +* Called by sched_setscheduler() to get the priority which will be +* effective after the change. */ -int rt_mutex_check_prio (struct task_struct *task,int newprio) +int rt_mutex_get_effective_prio (struct task_struct *task,int newprio) {if (!task_has_pi_waiters (task)) -return 0 ; +return newprio; -return task_top_pi_waiter (task)->task->prio <= newprio; +if (task_top_pi_waiter (task)->task->prio <= newprio) +return task_top_pi_waiter (task)->task->prio; +return newprio; }/*
kernel/sched/core.c +14 -12
@@ -3295,15 +3295,18 @@ static void __setscheduler_params(struct/* Actually do priority change: must hold pi & rq lock. */ static void __setscheduler (struct rq *rq,struct task_struct *p, -const struct sched_attr *attr) +const struct sched_attr *attr,bool keep_boost) {__setscheduler_params (p, attr);/* -* If we get here, there was no pi waiters boosting the -* task. It is safe to use the normal prio. +* Keep a potential priority boosting if called from +* sched_setscheduler(). */ - p->prio =normal_prio (p); +if (keep_boost) + p->prio =rt_mutex_get_effective_prio (p,normal_prio (p)); +else + p->prio =normal_prio (p);if (dl_prio (p->prio)) p->sched_class = &dl_sched_class;
@@ -3403,7 +3406,7 @@ static int __sched_setscheduler(struct tint newprio =dl_policy (attr->sched_policy) ?MAX_DL_PRIO -1 :MAX_RT_PRIO -1 - attr->sched_priority;int retval, oldprio, oldpolicy =-1 , queued, running; -int policy = attr->sched_policy; +int new_effective_prio, policy = attr->sched_policy;unsigned long flags;const struct sched_class *prev_class;struct rq *rq;
@@ -3585,15 +3588,14 @@ change: oldprio = p->prio;/* -* Special case for priority boosted tasks. -* -* If the new priority is lower or equal (user space view) -* than the current (boosted) priority, we just store the new +* Take priority boosted tasks into account. If the new +* effective priority is unchanged, we just store the new * normal parameters and do not touch the scheduler class and * the runqueue. This will be done when the task deboost * itself. */ -if (rt_mutex_check_prio (p, newprio)) { + new_effective_prio =rt_mutex_get_effective_prio (p, newprio); +if (new_effective_prio == oldprio) {__setscheduler_params (p, attr);task_rq_unlock (rq, p, &flags);return 0 ;
@@ -3607,7 +3609,7 @@ change:put_prev_task (rq, p); prev_class = p->sched_class; -__setscheduler (rq, p, attr); +__setscheduler (rq, p, attr, true);if (running) p->sched_class->set_curr_task (rq);
@@ -7357,7 +7359,7 @@ static void normalize_task(struct rq *rq queued =task_on_rq_queued (p);if (queued)dequeue_task (rq, p,0 ); -__setscheduler (rq, p, &attr); +__setscheduler (rq, p, &attr, false);if (queued) {enqueue_task (rq, p,0 );resched_curr (rq);
Greg Kroah-Hartman
maintainerPATCH 102/148 sched: always use blk_schedule_flush_plug in io_schedule_out
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shaohua Li <[email protected]>
commit 10d784eae2b41e25d8fc6a88096cd27286093c84 upstream.
block plug callback could sleep, so we introduce a parameter 'from_schedule' and corresponding drivers can use it to destinguish a schedule plug flush or a plug finish. Unfortunately io_schedule_out still uses blk_flush_plug(). This causes below output (Note, I added a might_sleep() in raid1_unplug to make it trigger faster, but the whole thing doesn't matter if I add might_sleep). In raid1/10, this can cause deadlock.
This patch makes io_schedule_out always uses blk_schedule_flush_plug. This should only impact drivers (as far as I know, raid 1/10) which are sensitive to the 'from_schedule' parameter.
[ 370.817949] ------------[ cut here ]------------ [ 370.817960] WARNING: CPU: 7 PID: 145 at ../kernel/sched/core.c:7306 __might_sleep+0x7f/0x90() [ 370.817969] do not call blocking ops when !TASK_RUNNING; state=2 set at [<ffffffff81092fcf>] prepare_to_wait+0x2f/0x90 [ 370.817971] Modules linked in: raid1 [ 370.817976] CPU: 7 PID: 145 Comm: kworker/u16:9 Tainted: G W 4.0.0+ #361 [ 370.817977] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.7.5-20140709_153802- 04/01/2014 [ 370.817983] Workqueue: writeback bdi_writeback_workfn (flush-9:1) [ 370.817985] ffffffff81cd83be ffff8800ba8cb298 ffffffff819dd7af 0000000000000001 [ 370.817988] ffff8800ba8cb2e8 ffff8800ba8cb2d8 ffffffff81051afc ffff8800ba8cb2c8 [ 370.817990] ffffffffa00061a8 000000000000041e 0000000000000000 ffff8800ba8cba28 [ 370.817993] Call Trace: [ 370.817999] [<ffffffff819dd7af>] dump_stack+0x4f/0x7b [ 370.818002] [<ffffffff81051afc>] warn_slowpath_common+0x8c/0xd0 [ 370.818004] [<ffffffff81051b86>] warn_slowpath_fmt+0x46/0x50 [ 370.818006] [<ffffffff81092fcf>] ? prepare_to_wait+0x2f/0x90 [ 370.818008] [<ffffffff81092fcf>] ? prepare_to_wait+0x2f/0x90 [ 370.818010] [<ffffffff810776ef>] __might_sleep+0x7f/0x90 [ 370.818014] [<ffffffffa0000c03>] raid1_unplug+0xd3/0x170 [raid1] [ 370.818024] [<ffffffff81421d9a>] blk_flush_plug_list+0x8a/0x1e0 [ 370.818028] [<ffffffff819e3550>] ? bit_wait+0x50/0x50 [ 370.818031] [<ffffffff819e21b0>] io_schedule_timeout+0x130/0x140 [ 370.818033] [<ffffffff819e3586>] bit_wait_io+0x36/0x50 [ 370.818034] [<ffffffff819e31b5>] __wait_on_bit+0x65/0x90 [ 370.818041] [<ffffffff8125b67c>] ? ext4_read_block_bitmap_nowait+0xbc/0x630 [ 370.818043] [<ffffffff819e3550>] ? bit_wait+0x50/0x50 [ 370.818045] [<ffffffff819e3302>] out_of_line_wait_on_bit+0x72/0x80 [ 370.818047] [<ffffffff810935e0>] ? autoremove_wake_function+0x40/0x40 [ 370.818050] [<ffffffff811de744>] __wait_on_buffer+0x44/0x50 [ 370.818053] [<ffffffff8125ae80>] ext4_wait_block_bitmap+0xe0/0xf0 [ 370.818058] [<ffffffff812975d6>] ext4_mb_init_cache+0x206/0x790 [ 370.818062] [<ffffffff8114bc6c>] ? lru_cache_add+0x1c/0x50 [ 370.818064] [<ffffffff81297c7e>] ext4_mb_init_group+0x11e/0x200 [ 370.818066] [<ffffffff81298231>] ext4_mb_load_buddy+0x341/0x360 [ 370.818068] [<ffffffff8129a1a3>] ext4_mb_find_by_goal+0x93/0x2f0 [ 370.818070] [<ffffffff81295b54>] ? ext4_mb_normalize_request+0x1e4/0x5b0 [ 370.818072] [<ffffffff8129ab67>] ext4_mb_regular_allocator+0x67/0x460 [ 370.818074] [<ffffffff81295b54>] ? ext4_mb_normalize_request+0x1e4/0x5b0 [ 370.818076] [<ffffffff8129ca4b>] ext4_mb_new_blocks+0x4cb/0x620 [ 370.818079] [<ffffffff81290956>] ext4_ext_map_blocks+0x4c6/0x14d0 [ 370.818081] [<ffffffff812a4d4e>] ? ext4_es_lookup_extent+0x4e/0x290 [ 370.818085] [<ffffffff8126399d>] ext4_map_blocks+0x14d/0x4f0 [ 370.818088] [<ffffffff81266fbd>] ext4_writepages+0x76d/0xe50 [ 370.818094] [<ffffffff81149691>] do_writepages+0x21/0x50 [ 370.818097] [<ffffffff811d5c00>] __writeback_single_inode+0x60/0x490 [ 370.818099] [<ffffffff811d630a>] writeback_sb_inodes+0x2da/0x590 [ 370.818103] [<ffffffff811abf4b>] ? trylock_super+0x1b/0x50 [ 370.818105] [<ffffffff811abf4b>] ? trylock_super+0x1b/0x50 [ 370.818107] [<ffffffff811d665f>] __writeback_inodes_wb+0x9f/0xd0 [ 370.818109] [<ffffffff811d69db>] wb_writeback+0x34b/0x3c0 [ 370.818111] [<ffffffff811d70df>] bdi_writeback_workfn+0x23f/0x550 [ 370.818116] [<ffffffff8106bbd8>] process_one_work+0x1c8/0x570 [ 370.818117] [<ffffffff8106bb5b>] ? process_one_work+0x14b/0x570 [ 370.818119] [<ffffffff8106c09b>] worker_thread+0x11b/0x470 [ 370.818121] [<ffffffff8106bf80>] ? process_one_work+0x570/0x570 [ 370.818124] [<ffffffff81071868>] kthread+0xf8/0x110 [ 370.818126] [<ffffffff81071770>] ? kthread_create_on_node+0x210/0x210 [ 370.818129] [<ffffffff819e9322>] ret_from_fork+0x42/0x70 [ 370.818131] [<ffffffff81071770>] ? kthread_create_on_node+0x210/0x210 [ 370.818132] ---[ end trace 7b4deb71e68b6605 ]---
V2: don't change ->in_iowait
--- kernel/sched/core.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
kernel/sched/core.c +1 -4
@@ -4384,10 +4384,7 @@ long __sched io_schedule_timeout(long tilong ret; current->in_iowait =1 ; -if (old_iowait) -blk_schedule_flush_plug (current); -else -blk_flush_plug (current); +blk_schedule_flush_plug (current);delayacct_blkio_start (); rq =raw_rq ();
Greg Kroah-Hartman
maintainerPATCH 103/148 ARM: 8356/1: mm: handle non-pmd-aligned end of RAM
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Rutland <[email protected]>
commit 965278dcb8ab0b1f666cc47937933c4be4aea48d upstream.
At boot time we round the memblock limit down to section size in an attempt to ensure that we will have mapped this RAM with section mappings prior to allocating from it. When mapping RAM we iterate over PMD-sized chunks, creating these section mappings.
Section mappings are only created when the end of a chunk is aligned to section size. Unfortunately, with classic page tables (where PMD_SIZE is 2 * SECTION_SIZE) this means that if a chunk is between 1M and 2M in size the first 1M will not be mapped despite having been accounted for in the memblock limit. This has been observed to result in page tables being allocated from unmapped memory, causing boot-time hangs.
This patch modifies the memblock limit rounding to always round down to PMD_SIZE instead of SECTION_SIZE. For classic MMU this means that we will round the memblock limit down to a 2M boundary, matching the limits on section mappings, and preventing allocations from unmapped memory. For LPAE there should be no change as PMD_SIZE == SECTION_SIZE.
--- arch/arm/mm/mmu.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
arch/arm/mm/mmu.c +10 -10
@@ -1112,22 +1112,22 @@ void __init sanity_check_meminfo(void) }/* -* Find the first non-section-aligned page, and point +* Find the first non-pmd-aligned page, and point * memblock_limit at it. This relies on rounding the -* limit down to be section-aligned, which happens at -* the end of this function. +* limit down to be pmd-aligned, which happens at the +* end of this function. * * With this algorithm, the start or end of almost any -* bank can be non-section-aligned. The only exception -* is that the start of the bank 0 must be section- +* bank can be non-pmd-aligned. The only exception is +* that the start of the bank 0 must be section- * aligned, since otherwise memory would need to be * allocated when mapping the start of bank 0, which * occurs before any free memory is mapped. */ if (!memblock_limit) { -if (!IS_ALIGNED (block_start,SECTION_SIZE )) +if (!IS_ALIGNED (block_start,PMD_SIZE )) memblock_limit = block_start; -else if (!IS_ALIGNED (block_end,SECTION_SIZE )) +else if (!IS_ALIGNED (block_end,PMD_SIZE )) memblock_limit = arm_lowmem_limit; }
@@ -1137,12 +1137,12 @@ void __init sanity_check_meminfo(void) high_memory =__va (arm_lowmem_limit -1 ) +1 ;/* -* Round the memblock limit down to a section size. This +* Round the memblock limit down to a pmd size. This * helps to ensure that we will allocate memory from the -* last full section, which should be mapped. +* last full pmd, which should be mapped. */ if (memblock_limit) - memblock_limit =round_down (memblock_limit,SECTION_SIZE ); + memblock_limit =round_down (memblock_limit,PMD_SIZE );if (!memblock_limit) memblock_limit = arm_lowmem_limit;
Greg Kroah-Hartman
maintainerPATCH 104/148 ARM: EXYNOS: Fix dereference of ERR_PTR returned by of_genpd_get_from_provider
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
commit 0b7dc0ff95237a53287e52f1aab7408ebf1c4085 upstream.
ERR_PTR was dereferenced during sub domain parsing, if parent domain could not be obtained (because of invalid phandle or deferred registration of parent domain).
The Exynos power domain code checked whether of_genpd_get_from_provider() returned NULL and in that case it skipped that power domain node. However this function returns ERR_PTR or valid pointer, not NULL.
--- arch/arm/mach-exynos/pm_domains.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/mach-exynos/pm_domains.c +2 -2
@@ -169,7 +169,7 @@ no_clk: args.np = np; args.args_count =0 ; child_domain =of_genpd_get_from_provider (&args); -if (!child_domain) +if (IS_ERR (child_domain))continue ; if (of_parse_phandle_with_args(np, "power-domains",
@@ -177,7 +177,7 @@ no_clk:continue ; parent_domain =of_genpd_get_from_provider (&args); -if (!parent_domain) +if (IS_ERR (parent_domain))continue ;if (pm_genpd_add_subdomain (parent_domain, child_domain))
Greg Kroah-Hartman
maintainerPATCH 106/148 ARM: dts: fix imx27 dtb build rule
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shawn Guo <[email protected]>
commit e46b5a6470a5e2c8e1096f8f60887ac19949055b upstream.
The i.MX27 dtb build should be controlled by CONFIG_SOC_IMX27 rather than CONFIG_SOC_IMX31.
--- arch/arm/boot/dts/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/Makefile +1 -1
@@ -215,7 +215,7 @@ dtb-$(CONFIG_SOC_IMX25) += \ imx25-eukrea-mbimxsd25-baseboard-dvi-vga.dtb \ imx25-karo-tx25.dtb \ imx25-pdk.dtb -dtb-$(CONFIG_SOC_IMX31) += \ +dtb-$(CONFIG_SOC_IMX27) += \ imx27-apf27.dtb \ imx27-apf27dev.dtb \ imx27-eukrea-mbimxsd27-baseboard.dtb \
Greg Kroah-Hartman
maintainerPATCH 107/148 ARM: dts: set display clock correctly for exynos4412-trats2
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Inki Dae <[email protected]>
commit 242ddf04297f2c4768bd8eb7593ab911910c5f76 upstream.
This patch sets display clock correctly. If Display clock isn't set correctly then you would find below messages and Display controller doesn't work correctly.
exynos-drm: No connectors reported connected with modes [drm] Cannot find any crtc or sizes - going 1024x768
--- arch/arm/boot/dts/exynos4412-trats2.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/exynos4412-trats2.dts +1 -1
@@ -736,7 +736,7 @@ display-timings { timing-0 { - clock-frequency = <0>; + clock-frequency = <57153600>; hactive = <720>; vactive = <1280>; hfront-porch = <5>;
Greg Kroah-Hartman
maintainerPATCH 108/148 ARM: fix missing syscall trace exit
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Russell King <[email protected]>
commit 1b97937246d8b97c0760d16d8992c7937bdf5e6a upstream.
Josh Stone reports:
I've discovered a case where both arm and arm64 will miss a ptrace syscall-exit that they should report. If the syscall is entered without TIF_SYSCALL_TRACE set, then it goes on the fast path. It's then possible to have TIF_SYSCALL_TRACE added in the middle of the syscall, but ret_fast_syscall doesn't check this flag again.
Fix this by always checking for a syscall trace in the fast exit path.
--- arch/arm/kernel/entry-common.S | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/arm/kernel/entry-common.S +3 -1
@@ -33,7 +33,9 @@ ret_fast_syscall: UNWIND(.fnstart ) UNWIND(.cantunwind ) disable_irq @ disable interrupts - ldr r1, [tsk, #TI_FLAGS] + ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing + tst r1, #_TIF_SYSCALL_WORK + bne __sys_trace_return tst r1, #_TIF_WORK_MASK bne fast_work_pending asm_trace_hardirqs_on
Re: [PATCH 4.0 108/148] ARM: fix missing syscall trace exit
Quoted 1 line · Greg Kroah-Hartman
4.0-stable review patch. If anyone has any objections, please let me know.
I sent a copycat patch for arm64, but I think it may be a problem to leave interrupts disabled for __sys_trace_return. Thoughts, Russell?
Quoted 39 lines
------------------
From: Russell King <[email protected]>
commit
1b97937246d8b97c0760d16d8992c7937bdf5e6aupstream.Josh Stone reports:
I've discovered a case where both arm and arm64 will miss a ptrace syscall-exit that they should report. If the syscall is entered without
TIF_SYSCALL_TRACEset, then it goes on the fast path. It's then possible to haveTIF_SYSCALL_TRACEadded in the middle of the syscall, butret_fast_syscalldoesn't check this flag again.Fix this by always checking for a syscall trace in the fast exit path.
Reported-by Josh Stone <[email protected]>Signed-off-by Russell King <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- arch/arm/kernel/entry-common.S | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)arch/arm/kernel/entry-common.S +3
-1@@ -33,7 +33,9 @@ ret_fast_syscall: UNWIND(.fnstart ) UNWIND(.cantunwind ) disable_irq @ disable interrupts - ldr r1, [tsk, #TI_FLAGS] + ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing + tst r1, #_TIF_SYSCALL_WORK + bne __sys_trace_return tst r1, #_TIF_WORK_MASK bne fast_work_pending asm_trace_hardirqs_on
Greg Kroah-Hartman
maintainerPATCH 109/148 parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Helge Deller <[email protected]>
commit d045c77c1a69703143a36169c224429c48b9eecd upstream.
On architectures where the stack grows upwards (CONFIG_STACK_GROWSUP=y, currently parisc and metag only) stack randomization sometimes leads to crashes when the stack ulimit is set to lower values than STACK_RND_MASK (which is 8 MB by default if not defined in arch-specific headers).
The problem is, that when the stack vm_area_struct is set up in fs/exec.c, the additional space needed for the stack randomization (as defined by the value of STACK_RND_MASK) was not taken into account yet and as such, when the stack randomization code added a random offset to the stack start, the stack effectively got smaller than what the user defined via rlimit_max(RLIMIT_STACK) which then sometimes leads to out-of-stack situations and crashes.
This patch fixes it by adding the maximum possible amount of memory (based on STACK_RND_MASK) which theoretically could be added by the stack randomization code to the initial stack size. That way, the user-defined stack size is always guaranteed to be at minimum what is defined via rlimit_max(RLIMIT_STACK).
This bug is currently not visible on the metag architecture, because on metag STACK_RND_MASK is defined to 0 which effectively disables stack randomization.
The changes to fs/exec.c are inside an "#ifdef CONFIG_STACK_GROWSUP" section, so it does not affect other platformws beside those where the stack grows upwards (parisc and metag).
--- arch/parisc/include/asm/elf.h | 4 ++++ arch/parisc/kernel/sys_parisc.c | 3 +++ fs/exec.c | 3 +++ 3 files changed, 10 insertions(+)
arch/parisc/include/asm/elf.h +4 -0
@@ -348,6 +348,10 @@ struct pt_regs; /* forward declaration..#define ELF_HWCAP 0 +#define STACK_RND_MASK (is_32bit_task() ? \ + 0x7ff >> (PAGE_SHIFT - 12) : \ + 0x3ffff >> (PAGE_SHIFT - 12)) +struct mm_struct ;extern unsigned long arch_randomize_brk (struct mm_struct *);#define arch_randomize_brk arch_randomize_brk
arch/parisc/kernel/sys_parisc.c +3 -0
@@ -77,6 +77,9 @@ static unsigned long mmap_upper_limit(voif (stack_base >STACK_SIZE_MAX ) stack_base =STACK_SIZE_MAX ; +/* Add space for stack randomization. */ + stack_base += (STACK_RND_MASK <<PAGE_SHIFT ); +return PAGE_ALIGN (STACK_TOP - stack_base); }
fs/exec.c +3 -0
@@ -659,6 +659,9 @@ int setup_arg_pages(struct linux_binprmif (stack_base >STACK_SIZE_MAX ) stack_base =STACK_SIZE_MAX ; +/* Add space for stack randomization. */ + stack_base += (STACK_RND_MASK <<PAGE_SHIFT ); +/* Make sure we didn't let the argument array grow too large. */ if (vma->vm_end - vma->vm_start > stack_base)return -ENOMEM ;
Greg Kroah-Hartman
maintainerPATCH 110/148 gfp: add __GFP_NOACCOUNT
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vladimir Davydov <[email protected]>
commit 8f4fc071b1926d0b20336e2b3f8ab85c94c734c5 upstream.
Not all kmem allocations should be accounted to memcg. The following patch gives an example when accounting of a certain type of allocations to memcg can effectively result in a memory leak. This patch adds the __GFP_NOACCOUNT flag which if passed to kmalloc and friends will force the allocation to go through the root cgroup. It will be used by the next patch.
Note, since in case of kmemleak enabled each kmalloc implies yet another allocation from the kmemleak_object cache, we add __GFP_NOACCOUNT to gfp_kmemleak_mask.
Alternatively, we could introduce a per kmem cache flag disabling accounting for all allocations of a particular kind, but (a) we would not be able to bypass accounting for kmalloc then and (b) a kmem cache with this flag set could not be merged with a kmem cache without this flag, which would increase the number of global caches and therefore fragmentation even if the memory cgroup controller is not used.
Despite its generic name, currently __GFP_NOACCOUNT disables accounting only for kmem allocations while user page allocations are always charged. To catch abusing of this flag, a warning is issued on an attempt of passing it to mem_cgroup_try_charge.
--- include/linux/gfp.h | 2 ++ include/linux/memcontrol.h | 4 ++++ mm/kmemleak.c | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-)
include/linux/gfp.h +2 -0
@@ -30,6 +30,7 @@ struct vm_area_struct;#define ___GFP_HARDWALL 0x20000u#define ___GFP_THISNODE 0x40000u#define ___GFP_RECLAIMABLE 0x80000u +#define ___GFP_NOACCOUNT 0x100000u#define ___GFP_NOTRACK 0x200000u#define ___GFP_NO_KSWAPD 0x400000u#define ___GFP_OTHER_NODE 0x800000u
@@ -85,6 +86,7 @@ struct vm_area_struct;#define __GFP_HARDWALL ((__force gfp_t)___GFP_HARDWALL)/* Enforce hardwall cpuset memory allocs */ #define __GFP_THISNODE ((__force gfp_t)___GFP_THISNODE)/* No fallback, no policies */ #define __GFP_RECLAIMABLE ((__force gfp_t)___GFP_RECLAIMABLE)/* Page is reclaimable */ +#define __GFP_NOACCOUNT ((__force gfp_t)___GFP_NOACCOUNT)/* Don't account to kmemcg */ #define __GFP_NOTRACK ((__force gfp_t)___GFP_NOTRACK)/* Don't track with kmemcheck */ #define __GFP_NO_KSWAPD ((__force gfp_t)___GFP_NO_KSWAPD)
include/linux/memcontrol.h +4 -0
@@ -463,6 +463,8 @@ memcg_kmem_newpage_charge(gfp_t gfp, strif (!memcg_kmem_enabled ())return true; +if (gfp & __GFP_NOACCOUNT) +return true;/* * __GFP_NOFAIL allocations will move on even if charging is not * possible. Therefore we don't even try, and have this allocation
@@ -522,6 +524,8 @@ memcg_kmem_get_cache(struct kmem_cache * {if (!memcg_kmem_enabled ())return cachep; +if (gfp & __GFP_NOACCOUNT) +return cachep;if (gfp & __GFP_NOFAIL)return cachep;if (in_interrupt () || (!current->mm) || (current->flags &PF_KTHREAD ))
mm/kmemleak.c +2 -1
@@ -115,7 +115,8 @@#define BYTES_PER_POINTER sizeof(void *)/* GFP bitmask for kmemleak internal allocations */ -#define gfp_kmemleak_mask (gfp) (((gfp) & (GFP_KERNEL | GFP_ATOMIC)) | \ +#define gfp_kmemleak_mask (gfp) (((gfp) & (GFP_KERNEL | GFP_ATOMIC | \ + __GFP_NOACCOUNT)) | \ __GFP_NORETRY | __GFP_NOMEMALLOC | \ __GFP_NOWARN)
Greg Kroah-Hartman
maintainerPATCH 111/148 kernfs: do not account ino_ida allocations to memcg
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vladimir Davydov <[email protected]>
commit 499611ed451508a42d1d7d1faff10177827755d5 upstream.
root->ino_ida is used for kernfs inode number allocations. Since IDA has a layered structure, different IDs can reside on the same layer, which is currently accounted to some memory cgroup. The problem is that each kmem cache of a memory cgroup has its own directory on sysfs (under /sys/fs/kernel/<cache-name>/cgroup). If the inode number of such a directory or any file in it gets allocated from a layer accounted to the cgroup which the cache is created for, the cgroup will get pinned for good, because one has to free all kmem allocations accounted to a cgroup in order to release it and destroy all its kmem caches. That said we must not account layers of ino_ida to any memory cgroup.
Since per net init operations may create new sysfs entries directly (e.g. lo device) or indirectly (nf_conntrack creates a new kmem cache per each namespace, which, in turn, creates new sysfs entries), an easy way to reproduce this issue is by creating network namespace(s) from inside a kmem-active memory cgroup.
--- fs/kernfs/dir.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
fs/kernfs/dir.c +8 -1
@@ -518,7 +518,14 @@ static struct kernfs_node *__kernfs_new_if (!kn) goto err_out1; - ret =ida_simple_get (&root->ino_ida,1 ,0 ,GFP_KERNEL ); +/* +* If the ino of the sysfs entry created for a kmem cache gets +* allocated from an ida layer, which is accounted to the memcg that +* owns the cache, the memcg will get pinned forever. So do not account +* ino ida allocations. +*/ + ret =ida_simple_get (&root->ino_ida,1 ,0 , +GFP_KERNEL | __GFP_NOACCOUNT);if (ret <0 ) goto err_out2; kn->ino = ret;
Greg Kroah-Hartman
maintainerPATCH 112/148 tools/vm: fix page-flags build
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andi Kleen <[email protected]>
commit 4933f55fe72c86e57efc454dd6e673c7f17af5a3 upstream.
libabikfs.a doesn't exist anymore, so we now need to link with libapi.a.
--- tools/vm/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/vm/Makefile +1 -1
@@ -3,7 +3,7 @@ TARGETS=page-types slabinfo page_owner_sort LIB_DIR = ../lib/api -LIBS = $(LIB_DIR)/libapikfs.a +LIBS = $(LIB_DIR)/libapi.a CC = $(CROSS_COMPILE)gcc CFLAGS = -Wall -Wextra -I../lib/
Greg Kroah-Hartman
maintainerPATCH 113/148 mm, numa: really disable NUMA balancing by default on single node machines
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mel Gorman <[email protected]>
commit b0dc2b9bb4ab782115b964310518ee0b17784277 upstream.
NUMA balancing is meant to be disabled by default on UMA machines but the check is using nr_node_ids (highest node) instead of num_online_nodes (online nodes).
The consequences are that a UMA machine with a node ID of 1 or higher will enable NUMA balancing. This will incur useless overhead due to minor faults with the impact depending on the workload. These are the impact on the stats when running a kernel build on a single node machine whose node ID happened to be 1:
vanilla patched
NUMA base PTE updates 5113158 0 NUMA huge PMD updates 643 0 NUMA page range updates 5442374 0 NUMA hint faults 2109622 0 NUMA hint local faults 2109622 0
NUMA hint local percent 100 100
NUMA pages migrated 0 0
--- mm/mempolicy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/mempolicy.c +1 -1
@@ -2517,7 +2517,7 @@ static void __init check_numabalancing_eif (numabalancing_override)set_numabalancing_state (numabalancing_override ==1 ); -if (nr_node_ids >1 && !numabalancing_override) { +if (num_online_nodes () >1 && !numabalancing_override) { pr_info("%s automatic NUMA balancing. " "Configure with numa_balancing= or the " "kernel.numa_balancing sysctl",
Greg Kroah-Hartman
maintainerPATCH 114/148 nfsd/blocklayout: pretend we can send deviceid notifications
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
commit 40cdc7a530c7a075557651a071354bb42b99df08 upstream.
Commit df52699e4fcef ("NFSv4.1: Don't cache deviceids that have no notifications") causes the Linux NFS client to stop caching deviceid's unless a server pretends to support deviceid notifications. While this behavior is stupid and the language around this area in rfc5661 is a mess carified by an errata that I submittted, Trond insists on this behavior. Not caching deviceids degrades block layout performance massively as a GETDEVICEINFO is fairly expensive.
So add this hack to make the Linux client happy again.
--- fs/nfsd/blocklayout.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
fs/nfsd/blocklayout.c +11 -0
@@ -181,6 +181,17 @@ nfsd4_block_proc_layoutcommit(struct ino }const struct nfsd4_layout_ops bl_layout_ops = { +/* +* Pretend that we send notification to the client. This is a blatant +* lie to force recent Linux clients to cache our device IDs. +* We rarely ever change the device ID, so the harm of leaking deviceids +* for a while isn't too bad. Unfortunately RFC5661 is a complete mess +* in this regard, but I filed errata 4119 for this a while ago, and +* hopefully the Linux client will eventually start caching deviceids +* without this again. +*/ + .notify_types = +NOTIFY_DEVICEID4_DELETE |NOTIFY_DEVICEID4_CHANGE , .proc_getdeviceinfo = nfsd4_block_proc_getdeviceinfo, .encode_getdeviceinfo = nfsd4_block_encode_getdeviceinfo, .proc_layoutget = nfsd4_block_proc_layoutget,
Greg Kroah-Hartman
maintainerPATCH 115/148 nfsd: fix the check for confirmed openowner in nfs4_preprocess_stateid_op
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
commit ebe9cb3bb13e7b9b281969cd279ce70834f7500f upstream.
If we find a non-confirmed openowner we jump to exit the function, but do not set an error value. Fix this by factoring out a helper to do the check and properly set the error from nfsd4_validate_stateid.
--- fs/nfsd/nfs4state.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)
fs/nfsd/nfs4state.c +11 -10
@@ -4386,10 +4386,17 @@ static __be32 check_stateid_generation(sreturn nfserr_old_stateid; } +static __be32 nfsd4_check_openowner_confirmed (struct nfs4_ol_stateid *ols) +{ +if (ols->st_stateowner->so_is_open_owner && + !(openowner (ols->st_stateowner)->oo_flags &NFS4_OO_CONFIRMED )) +return nfserr_bad_stateid; +return nfs_ok; +} +static __be32 nfsd4_validate_stateid (struct nfs4_client *cl,stateid_t *stateid) {struct nfs4_stid *s; -struct nfs4_ol_stateid *ols;__be32 status = nfserr_bad_stateid;if (ZERO_STATEID (stateid) ||ONE_STATEID (stateid))
@@ -4419,13 +4426,7 @@ static __be32 nfsd4_validate_stateid(strbreak ;case NFS4_OPEN_STID :case NFS4_LOCK_STID : - ols =openlockstateid (s); -if (ols->st_stateowner->so_is_open_owner - && !(openowner (ols->st_stateowner)->oo_flags - &NFS4_OO_CONFIRMED )) - status = nfserr_bad_stateid; -else - status = nfs_ok; + status =nfsd4_check_openowner_confirmed (openlockstateid (s));break ;default :printk ("unknown stateid type %x\n" , s->sc_type);
@@ -4517,8 +4518,8 @@ nfs4_preprocess_stateid_op(struct net *n status =nfs4_check_fh (current_fh, stp);if (status) goto out; -if (stp->st_stateowner->so_is_open_owner - && !(openowner (stp->st_stateowner)->oo_flags &NFS4_OO_CONFIRMED )) + status =nfsd4_check_openowner_confirmed (stp); +if (status) goto out; status =nfs4_check_openmode (stp, flags);if (status)
Greg Kroah-Hartman
maintainerPATCH 116/148 svcrpc: fix potential GSSX_ACCEPT_SEC_CONTEXT decoding failures
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Scott Mayhew <[email protected]>
commit 9507271d960a1911a51683888837d75c171cd91f upstream.
In an environment where the KDC is running Active Directory, the exported composite name field returned in the context could be large enough to span a page boundary. Attaching a scratch buffer to the decoding xdr_stream helps deal with those cases.
The case where we saw this was actually due to behavior that's been fixed in newer gss-proxy versions, but we're fixing it here too.
--- net/sunrpc/auth_gss/gss_rpc_xdr.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-)
net/sunrpc/auth_gss/gss_rpc_xdr.c +16 -7
@@ -793,20 +793,26 @@ int gssx_dec_accept_sec_context(struct r {u32 value_follows;int err; +struct page *scratch; + + scratch =alloc_page (GFP_KERNEL ); +if (!scratch) +return -ENOMEM ; +xdr_set_scratch_buffer (xdr,page_address (scratch),PAGE_SIZE );/* res->status */ err =gssx_dec_status (xdr, &res->status);if (err) -return err; + goto out_free;/* res->context_handle */ err =gssx_dec_bool (xdr, &value_follows);if (err) -return err; + goto out_free;if (value_follows) { err =gssx_dec_ctx (xdr, res->context_handle);if (err) -return err; + goto out_free; }else { res->context_handle =NULL ; }
@@ -814,11 +820,11 @@ int gssx_dec_accept_sec_context(struct r/* res->output_token */ err =gssx_dec_bool (xdr, &value_follows);if (err) -return err; + goto out_free;if (value_follows) { err =gssx_dec_buffer (xdr, res->output_token);if (err) -return err; + goto out_free; }else { res->output_token =NULL ; }
@@ -826,14 +832,17 @@ int gssx_dec_accept_sec_context(struct r/* res->delegated_cred_handle */ err =gssx_dec_bool (xdr, &value_follows);if (err) -return err; + goto out_free;if (value_follows) {/* we do not support upcall servers sending this data. */ -return -EINVAL ; + err = -EINVAL ; + goto out_free; }/* res->options */ err =gssx_dec_option_array (xdr, &res->options); +out_free: +__free_page (scratch);return err; }
Greg Kroah-Hartman
maintainerPATCH 117/148 firmware: dmi_scan: Fix ordering of product_uuid
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jean Delvare <[email protected]>
commit 5c1ac56b51b9d222ab202dec1ac2f4215346129d upstream.
In function dmi_present(), dmi_walk_early() calls dmi_table(), which calls dmi_decode(), which ultimately calls dmi_save_uuid(). This last function makes a decision based on the value of global variable dmi_ver. The problem is that this variable is set right _after_ dmi_walk_early() returns. So dmi_save_uuid() always sees dmi_ver == 0 regardless of the actual version implemented.
This causes /sys/class/dmi/id/product_uuid to always use the old ordering even on systems implementing DMI/SMBIOS 2.6 or later, which should use the new ordering.
This is broken since kernel v3.8 for legacy DMI implementations and since kernel v3.10 for SMBIOS 2 implementations. SMBIOS 3 implementations with the 64-bit entry point are not affected.
The first breakage does not matter much as in practice legacy DMI implementations are always for versions older than 2.6, which is when the UUID ordering changed. The second breakage is more problematic as it affects the vast majority of x86 systems manufactured since 2009.
--- drivers/firmware/dmi_scan.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/firmware/dmi_scan.c +4 -3
@@ -499,18 +499,19 @@ static int __init dmi_present(const u8 * buf +=16 ;if (memcmp (buf,"_DMI_" ,5 ) ==0 &&dmi_checksum (buf,15 )) { +if (smbios_ver) + dmi_ver = smbios_ver; +else + dmi_ver = (buf[14 ] &0xF0 ) <<4 | (buf[14 ] &0x0F ); dmi_num =get_unaligned_le16 (buf +12 ); dmi_len =get_unaligned_le16 (buf +6 ); dmi_base =get_unaligned_le32 (buf +8 );if (dmi_walk_early (dmi_decode) ==0 ) {if (smbios_ver) { - dmi_ver = smbios_ver;pr_info ("SMBIOS %d.%d present.\n" , dmi_ver >>8 , dmi_ver &0xFF ); }else { - dmi_ver = (buf[14 ] &0xF0 ) <<4 | - (buf[14 ] &0x0F );pr_info ("Legacy DMI %d.%d present.\n" , dmi_ver >>8 , dmi_ver &0xFF ); }
Greg Kroah-Hartman
maintainerPATCH 118/148 thermal: armada: Update Armada 380 thermal sensor coefficients
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nadav Haklai <[email protected]>
commit efa86858e1d8970411a140fa1e0c4dd18a8f2a89 upstream.
Improve the Armada 380 thermal sensor accuracy by using updated formula. The updated formula is:
Temperature[C degrees] = 0.4761 * tsen_vsen_out - 279.1
--- drivers/thermal/armada_thermal.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/thermal/armada_thermal.c +3 -3
@@ -224,9 +224,9 @@ static const struct armada_thermal_data .is_valid_shift = 10, .temp_shift = 0, .temp_mask = 0x3ff, - .coef_b = 1169498786UL, - .coef_m = 2000000UL, - .coef_div = 4289, + .coef_b = 2931108200UL, + .coef_m = 5000000UL, + .coef_div = 10502, .inverted = true, };
Greg Kroah-Hartman
maintainerPATCH 119/148 md/raid5: dont record new size if resize_stripes fails.
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: NeilBrown <[email protected]>
commit 6e9eac2dcee5e19f125967dd2be3e36558c42fff upstream.
If any memory allocation in resize_stripes fails we will return -ENOMEM, but in some cases we update conf->pool_size anyway.
This means that if we try again, the allocations will be assumed to be larger than they are, and badness results.
So only update pool_size if there is no error.
This bug was introduced in 2.6.17 and the patch is suitable for -stable.
--- drivers/md/raid5.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/md/raid5.c +2 -1
@@ -1933,7 +1933,8 @@ static int resize_stripes(struct r5conf conf->slab_cache = sc; conf->active_name =1 -conf->active_name; - conf->pool_size = newsize; +if (!err) + conf->pool_size = newsize;return err; }
Greg Kroah-Hartman
maintainerPATCH 120/148 md/raid0: fix restore to sector variable in raid0_make_request
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Work <[email protected]>
commit a81157768a00e8cf8a7b43b5ea5cac931262374f upstream.
The variable "sector" in "raid0_make_request()" was improperly updated by a call to "sector_div()" which modifies its first argument in place. Commit 47d68979cc968535cb87f3e5f2e6a3533ea48fbd restored this variable after the call for later re-use. Unfortunetly the restore was done after the referenced variable "bio" was advanced. This lead to the original value and the restored value being different. Here we move this line to the proper place.
One observed side effect of this bug was discarding a file though unlinking would cause an unrelated file's contents to be discarded.
URL: https://bugzilla.kernel.org/show_bug.cgi?id=98501
--- drivers/md/raid0.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/md/raid0.c +3 -1
@@ -517,6 +517,9 @@ static void raid0_make_request(struct md ? (sector & (chunk_sects-1 )) : sector_div(sector, chunk_sects)); +/* Restore due to sector_div */ + sector = bio->bi_iter.bi_sector; +if (sectors <bio_sectors (bio)) { split =bio_split (bio, sectors,GFP_NOIO , fs_bio_set);bio_chain (split, bio);
@@ -524,7 +527,6 @@ static void raid0_make_request(struct md split = bio; } - sector = bio->bi_iter.bi_sector; zone =find_zone (mddev->private, §or); tmp_dev =map_sector (mddev, zone, sector, §or); split->bi_bdev = tmp_dev->bdev;
Greg Kroah-Hartman
maintainerPATCH 121/148 Revert "HID: logitech-hidpp: support combo keyboard touchpad TK820"
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Tissoires <[email protected]>
commit 5006c1052aafa01dab5b0e643b7dac755b41f3bb upstream.
This reverts commit 3a61e97563d78a2ca10752902449570d8433ce76.
The Logitech TK820 seems to be affected by a firmware bug which delays the sending of the keys (pressed, or released, which triggers a key-repeat) while holding fingers on the touch sensor. This behavior can be observed while using the mouse emulation mode if the user moves the finger while typing (highly improbable though). Holding the finger still while in the mouse emulation mode does not trigger the key repeat problem.
So better keep things in their previous state to not have to explain users that the new key-repeat bug they see is a "feature".
Furthermore, I noticed that I disabled the media keys whith this patch. Sorry, my bad.
I think it is best to revert the patch, in all the current versions it has been shipped.
--- drivers/hid/hid-logitech-hidpp.c | 20 -------------------- 1 file changed, 20 deletions(-)
drivers/hid/hid-logitech-hidpp.c +0 -20
@@ -39,7 +39,6 @@ MODULE_AUTHOR("Nestor Lopez Casado <nlop/* bits 1..20 are reserved for classes */ #define HIDPP_QUIRK_DELAYED_INIT BIT(21)#define HIDPP_QUIRK_WTP_PHYSICAL_BUTTONS BIT(22) -#define HIDPP_QUIRK_MULTI_INPUT BIT(23)/* * There are two hidpp protocols in use, the first version hidpp10 is known
@@ -701,12 +700,6 @@ static int wtp_input_mapping(struct hid_ struct hid_field *field, struct hid_usage *usage, unsigned long **bit, int *max) { - struct hidpp_device *hidpp = hid_get_drvdata(hdev); - -if ((hidpp->quirks &HIDPP_QUIRK_MULTI_INPUT ) && - (field->application ==HID_GD_KEYBOARD )) -return 0 ; - return -1; }
@@ -715,10 +708,6 @@ static void wtp_populate_input(struct hi {struct wtp_data *wd = hidpp->private_data; -if ((hidpp->quirks &HIDPP_QUIRK_MULTI_INPUT ) && origin_is_hid_core) -/* this is the generic hid-input call */ -return ; -__set_bit (EV_ABS , input_dev->evbit);__set_bit (EV_KEY , input_dev->evbit);__clear_bit (EV_REL , input_dev->evbit);
@@ -1234,10 +1223,6 @@ static int hidpp_probe(struct hid_deviceif (hidpp->quirks &HIDPP_QUIRK_DELAYED_INIT ) connect_mask &= ~HID_CONNECT_HIDINPUT ; -/* Re-enable hidinput for multi-input devices */ -if (hidpp->quirks &HIDPP_QUIRK_MULTI_INPUT ) - connect_mask |=HID_CONNECT_HIDINPUT ; - ret =hid_hw_start (hdev, connect_mask);if (ret) {hid_err (hdev,"%s:hid_hw_start returned error\n" , __func__);
@@ -1285,11 +1270,6 @@ static const struct hid_device_id hidpp_HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_LOGITECH , USB_DEVICE_ID_LOGITECH_T651), .driver_data = HIDPP_QUIRK_CLASS_WTP }, - {/* Keyboard TK820 */ -HID_DEVICE (BUS_USB ,HID_GROUP_LOGITECH_DJ_DEVICE , - USB_VENDOR_ID_LOGITECH, 0x4102), - .driver_data =HIDPP_QUIRK_DELAYED_INIT |HIDPP_QUIRK_MULTI_INPUT | - HIDPP_QUIRK_CLASS_WTP }, { HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE, USB_VENDOR_ID_LOGITECH, HID_ANY_ID)},
Greg Kroah-Hartman
maintainerPATCH 122/148 MIPS: fix FP mode selection in lieu of .MIPS.abiflags data
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paul Burton <[email protected]>
commit 620b155034570f577470cf5309f741bac6a6e32b upstream.
Commit 46490b572544 ("MIPS: kernel: elf: Improve the overall ABI and FPU mode checks") reworked the ELF FP ABI mode selection logic, but when CONFIG_MIPS_O32_FP64_SUPPORT is enabled it breaks the use of binaries which have no PT_MIPS_ABIFLAGS program header & associated .MIPS.abiflags section.
A default mode is selected based upon whether the ELF contains MIPS32 or MIPS64 code, but that selection is made in arch_elf_pt_proc. arch_elf_pt_proc only executes when a PT_MIPS_ABIFLAGS program header is found. If one is not found then arch_elf_pt_proc is never called, and no default overall_fp_mode value is selected. When arch_check_elf is called, both abi0 & abi1 are MIPS_ABI_FP_UNKNOWN which leads to both prog_req & interp_req being set to none_req. none_req matches none of the conditions for mode selection at the end of arch_check_elf, so overall_fp_mode is left untouched. Finally once mips_set_personality_fp is called the BUG() in the default case is then hit & the kernel likely panics.
Fix this by moving the selection of a default overall mode to the start of arch_check_elf, which runs once per ELF executed regardless of whether it has a PT_MIPS_ABIFLAGS program header.
Patchwork: http://patchwork.linux-mips.org/patch/9978/
--- arch/mips/kernel/elf.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-)
arch/mips/kernel/elf.c +17 -15
@@ -76,14 +76,6 @@ int arch_elf_pt_proc(void *_ehdr, void */* Lets see if this is an O32 ELF */ if (ehdr32->e_ident[EI_CLASS ] ==ELFCLASS32 ) { -/* FR = 1 for N32 */ -if (ehdr32->e_flags &EF_MIPS_ABI2 ) - state->overall_fp_mode =FP_FR1 ; -else -/* Set a good default FPU mode for O32 */ - state->overall_fp_mode = cpu_has_mips_r6 ? -FP_FRE :FP_FR0 ; -if (ehdr32->e_flags &EF_MIPS_FP64 ) {/* * Set MIPS_ABI_FP_OLD_64 for EF_MIPS_FP64. We will override it
@@ -104,9 +96,6 @@ int arch_elf_pt_proc(void *_ehdr, void * (char *)&abiflags, sizeof(abiflags)); }else { -/* FR=1 is really the only option for 64-bit */ - state->overall_fp_mode =FP_FR1 ; -if (phdr64->p_type !=PT_MIPS_ABIFLAGS )return 0 ;if (phdr64->p_filesz <sizeof (abiflags))
@@ -147,6 +136,7 @@ int arch_check_elf(void *_ehdr, bool hasstruct elf32_hdr *ehdr = _ehdr;struct mode_req prog_req, interp_req;int fp_abi, interp_fp_abi, abi0, abi1, max_abi; +bool is_mips64;if (!config_enabled (CONFIG_MIPS_O32_FP64_SUPPORT ))return 0 ;
@@ -162,10 +152,22 @@ int arch_check_elf(void *_ehdr, bool has abi0 = abi1 = fp_abi; } -/* ABI limits. O32 = FP_64A, N32/N64 = FP_SOFT */ - max_abi = ((ehdr->e_ident[EI_CLASS ] ==ELFCLASS32 ) && - (!(ehdr->e_flags &EF_MIPS_ABI2 ))) ? -MIPS_ABI_FP_64A :MIPS_ABI_FP_SOFT ; + is_mips64 = (ehdr->e_ident[EI_CLASS ] ==ELFCLASS64 ) || + (ehdr->e_flags &EF_MIPS_ABI2 ); + +if (is_mips64) { +/* MIPS64 code always uses FR=1, thus the default is easy */ + state->overall_fp_mode =FP_FR1 ; + +/* Disallow access to the various FPXX & FP64 ABIs */ + max_abi =MIPS_ABI_FP_SOFT ; + }else { +/* Default to a mode capable of running code expecting FR=0 */ + state->overall_fp_mode = cpu_has_mips_r6 ?FP_FRE :FP_FR0 ; + +/* Allow all ABIs we know about */ + max_abi =MIPS_ABI_FP_64A ; + }if ((abi0 > max_abi && abi0 !=MIPS_ABI_FP_UNKNOWN ) || (abi1 > max_abi && abi1 !=MIPS_ABI_FP_UNKNOWN ))
Greg Kroah-Hartman
maintainerPATCH 123/148 rtlwifi: rtl8192cu: Fix kernel deadlock
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Larry Finger <[email protected]>
commit 414b7e3b9ce8b0577f613e656fdbc36b34b444dd upstream.
The USB mini-driver in rtlwifi, which is used by rtl8192cu, issues a call to usb_control_msg() with a timeout value of 0. In some instances where the interface is shutting down, this infinite wait results in a CPU deadlock. A one second timeout fixes this problem without affecting any normal operations.
This bug is reported at https://bugzilla.novell.com/show_bug.cgi?id=927786.
--- drivers/net/wireless/rtlwifi/usb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/rtlwifi/usb.c +1 -1
@@ -126,7 +126,7 @@ static int _usbctrl_vendorreq_sync_read( do { status = usb_control_msg(udev, pipe, request, reqtype, value, - index, pdata, len, 0); /*max. timeout*/ + index, pdata, len, 1000); if (status < 0) { /* firmware download is checksumed, don't retry */ if ((value >= FW_8192C_START_ADDRESS &&
Greg Kroah-Hartman
maintainerPATCH 124/148 Input: elantech - fix semi-mt protocol for v3 HW
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Tissoires <[email protected]>
commit 3c0213d17a09601e0c6c0ae0e27caf70d988290f upstream.
When the v3 hardware sees more than one finger, it uses the semi-mt protocol to report the touches. However, it currently works when num_fingers is 0, 1 or 2, but when it is 3 and above, it sends only 1 finger as if num_fingers was 1.
This confuses userspace which knows how to deal with extra fingers when all the slots are used, but not when some are missing.
--- drivers/input/mouse/elantech.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/input/mouse/elantech.c +1 -1
@@ -315,7 +315,7 @@ static void elantech_report_semi_mt_data unsigned int x2, unsigned int y2) { elantech_set_slot(dev, 0, num_fingers != 0, x1, y1); -elantech_set_slot (dev,1 , num_fingers ==2 , x2, y2); +elantech_set_slot (dev,1 , num_fingers >=2 , x2, y2); }/*
Greg Kroah-Hartman
maintainerPATCH 125/148 storvsc: Set the SRB flags correctly when no data transfer is needed
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "K. Y. Srinivasan" <[email protected]>
commit dc45708ca9988656d706940df5fd102672c5de92 upstream.
Set the SRB flags correctly when there is no data transfer. Without this change some IHV drivers will fail valid commands such as TEST_UNIT_READY.
--- drivers/scsi/storvsc_drv.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/scsi/storvsc_drv.c +1 -2
@@ -1565,8 +1565,7 @@ static int storvsc_queuecommand(struct Sbreak ;default : vm_srb->data_in =UNKNOWN_TYPE ; - vm_srb->win8_extension.srb_flags |= (SRB_FLAGS_DATA_IN | -SRB_FLAGS_DATA_OUT ); + vm_srb->win8_extension.srb_flags |=SRB_FLAGS_NO_DATA_TRANSFER ;break ; }
Greg Kroah-Hartman
maintainerPATCH 126/148 sd: Disable support for 256 byte/sector disks
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Hounschell <[email protected]>
commit 74856fbf441929918c49ff262ace9835048e4e6a upstream.
256 bytes per sector support has been broken since 2.6.X, and no-one stepped up to fix this.
So disable support for it.
--- drivers/scsi/sd.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-)
drivers/scsi/sd.c +5 -14
@@ -1624,6 +1624,7 @@ static unsigned int sd_completed_bytes(s {u64 start_lba =blk_rq_pos (scmd->request);u64 end_lba =blk_rq_pos (scmd->request) + (scsi_bufflen (scmd) /512 ); +u64 factor = scmd->device->sector_size /512 ;u64 bad_lba;int info_valid;/*
@@ -1645,16 +1646,9 @@ static unsigned int sd_completed_bytes(sif (scsi_bufflen (scmd) <= scmd->device->sector_size)return 0 ; -if (scmd->device->sector_size <512 ) { -/* only legitimate sector_size here is 256 */ - start_lba <<=1 ; - end_lba <<=1 ; - }else { -/* be careful ... don't want any overflows */ -unsigned int factor = scmd->device->sector_size /512 ; -do_div (start_lba, factor); -do_div (end_lba, factor); - } +/* be careful ... don't want any overflows */ +do_div (start_lba, factor); +do_div (end_lba, factor);/* The bad lba was reported incorrectly, we have no idea where * the error is.
@@ -2212,8 +2206,7 @@ got_data:if (sector_size !=512 && sector_size !=1024 && sector_size !=2048 && - sector_size !=4096 && - sector_size !=256 ) { + sector_size !=4096 ) {sd_printk (KERN_NOTICE , sdkp,"Unsupported sector size %d.\n" , sector_size);/*
@@ -2268,8 +2261,6 @@ got_data: sdkp->capacity <<=2 ; else if (sector_size == 1024) sdkp->capacity <<= 1; - else if (sector_size == 256) - sdkp->capacity >>= 1; blk_queue_physical_block_size(sdp->request_queue, sdkp->physical_block_size);
Greg Kroah-Hartman
maintainerPATCH 127/148 ACPI / init: Fix the ordering of acpi_reserve_resources()
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Rafael J. Wysocki" <[email protected]>
commit b9a5e5e18fbf223502c0b2264c15024e393da928 upstream.
Since acpi_reserve_resources() is defined as a device_initcall(), there's no guarantee that it will be executed in the right order with respect to the rest of the ACPI initialization code. On some systems this leads to breakage if, for example, the address range that should be reserved for the ACPI fixed registers is given to the PCI host bridge instead if the race is won by the wrong code path.
Fix this by turning acpi_reserve_resources() into a void function and calling it directly from within the ACPI initialization sequence.
--- drivers/acpi/osl.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/acpi/osl.c +2 -4
@@ -182,7 +182,7 @@ static void __init acpi_request_region (request_mem_region (addr, length, desc); } -static int __init acpi_reserve_resources (void ) +static void __init acpi_reserve_resources (void ) {acpi_request_region (&acpi_gbl_FADT.xpm1a_event_block, acpi_gbl_FADT.pm1_event_length,"ACPI PM1a_EVT_BLK" );
@@ -211,10 +211,7 @@ static int __init acpi_reserve_resourcesif (!(acpi_gbl_FADT.gpe1_block_length &0x1 ))acpi_request_region (&acpi_gbl_FADT.xgpe1_block, acpi_gbl_FADT.gpe1_block_length,"ACPI GPE1_BLK" ); - -return 0 ; } -device_initcall (acpi_reserve_resources);void acpi_os_printf (const char *fmt, ...) {
@@ -1845,6 +1842,7 @@ acpi_status __init acpi_os_initialize(voacpi_status __init acpi_os_initialize1 (void ) { +acpi_reserve_resources (); kacpid_wq =alloc_workqueue ("kacpid" ,0 ,1 ); kacpi_notify_wq =alloc_workqueue ("kacpi_notify" ,0 ,1 ); kacpi_hotplug_wq =alloc_ordered_workqueue ("kacpi_hotplug" ,0 );
Greg Kroah-Hartman
maintainerPATCH 128/148 iwlwifi: mvm: clean net-detect info if device was reset during suspend
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luciano Coelho <[email protected]>
commit a500e469ead055f35c7b2d0a1104e1bd58e34e70 upstream.
If the device is reset during suspend with net-detect enabled, we leave the net-detect information dangling and this causes the next suspend to fail with a warning:
[21795.351010] WARNING: at /root/iwlwifi/iwlwifi-stack-dev/drivers/net/wireless/iwlwifi/mvm/d3.c:989 __iwl_mvm_suspend.isra.6+0x2be/0x460 [iwlmvm]() [21795.353253] Modules linked in: iwlmvm(O) iwlwifi(O) mac80211(O) cfg80211(O) compat(O) [...] [21795.366168] CPU: 1 PID: 3645 Comm: bash Tainted: G O 3.10.29-dev #1 [21795.368785] Hardware name: Dell Inc. Latitude E6430/0CPWYR, BIOS A09 12/13/2012 [21795.371441] f8ec6748 f8ec6748 e51f3ce8 c168aa62 e51f3d10 c103a824 c1871238 f8ec6748 [21795.374228] 000003dd f8eb982e f8eb982e 00000000 c3408ed4 c41edbbc e51f3d20 c103a862 [21795.377006] 00000009 00000000 e51f3da8 f8eb982e c41ee3dc 00000004 e7970000 e51f3d74 [21795.379792] Call Trace: [21795.382461] [<c168aa62>] dump_stack+0x16/0x18 [21795.385133] [<c103a824>] warn_slowpath_common+0x64/0x80 [21795.387803] [<f8eb982e>] ? __iwl_mvm_suspend.isra.6+0x2be/0x460 [iwlmvm] [21795.390485] [<f8eb982e>] ? __iwl_mvm_suspend.isra.6+0x2be/0x460 [iwlmvm] [21795.393124] [<c103a862>] warn_slowpath_null+0x22/0x30 [21795.395787] [<f8eb982e>] __iwl_mvm_suspend.isra.6+0x2be/0x460 [iwlmvm] [21795.398464] [<f8eb9d7c>] iwl_mvm_suspend+0xec/0x140 [iwlmvm] [21795.401127] [<c104be11>] ? del_timer_sync+0xa1/0xc0 [21795.403800] [<f8d4107e>] __ieee80211_suspend+0x1de/0xff0 [mac80211] [21795.406459] [<c168e43d>] ? mutex_lock_nested+0x25d/0x350 [21795.409084] [<c1586b64>] ? rtnl_lock+0x14/0x20 [21795.411685] [<f8cf0076>] ieee80211_suspend+0x16/0x20 [mac80211] [21795.414318] [<f8c4e014>] wiphy_suspend+0x74/0x710 [cfg80211] [21795.416916] [<c141e612>] __device_suspend+0x1e2/0x220 [21795.419521] [<f8c4dfa0>] ? addresses_show+0xa0/0xa0 [cfg80211] [21795.422097] [<c141f997>] dpm_suspend+0x67/0x210 [21795.424661] [<c141fd6f>] dpm_suspend_start+0x4f/0x60 [21795.427219] [<c108d8e0>] suspend_devices_and_enter+0x60/0x480 [21795.429768] [<c168646a>] ? printk+0x4d/0x4f [21795.432295] [<c108de76>] pm_suspend+0x176/0x210 [21795.434830] [<c108ca5d>] state_store+0x5d/0xb0 [21795.437410] [<c108ca00>] ? wakeup_count_show+0x50/0x50 [21795.439961] [<c13208db>] kobj_attr_store+0x1b/0x30 [21795.442514] [<c11e3a4b>] sysfs_write_file+0xab/0x100 [21795.445088] [<c11e39a0>] ? sysfs_poll+0xa0/0xa0 [21795.447659] [<c1179655>] vfs_write+0xa5/0x1c0 [21795.450212] [<c1179af7>] SyS_write+0x57/0xa0 [21795.452699] [<c1699ec1>] sysenter_do_call+0x12/0x32 [21795.455146] ---[ end trace faf5321baba2bfdb ]---
To fix this, call the iwl_mvm_free_nd() function in case of any error during resume. Additionally, rename the "out_unlock" label to err to make it clearer that it's only called in error conditions.
--- drivers/net/wireless/iwlwifi/mvm/d3.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
drivers/net/wireless/iwlwifi/mvm/d3.c +5 -4
@@ -1860,15 +1860,15 @@ static int __iwl_mvm_resume(struct iwl_m/* get the BSS vif pointer again */ vif =iwl_mvm_get_bss_vif (mvm);if (IS_ERR_OR_NULL (vif)) - goto out_unlock; + goto err; ret =iwl_trans_d3_resume (mvm->trans, &d3_status, test);if (ret) - goto out_unlock; + goto err;if (d3_status !=IWL_D3_STATUS_ALIVE ) {IWL_INFO (mvm,"Device was reset during suspend\n" ); - goto out_unlock; + goto err; }/* query SRAM first in case we want event logging */
@@ -1886,7 +1886,8 @@ static int __iwl_mvm_resume(struct iwl_m/* has unlocked the mutex, so skip that */ goto out; - out_unlock: +err: +iwl_mvm_free_nd (mvm);mutex_unlock (&mvm->mutex); out:
Greg Kroah-Hartman
maintainerPATCH 129/148 iwlwifi: mvm: Free fw_status after use to avoid memory leak
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Haim Dreyfuss <[email protected]>
commit 2fc863a5143d64b8f06576cc3d7fd5622c5cf3b5 upstream.
fw_status is the only pointer pointing to a block of memory allocated above and should be freed after use.
Note: this come from Klockwork static analyzer.
--- drivers/net/wireless/iwlwifi/mvm/d3.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/d3.c +3 -1
@@ -1742,8 +1742,10 @@ static void iwl_mvm_query_netdetect_reasint i, j, n_matches, ret; fw_status =iwl_mvm_get_wakeup_status (mvm, vif); -if (!IS_ERR_OR_NULL (fw_status)) +if (!IS_ERR_OR_NULL (fw_status)) { reasons =le32_to_cpu (fw_status->wakeup_reasons); +kfree (fw_status); + }if (reasons &IWL_WOWLAN_WAKEUP_BY_RFKILL_DEASSERTED ) wakeup.rfkill_release = true;
Greg Kroah-Hartman
maintainerPATCH 130/148 iwlwifi: pcie: prevent using unmapped memory in fw monitor
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Liad Kaufman <[email protected]>
commit 553452e5ffc0ed13214a287549627d02d9d7fbdc upstream.
In the case of a DMA mapping error on the last iteration of the loop of the allocation of memory of the FW monitor we indeed free the pages, but don't NULL out the page variable thus allowing for the possibility of setting the FW monitor variables with invalid data to use.
--- drivers/net/wireless/iwlwifi/pcie/trans.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
drivers/net/wireless/iwlwifi/pcie/trans.c +6 -5
@@ -5,8 +5,8 @@* * GPL LICENSE SUMMARY * -* Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. -* Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH +* Copyright(c) 2007 - 2015 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -31,8 +31,8 @@* * BSD LICENSE * -* Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. -* Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH +* Copyright(c) 2005 - 2015 Intel Corporation. All rights reserved. +* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * All rights reserved. * * Redistribution and use in source and binary forms, with or without
@@ -104,7 +104,7 @@ static void iwl_pcie_free_fw_monitor(strstatic void iwl_pcie_alloc_fw_monitor (struct iwl_trans *trans) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans); -struct page *page; +struct page *page =NULL ;dma_addr_t phys;u32 size;u8 power;
@@ -131,6 +131,7 @@ static void iwl_pcie_alloc_fw_monitor(st DMA_FROM_DEVICE);if (dma_mapping_error (trans->dev, phys)) {__free_pages (page, order); + page =NULL ;continue ; } IWL_INFO(trans,
Greg Kroah-Hartman
maintainerPATCH 131/148 drm/radeon: add new bonaire pci id
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit fcf3b54282e4c5a95a1f45f67558bc105acdbc6a upstream.
--- include/drm/drm_pciids.h | 1 + 1 file changed, 1 insertion(+)
include/drm/drm_pciids.h +1 -0
@@ -186,6 +186,7 @@ {0x1002, 0x6658, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_BONAIRE|RADEON_NEW_MEMMAP}, \ {0x1002, 0x665c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_BONAIRE|RADEON_NEW_MEMMAP}, \ {0x1002, 0x665d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_BONAIRE|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x665f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_BONAIRE|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6660, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6663, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6664, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_HAINAN|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
Greg Kroah-Hartman
maintainerPATCH 133/148 drm/radeon: retry dcpd fetch
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit 0f28d1281b6c54cc98746ae61e44e7f540758ed4 upstream.
Retry the dpcd fetch several times. Some eDP panels fail several times before the fetch is successful.
bug:
https://bugs.freedesktop.org/show_bug.cgi?id=73530
--- drivers/gpu/drm/radeon/atombios_dp.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
drivers/gpu/drm/radeon/atombios_dp.c +11 -9
@@ -412,19 +412,21 @@ bool radeon_dp_getdpcd(struct radeon_con {struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv;u8 msg[DP_DPCD_SIZE ]; -int ret; +int ret, i; - ret =drm_dp_dpcd_read (&radeon_connector->ddc_bus->aux,DP_DPCD_REV , msg, -DP_DPCD_SIZE ); -if (ret >0 ) { -memcpy (dig_connector->dpcd, msg,DP_DPCD_SIZE ); +for (i =0 ; i <7 ; i++) { + ret =drm_dp_dpcd_read (&radeon_connector->ddc_bus->aux,DP_DPCD_REV , msg, +DP_DPCD_SIZE ); +if (ret ==DP_DPCD_SIZE ) { +memcpy (dig_connector->dpcd, msg,DP_DPCD_SIZE ); -DRM_DEBUG_KMS ("DPCD: %*ph\n" , (int )sizeof (dig_connector->dpcd), - dig_connector->dpcd); +DRM_DEBUG_KMS ("DPCD: %*ph\n" , (int )sizeof (dig_connector->dpcd), + dig_connector->dpcd); -radeon_dp_probe_oui (radeon_connector); +radeon_dp_probe_oui (radeon_connector); -return true; +return true; + } } dig_connector->dpcd[0 ] =0 ;return false;
Greg Kroah-Hartman
maintainerPATCH 134/148 drm/plane-helper: Adapt cursor hack to transitional helpers
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Vetter <[email protected]>
commit 2e7f43c41c042d6fed4d67aceeaae32d8f102e98 upstream.
In
commit f02ad907cd9e7fe3a6405d2d005840912f1ed258
Author: Daniel Vetter <[email protected]> Date: Thu Jan 22 16:36:23 2015 +0100
drm/atomic-helpers: Recover full cursor plane behaviour
we've added a hack to atomic helpers to never to vblank waits for cursor updates through the legacy apis since that's what X expects. Unfortunately we've (again) forgotten to adjust the transitional helpers. Do this now.
This fixes regressions for drivers only partially converted over to atomic (like i915).
--- drivers/gpu/drm/drm_plane_helper.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/gpu/drm/drm_plane_helper.c +3 -0
@@ -476,6 +476,9 @@ int drm_plane_helper_commit(struct drm_pif (!crtc[i])continue ; +if (crtc[i]->cursor == plane) +continue ; +/* There's no other way to figure out whether the crtc is running. */ ret =drm_crtc_vblank_get (crtc[i]);if (ret ==0 ) {
Greg Kroah-Hartman
maintainerPATCH 135/148 drm/radeon: dont share plls if monitors differ in audio support
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit a10f0df0615abb194968fc08147f3cdd70fd5aa5 upstream.
Enabling audio may enable different pll dividers. Don't share plls if the monitors differ in audio support.
bug:
https://bugzilla.kernel.org/show_bug.cgi?id=98751
--- drivers/gpu/drm/radeon/atombios_crtc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/radeon/atombios_crtc.c +3 -1
@@ -1789,7 +1789,9 @@ static int radeon_get_shared_nondp_ppll(if ((crtc->mode.clock == test_crtc->mode.clock) && (adjusted_clock == test_adjusted_clock) && (radeon_crtc->ss_enabled == test_radeon_crtc->ss_enabled) && - (test_radeon_crtc->pll_id !=ATOM_PPLL_INVALID )) + (test_radeon_crtc->pll_id !=ATOM_PPLL_INVALID ) && + (drm_detect_monitor_audio (radeon_connector_edid (test_radeon_crtc->connector)) == +drm_detect_monitor_audio (radeon_connector_edid (radeon_crtc->connector))))return test_radeon_crtc->pll_id; } }
Greg Kroah-Hartman
maintainerPATCH 136/148 drm/radeon/audio: make sure connector is valid in hotplug case
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit fbfd3bc7dfd7efcad2d2e52bf634f84c80a77a35 upstream.
Avoids a crash when a monitor is hotplugged and the encoder and connector are not linked yet.
bug:
https://bugs.freedesktop.org/show_bug.cgi?id=90681
--- drivers/gpu/drm/radeon/evergreen_hdmi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/gpu/drm/radeon/evergreen_hdmi.c +3 -2
@@ -400,7 +400,7 @@ void evergreen_hdmi_enable(struct drm_enif (enable) {struct drm_connector *connector =radeon_get_connector_for_encoder (encoder); -if (drm_detect_monitor_audio (radeon_connector_edid (connector))) { +if (connector &&drm_detect_monitor_audio (radeon_connector_edid (connector))) { WREG32(HDMI_INFOFRAME_CONTROL0 + dig->afmt->offset, HDMI_AVI_INFO_SEND | /* enable AVI info frames */ HDMI_AVI_INFO_CONT | /* required for audio info values to be updated */
@@ -438,7 +438,8 @@ void evergreen_dp_enable(struct drm_encoif (!dig || !dig->afmt)return ; -if (enable &&drm_detect_monitor_audio (radeon_connector_edid (connector))) { +if (enable && connector && +drm_detect_monitor_audio (radeon_connector_edid (connector))) {struct drm_connector *connector =radeon_get_connector_for_encoder (encoder);struct radeon_connector *radeon_connector =to_radeon_connector (connector);struct radeon_connector_atom_dig *dig_connector;
Greg Kroah-Hartman
maintainerPATCH 137/148 Revert "drm/radeon: only mark audio as connected if the monitor supports it (v3)"
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit 2d1c18bba15daf89d75ce475ecd2068f483aa12f upstream.
This breaks too many things.
bugs:
https://bugzilla.kernel.org/show_bug.cgi?id=99041
https://bugs.freedesktop.org/show_bug.cgi?id=90681
This reverts commit 0f55db36d49d45b80eff0c0a2a498766016f458b.
--- drivers/gpu/drm/radeon/radeon_audio.c | 27 ++++++++++++--------------- drivers/gpu/drm/radeon/radeon_connectors.c | 8 ++------ 2 files changed, 14 insertions(+), 21 deletions(-)
drivers/gpu/drm/radeon/radeon_audio.c +12 -15
@@ -460,9 +460,6 @@ void radeon_audio_detect(struct drm_connif (!connector || !connector->encoder)return ; -if (!radeon_encoder_is_digital (connector->encoder)) -return ; - rdev = connector->encoder->dev->dev_private;if (!radeon_audio_chipset_supported (rdev))
@@ -471,26 +468,26 @@ void radeon_audio_detect(struct drm_conn radeon_encoder =to_radeon_encoder (connector->encoder); dig = radeon_encoder->enc_priv; -if (!dig->afmt) -return ; -if (status == connector_status_connected) { -struct radeon_connector *radeon_connector =to_radeon_connector (connector); +struct radeon_connector *radeon_connector; +int sink_type; + +if (!drm_detect_monitor_audio (radeon_connector_edid (connector))) { + radeon_encoder->audio =NULL ; +return ; + } + + radeon_connector =to_radeon_connector (connector); + sink_type =radeon_dp_getsinktype (radeon_connector);if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort && -radeon_dp_getsinktype (radeon_connector) == -CONNECTOR_OBJECT_ID_DISPLAYPORT ) + sink_type ==CONNECTOR_OBJECT_ID_DISPLAYPORT ) radeon_encoder->audio = rdev->audio.dp_funcs;else radeon_encoder->audio = rdev->audio.hdmi_funcs; dig->afmt->pin =radeon_audio_get_pin (connector->encoder); -if (drm_detect_monitor_audio (radeon_connector_edid (connector))) { -radeon_audio_enable (rdev, dig->afmt->pin,0xf ); - }else { -radeon_audio_enable (rdev, dig->afmt->pin,0 ); - dig->afmt->pin =NULL ; - } +radeon_audio_enable (rdev, dig->afmt->pin,0xf ); }else {radeon_audio_enable (rdev, dig->afmt->pin,0 ); dig->afmt->pin =NULL ;
drivers/gpu/drm/radeon/radeon_connectors.c +2 -6
@@ -1333,10 +1333,8 @@ out:/* updated in get modes as well since we need to know if it's analog or digital */ radeon_connector_update_scratch_regs (connector, ret); -if (radeon_audio !=0 ) { -radeon_connector_get_edid (connector); +if (radeon_audio !=0 )radeon_audio_detect (connector, ret); - } exit:pm_runtime_mark_last_busy (connector->dev->dev);
@@ -1661,10 +1659,8 @@ radeon_dp_detect(struct drm_connector *cradeon_connector_update_scratch_regs (connector, ret); -if (radeon_audio !=0 ) { -radeon_connector_get_edid (connector); +if (radeon_audio !=0 )radeon_audio_detect (connector, ret); - } out:pm_runtime_mark_last_busy (connector->dev->dev);
Greg Kroah-Hartman
maintainerPATCH 139/148 dm: fix casting bug in dm_merge_bvec()
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Joe Thornber <[email protected]>
commit 1c220c69ce0dcc0f234a9f263ad9c0864f971852 upstream.
dm_merge_bvec() was originally added in f6fccb ("dm: introduce merge_bvec_fn"). In that commit a value in sectors is converted to bytes using << 9, and then assigned to an int. This code made assumptions about the value of BIO_MAX_SECTORS.
A later commit 148e51 ("dm: improve documentation and code clarity in dm_merge_bvec") was meant to have no functional change but it removed the use of BIO_MAX_SECTORS in favor of using queue_max_sectors(). At this point the cast from sector_t to int resulted in a zero value. The fallout being dm_merge_bvec() would only allow a single page to be added to a bio.
This interim fix is minimal for the benefit of stable@ because the more comprehensive cleanup of passing a sector_t to all DM targets' merge function will impact quite a few DM targets.
--- drivers/md/dm.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
drivers/md/dm.c +12 -5
@@ -1642,8 +1642,7 @@ static int dm_merge_bvec(struct request_struct mapped_device *md = q->queuedata;struct dm_table *map =dm_get_live_table_fast (md);struct dm_target *ti; -sector_t max_sectors; -int max_size =0 ; +sector_t max_sectors, max_size =0 ;if (unlikely (!map)) goto out;
@@ -1658,8 +1657,16 @@ static int dm_merge_bvec(struct request_ max_sectors =min (max_io_len (bvm->bi_sector, ti), (sector_t )queue_max_sectors (q)); max_size = (max_sectors <<SECTOR_SHIFT ) - bvm->bi_size; -if (unlikely (max_size <0 ))/* this shouldn't _ever_ happen */ - max_size =0 ; + +/* +* FIXME: this stop-gap fix _must_ be cleaned up (by passing a sector_t +* to the targets' merge function since it holds sectors not bytes). +* Just doing this as an interim fix for stable@ because the more +* comprehensive cleanup of switching to sector_t will impact every +* DM target that implements a ->merge hook. +*/ +if (max_size >INT_MAX ) + max_size =INT_MAX ;/* * merge_bvec_fn() returns number of bytes
@@ -1667,7 +1674,7 @@ static int dm_merge_bvec(struct request_* max is precomputed maximal io size */ if (max_size && ti->type->merge) - max_size = ti->type->merge (ti, bvm, biovec, max_size); + max_size = ti->type->merge (ti, bvm, biovec, (int ) max_size);/* * If the target doesn't support merge method and some of the devices * provided their merge_bvec method (we know this by looking for the
Greg Kroah-Hartman
maintainerPATCH 140/148 dm: fix reload failure of 0 path multipath mapping on blk-mq devices
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Junichi Nomura <[email protected]>
commit 15b94a690470038aa08247eedbebbe7e2218d5ee upstream.
dm-multipath accepts 0 path mapping.
# echo '0 2097152 multipath 0 0 0 0' | dmsetup create newdev
Such a mapping can be used to release underlying devices while still holding requests in its queue until working paths come back.
However, once the multipath device is created over blk-mq devices, it rejects reloading of 0 path mapping:
# echo '0 2097152 multipath 0 0 1 1 queue-length 0 1 1 /dev/sda 1' \
| dmsetup create mpath1
# echo '0 2097152 multipath 0 0 0 0' | dmsetup load mpath1
device-mapper: reload ioctl on mpath1 failed: Invalid argument
Command failedWith following kernel message:
device-mapper: ioctl: can't change device type after initial table load.
DM tries to inherit the current table type using dm_table_set_type() but it doesn't work as expected because of unnecessary check about whether the target type is hybrid or not.
Hybrid type is for targets that work as either request-based or bio-based and not required for blk-mq or non blk-mq checking.
--- drivers/md/dm-table.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
drivers/md/dm-table.c +9 -7
@@ -823,6 +823,12 @@ void dm_consume_args(struct dm_arg_set * }EXPORT_SYMBOL (dm_consume_args); +static bool __table_type_request_based (unsigned table_type) +{ +return (table_type ==DM_TYPE_REQUEST_BASED || + table_type ==DM_TYPE_MQ_REQUEST_BASED ); +} +static int dm_table_set_type (struct dm_table *t) {unsigned i;
@@ -855,8 +861,7 @@ static int dm_table_set_type(struct dm_t* Determine the type from the live device. * Default to bio-based if device is new. */ -if (live_md_type ==DM_TYPE_REQUEST_BASED || - live_md_type ==DM_TYPE_MQ_REQUEST_BASED ) +if (__table_type_request_based (live_md_type)) request_based =1 ;else bio_based =1 ;
@@ -906,7 +911,7 @@ static int dm_table_set_type(struct dm_t } t->type =DM_TYPE_MQ_REQUEST_BASED ; - }else if (hybrid &&list_empty (devices) && live_md_type !=DM_TYPE_NONE ) { + }else if (list_empty (devices) &&__table_type_request_based (live_md_type)) {/* inherit live MD type */ t->type = live_md_type;
@@ -928,10 +933,7 @@ struct target_type *dm_table_get_immutabbool dm_table_request_based (struct dm_table *t) { -unsigned table_type =dm_table_get_type (t); - -return (table_type ==DM_TYPE_REQUEST_BASED || - table_type ==DM_TYPE_MQ_REQUEST_BASED ); +return __table_type_request_based (dm_table_get_type (t)); }bool dm_table_mq_request_based (struct dm_table *t)
Greg Kroah-Hartman
maintainerPATCH 141/148 drm/amdkfd: Dont report local memory size
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oded Gabbay <[email protected]>
commit 42e08c78360e58516b6ac8af18a75a494f2967a2 upstream.
This patch sets the local memory size that is reported to userspace to 0. This is done to make sure that userspace won't try to allocate local memory for HSA.
As long as amdkfd doesn't support allocating local memory for HSA, we need this patch.
--- drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/amdkfd/kfd_topology.c +1 -1
@@ -729,7 +729,7 @@ static ssize_t node_show(struct kobject kfd2kgd->get_max_engine_clock_in_mhz ( dev->gpu->kgd));sysfs_show_64bit_prop (buffer,"local_mem_size" , - kfd2kgd->get_vmem_size (dev->gpu->kgd)); + (unsigned long long int )0 ); sysfs_show_32bit_prop(buffer, "fw_version", kfd2kgd->get_fw_version(
Greg Kroah-Hartman
maintainerPATCH 142/148 vfs: read file_handle only once in handle_to_path
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sasha Levin <[email protected]>
commit 161f873b89136eb1e69477c847d5a5033239d9ba upstream.
We used to read file_handle twice. Once to get the amount of extra bytes, and once to fetch the entire structure.
This may be problematic since we do size verifications only after the first read, so if the number of extra bytes changes in userspace between the first and second calls, we'll have an incoherent view of file_handle.
Instead, read the constant size once, and copy that over to the final structure without having to re-read it again.
--- fs/fhandle.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/fhandle.c +3 -2
@@ -195,8 +195,9 @@ static int handle_to_path(int mountdirfd goto out_err; }/* copy the full handle */ -if (copy_from_user (handle, ufh, -sizeof (struct file_handle ) + + *handle = f_handle; +if (copy_from_user (&handle->f_handle, + &ufh->f_handle, f_handle.handle_bytes)) { retval = -EFAULT ; goto out_handle;
Greg Kroah-Hartman
maintainerPATCH 143/148 power/reset: at91: fix return value check in at91_reset_platform_probe()
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wei Yongjun <[email protected]>
commit 932df43005389300a3336421e4aedb25390ae144 upstream.
In case of error, the function devm_ioremap() returns NULL not ERR_PTR(). The IS_ERR() test in the return value check should be replaced with NULL test.
--- drivers/power/reset/at91-reset.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/power/reset/at91-reset.c +2 -2
@@ -212,9 +212,9 @@ static int at91_reset_platform_probe(str res =platform_get_resource (pdev,IORESOURCE_MEM , idx +1 ); at91_ramc_base[idx] =devm_ioremap (&pdev->dev, res->start,resource_size (res)); -if (IS_ERR (at91_ramc_base[idx])) { +if (!at91_ramc_base[idx]) {dev_err (&pdev->dev,"Could not map ram controller address\n" ); -return PTR_ERR (at91_ramc_base[idx]); +return -ENOMEM ; } }
Greg Kroah-Hartman
maintainerPATCH 144/148 ARC: unbork !LLSC build
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vineet Gupta <[email protected]>
commit daaf40e53b5dbdf75255d58a45ce8ac65ca511a8 upstream.
--- arch/arc/include/asm/atomic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arc/include/asm/atomic.h +1 -1
@@ -99,7 +99,7 @@ static inline void atomic_##op(int i, atatomic_ops_unlock (flags); \ } -#define ATOMIC_OP_RETURN (op, c_op) \ +#define ATOMIC_OP_RETURN (op, c_op, asm_op) \ static inline int atomic_##op##_return(int i, atomic_t *v) \ { \ unsigned long flags; \
Greg Kroah-Hartman
maintainerPATCH 145/148 UBI: block: Add missing cache flushes
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kevin Cernekee <[email protected]>
commit 98fb1ffd8154890d7051750e61ff5548c3ee2ab2 upstream.
Block drivers are responsible for calling flush_dcache_page() on each BIO request. This operation keeps the I$ coherent with the D$ on architectures that don't have hardware coherency support. Without this flush, random crashes are seen when executing user programs from an ext4 filesystem backed by a ubiblock device.
This patch is based on the change implemented in commit 2d4dc890b5c8 ("block: add helpers to run flush_dcache_page() against a bio and a request's pages").
--- drivers/mtd/ubi/block.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/mtd/ubi/block.c +2 -0
@@ -310,6 +310,8 @@ static void ubiblock_do_work(struct workblk_rq_map_sg (req->q, req, pdu->usgl.sg); ret =ubiblock_read (pdu); +rq_flush_dcache_pages (req); +blk_mq_end_request (req, ret); }
Greg Kroah-Hartman
maintainerPATCH 146/148 pwm: img: Impose upper and lower timebase steps value
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naidu Tellapati <[email protected]>
commit 1e70897d0e20f988abedcf73b33684ecd2be9511 upstream.
The PWM hardware on Pistachio platform has a maximum timebase steps value to 255. To fix it, let's introduce a compatible-specific data structure to contain the SoC-specific details and use it to specify a maximum timebase.
Also, let's limit the minimum timebase to 16 steps, to allow a sane range of duty cycle steps.
--- drivers/pwm/pwm-img.c | 76 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 12 deletions(-)
drivers/pwm/pwm-img.c +64 -12
@@ -16,6 +16,7 @@#include <linux/mfd/syscon.h> #include <linux/module.h> #include <linux/of.h> +#include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/pwm.h> #include <linux/regmap.h>
@@ -38,7 +39,22 @@#define PERIP_PWM_PDM_CONTROL_CH_MASK 0x1#define PERIP_PWM_PDM_CONTROL_CH_SHIFT (ch) ((ch) * 4) -#define MAX_TMBASE_STEPS 65536 +/* +* PWM period is specified with a timebase register, +* in number of step periods. The PWM duty cycle is also +* specified in step periods, in the [0, $timebase] range. +* In other words, the timebase imposes the duty cycle +* resolution. Therefore, let's constraint the timebase to +* a minimum value to allow a sane range of duty cycle values. +* Imposing a minimum timebase, will impose a maximum PWM frequency. +* +* The value chosen is completely arbitrary. +*/ +#define MIN_TMBASE_STEPS 16 + +struct img_pwm_soc_data { +u32 max_timebase; +};struct img_pwm_chip {struct device *dev;
@@ -47,6 +63,9 @@ struct img_pwm_chip {struct clk *sys_clk;void __iomem *base;struct regmap *periph_regs; +int max_period_ns; +int min_period_ns; +const struct img_pwm_soc_data *data; };static inline struct img_pwm_chip *to_img_pwm_chip (struct pwm_chip *chip)
@@ -72,24 +91,31 @@ static int img_pwm_config(struct pwm_chiu32 val, div, duty, timebase;unsigned long mul, output_clk_hz, input_clk_hz;struct img_pwm_chip *pwm_chip =to_img_pwm_chip (chip); +unsigned int max_timebase = pwm_chip->data->max_timebase; + +if (period_ns < pwm_chip->min_period_ns || + period_ns > pwm_chip->max_period_ns) { +dev_err (chip->dev,"configured period not in range\n" ); +return -ERANGE ; + } input_clk_hz =clk_get_rate (pwm_chip->pwm_clk); output_clk_hz =DIV_ROUND_UP (NSEC_PER_SEC , period_ns); mul =DIV_ROUND_UP (input_clk_hz, output_clk_hz); -if (mul <=MAX_TMBASE_STEPS ) { +if (mul <= max_timebase) { div =PWM_CTRL_CFG_NO_SUB_DIV ; timebase =DIV_ROUND_UP (mul,1 ); - }else if (mul <=MAX_TMBASE_STEPS *8 ) { + }else if (mul <= max_timebase *8 ) { div =PWM_CTRL_CFG_SUB_DIV0 ; timebase =DIV_ROUND_UP (mul,8 ); - }else if (mul <=MAX_TMBASE_STEPS *64 ) { + }else if (mul <= max_timebase *64 ) { div =PWM_CTRL_CFG_SUB_DIV1 ; timebase =DIV_ROUND_UP (mul,64 ); - }else if (mul <=MAX_TMBASE_STEPS *512 ) { + }else if (mul <= max_timebase *512 ) { div =PWM_CTRL_CFG_SUB_DIV0_DIV1 ; timebase =DIV_ROUND_UP (mul,512 ); - }else if (mul >MAX_TMBASE_STEPS *512 ) { + }else if (mul > max_timebase *512 ) {dev_err (chip->dev,"failed to configure timebase steps/divider value\n" );return -EINVAL ;
@@ -143,11 +169,27 @@ static const struct pwm_ops img_pwm_ops .owner = THIS_MODULE, }; +static const struct img_pwm_soc_data pistachio_pwm = { + .max_timebase =255 , +}; + +static const struct of_device_id img_pwm_of_match[] = { + { + .compatible ="img,pistachio-pwm" , + .data = &pistachio_pwm, + }, + { } +}; +MODULE_DEVICE_TABLE (of, img_pwm_of_match); +static int img_pwm_probe (struct platform_device *pdev) {int ret; +u64 val; +unsigned long clk_rate;struct resource *res;struct img_pwm_chip *pwm; +const struct of_device_id *of_dev_id; pwm =devm_kzalloc (&pdev->dev,sizeof (*pwm),GFP_KERNEL );if (!pwm)
@@ -160,6 +202,11 @@ static int img_pwm_probe(struct platformif (IS_ERR (pwm->base))return PTR_ERR (pwm->base); + of_dev_id =of_match_device (img_pwm_of_match, &pdev->dev); +if (!of_dev_id) +return -ENODEV ; + pwm->data = of_dev_id->data; + pwm->periph_regs =syscon_regmap_lookup_by_phandle (pdev->dev.of_node,"img,cr-periph" );if (IS_ERR (pwm->periph_regs))
@@ -189,6 +236,17 @@ static int img_pwm_probe(struct platform goto disable_sysclk; } + clk_rate =clk_get_rate (pwm->pwm_clk); + +/* The maximum input clock divider is 512 */ + val = (u64 )NSEC_PER_SEC *512 * pwm->data->max_timebase; +do_div (val, clk_rate); + pwm->max_period_ns = val; + + val = (u64 )NSEC_PER_SEC *MIN_TMBASE_STEPS ; +do_div (val, clk_rate); + pwm->min_period_ns = val; + pwm->chip.dev = &pdev->dev; pwm->chip.ops = &img_pwm_ops; pwm->chip.base =-1 ;
@@ -228,12 +286,6 @@ static int img_pwm_remove(struct platforreturn pwmchip_remove (&pwm_chip->chip); } -static const struct of_device_id img_pwm_of_match[] = { - { .compatible ="img,pistachio-pwm" , }, - { } -}; -MODULE_DEVICE_TABLE (of, img_pwm_of_match); -static struct platform_driver img_pwm_driver = { .driver = { .name ="img-pwm" ,
Greg Kroah-Hartman
maintainerPATCH 147/148 md: fix race when unfreezing sync_action
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: NeilBrown <[email protected]>
commit 56ccc1125bc141cf63927eda7febff4216dea2d3 upstream.
A recent change removed the need for locking around writing to "sync_action" (and various other places), but introduced a subtle race.
When e.g. setting 'reshape' on a 'frozen' array, the 'frozen' flag is cleared before 'reshape' is set, so the md thread can get in and start trying recovery - which isn't wanted.
So instead of clearing MD_RECOVERY_FROZEN for any command except 'frozen', only clear it when each specific command is parsed. This allows the handling of 'reshape' to clear the bit while a lock is held.
Also remove some places where we set MD_RECOVERY_NEEDED, as it is always set on non-error exit of the function.
--- drivers/md/md.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
drivers/md/md.c +8 -6
@@ -4138,12 +4138,12 @@ action_store(struct mddev *mddev, constif (!mddev->pers || !mddev->pers->sync_request)return -EINVAL ; -if (cmd_match (page,"frozen" )) -set_bit (MD_RECOVERY_FROZEN , &mddev->recovery); -else -clear_bit (MD_RECOVERY_FROZEN , &mddev->recovery);if (cmd_match (page,"idle" ) ||cmd_match (page,"frozen" )) { +if (cmd_match (page,"frozen" )) +set_bit (MD_RECOVERY_FROZEN , &mddev->recovery); +else +clear_bit (MD_RECOVERY_FROZEN , &mddev->recovery);flush_workqueue (md_misc_wq);if (mddev->sync_thread) {set_bit (MD_RECOVERY_INTR , &mddev->recovery);
@@ -4156,16 +4156,17 @@ action_store(struct mddev *mddev, const test_bit(MD_RECOVERY_NEEDED, &mddev->recovery))return -EBUSY ; else if (cmd_match(page, "resync")) - set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); + clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); else if (cmd_match(page, "recover")) { +clear_bit (MD_RECOVERY_FROZEN , &mddev->recovery);set_bit (MD_RECOVERY_RECOVER , &mddev->recovery); -set_bit (MD_RECOVERY_NEEDED , &mddev->recovery); } else if (cmd_match(page, "reshape")) {int err;if (mddev->pers->start_reshape ==NULL )return -EINVAL ; err =mddev_lock (mddev);if (!err) { +clear_bit (MD_RECOVERY_FROZEN , &mddev->recovery); err = mddev->pers->start_reshape (mddev);mddev_unlock (mddev); }
@@ -4177,6 +4178,7 @@ action_store(struct mddev *mddev, constset_bit (MD_RECOVERY_CHECK , &mddev->recovery); else if (!cmd_match(page, "repair"))return -EINVAL ; +clear_bit (MD_RECOVERY_FROZEN , &mddev->recovery);set_bit (MD_RECOVERY_REQUESTED , &mddev->recovery);set_bit (MD_RECOVERY_SYNC , &mddev->recovery); }
Greg Kroah-Hartman
maintainerPATCH 148/148 fs/binfmt_elf.c:load_elf_binary(): return -EINVAL on zero-length mappings
In reply to Greg Kroah-Hartman4.0-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrew Morton <[email protected]>
commit 2b1d3ae940acd11be44c6eced5873d47c2e00ffa upstream.
load_elf_binary() returns retval', not error'.
--- fs/binfmt_elf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/binfmt_elf.c +1 -1
@@ -928,7 +928,7 @@ static int load_elf_binary(struct linux_ total_size =total_mapping_size (elf_phdata, loc->elf_ex.e_phnum);if (!total_size) { - error = -EINVAL ; + retval = -EINVAL ; goto out_free_dentry; } }
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.0.5 release. There are 148 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri Jun 5 11:41:24 UTC 2015. Anything received after that time might be too late.
Quoted 8 lines
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.0.5-rc1.gzand the diffstat can be found below.
thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
-- Shuah
Signature · 5 lines
Shuah Khan Sr. Linux Kernel Developer Open Source Innovation Group Samsung Research America (Silicon Valley) [email protected] | (970) 217-8978
Greg Kroah-Hartman
maintainerQuoted 13 lines · Shuah Khan
Quoted 12 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.0.5 release. There are 148 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri Jun 5 11:41:24 UTC 2015. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.0.5-rc1.gzand the diffstat can be found below.
Quoted 6 lines
Quoted 4 lines
thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
Thanks for testing all 3 of these and letting me know.
greg k-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.0.5 release. There are 148 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri Jun 5 11:41:24 UTC 2015. Anything received after that time might be too late.
Build results:
total: 124 pass: 124 fail: 0 Qemu test results: total: 30 pass: 30 fail: 0
Details are available at http://server.roeck-us.net:8010/builders.
Guenter
Greg Kroah-Hartman
maintainerQuoted 9 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.0.5 release. There are 148 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri Jun 5 11:41:24 UTC 2015. Anything received after that time might be too late.
Quoted 6 lines
Build results:
total: 124 pass: 124 fail: 0 Qemu test results: total: 30 pass: 30 fail: 0Details are available at http://server.roeck-us.net:8010/builders.
Thanks for the testing and letting me know about all 3 of these.
greg k-h