5.4.134-rc1 review
Subsystems (3)
Greg Kroah-Hartman
maintainercover 5.4.134-rc1 review
This is the start of the stable review cycle for the 5.4.134 release. There are 149 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 Wed, 21 Jul 2021 14:47:42 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.134-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.4.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.4.134-rc1
Tong Zhang <[email protected]>
misc: alcor_pci: fix inverted branch condition
Dan Carpenter <[email protected]>
scsi: scsi_dh_alua: Fix signedness bug in alua_rtpg()
Martin Fäcknitz <[email protected]>
MIPS: vdso: Invalid GIC access through VDSO
Namhyung Kim <[email protected]>
perf report: Fix --task and --stat with pipe input
Randy Dunlap <[email protected]>
mips: disable branch profiling in boot/decompress.o
Arnd Bergmann <[email protected]>
mips: always link byteswap helpers into decompressor
Christophe JAILLET <[email protected]>
scsi: be2iscsi: Fix an error handling path in beiscsi_dev_probe()
Pali Rohár <[email protected]>
firmware: turris-mox-rwtm: fail probing when firmware does not support hwrng
Marek Behún <[email protected]>
firmware: turris-mox-rwtm: report failures better
Marek Behún <[email protected]>
firmware: turris-mox-rwtm: fix reply status decoding function
Niklas Söderlund <[email protected]>
thermal/drivers/rcar_gen3_thermal: Fix coefficient calculations
Christoph Niedermaier <[email protected]>
ARM: dts: imx6q-dhcom: Add gpios pinctrl for i2c bus recovery
Christoph Niedermaier <[email protected]>
ARM: dts: imx6q-dhcom: Fix ethernet plugin detection problems
Christoph Niedermaier <[email protected]>
ARM: dts: imx6q-dhcom: Fix ethernet reset time properties
Aswath Govindraju <[email protected]>
ARM: dts: am437x: align ti,pindir-d0-out-d1-in property with dt-shema
Aswath Govindraju <[email protected]>
ARM: dts: am335x: align ti,pindir-d0-out-d1-in property with dt-shema
Krzysztof Kozlowski <[email protected]>
memory: fsl_ifc: fix leak of private memory on probe failure
Krzysztof Kozlowski <[email protected]>
memory: fsl_ifc: fix leak of IO mapping on probe failure
Philipp Zabel <[email protected]>
reset: bail if try_module_get() fails
Rafał Miłecki <[email protected]>
ARM: dts: BCM5301X: Fixup SPI binding
Cristian Marussi <[email protected]>
firmware: arm_scmi: Reset Rx buffer to max size during async commands
Zhen Lei <[email protected]>
firmware: tegra: Fix error return code in tegra210_bpmp_init()
Petr Vorel <[email protected]>
arm64: dts: qcom: msm8994-angler: Fix gpio-reserved-ranges 85-88
Geert Uytterhoeven <[email protected]>
ARM: dts: r8a7779, marzen: Fix DU clock names
Valentine Barshak <[email protected]>
arm64: dts: renesas: v3msk: Fix memory size
Dan Carpenter <[email protected]>
rtc: fix snprintf() checking in is_rtc_hctosys()
Zhen Lei <[email protected]>
memory: pl353: Fix error return code in pl353_smc_probe()
Zou Wei <[email protected]>
reset: brcmstb: Add missing MODULE_DEVICE_TABLE
Krzysztof Kozlowski <[email protected]>
memory: atmel-ebi: add missing of_node_put for loop iteration
Krzysztof Kozlowski <[email protected]>
ARM: dts: exynos: fix PWM LED max brightness on Odroid XU4
Krzysztof Kozlowski <[email protected]>
ARM: dts: exynos: fix PWM LED max brightness on Odroid HC1
Krzysztof Kozlowski <[email protected]>
ARM: dts: exynos: fix PWM LED max brightness on Odroid XU/XU3
Krzysztof Kozlowski <[email protected]>
ARM: exynos: add missing of_node_put for loop iteration
Krzysztof Kozlowski <[email protected]>
reset: a10sr: add missing of_match_table reference
Corentin Labbe <[email protected]>
ARM: dts: gemini-rut1xx: remove duplicate ethernet node
Nathan Chancellor <[email protected]>
hexagon: use common DISCARDS macro
Trond Myklebust <[email protected]>
NFSv4/pNFS: Don't call _nfs4_pnfs_v3_ds_connect multiple times
Zhen Lei <[email protected]>
ALSA: isa: Fix error return code in snd_cmi8330_probe()
Maurizio Lombardi <[email protected]>
nvme-tcp: can't set sk_user_data without write_lock
Michael S. Tsirkin <[email protected]>
virtio_net: move tx vq operation under tx queue lock
Uwe Kleine-König <[email protected]>
pwm: imx1: Don't disable clocks at device remove time
Thomas Gleixner <[email protected]>
x86/fpu: Limit xstate copy size in xstateregs_set()
Sandor Bodo-Merle <[email protected]>
PCI: iproc: Support multi-MSI only on uniprocessor kernel
Sandor Bodo-Merle <[email protected]>
PCI: iproc: Fix multi-MSI base vector number allocation
Zhihao Cheng <[email protected]>
ubifs: Set/Clear I_LINKABLE under i_lock for whiteout inode
Gao Xiang <[email protected]>
nfs: fix acl memory leak of posix_acl_create()
Tao Ren <[email protected]>
watchdog: aspeed: fix hardware timeout calculation
Zhen Lei <[email protected]>
um: fix error return code in winch_tramp()
Zhen Lei <[email protected]>
um: fix error return code in slip_open()
Trond Myklebust <[email protected]>
NFSv4: Initialise connection to the server in nfs4_alloc_client()
Stephan Gerhold <[email protected]>
power: supply: rt5033_battery: Fix device tree enumeration
Krzysztof Wilczyński <[email protected]>
PCI/sysfs: Fix dsm_label_utf16s_to_utf8s() buffer overrun
Chao Yu <[email protected]>
f2fs: add MODULE_SOFTDEP to ensure crc32 is included in the initramfs
Chang S. Bae <[email protected]>
x86/signal: Detect and prevent an alternate signal stack overflow
Xie Yongji <[email protected]>
virtio_console: Assure used length from device is limited
Xie Yongji <[email protected]>
virtio_net: Fix error handling in virtnet_restore()
Xie Yongji <[email protected]>
virtio-blk: Fix memory leak among suspend/resume procedure
Hans de Goede <[email protected]>
ACPI: video: Add quirk for the Dell Vostro 3350
Liguang Zhang <[email protected]>
ACPI: AMBA: Fix resource name in /proc/iomem
Uwe Kleine-König <[email protected]>
pwm: tegra: Don't modify HW state in .remove callback
Zou Wei <[email protected]>
pwm: img: Fix PM reference leak in img_pwm_enable()
Zou Wei <[email protected]>
power: supply: ab8500: add missing MODULE_DEVICE_TABLE
Zou Wei <[email protected]>
power: supply: charger-manager: add missing MODULE_DEVICE_TABLE
Trond Myklebust <[email protected]>
NFS: nfs_find_open_context() may only select open files
Jeff Layton <[email protected]>
ceph: remove bogus checks and WARN_ONs from ceph_set_page_dirty
Mike Marshall <[email protected]>
orangefs: fix orangefs df output.
Zou Wei <[email protected]>
PCI: tegra: Add missing MODULE_DEVICE_TABLE
Thomas Gleixner <[email protected]>
x86/fpu: Return proper error codes from user access functions
Jan Kiszka <[email protected]>
watchdog: iTCO_wdt: Account for rebooting on second timeout
Stefan Eichenberger <[email protected]>
watchdog: imx_sc_wdt: fix pretimeout
Zou Wei <[email protected]>
watchdog: Fix possible use-after-free by calling del_timer_sync()
Zou Wei <[email protected]>
watchdog: sc520_wdt: Fix possible use-after-free in wdt_turnoff()
Zou Wei <[email protected]>
watchdog: Fix possible use-after-free in wdt_startup()
Logan Gunthorpe <[email protected]>
PCI/P2PDMA: Avoid pci_get_slot(), which may sleep
Nick Desaulniers <[email protected]>
ARM: 9087/1: kprobes: test-thumb: fix for LLVM_IAS=1
Bixuan Cui <[email protected]>
power: reset: gpio-poweroff: add missing MODULE_DEVICE_TABLE
Krzysztof Kozlowski <[email protected]>
power: supply: max17042: Do not enforce (incorrect) interrupt trigger type
Linus Walleij <[email protected]>
power: supply: ab8500: Avoid NULL pointers
Uwe Kleine-König <[email protected]>
pwm: spear: Don't modify HW state in .remove callback
Zou Wei <[email protected]>
power: supply: sc2731_charger: Add missing MODULE_DEVICE_TABLE
Zou Wei <[email protected]>
power: supply: sc27xx: Add missing MODULE_DEVICE_TABLE
Dimitri John Ledkov <[email protected]>
lib/decompress_unlz4.c: correctly handle zero-padding around initrds.
Dmitry Torokhov <[email protected]>
i2c: core: Disable client irq on reboot/shutdown
Alexander Shishkin <[email protected]>
intel_th: Wait until port is in reset before programming it
Fabio Aiuto <[email protected]>
staging: rtl8723bs: fix macro value for 2.4Ghz only device
Geoffrey D. Bennett <[email protected]>
ALSA: usb-audio: scarlett2: Fix 6i6 Gen 2 line out descriptions
Jiajun Cao <[email protected]>
ALSA: hda: Add IRQ check for platform_get_irq()
Uwe Kleine-König <[email protected]>
backlight: lm3630a: Fix return code of .update_status() callback
Pierre-Louis Bossart <[email protected]>
ASoC: Intel: kbl_da7219_max98357a: shrink platform_id below 20 characters
Benjamin Herrenschmidt <[email protected]>
powerpc/boot: Fixup device-tree on little endian
Yang Yingliang <[email protected]>
usb: gadget: hid: fix error return code in hid_bind()
Ruslan Bilovol <[email protected]>
usb: gadget: f_hid: fix endianness issue with descriptors
Geoffrey D. Bennett <[email protected]>
ALSA: usb-audio: scarlett2: Fix scarlett2_*_ctl_put() return values
Geoffrey D. Bennett <[email protected]>
ALSA: usb-audio: scarlett2: Fix data_mutex lock
Geoffrey D. Bennett <[email protected]>
ALSA: usb-audio: scarlett2: Fix 18i8 Gen 2 PCM Input count
Takashi Sakamoto <[email protected]>
ALSA: bebob: add support for ToneWeal FW66
Yizhuo Zhai <[email protected]>
Input: hideep - fix the uninitialized use in hideep_nvm_unlock()
Heiko Carstens <[email protected]>
s390/mem_detect: fix tprot() program check new psw handling
Heiko Carstens <[email protected]>
s390/mem_detect: fix diag260() program check new psw handling
Heiko Carstens <[email protected]>
s390/ipl_parm: fix program check new psw handling
Heiko Carstens <[email protected]>
s390/processor: always inline stap() and __load_psw_mask()
Zhen Lei <[email protected]>
ASoC: soc-core: Fix the error return code in snd_soc_of_parse_audio_routing()
Peter Robinson <[email protected]>
gpio: pca953x: Add support for the On Semi pca9655
Athira Rajeev <[email protected]>
selftests/powerpc: Fix "no_handler" EBB selftest
Yang Yingliang <[email protected]>
ALSA: ppc: fix error return code in snd_pmac_probe()
Srinivas Neeli <[email protected]>
gpio: zynq: Check return value of pm_runtime_get_sync
Xiyu Yang <[email protected]>
iommu/arm-smmu: Fix arm_smmu_device refcount leak in address translation
Xiyu Yang <[email protected]>
iommu/arm-smmu: Fix arm_smmu_device refcount leak when arm_smmu_rpm_get fails
Geoff Levand <[email protected]>
powerpc/ps3: Add dma_mask to ps3_dma_region
Takashi Iwai <[email protected]>
ALSA: sb: Fix potential double-free of CSP mixer elements
Po-Hsu Lin <[email protected]>
selftests: timers: rtcpie: skip test if default RTC device does not exist
Valentin Vidic <[email protected]>
s390/sclp_vt220: fix console name to match device
Daniel Mack <[email protected]>
serial: tty: uartlite: fix console setup
Yufen Yu <[email protected]>
ASoC: img: Fix PM reference leak in img_i2s_in_probe()
Tony Lindgren <[email protected]>
mfd: cpcap: Fix cpcap dmamask not set warnings
Zou Wei <[email protected]>
mfd: da9052/stmpe: Add and modify MODULE_DEVICE_TABLE
Mike Christie <[email protected]>
scsi: qedi: Fix null ref during abort handling
Mike Christie <[email protected]>
scsi: iscsi: Fix shost->max_id use
Mike Christie <[email protected]>
scsi: iscsi: Fix conn use after free during resets
Mike Christie <[email protected]>
scsi: iscsi: Add iscsi_cls_conn refcount helpers
Chandrakanth Patil <[email protected]>
scsi: megaraid_sas: Handle missing interrupts while re-enabling IRQs
Kashyap Desai <[email protected]>
scsi: megaraid_sas: Early detection of VD deletion through RaidMap update
Chandrakanth Patil <[email protected]>
scsi: megaraid_sas: Fix resource leak in case of probe failure
Jiapeng Chong <[email protected]>
fs/jfs: Fix missing error code in lmLogInit()
Hannes Reinecke <[email protected]>
scsi: scsi_dh_alua: Check for negative result value
Christophe JAILLET <[email protected]>
tty: serial: 8250: serial_cs: Fix a memory leak in error handling path
Yufen Yu <[email protected]>
ALSA: ac97: fix PM reference leak in ac97_bus_remove()
John Garry <[email protected]>
scsi: core: Cap scsi_host cmd_per_lun at can_queue
James Smart <[email protected]>
scsi: lpfc: Fix crash when lpfc_sli4_hba_setup() fails to initialize the SGLs
James Smart <[email protected]>
scsi: lpfc: Fix "Unexpected timeout" error in direct attach topology
Sergey Shtylyov <[email protected]>
scsi: hisi_sas: Propagate errors in interrupt_init_v1_hw()
Luiz Sampaio <[email protected]>
w1: ds2438: fixing bug that would always get page0
Takashi Sakamoto <[email protected]>
Revert "ALSA: bebob/oxfw: fix Kconfig entry for Mackie d.2 Pro"
Takashi Iwai <[email protected]>
ALSA: usx2y: Don't call free_pages_exact() with NULL address
Jonathan Cameron <[email protected]>
iio: magn: bmc150: Balance runtime pm + use pm_runtime_resume_and_get()
Jonathan Cameron <[email protected]>
iio: gyro: fxa21002c: Balance runtime pm + use pm_runtime_resume_and_get().
Tong Zhang <[email protected]>
misc: alcor_pci: fix null-ptr-deref when there is no PCI bridge
Lv Yunlong <[email protected]>
misc/libmasm/module: Fix two use after free in ibmasm_init_one
Sherry Sun <[email protected]>
tty: serial: fsl_lpuart: fix the potential risk of division or modulo by zero
Frederic Weisbecker <[email protected]>
srcu: Fix broken node geometry after early ssp init
Robin Gong <[email protected]>
dmaengine: fsl-qdma: check dma_set_mask return value
Yang Yingliang <[email protected]>
net: moxa: Use devm_platform_get_and_ioremap_resource()
Zhen Lei <[email protected]>
fbmem: Do not delete the mode that is still in use
Christian Brauner <[email protected]>
cgroup: verify that source is a string
Steven Rostedt (VMware) <[email protected]>
tracing: Do not reference char * as a string in histograms
Tyrel Datwyler <[email protected]>
scsi: core: Fix bad pointer dereference when ehandler kthread is invalid
Lai Jiangshan <[email protected]>
KVM: X86: Disable hardware breakpoints unconditionally before kvm_x86->run()
Sean Christopherson <[email protected]>
KVM: x86: Use guest MAXPHYADDR from CPUID.0x8000_0008 iff TDP is enabled
Kefeng Wang <[email protected]>
KVM: mmio: Fix use-after-free Read in kvm_vm_ioctl_unregister_coalesced_mmio
-------------
Diffstat:
Makefile | 4 +- arch/arm/boot/dts/am335x-cm-t335.dts | 2 +- arch/arm/boot/dts/am43x-epos-evm.dts | 4 +- arch/arm/boot/dts/bcm5301x.dtsi | 18 +-- arch/arm/boot/dts/exynos5422-odroidhc1.dts | 2 +- arch/arm/boot/dts/exynos5422-odroidxu4.dts | 2 +- arch/arm/boot/dts/exynos54xx-odroidxu-leds.dtsi | 4 +- arch/arm/boot/dts/gemini-rut1xx.dts | 12 -- arch/arm/boot/dts/imx6q-dhcom-som.dtsi | 41 ++++++- arch/arm/boot/dts/r8a7779-marzen.dts | 2 +- arch/arm/boot/dts/r8a7779.dtsi | 1 + arch/arm/mach-exynos/exynos.c | 2 + arch/arm/probes/kprobes/test-thumb.c | 10 +- .../arm64/boot/dts/qcom/msm8994-angler-rev-101.dts | 4 + arch/arm64/boot/dts/renesas/r8a77970-v3msk.dts | 2 +- arch/hexagon/kernel/vmlinux.lds.S | 7 +- arch/mips/boot/compressed/Makefile | 4 +- arch/mips/boot/compressed/decompress.c | 2 + arch/mips/include/asm/vdso/vdso.h | 2 +- arch/powerpc/boot/devtree.c | 59 +++++----- arch/powerpc/boot/ns16550.c | 9 +- arch/powerpc/include/asm/ps3.h | 2 + arch/powerpc/platforms/ps3/mm.c | 12 ++ arch/s390/boot/ipl_parm.c | 19 ++-- arch/s390/boot/mem_detect.c | 47 ++++---- arch/s390/include/asm/processor.h | 4 +- arch/s390/kernel/setup.c | 2 +- arch/um/drivers/chan_user.c | 3 +- arch/um/drivers/slip_user.c | 3 +- arch/x86/include/asm/fpu/internal.h | 19 ++-- arch/x86/kernel/fpu/regset.c | 2 +- arch/x86/kernel/signal.c | 24 +++- arch/x86/kvm/cpuid.c | 8 +- arch/x86/kvm/x86.c | 2 + drivers/acpi/acpi_amba.c | 1 + drivers/acpi/acpi_video.c | 9 ++ drivers/block/virtio_blk.c | 2 + drivers/char/virtio_console.c | 4 +- drivers/dma/fsl-qdma.c | 6 +- drivers/firmware/arm_scmi/driver.c | 4 + drivers/firmware/tegra/bpmp-tegra210.c | 2 +- drivers/firmware/turris-mox-rwtm.c | 53 +++++++-- drivers/gpio/gpio-pca953x.c | 1 + drivers/gpio/gpio-zynq.c | 5 +- drivers/hwtracing/intel_th/core.c | 17 +++ drivers/hwtracing/intel_th/gth.c | 16 +++ drivers/hwtracing/intel_th/intel_th.h | 3 + drivers/i2c/i2c-core-base.c | 3 + drivers/iio/gyro/fxas21002c_core.c | 11 +- drivers/iio/magnetometer/bmc150_magn.c | 10 +- drivers/input/touchscreen/hideep.c | 13 ++- drivers/iommu/arm-smmu.c | 10 +- drivers/memory/atmel-ebi.c | 4 +- drivers/memory/fsl_ifc.c | 8 +- drivers/memory/pl353-smc.c | 1 + drivers/mfd/da9052-i2c.c | 1 + drivers/mfd/motorola-cpcap.c | 4 + drivers/mfd/stmpe-i2c.c | 2 +- drivers/misc/cardreader/alcor_pci.c | 8 +- drivers/misc/ibmasm/module.c | 5 +- drivers/net/ethernet/moxa/moxart_ether.c | 4 + drivers/net/virtio_net.c | 27 ++++- drivers/nvme/target/tcp.c | 1 - drivers/pci/controller/pci-tegra.c | 1 + drivers/pci/controller/pcie-iproc-msi.c | 29 +++-- drivers/pci/p2pdma.c | 34 +++++- drivers/pci/pci-label.c | 2 +- drivers/power/reset/gpio-poweroff.c | 1 + drivers/power/supply/Kconfig | 3 +- drivers/power/supply/ab8500_btemp.c | 1 + drivers/power/supply/ab8500_charger.c | 19 +++- drivers/power/supply/ab8500_fg.c | 1 + drivers/power/supply/charger-manager.c | 1 + drivers/power/supply/max17042_battery.c | 2 +- drivers/power/supply/rt5033_battery.c | 7 ++ drivers/power/supply/sc2731_charger.c | 1 + drivers/power/supply/sc27xx_fuel_gauge.c | 1 + drivers/pwm/pwm-img.c | 2 +- drivers/pwm/pwm-imx1.c | 2 - drivers/pwm/pwm-spear.c | 4 - drivers/pwm/pwm-tegra.c | 13 --- drivers/reset/core.c | 5 +- drivers/reset/reset-a10sr.c | 1 + drivers/reset/reset-brcmstb.c | 1 + drivers/rtc/proc.c | 4 +- drivers/s390/char/sclp_vt220.c | 4 +- drivers/scsi/be2iscsi/be_main.c | 5 +- drivers/scsi/bnx2i/bnx2i_iscsi.c | 2 +- drivers/scsi/cxgbi/libcxgbi.c | 4 +- drivers/scsi/device_handler/scsi_dh_alua.c | 11 +- drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 12 +- drivers/scsi/hosts.c | 4 + drivers/scsi/libiscsi.c | 122 ++++++++++----------- drivers/scsi/lpfc/lpfc_els.c | 9 ++ drivers/scsi/lpfc/lpfc_sli.c | 5 +- drivers/scsi/megaraid/megaraid_sas.h | 12 ++ drivers/scsi/megaraid/megaraid_sas_base.c | 96 ++++++++++++++-- drivers/scsi/megaraid/megaraid_sas_fp.c | 6 +- drivers/scsi/megaraid/megaraid_sas_fusion.c | 10 +- drivers/scsi/qedi/qedi_fw.c | 2 +- drivers/scsi/qedi/qedi_main.c | 2 +- drivers/scsi/scsi_transport_iscsi.c | 12 ++ drivers/staging/rtl8723bs/hal/odm.h | 5 +- drivers/thermal/rcar_gen3_thermal.c | 2 +- drivers/tty/serial/8250/serial_cs.c | 11 +- drivers/tty/serial/fsl_lpuart.c | 3 + drivers/tty/serial/uartlite.c | 27 +---- drivers/usb/gadget/function/f_hid.c | 2 +- drivers/usb/gadget/legacy/hid.c | 4 +- drivers/video/backlight/lm3630a_bl.c | 12 +- drivers/video/fbdev/core/fbmem.c | 12 +- drivers/w1/slaves/w1_ds2438.c | 4 +- drivers/watchdog/aspeed_wdt.c | 2 +- drivers/watchdog/iTCO_wdt.c | 12 +- drivers/watchdog/imx_sc_wdt.c | 11 +- drivers/watchdog/lpc18xx_wdt.c | 2 +- drivers/watchdog/sbc60xxwdt.c | 2 +- drivers/watchdog/sc520_wdt.c | 2 +- drivers/watchdog/w83877f_wdt.c | 2 +- fs/ceph/addr.c | 10 +- fs/f2fs/super.c | 1 + fs/jfs/jfs_logmgr.c | 1 + fs/nfs/inode.c | 4 + fs/nfs/nfs3proc.c | 4 +- fs/nfs/nfs4client.c | 82 +++++++------- fs/nfs/pnfs_nfs.c | 52 ++++----- fs/orangefs/super.c | 2 +- fs/ubifs/dir.c | 7 ++ include/linux/nfs_fs.h | 1 + include/linux/sched/signal.h | 19 ++-- include/scsi/libiscsi.h | 11 +- include/scsi/scsi_transport_iscsi.h | 2 + kernel/cgroup/cgroup-v1.c | 2 + kernel/rcu/rcu.h | 2 + kernel/rcu/srcutree.c | 3 + kernel/rcu/tree.c | 16 ++- kernel/trace/trace_events_hist.c | 6 +- lib/decompress_unlz4.c | 8 ++ sound/ac97/bus.c | 2 +- sound/firewire/Kconfig | 5 +- sound/firewire/bebob/bebob.c | 5 +- sound/firewire/oxfw/oxfw.c | 2 +- sound/isa/cmi8330.c | 2 +- sound/isa/sb/sb16_csp.c | 8 +- sound/pci/hda/hda_tegra.c | 3 + sound/ppc/powermac.c | 6 +- sound/soc/img/img-i2s-in.c | 2 +- sound/soc/intel/boards/kbl_da7219_max98357a.c | 4 +- sound/soc/intel/common/soc-acpi-intel-kbl-match.c | 2 +- sound/soc/soc-core.c | 2 +- sound/usb/mixer_scarlett_gen2.c | 39 ++++--- sound/usb/usx2y/usb_stream.c | 7 +- tools/perf/builtin-report.c | 6 + .../selftests/powerpc/pmu/ebb/no_handler_test.c | 2 - tools/testing/selftests/timers/rtcpie.c | 10 +- virt/kvm/coalesced_mmio.c | 2 +- 156 files changed, 986 insertions(+), 499 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/149 KVM: mmio: Fix use-after-free Read in kvm_vm_ioctl_unregister_coalesced_mmio
From: Kefeng Wang <[email protected]>
commit 23fa2e46a5556f787ce2ea1a315d3ab93cced204 upstream.
BUG: KASAN: use-after-free in kvm_vm_ioctl_unregister_coalesced_mmio+0x7c/0x1ec arch/arm64/kvm/../../../virt/kvm/coalesced_mmio.c:183 Read of size 8 at addr ffff0000c03a2500 by task syz-executor083/4269 CPU: 5 PID: 4269 Comm: syz-executor083 Not tainted 5.10.0 #7 Hardware name: linux,dummy-virt (DT) Call trace: dump_backtrace+0x0/0x2d0 arch/arm64/kernel/stacktrace.c:132 show_stack+0x28/0x34 arch/arm64/kernel/stacktrace.c:196 __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0x110/0x164 lib/dump_stack.c:118 print_address_description+0x78/0x5c8 mm/kasan/report.c:385 __kasan_report mm/kasan/report.c:545 [inline] kasan_report+0x148/0x1e4 mm/kasan/report.c:562 check_memory_region_inline mm/kasan/generic.c:183 [inline] __asan_load8+0xb4/0xbc mm/kasan/generic.c:252 kvm_vm_ioctl_unregister_coalesced_mmio+0x7c/0x1ec arch/arm64/kvm/../../../virt/kvm/coalesced_mmio.c:183 kvm_vm_ioctl+0xe30/0x14c4 arch/arm64/kvm/../../../virt/kvm/kvm_main.c:3755 vfs_ioctl fs/ioctl.c:48 [inline] __do_sys_ioctl fs/ioctl.c:753 [inline] __se_sys_ioctl fs/ioctl.c:739 [inline] __arm64_sys_ioctl+0xf88/0x131c fs/ioctl.c:739 __invoke_syscall arch/arm64/kernel/syscall.c:36 [inline] invoke_syscall arch/arm64/kernel/syscall.c:48 [inline] el0_svc_common arch/arm64/kernel/syscall.c:158 [inline] do_el0_svc+0x120/0x290 arch/arm64/kernel/syscall.c:220 el0_svc+0x1c/0x28 arch/arm64/kernel/entry-common.c:367 el0_sync_handler+0x98/0x170 arch/arm64/kernel/entry-common.c:383 el0_sync+0x140/0x180 arch/arm64/kernel/entry.S:670 Allocated by task 4269: stack_trace_save+0x80/0xb8 kernel/stacktrace.c:121 kasan_save_stack mm/kasan/common.c:48 [inline] kasan_set_track mm/kasan/common.c:56 [inline] __kasan_kmalloc+0xdc/0x120 mm/kasan/common.c:461 kasan_kmalloc+0xc/0x14 mm/kasan/common.c:475 kmem_cache_alloc_trace include/linux/slab.h:450 [inline] kmalloc include/linux/slab.h:552 [inline] kzalloc include/linux/slab.h:664 [inline] kvm_vm_ioctl_register_coalesced_mmio+0x78/0x1cc arch/arm64/kvm/../../../virt/kvm/coalesced_mmio.c:146 kvm_vm_ioctl+0x7e8/0x14c4 arch/arm64/kvm/../../../virt/kvm/kvm_main.c:3746 vfs_ioctl fs/ioctl.c:48 [inline] __do_sys_ioctl fs/ioctl.c:753 [inline] __se_sys_ioctl fs/ioctl.c:739 [inline] __arm64_sys_ioctl+0xf88/0x131c fs/ioctl.c:739 __invoke_syscall arch/arm64/kernel/syscall.c:36 [inline] invoke_syscall arch/arm64/kernel/syscall.c:48 [inline] el0_svc_common arch/arm64/kernel/syscall.c:158 [inline] do_el0_svc+0x120/0x290 arch/arm64/kernel/syscall.c:220 el0_svc+0x1c/0x28 arch/arm64/kernel/entry-common.c:367 el0_sync_handler+0x98/0x170 arch/arm64/kernel/entry-common.c:383 el0_sync+0x140/0x180 arch/arm64/kernel/entry.S:670 Freed by task 4269: stack_trace_save+0x80/0xb8 kernel/stacktrace.c:121 kasan_save_stack mm/kasan/common.c:48 [inline] kasan_set_track+0x38/0x6c mm/kasan/common.c:56 kasan_set_free_info+0x20/0x40 mm/kasan/generic.c:355 __kasan_slab_free+0x124/0x150 mm/kasan/common.c:422 kasan_slab_free+0x10/0x1c mm/kasan/common.c:431 slab_free_hook mm/slub.c:1544 [inline] slab_free_freelist_hook mm/slub.c:1577 [inline] slab_free mm/slub.c:3142 [inline] kfree+0x104/0x38c mm/slub.c:4124 coalesced_mmio_destructor+0x94/0xa4 arch/arm64/kvm/../../../virt/kvm/coalesced_mmio.c:102 kvm_iodevice_destructor include/kvm/iodev.h:61 [inline] kvm_io_bus_unregister_dev+0x248/0x280 arch/arm64/kvm/../../../virt/kvm/kvm_main.c:4374 kvm_vm_ioctl_unregister_coalesced_mmio+0x158/0x1ec arch/arm64/kvm/../../../virt/kvm/coalesced_mmio.c:186 kvm_vm_ioctl+0xe30/0x14c4 arch/arm64/kvm/../../../virt/kvm/kvm_main.c:3755 vfs_ioctl fs/ioctl.c:48 [inline] __do_sys_ioctl fs/ioctl.c:753 [inline] __se_sys_ioctl fs/ioctl.c:739 [inline] __arm64_sys_ioctl+0xf88/0x131c fs/ioctl.c:739 __invoke_syscall arch/arm64/kernel/syscall.c:36 [inline] invoke_syscall arch/arm64/kernel/syscall.c:48 [inline] el0_svc_common arch/arm64/kernel/syscall.c:158 [inline] do_el0_svc+0x120/0x290 arch/arm64/kernel/syscall.c:220 el0_svc+0x1c/0x28 arch/arm64/kernel/entry-common.c:367 el0_sync_handler+0x98/0x170 arch/arm64/kernel/entry-common.c:383 el0_sync+0x140/0x180 arch/arm64/kernel/entry.S:670
If kvm_io_bus_unregister_dev() return -ENOMEM, we already call kvm_iodevice_destructor() inside this function to delete 'struct kvm_coalesced_mmio_dev *dev' from list and free the dev, but kvm_iodevice_destructor() is called again, it will lead the above issue.
Let's check the the return value of kvm_io_bus_unregister_dev(), only call kvm_iodevice_destructor() if the return value is 0.
Message-Id: <[email protected]>
--- virt/kvm/coalesced_mmio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
virt/kvm/coalesced_mmio.c +1 -1
@@ -190,7 +190,6 @@ int kvm_vm_ioctl_unregister_coalesced_mm coalesced_mmio_in_range(dev, zone->addr, zone->size)) { r =kvm_io_bus_unregister_dev (kvm, zone->pio ?KVM_PIO_BUS :KVM_MMIO_BUS , &dev->dev); -kvm_iodevice_destructor (&dev->dev);/* * On failure, unregister destroys all devices on the
@@ -200,6 +199,7 @@ int kvm_vm_ioctl_unregister_coalesced_mm*/ if (r)break ; +kvm_iodevice_destructor (&dev->dev); } }
Greg Kroah-Hartman
maintainerPATCH 2/149 KVM: x86: Use guest MAXPHYADDR from CPUID.0x8000_0008 iff TDP is enabled
In reply to Greg Kroah-HartmanFrom: Sean Christopherson <[email protected]>
commit 4bf48e3c0aafd32b960d341c4925b48f416f14a5 upstream.
Ignore the guest MAXPHYADDR reported by CPUID.0x8000_0008 if TDP, i.e. NPT, is disabled, and instead use the host's MAXPHYADDR. Per AMD'S APM:
Maximum guest physical address size in bits. This number applies only to guests using nested paging. When this field is zero, refer to the PhysAddrSize field for the maximum guest physical address size.
Message-Id: <[email protected]>
--- arch/x86/kvm/cpuid.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
arch/x86/kvm/cpuid.c +7 -1
@@ -745,8 +745,14 @@ static inline int __do_cpuid_func(structunsigned virt_as =max ((entry->eax >>8 ) &0xff ,48U );unsigned phys_as = entry->eax &0xff ; -if (!g_phys_as) +/* +* Use bare metal's MAXPHADDR if the CPU doesn't report guest +* MAXPHYADDR separately, or if TDP (NPT) is disabled, as the +* guest version "applies only to guests using nested paging". +*/ +if (!g_phys_as || !tdp_enabled) g_phys_as = phys_as; + entry->eax = g_phys_as | (virt_as <<8 ); entry->edx =0 ; entry->ebx &= kvm_cpuid_8000_0008_ebx_x86_features;
Greg Kroah-Hartman
maintainerPATCH 3/149 KVM: X86: Disable hardware breakpoints unconditionally before kvm_x86->run()
In reply to Greg Kroah-HartmanFrom: Lai Jiangshan <[email protected]>
commit f85d40160691881a17a397c448d799dfc90987ba upstream.
When the host is using debug registers but the guest is not using them nor is the guest in guest-debug state, the kvm code does not reset the host debug registers before kvm_x86->run(). Rather, it relies on the hardware vmentry instruction to automatically reset the dr7 registers which ensures that the host breakpoints do not affect the guest.
This however violates the non-instrumentable nature around VM entry and exit; for example, when a host breakpoint is set on vcpu->arch.cr2,
Another issue is consistency. When the guest debug registers are active, the host breakpoints are reset before kvm_x86->run(). But when the guest debug registers are inactive, the host breakpoints are delayed to be disabled. The host tracing tools may see different results depending on what the guest is doing.
To fix the problems, we clear %db7 unconditionally before kvm_x86->run() if the host has set any breakpoints, no matter if the guest is using them or not.
Message-Id: <[email protected]>
--- arch/x86/kvm/x86.c | 2 ++ 1 file changed, 2 insertions(+)
arch/x86/kvm/x86.c +2 -0
@@ -8271,6 +8271,8 @@ static int vcpu_enter_guest(struct kvm_vset_debugreg (vcpu->arch.eff_db[3 ],3 );set_debugreg (vcpu->arch.dr6,6 ); vcpu->arch.switch_db_regs &= ~KVM_DEBUGREG_RELOAD ; + }else if (unlikely (hw_breakpoint_active ())) { +set_debugreg (0 ,7 ); } kvm_x86_ops->run (vcpu);
Greg Kroah-Hartman
maintainerPATCH 4/149 scsi: core: Fix bad pointer dereference when ehandler kthread is invalid
In reply to Greg Kroah-HartmanFrom: Tyrel Datwyler <[email protected]>
commit 93aa71ad7379900e61c8adff6a710a4c18c7c99b upstream.
Commit 66a834d09293 ("scsi: core: Fix error handling of scsi_host_alloc()") changed the allocation logic to call put_device() to perform host cleanup with the assumption that IDA removal and stopping the kthread would properly be performed in scsi_host_dev_release(). However, in the unlikely case that the error handler thread fails to spawn, shost->ehandler is set to ERR_PTR(-ENOMEM).
The error handler cleanup code in scsi_host_dev_release() will call kthread_stop() if shost->ehandler != NULL which will always be the case whether the kthread was successfully spawned or not. In the case that it failed to spawn this has the nasty side effect of trying to dereference an invalid pointer when kthread_stop() is called. The following splat provides an example of this behavior in the wild:
scsi host11: error handler thread failed to spawn, error = -4 Kernel attempted to read user page (10c) - exploit attempt? (uid: 0)
BUG: Kernel NULL pointer dereference on read at 0x0000010c Faulting instruction address: 0xc00000000818e9a8 Oops: Kernel access of bad area, sig: 11 [#1] LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries Modules linked in: ibmvscsi(+) scsi_transport_srp dm_multipath dm_mirror dm_region hash dm_log dm_mod fuse overlay squashfs loop CPU: 12 PID: 274 Comm: systemd-udevd Not tainted 5.13.0-rc7 #1 NIP: c00000000818e9a8 LR: c0000000089846e8 CTR: 0000000000007ee8 REGS: c000000037d12ea0 TRAP: 0300 Not tainted (5.13.0-rc7) MSR: 800000000280b033 <SF,VEC,VSX,EE,FP,ME,IR,DR,RI,LE> CR: 28228228
XER: 20040001
CFAR: c0000000089846e4 DAR: 000000000000010c DSISR: 40000000 IRQMASK: 0
GPR00: c0000000089846e8 c000000037d13140 c000000009cc1100 fffffffffffffffc
GPR04: 0000000000000001 0000000000000000 0000000000000000 c000000037dc0000
GPR08: 0000000000000000 c000000037dc0000 0000000000000001 00000000fffff7ff
GPR12: 0000000000008000 c00000000a049000 c000000037d13d00 000000011134d5a0
GPR16: 0000000000001740 c0080000190d0000 c0080000190d1740 c000000009129288
GPR20: c000000037d13bc0 0000000000000001 c000000037d13bc0 c0080000190b7898
GPR24: c0080000190b7708 0000000000000000 c000000033bb2c48 0000000000000000
GPR28: c000000046b28280 0000000000000000 000000000000010c fffffffffffffffc NIP [c00000000818e9a8] kthread_stop+0x38/0x230
LR [c0000000089846e8] scsi_host_dev_release+0x98/0x160
Call Trace:
[c000000033bb2c48] 0xc000000033bb2c48 (unreliable) [c0000000089846e8] scsi_host_dev_release+0x98/0x160 [c00000000891e960] device_release+0x60/0x100 [c0000000087e55c4] kobject_release+0x84/0x210 [c00000000891ec78] put_device+0x28/0x40 [c000000008984ea4] scsi_host_alloc+0x314/0x430 [c0080000190b38bc] ibmvscsi_probe+0x54/0xad0 [ibmvscsi] [c000000008110104] vio_bus_probe+0xa4/0x4b0 [c00000000892a860] really_probe+0x140/0x680 [c00000000892aefc] driver_probe_device+0x15c/0x200 [c00000000892b63c] device_driver_attach+0xcc/0xe0 [c00000000892b740] __driver_attach+0xf0/0x200 [c000000008926f28] bus_for_each_dev+0xa8/0x130 [c000000008929ce4] driver_attach+0x34/0x50 [c000000008928fc0] bus_add_driver+0x1b0/0x300 [c00000000892c798] driver_register+0x98/0x1a0 [c00000000810eb60] __vio_register_driver+0x80/0xe0 [c0080000190b4a30] ibmvscsi_module_init+0x9c/0xdc [ibmvscsi] [c0000000080121d0] do_one_initcall+0x60/0x2d0 [c000000008261abc] do_init_module+0x7c/0x320 [c000000008265700] load_module+0x2350/0x25b0 [c000000008265cb4] __do_sys_finit_module+0xd4/0x160 [c000000008031110] system_call_exception+0x150/0x2d0 [c00000000800d35c] system_call_common+0xec/0x278
Fix this be nulling shost->ehandler when the kthread fails to spawn.
--- drivers/scsi/hosts.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/hosts.c +1 -0
@@ -486,6 +486,7 @@ struct Scsi_Host *scsi_host_alloc(structshost_printk (KERN_WARNING , shost,"error handler thread failed to spawn, error = %ld\n" ,PTR_ERR (shost->ehandler)); + shost->ehandler =NULL ; goto fail; }
Greg Kroah-Hartman
maintainerPATCH 5/149 tracing: Do not reference char * as a string in histograms
In reply to Greg Kroah-HartmanFrom: Steven Rostedt (VMware) <[email protected]>
commit 704adfb5a9978462cd861f170201ae2b5e3d3a80 upstream.
The histogram logic was allowing events with char * pointers to be used as normal strings. But it was easy to crash the kernel with:
# echo 'hist:keys=filename' > events/syscalls/sys_enter_openat/trigger
And open some files, and boom!
BUG: unable to handle page fault for address: 00007f2ced0c3280 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 1173fa067 P4D 1173fa067 PUD 1171b6067 PMD 1171dd067 PTE 0 Oops: 0000 [#1] PREEMPT SMP CPU: 6 PID: 1810 Comm: cat Not tainted 5.13.0-rc5-test+ #61 Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v03.03 07/14/2016 RIP: 0010:strlen+0x0/0x20 Code: f6 82 80 2a 0b a9 20 74 11 0f b6 50 01 48 83 c0 01 f6 82 80 2a 0b
a9 20 75 ef c3 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 <80> 3f 00 74 10 48 89 f8 48 83 c0 01 80 38 00 75 f7 48 29 f8 c3
RSP: 0018:ffffbdbf81567b50 EFLAGS: 00010246
RAX: 0000000000000003 RBX: ffff93815cdb3800 RCX: ffff9382401a22d0
RDX: 0000000000000100 RSI: 0000000000000000 RDI: 00007f2ced0c3280
RBP: 0000000000000100 R08: ffff9382409ff074 R09: ffffbdbf81567c98
R10: ffff9382409ff074 R11: 0000000000000000 R12: ffff9382409ff074
R13: 0000000000000001 R14: ffff93815a744f00 R15: 00007f2ced0c3280
FS: 00007f2ced0f8580(0000) GS:ffff93825a800000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f2ced0c3280 CR3: 0000000107069005 CR4: 00000000001706e0
Call Trace: event_hist_trigger+0x463/0x5f0 ? find_held_lock+0x32/0x90 ? sched_clock_cpu+0xe/0xd0 ? lock_release+0x155/0x440 ? kernel_init_free_pages+0x6d/0x90 ? preempt_count_sub+0x9b/0xd0 ? kernel_init_free_pages+0x6d/0x90 ? get_page_from_freelist+0x12c4/0x1680 ? __rb_reserve_next+0xe5/0x460 ? ring_buffer_lock_reserve+0x12a/0x3f0 event_triggers_call+0x52/0xe0 ftrace_syscall_enter+0x264/0x2c0 syscall_trace_enter.constprop.0+0x1ee/0x210 do_syscall_64+0x1c/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xae
Where it triggered a fault on strlen(key) where key was the filename.
The reason is that filename is a char * to user space, and the histogram code just blindly dereferenced it, with obvious bad results.
I originally tried to use strncpy_from_user/kernel_nofault() but found that there's other places that its dereferenced and not worth the effort.
Just do not allow "char *" to act like strings.
--- kernel/trace/trace_events_hist.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
kernel/trace/trace_events_hist.c +3 -3
@@ -2571,7 +2571,9 @@ static struct hist_field *create_hist_fiif (WARN_ON_ONCE (!field)) goto out; -if (is_string_field (field)) { +/* Pointers to strings are just pointers and dangerous to dereference */ +if (is_string_field (field) && + (field->filter_type !=FILTER_PTR_STRING )) { flags |=HIST_FIELD_FL_STRING ; hist_field->size =MAX_FILTER_STR_VAL ;
@@ -5326,8 +5328,6 @@ static inline void add_to_key(char *comp field = key_field->field;if (field->filter_type ==FILTER_DYN_STRING ) size = *(u32 *)(rec + field->offset) >>16 ; -else if (field->filter_type ==FILTER_PTR_STRING ) - size =strlen (key);else if (field->filter_type ==FILTER_STATIC_STRING ) size = field->size;
Greg Kroah-Hartman
maintainerPATCH 6/149 cgroup: verify that source is a string
In reply to Greg Kroah-HartmanFrom: Christian Brauner <[email protected]>
commit 3b0462726e7ef281c35a7a4ae33e93ee2bc9975b upstream.
The following sequence can be used to trigger a UAF:
int fscontext_fd = fsopen("cgroup");
int fd_null = open("/dev/null, O_RDONLY);
int fsconfig(fscontext_fd, FSCONFIG_SET_FD, "source", fd_null);
close_range(3, ~0U, 0);The cgroup v1 specific fs parser expects a string for the "source" parameter. However, it is perfectly legitimate to e.g. specify a file descriptor for the "source" parameter. The fs parser doesn't know what a filesystem allows there. So it's a bug to assume that "source" is always of type fs_value_is_string when it can reasonably also be fs_value_is_file.
This assumption in the cgroup code causes a UAF because struct fs_parameter uses a union for the actual value. Access to that union is guarded by the param->type member. Since the cgroup paramter parser didn't check param->type but unconditionally moved param->string into fc->source a close on the fscontext_fd would trigger a UAF during put_fs_context() which frees fc->source thereby freeing the file stashed in param->file causing a UAF during a close of the fd_null.
Fix this by verifying that param->type is actually a string and report an error if not.
In follow up patches I'll add a new generic helper that can be used here and by other filesystems instead of this error-prone copy-pasta fix. But fixing it in here first makes backporting a it to stable a lot easier.
--- kernel/cgroup/cgroup-v1.c | 2 ++ 1 file changed, 2 insertions(+)
kernel/cgroup/cgroup-v1.c +2 -0
@@ -918,6 +918,8 @@ int cgroup1_parse_param(struct fs_contex opt =fs_parse (fc, &cgroup1_fs_parameters, param, &result);if (opt == -ENOPARAM ) {if (strcmp (param->key,"source" ) ==0 ) { +if (param->type != fs_value_is_string) +return invalf (fc,"Non-string source" );if (fc->source)return invalf (fc,"Multiple sources not supported" ); fc->source = param->string;
Greg Kroah-Hartman
maintainerPATCH 7/149 fbmem: Do not delete the mode that is still in use
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
commit 0af778269a522c988ef0b4188556aba97fb420cc upstream.
The execution of fb_delete_videomode() is not based on the result of the previous fbcon_mode_deleted(). As a result, the mode is directly deleted, regardless of whether it is still in use, which may cause UAF.
==================================================================
BUG: KASAN: use-after-free in fb_mode_is_equal+0x36e/0x5e0 \ drivers/video/fbdev/core/modedb.c:924 Read of size 4 at addr ffff88807e0ddb1c by task syz-executor.0/18962 CPU: 2 PID: 18962 Comm: syz-executor.0 Not tainted 5.10.45-rc1+ #3 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ... Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0x137/0x1be lib/dump_stack.c:118 print_address_description+0x6c/0x640 mm/kasan/report.c:385 __kasan_report mm/kasan/report.c:545 [inline] kasan_report+0x13d/0x1e0 mm/kasan/report.c:562 fb_mode_is_equal+0x36e/0x5e0 drivers/video/fbdev/core/modedb.c:924 fbcon_mode_deleted+0x16a/0x220 drivers/video/fbdev/core/fbcon.c:2746 fb_set_var+0x1e1/0xdb0 drivers/video/fbdev/core/fbmem.c:975 do_fb_ioctl+0x4d9/0x6e0 drivers/video/fbdev/core/fbmem.c:1108 vfs_ioctl fs/ioctl.c:48 [inline] __do_sys_ioctl fs/ioctl.c:753 [inline] __se_sys_ioctl+0xfb/0x170 fs/ioctl.c:739 do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46 entry_SYSCALL_64_after_hwframe+0x44/0xa9 Freed by task 18960: kasan_save_stack mm/kasan/common.c:48 [inline] kasan_set_track+0x3d/0x70 mm/kasan/common.c:56 kasan_set_free_info+0x17/0x30 mm/kasan/generic.c:355 __kasan_slab_free+0x108/0x140 mm/kasan/common.c:422 slab_free_hook mm/slub.c:1541 [inline] slab_free_freelist_hook+0xd6/0x1a0 mm/slub.c:1574 slab_free mm/slub.c:3139 [inline] kfree+0xca/0x3d0 mm/slub.c:4121 fb_delete_videomode+0x56a/0x820 drivers/video/fbdev/core/modedb.c:1104 fb_set_var+0x1f3/0xdb0 drivers/video/fbdev/core/fbmem.c:978 do_fb_ioctl+0x4d9/0x6e0 drivers/video/fbdev/core/fbmem.c:1108 vfs_ioctl fs/ioctl.c:48 [inline] __do_sys_ioctl fs/ioctl.c:753 [inline] __se_sys_ioctl+0xfb/0x170 fs/ioctl.c:739 do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46 entry_SYSCALL_64_after_hwframe+0x44/0xa9
--- drivers/video/fbdev/core/fbmem.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
drivers/video/fbdev/core/fbmem.c +5 -7
@@ -965,13 +965,11 @@ fb_set_var(struct fb_info *info, structfb_var_to_videomode (&mode2, &info->var);/* make sure we don't delete the videomode of current var */ ret =fb_mode_is_equal (&mode1, &mode2); - -if (!ret) -fbcon_mode_deleted (info, &mode1); - -if (!ret) -fb_delete_videomode (&mode1, &info->modelist); - +if (!ret) { + ret =fbcon_mode_deleted (info, &mode1); +if (!ret) +fb_delete_videomode (&mode1, &info->modelist); + }return ret ? -EINVAL :0 ; }
Greg Kroah-Hartman
maintainerPATCH 8/149 net: moxa: Use devm_platform_get_and_ioremap_resource()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
commit 35cba15a504bf4f585bb9d78f47b22b28a1a06b2 upstream.
Use devm_platform_get_and_ioremap_resource() to simplify code and avoid a null-ptr-deref by checking 'res' in it.
[yyl: since devm_platform_get_and_ioremap_resource() is introduced
in linux-5.7, so just check the return value after calling platform_get_resource()]
--- drivers/net/ethernet/moxa/moxart_ether.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/net/ethernet/moxa/moxart_ether.c +4 -0
@@ -481,6 +481,10 @@ static int moxart_mac_probe(struct platf priv->pdev = pdev; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!res) { + ret = -EINVAL ; + goto init_fail; + } ndev->base_addr = res->start; priv->base =devm_ioremap_resource (p_dev, res);if (IS_ERR (priv->base)) {
Greg Kroah-Hartman
maintainerPATCH 9/149 dmaengine: fsl-qdma: check dma_set_mask return value
In reply to Greg Kroah-HartmanFrom: Robin Gong <[email protected]>
[ Upstream commit f0c07993af0acf5545d5c1445798846565f4f147 ]
For fix below warning reported by static code analysis tool like Coverity from Synopsys:
Addresses-Coverity-ID: 12285639 ("Unchecked return value")
--- drivers/dma/fsl-qdma.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/dma/fsl-qdma.c +5 -1
@@ -1184,7 +1184,11 @@ static int fsl_qdma_probe(struct platform_device *pdev) fsl_qdma->dma_dev.device_synchronize = fsl_qdma_synchronize; fsl_qdma->dma_dev.device_terminate_all = fsl_qdma_terminate_all; -dma_set_mask (&pdev->dev,DMA_BIT_MASK (40 )); + ret =dma_set_mask (&pdev->dev,DMA_BIT_MASK (40 )); +if (ret) { +dev_err (&pdev->dev,"dma_set_mask failure.\n" ); +return ret; + }platform_set_drvdata (pdev, fsl_qdma);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 10/149 srcu: Fix broken node geometry after early ssp init
In reply to Greg Kroah-HartmanFrom: Frederic Weisbecker <[email protected]>
[ Upstream commit b5befe842e6612cf894cf4a199924ee872d8b7d8 ]
An srcu_struct structure that is initialized before rcu_init_geometry() will have its srcu_node hierarchy based on CONFIG_NR_CPUS. Once rcu_init_geometry() is called, this hierarchy is compressed as needed for the actual maximum number of CPUs for this system.
Later on, that srcu_struct structure is confused, sometimes referring to its initial CONFIG_NR_CPUS-based hierarchy, and sometimes instead to the new num_possible_cpus() hierarchy. For example, each of its ->mynode fields continues to reference the original leaf rcu_node structures, some of which might no longer exist. On the other hand, srcu_for_each_node_breadth_first() traverses to the new node hierarchy.
There are at least two bad possible outcomes to this:
1) a) A callback enqueued early on an srcu_data structure (call it
*sdp) is recorded pending on sdp->mynode->srcu_data_have_cbs in
srcu_funnel_gp_start() with sdp->mynode pointing to a deep leaf
(say 3 levels). b) The grace period ends after rcu_init_geometry() shrinks the nodes level to a single one. srcu_gp_end() walks through the new srcu_node hierarchy without ever reaching the old leaves so the callback is never executed.
This is easily reproduced on an 8 CPUs machine with CONFIG_NR_CPUS >= 32 and "rcupdate.rcu_self_test=1". The srcu_barrier() after early tests verification never completes and the boot hangs:
[ 5413.141029] INFO: task swapper/0:1 blocked for more than 4915 seconds. [ 5413.147564] Not tainted 5.12.0-rc4+ #28 [ 5413.151927] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 5413.159753] task:swapper/0 state:D stack: 0 pid: 1 ppid: 0 flags:0x00004000 [ 5413.168099] Call Trace: [ 5413.170555] __schedule+0x36c/0x930 [ 5413.174057] ? wait_for_completion+0x88/0x110 [ 5413.178423] schedule+0x46/0xf0 [ 5413.181575] schedule_timeout+0x284/0x380 [ 5413.185591] ? wait_for_completion+0x88/0x110 [ 5413.189957] ? mark_held_locks+0x61/0x80 [ 5413.193882] ? mark_held_locks+0x61/0x80 [ 5413.197809] ? _raw_spin_unlock_irq+0x24/0x50 [ 5413.202173] ? wait_for_completion+0x88/0x110 [ 5413.206535] wait_for_completion+0xb4/0x110 [ 5413.210724] ? srcu_torture_stats_print+0x110/0x110 [ 5413.215610] srcu_barrier+0x187/0x200 [ 5413.219277] ? rcu_tasks_verify_self_tests+0x50/0x50 [ 5413.224244] ? rdinit_setup+0x2b/0x2b [ 5413.227907] rcu_verify_early_boot_tests+0x2d/0x40 [ 5413.232700] do_one_initcall+0x63/0x310 [ 5413.236541] ? rdinit_setup+0x2b/0x2b [ 5413.240207] ? rcu_read_lock_sched_held+0x52/0x80 [ 5413.244912] kernel_init_freeable+0x253/0x28f [ 5413.249273] ? rest_init+0x250/0x250 [ 5413.252846] kernel_init+0xa/0x110 [ 5413.256257] ret_from_fork+0x22/0x30
2) An srcu_struct structure that is initialized before rcu_init_geometry() and used afterward will always have stale rdp->mynode references, resulting in callbacks to be missed in srcu_gp_end(), just like in the previous scenario.
This commit therefore causes init_srcu_struct_nodes to initialize the geometry, if needed. This ensures that the srcu_node hierarchy is properly built and distributed from the get-go.
--- kernel/rcu/rcu.h | 2 ++ kernel/rcu/srcutree.c | 3 +++ kernel/rcu/tree.c | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-)
kernel/rcu/rcu.h +2 -0
@@ -316,6 +316,8 @@ static inline void rcu_init_levelspread(int *levelspread, const int *levelcnt) } } +extern void rcu_init_geometry (void ); +/* Returns a pointer to the first leaf rcu_node structure. */ #define rcu_first_leaf_node () (rcu_state.level[rcu_num_lvls - 1])
kernel/rcu/srcutree.c +3 -0
@@ -90,6 +90,9 @@ static void init_srcu_struct_nodes(struct srcu_struct *ssp, bool is_static)struct srcu_node *snp;struct srcu_node *snp_first; +/* Initialize geometry if it has not already been initialized. */ +rcu_init_geometry (); +/* Work out the overall tree geometry. */ ssp->level[0 ] = &ssp->node[0 ];for (i =1 ; i < rcu_num_lvls; i++)
kernel/rcu/tree.c +15 -1
@@ -3425,11 +3425,25 @@ static void __init rcu_init_one(void)* replace the definitions in tree.h because those are needed to size * the ->node array in the rcu_state structure. */ -static void __init rcu_init_geometry (void ) +void rcu_init_geometry (void ) {ulong d;int i; +static unsigned long old_nr_cpu_ids;int rcu_capacity[RCU_NUM_LVLS ]; +static bool initialized; + +if (initialized) { +/* +* Warn if setup_nr_cpu_ids() had not yet been invoked, +* unless nr_cpus_ids == NR_CPUS, in which case who cares? +*/ +WARN_ON_ONCE (old_nr_cpu_ids != nr_cpu_ids); +return ; + } + + old_nr_cpu_ids = nr_cpu_ids; + initialized = true;/* * Initialize any unspecified boot parameters.
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 11/149 tty: serial: fsl_lpuart: fix the potential risk of division or modulo by zero
In reply to Greg Kroah-HartmanFrom: Sherry Sun <[email protected]>
[ Upstream commit fcb10ee27fb91b25b68d7745db9817ecea9f1038 ]
We should be very careful about the register values that will be used for division or modulo operations, althrough the possibility that the UARTBAUD register value is zero is very low, but we had better to deal with the "bad data" of hardware in advance to avoid division or modulo by zero leading to undefined kernel behavior.
--- drivers/tty/serial/fsl_lpuart.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/tty/serial/fsl_lpuart.c +3 -0
@@ -2253,6 +2253,9 @@ lpuart32_console_get_options(struct lpuart_port *sport, int *baud, bd =lpuart32_read (&sport->port,UARTBAUD ); bd &=UARTBAUD_SBR_MASK ; +if (!bd) +return ; + sbr = bd; uartclk =lpuart_get_baud_clk_rate (sport);/*
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 12/149 misc/libmasm/module: Fix two use after free in ibmasm_init_one
In reply to Greg Kroah-HartmanFrom: Lv Yunlong <[email protected]>
[ Upstream commit 7272b591c4cb9327c43443f67b8fbae7657dd9ae ]
In ibmasm_init_one, it calls ibmasm_init_remote_input_dev(). Inside ibmasm_init_remote_input_dev, mouse_dev and keybd_dev are allocated by input_allocate_device(), and assigned to sp->remote.mouse_dev and sp->remote.keybd_dev respectively.
In the err_free_devices error branch of ibmasm_init_one, mouse_dev and keybd_dev are freed by input_free_device(), and return error. Then the execution runs into error_send_message error branch of ibmasm_init_one, where ibmasm_free_remote_input_dev(sp) is called to unregister the freed sp->remote.mouse_dev and sp->remote.keybd_dev.
My patch add a "error_init_remote" label to handle the error of ibmasm_init_remote_input_dev(), to avoid the uaf bugs.
--- drivers/misc/ibmasm/module.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/misc/ibmasm/module.c +3 -2
@@ -111,7 +111,7 @@ static int ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id) result =ibmasm_init_remote_input_dev (sp);if (result) {dev_err (sp->dev,"Failed to initialize remote queue\n" ); - goto error_send_message; + goto error_init_remote; } result =ibmasm_send_driver_vpd (sp);
@@ -131,8 +131,9 @@ static int ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id)return 0 ; error_send_message: -disable_sp_interrupts (sp->base_address);ibmasm_free_remote_input_dev (sp); +error_init_remote: +disable_sp_interrupts (sp->base_address);free_irq (sp->irq, (void *)sp); error_request_irq:iounmap (sp->base_address);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 13/149 misc: alcor_pci: fix null-ptr-deref when there is no PCI bridge
In reply to Greg Kroah-HartmanFrom: Tong Zhang <[email protected]>
[ Upstream commit 3ce3e45cc333da707d4d6eb433574b990bcc26f5 ]
There is an issue with the ASPM(optional) capability checking function. A device might be attached to root complex directly, in this case, bus->self(bridge) will be NULL, thus priv->parent_pdev is NULL. Since alcor_pci_init_check_aspm(priv->parent_pdev) checks the PCI link's ASPM capability and populate parent_cap_off, which will be used later by alcor_pci_aspm_ctrl() to dynamically turn on/off device, what we can do here is to avoid checking the capability if we are on the root complex. This will make pdev_cap_off 0 and alcor_pci_aspm_ctrl() will simply return when bring called, effectively disable ASPM for the device.
[ 1.246492] BUG: kernel NULL pointer dereference, address: 00000000000000c0 [ 1.248731] RIP: 0010:pci_read_config_byte+0x5/0x40 [ 1.253998] Call Trace: [ 1.254131] ? alcor_pci_find_cap_offset.isra.0+0x3a/0x100 [alcor_pci] [ 1.254476] alcor_pci_probe+0x169/0x2d5 [alcor_pci]
--- drivers/misc/cardreader/alcor_pci.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/misc/cardreader/alcor_pci.c +7 -1
@@ -133,7 +133,13 @@ static void alcor_pci_init_check_aspm(struct alcor_pci_priv *priv)u32 val32; priv->pdev_cap_off =alcor_pci_find_cap_offset (priv, priv->pdev); - priv->parent_cap_off =alcor_pci_find_cap_offset (priv, +/* +* A device might be attached to root complex directly and +* priv->parent_pdev will be NULL. In this case we don't check its +* capability and disable ASPM completely. +*/ +if (!priv->parent_pdev) + priv->parent_cap_off =alcor_pci_find_cap_offset (priv, priv->parent_pdev);if ((priv->pdev_cap_off ==0 ) || (priv->parent_cap_off ==0 )) {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 14/149 iio: gyro: fxa21002c: Balance runtime pm + use pm_runtime_resume_and_get().
In reply to Greg Kroah-HartmanFrom: Jonathan Cameron <[email protected]>
[ Upstream commit 41120ebbb1eb5e9dec93320e259d5b2c93226073 ]
In both the probe() error path and remove() pm_runtime_put_noidle() is called which will decrement the runtime pm reference count. However, there is no matching function to have raised the reference count. Not this isn't a fix as the runtime pm core will stop the reference count going negative anyway.
An alternative would have been to raise the count in these paths, but it is not clear why that would be necessary.
Whilst we are here replace some boilerplate with pm_runtime_resume_and_get() Found using coccicheck script under review at:
https://lore.kernel.org/lkml/[email protected]/
--- drivers/iio/gyro/fxas21002c_core.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-)
drivers/iio/gyro/fxas21002c_core.c +1 -10
@@ -300,14 +300,7 @@ out_unlock:static int fxas21002c_pm_get (struct fxas21002c_data *data) { -struct device *dev =regmap_get_device (data->regmap); -int ret; - - ret =pm_runtime_get_sync (dev); -if (ret <0 ) -pm_runtime_put_noidle (dev); - -return ret; +return pm_runtime_resume_and_get (regmap_get_device (data->regmap)); }static int fxas21002c_pm_put (struct fxas21002c_data *data)
@@ -940,7 +933,6 @@ int fxas21002c_core_probe(struct device *dev, struct regmap *regmap, int irq, pm_disable:pm_runtime_disable (dev);pm_runtime_set_suspended (dev); -pm_runtime_put_noidle (dev);return ret; }
@@ -954,7 +946,6 @@ void fxas21002c_core_remove(struct device *dev)pm_runtime_disable (dev);pm_runtime_set_suspended (dev); -pm_runtime_put_noidle (dev); }EXPORT_SYMBOL_GPL (fxas21002c_core_remove);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 15/149 iio: magn: bmc150: Balance runtime pm + use pm_runtime_resume_and_get()
In reply to Greg Kroah-HartmanFrom: Jonathan Cameron <[email protected]>
[ Upstream commit 264da512431495e542fcaf56ffe75e7df0e7db74 ]
probe() error paths after runtime pm is enabled, should disable it. remove() should not call pm_runtime_put_noidle() as there is no matching get() to have raised the reference count. This case has no affect a the runtime pm core protects against going negative.
Whilst here use pm_runtime_resume_and_get() to tidy things up a little. coccicheck script didn't get this one due to complex code structure so found by inspection.
--- drivers/iio/magnetometer/bmc150_magn.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
drivers/iio/magnetometer/bmc150_magn.c +4 -6
@@ -263,7 +263,7 @@ static int bmc150_magn_set_power_state(struct bmc150_magn_data *data, bool on)int ret;if (on) { - ret =pm_runtime_get_sync (data->dev); + ret =pm_runtime_resume_and_get (data->dev); }else {pm_runtime_mark_last_busy (data->dev); ret =pm_runtime_put_autosuspend (data->dev);
@@ -272,9 +272,6 @@ static int bmc150_magn_set_power_state(struct bmc150_magn_data *data, bool on)if (ret <0 ) {dev_err (data->dev,"failed to change power state to %d\n" , on); -if (on) -pm_runtime_put_noidle (data->dev); -return ret; }#endif
@@ -947,12 +944,14 @@ int bmc150_magn_probe(struct device *dev, struct regmap *regmap, ret =iio_device_register (indio_dev);if (ret <0 ) {dev_err (dev,"unable to register iio device\n" ); - goto err_buffer_cleanup; + goto err_disable_runtime_pm; }dev_dbg (dev,"Registered device %s\n" , name);return 0 ; +err_disable_runtime_pm: +pm_runtime_disable (dev); err_buffer_cleanup:iio_triggered_buffer_cleanup (indio_dev); err_free_irq:
@@ -976,7 +975,6 @@ int bmc150_magn_remove(struct device *dev)pm_runtime_disable (dev);pm_runtime_set_suspended (dev); -pm_runtime_put_noidle (dev);iio_triggered_buffer_cleanup (indio_dev);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 16/149 ALSA: usx2y: Dont call free_pages_exact() with NULL address
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
[ Upstream commit cae0cf651adccee2c3f376e78f30fbd788d0829f ]
Unlike some other functions, we can't pass NULL pointer to free_pages_exact(). Add a proper NULL check for avoiding possible Oops.
--- sound/usb/usx2y/usb_stream.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
sound/usb/usx2y/usb_stream.c +5 -2
@@ -142,8 +142,11 @@ void usb_stream_free(struct usb_stream_kernel *sk)if (!s)return ; -free_pages_exact (sk->write_page, s->write_size); - sk->write_page =NULL ; +if (sk->write_page) { +free_pages_exact (sk->write_page, s->write_size); + sk->write_page =NULL ; + } +free_pages_exact (s, s->read_size); sk->s =NULL ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 17/149 Revert "ALSA: bebob/oxfw: fix Kconfig entry for Mackie d.2 Pro"
In reply to Greg Kroah-HartmanFrom: Takashi Sakamoto <[email protected]>
[ Upstream commit 5d6fb80a142b5994355ce675c517baba6089d199 ]
This reverts commit 0edabdfe89581669609eaac5f6a8d0ae6fe95e7f.
I've explained that optional FireWire card for d.2 is also built-in to d.2 Pro, however it's wrong. The optional card uses DM1000 ASIC and has 'Mackie DJ Mixer' in its model name of configuration ROM. On the other hand, built-in FireWire card for d.2 Pro and d.4 Pro uses OXFW971 ASIC and has 'd.Pro' in its model name according to manuals and user experiences. The former card is not the card for d.2 Pro. They are similar in appearance but different internally.
--- sound/firewire/Kconfig | 4 ++-- sound/firewire/bebob/bebob.c | 2 +- sound/firewire/oxfw/oxfw.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-)
sound/firewire/Kconfig +2 -2
@@ -38,7 +38,7 @@ config SND_OXFW * Mackie(Loud) Onyx 1640i (former model) * Mackie(Loud) Onyx Satellite * Mackie(Loud) Tapco Link.Firewire - * Mackie(Loud) d.4 pro + * Mackie(Loud) d.2 pro/d.4 pro (built-in FireWire card with OXFW971 ASIC) * Mackie(Loud) U.420/U.420d * TASCAM FireOne * Stanton Controllers & Systems 1 Deck/Mixer
@@ -84,7 +84,7 @@ config SND_BEBOB * PreSonus FIREBOX/FIREPOD/FP10/Inspire1394 * BridgeCo RDAudio1/Audio5 * Mackie Onyx 1220/1620/1640 (FireWire I/O Card) - * Mackie d.2 (FireWire Option) and d.2 Pro + * Mackie d.2 (optional FireWire card with DM1000 ASIC) * Stanton FinalScratch 2 (ScratchAmp) * Tascam IF-FW/DM * Behringer XENIX UFX 1204/1604
sound/firewire/bebob/bebob.c +1 -1
@@ -387,7 +387,7 @@ static const struct ieee1394_device_id bebob_id_table[] = {SND_BEBOB_DEV_ENTRY (VEN_BRIDGECO ,0x00010049 , &spec_normal),/* Mackie, Onyx 1220/1620/1640 (Firewire I/O Card) */ SND_BEBOB_DEV_ENTRY (VEN_MACKIE2 ,0x00010065 , &spec_normal), -// Mackie, d.2 (Firewire option card) and d.2 Pro (the card is built-in). +// Mackie, d.2 (optional Firewire card with DM1000). SND_BEBOB_DEV_ENTRY (VEN_MACKIE1 ,0x00010067 , &spec_normal),/* Stanton, ScratchAmp */ SND_BEBOB_DEV_ENTRY(VEN_STANTON, 0x00000001, &spec_normal),
sound/firewire/oxfw/oxfw.c +1 -1
@@ -350,7 +350,7 @@ static const struct ieee1394_device_id oxfw_id_table[] = {* Onyx-i series (former models): 0x081216 * Mackie Onyx Satellite: 0x00200f * Tapco LINK.firewire 4x6: 0x000460 -* d.4 pro: Unknown +* d.2 pro/d.4 pro (built-in card): Unknown * U.420: Unknown * U.420d: Unknown */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 18/149 w1: ds2438: fixing bug that would always get page0
In reply to Greg Kroah-HartmanFrom: Luiz Sampaio <[email protected]>
[ Upstream commit 1f5e7518f063728aee0679c5086b92d8ea429e11 ]
The purpose of the w1_ds2438_get_page function is to get the register values at the page passed as the pageno parameter. However, the page0 was hardcoded, such that the function always returned the page0 contents. Fixed so that the function can retrieve any page.
--- drivers/w1/slaves/w1_ds2438.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/w1/slaves/w1_ds2438.c +2 -2
@@ -62,13 +62,13 @@ static int w1_ds2438_get_page(struct w1_slave *sl, int pageno, u8 *buf)if (w1_reset_select_slave (sl))continue ; w1_buf[0 ] =W1_DS2438_RECALL_MEMORY ; - w1_buf[1 ] =0x00 ; + w1_buf[1 ] = (u8 )pageno;w1_write_block (sl->master, w1_buf,2 );if (w1_reset_select_slave (sl))continue ; w1_buf[0 ] =W1_DS2438_READ_SCRATCH ; - w1_buf[1 ] =0x00 ; + w1_buf[1 ] = (u8 )pageno;w1_write_block (sl->master, w1_buf,2 ); count =w1_read_block (sl->master, buf,DS2438_PAGE_SIZE +1 );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 19/149 scsi: hisi_sas: Propagate errors in interrupt_init_v1_hw()
In reply to Greg Kroah-HartmanFrom: Sergey Shtylyov <[email protected]>
[ Upstream commit ab17122e758ef68fb21033e25c041144067975f5 ]
After commit 6c11dc060427 ("scsi: hisi_sas: Fix IRQ checks") we have the error codes returned by platform_get_irq() ready for the propagation upsream in interrupt_init_v1_hw() -- that will fix still broken deferred probing. Let's propagate the error codes from devm_request_irq() as well since I don't see the reason to override them with -ENOENT...
--- drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/scsi/hisi_sas/hisi_sas_v1_hw.c +6 -6
@@ -1648,7 +1648,7 @@ static int interrupt_init_v1_hw(struct hisi_hba *hisi_hba)if (irq <0 ) {dev_err (dev,"irq init: fail map phy interrupt %d\n" , idx); -return -ENOENT ; +return irq; } rc = devm_request_irq(dev, irq, phy_interrupts[j], 0,
@@ -1656,7 +1656,7 @@ static int interrupt_init_v1_hw(struct hisi_hba *hisi_hba)if (rc) {dev_err (dev,"irq init: could not request phy interrupt %d, rc=%d\n" , irq, rc); -return -ENOENT ; +return rc; } } }
@@ -1667,7 +1667,7 @@ static int interrupt_init_v1_hw(struct hisi_hba *hisi_hba)if (irq <0 ) {dev_err (dev,"irq init: could not map cq interrupt %d\n" , idx); -return -ENOENT ; +return irq; } rc = devm_request_irq(dev, irq, cq_interrupt_v1_hw, 0,
@@ -1675,7 +1675,7 @@ static int interrupt_init_v1_hw(struct hisi_hba *hisi_hba)if (rc) {dev_err (dev,"irq init: could not request cq interrupt %d, rc=%d\n" , irq, rc); -return -ENOENT ; +return rc; } }
@@ -1685,7 +1685,7 @@ static int interrupt_init_v1_hw(struct hisi_hba *hisi_hba)if (irq <0 ) {dev_err (dev,"irq init: could not map fatal interrupt %d\n" , idx); -return -ENOENT ; +return irq; } rc = devm_request_irq(dev, irq, fatal_interrupts[i], 0,
@@ -1693,7 +1693,7 @@ static int interrupt_init_v1_hw(struct hisi_hba *hisi_hba)if (rc) {dev_err (dev,"irq init: could not request fatal interrupt %d, rc=%d\n" , irq, rc); -return -ENOENT ; +return rc; } }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 20/149 scsi: lpfc: Fix "Unexpected timeout" error in direct attach topology
In reply to Greg Kroah-HartmanFrom: James Smart <[email protected]>
[ Upstream commit e30d55137edef47434c40d7570276a0846fe922c ]
An 'unexpected timeout' message may be seen in a point-2-point topology. The message occurs when a PLOGI is received before the driver is notified of FLOGI completion. The FLOGI completion failure causes discovery to be triggered for a second time. The discovery timer is restarted but no new discovery activity is initiated, thus the timeout message eventually appears.
In point-2-point, when discovery has progressed before the FLOGI completion is processed, it is not a failure. Add code to FLOGI completion to detect that discovery has progressed and exit the FLOGI handling (noop'ing it).
--- drivers/scsi/lpfc/lpfc_els.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/scsi/lpfc/lpfc_els.c +9 -0
@@ -1179,6 +1179,15 @@ stop_rr_fcf_flogi: phba->fcf.fcf_redisc_attempted =0 ;/* reset */ goto out; } + }else if (vport->port_state >LPFC_FLOGI && + vport->fc_flag &FC_PT2PT ) { +/* +* In a p2p topology, it is possible that discovery has +* already progressed, and this completion can be ignored. +* Recheck the indicated topology. +*/ +if (!sp->cmn.fPort) + goto out; } flogifail:
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 21/149 scsi: lpfc: Fix crash when lpfc_sli4_hba_setup() fails to initialize the SGLs
In reply to Greg Kroah-HartmanFrom: James Smart <[email protected]>
[ Upstream commit 5aa615d195f1e142c662cb2253f057c9baec7531 ]
The driver is encountering a crash in lpfc_free_iocb_list() while performing initial attachment.
Code review found this to be an errant failure path that was taken, jumping to a tag that then referenced structures that were uninitialized.
Fix the failure path.
--- drivers/scsi/lpfc/lpfc_sli.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/scsi/lpfc/lpfc_sli.c +3 -2
@@ -7602,7 +7602,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)"0393 Error %d during rpi post operation\n" , rc); rc = -ENODEV ; - goto out_destroy_queue; + goto out_free_iocblist; }lpfc_sli4_node_prep (phba);
@@ -7765,8 +7765,9 @@ out_io_buff_free: out_unset_queue:/* Unset all the queues set up in this routine when error out */ lpfc_sli4_queue_unset (phba); -out_destroy_queue: +out_free_iocblist:lpfc_free_iocb_list (phba); +out_destroy_queue:lpfc_sli4_queue_destroy (phba); out_stop_timers:lpfc_stop_hba_timers (phba);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 22/149 scsi: core: Cap scsi_host cmd_per_lun at can_queue
In reply to Greg Kroah-HartmanFrom: John Garry <[email protected]>
[ Upstream commit ea2f0f77538c50739b9fb4de4700cee5535e1f77 ]
The sysfs handling function sdev_store_queue_depth() enforces that the sdev queue depth cannot exceed shost can_queue. The initial sdev queue depth comes from shost cmd_per_lun. However, the LLDD may manually set cmd_per_lun to be larger than can_queue, which leads to an initial sdev queue depth greater than can_queue.
Such an issue was reported in [0], which caused a hang. That has since been fixed in commit fc09acb7de31 ("scsi: scsi_debug: Fix cmd_per_lun, set to max_queue").
Stop this possibly happening for other drivers by capping shost cmd_per_lun at shost can_queue.
[0] https://lore.kernel.org/linux-scsi/YHaez6iN2HHYxYOh@T590/
--- drivers/scsi/hosts.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/scsi/hosts.c +3 -0
@@ -219,6 +219,9 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev, goto fail; } + shost->cmd_per_lun =min_t (short, shost->cmd_per_lun, + shost->can_queue); + error =scsi_init_sense_cache (shost);if (error) goto fail;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 23/149 ALSA: ac97: fix PM reference leak in ac97_bus_remove()
In reply to Greg Kroah-HartmanFrom: Yufen Yu <[email protected]>
[ Upstream commit a38e93302ee25b2ca6f4ee76c6c974cf3637985e ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to putting operation will result in reference leak here. Fix it by replacing it with pm_runtime_resume_and_get to keep usage counter balanced.
--- sound/ac97/bus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/ac97/bus.c +1 -1
@@ -520,7 +520,7 @@ static int ac97_bus_remove(struct device *dev)struct ac97_codec_driver *adrv =to_ac97_driver (dev->driver);int ret; - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 )return ret;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 24/149 tty: serial: 8250: serial_cs: Fix a memory leak in error handling path
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit fad92b11047a748c996ebd6cfb164a63814eeb2e ]
In the probe function, if the final 'serial_config()' fails, 'info' is leaking.
Add a resource handling path to free this memory.
--- drivers/tty/serial/8250/serial_cs.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
drivers/tty/serial/8250/serial_cs.c +10 -1
@@ -306,6 +306,7 @@ static int serial_resume(struct pcmcia_device *link)static int serial_probe (struct pcmcia_device *link) {struct serial_info *info; +int ret;dev_dbg (&link->dev,"serial_attach()\n" );
@@ -320,7 +321,15 @@ static int serial_probe(struct pcmcia_device *link)if (do_sound) link->config_flags |=CONF_ENABLE_SPKR ; -return serial_config (link); + ret =serial_config (link); +if (ret) + goto free_info; + +return 0 ; + +free_info: +kfree (info); +return ret; }static void serial_detach (struct pcmcia_device *link)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 25/149 scsi: scsi_dh_alua: Check for negative result value
In reply to Greg Kroah-HartmanFrom: Hannes Reinecke <[email protected]>
[ Upstream commit 7e26e3ea028740f934477ec01ba586ab033c35aa ]
scsi_execute() will now return a negative error if there was an error prior to command submission; evaluate that instead if checking for DRIVER_ERROR.
[mkp: build fix]
--- drivers/scsi/device_handler/scsi_dh_alua.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/scsi/device_handler/scsi_dh_alua.c +4 -4
@@ -548,12 +548,12 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)kfree (buff);return SCSI_DH_OK ; } -if (!scsi_sense_valid (&sense_hdr)) { +if (retval <0 || !scsi_sense_valid (&sense_hdr)) {sdev_printk (KERN_INFO , sdev,"%s: rtpg failed, result %d\n" ,ALUA_DH_NAME , retval);kfree (buff); -if (driver_byte (retval) ==DRIVER_ERROR ) +if (retval <0 )return SCSI_DH_DEV_TEMP_BUSY ;return SCSI_DH_IO ; }
@@ -775,11 +775,11 @@ static unsigned alua_stpg(struct scsi_device *sdev, struct alua_port_group *pg) retval =submit_stpg (sdev, pg->group_id, &sense_hdr);if (retval) { -if (!scsi_sense_valid (&sense_hdr)) { +if (retval <0 || !scsi_sense_valid (&sense_hdr)) {sdev_printk (KERN_INFO , sdev,"%s: stpg failed, result %d" ,ALUA_DH_NAME , retval); -if (driver_byte (retval) ==DRIVER_ERROR ) +if (retval <0 )return SCSI_DH_DEV_TEMP_BUSY ; }else { sdev_printk(KERN_INFO, sdev, "%s: stpg failed\n",
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 26/149 fs/jfs: Fix missing error code in lmLogInit()
In reply to Greg Kroah-HartmanFrom: Jiapeng Chong <[email protected]>
[ Upstream commit 492109333c29e1bb16d8732e1d597b02e8e0bf2e ]
The error code is missing in this code scenario, add the error code '-EINVAL' to the return value 'rc.
Eliminate the follow smatch warning:
fs/jfs/jfs_logmgr.c:1327 lmLogInit() warn: missing error code 'rc'.
--- fs/jfs/jfs_logmgr.c | 1 + 1 file changed, 1 insertion(+)
fs/jfs/jfs_logmgr.c +1 -0
@@ -1324,6 +1324,7 @@ int lmLogInit(struct jfs_log * log) }else {if (!uuid_equal (&logsuper->uuid, &log->uuid)) {jfs_warn ("wrong uuid on JFS log device" ); + rc = -EINVAL ; goto errout20; } log->size =le32_to_cpu (logsuper->size);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 27/149 scsi: megaraid_sas: Fix resource leak in case of probe failure
In reply to Greg Kroah-HartmanFrom: Chandrakanth Patil <[email protected]>
[ Upstream commit b5438f48fdd8e1c3f130d32637511efd32038152 ]
The driver doesn't clean up all the allocated resources properly when scsi_add_host(), megasas_start_aen() function fails during the PCI device probe.
Clean up all those resources.
--- drivers/scsi/megaraid/megaraid_sas_base.c | 13 +++++++++++++ drivers/scsi/megaraid/megaraid_sas_fusion.c | 1 + 2 files changed, 14 insertions(+)
drivers/scsi/megaraid/megaraid_sas_base.c +13 -0
@@ -7415,11 +7415,16 @@ static int megasas_probe_one(struct pci_dev *pdev,return 0 ; fail_start_aen: + instance->unload =1 ; +scsi_remove_host (instance->host); fail_io_attach: megasas_mgmt_info.count--; megasas_mgmt_info.max_index--; megasas_mgmt_info.instance[megasas_mgmt_info.max_index] =NULL ; +if (instance->requestorId && !instance->skip_heartbeat_timer_del) +del_timer_sync (&instance->sriov_heartbeat_timer); + instance->instancet->disable_intr (instance);megasas_destroy_irqs (instance);
@@ -7427,8 +7432,16 @@ fail_io_attach:megasas_release_fusion (instance); elsemegasas_release_mfi (instance ); +if (instance->msix_vectors)pci_free_irq_vectors (instance->pdev); + instance->msix_vectors =0 ; + +if (instance->fw_crash_state !=UNAVAILABLE ) +megasas_free_host_crash_buffer (instance); + +if (instance->adapter_type !=MFI_SERIES ) +megasas_fusion_stop_watchdog (instance); fail_init_mfi:scsi_host_put (host); fail_alloc_instance:
drivers/scsi/megaraid/megaraid_sas_fusion.c +1 -0
@@ -5177,6 +5177,7 @@ megasas_alloc_fusion_context(struct megasas_instance *instance)if (!fusion->log_to_span) {dev_err (&instance->pdev->dev,"Failed from %s %d\n" , __func__, __LINE__); +kfree (instance->ctrl_context);return -ENOMEM ; } }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 28/149 scsi: megaraid_sas: Early detection of VD deletion through RaidMap update
In reply to Greg Kroah-HartmanFrom: Kashyap Desai <[email protected]>
[ Upstream commit ae6874ba4b43c5a00065f48599811a09d33b873d ]
Consider the case where a VD is deleted and the targetID of that VD is assigned to a newly created VD. If the sequence of deletion/addition of VD happens very quickly there is a possibility that second event (VD add) occurs even before the driver processes the first event (VD delete). As event processing is done in deferred context the device list remains the same (but targetID is re-used) so driver will not learn the VD deletion/additon. I/Os meant for the older VD will be directed to new VD which may lead to data corruption.
Make driver detect the deleted VD as soon as possible based on the RaidMap update and block further I/O to that device.
--- drivers/scsi/megaraid/megaraid_sas.h | 12 ++++ drivers/scsi/megaraid/megaraid_sas_base.c | 83 ++++++++++++++++++++--- drivers/scsi/megaraid/megaraid_sas_fp.c | 6 +- 3 files changed, 92 insertions(+), 9 deletions(-)
drivers/scsi/megaraid/megaraid_sas.h +12 -0
@@ -2256,6 +2256,15 @@ enum MR_PERF_MODE { (mode) == MR_LATENCY_PERF_MODE ? "Latency" : \ "Unknown") +enum MEGASAS_LD_TARGET_ID_STATUS { +LD_TARGET_ID_INITIAL , +LD_TARGET_ID_ACTIVE , +LD_TARGET_ID_DELETED , +}; + +#define MEGASAS_TARGET_ID (sdev) \ + (((sdev->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) + sdev->id) +struct megasas_instance {unsigned int *reply_map;
@@ -2320,6 +2329,9 @@ struct megasas_instance {struct megasas_pd_list pd_list[MEGASAS_MAX_PD ];struct megasas_pd_list local_pd_list[MEGASAS_MAX_PD ];u8 ld_ids[MEGASAS_MAX_LD_IDS ]; +u8 ld_tgtid_status[MEGASAS_MAX_LD_IDS ]; +u8 ld_ids_prev[MEGASAS_MAX_LD_IDS ]; +u8 ld_ids_from_raidmap[MEGASAS_MAX_LD_IDS ];s8 init_id;u16 max_num_sge;
drivers/scsi/megaraid/megaraid_sas_base.c +75 -8
164 lines not on this page · raw message
drivers/scsi/megaraid/megaraid_sas_fp.c +5 -1
@@ -350,6 +350,10 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance, u64 map_id) num_lds =le16_to_cpu (drv_map->raidMap.ldCount); +memcpy (instance->ld_ids_prev, + instance->ld_ids_from_raidmap, +sizeof (instance->ld_ids_from_raidmap)); +memset (instance->ld_ids_from_raidmap,0xff ,MEGASAS_MAX_LD_IDS );/*Convert Raid capability values to CPU arch */ for (i =0 ; (num_lds >0 ) && (i <MAX_LOGICAL_DRIVES_EXT ); i++) { ld =MR_TargetIdToLdGet (i, drv_map);
@@ -360,7 +364,7 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance, u64 map_id) raid =MR_LdRaidGet (ld, drv_map);le32_to_cpus ((u32 *)&raid->capability); - + instance->ld_ids_from_raidmap[i] = i; num_lds--; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 29/149 scsi: megaraid_sas: Handle missing interrupts while re-enabling IRQs
In reply to Greg Kroah-HartmanFrom: Chandrakanth Patil <[email protected]>
[ Upstream commit 9bedd36e9146b34dda4d6994e3aa1d72bc6442c1 ]
While reenabling the IRQ after IRQ poll there may be a small window for the firmware to post the replies with interrupts raised. In that case the driver will not see the interrupts which leads to I/O timeout.
This issue only happens when there are many I/O completions on a single reply queue. This forces the driver to switch between the interrupt and IRQ context.
Make the driver process the reply queue one more time after enabling the IRQ.
--- drivers/scsi/megaraid/megaraid_sas_fusion.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/scsi/megaraid/megaraid_sas_fusion.c +7 -2
@@ -3716,6 +3716,7 @@ static void megasas_sync_irqs(unsigned long instance_addr)if (irq_ctx->irq_poll_scheduled) { irq_ctx->irq_poll_scheduled = false;enable_irq (irq_ctx->os_irq); +complete_cmd_fusion (instance, irq_ctx->MSIxIndex, irq_ctx); } } }
@@ -3747,6 +3748,7 @@ int megasas_irqpoll(struct irq_poll *irqpoll, int budget)irq_poll_complete (irqpoll); irq_ctx->irq_poll_scheduled = false;enable_irq (irq_ctx->os_irq); +complete_cmd_fusion (instance, irq_ctx->MSIxIndex, irq_ctx); }return num_entries;
@@ -3763,6 +3765,7 @@ megasas_complete_cmd_dpc_fusion(unsigned long instance_addr) {struct megasas_instance *instance = (struct megasas_instance *)instance_addr; +struct megasas_irq_context *irq_ctx =NULL ;u32 count, MSIxIndex; count = instance->msix_vectors >0 ? instance->msix_vectors :1 ;
@@ -3771,8 +3774,10 @@ megasas_complete_cmd_dpc_fusion(unsigned long instance_addr)if (atomic_read (&instance->adprecovery) ==MEGASAS_HW_CRITICAL_ERROR )return ; -for (MSIxIndex =0 ; MSIxIndex < count; MSIxIndex++) -complete_cmd_fusion (instance, MSIxIndex,NULL ); +for (MSIxIndex =0 ; MSIxIndex < count; MSIxIndex++) { + irq_ctx = &instance->irq_context[MSIxIndex]; +complete_cmd_fusion (instance, MSIxIndex, irq_ctx); + } }/**
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 30/149 scsi: iscsi: Add iscsi_cls_conn refcount helpers
In reply to Greg Kroah-HartmanFrom: Mike Christie <[email protected]>
[ Upstream commit b1d19e8c92cfb0ded180ef3376c20e130414e067 ]
There are a couple places where we could free the iscsi_cls_conn while it's still in use. This adds some helpers to get/put a refcount on the struct and converts an exiting user. Subsequent commits will then use the helpers to fix 2 bugs in the eh code.
--- drivers/scsi/libiscsi.c | 7 ++----- drivers/scsi/scsi_transport_iscsi.c | 12 ++++++++++++ include/scsi/scsi_transport_iscsi.h | 2 ++ 3 files changed, 16 insertions(+), 5 deletions(-)
drivers/scsi/libiscsi.c +2 -5
@@ -1348,7 +1348,6 @@ void iscsi_session_failure(struct iscsi_session *session, enum iscsi_err err) {struct iscsi_conn *conn; -struct device *dev;spin_lock_bh (&session->frwd_lock); conn = session->leadconn;
@@ -1357,10 +1356,8 @@ void iscsi_session_failure(struct iscsi_session *session,return ; } - dev =get_device (&conn->cls_conn->dev); +iscsi_get_conn (conn->cls_conn);spin_unlock_bh (&session->frwd_lock); -if (!dev) -return ;/* * if the host is being removed bypass the connection * recovery initialization because we are going to kill
@@ -1370,7 +1367,7 @@ void iscsi_session_failure(struct iscsi_session *session,iscsi_conn_error_event (conn->cls_conn, err); elseiscsi_conn_failure (conn ,err ); -put_device (dev); +iscsi_put_conn (conn->cls_conn); }EXPORT_SYMBOL_GPL (iscsi_session_failure);
drivers/scsi/scsi_transport_iscsi.c +12 -0
@@ -2308,6 +2308,18 @@ int iscsi_destroy_conn(struct iscsi_cls_conn *conn) }EXPORT_SYMBOL_GPL (iscsi_destroy_conn); +void iscsi_put_conn (struct iscsi_cls_conn *conn) +{ +put_device (&conn->dev); +} +EXPORT_SYMBOL_GPL (iscsi_put_conn); + +void iscsi_get_conn (struct iscsi_cls_conn *conn) +{ +get_device (&conn->dev); +} +EXPORT_SYMBOL_GPL (iscsi_get_conn); +/* * iscsi interface functions */
include/scsi/scsi_transport_iscsi.h +2 -0
@@ -423,6 +423,8 @@ extern void iscsi_remove_session(struct iscsi_cls_session *session);extern void iscsi_free_session (struct iscsi_cls_session *session);extern struct iscsi_cls_conn *iscsi_create_conn (struct iscsi_cls_session *sess,int dd_size,uint32_t cid); +extern void iscsi_put_conn (struct iscsi_cls_conn *conn); +extern void iscsi_get_conn (struct iscsi_cls_conn *conn);extern int iscsi_destroy_conn (struct iscsi_cls_conn *conn);extern void iscsi_unblock_session (struct iscsi_cls_session *session);extern void iscsi_block_session (struct iscsi_cls_session *session);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 31/149 scsi: iscsi: Fix conn use after free during resets
In reply to Greg Kroah-HartmanFrom: Mike Christie <[email protected]>
[ Upstream commit ec29d0ac29be366450a7faffbcf8cba3a6a3b506 ]
If we haven't done a unbind target call we can race where iscsi_conn_teardown wakes up the EH thread and then frees the conn while those threads are still accessing the conn ehwait.
We can only do one TMF per session so this just moves the TMF fields from the conn to the session. We can then rely on the iscsi_session_teardown->iscsi_remove_session->__iscsi_unbind_session call to remove the target and it's devices, and know after that point there is no device or scsi-ml callout trying to access the session.
--- drivers/scsi/libiscsi.c | 115 +++++++++++++++++++--------------------- include/scsi/libiscsi.h | 11 ++-- 2 files changed, 60 insertions(+), 66 deletions(-)
drivers/scsi/libiscsi.c +55 -60
@@ -230,11 +230,11 @@ static int iscsi_prep_ecdb_ahs(struct iscsi_task *task)*/ static int iscsi_check_tmf_restrictions (struct iscsi_task *task,int opcode) { -struct iscsi_conn *conn = task->conn; -struct iscsi_tm *tmf = &conn->tmhdr; +struct iscsi_session *session = task->conn->session; +struct iscsi_tm *tmf = &session->tmhdr;u64 hdr_lun; -if (conn->tmf_state ==TMF_INITIAL ) +if (session->tmf_state ==TMF_INITIAL )return 0 ;if ((tmf->opcode &ISCSI_OPCODE_MASK ) !=ISCSI_OP_SCSI_TMFUNC )
@@ -254,24 +254,19 @@ static int iscsi_check_tmf_restrictions(struct iscsi_task *task, int opcode)* Fail all SCSI cmd PDUs */ if (opcode !=ISCSI_OP_SCSI_DATA_OUT ) { -iscsi_conn_printk (KERN_INFO , conn, -"task [op %x itt " -"0x%x/0x%x] " -"rejected.\n" , - opcode, task->itt, - task->hdr_itt); +iscsi_session_printk (KERN_INFO , session, +"task [op %x itt 0x%x/0x%x] rejected.\n" , + opcode, task->itt, task->hdr_itt);return -EACCES ; }/* * And also all data-out PDUs in response to R2T * if fast_abort is set. */ -if (conn->session->fast_abort) { -iscsi_conn_printk (KERN_INFO , conn, -"task [op %x itt " -"0x%x/0x%x] fast abort.\n" , - opcode, task->itt, - task->hdr_itt); +if (session->fast_abort) { +iscsi_session_printk (KERN_INFO , session, +"task [op %x itt 0x%x/0x%x] fast abort.\n" , + opcode, task->itt, task->hdr_itt);return -EACCES ; }break ;
@@ -284,7 +279,7 @@ static int iscsi_check_tmf_restrictions(struct iscsi_task *task, int opcode)*/ if (opcode ==ISCSI_OP_SCSI_DATA_OUT && task->hdr_itt == tmf->rtt) { - ISCSI_DBG_SESSION(conn->session, + ISCSI_DBG_SESSION(session, "Preventing task %x/%x from sending " "data-out due to abort task in " "progress\n", task->itt,
@@ -923,20 +918,21 @@ iscsi_data_in_rsp(struct iscsi_conn *conn, struct iscsi_hdr *hdr,static void iscsi_tmf_rsp (struct iscsi_conn *conn,struct iscsi_hdr *hdr) {struct iscsi_tm_rsp *tmf = (struct iscsi_tm_rsp *)hdr; +struct iscsi_session *session = conn->session; conn->exp_statsn =be32_to_cpu (hdr->statsn) +1 ; conn->tmfrsp_pdus_cnt++; -if (conn->tmf_state !=TMF_QUEUED ) +if (session->tmf_state !=TMF_QUEUED )return ;if (tmf->response ==ISCSI_TMF_RSP_COMPLETE ) - conn->tmf_state =TMF_SUCCESS ; + session->tmf_state =TMF_SUCCESS ;else if (tmf->response ==ISCSI_TMF_RSP_NO_TASK ) - conn->tmf_state =TMF_NOT_FOUND ; + session->tmf_state =TMF_NOT_FOUND ;else - conn->tmf_state =TMF_FAILED ; -wake_up (&conn->ehwait); + session->tmf_state =TMF_FAILED ; +wake_up (&session->ehwait); }static int iscsi_send_nopout (struct iscsi_conn *conn,struct iscsi_nopin *rhdr)
@@ -1784,15 +1780,14 @@ EXPORT_SYMBOL_GPL(iscsi_target_alloc);static void iscsi_tmf_timedout (struct timer_list *t) { -struct iscsi_conn *conn =from_timer (conn, t, tmf_timer); -struct iscsi_session *session = conn->session; +struct iscsi_session *session =from_timer (session, t, tmf_timer);spin_lock (&session->frwd_lock); -if (conn->tmf_state ==TMF_QUEUED ) { - conn->tmf_state =TMF_TIMEDOUT ; +if (session->tmf_state ==TMF_QUEUED ) { + session->tmf_state =TMF_TIMEDOUT ;ISCSI_DBG_EH (session,"tmf timedout\n" );/* unblock eh_abort() */ -wake_up (&conn->ehwait); +wake_up (&session->ehwait); }spin_unlock (&session->frwd_lock); }
@@ -1815,8 +1810,8 @@ static int iscsi_exec_task_mgmt_fn(struct iscsi_conn *conn,return -EPERM ; } conn->tmfcmd_pdus_cnt++; - conn->tmf_timer.expires = timeout *HZ + jiffies; -add_timer (&conn->tmf_timer); + session->tmf_timer.expires = timeout *HZ + jiffies; +add_timer (&session->tmf_timer);ISCSI_DBG_EH (session,"tmf set timeout\n" );spin_unlock_bh (&session->frwd_lock);
@@ -1830,12 +1825,12 @@ static int iscsi_exec_task_mgmt_fn(struct iscsi_conn *conn,* 3) session is terminated or restarted or userspace has * given up on recovery */ -wait_event_interruptible (conn->ehwait, age != session->age || +wait_event_interruptible (session->ehwait, age != session->age || session->state !=ISCSI_STATE_LOGGED_IN || - conn->tmf_state !=TMF_QUEUED ); + session->tmf_state !=TMF_QUEUED );if (signal_pending (current))flush_signals (current); -del_timer_sync (&conn->tmf_timer); +del_timer_sync (&session->tmf_timer);mutex_lock (&session->eh_mutex);spin_lock_bh (&session->frwd_lock);
@@ -2195,17 +2190,17 @@ int iscsi_eh_abort(struct scsi_cmnd *sc) }/* only have one tmf outstanding at a time */ -if (conn->tmf_state !=TMF_INITIAL ) +if (session->tmf_state !=TMF_INITIAL ) goto failed; - conn->tmf_state =TMF_QUEUED ; + session->tmf_state =TMF_QUEUED ; - hdr = &conn->tmhdr; + hdr = &session->tmhdr;iscsi_prep_abort_task_pdu (task, hdr);if (iscsi_exec_task_mgmt_fn (conn, hdr, age, session->abort_timeout)) goto failed; -switch (conn->tmf_state) { +switch (session->tmf_state) {case TMF_SUCCESS :spin_unlock_bh (&session->frwd_lock);/*
@@ -2220,7 +2215,7 @@ int iscsi_eh_abort(struct scsi_cmnd *sc)*/ spin_lock_bh (&session->frwd_lock);fail_scsi_task (task,DID_ABORT ); - conn->tmf_state =TMF_INITIAL ; + session->tmf_state =TMF_INITIAL ;memset (hdr,0 ,sizeof (*hdr));spin_unlock_bh (&session->frwd_lock);iscsi_start_tx (conn);
@@ -2231,7 +2226,7 @@ int iscsi_eh_abort(struct scsi_cmnd *sc) goto failed_unlocked;case TMF_NOT_FOUND :if (!sc->SCp.ptr) { - conn->tmf_state =TMF_INITIAL ; + session->tmf_state =TMF_INITIAL ;memset (hdr,0 ,sizeof (*hdr));/* task completed before tmf abort response */ ISCSI_DBG_EH(session, "sc completed while abort in "
@@ -2240,7 +2235,7 @@ int iscsi_eh_abort(struct scsi_cmnd *sc) }/* fall through */ default : - conn->tmf_state =TMF_INITIAL ; + session->tmf_state =TMF_INITIAL ; goto failed; }
@@ -2297,11 +2292,11 @@ int iscsi_eh_device_reset(struct scsi_cmnd *sc) conn = session->leadconn;/* only have one tmf outstanding at a time */ -if (conn->tmf_state !=TMF_INITIAL ) +if (session->tmf_state !=TMF_INITIAL ) goto unlock; - conn->tmf_state =TMF_QUEUED ; + session->tmf_state =TMF_QUEUED ; - hdr = &conn->tmhdr; + hdr = &session->tmhdr;iscsi_prep_lun_reset_pdu (sc, hdr); if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age,
@@ -2310,7 +2305,7 @@ int iscsi_eh_device_reset(struct scsi_cmnd *sc) goto unlock; } -switch (conn->tmf_state) { +switch (session->tmf_state) {case TMF_SUCCESS :break ;case TMF_TIMEDOUT :
@@ -2318,7 +2313,7 @@ int iscsi_eh_device_reset(struct scsi_cmnd *sc)iscsi_conn_failure (conn,ISCSI_ERR_SCSI_EH_SESSION_RST ); goto done;default : - conn->tmf_state =TMF_INITIAL ; + session->tmf_state =TMF_INITIAL ; goto unlock; }
@@ -2330,7 +2325,7 @@ int iscsi_eh_device_reset(struct scsi_cmnd *sc)spin_lock_bh (&session->frwd_lock);memset (hdr,0 ,sizeof (*hdr));fail_scsi_tasks (conn, sc->device->lun,DID_ERROR ); - conn->tmf_state =TMF_INITIAL ; + session->tmf_state =TMF_INITIAL ;spin_unlock_bh (&session->frwd_lock);iscsi_start_tx (conn);
@@ -2353,8 +2348,7 @@ void iscsi_session_recovery_timedout(struct iscsi_cls_session *cls_session)spin_lock_bh (&session->frwd_lock);if (session->state !=ISCSI_STATE_LOGGED_IN ) { session->state =ISCSI_STATE_RECOVERY_FAILED ; -if (session->leadconn) -wake_up (&session->leadconn->ehwait); +wake_up (&session->ehwait); }spin_unlock_bh (&session->frwd_lock); }
@@ -2399,7 +2393,7 @@ failed:iscsi_conn_failure (conn,ISCSI_ERR_SCSI_EH_SESSION_RST );ISCSI_DBG_EH (session,"wait for relogin\n" ); -wait_event_interruptible (conn->ehwait, +wait_event_interruptible (session->ehwait, session->state ==ISCSI_STATE_TERMINATE || session->state ==ISCSI_STATE_LOGGED_IN || session->state ==ISCSI_STATE_RECOVERY_FAILED );
@@ -2460,11 +2454,11 @@ static int iscsi_eh_target_reset(struct scsi_cmnd *sc) conn = session->leadconn;/* only have one tmf outstanding at a time */ -if (conn->tmf_state !=TMF_INITIAL ) +if (session->tmf_state !=TMF_INITIAL ) goto unlock; - conn->tmf_state =TMF_QUEUED ; + session->tmf_state =TMF_QUEUED ; - hdr = &conn->tmhdr; + hdr = &session->tmhdr;iscsi_prep_tgt_reset_pdu (sc, hdr); if (iscsi_exec_task_mgmt_fn(conn, hdr, session->age,
@@ -2473,7 +2467,7 @@ static int iscsi_eh_target_reset(struct scsi_cmnd *sc) goto unlock; } -switch (conn->tmf_state) { +switch (session->tmf_state) {case TMF_SUCCESS :break ;case TMF_TIMEDOUT :
@@ -2481,7 +2475,7 @@ static int iscsi_eh_target_reset(struct scsi_cmnd *sc)iscsi_conn_failure (conn,ISCSI_ERR_SCSI_EH_SESSION_RST ); goto done;default : - conn->tmf_state =TMF_INITIAL ; + session->tmf_state =TMF_INITIAL ; goto unlock; }
@@ -2493,7 +2487,7 @@ static int iscsi_eh_target_reset(struct scsi_cmnd *sc)spin_lock_bh (&session->frwd_lock);memset (hdr,0 ,sizeof (*hdr));fail_scsi_tasks (conn,-1 ,DID_ERROR ); - conn->tmf_state =TMF_INITIAL ; + session->tmf_state =TMF_INITIAL ;spin_unlock_bh (&session->frwd_lock);iscsi_start_tx (conn);
@@ -2798,7 +2792,10 @@ iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost, session->tt = iscsit; session->dd_data = cls_session->dd_data +sizeof (*session); + session->tmf_state =TMF_INITIAL ; +timer_setup (&session->tmf_timer, iscsi_tmf_timedout,0 );mutex_init (&session->eh_mutex); +spin_lock_init (&session->frwd_lock);spin_lock_init (&session->back_lock);
@@ -2902,7 +2899,6 @@ iscsi_conn_setup(struct iscsi_cls_session *cls_session, int dd_size, conn->c_stage =ISCSI_CONN_INITIAL_STAGE ; conn->id = conn_idx; conn->exp_statsn =0 ; - conn->tmf_state =TMF_INITIAL ;timer_setup (&conn->transport_timer, iscsi_check_transport_timeouts,0 );
@@ -2928,8 +2924,7 @@ iscsi_conn_setup(struct iscsi_cls_session *cls_session, int dd_size, goto login_task_data_alloc_fail; conn->login_task->data = conn->data = data; -timer_setup (&conn->tmf_timer, iscsi_tmf_timedout,0 ); -init_waitqueue_head (&conn->ehwait); +init_waitqueue_head (&session->ehwait);return cls_conn;
@@ -2964,7 +2959,7 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)* leading connection? then give up on recovery. */ session->state =ISCSI_STATE_TERMINATE ; -wake_up (&conn->ehwait); +wake_up (&session->ehwait); }spin_unlock_bh (&session->frwd_lock);
@@ -3039,7 +3034,7 @@ int iscsi_conn_start(struct iscsi_cls_conn *cls_conn)* commands after successful recovery */ conn->stop_stage =0 ; - conn->tmf_state =TMF_INITIAL ; + session->tmf_state =TMF_INITIAL ; session->age++;if (session->age ==16 ) session->age =0 ;
@@ -3053,7 +3048,7 @@ int iscsi_conn_start(struct iscsi_cls_conn *cls_conn)spin_unlock_bh (&session->frwd_lock);iscsi_unblock_session (session->cls_session); -wake_up (&conn->ehwait); +wake_up (&session->ehwait);return 0 ; }EXPORT_SYMBOL_GPL (iscsi_conn_start);
@@ -3140,7 +3135,7 @@ static void iscsi_start_session_recovery(struct iscsi_session *session,spin_lock_bh (&session->frwd_lock);fail_scsi_tasks (conn,-1 ,DID_TRANSPORT_DISRUPTED );fail_mgmt_tasks (session, conn); -memset (&conn->tmhdr,0 ,sizeof (conn->tmhdr)); +memset (&session->tmhdr,0 ,sizeof (session->tmhdr));spin_unlock_bh (&session->frwd_lock);mutex_unlock (&session->eh_mutex); }
include/scsi/libiscsi.h +5 -6
@@ -195,12 +195,6 @@ struct iscsi_conn {unsigned long suspend_tx;/* suspend Tx */ unsigned long suspend_rx;/* suspend Rx */ -/* abort */ -wait_queue_head_t ehwait;/* used in eh_abort() */ -struct iscsi_tm tmhdr; -struct timer_list tmf_timer; -int tmf_state;/* see TMF_INITIAL, etc.*/ -/* negotiated params */ unsigned max_recv_dlength;/* initiator_max_recv_dsl*/ unsigned max_xmit_dlength;/* target_max_recv_dsl */
@@ -270,6 +264,11 @@ struct iscsi_session {* and recv lock. */ struct mutex eh_mutex; +/* abort */ +wait_queue_head_t ehwait;/* used in eh_abort() */ +struct iscsi_tm tmhdr; +struct timer_list tmf_timer; +int tmf_state;/* see TMF_INITIAL, etc.*/ /* iSCSI session-wide sequencing */ uint32_t cmdsn;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 32/149 scsi: iscsi: Fix shost->max_id use
In reply to Greg Kroah-HartmanFrom: Mike Christie <[email protected]>
[ Upstream commit bdd4aad7ff92ae39c2e93c415bb6761cb8b584da ]
The iscsi offload drivers are setting the shost->max_id to the max number of sessions they support. The problem is that max_id is not the max number of targets but the highest identifier the targets can have. To use it to limit the number of targets we need to set it to max sessions - 1, or we can end up with a session we might not have preallocated resources for.
--- drivers/scsi/be2iscsi/be_main.c | 4 ++-- drivers/scsi/bnx2i/bnx2i_iscsi.c | 2 +- drivers/scsi/cxgbi/libcxgbi.c | 4 ++-- drivers/scsi/qedi/qedi_main.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-)
drivers/scsi/be2iscsi/be_main.c +2 -2
@@ -416,7 +416,7 @@ static struct beiscsi_hba *beiscsi_hba_alloc(struct pci_dev *pcidev) "beiscsi_hba_alloc - iscsi_host_alloc failed\n");return NULL ; } - shost->max_id =BE2_MAX_SESSIONS ; + shost->max_id =BE2_MAX_SESSIONS -1 ; shost->max_channel =0 ; shost->max_cmd_len =BEISCSI_MAX_CMD_LEN ; shost->max_lun =BEISCSI_NUM_MAX_LUN ;
@@ -5318,7 +5318,7 @@ static int beiscsi_enable_port(struct beiscsi_hba *phba)/* Re-enable UER. If different TPE occurs then it is recoverable. */ beiscsi_set_uer_feature (phba); - phba->shost->max_id = phba->params.cxns_per_ctrl; + phba->shost->max_id = phba->params.cxns_per_ctrl -1 ; phba->shost->can_queue = phba->params.ios_per_ctrl; ret =beiscsi_init_port (phba);if (ret <0 ) {
drivers/scsi/bnx2i/bnx2i_iscsi.c +1 -1
@@ -793,7 +793,7 @@ struct bnx2i_hba *bnx2i_alloc_hba(struct cnic_dev *cnic)return NULL ; shost->dma_boundary = cnic->pcidev->dma_mask; shost->transportt = bnx2i_scsi_xport_template; - shost->max_id =ISCSI_MAX_CONNS_PER_HBA ; + shost->max_id =ISCSI_MAX_CONNS_PER_HBA -1 ; shost->max_channel =0 ; shost->max_lun =512 ; shost->max_cmd_len =16 ;
drivers/scsi/cxgbi/libcxgbi.c +2 -2
@@ -337,7 +337,7 @@ void cxgbi_hbas_remove(struct cxgbi_device *cdev)EXPORT_SYMBOL_GPL (cxgbi_hbas_remove);int cxgbi_hbas_add (struct cxgbi_device *cdev,u64 max_lun, -unsigned int max_id,struct scsi_host_template *sht, +unsigned int max_conns,struct scsi_host_template *sht,struct scsi_transport_template *stt) {struct cxgbi_hba *chba;
@@ -357,7 +357,7 @@ int cxgbi_hbas_add(struct cxgbi_device *cdev, u64 max_lun, shost->transportt = stt; shost->max_lun = max_lun; - shost->max_id = max_id; + shost->max_id = max_conns -1 ; shost->max_channel =0 ; shost->max_cmd_len =16 ;
drivers/scsi/qedi/qedi_main.c +1 -1
@@ -631,7 +631,7 @@ static struct qedi_ctx *qedi_host_alloc(struct pci_dev *pdev) goto exit_setup_shost; } - shost->max_id =QEDI_MAX_ISCSI_CONNS_PER_HBA ; + shost->max_id =QEDI_MAX_ISCSI_CONNS_PER_HBA -1 ; shost->max_channel =0 ; shost->max_lun = ~0 ; shost->max_cmd_len =16 ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 33/149 scsi: qedi: Fix null ref during abort handling
In reply to Greg Kroah-HartmanFrom: Mike Christie <[email protected]>
[ Upstream commit 5777b7f0f03ce49372203b6521631f62f2810c8f ]
If qedi_process_cmd_cleanup_resp finds the cmd it frees the work and sets list_tmf_work to NULL, so qedi_tmf_work should check if list_tmf_work is non-NULL when it wants to force cleanup.
--- drivers/scsi/qedi/qedi_fw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/qedi/qedi_fw.c +1 -1
@@ -1451,7 +1451,7 @@ abort_ret: ldel_exit:spin_lock_bh (&qedi_conn->tmf_work_lock); -if (!qedi_cmd->list_tmf_work) { +if (qedi_cmd->list_tmf_work) {list_del_init (&list_work->list); qedi_cmd->list_tmf_work =NULL ;kfree (list_work);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 34/149 mfd: da9052/stmpe: Add and modify MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 4700ef326556ed74aba188f12396740a8c1c21dd ]
This patch adds/modifies MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/mfd/da9052-i2c.c | 1 + drivers/mfd/stmpe-i2c.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)
drivers/mfd/da9052-i2c.c +1 -0
@@ -113,6 +113,7 @@ static const struct i2c_device_id da9052_i2c_id[] = { {"da9053-bc", DA9053_BC}, {} }; +MODULE_DEVICE_TABLE (i2c, da9052_i2c_id);#ifdef CONFIG_OF static const struct of_device_id dialog_dt_ids[] = {
drivers/mfd/stmpe-i2c.c +1 -1
@@ -109,7 +109,7 @@ static const struct i2c_device_id stmpe_i2c_id[] = { { "stmpe2403", STMPE2403 }, { } }; -MODULE_DEVICE_TABLE(i2c, stmpe_id); +MODULE_DEVICE_TABLE(i2c, stmpe_i2c_id); static struct i2c_driver stmpe_i2c_driver = { .driver = {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 35/149 mfd: cpcap: Fix cpcap dmamask not set warnings
In reply to Greg Kroah-HartmanFrom: Tony Lindgren <[email protected]>
[ Upstream commit 0b7cbe811ca524295ea43d9a4d73d3427e419c54 ]
We have started to get a bunch of pointless dmamask not set warnings that makes the output of dmesg -l err,warn hard to read with many extra warnings:
cpcap-regulator cpcap-regulator.0: DMA mask not set cpcap_adc cpcap_adc.0: DMA mask not set cpcap_battery cpcap_battery.0: DMA mask not set cpcap-charger cpcap-charger.0: DMA mask not set cpcap-pwrbutton cpcap-pwrbutton.0: DMA mask not set cpcap-led cpcap-led.0: DMA mask not set cpcap-led cpcap-led.1: DMA mask not set cpcap-led cpcap-led.2: DMA mask not set cpcap-led cpcap-led.3: DMA mask not set cpcap-led cpcap-led.4: DMA mask not set cpcap-rtc cpcap-rtc.0: DMA mask not set cpcap-usb-phy cpcap-usb-phy.0: DMA mask not set
This seems to have started with commit 4d8bde883bfb ("OF: Don't set default coherent DMA mask"). We have the parent SPI controller use DMA, while CPCAP driver and it's children do not. For audio, the DMA is handled over I2S bus with the McBSP driver.
--- drivers/mfd/motorola-cpcap.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/mfd/motorola-cpcap.c +4 -0
@@ -305,6 +305,10 @@ static int cpcap_probe(struct spi_device *spi)if (ret)return ret; +/* Parent SPI controller uses DMA, CPCAP and child devices do not */ + spi->dev.coherent_dma_mask =0 ; + spi->dev.dma_mask = &spi->dev.coherent_dma_mask; +return devm_mfd_add_devices (&spi->dev,0 , cpcap_mfd_devices,ARRAY_SIZE (cpcap_mfd_devices),NULL ,0 ,NULL ); }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 36/149 ASoC: img: Fix PM reference leak in img_i2s_in_probe()
In reply to Greg Kroah-HartmanFrom: Yufen Yu <[email protected]>
[ Upstream commit 81aad47278539f02de808bcc8251fed0ad3d6f55 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to putting operation will result in reference leak here. Fix it by replacing it with pm_runtime_resume_and_get to keep usage counter balanced.
--- sound/soc/img/img-i2s-in.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/img/img-i2s-in.c +1 -1
@@ -464,7 +464,7 @@ static int img_i2s_in_probe(struct platform_device *pdev)if (ret) goto err_pm_disable; } - ret =pm_runtime_get_sync (&pdev->dev); + ret =pm_runtime_resume_and_get (&pdev->dev);if (ret <0 ) goto err_suspend;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 37/149 serial: tty: uartlite: fix console setup
In reply to Greg Kroah-HartmanFrom: Daniel Mack <[email protected]>
[ Upstream commit d157fca711ad42e75efef3444c83d2e1a17be27a ]
Remove the hack to assign the global console_port variable at probe time. This assumption that cons->index is -1 is wrong for systems that specify 'console=' in the cmdline (or 'stdout-path' in dts). Hence, on such system the actual console assignment is ignored, and the first UART that happens to be probed is used as console instead.
Move the logic to console_setup() and map the console to the correct port through the array of available ports instead.
--- drivers/tty/serial/uartlite.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-)
drivers/tty/serial/uartlite.c +6 -21
@@ -508,21 +508,23 @@ static void ulite_console_write(struct console *co, const char *s,static int ulite_console_setup (struct console *co,char *options) { -struct uart_port *port; +struct uart_port *port =NULL ;int baud =9600 ;int bits =8 ;int parity ='n' ;int flow ='n' ; - - port = console_port; +if (co->index >=0 && co->index <ULITE_NR_UARTS ) + port = ulite_ports + co->index;/* Has the device been initialized yet? */ -if (!port->mapbase) { +if (!port || !port->mapbase) {pr_debug ("console on ttyUL%i not present\n" , co->index);return -ENODEV ; } + console_port = port; +/* not initialized yet? */ if (!port->membase) {if (ulite_request_port (port))
@@ -658,17 +660,6 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq,dev_set_drvdata (dev, port); -#ifdef CONFIG_SERIAL_UARTLITE_CONSOLE -/* -* If console hasn't been found yet try to assign this port -* because it is required to be assigned for console setup function. -* If register_console() don't assign value, then console_port pointer -* is cleanup. -*/ -if (ulite_uart_driver.cons->index ==-1 ) - console_port = port; -#endif -/* Register the port */ rc =uart_add_one_port (&ulite_uart_driver, port);if (rc) {
@@ -678,12 +669,6 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq,return rc; } -#ifdef CONFIG_SERIAL_UARTLITE_CONSOLE -/* This is not port which is used for console that's why clean it up */ -if (ulite_uart_driver.cons->index ==-1 ) - console_port =NULL ; -#endif -return 0 ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 38/149 s390/sclp_vt220: fix console name to match device
In reply to Greg Kroah-HartmanFrom: Valentin Vidic <[email protected]>
[ Upstream commit b7d91d230a119fdcc334d10c9889ce9c5e15118b ]
Console name reported in /proc/consoles:
ttyS1 -W- (EC p ) 4:65
does not match the char device name:
crw--w---- 1 root root 4, 65 May 17 12:18 /dev/ttysclp0
so debian-installer inside a QEMU s390x instance gets confused and fails to start with the following error:
steal-ctty: No such file or directory
--- arch/s390/kernel/setup.c | 2 +- drivers/s390/char/sclp_vt220.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
arch/s390/kernel/setup.c +1 -1
@@ -162,7 +162,7 @@ static void __init set_preferred_console(void)else if (CONSOLE_IS_3270 )add_preferred_console ("tty3270" ,0 ,NULL );else if (CONSOLE_IS_VT220 ) -add_preferred_console ("ttyS" ,1 ,NULL ); +add_preferred_console ("ttysclp" ,0 ,NULL );else if (CONSOLE_IS_HVC )add_preferred_console ("hvc" ,0 ,NULL ); }
drivers/s390/char/sclp_vt220.c +2 -2
@@ -35,8 +35,8 @@#define SCLP_VT220_MINOR 65#define SCLP_VT220_DRIVER_NAME "sclp_vt220"#define SCLP_VT220_DEVICE_NAME "ttysclp" -#define SCLP_VT220_CONSOLE_NAME "ttyS" -#define SCLP_VT220_CONSOLE_INDEX 1/* console=ttyS1 */ +#define SCLP_VT220_CONSOLE_NAME "ttysclp" +#define SCLP_VT220_CONSOLE_INDEX 0/* console=ttysclp0 */ /* Representation of a single write request */ struct sclp_vt220_request {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 39/149 selftests: timers: rtcpie: skip test if default RTC device does not exist
In reply to Greg Kroah-HartmanFrom: Po-Hsu Lin <[email protected]>
[ Upstream commit 0d3e5a057992bdc66e4dca2ca50b77fa4a7bd90e ]
This test will require /dev/rtc0, the default RTC device, or one specified by user to run. Since this default RTC is not guaranteed to exist on all of the devices, so check its existence first, otherwise skip this test with the kselftest skip code 4.
Without this patch this test will fail like this on a s390x zVM:
$ selftests: timers: rtcpie $ /dev/rtc0: No such file or directory not ok 1 selftests: timers: rtcpie # exit=22
With this patch:
$ selftests: timers: rtcpie $ Default RTC /dev/rtc0 does not exist. Test Skipped! not ok 9 selftests: timers: rtcpie # SKIP
Fixed up change log so "With this patch" text doesn't get dropped. Shuah Khan <[email protected]>
--- tools/testing/selftests/timers/rtcpie.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
tools/testing/selftests/timers/rtcpie.c +9 -1
@@ -18,6 +18,8 @@#include <stdlib.h> #include <errno.h> +#include "../kselftest.h" +/* * This expects the new RTC class driver framework, working with * clocks that will often not be clones of what the PC-AT had.
@@ -35,8 +37,14 @@ int main(int argc, char **argv)switch (argc) {case 2 : rtc = argv[1 ]; -/* FALLTHROUGH */ +break ;case 1 : + fd =open (default_rtc,O_RDONLY ); +if (fd ==-1 ) { +printf ("Default RTC %s does not exist. Test Skipped!\n" , default_rtc); +exit (KSFT_SKIP ); + } +close (fd);break ;default :fprintf (stderr,"usage: rtctest [rtcdev] [d]\n" );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 40/149 ALSA: sb: Fix potential double-free of CSP mixer elements
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
[ Upstream commit c305366a37441c2ac90b08711cb6f032b43672f2 ]
snd_sb_qsound_destroy() contains the calls of removing the previously created mixer controls, but it doesn't clear the pointers. As snd_sb_qsound_destroy() itself may be repeatedly called via ioctl, this could lead to double-free potentially.
Fix it by clearing the struct fields properly afterwards.
--- sound/isa/sb/sb16_csp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
sound/isa/sb/sb16_csp.c +6 -2
@@ -1072,10 +1072,14 @@ static void snd_sb_qsound_destroy(struct snd_sb_csp * p) card = p->chip->card;down_write (&card->controls_rwsem); -if (p->qsound_switch) +if (p->qsound_switch) {snd_ctl_remove (card, p->qsound_switch); -if (p->qsound_space) + p->qsound_switch =NULL ; + } +if (p->qsound_space) {snd_ctl_remove (card, p->qsound_space); + p->qsound_space =NULL ; + }up_write (&card->controls_rwsem);/* cancel pending transfer of QSound parameters */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 41/149 powerpc/ps3: Add dma_mask to ps3_dma_region
In reply to Greg Kroah-HartmanFrom: Geoff Levand <[email protected]>
[ Upstream commit 9733862e50fdba55e7f1554e4286fcc5302ff28e ]
Commit f959dcd6ddfd29235030e8026471ac1b022ad2b0 (dma-direct: Fix potential NULL pointer dereference) added a null check on the dma_mask pointer of the kernel's device structure.
Add a dma_mask variable to the ps3_dma_region structure and set the device structure's dma_mask pointer to point to this new variable.
Fixes runtime errors like these:
# WARNING: Fixes tag on line 10 doesn't match correct format # WARNING: Fixes tag on line 10 doesn't match correct format
ps3_system_bus_match:349: dev=8.0(sb_01), drv=8.0(ps3flash): match
WARNING: CPU: 0 PID: 1 at kernel/dma/mapping.c:151 .dma_map_page_attrs+0x34/0x1e0 ps3flash sb_01: ps3stor_setup:193: map DMA region failed
--- arch/powerpc/include/asm/ps3.h | 2 ++ arch/powerpc/platforms/ps3/mm.c | 12 ++++++++++++ 2 files changed, 14 insertions(+)
arch/powerpc/include/asm/ps3.h +2 -0
@@ -71,6 +71,7 @@ struct ps3_dma_region_ops;* @bus_addr: The 'translated' bus address of the region. * @len: The length in bytes of the region. * @offset: The offset from the start of memory of the region. +* @dma_mask: Device dma_mask. * @ioid: The IOID of the device who owns this region * @chunk_list: Opaque variable used by the ioc page manager. * @region_ops: struct ps3_dma_region_ops - dma region operations
@@ -85,6 +86,7 @@ struct ps3_dma_region {enum ps3_dma_region_type region_type;unsigned long len;unsigned long offset; +u64 dma_mask;/* driver variables (set by ps3_dma_region_create) */ unsigned long bus_addr;
arch/powerpc/platforms/ps3/mm.c +12 -0
@@ -6,6 +6,7 @@* Copyright 2006 Sony Corp. */ +#include <linux/dma-mapping.h> #include <linux/kernel.h> #include <linux/export.h> #include <linux/memblock.h>
@@ -1118,6 +1119,7 @@ int ps3_dma_region_init(struct ps3_system_bus_device *dev, enum ps3_dma_region_type region_type, void *addr, unsigned long len) { unsigned long lpar_addr; +int result; lpar_addr = addr ?ps3_mm_phys_to_lpar (__pa (addr)) :0 ;
@@ -1129,6 +1131,16 @@ int ps3_dma_region_init(struct ps3_system_bus_device *dev, r->offset -= map.r1.offset; r->len = len ? len :_ALIGN_UP (map.total,1 << r->page_size); + dev->core.dma_mask = &r->dma_mask; + + result =dma_set_mask_and_coherent (&dev->core,DMA_BIT_MASK (32 )); + +if (result <0 ) { +dev_err (&dev->core,"%s:%d: dma_set_mask_and_coherent failed: %d\n" , + __func__, __LINE__, result); +return result; + } +switch (dev->dev_type) {case PS3_DEVICE_TYPE_SB : r->region_ops = (USE_DYNAMIC_DMA )
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 42/149 iommu/arm-smmu: Fix arm_smmu_device refcount leak when arm_smmu_rpm_get fails
In reply to Greg Kroah-HartmanFrom: Xiyu Yang <[email protected]>
[ Upstream commit 1adf30f198c26539a62d761e45af72cde570413d ]
arm_smmu_rpm_get() invokes pm_runtime_get_sync(), which increases the refcount of the "smmu" even though the return value is less than 0.
The reference counting issue happens in some error handling paths of arm_smmu_rpm_get() in its caller functions. When arm_smmu_rpm_get() fails, the caller functions forget to decrease the refcount of "smmu" increased by arm_smmu_rpm_get(), causing a refcount leak.
Fix this issue by calling pm_runtime_resume_and_get() instead of pm_runtime_get_sync() in arm_smmu_rpm_get(), which can keep the refcount balanced in case of failure.
--- drivers/iommu/arm-smmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iommu/arm-smmu.c +1 -1
@@ -114,7 +114,7 @@ static bool using_legacy_binding, using_generic_binding;static inline int arm_smmu_rpm_get (struct arm_smmu_device *smmu) {if (pm_runtime_enabled (smmu->dev)) -return pm_runtime_get_sync (smmu->dev); +return pm_runtime_resume_and_get (smmu->dev);return 0 ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 43/149 iommu/arm-smmu: Fix arm_smmu_device refcount leak in address translation
In reply to Greg Kroah-HartmanFrom: Xiyu Yang <[email protected]>
[ Upstream commit 7c8f176d6a3fa18aa0f8875da6f7c672ed2a8554 ]
The reference counting issue happens in several exception handling paths of arm_smmu_iova_to_phys_hard(). When those error scenarios occur, the function forgets to decrease the refcount of "smmu" increased by arm_smmu_rpm_get(), causing a refcount leak.
Fix this issue by jumping to "out" label when those error scenarios occur.
--- drivers/iommu/arm-smmu.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/iommu/arm-smmu.c +6 -2
@@ -1231,6 +1231,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,u64 phys;unsigned long va, flags;int ret, idx = cfg->cbndx; +phys_addr_t addr =0 ; ret =arm_smmu_rpm_get (smmu);if (ret <0 )
@@ -1249,6 +1250,7 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,dev_err (dev,"iova to phys timed out on %pad. Falling back to software table walk.\n" , &iova); +arm_smmu_rpm_put (smmu);return ops->iova_to_phys (ops, iova); }
@@ -1257,12 +1259,14 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain,if (phys &CB_PAR_F ) {dev_err (dev,"translation fault!\n" );dev_err (dev,"PAR = 0x%llx\n" , phys); -return 0 ; + goto out; } + addr = (phys &GENMASK_ULL (39 ,12 )) | (iova &0xfff ); +out:arm_smmu_rpm_put (smmu); -return (phys &GENMASK_ULL (39 ,12 )) | (iova &0xfff ); +return addr; } static phys_addr_t arm_smmu_iova_to_phys(struct iommu_domain *domain,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 44/149 gpio: zynq: Check return value of pm_runtime_get_sync
In reply to Greg Kroah-HartmanFrom: Srinivas Neeli <[email protected]>
[ Upstream commit a51b2fb94b04ab71e53a71b9fad03fa826941254 ]
Return value of "pm_runtime_get_sync" API was neither captured nor checked. Fixed it by capturing the return value and then checking for any warning.
Addresses-Coverity: "check_return"
--- drivers/gpio/gpio-zynq.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/gpio/gpio-zynq.c +4 -1
@@ -938,8 +938,11 @@ err_pm_dis:static int zynq_gpio_remove (struct platform_device *pdev) {struct zynq_gpio *gpio =platform_get_drvdata (pdev); +int ret; -pm_runtime_get_sync (&pdev->dev); + ret =pm_runtime_get_sync (&pdev->dev); +if (ret <0 ) +dev_warn (&pdev->dev,"pm_runtime_get_sync() Failed\n" );gpiochip_remove (&gpio->chip);clk_disable_unprepare (gpio->clk);device_set_wakeup_capable (&pdev->dev,0 );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 45/149 ALSA: ppc: fix error return code in snd_pmac_probe()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit 80b9c1be567c3c6bbe0d4b290af578e630485b5d ]
If snd_pmac_tumbler_init() or snd_pmac_tumbler_post_init() fails, snd_pmac_probe() need return error code.
--- sound/ppc/powermac.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
sound/ppc/powermac.c +5 -1
@@ -77,7 +77,11 @@ static int snd_pmac_probe(struct platform_device *devptr)sprintf (card->shortname,"PowerMac %s" , name_ext);sprintf (card->longname,"%s (Dev %d) Sub-frame %d" , card->shortname, chip->device_id, chip->subframe); -if (snd_pmac_tumbler_init (chip) <0 ||snd_pmac_tumbler_post_init () <0 ) + err =snd_pmac_tumbler_init (chip); +if (err <0 ) + goto __error; + err =snd_pmac_tumbler_post_init (); +if (err <0 ) goto __error;break ;case PMAC_AWACS :
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 46/149 selftests/powerpc: Fix "no_handler" EBB selftest
In reply to Greg Kroah-HartmanFrom: Athira Rajeev <[email protected]>
[ Upstream commit 45677c9aebe926192e59475b35a1ff35ff2d4217 ]
The "no_handler_test" in ebb selftests attempts to read the PMU registers twice via helper function "dump_ebb_state". First dump is just before closing of event and the second invocation is done after closing of the event. The original intention of second dump_ebb_state was to dump the state of registers at the end of the test when the counters are frozen. But this will be achieved with the first call itself since sample period is set to low value and PMU will be frozen by then. Hence patch removes the dump which was done before closing of the event.
--- tools/testing/selftests/powerpc/pmu/ebb/no_handler_test.c | 2 -- 1 file changed, 2 deletions(-)
tools/testing/selftests/powerpc/pmu/ebb/no_handler_test.c +0 -2
@@ -50,8 +50,6 @@ static int no_handler_test(void)event_close (&event); -dump_ebb_state (); -/* The real test is that we never took an EBB at 0x0 */ return 0 ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 47/149 gpio: pca953x: Add support for the On Semi pca9655
In reply to Greg Kroah-HartmanFrom: Peter Robinson <[email protected]>
[ Upstream commit 6d49b3a0f351925b5ea5047166c112b7590b918a ]
The On Semi pca9655 is a 16 bit variant of the On Semi pca9654 GPIO expander, with 16 GPIOs and interrupt functionality.
--- drivers/gpio/gpio-pca953x.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpio/gpio-pca953x.c +1 -0
@@ -1272,6 +1272,7 @@ static const struct of_device_id pca953x_dt_ids[] = { { .compatible = "onnn,cat9554", .data = OF_953X( 8, PCA_INT), }, { .compatible = "onnn,pca9654", .data = OF_953X( 8, PCA_INT), }, + { .compatible = "onnn,pca9655", .data = OF_953X(16, PCA_INT), }, { .compatible = "exar,xra1202", .data = OF_953X( 8, 0), }, { }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 48/149 ASoC: soc-core: Fix the error return code in snd_soc_of_parse_audio_routing()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit 7d3865a10b9ff2669c531d5ddd60bf46b3d48f1e ]
When devm_kcalloc() fails, the error code -ENOMEM should be returned instead of -EINVAL.
--- sound/soc/soc-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/soc-core.c +1 -1
@@ -3178,7 +3178,7 @@ int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,if (!routes) {dev_err (card->dev,"ASoC: Could not allocate DAPM route table\n" ); -return -EINVAL ; +return -ENOMEM ; }for (i =0 ; i < num_routes; i++) {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 49/149 s390/processor: always inline stap() and __load_psw_mask()
In reply to Greg Kroah-HartmanFrom: Heiko Carstens <[email protected]>
[ Upstream commit 9c9a915afd90f7534c16a71d1cd44b58596fddf3 ]
s390 is the only architecture which makes use of the __no_kasan_or_inline attribute for two functions. Given that both stap() and __load_psw_mask() are very small functions they can and should be always inlined anyway.
Therefore get rid of __no_kasan_or_inline and always inline these functions.
--- arch/s390/include/asm/processor.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/s390/include/asm/processor.h +2 -2
@@ -215,7 +215,7 @@ static inline unsigned long current_stack_pointer(void)return sp; } -static __no_kasan_or_inline unsigned short stap (void ) +static __always_inline unsigned short stap (void ) {unsigned short cpu_address;
@@ -254,7 +254,7 @@ static inline void __load_psw(psw_t psw)* Set PSW mask to specified value, while leaving the * PSW addr pointing to the next instruction. */ -static __no_kasan_or_inline void __load_psw_mask(unsigned long mask) +static __always_inline void __load_psw_mask(unsigned long mask) {unsigned long addr;psw_t psw;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 50/149 s390/ipl_parm: fix program check new psw handling
In reply to Greg Kroah-HartmanFrom: Heiko Carstens <[email protected]>
[ Upstream commit 88c2510cecb7e2b518e3c4fdf3cf0e13ebe9377c ]
The __diag308() inline asm temporarily changes the program check new psw to redirect a potential program check on the diag instruction. Restoring of the program check new psw is done in C code behind the inline asm.
This can be problematic, especially if the function is inlined, since the compiler can reorder instructions in such a way that a different instruction, which may result in a program check, might be executed before the program check new psw has been restored.
To avoid such a scenario move restoring into the inline asm. For consistency reasons move also saving of the original program check new psw into the inline asm.
--- arch/s390/boot/ipl_parm.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)
arch/s390/boot/ipl_parm.c +11 -8
@@ -27,22 +27,25 @@ static inline int __diag308(unsigned long subcode, void *addr) register unsigned long _addr asm("0") = (unsigned long)addr; register unsigned long _rc asm("1") = 0;unsigned long reg1, reg2; -psw_t old = S390_lowcore.program_new_psw; +psw_t old; asmvolatile ( +" mvc 0(16,%[psw_old]),0(%[psw_pgm])\n" " epsw %0,%1\n" -" st %0,%[psw_pgm]\n" -" st %1,%[psw_pgm]+4\n" +" st %0,0(%[psw_pgm])\n" +" st %1,4(%[psw_pgm])\n" " larl %0,1f\n" -" stg %0,%[psw_pgm]+8\n" +" stg %0,8(%[psw_pgm])\n" " diag %[addr],%[subcode],0x308\n" -"1: nopr %%r7\n" +"1: mvc 0(16,%[psw_pgm]),0(%[psw_old])\n" :"=&d" (reg1),"=&a" (reg2), - [psw_pgm]"=Q" (S390_lowcore.program_new_psw), +"+Q" (S390_lowcore.program_new_psw), +"=Q" (old), [addr]"+d" (_addr),"+d" (_rc) - : [subcode]"d" (subcode) + : [subcode]"d" (subcode), + [psw_old]"a" (&old), + [psw_pgm]"a" (&S390_lowcore.program_new_psw) :"cc" ,"memory" ); - S390_lowcore.program_new_psw = old;return _rc; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 51/149 s390/mem_detect: fix diag260() program check new psw handling
In reply to Greg Kroah-HartmanFrom: Heiko Carstens <[email protected]>
[ Upstream commit 86807f348f418a84970eebb8f9912a7eea16b497 ]
The __diag260() inline asm temporarily changes the program check new psw to redirect a potential program check on the diag instruction. Restoring of the program check new psw is done in C code behind the inline asm.
This can be problematic, especially if the function is inlined, since the compiler can reorder instructions in such a way that a different instruction, which may result in a program check, might be executed before the program check new psw has been restored.
To avoid such a scenario move restoring into the inline asm. For consistency reasons move also saving of the original program check new psw into the inline asm.
--- arch/s390/boot/mem_detect.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)
arch/s390/boot/mem_detect.c +11 -8
@@ -70,24 +70,27 @@ static int __diag260(unsigned long rx1, unsigned long rx2) register unsigned long _ry asm("4") = 0x10; /* storage configuration */int rc =-1 ;/* fail */ unsigned long reg1, reg2; -psw_t old = S390_lowcore.program_new_psw; +psw_t old; asmvolatile ( +" mvc 0(16,%[psw_old]),0(%[psw_pgm])\n" " epsw %0,%1\n" -" st %0,%[psw_pgm]\n" -" st %1,%[psw_pgm]+4\n" +" st %0,0(%[psw_pgm])\n" +" st %1,4(%[psw_pgm])\n" " larl %0,1f\n" -" stg %0,%[psw_pgm]+8\n" +" stg %0,8(%[psw_pgm])\n" " diag %[rx],%[ry],0x260\n" " ipm %[rc]\n" " srl %[rc],28\n" -"1:\n" +"1: mvc 0(16,%[psw_pgm]),0(%[psw_old])\n" :"=&d" (reg1),"=&a" (reg2), - [psw_pgm]"=Q" (S390_lowcore.program_new_psw), +"+Q" (S390_lowcore.program_new_psw), +"=Q" (old), [rc]"+&d" (rc), [ry]"+d" (_ry) - : [rx]"d" (_rx1),"d" (_rx2) + : [rx]"d" (_rx1),"d" (_rx2), + [psw_old]"a" (&old), + [psw_pgm]"a" (&S390_lowcore.program_new_psw) :"cc" ,"memory" ); - S390_lowcore.program_new_psw = old;return rc ==0 ? _ry :-1 ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 52/149 s390/mem_detect: fix tprot() program check new psw handling
In reply to Greg Kroah-HartmanFrom: Heiko Carstens <[email protected]>
[ Upstream commit da9057576785aaab52e706e76c0475c85b77ec14 ]
The tprot() inline asm temporarily changes the program check new psw to redirect a potential program check on the diag instruction. Restoring of the program check new psw is done in C code behind the inline asm.
This can be problematic, especially if the function is inlined, since the compiler can reorder instructions in such a way that a different instruction, which may result in a program check, might be executed before the program check new psw has been restored.
To avoid such a scenario move restoring into the inline asm. For consistency reasons move also saving of the original program check new psw into the inline asm.
--- arch/s390/boot/mem_detect.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-)
arch/s390/boot/mem_detect.c +17 -11
@@ -115,24 +115,30 @@ static int diag260(void)static int tprot (unsigned long addr) { -unsigned long pgm_addr; +unsigned long reg1, reg2;int rc = -EFAULT ; -psw_t old = S390_lowcore.program_new_psw; +psw_t old; - S390_lowcore.program_new_psw.mask =__extract_psw (); asmvolatile ( -" larl %[pgm_addr],1f\n" -" stg %[pgm_addr],%[psw_pgm_addr]\n" +" mvc 0(16,%[psw_old]),0(%[psw_pgm])\n" +" epsw %[reg1],%[reg2]\n" +" st %[reg1],0(%[psw_pgm])\n" +" st %[reg2],4(%[psw_pgm])\n" +" larl %[reg1],1f\n" +" stg %[reg1],8(%[psw_pgm])\n" " tprot 0(%[addr]),0\n" " ipm %[rc]\n" " srl %[rc],28\n" -"1:\n" - : [pgm_addr]"=&d" (pgm_addr), - [psw_pgm_addr]"=Q" (S390_lowcore.program_new_psw.addr), - [rc]"+&d" (rc) - : [addr]"a" (addr) +"1: mvc 0(16,%[psw_pgm]),0(%[psw_old])\n" + : [reg1]"=&d" (reg1), + [reg2]"=&a" (reg2), + [rc]"+&d" (rc), +"=Q" (S390_lowcore.program_new_psw.addr), +"=Q" (old) + : [psw_old]"a" (&old), + [psw_pgm]"a" (&S390_lowcore.program_new_psw), + [addr]"a" (addr) :"cc" ,"memory" ); - S390_lowcore.program_new_psw = old;return rc; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 53/149 Input: hideep - fix the uninitialized use in hideep_nvm_unlock()
In reply to Greg Kroah-HartmanFrom: Yizhuo Zhai <[email protected]>
[ Upstream commit cac7100d4c51c04979dacdfe6c9a5e400d3f0a27 ]
Inside function hideep_nvm_unlock(), variable "unmask_code" could be uninitialized if hideep_pgm_r_reg() returns error, however, it is used in the later if statement after an "and" operation, which is potentially unsafe.
--- drivers/input/touchscreen/hideep.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
drivers/input/touchscreen/hideep.c +10 -3
@@ -361,13 +361,16 @@ static int hideep_enter_pgm(struct hideep_ts *ts)return -EIO ; } -static void hideep_nvm_unlock (struct hideep_ts *ts) +static int hideep_nvm_unlock (struct hideep_ts *ts) {u32 unmask_code; +int error;hideep_pgm_w_reg (ts,HIDEEP_FLASH_CFG ,HIDEEP_NVM_SFR_RPAGE ); -hideep_pgm_r_reg (ts,0x0000000C , &unmask_code); + error =hideep_pgm_r_reg (ts,0x0000000C , &unmask_code);hideep_pgm_w_reg (ts,HIDEEP_FLASH_CFG ,HIDEEP_NVM_DEFAULT_PAGE ); +if (error) +return error;/* make it unprotected code */ unmask_code &= ~HIDEEP_PROT_MODE ;
@@ -384,6 +387,8 @@ static void hideep_nvm_unlock(struct hideep_ts *ts)NVM_W_SFR (HIDEEP_NVM_MASK_OFS , ts->nvm_mask);SET_FLASH_HWCONTROL ();hideep_pgm_w_reg (ts,HIDEEP_FLASH_CFG ,HIDEEP_NVM_DEFAULT_PAGE ); + +return 0 ; }static int hideep_check_status (struct hideep_ts *ts)
@@ -462,7 +467,9 @@ static int hideep_program_nvm(struct hideep_ts *ts,u32 addr =0 ;int error; -hideep_nvm_unlock (ts); + error =hideep_nvm_unlock (ts); +if (error) +return error;while (ucode_len >0 ) { xfer_len =min_t (size_t, ucode_len,HIDEEP_NVM_PAGE_SIZE );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 54/149 ALSA: bebob: add support for ToneWeal FW66
In reply to Greg Kroah-HartmanFrom: Takashi Sakamoto <[email protected]>
[ Upstream commit 50ebe56222bfa0911a932930f9229ee5995508d9 ]
A user of FFADO project reported the issue of ToneWeal FW66. As a result, the device is identified as one of applications of BeBoB solution.
I note that in the report the device returns contradictory result in plug discovery process for audio subunit. Fortunately ALSA BeBoB driver doesn't perform it thus it's likely to handle the device without issues.
I receive no reaction to test request for this patch yet, however it would be worth to add support for it.
daniel@gibbonmoon:/sys/bus/firewire/devices/fw1$ grep -r . * Binary file config_rom matches dev:244:1 guid:0x0023270002000000 hardware_version:0x000002 is_local:0 model:0x020002 model_name:FW66 power/runtime_active_time:0 power/runtime_active_kids:0 power/runtime_usage:0 power/runtime_status:unsupported power/async:disabled power/runtime_suspended_time:0 power/runtime_enabled:disabled power/control:auto subsystem/drivers_autoprobe:1 uevent:MAJOR=244 uevent:MINOR=1 uevent:DEVNAME=fw1 units:0x00a02d:0x010001 vendor:0x002327 vendor_name:ToneWeal fw1.0/uevent:MODALIAS=ieee1394:ven00002327mo00020002sp0000A02Dver00010001 fw1.0/power/runtime_active_time:0 fw1.0/power/runtime_active_kids:0 fw1.0/power/runtime_usage:0 fw1.0/power/runtime_status:unsupported fw1.0/power/async:disabled fw1.0/power/runtime_suspended_time:0 fw1.0/power/runtime_enabled:disabled fw1.0/power/control:auto fw1.0/model:0x020002 fw1.0/rom_index:15 fw1.0/specifier_id:0x00a02d fw1.0/model_name:FW66 fw1.0/version:0x010001 fw1.0/modalias:ieee1394:ven00002327mo00020002sp0000A02Dver00010001
Cc: Daniel Jozsef <[email protected]>
Reference: https://lore.kernel.org/alsa-devel/20200119164335.GA11974@workstation/
--- sound/firewire/Kconfig | 1 + sound/firewire/bebob/bebob.c | 3 +++ 2 files changed, 4 insertions(+)
sound/firewire/Kconfig +1 -0
@@ -110,6 +110,7 @@ config SND_BEBOB * M-Audio Ozonic/NRV10/ProfireLightBridge * M-Audio FireWire 1814/ProjectMix IO * Digidesign Mbox 2 Pro + * ToneWeal FW66 To compile this driver as a module, choose M here: the module will be called snd-bebob.
sound/firewire/bebob/bebob.c +3 -0
@@ -59,6 +59,7 @@ static DECLARE_BITMAP(devices_used, SNDRV_CARDS);#define VEN_MAUDIO1 0x00000d6c#define VEN_MAUDIO2 0x000007f5#define VEN_DIGIDESIGN 0x00a07e +#define OUI_SHOUYO 0x002327#define MODEL_FOCUSRITE_SAFFIRE_BOTH 0x00000000#define MODEL_MAUDIO_AUDIOPHILE_BOTH 0x00010060
@@ -486,6 +487,8 @@ static const struct ieee1394_device_id bebob_id_table[] = { &maudio_special_spec),/* Digidesign Mbox 2 Pro */ SND_BEBOB_DEV_ENTRY (VEN_DIGIDESIGN ,0x0000a9 , &spec_normal), +// Toneweal FW66. + SND_BEBOB_DEV_ENTRY(OUI_SHOUYO, 0x020002, &spec_normal),/* IDs are unknown but able to be supported */ /* Apogee, Mini-ME Firewire */ /* Apogee, Mini-DAC Firewire */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 55/149 ALSA: usb-audio: scarlett2: Fix 18i8 Gen 2 PCM Input count
In reply to Greg Kroah-HartmanFrom: Geoffrey D. Bennett <[email protected]>
[ Upstream commit c5210f213456383482b4a77c5310282a89a106b5 ]
The 18i8 Gen 2 has 8 PCM Inputs, not 20. Fix the ports entry in s18i8_gen2_info.
--- sound/usb/mixer_scarlett_gen2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/usb/mixer_scarlett_gen2.c +1 -1
@@ -356,7 +356,7 @@ static const struct scarlett2_device_info s18i8_gen2_info = { }, [SCARLETT2_PORT_TYPE_PCM] = { .id = 0x600, - .num = { 20, 18, 18, 14, 10 }, + .num = { 8, 18, 18, 14, 10 }, .src_descr = "PCM %d", .src_num_offset = 1, .dst_descr = "PCM %02d Capture"
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 56/149 ALSA: usb-audio: scarlett2: Fix data_mutex lock
In reply to Greg Kroah-HartmanFrom: Geoffrey D. Bennett <[email protected]>
[ Upstream commit 9b5ddea9ce5a68d7d2bedcb69901ac2a86c96c7b ]
The private->vol_updated flag was being checked outside of the mutex_lock/unlock() of private->data_mutex leading to the volume data being fetched twice from the device unnecessarily or old volume data being returned.
Update scarlett2_*_ctl_get() and include the private->vol_updated flag check inside the critical region.
--- sound/usb/mixer_scarlett_gen2.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-)
sound/usb/mixer_scarlett_gen2.c +9 -12
@@ -1033,11 +1033,10 @@ static int scarlett2_master_volume_ctl_get(struct snd_kcontrol *kctl,struct usb_mixer_interface *mixer = elem->head.mixer;struct scarlett2_mixer_data *private = mixer->private_data; -if (private->vol_updated) { -mutex_lock (&private->data_mutex); +mutex_lock (&private->data_mutex); +if (private->vol_updated)scarlett2_update_volumes (mixer); -mutex_unlock (&private->data_mutex); - } +mutex_unlock (&private->data_mutex); ucontrol->value.integer.value[0 ] = private->master_vol;return 0 ;
@@ -1051,11 +1050,10 @@ static int scarlett2_volume_ctl_get(struct snd_kcontrol *kctl,struct scarlett2_mixer_data *private = mixer->private_data;int index = elem->control; -if (private->vol_updated) { -mutex_lock (&private->data_mutex); +mutex_lock (&private->data_mutex); +if (private->vol_updated)scarlett2_update_volumes (mixer); -mutex_unlock (&private->data_mutex); - } +mutex_unlock (&private->data_mutex); ucontrol->value.integer.value[0 ] = private->vol[index];return 0 ;
@@ -1319,11 +1317,10 @@ static int scarlett2_button_ctl_get(struct snd_kcontrol *kctl,struct usb_mixer_interface *mixer = elem->head.mixer;struct scarlett2_mixer_data *private = mixer->private_data; -if (private->vol_updated) { -mutex_lock (&private->data_mutex); +mutex_lock (&private->data_mutex); +if (private->vol_updated)scarlett2_update_volumes (mixer); -mutex_unlock (&private->data_mutex); - } +mutex_unlock (&private->data_mutex); ucontrol->value.enumerated.item[0 ] = private->buttons[elem->control];return 0 ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 57/149 ALSA: usb-audio: scarlett2: Fix scarlett2_*_ctl_put() return values
In reply to Greg Kroah-HartmanFrom: Geoffrey D. Bennett <[email protected]>
[ Upstream commit c5d8e008032f3cd5f266d552732973a960b0bd4b ]
Mixer control put callbacks should return 1 if the value is changed. Fix the sw_hw, level, pad, and button controls accordingly.
--- sound/usb/mixer_scarlett_gen2.c | 8 ++++++++ 1 file changed, 8 insertions(+)
sound/usb/mixer_scarlett_gen2.c +8 -0
@@ -1184,6 +1184,8 @@ static int scarlett2_sw_hw_enum_ctl_put(struct snd_kcontrol *kctl,/* Send SW/HW switch change to the device */ err =scarlett2_usb_set_config (mixer,SCARLETT2_CONFIG_SW_HW_SWITCH , index, val); +if (err ==0 ) + err =1 ; unlock:mutex_unlock (&private->data_mutex);
@@ -1244,6 +1246,8 @@ static int scarlett2_level_enum_ctl_put(struct snd_kcontrol *kctl,/* Send switch change to the device */ err =scarlett2_usb_set_config (mixer,SCARLETT2_CONFIG_LEVEL_SWITCH , index, val); +if (err ==0 ) + err =1 ; unlock:mutex_unlock (&private->data_mutex);
@@ -1294,6 +1298,8 @@ static int scarlett2_pad_ctl_put(struct snd_kcontrol *kctl,/* Send switch change to the device */ err =scarlett2_usb_set_config (mixer,SCARLETT2_CONFIG_PAD_SWITCH , index, val); +if (err ==0 ) + err =1 ; unlock:mutex_unlock (&private->data_mutex);
@@ -1349,6 +1355,8 @@ static int scarlett2_button_ctl_put(struct snd_kcontrol *kctl,/* Send switch change to the device */ err =scarlett2_usb_set_config (mixer,SCARLETT2_CONFIG_BUTTONS , index, val); +if (err ==0 ) + err =1 ; unlock:mutex_unlock (&private->data_mutex);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 58/149 usb: gadget: f_hid: fix endianness issue with descriptors
In reply to Greg Kroah-HartmanFrom: Ruslan Bilovol <[email protected]>
[ Upstream commit 33cb46c4676d01956811b68a29157ea969a5df70 ]
Running sparse checker it shows warning message about incorrect endianness used for descriptor initialization:
| f_hid.c:91:43: warning: incorrect type in initializer (different base types) | f_hid.c:91:43: expected restricted __le16 [usertype] bcdHID | f_hid.c:91:43: got int
Fixing issue with cpu_to_le16() macro, however this is not a real issue as the value is the same both endians.
--- drivers/usb/gadget/function/f_hid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/gadget/function/f_hid.c +1 -1
@@ -88,7 +88,7 @@ static struct usb_interface_descriptor hidg_interface_desc = {static struct hid_descriptor hidg_desc = { .bLength =sizeof hidg_desc, .bDescriptorType =HID_DT_HID , - .bcdHID =0x0101 , + .bcdHID =cpu_to_le16 (0x0101 ), .bCountryCode =0x00 , .bNumDescriptors =0x1 ,/*.desc[0].bDescriptorType = DYNAMIC */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 59/149 usb: gadget: hid: fix error return code in hid_bind()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit 88693f770bb09c196b1eb5f06a484a254ecb9924 ]
Fix to return a negative error code from the error handling case instead of 0.
--- drivers/usb/gadget/legacy/hid.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/usb/gadget/legacy/hid.c +3 -1
@@ -171,8 +171,10 @@ static int hid_bind(struct usb_composite_dev *cdev)struct usb_descriptor_header *usb_desc; usb_desc =usb_otg_descriptor_alloc (gadget); -if (!usb_desc) +if (!usb_desc) { + status = -ENOMEM ; goto put; + }usb_otg_descriptor_init (gadget, usb_desc); otg_desc[0 ] = usb_desc; otg_desc[1 ] =NULL ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 60/149 powerpc/boot: Fixup device-tree on little endian
In reply to Greg Kroah-HartmanFrom: Benjamin Herrenschmidt <[email protected]>
[ Upstream commit c93f80849bdd9b45d834053ae1336e28f0026c84 ]
This fixes the core devtree.c functions and the ns16550 UART backend.
--- arch/powerpc/boot/devtree.c | 59 +++++++++++++++++++++---------------- arch/powerpc/boot/ns16550.c | 9 ++++-- 2 files changed, 41 insertions(+), 27 deletions(-)
arch/powerpc/boot/devtree.c +34 -25
@@ -13,6 +13,7 @@#include "string.h" #include "stdio.h" #include "ops.h" +#include "of.h" void dt_fixup_memory (u64 start,u64 size) {
@@ -23,21 +24,25 @@ void dt_fixup_memory(u64 start, u64 size) root =finddevice ("/" );if (getprop (root,"#address-cells" , &naddr,sizeof (naddr)) <0 ) naddr =2 ; +else + naddr =be32_to_cpu (naddr);if (naddr <1 || naddr >2 )fatal ("Can't cope with #address-cells == %d in /\n\r" , naddr);if (getprop (root,"#size-cells" , &nsize,sizeof (nsize)) <0 ) nsize =1 ; +else + nsize =be32_to_cpu (nsize);if (nsize <1 || nsize >2 )fatal ("Can't cope with #size-cells == %d in /\n\r" , nsize); i =0 ;if (naddr ==2 ) - memreg[i++] = start >>32 ; - memreg[i++] = start &0xffffffff ; + memreg[i++] =cpu_to_be32 (start >>32 ); + memreg[i++] =cpu_to_be32 (start &0xffffffff );if (nsize ==2 ) - memreg[i++] = size >>32 ; - memreg[i++] = size &0xffffffff ; + memreg[i++] =cpu_to_be32 (size >>32 ); + memreg[i++] =cpu_to_be32 (size &0xffffffff ); memory =finddevice ("/memory" );if (! memory) {
@@ -45,9 +50,9 @@ void dt_fixup_memory(u64 start, u64 size)setprop_str (memory,"device_type" ,"memory" ); } -printf ("Memory <- <0x%x" , memreg[0 ]); +printf ("Memory <- <0x%x" ,be32_to_cpu (memreg[0 ]));for (i =1 ; i < (naddr + nsize); i++) -printf (" 0x%x" , memreg[i]); +printf (" 0x%x" ,be32_to_cpu (memreg[i]));printf ("> (%ldMB)\n\r" , (unsigned long )(size >>20 ));setprop (memory,"reg" , memreg, (naddr + nsize)*sizeof (u32));
@@ -65,10 +70,10 @@ void dt_fixup_cpu_clocks(u32 cpu, u32 tb, u32 bus)printf ("CPU bus-frequency <- 0x%x (%dMHz)\n\r" , bus,MHZ (bus));while ((devp =find_node_by_devtype (devp,"cpu" ))) { -setprop_val (devp,"clock-frequency" , cpu); -setprop_val (devp,"timebase-frequency" , tb); +setprop_val (devp,"clock-frequency" ,cpu_to_be32 (cpu)); +setprop_val (devp,"timebase-frequency" ,cpu_to_be32 (tb));if (bus >0 ) -setprop_val (devp,"bus-frequency" , bus); +setprop_val (devp,"bus-frequency" ,cpu_to_be32 (bus)); } timebase_period_ns =1000000000 / tb;
@@ -80,7 +85,7 @@ void dt_fixup_clock(const char *path, u32 freq)if (devp) {printf ("%s: clock-frequency <- %x (%dMHz)\n\r" , path, freq,MHZ (freq)); -setprop_val (devp,"clock-frequency" , freq); +setprop_val (devp,"clock-frequency" ,cpu_to_be32 (freq)); } }
@@ -133,8 +138,12 @@ void dt_get_reg_format(void *node, u32 *naddr, u32 *nsize) {if (getprop (node,"#address-cells" , naddr,4 ) !=4 ) *naddr =2 ; +else + *naddr =be32_to_cpu (*naddr);if (getprop (node,"#size-cells" , nsize,4 ) !=4 ) *nsize =1 ; +else + *nsize =be32_to_cpu (*nsize); }static void copy_val (u32 *dest,u32 *src,int naddr)
@@ -163,9 +172,9 @@ static int add_reg(u32 *reg, u32 *add, int naddr)int i, carry =0 ;for (i =MAX_ADDR_CELLS -1 ; i >=MAX_ADDR_CELLS - naddr; i--) { -u64 tmp = (u64 )reg[i] + add[i] + carry; +u64 tmp = (u64 )be32_to_cpu (reg[i]) +be32_to_cpu (add[i]) + carry; carry = tmp >>32 ; - reg[i] = (u32 )tmp; + reg[i] =cpu_to_be32 ((u32 )tmp); }return !carry;
@@ -180,18 +189,18 @@ static int compare_reg(u32 *reg, u32 *range, u32 *rangesize)u32 end;for (i =0 ; i <MAX_ADDR_CELLS ; i++) { -if (reg[i] < range[i]) +if (be32_to_cpu (reg[i]) <be32_to_cpu (range[i]))return 0 ; -if (reg[i] > range[i]) +if (be32_to_cpu (reg[i]) >be32_to_cpu (range[i]))break ; }for (i =0 ; i <MAX_ADDR_CELLS ; i++) { - end = range[i] + rangesize[i]; + end =be32_to_cpu (range[i]) +be32_to_cpu (rangesize[i]); -if (reg[i] < end) +if (be32_to_cpu (reg[i]) < end)break ; -if (reg[i] > end) +if (be32_to_cpu (reg[i]) > end)return 0 ; }
@@ -240,7 +249,6 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,return 0 ;dt_get_reg_format (parent, &naddr, &nsize); -if (nsize >2 )return 0 ;
@@ -252,10 +260,10 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,copy_val (last_addr, prop_buf + offset, naddr); - ret_size = prop_buf[offset + naddr]; + ret_size =be32_to_cpu (prop_buf[offset + naddr]);if (nsize ==2 ) { ret_size <<=32 ; - ret_size |= prop_buf[offset + naddr +1 ]; + ret_size |=be32_to_cpu (prop_buf[offset + naddr +1 ]); }for (;;) {
@@ -278,7 +286,6 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr, offset =find_range (last_addr, prop_buf, prev_naddr, naddr, prev_nsize, buflen /4 ); -if (offset <0 )return 0 ;
@@ -296,8 +303,7 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,if (naddr >2 )return 0 ; - ret_addr = ((u64 )last_addr[2 ] <<32 ) | last_addr[3 ]; - + ret_addr = ((u64 )be32_to_cpu (last_addr[2 ]) <<32 ) |be32_to_cpu (last_addr[3 ]);if (sizeof (void *) ==4 && (ret_addr >=0x100000000ULL || ret_size >0x100000000ULL || ret_addr + ret_size >0x100000000ULL ))
@@ -350,11 +356,14 @@ int dt_is_compatible(void *node, const char *compat)int dt_get_virtual_reg (void *node,void **addr,int nres) {unsigned long xaddr; -int n; +int n, i; n =getprop (node,"virtual-reg" , addr, nres *4 ); -if (n >0 ) +if (n >0 ) { +for (i =0 ; i < n/4 ; i ++) + ((u32 *)addr)[i] =be32_to_cpu (((u32 *)addr)[i]);return n /4 ; + }for (n =0 ; n < nres; n++) {if (!dt_xlate_reg (node, n, &xaddr,NULL ))
arch/powerpc/boot/ns16550.c +7 -2
@@ -15,6 +15,7 @@#include "stdio.h" #include "io.h" #include "ops.h" +#include "of.h" #define UART_DLL 0/* Out: Divisor Latch Low */ #define UART_DLM 1/* Out: Divisor Latch High */
@@ -58,16 +59,20 @@ int ns16550_console_init(void *devp, struct serial_console_data *scdp)int n;u32 reg_offset; -if (dt_get_virtual_reg (devp, (void **)®_base,1 ) <1 ) +if (dt_get_virtual_reg (devp, (void **)®_base,1 ) <1 ) { +printf ("virt reg parse fail...\r\n" );return -1 ; + } n =getprop (devp,"reg-offset" , ®_offset,sizeof (reg_offset));if (n ==sizeof (reg_offset)) - reg_base += reg_offset; + reg_base +=be32_to_cpu (reg_offset); n =getprop (devp,"reg-shift" , ®_shift,sizeof (reg_shift));if (n !=sizeof (reg_shift)) reg_shift =0 ; +else + reg_shift =be32_to_cpu (reg_shift); scdp->open = ns16550_open; scdp->putc = ns16550_putc;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 61/149 ASoC: Intel: kbl_da7219_max98357a: shrink platform_id below 20 characters
In reply to Greg Kroah-HartmanFrom: Pierre-Louis Bossart <[email protected]>
[ Upstream commit 94efd726b947f265bd313605c9f73edec5469d65 ]
Sparse throws the following warnings:
sound/soc/intel/boards/kbl_da7219_max98357a.c:647:25: error: too long initializer-string for array of char(no space for nul char)
Fix by using the 'mx' acronym for Maxim.
--- sound/soc/intel/boards/kbl_da7219_max98357a.c | 4 ++-- sound/soc/intel/common/soc-acpi-intel-kbl-match.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)
sound/soc/intel/boards/kbl_da7219_max98357a.c +2 -2
@@ -607,7 +607,7 @@ static int kabylake_audio_probe(struct platform_device *pdev)static const struct platform_device_id kbl_board_ids[] = { { - .name ="kbl_da7219_max98357a" , + .name ="kbl_da7219_mx98357a" , .driver_data = (kernel_ulong_t)&kabylake_audio_card_da7219_m98357a, },
@@ -629,4 +629,4 @@ module_platform_driver(kabylake_audio)MODULE_DESCRIPTION ("Audio Machine driver-DA7219 & MAX98357A in I2S mode" );MODULE_AUTHOR ("Naveen Manohar <[email protected]>" );MODULE_LICENSE ("GPL v2" ); -MODULE_ALIAS ("platform:kbl_da7219_max98357a" ); +MODULE_ALIAS ("platform:kbl_da7219_mx98357a" );
sound/soc/intel/common/soc-acpi-intel-kbl-match.c +1 -1
@@ -113,7 +113,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_kbl_machines[] = { }, { .id = "DLGS7219", - .drv_name = "kbl_da7219_max98373", + .drv_name = "kbl_da7219_mx98373", .fw_filename = "intel/dsp_fw_kbl.bin", .machine_quirk = snd_soc_acpi_codec_list, .quirk_data = &kbl_7219_98373_codecs,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 62/149 backlight: lm3630a: Fix return code of .update_status() callback
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit b9481a667a90ec739995e85f91f3672ca44d6ffa ]
According to <linux/backlight.h> .update_status() is supposed to return 0 on success and a negative error code otherwise. Adapt lm3630a_bank_a_update_status() and lm3630a_bank_b_update_status() to actually do it.
While touching that also add the error code to the failure message.
--- drivers/video/backlight/lm3630a_bl.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/video/backlight/lm3630a_bl.c +6 -6
@@ -188,7 +188,7 @@ static int lm3630a_bank_a_update_status(struct backlight_device *bl)if ((pwm_ctrl &LM3630A_PWM_BANK_A ) !=0 ) {lm3630a_pwm_ctrl (pchip, bl->props.brightness, bl->props.max_brightness); -return bl->props.brightness; +return 0 ; }/* disable sleep */
@@ -208,8 +208,8 @@ static int lm3630a_bank_a_update_status(struct backlight_device *bl)return 0 ; out_i2c_err: -dev_err (pchip->dev,"i2c failed to access\n" ); -return bl->props.brightness; +dev_err (pchip->dev,"i2c failed to access (%pe)\n" ,ERR_PTR (ret)); +return ret; }static int lm3630a_bank_a_get_brightness (struct backlight_device *bl)
@@ -265,7 +265,7 @@ static int lm3630a_bank_b_update_status(struct backlight_device *bl)if ((pwm_ctrl &LM3630A_PWM_BANK_B ) !=0 ) {lm3630a_pwm_ctrl (pchip, bl->props.brightness, bl->props.max_brightness); -return bl->props.brightness; +return 0 ; }/* disable sleep */
@@ -285,8 +285,8 @@ static int lm3630a_bank_b_update_status(struct backlight_device *bl)return 0 ; out_i2c_err: -dev_err (pchip->dev,"i2c failed to access REG_CTRL\n" ); -return bl->props.brightness; +dev_err (pchip->dev,"i2c failed to access (%pe)\n" ,ERR_PTR (ret)); +return ret; }static int lm3630a_bank_b_get_brightness (struct backlight_device *bl)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 63/149 ALSA: hda: Add IRQ check for platform_get_irq()
In reply to Greg Kroah-HartmanFrom: Jiajun Cao <[email protected]>
[ Upstream commit 8c13212443230d03ff25014514ec0d53498c0912 ]
The function hda_tegra_first_init() neglects to check the return value after executing platform_get_irq().
hda_tegra_first_init() should check the return value (if negative error number) for errors so as to not pass a negative value to the devm_request_irq().
Fix it by adding a check for the return value irq_id.
--- sound/pci/hda/hda_tegra.c | 3 +++ 1 file changed, 3 insertions(+)
sound/pci/hda/hda_tegra.c +3 -0
@@ -292,6 +292,9 @@ static int hda_tegra_first_init(struct azx *chip, struct platform_device *pdev)const char *sname, *drv_name ="tegra-hda" ;struct device_node *np = pdev->dev.of_node; +if (irq_id <0 ) +return irq_id; + err =hda_tegra_init_chip (chip, pdev);if (err)return err;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 64/149 ALSA: usb-audio: scarlett2: Fix 6i6 Gen 2 line out descriptions
In reply to Greg Kroah-HartmanFrom: Geoffrey D. Bennett <[email protected]>
[ Upstream commit c712c6c0ff2d60478582e337185bcdd520a7dc2e ]
There are two headphone outputs, and they map to the four analogue outputs.
--- sound/usb/mixer_scarlett_gen2.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
sound/usb/mixer_scarlett_gen2.c +4 -4
@@ -254,10 +254,10 @@ static const struct scarlett2_device_info s6i6_gen2_info = { .pad_input_count = 2, .line_out_descrs = { -"Monitor L" , -"Monitor R" , -"Headphones L" , - "Headphones R", +"Headphones 1 L" , +"Headphones 1 R" , +"Headphones 2 L" , + "Headphones 2 R", }, .ports = {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 65/149 staging: rtl8723bs: fix macro value for 2.4Ghz only device
In reply to Greg Kroah-HartmanFrom: Fabio Aiuto <[email protected]>
[ Upstream commit 6d490a27e23c5fb79b766530016ab8665169498e ]
fix IQK_Matrix_Settings_NUM macro value to 14 which is the max channel number value allowed in a 2.4Ghz device.
--- drivers/staging/rtl8723bs/hal/odm.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/staging/rtl8723bs/hal/odm.h +1 -4
@@ -197,10 +197,7 @@ typedef struct _ODM_RATE_ADAPTIVE {#define AVG_THERMAL_NUM 8#define IQK_Matrix_REG_NUM 8 -#define IQK_Matrix_Settings_NUM (14 + 24 + 21)/* Channels_2_4G_NUM -* + Channels_5G_20M_NUM -* + Channels_5G -*/ +#define IQK_Matrix_Settings_NUM 14/* Channels_2_4G_NUM */ #define DM_Type_ByFW 0#define DM_Type_ByDriver 1
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 66/149 intel_th: Wait until port is in reset before programming it
In reply to Greg Kroah-HartmanFrom: Alexander Shishkin <[email protected]>
[ Upstream commit ab1afed701d2db7eb35c1a2526a29067a38e93d1 ]
Some devices don't drain their pipelines if we don't make sure that the corresponding output port is in reset before programming it for a new trace capture, resulting in bits of old trace appearing in the new trace capture. Fix that by explicitly making sure the reset is asserted before programming new trace capture.
--- drivers/hwtracing/intel_th/core.c | 17 +++++++++++++++++ drivers/hwtracing/intel_th/gth.c | 16 ++++++++++++++++ drivers/hwtracing/intel_th/intel_th.h | 3 +++ 3 files changed, 36 insertions(+)
drivers/hwtracing/intel_th/core.c +17 -0
@@ -215,6 +215,22 @@ static ssize_t port_show(struct device *dev, struct device_attribute *attr,static DEVICE_ATTR_RO (port); +static void intel_th_trace_prepare (struct intel_th_device *thdev) +{ +struct intel_th_device *hub =to_intel_th_hub (thdev); +struct intel_th_driver *hubdrv =to_intel_th_driver (hub->dev.driver); + +if (hub->type !=INTEL_TH_SWITCH ) +return ; + +if (thdev->type !=INTEL_TH_OUTPUT ) +return ; + +pm_runtime_get_sync (&thdev->dev); + hubdrv->prepare (hub, &thdev->output); +pm_runtime_put (&thdev->dev); +} +static int intel_th_output_activate (struct intel_th_device *thdev) { struct intel_th_driver *thdrv =
@@ -235,6 +251,7 @@ static int intel_th_output_activate(struct intel_th_device *thdev)if (ret) goto fail_put; +intel_th_trace_prepare (thdev);if (thdrv->activate) ret = thdrv->activate (thdev);else
drivers/hwtracing/intel_th/gth.c +16 -0
@@ -564,6 +564,21 @@ static void gth_tscu_resync(struct gth_device *gth)iowrite32 (reg, gth->base +REG_TSCU_TSUCTRL ); } +static void intel_th_gth_prepare (struct intel_th_device *thdev, +struct intel_th_output *output) +{ +struct gth_device *gth =dev_get_drvdata (&thdev->dev); +int count; + +/* +* Wait until the output port is in reset before we start +* programming it. +*/ +for (count =GTH_PLE_WAITLOOP_DEPTH ; + count && !(gth_output_get (gth, output->port) &BIT (5 )); count--) +cpu_relax (); +} +/** * intel_th_gth_enable() - enable tracing to an output device * @thdev: GTH device
@@ -815,6 +830,7 @@ static struct intel_th_driver intel_th_gth_driver = { .assign = intel_th_gth_assign, .unassign = intel_th_gth_unassign, .set_output = intel_th_gth_set_output, + .prepare = intel_th_gth_prepare, .enable = intel_th_gth_enable, .trig_switch = intel_th_gth_switch, .disable = intel_th_gth_disable,
drivers/hwtracing/intel_th/intel_th.h +3 -0
@@ -143,6 +143,7 @@ intel_th_output_assigned(struct intel_th_device *thdev)* @remove: remove method * @assign: match a given output type device against available outputs * @unassign: deassociate an output type device from an output port +* @prepare: prepare output port for tracing * @enable: enable tracing for a given output device * @disable: disable tracing for a given output device * @irq: interrupt callback
@@ -164,6 +165,8 @@ struct intel_th_driver { struct intel_th_device *othdev);void (*unassign)(struct intel_th_device *thdev,struct intel_th_device *othdev); +void (*prepare)(struct intel_th_device *thdev, +struct intel_th_output *output);void (*enable)(struct intel_th_device *thdev,struct intel_th_output *output); void (*trig_switch)(struct intel_th_device *thdev,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 67/149 i2c: core: Disable client irq on reboot/shutdown
In reply to Greg Kroah-HartmanFrom: Dmitry Torokhov <[email protected]>
[ Upstream commit b64210f2f7c11c757432ba3701d88241b2b98fb1 ]
If an i2c client receives an interrupt during reboot or shutdown it may be too late to service it by making an i2c transaction on the bus because the i2c controller has already been shutdown. This can lead to system hangs if the i2c controller tries to make a transfer that is doomed to fail because the access to the i2c pins is already shut down, or an iommu translation has been torn down so i2c controller register access doesn't work.
Let's simply disable the irq if there isn't a shutdown callback for an i2c client when there is an irq associated with the device. This will make sure that irqs don't come in later than the time that we can handle it. We don't do this if the i2c client device already has a shutdown callback because presumably they're doing the right thing and quieting the device so irqs don't come in after the shutdown callback returns.
[[email protected]: Dropped newline, added commit text, added interrupt.h for robot build error]
--- drivers/i2c/i2c-core-base.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/i2c/i2c-core-base.c +3 -0
@@ -24,6 +24,7 @@#include <linux/i2c-smbus.h> #include <linux/idr.h> #include <linux/init.h> +#include <linux/interrupt.h> #include <linux/irqflags.h> #include <linux/jump_label.h> #include <linux/kernel.h>
@@ -459,6 +460,8 @@ static void i2c_device_shutdown(struct device *dev) driver =to_i2c_driver (dev->driver);if (driver->shutdown) driver->shutdown (client); +else if (client->irq >0 ) +disable_irq (client->irq); }static void i2c_client_dev_release (struct device *dev)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 68/149 lib/decompress_unlz4.c: correctly handle zero-padding around initrds.
In reply to Greg Kroah-HartmanFrom: Dimitri John Ledkov <[email protected]>
[ Upstream commit 2c484419efc09e7234c667aa72698cb79ba8d8ed ]
lz4 compatible decompressor is simple. The format is underspecified and relies on EOF notification to determine when to stop. Initramfs buffer format[1] explicitly states that it can have arbitrary number of zero padding. Thus when operating without a fill function, be extra careful to ensure that sizes less than 4, or apperantly empty chunksizes are treated as EOF.
To test this I have created two cpio initrds, first a normal one, main.cpio. And second one with just a single /test-file with content "second" second.cpio. Then i compressed both of them with gzip, and with lz4 -l. Then I created a padding of 4 bytes (dd if=/dev/zero of=pad4 bs=1 count=4). To create four testcase initrds:
1) main.cpio.gzip + extra.cpio.gzip = pad0.gzip
2) main.cpio.lz4 + extra.cpio.lz4 = pad0.lz4
3) main.cpio.gzip + pad4 + extra.cpio.gzip = pad4.gzip
4) main.cpio.lz4 + pad4 + extra.cpio.lz4 = pad4.lz4
The pad4 test-cases replicate the initrd load by grub, as it pads and aligns every initrd it loads.
All of the above boot, however /test-file was not accessible in the initrd for the testcase #4, as decoding in lz4 decompressor failed. Also an error message printed which usually is harmless.
Whith a patched kernel, all of the above testcases now pass, and /test-file is accessible.
This fixes lz4 initrd decompress warning on every boot with grub. And more importantly this fixes inability to load multiple lz4 compressed initrds with grub. This patch has been shipping in Ubuntu kernels since January 2021.
[1] ./Documentation/driver-api/early-userspace/buffer-format.rst
--- lib/decompress_unlz4.c | 8 ++++++++ 1 file changed, 8 insertions(+)
lib/decompress_unlz4.c +8 -0
@@ -112,6 +112,9 @@ STATIC inline int INIT unlz4(u8 *input, long in_len,error ("data corrupted" ); goto exit_2; } + }else if (size <4 ) { +/* empty or end-of-file */ + goto exit_3; } chunksize =get_unaligned_le32 (inp);
@@ -125,6 +128,10 @@ STATIC inline int INIT unlz4(u8 *input, long in_len,continue ; } +if (!fill && chunksize ==0 ) { +/* empty or end-of-file */ + goto exit_3; + }if (posp) *posp +=4 ;
@@ -184,6 +191,7 @@ STATIC inline int INIT unlz4(u8 *input, long in_len, } } +exit_3: ret =0 ; exit_2:if (!input)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 69/149 power: supply: sc27xx: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 603fcfb9d4ec1cad8d66d3bb37f3613afa8a661a ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/power/supply/sc27xx_fuel_gauge.c | 1 + 1 file changed, 1 insertion(+)
drivers/power/supply/sc27xx_fuel_gauge.c +1 -0
@@ -1215,6 +1215,7 @@ static const struct of_device_id sc27xx_fgu_of_match[] = { { .compatible = "sprd,sc2731-fgu", }, { } }; +MODULE_DEVICE_TABLE (of, sc27xx_fgu_of_match);static struct platform_driver sc27xx_fgu_driver = { .probe = sc27xx_fgu_probe,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 70/149 power: supply: sc2731_charger: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 2aac79d14d76879c8e307820b31876e315b1b242 ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/power/supply/sc2731_charger.c | 1 + 1 file changed, 1 insertion(+)
drivers/power/supply/sc2731_charger.c +1 -0
@@ -524,6 +524,7 @@ static const struct of_device_id sc2731_charger_of_match[] = { { .compatible = "sprd,sc2731-charger", }, { } }; +MODULE_DEVICE_TABLE (of, sc2731_charger_of_match);static struct platform_driver sc2731_charger_driver = { .driver = {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 71/149 pwm: spear: Dont modify HW state in .remove callback
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit b601a18f12383001e7a8da238de7ca1559ebc450 ]
A consumer is expected to disable a PWM before calling pwm_put(). And if they didn't there is hopefully a good reason (or the consumer needs fixing). Also if disabling an enabled PWM was the right thing to do, this should better be done in the framework instead of in each low level driver.
So drop the hardware modification from the .remove() callback.
--- drivers/pwm/pwm-spear.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/pwm/pwm-spear.c +0 -4
@@ -231,10 +231,6 @@ static int spear_pwm_probe(struct platform_device *pdev)static int spear_pwm_remove (struct platform_device *pdev) {struct spear_pwm_chip *pc =platform_get_drvdata (pdev); -int i; - -for (i =0 ; i <NUM_PWM ; i++) -pwm_disable (&pc->chip.pwms[i]);/* clk was prepared in probe, hence unprepare it here */ clk_unprepare (pc->clk);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 72/149 power: supply: ab8500: Avoid NULL pointers
In reply to Greg Kroah-HartmanFrom: Linus Walleij <[email protected]>
[ Upstream commit 5bcb5087c9dd3dca1ff0ebd8002c5313c9332b56 ]
Sometimes the code will crash because we haven't enabled AC or USB charging and thus not created the corresponding psy device. Fix it by checking that it is there before notifying.
--- drivers/power/supply/ab8500_charger.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
drivers/power/supply/ab8500_charger.c +17 -1
@@ -407,6 +407,14 @@ disable_otp:static void ab8500_power_supply_changed (struct ab8500_charger *di,struct power_supply *psy) { +/* +* This happens if we get notifications or interrupts and +* the platform has been configured not to support one or +* other type of charging. +*/ +if (!psy) +return ; +if (di->autopower_cfg) { if (!di->usb.charger_connected && !di->ac.charger_connected &&
@@ -433,7 +441,15 @@ static void ab8500_charger_set_usb_connected(struct ab8500_charger *di,if (!connected) di->flags.vbus_drop_end = false; -sysfs_notify (&di->usb_chg.psy->dev.kobj,NULL ,"present" ); +/* +* Sometimes the platform is configured not to support +* USB charging and no psy has been created, but we still +* will get these notifications. +*/ +if (di->usb_chg.psy) { +sysfs_notify (&di->usb_chg.psy->dev.kobj,NULL , +"present" ); + }if (connected) {mutex_lock (&di->charger_attached_mutex);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 73/149 power: supply: max17042: Do not enforce (incorrect) interrupt trigger type
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 7fbf6b731bca347700e460d94b130f9d734b33e9 ]
Interrupt line can be configured on different hardware in different way, even inverted. Therefore driver should not enforce specific trigger type - edge falling - but instead rely on Devicetree to configure it.
The Maxim 17047/77693 datasheets describe the interrupt line as active low with a requirement of acknowledge from the CPU therefore the edge falling is not correct.
The interrupt line is shared between PMIC and RTC driver, so using level sensitive interrupt is here especially important to avoid races. With an edge configuration in case if first PMIC signals interrupt followed shortly after by the RTC, the interrupt might not be yet cleared/acked thus the second one would not be noticed.
--- drivers/power/supply/max17042_battery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/power/supply/max17042_battery.c +1 -1
@@ -1076,7 +1076,7 @@ static int max17042_probe(struct i2c_client *client, }if (client->irq) { -unsigned int flags =IRQF_TRIGGER_FALLING |IRQF_ONESHOT ; +unsigned int flags =IRQF_ONESHOT ;/* * On ACPI systems the IRQ may be handled by ACPI-event code,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 74/149 power: reset: gpio-poweroff: add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Bixuan Cui <[email protected]>
[ Upstream commit ed3443fb4df4e140a22f65144546c8a8e1e27f4e ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/power/reset/gpio-poweroff.c | 1 + 1 file changed, 1 insertion(+)
drivers/power/reset/gpio-poweroff.c +1 -0
@@ -90,6 +90,7 @@ static const struct of_device_id of_gpio_poweroff_match[] = { { .compatible = "gpio-poweroff", }, {}, }; +MODULE_DEVICE_TABLE (of, of_gpio_poweroff_match);static struct platform_driver gpio_poweroff_driver = { .probe = gpio_poweroff_probe,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 75/149 ARM: 9087/1: kprobes: test-thumb: fix for LLVM_IAS=1
In reply to Greg Kroah-HartmanFrom: Nick Desaulniers <[email protected]>
[ Upstream commit 8b95a7d90ce8160ac5cffd5bace6e2eba01a871e ]
There's a few instructions that GAS infers operands but Clang doesn't; from what I can tell the Arm ARM doesn't say these are optional.
F5.1.257 TBB, TBH T1 Halfword variant
F5.1.238 STREXD T1 variant
F5.1.84 LDREXD T1 variant
--- arch/arm/probes/kprobes/test-thumb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
arch/arm/probes/kprobes/test-thumb.c +5 -5
@@ -441,21 +441,21 @@ void kprobe_thumb32_test_cases(void) "3: mvn r0, r0 \n\t" "2: nop \n\t") - TEST_RX("tbh [pc, r",7, (9f-(1f+4))>>1,"]", + TEST_RX("tbh [pc, r",7, (9f-(1f+4))>>1,", lsl #1]", "9: \n\t" ".short (2f-1b-4)>>1 \n\t" ".short (3f-1b-4)>>1 \n\t" "3: mvn r0, r0 \n\t" "2: nop \n\t") - TEST_RX("tbh [pc, r",12, ((9f-(1f+4))>>1)+1,"]", + TEST_RX("tbh [pc, r",12, ((9f-(1f+4))>>1)+1,", lsl #1]", "9: \n\t" ".short (2f-1b-4)>>1 \n\t" ".short (3f-1b-4)>>1 \n\t" "3: mvn r0, r0 \n\t" "2: nop \n\t") -TEST_RRX ("tbh [r" ,1 ,9f ,", r" ,14 ,1 ,"]" , +TEST_RRX ("tbh [r" ,1 ,9f ,", r" ,14 ,1 ,", lsl #1]" ,"9: \n\t" ".short (2f-1b-4)>>1 \n\t" ".short (3f-1b-4)>>1 \n\t"
@@ -468,10 +468,10 @@ void kprobe_thumb32_test_cases(void) TEST_UNSUPPORTED("strexb r0, r1, [r2]") TEST_UNSUPPORTED("strexh r0, r1, [r2]") - TEST_UNSUPPORTED("strexd r0, r1, [r2]") + TEST_UNSUPPORTED("strexd r0, r1, r2, [r2]") TEST_UNSUPPORTED("ldrexb r0, [r1]") TEST_UNSUPPORTED("ldrexh r0, [r1]") - TEST_UNSUPPORTED("ldrexd r0, [r1]") + TEST_UNSUPPORTED("ldrexd r0, r1, [r1]")TEST_GROUP ("Data-processing (shifted register) and (modified immediate)" )
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 76/149 PCI/P2PDMA: Avoid pci_get_slot(), which may sleep
In reply to Greg Kroah-HartmanFrom: Logan Gunthorpe <[email protected]>
[ Upstream commit 3ec0c3ec2d92c09465534a1ff9c6f9d9506ffef6 ]
In order to use upstream_bridge_distance_warn() from a dma_map function, it must not sleep. However, pci_get_slot() takes the pci_bus_sem so it might sleep.
In order to avoid this, try to get the host bridge's device from the first element in the device list. It should be impossible for the host bridge's device to go away while references are held on child devices, so the first element should not be able to change and, thus, this should be safe.
Introduce a static function called pci_host_bridge_dev() to obtain the host bridge's root device.
--- drivers/pci/p2pdma.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-)
drivers/pci/p2pdma.c +32 -2
@@ -292,10 +292,41 @@ static const struct pci_p2pdma_whitelist_entry { {} }; +/* +* This lookup function tries to find the PCI device corresponding to a given +* host bridge. +* +* It assumes the host bridge device is the first PCI device in the +* bus->devices list and that the devfn is 00.0. These assumptions should hold +* for all the devices in the whitelist above. +* +* This function is equivalent to pci_get_slot(host->bus, 0), however it does +* not take the pci_bus_sem lock seeing __host_bridge_whitelist() must not +* sleep. +* +* For this to be safe, the caller should hold a reference to a device on the +* bridge, which should ensure the host_bridge device will not be freed +* or removed from the head of the devices list. +*/ +static struct pci_dev *pci_host_bridge_dev (struct pci_host_bridge *host) +{ +struct pci_dev *root; + + root =list_first_entry_or_null (&host->bus->devices, + struct pci_dev, bus_list); + +if (!root) +return NULL ; +if (root->devfn !=PCI_DEVFN (0 ,0 )) +return NULL ; + +return root; +} +static bool __host_bridge_whitelist (struct pci_host_bridge *host,bool same_host_bridge) { -struct pci_dev *root =pci_get_slot (host->bus,PCI_DEVFN (0 ,0 )); +struct pci_dev *root =pci_host_bridge_dev (host);const struct pci_p2pdma_whitelist_entry *entry;unsigned short vendor, device;
@@ -304,7 +335,6 @@ static bool __host_bridge_whitelist(struct pci_host_bridge *host, vendor = root->vendor; device = root->device; -pci_dev_put (root);for (entry = pci_p2pdma_whitelist; entry->vendor; entry++) {if (vendor != entry->vendor || device != entry->device)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 77/149 watchdog: Fix possible use-after-free in wdt_startup()
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit c08a6b31e4917034f0ed0cb457c3bb209576f542 ]
This module's remove path calls del_timer(). However, that function does not wait until the timer handler finishes. This means that the timer handler may still be running after the driver's remove function has finished, which would result in a use-after-free.
Fix by calling del_timer_sync(), which makes sure the timer handler has finished, and unable to re-schedule itself.
--- drivers/watchdog/sbc60xxwdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/sbc60xxwdt.c +1 -1
@@ -146,7 +146,7 @@ static void wdt_startup(void)static void wdt_turnoff (void ) {/* Stop the timer */ -del_timer (&timer); +del_timer_sync (&timer);inb_p (wdt_stop);pr_info ("Watchdog timer is now disabled...\n" ); }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 78/149 watchdog: sc520_wdt: Fix possible use-after-free in wdt_turnoff()
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 90b7c141132244e8e49a34a4c1e445cce33e07f4 ]
This module's remove path calls del_timer(). However, that function does not wait until the timer handler finishes. This means that the timer handler may still be running after the driver's remove function has finished, which would result in a use-after-free.
Fix by calling del_timer_sync(), which makes sure the timer handler has finished, and unable to re-schedule itself.
--- drivers/watchdog/sc520_wdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/sc520_wdt.c +1 -1
@@ -186,7 +186,7 @@ static int wdt_startup(void)static int wdt_turnoff (void ) {/* Stop the timer */ -del_timer (&timer); +del_timer_sync (&timer);/* Stop the watchdog */ wdt_config (0 );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 79/149 watchdog: Fix possible use-after-free by calling del_timer_sync()
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit d0212f095ab56672f6f36aabc605bda205e1e0bf ]
This driver's remove path calls del_timer(). However, that function does not wait until the timer handler finishes. This means that the timer handler may still be running after the driver's remove function has finished, which would result in a use-after-free.
Fix by calling del_timer_sync(), which makes sure the timer handler has finished, and unable to re-schedule itself.
--- drivers/watchdog/lpc18xx_wdt.c | 2 +- drivers/watchdog/w83877f_wdt.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/watchdog/lpc18xx_wdt.c +1 -1
@@ -292,7 +292,7 @@ static int lpc18xx_wdt_remove(struct platform_device *pdev)struct lpc18xx_wdt_dev *lpc18xx_wdt =platform_get_drvdata (pdev);dev_warn (&pdev->dev,"I quit now, hardware will probably reboot!\n" ); -del_timer (&lpc18xx_wdt->timer); +del_timer_sync (&lpc18xx_wdt->timer);return 0 ; }
drivers/watchdog/w83877f_wdt.c +1 -1
@@ -166,7 +166,7 @@ static void wdt_startup(void)static void wdt_turnoff (void ) {/* Stop the timer */ -del_timer (&timer); +del_timer_sync (&timer);wdt_change (WDT_DISABLE );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 80/149 watchdog: imx_sc_wdt: fix pretimeout
In reply to Greg Kroah-HartmanFrom: Stefan Eichenberger <[email protected]>
[ Upstream commit 854478a381078ee86ae2a7908a934b1ded399130 ]
If the WDIOF_PRETIMEOUT flag is not set when registering the device the driver will not show the sysfs entries or register the default governor. By moving the registering after the decision whether pretimeout is supported this gets fixed.
--- drivers/watchdog/imx_sc_wdt.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-)
drivers/watchdog/imx_sc_wdt.c +4 -7
@@ -185,16 +185,12 @@ static int imx_sc_wdt_probe(struct platform_device *pdev)watchdog_stop_on_reboot (wdog);watchdog_stop_on_unregister (wdog); - ret =devm_watchdog_register_device (dev, wdog); -if (ret) -return ret; - ret =imx_scu_irq_group_enable (SC_IRQ_GROUP_WDOG ,SC_IRQ_WDOG , true);if (ret) {dev_warn (dev,"Enable irq failed, pretimeout NOT supported\n" ); -return 0 ; + goto register_device; } imx_sc_wdd->wdt_notifier.notifier_call = imx_sc_wdt_notify;
@@ -205,7 +201,7 @@ static int imx_sc_wdt_probe(struct platform_device *pdev) false);dev_warn (dev,"Register irq notifier failed, pretimeout NOT supported\n" ); -return 0 ; + goto register_device; } ret = devm_add_action_or_reset(dev, imx_sc_wdt_action,
@@ -215,7 +211,8 @@ static int imx_sc_wdt_probe(struct platform_device *pdev)else dev_warn (dev,"Add action failed, pretimeout NOT supported\n" ); -return 0 ; +register_device: +return devm_watchdog_register_device (dev, wdog); }static int __maybe_unused imx_sc_wdt_suspend (struct device *dev)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 81/149 watchdog: iTCO_wdt: Account for rebooting on second timeout
In reply to Greg Kroah-HartmanFrom: Jan Kiszka <[email protected]>
[ Upstream commit cb011044e34c293e139570ce5c01aed66a34345c ]
This was already attempted to fix via 1fccb73011ea: If the BIOS did not enable TCO SMIs, the timer definitely needs to trigger twice in order to cause a reboot. If TCO SMIs are on, as well as SMIs in general, we can continue to assume that the BIOS will perform a reboot on the first timeout.
QEMU with its ICH9 and related BIOS falls into the former category, currently taking twice the configured timeout in order to reboot the machine. For iTCO version that fall under turn_SMI_watchdog_clear_off, this is also true and was currently only addressed for v1, irrespective of the turn_SMI_watchdog_clear_off value.
--- drivers/watchdog/iTCO_wdt.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/watchdog/iTCO_wdt.c +9 -3
@@ -72,6 +72,8 @@#define TCOBASE (p) ((p)->tco_res->start)/* SMI Control and Enable Register */ #define SMI_EN (p) ((p)->smi_res->start) +#define TCO_EN (1 << 13) +#define GBL_SMI_EN (1 << 0)#define TCO_RLD (p) (TCOBASE(p) + 0x00)/* TCO Timer Reload/Curr. Value */ #define TCOv1_TMR (p) (TCOBASE(p) + 0x01)/* TCOv1 Timer Initial Value*/
@@ -344,8 +346,12 @@ static int iTCO_wdt_set_timeout(struct watchdog_device *wd_dev, unsigned int t) tmrval =seconds_to_ticks (p, t); -/* For TCO v1 the timer counts down twice before rebooting */ -if (p->iTCO_version ==1 ) +/* +* If TCO SMIs are off, the timer counts down twice before rebooting. +* Otherwise, the BIOS generally reboots when the SMI triggers. +*/ +if (p->smi_res && + (SMI_EN (p) & (TCO_EN |GBL_SMI_EN )) != (TCO_EN |GBL_SMI_EN )) tmrval /=2 ;/* from the specs: */
@@ -510,7 +516,7 @@ static int iTCO_wdt_probe(struct platform_device *pdev)* Disables TCO logic generating an SMI# */ val32 =inl (SMI_EN (p)); - val32 &=0xffffdfff ;/* Turn off SMI clearing watchdog */ + val32 &= ~TCO_EN ;/* Turn off SMI clearing watchdog */ outl (val32,SMI_EN (p)); }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 82/149 x86/fpu: Return proper error codes from user access functions
In reply to Greg Kroah-HartmanFrom: Thomas Gleixner <[email protected]>
[ Upstream commit aee8c67a4faa40a8df4e79316dbfc92d123989c1 ]
When *RSTOR from user memory raises an exception, there is no way to differentiate them. That's bad because it forces the slow path even when the failure was not a fault. If the operation raised eg. #GP then going through the slow path is pointless.
Use _ASM_EXTABLE_FAULT() which stores the trap number and let the exception fixup return the negated trap number as error.
This allows to separate the fast path and let it handle faults directly and avoid the slow path for all other exceptions.
--- arch/x86/include/asm/fpu/internal.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
arch/x86/include/asm/fpu/internal.h +12 -7
@@ -102,6 +102,7 @@ static inline void fpstate_init_fxstate(struct fxregs_state *fx) }extern void fpstate_sanitize_xstate (struct fpu *fpu); +/* Returns 0 or the negated trap number, which results in -EFAULT for #PF */ #define user_insn(insn, output, input...) \ ({ \ int err; \
@@ -109,14 +110,14 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu);might_fault (); \ \ asm volatile(ASM_STAC "\n" \ - "1:" #insn "\n\t" \ + "1: " #insn "\n" \ "2: " ASM_CLAC "\n" \ ".section .fixup,\"ax\"\n" \ - "3: movl $-1,%[err]\n" \ + "3: negl %%eax\n" \ " jmp 2b\n" \ ".previous\n" \ - _ASM_EXTABLE(1b, 3b) \ - : [err] "=r" (err), output \ + _ASM_EXTABLE_FAULT(1b, 3b) \ + : [err] "=a" (err), output \ : "0"(0), input); \ err; \ })
@@ -210,16 +211,20 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu)#define XRSTOR ".byte " REX_PREFIX "0x0f,0xae,0x2f"#define XRSTORS ".byte " REX_PREFIX "0x0f,0xc7,0x1f" +/* +* After this @err contains 0 on success or the negated trap number when +* the operation raises an exception. For faults this results in -EFAULT. +*/ #define XSTATE_OP (op, st, lmask, hmask, err) \ asm volatile("1:" op "\n\t" \ "xor %[err], %[err]\n" \ "2:\n\t" \ ".pushsection .fixup,\"ax\"\n\t" \ - "3: movl $-2,%[err]\n\t" \ + "3: negl %%eax\n\t" \ "jmp 2b\n\t" \ ".popsection\n\t" \ - _ASM_EXTABLE(1b, 3b) \ - : [err] "=r" (err) \ + _ASM_EXTABLE_FAULT(1b, 3b) \ + : [err] "=a" (err) \ : "D" (st), "m" (*st), "a" (lmask), "d" (hmask) \ : "memory")
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 83/149 PCI: tegra: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 7bf475a4614a9722b9b989e53184a02596cf16d1 ]
Add missing MODULE_DEVICE_TABLE definition so we generate correct modalias for automatic loading of this driver when it is built as a module.
--- drivers/pci/controller/pci-tegra.c | 1 + 1 file changed, 1 insertion(+)
drivers/pci/controller/pci-tegra.c +1 -0
@@ -2613,6 +2613,7 @@ static const struct of_device_id tegra_pcie_of_match[] = { { .compatible = "nvidia,tegra20-pcie", .data = &tegra20_pcie }, { }, }; +MODULE_DEVICE_TABLE (of, tegra_pcie_of_match);static void *tegra_pcie_ports_seq_start (struct seq_file *s,loff_t *pos) {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 84/149 orangefs: fix orangefs df output.
In reply to Greg Kroah-HartmanFrom: Mike Marshall <[email protected]>
[ Upstream commit 0fdec1b3c9fbb5e856a40db5993c9eaf91c74a83 ]
Orangefs df output is whacky. Walt Ligon suggested this might fix it. It seems way more in line with reality now...
--- fs/orangefs/super.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/orangefs/super.c +1 -1
@@ -209,7 +209,7 @@ static int orangefs_statfs(struct dentry *dentry, struct kstatfs *buf) buf->f_bavail = (sector_t ) new_op->downcall.resp.statfs.blocks_avail; buf->f_files = (sector_t ) new_op->downcall.resp.statfs.files_total; buf->f_ffree = (sector_t ) new_op->downcall.resp.statfs.files_avail; - buf->f_frsize = sb->s_blocksize; + buf->f_frsize =0 ; out_op_release:op_release (new_op);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 85/149 ceph: remove bogus checks and WARN_ONs from ceph_set_page_dirty
In reply to Greg Kroah-HartmanFrom: Jeff Layton <[email protected]>
[ Upstream commit 22d41cdcd3cfd467a4af074165357fcbea1c37f5 ]
The checks for page->mapping are odd, as set_page_dirty is an address_space operation, and I don't see where it would be called on a non-pagecache page.
The warning about the page lock also seems bogus. The comment over set_page_dirty() says that it can be called without the page lock in some rare cases. I don't think we want to warn if that's the case.
--- fs/ceph/addr.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
fs/ceph/addr.c +1 -9
@@ -76,10 +76,6 @@ static int ceph_set_page_dirty(struct page *page)struct inode *inode;struct ceph_inode_info *ci;struct ceph_snap_context *snapc; -int ret; - -if (unlikely (!mapping)) -return !TestSetPageDirty (page);if (PageDirty (page)) { dout("%p set_page_dirty %p idx %lu -- already dirty\n",
@@ -125,11 +121,7 @@ static int ceph_set_page_dirty(struct page *page) page->private = (unsigned long )snapc;SetPagePrivate (page); - ret =__set_page_dirty_nobuffers (page); -WARN_ON (!PageLocked (page)); -WARN_ON (!page->mapping); - -return ret; +return __set_page_dirty_nobuffers (page); }/*
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 86/149 NFS: nfs_find_open_context() may only select open files
In reply to Greg Kroah-HartmanFrom: Trond Myklebust <[email protected]>
[ Upstream commit e97bc66377bca097e1f3349ca18ca17f202ff659 ]
If a file has already been closed, then it should not be selected to support further I/O.
--- fs/nfs/inode.c | 4 ++++ include/linux/nfs_fs.h | 1 + 2 files changed, 5 insertions(+)
fs/nfs/inode.c +4 -0
@@ -1048,6 +1048,7 @@ EXPORT_SYMBOL_GPL(nfs_inode_attach_open_context);void nfs_file_set_open_context (struct file *filp,struct nfs_open_context *ctx) { filp->private_data =get_nfs_open_context (ctx); +set_bit (NFS_CONTEXT_FILE_OPEN , &ctx->flags);if (list_empty (&ctx->list))nfs_inode_attach_open_context (ctx); }
@@ -1067,6 +1068,8 @@ struct nfs_open_context *nfs_find_open_context(struct inode *inode, const structcontinue ;if ((pos->mode & (FMODE_READ |FMODE_WRITE )) != mode)continue ; +if (!test_bit (NFS_CONTEXT_FILE_OPEN , &pos->flags)) +continue ; ctx =get_nfs_open_context (pos);if (ctx)break ;
@@ -1082,6 +1085,7 @@ void nfs_file_clear_open_context(struct file *filp)if (ctx) {struct inode *inode =d_inode (ctx->dentry); +clear_bit (NFS_CONTEXT_FILE_OPEN , &ctx->flags);/* * We fatal error on write before. Try to writeback * every page again.
include/linux/nfs_fs.h +1 -0
@@ -79,6 +79,7 @@ struct nfs_open_context {#define NFS_CONTEXT_RESEND_WRITES (1)#define NFS_CONTEXT_BAD (2)#define NFS_CONTEXT_UNLOCK (3) +#define NFS_CONTEXT_FILE_OPEN (4)int error;struct list_head list;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 87/149 power: supply: charger-manager: add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 073b5d5b1f9cc94a3eea25279fbafee3f4f5f097 ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/power/supply/charger-manager.c | 1 + 1 file changed, 1 insertion(+)
drivers/power/supply/charger-manager.c +1 -0
@@ -1470,6 +1470,7 @@ static const struct of_device_id charger_manager_match[] = { }, {}, }; +MODULE_DEVICE_TABLE (of, charger_manager_match);static struct charger_desc *of_cm_parse_desc (struct device *dev) {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 88/149 power: supply: ab8500: add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit dfe52db13ab8d24857a9840ec7ca75eef800c26c ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/power/supply/ab8500_btemp.c | 1 + drivers/power/supply/ab8500_charger.c | 1 + drivers/power/supply/ab8500_fg.c | 1 + 3 files changed, 3 insertions(+)
drivers/power/supply/ab8500_btemp.c +1 -0
@@ -1120,6 +1120,7 @@ static const struct of_device_id ab8500_btemp_match[] = { { .compatible = "stericsson,ab8500-btemp", }, { }, }; +MODULE_DEVICE_TABLE (of, ab8500_btemp_match);static struct platform_driver ab8500_btemp_driver = { .probe = ab8500_btemp_probe,
drivers/power/supply/ab8500_charger.c +1 -0
@@ -3633,6 +3633,7 @@ static const struct of_device_id ab8500_charger_match[] = { { .compatible = "stericsson,ab8500-charger", }, { }, }; +MODULE_DEVICE_TABLE (of, ab8500_charger_match);static struct platform_driver ab8500_charger_driver = { .probe = ab8500_charger_probe,
drivers/power/supply/ab8500_fg.c +1 -0
@@ -3230,6 +3230,7 @@ static const struct of_device_id ab8500_fg_match[] = { { .compatible = "stericsson,ab8500-fg", }, { }, }; +MODULE_DEVICE_TABLE (of, ab8500_fg_match);static struct platform_driver ab8500_fg_driver = { .probe = ab8500_fg_probe,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 89/149 pwm: img: Fix PM reference leak in img_pwm_enable()
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit fde25294dfd8e36e4e30b693c27a86232864002a ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to putting operation will result in reference leak here. Fix it by replacing it with pm_runtime_resume_and_get to keep usage counter balanced.
--- drivers/pwm/pwm-img.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/pwm/pwm-img.c +1 -1
@@ -156,7 +156,7 @@ static int img_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)struct img_pwm_chip *pwm_chip =to_img_pwm_chip (chip);int ret; - ret =pm_runtime_get_sync (chip->dev); + ret =pm_runtime_resume_and_get (chip->dev);if (ret <0 )return ret;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 90/149 pwm: tegra: Dont modify HW state in .remove callback
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit 86f7fa71cd830d18d7ebcaf719dffd5ddfe1acdd ]
A consumer is expected to disable a PWM before calling pwm_put(). And if they didn't there is hopefully a good reason (or the consumer needs fixing). Also if disabling an enabled PWM was the right thing to do, this should better be done in the framework instead of in each low level driver.
So drop the hardware modification from the .remove() callback.
--- drivers/pwm/pwm-tegra.c | 13 ------------- 1 file changed, 13 deletions(-)
drivers/pwm/pwm-tegra.c +0 -13
@@ -232,7 +232,6 @@ static int tegra_pwm_probe(struct platform_device *pdev)static int tegra_pwm_remove (struct platform_device *pdev) {struct tegra_pwm_chip *pc =platform_get_drvdata (pdev); -unsigned int i;int err;if (WARN_ON (!pc))
@@ -242,18 +241,6 @@ static int tegra_pwm_remove(struct platform_device *pdev)if (err <0 )return err; -for (i =0 ; i < pc->chip.npwm; i++) { -struct pwm_device *pwm = &pc->chip.pwms[i]; - -if (!pwm_is_enabled (pwm)) -if (clk_prepare_enable (pc->clk) <0 ) -continue ; - -pwm_writel (pc, i,0 ); - -clk_disable_unprepare (pc->clk); - } -reset_control_assert (pc->rst);clk_disable_unprepare (pc->clk);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 91/149 ACPI: AMBA: Fix resource name in /proc/iomem
In reply to Greg Kroah-HartmanFrom: Liguang Zhang <[email protected]>
[ Upstream commit 7718629432676b5ebd9a32940782fe297a0abf8d ]
In function amba_handler_attach(), dev->res.name is initialized by amba_device_alloc. But when address_found is false, dev->res.name is assigned to null value, which leads to wrong resource name display in /proc/iomem, "<BAD>" is seen for those resources.
--- drivers/acpi/acpi_amba.c | 1 + 1 file changed, 1 insertion(+)
drivers/acpi/acpi_amba.c +1 -0
@@ -76,6 +76,7 @@ static int amba_handler_attach(struct acpi_device *adev,case IORESOURCE_MEM :if (!address_found) { dev->res = *rentry->res; + dev->res.name =dev_name (&dev->dev); address_found = true; }break ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 92/149 ACPI: video: Add quirk for the Dell Vostro 3350
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit 9249c32ec9197e8d34fe5179c9e31668a205db04 ]
The Dell Vostro 3350 ACPI video-bus device reports spurious ACPI_VIDEO_NOTIFY_CYCLE events resulting in spurious KEY_SWITCHVIDEOMODE events being reported to userspace (and causing trouble there).
Add a quirk setting the report_key_events mask to REPORT_BRIGHTNESS_KEY_EVENTS so that the ACPI_VIDEO_NOTIFY_CYCLE events will be ignored, while still reporting brightness up/down hotkey-presses to userspace normally.
--- drivers/acpi/acpi_video.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/acpi/acpi_video.c +9 -0
@@ -543,6 +543,15 @@ static const struct dmi_system_id video_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V131"), }, }, + { + .callback = video_set_report_key_events, + .driver_data = (void *)((uintptr_t)REPORT_BRIGHTNESS_KEY_EVENTS), + .ident = "Dell Vostro 3350", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 3350"), + }, + },/* * Some machines change the brightness themselves when a brightness * hotkey gets pressed, despite us telling them not to. In this case
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 93/149 virtio-blk: Fix memory leak among suspend/resume procedure
In reply to Greg Kroah-HartmanFrom: Xie Yongji <[email protected]>
[ Upstream commit b71ba22e7c6c6b279c66f53ee7818709774efa1f ]
The vblk->vqs should be freed before we call init_vqs() in virtblk_restore().
--- drivers/block/virtio_blk.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/block/virtio_blk.c +2 -0
@@ -1057,6 +1057,8 @@ static int virtblk_freeze(struct virtio_device *vdev)blk_mq_quiesce_queue (vblk->disk->queue); vdev->config->del_vqs (vdev); +kfree (vblk->vqs); +return 0 ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 94/149 virtio_net: Fix error handling in virtnet_restore()
In reply to Greg Kroah-HartmanFrom: Xie Yongji <[email protected]>
[ Upstream commit 3f2869cace829fb4b80fc53b3ddaa7f4ba9acbf1 ]
Do some cleanups in virtnet_restore() when virtnet_cpu_notif_add() failed.
--- drivers/net/virtio_net.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/virtio_net.c +4 -1
@@ -3282,8 +3282,11 @@ static __maybe_unused int virtnet_restore(struct virtio_device *vdev)virtnet_set_queues (vi, vi->curr_queue_pairs); err =virtnet_cpu_notif_add (vi); -if (err) +if (err) { +virtnet_freeze_down (vdev); +remove_vq_common (vi);return err; + }return 0 ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 95/149 virtio_console: Assure used length from device is limited
In reply to Greg Kroah-HartmanFrom: Xie Yongji <[email protected]>
[ Upstream commit d00d8da5869a2608e97cfede094dfc5e11462a46 ]
The buf->len might come from an untrusted device. This ensures the value would not exceed the size of the buffer to avoid data corruption or loss.
--- drivers/char/virtio_console.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/char/virtio_console.c +2 -2
@@ -475,7 +475,7 @@ static struct port_buffer *get_inbuf(struct port *port) buf =virtqueue_get_buf (port->in_vq, &len);if (buf) { - buf->len = len; + buf->len =min_t (size_t, len, buf->size); buf->offset =0 ; port->stats.bytes_received += len; }
@@ -1714,7 +1714,7 @@ static void control_work_handler(struct work_struct *work)while ((buf =virtqueue_get_buf (vq, &len))) {spin_unlock (&portdev->c_ivq_lock); - buf->len = len; + buf->len =min_t (size_t, len, buf->size); buf->offset =0 ;handle_control_message (vq->vdev, portdev, buf);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 96/149 x86/signal: Detect and prevent an alternate signal stack overflow
In reply to Greg Kroah-HartmanFrom: Chang S. Bae <[email protected]>
[ Upstream commit 2beb4a53fc3f1081cedc1c1a198c7f56cc4fc60c ]
The kernel pushes context on to the userspace stack to prepare for the user's signal handler. When the user has supplied an alternate signal stack, via sigaltstack(2), it is easy for the kernel to verify that the stack size is sufficient for the current hardware context.
Check if writing the hardware context to the alternate stack will exceed it's size. If yes, then instead of corrupting user-data and proceeding with the original signal handler, an immediate SIGSEGV signal is delivered.
Refactor the stack pointer check code from on_sig_stack() and use the new helper.
While the kernel allows new source code to discover and use a sufficient alternate signal stack size, this check is still necessary to protect binaries with insufficient alternate signal stack size from data corruption.
--- arch/x86/kernel/signal.c | 24 ++++++++++++++++++++---- include/linux/sched/signal.h | 19 ++++++++++++------- 2 files changed, 32 insertions(+), 11 deletions(-)
arch/x86/kernel/signal.c +20 -4
@@ -241,10 +241,11 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size, void __user **fpstate) {/* Default to using normal stack */ +bool nested_altstack =on_sig_stack (regs->sp); +bool entering_altstack = false;unsigned long math_size =0 ;unsigned long sp = regs->sp;unsigned long buf_fx =0 ; -int onsigstack =on_sig_stack (sp);int ret;/* redzone */
@@ -253,15 +254,23 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,/* This is the X/Open sanctioned signal stack switching. */ if (ka->sa.sa_flags &SA_ONSTACK ) { -if (sas_ss_flags (sp) ==0 ) +/* +* This checks nested_altstack via sas_ss_flags(). Sensible +* programs use SS_AUTODISARM, which disables that check, and +* programs that don't use SS_AUTODISARM get compatible. +*/ +if (sas_ss_flags (sp) ==0 ) { sp = current->sas_ss_sp + current->sas_ss_size; + entering_altstack = true; + } }else if (IS_ENABLED (CONFIG_X86_32 ) && - !onsigstack && + !nested_altstack && regs->ss != __USER_DS && !(ka->sa.sa_flags &SA_RESTORER ) && ka->sa.sa_restorer) {/* This is the legacy signal stack switching. */ sp = (unsigned long ) ka->sa.sa_restorer; + entering_altstack = true; } sp = fpu__alloc_mathframe(sp, IS_ENABLED(CONFIG_X86_32),
@@ -274,8 +283,15 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,* If we are on the alternate signal stack and would overflow it, don't. * Return an always-bogus address instead so we will die with SIGSEGV. */ -if (onsigstack && !likely (on_sig_stack (sp))) +if (unlikely ((nested_altstack || entering_altstack) && + !__on_sig_stack (sp))) { + +if (show_unhandled_signals &&printk_ratelimit ()) +pr_info ("%s[%d] overflowed sigaltstack\n" , + current->comm,task_pid_nr (current)); +return (void __user *)-1L ; + }/* save i387 and extended state */ ret =copy_fpstate_to_sigframe (*fpstate, (void __user *)buf_fx, math_size);
include/linux/sched/signal.h +12 -7
@@ -509,6 +509,17 @@ static inline int kill_cad_pid(int sig, int priv)#define SEND_SIG_NOINFO ((struct kernel_siginfo *) 0)#define SEND_SIG_PRIV ((struct kernel_siginfo *) 1) +static inline int __on_sig_stack (unsigned long sp) +{ +#ifdef CONFIG_STACK_GROWSUP +return sp >= current->sas_ss_sp && + sp - current->sas_ss_sp < current->sas_ss_size; +#else +return sp > current->sas_ss_sp && + sp - current->sas_ss_sp <= current->sas_ss_size; +#endif +} +/* * True if we are on the alternate signal stack. */
@@ -526,13 +537,7 @@ static inline int on_sig_stack(unsigned long sp)if (current->sas_ss_flags &SS_AUTODISARM )return 0 ; -#ifdef CONFIG_STACK_GROWSUP -return sp >= current->sas_ss_sp && - sp - current->sas_ss_sp < current->sas_ss_size; -#else -return sp > current->sas_ss_sp && - sp - current->sas_ss_sp <= current->sas_ss_size; -#endif +return __on_sig_stack (sp); }static inline int sas_ss_flags (unsigned long sp)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 97/149 f2fs: add MODULE_SOFTDEP to ensure crc32 is included in the initramfs
In reply to Greg Kroah-HartmanFrom: Chao Yu <[email protected]>
[ Upstream commit 0dd571785d61528d62cdd8aa49d76bc6085152fe ]
As marcosfrm reported in bugzilla:
https://bugzilla.kernel.org/show_bug.cgi?id=213089
Initramfs generators rely on "pre" softdeps (and "depends") to include additional required modules.
F2FS does not declare "pre: crc32" softdep. Then every generator (dracut, mkinitcpio...) has to maintain a hardcoded list for this purpose.
Hence let's use MODULE_SOFTDEP("pre: crc32") in f2fs code.
--- fs/f2fs/super.c | 1 + 1 file changed, 1 insertion(+)
fs/f2fs/super.c +1 -0
@@ -3804,4 +3804,5 @@ module_exit(exit_f2fs_fs)MODULE_AUTHOR ("Samsung Electronics's Praesto Team" );MODULE_DESCRIPTION ("Flash Friendly File System" );MODULE_LICENSE ("GPL" ); +MODULE_SOFTDEP ("pre: crc32" );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 98/149 PCI/sysfs: Fix dsm_label_utf16s_to_utf8s() buffer overrun
In reply to Greg Kroah-HartmanFrom: Krzysztof Wilczyński <[email protected]>
[ Upstream commit bdcdaa13ad96f1a530711c29e6d4b8311eff767c ]
"utf16s_to_utf8s(..., buf, PAGE_SIZE)" puts up to PAGE_SIZE bytes into "buf" and returns the number of bytes it actually put there. If it wrote PAGE_SIZE bytes, the newline added by dsm_label_utf16s_to_utf8s() would overrun "buf".
Reduce the size available for utf16s_to_utf8s() to use so there is always space for the newline.
--- drivers/pci/pci-label.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/pci/pci-label.c +1 -1
@@ -162,7 +162,7 @@ static void dsm_label_utf16s_to_utf8s(union acpi_object *obj, char *buf) len =utf16s_to_utf8s ((const wchar_t *)obj->buffer.pointer, obj->buffer.length,UTF16_LITTLE_ENDIAN , - buf,PAGE_SIZE ); + buf,PAGE_SIZE -1 ); buf[len] ='\n' ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 99/149 power: supply: rt5033_battery: Fix device tree enumeration
In reply to Greg Kroah-HartmanFrom: Stephan Gerhold <[email protected]>
[ Upstream commit f3076cd8d1d5fa64b5e1fa5affc045c2fc123baa ]
The fuel gauge in the RT5033 PMIC has its own I2C bus and interrupt line. Therefore, it is not actually part of the RT5033 MFD and needs its own of_match_table to probe properly.
Also, given that it's independent of the MFD, there is actually no need to make the Kconfig depend on MFD_RT5033. Although the driver uses the shared <linux/mfd/rt5033.h> header, there is no compile or runtime dependency on the RT5033 MFD driver.
--- drivers/power/supply/Kconfig | 3 ++- drivers/power/supply/rt5033_battery.c | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-)
drivers/power/supply/Kconfig +2 -1
@@ -643,7 +643,8 @@ config BATTERY_GOLDFISH config BATTERY_RT5033 tristate "RT5033 fuel gauge support" - depends on MFD_RT5033 + depends on I2C + select REGMAP_I2C help This adds support for battery fuel gauge in Richtek RT5033 PMIC. The fuelgauge calculates and determines the battery state of charge
drivers/power/supply/rt5033_battery.c +7 -0
@@ -164,9 +164,16 @@ static const struct i2c_device_id rt5033_battery_id[] = { };MODULE_DEVICE_TABLE (i2c, rt5033_battery_id); +static const struct of_device_id rt5033_battery_of_match[] = { + { .compatible ="richtek,rt5033-battery" , }, + { } +}; +MODULE_DEVICE_TABLE (of, rt5033_battery_of_match); +static struct i2c_driver rt5033_battery_driver = { .driver = { .name ="rt5033-battery" , + .of_match_table = rt5033_battery_of_match, }, .probe = rt5033_battery_probe, .remove = rt5033_battery_remove,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 100/149 NFSv4: Initialise connection to the server in nfs4_alloc_client()
In reply to Greg Kroah-HartmanFrom: Trond Myklebust <[email protected]>
[ Upstream commit dd99e9f98fbf423ff6d365b37a98e8879170f17c ]
Set up the connection to the NFSv4 server in nfs4_alloc_client(), before we've added the struct nfs_client to the net-namespace's nfs_client_list so that a downed server won't cause other mounts to hang in the trunking detection code.
--- fs/nfs/nfs4client.c | 82 +++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 40 deletions(-)
fs/nfs/nfs4client.c +42 -40
@@ -197,8 +197,11 @@ void nfs40_shutdown_client(struct nfs_client *clp)struct nfs_client *nfs4_alloc_client (const struct nfs_client_initdata *cl_init) { -int err; +char buf[INET6_ADDRSTRLEN +1 ]; +const char *ip_addr = cl_init->ip_addr;struct nfs_client *clp =nfs_alloc_client (cl_init); +int err; +if (IS_ERR (clp))return clp;
@@ -222,6 +225,44 @@ struct nfs_client *nfs4_alloc_client(const struct nfs_client_initdata *cl_init)init_waitqueue_head (&clp->cl_lock_waitq);#endif INIT_LIST_HEAD (&clp->pending_cb_stateids); + +if (cl_init->minorversion !=0 ) +__set_bit (NFS_CS_INFINITE_SLOTS , &clp->cl_flags); +__set_bit (NFS_CS_DISCRTRY , &clp->cl_flags); +__set_bit (NFS_CS_NO_RETRANS_TIMEOUT , &clp->cl_flags); + +/* +* Set up the connection to the server before we add add to the +* global list. +*/ + err =nfs_create_rpc_client (clp, cl_init,RPC_AUTH_GSS_KRB5I ); +if (err == -EINVAL ) + err =nfs_create_rpc_client (clp, cl_init,RPC_AUTH_UNIX ); +if (err <0 ) + goto error; + +/* If no clientaddr= option was specified, find a usable cb address */ +if (ip_addr ==NULL ) { +struct sockaddr_storage cb_addr; +struct sockaddr *sap = (struct sockaddr *)&cb_addr; + + err =rpc_localaddr (clp->cl_rpcclient, sap,sizeof (cb_addr)); +if (err <0 ) + goto error; + err =rpc_ntop (sap, buf,sizeof (buf)); +if (err <0 ) + goto error; + ip_addr = (const char *)buf; + } +strlcpy (clp->cl_ipaddr, ip_addr,sizeof (clp->cl_ipaddr)); + + err =nfs_idmap_new (clp); +if (err <0 ) { +dprintk ("%s: failed to create idmapper. Error = %d\n" , + __func__, err); + goto error; + } +__set_bit (NFS_CS_IDMAP , &clp->cl_res_state);return clp; error:
@@ -372,8 +413,6 @@ static int nfs4_init_client_minor_version(struct nfs_client *clp)struct nfs_client *nfs4_init_client (struct nfs_client *clp,const struct nfs_client_initdata *cl_init) { -char buf[INET6_ADDRSTRLEN +1 ]; -const char *ip_addr = cl_init->ip_addr;struct nfs_client *old;int error;
@@ -381,43 +420,6 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp,/* the client is initialised already */ return clp; -/* Check NFS protocol revision and initialize RPC op vector */ - clp->rpc_ops = &nfs_v4_clientops; - -if (clp->cl_minorversion !=0 ) -__set_bit (NFS_CS_INFINITE_SLOTS , &clp->cl_flags); -__set_bit (NFS_CS_DISCRTRY , &clp->cl_flags); -__set_bit (NFS_CS_NO_RETRANS_TIMEOUT , &clp->cl_flags); - - error =nfs_create_rpc_client (clp, cl_init,RPC_AUTH_GSS_KRB5I ); -if (error == -EINVAL ) - error =nfs_create_rpc_client (clp, cl_init,RPC_AUTH_UNIX ); -if (error <0 ) - goto error; - -/* If no clientaddr= option was specified, find a usable cb address */ -if (ip_addr ==NULL ) { -struct sockaddr_storage cb_addr; -struct sockaddr *sap = (struct sockaddr *)&cb_addr; - - error =rpc_localaddr (clp->cl_rpcclient, sap,sizeof (cb_addr)); -if (error <0 ) - goto error; - error =rpc_ntop (sap, buf,sizeof (buf)); -if (error <0 ) - goto error; - ip_addr = (const char *)buf; - } -strlcpy (clp->cl_ipaddr, ip_addr,sizeof (clp->cl_ipaddr)); - - error =nfs_idmap_new (clp); -if (error <0 ) { -dprintk ("%s: failed to create idmapper. Error = %d\n" , - __func__, error); - goto error; - } -__set_bit (NFS_CS_IDMAP , &clp->cl_res_state); - error =nfs4_init_client_minor_version (clp);if (error <0 ) goto error;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 101/149 um: fix error return code in slip_open()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit b77e81fbe5f5fb4ad9a61ec80f6d1e30b6da093a ]
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
--- arch/um/drivers/slip_user.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/um/drivers/slip_user.c +2 -1
@@ -145,7 +145,8 @@ static int slip_open(void *data) } sfd = err; -if (set_up_tty (sfd)) + err =set_up_tty (sfd); +if (err) goto out_close2; pri->slave = sfd;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 102/149 um: fix error return code in winch_tramp()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit ccf1236ecac476d9d2704866d9a476c86e387971 ]
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
--- arch/um/drivers/chan_user.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/um/drivers/chan_user.c +2 -1
@@ -256,7 +256,8 @@ static int winch_tramp(int fd, struct tty_port *port, int *fd_out, goto out_close; } -if (os_set_fd_block (*fd_out,0 )) { + err =os_set_fd_block (*fd_out,0 ); +if (err) {printk (UM_KERN_ERR "winch_tramp: failed to set thread_fd " "non-blocking.\n" ); goto out_close;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 103/149 watchdog: aspeed: fix hardware timeout calculation
In reply to Greg Kroah-HartmanFrom: Tao Ren <[email protected]>
[ Upstream commit e7dc481c92060f9ce872878b0b7a08c24713a7e5 ]
Fix hardware timeout calculation in aspeed_wdt_set_timeout function to ensure the reload value does not exceed the hardware limit.
--- drivers/watchdog/aspeed_wdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/aspeed_wdt.c +1 -1
@@ -147,7 +147,7 @@ static int aspeed_wdt_set_timeout(struct watchdog_device *wdd, wdd->timeout = timeout; - actual =min (timeout, wdd->max_hw_heartbeat_ms *1000 ); + actual =min (timeout, wdd->max_hw_heartbeat_ms /1000 );writel (actual *WDT_RATE_1MHZ , wdt->base +WDT_RELOAD_VALUE );writel (WDT_RESTART_MAGIC , wdt->base +WDT_RESTART );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 104/149 nfs: fix acl memory leak of posix_acl_create()
In reply to Greg Kroah-HartmanFrom: Gao Xiang <[email protected]>
[ Upstream commit 1fcb6fcd74a222d9ead54d405842fc763bb86262 ]
When looking into another nfs xfstests report, I found acl and default_acl in nfs3_proc_create() and nfs3_proc_mknod() error paths are possibly leaked. Fix them in advance.
--- fs/nfs/nfs3proc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/nfs/nfs3proc.c +2 -2
@@ -350,7 +350,7 @@ nfs3_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,break ;case NFS3_CREATE_UNCHECKED : - goto out; + goto out_release_acls; }nfs_fattr_init (data->res.dir_attr);nfs_fattr_init (data->res.fattr);
@@ -717,7 +717,7 @@ nfs3_proc_mknod(struct inode *dir, struct dentry *dentry, struct iattr *sattr,break ;default : status = -EINVAL ; - goto out; + goto out_release_acls; } d_alias =nfs3_do_create (dir, dentry, data);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 105/149 ubifs: Set/Clear I_LINKABLE under i_lock for whiteout inode
In reply to Greg Kroah-HartmanFrom: Zhihao Cheng <[email protected]>
[ Upstream commit a801fcfeef96702fa3f9b22ad56c5eb1989d9221 ]
xfstests-generic/476 reports a warning message as below:
WARNING: CPU: 2 PID: 30347 at fs/inode.c:361 inc_nlink+0x52/0x70 Call Trace: do_rename+0x502/0xd40 [ubifs] ubifs_rename+0x8b/0x180 [ubifs] vfs_rename+0x476/0x1080 do_renameat2+0x67c/0x7b0 __x64_sys_renameat2+0x6e/0x90 do_syscall_64+0x66/0xe0 entry_SYSCALL_64_after_hwframe+0x44/0xae
Following race case can cause this:
rename_whiteout(Thread 1) wb_workfn(Thread 2)ubifs_rename
do_rename
__writeback_single_inode
spin_lock(&inode->i_lock)
whiteout->i_state |= I_LINKABLE
inode->i_state &= ~dirty;
---- How race happens on i_state:
(tmp = whiteout->i_state | I_LINKABLE)
(tmp = inode->i_state & ~dirty)
(whiteout->i_state = tmp)
(inode->i_state = tmp)
----
spin_unlock(&inode->i_lock)
inc_nlink(whiteout)
WARN_ON(!(inode->i_state & I_LINKABLE)) !!!Fix to add i_lock to avoid i_state update race condition.
--- fs/ubifs/dir.c | 7 +++++++ 1 file changed, 7 insertions(+)
fs/ubifs/dir.c +7 -0
@@ -1343,7 +1343,10 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry, goto out_release; } +spin_lock (&whiteout->i_lock); whiteout->i_state |=I_LINKABLE ; +spin_unlock (&whiteout->i_lock); + whiteout_ui =ubifs_inode (whiteout); whiteout_ui->data = dev; whiteout_ui->data_len =ubifs_encode_dev (dev,MKDEV (0 ,0 ));
@@ -1436,7 +1439,11 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,inc_nlink (whiteout);mark_inode_dirty (whiteout); + +spin_lock (&whiteout->i_lock); whiteout->i_state &= ~I_LINKABLE ; +spin_unlock (&whiteout->i_lock); +iput (whiteout); }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 106/149 PCI: iproc: Fix multi-MSI base vector number allocation
In reply to Greg Kroah-HartmanFrom: Sandor Bodo-Merle <[email protected]>
[ Upstream commit e673d697b9a234fc3544ac240e173cef8c82b349 ]
Commit fc54bae28818 ("PCI: iproc: Allow allocation of multiple MSIs") introduced multi-MSI support with a broken allocation mechanism (it failed to reserve the proper number of bits from the inner domain). Natural alignment of the base vector number was also not guaranteed.
--- drivers/pci/controller/pcie-iproc-msi.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)
drivers/pci/controller/pcie-iproc-msi.c +11 -10
@@ -252,18 +252,18 @@ static int iproc_msi_irq_domain_alloc(struct irq_domain *domain,mutex_lock (&msi->bitmap_lock); -/* Allocate 'nr_cpus' number of MSI vectors each time */ - hwirq =bitmap_find_next_zero_area (msi->bitmap, msi->nr_msi_vecs,0 , - msi->nr_cpus,0 ); -if (hwirq < msi->nr_msi_vecs) { -bitmap_set (msi->bitmap, hwirq, msi->nr_cpus); - }else { -mutex_unlock (&msi->bitmap_lock); -return -ENOSPC ; - } +/* +* Allocate 'nr_irqs' multiplied by 'nr_cpus' number of MSI vectors +* each time +*/ + hwirq =bitmap_find_free_region (msi->bitmap, msi->nr_msi_vecs, +order_base_2 (msi->nr_cpus * nr_irqs));mutex_unlock (&msi->bitmap_lock); +if (hwirq <0 ) +return -ENOSPC ; +for (i =0 ; i < nr_irqs; i++) { irq_domain_set_info(domain, virq + i, hwirq + i, &iproc_msi_bottom_irq_chip,
@@ -284,7 +284,8 @@ static void iproc_msi_irq_domain_free(struct irq_domain *domain,mutex_lock (&msi->bitmap_lock); hwirq =hwirq_to_canonical_hwirq (msi, data->hwirq); -bitmap_clear (msi->bitmap, hwirq, msi->nr_cpus); +bitmap_release_region (msi->bitmap, hwirq, +order_base_2 (msi->nr_cpus * nr_irqs));mutex_unlock (&msi->bitmap_lock);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 107/149 PCI: iproc: Support multi-MSI only on uniprocessor kernel
In reply to Greg Kroah-HartmanFrom: Sandor Bodo-Merle <[email protected]>
[ Upstream commit 2dc0a201d0f59e6818ef443609f0850a32910844 ]
The interrupt affinity scheme used by this driver is incompatible with multi-MSI as it implies moving the doorbell address to that of another MSI group. This isn't possible for multi-MSI, as all the MSIs must have the same doorbell address. As such it is restricted to systems with a single CPU.
--- drivers/pci/controller/pcie-iproc-msi.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/pci/controller/pcie-iproc-msi.c +7 -1
@@ -171,7 +171,7 @@ static struct irq_chip iproc_msi_irq_chip = {static struct msi_domain_info iproc_msi_domain_info = { .flags =MSI_FLAG_USE_DEF_DOM_OPS |MSI_FLAG_USE_DEF_CHIP_OPS | -MSI_FLAG_MULTI_PCI_MSI |MSI_FLAG_PCI_MSIX , +MSI_FLAG_PCI_MSIX , .chip = &iproc_msi_irq_chip, };
@@ -250,6 +250,9 @@ static int iproc_msi_irq_domain_alloc(struct irq_domain *domain,struct iproc_msi *msi = domain->host_data;int hwirq, i; +if (msi->nr_cpus >1 && nr_irqs >1 ) +return -EINVAL ; +mutex_lock (&msi->bitmap_lock);/*
@@ -539,6 +542,9 @@ int iproc_msi_init(struct iproc_pcie *pcie, struct device_node *node)mutex_init (&msi->bitmap_lock); msi->nr_cpus =num_possible_cpus (); +if (msi->nr_cpus ==1 ) + iproc_msi_domain_info.flags |=MSI_FLAG_MULTI_PCI_MSI ; + msi->nr_irqs =of_irq_count (node);if (!msi->nr_irqs) {dev_err (pcie->dev,"found no MSI GIC interrupt\n" );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 108/149 x86/fpu: Limit xstate copy size in xstateregs_set()
In reply to Greg Kroah-HartmanFrom: Thomas Gleixner <[email protected]>
[ Upstream commit 07d6688b22e09be465652cf2da0da6bf86154df6 ]
If the count argument is larger than the xstate size, this will happily copy beyond the end of xstate.
--- arch/x86/kernel/fpu/regset.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/fpu/regset.c +1 -1
@@ -124,7 +124,7 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset,/* * A whole standard-format XSAVE buffer is needed: */ -if ((pos !=0 ) || (count < fpu_user_xstate_size)) +if (pos !=0 || count != fpu_user_xstate_size)return -EFAULT ; xsave = &fpu->state.xsave;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 109/149 pwm: imx1: Dont disable clocks at device remove time
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit 1bc6ea31cb41d50302a3c9b401964cf0a88d41f9 ]
The .remove() callback disables clocks that were not enabled in .probe(). So just probing and then unbinding the driver results in a clk enable imbalance.
So just drop the call to disable the clocks. (Which BTW was also in the wrong order because the call makes the PWM unfunctional and so should have come only after pwmchip_remove()).
--- drivers/pwm/pwm-imx1.c | 2 -- 1 file changed, 2 deletions(-)
drivers/pwm/pwm-imx1.c +0 -2
@@ -180,8 +180,6 @@ static int pwm_imx1_remove(struct platform_device *pdev) {struct pwm_imx1_chip *imx =platform_get_drvdata (pdev); -pwm_imx1_clk_disable_unprepare (&imx->chip); -return pwmchip_remove (&imx->chip); }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 110/149 virtio_net: move tx vq operation under tx queue lock
In reply to Greg Kroah-HartmanFrom: Michael S. Tsirkin <[email protected]>
[ Upstream commit 5a2f966d0f3fa0ef6dada7ab9eda74cacee96b8a ]
It's unsafe to operate a vq from multiple threads. Unfortunately this is exactly what we do when invoking clean tx poll from rx napi.
Same happens with napi-tx even without the opportunistic cleaning from the receive interrupt: that races with processing the vq in start_xmit.
As a fix move everything that deals with the vq to under tx lock.
--- drivers/net/virtio_net.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-)
drivers/net/virtio_net.c +21 -1
@@ -1504,6 +1504,8 @@ static int virtnet_poll_tx(struct napi_struct *napi, int budget)struct virtnet_info *vi = sq->vq->vdev->priv;unsigned int index =vq2txq (sq->vq);struct netdev_queue *txq; +int opaque; +bool done;if (unlikely (is_xdp_raw_buffer_queue (vi, index))) {/* We don't need to enable cb for XDP */
@@ -1513,10 +1515,28 @@ static int virtnet_poll_tx(struct napi_struct *napi, int budget) txq =netdev_get_tx_queue (vi->dev, index);__netif_tx_lock (txq,raw_smp_processor_id ()); +virtqueue_disable_cb (sq->vq);free_old_xmit_skbs (sq, true); + + opaque =virtqueue_enable_cb_prepare (sq->vq); + + done =napi_complete_done (napi,0 ); + +if (!done) +virtqueue_disable_cb (sq->vq); +__netif_tx_unlock (txq); -virtqueue_napi_complete (napi, sq->vq,0 ); +if (done) { +if (unlikely (virtqueue_poll (sq->vq, opaque))) { +if (napi_schedule_prep (napi)) { +__netif_tx_lock (txq,raw_smp_processor_id ()); +virtqueue_disable_cb (sq->vq); +__netif_tx_unlock (txq); +__napi_schedule (napi); + } + } + }if (sq->vq->num_free >=2 +MAX_SKB_FRAGS )netif_tx_wake_queue (txq);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 111/149 nvme-tcp: cant set sk_user_data without write_lock
In reply to Greg Kroah-HartmanFrom: Maurizio Lombardi <[email protected]>
[ Upstream commit 0755d3be2d9bb6ea38598ccd30d6bbaa1a5c3a50 ]
The sk_user_data pointer is supposed to be modified only while holding the write_lock "sk_callback_lock", otherwise we could race with other threads and crash the kernel.
we can't take the write_lock in nvmet_tcp_state_change() because it would cause a deadlock, but the release_work queue will set the pointer to NULL later so we can simply remove the assignment.
--- drivers/nvme/target/tcp.c | 1 - 1 file changed, 1 deletion(-)
drivers/nvme/target/tcp.c +0 -1
@@ -1412,7 +1412,6 @@ static void nvmet_tcp_state_change(struct sock *sk)case TCP_CLOSE_WAIT :case TCP_CLOSE :/* FALLTHRU */ - sk->sk_user_data =NULL ;nvmet_tcp_schedule_release_queue (queue);break ;default :
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 112/149 ALSA: isa: Fix error return code in snd_cmi8330_probe()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit 31028cbed26a8afa25533a10425ffa2ab794c76c ]
When 'SB_HW_16' check fails, the error code -ENODEV instead of 0 should be returned, which is the same as that returned when 'WSS_HW_CMI8330' check fails.
--- sound/isa/cmi8330.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/isa/cmi8330.c +1 -1
@@ -549,7 +549,7 @@ static int snd_cmi8330_probe(struct snd_card *card, int dev) }if (acard->sb->hardware !=SB_HW_16 ) { snd_printk(KERN_ERR PFX "SB16 not found during probe\n"); -return err; +return -ENODEV ; }snd_wss_out (acard->wss,CS4231_MISC_INFO ,0x40 );/* switch on MODE2 */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 113/149 NFSv4/pNFS: Dont call _nfs4_pnfs_v3_ds_connect multiple times
In reply to Greg Kroah-HartmanFrom: Trond Myklebust <[email protected]>
[ Upstream commit f46f84931a0aa344678efe412d4b071d84d8a805 ]
After we grab the lock in nfs4_pnfs_ds_connect(), there is no check for whether or not ds->ds_clp has already been initialised, so we can end up adding the same transports multiple times.
--- fs/nfs/pnfs_nfs.c | 52 +++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 26 deletions(-)
fs/nfs/pnfs_nfs.c +26 -26
@@ -556,19 +556,16 @@ out: }EXPORT_SYMBOL_GPL (nfs4_pnfs_ds_add); -static void nfs4_wait_ds_connect (struct nfs4_pnfs_ds *ds) +static int nfs4_wait_ds_connect (struct nfs4_pnfs_ds *ds) {might_sleep (); -wait_on_bit (&ds->ds_state,NFS4DS_CONNECTING , -TASK_KILLABLE ); +return wait_on_bit (&ds->ds_state,NFS4DS_CONNECTING ,TASK_KILLABLE ); }static void nfs4_clear_ds_conn_bit (struct nfs4_pnfs_ds *ds) {smp_mb__before_atomic (); -clear_bit (NFS4DS_CONNECTING , &ds->ds_state); -smp_mb__after_atomic (); -wake_up_bit (&ds->ds_state,NFS4DS_CONNECTING ); +clear_and_wake_up_bit (NFS4DS_CONNECTING , &ds->ds_state); } static struct nfs_client *(*get_v3_ds_connect)(
@@ -734,30 +731,33 @@ int nfs4_pnfs_ds_connect(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds, {int err; -again: - err =0 ; -if (test_and_set_bit (NFS4DS_CONNECTING , &ds->ds_state) ==0 ) { -if (version ==3 ) { - err =_nfs4_pnfs_v3_ds_connect (mds_srv, ds, timeo, - retrans); - }else if (version ==4 ) { - err =_nfs4_pnfs_v4_ds_connect (mds_srv, ds, timeo, - retrans, minor_version); - }else { -dprintk ("%s: unsupported DS version %d\n" , __func__, - version); - err = -EPROTONOSUPPORT ; - } +do { + err =nfs4_wait_ds_connect (ds); +if (err || ds->ds_clp) + goto out; +if (nfs4_test_deviceid_unavailable (devid)) +return -ENODEV ; + }while (test_and_set_bit (NFS4DS_CONNECTING , &ds->ds_state) !=0 ); -nfs4_clear_ds_conn_bit (ds); - }else { -nfs4_wait_ds_connect (ds); +if (ds->ds_clp) + goto connect_done; -/* what was waited on didn't connect AND didn't mark unavail */ -if (!ds->ds_clp && !nfs4_test_deviceid_unavailable (devid)) - goto again; +switch (version) { +case 3 : + err =_nfs4_pnfs_v3_ds_connect (mds_srv, ds, timeo, retrans); +break ; +case 4 : + err =_nfs4_pnfs_v4_ds_connect (mds_srv, ds, timeo, retrans, + minor_version); +break ; +default : +dprintk ("%s: unsupported DS version %d\n" , __func__, version); + err = -EPROTONOSUPPORT ; } +connect_done: +nfs4_clear_ds_conn_bit (ds); +out:/* * At this point the ds->ds_clp should be ready, but it might have * hit an error.
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 114/149 hexagon: use common DISCARDS macro
In reply to Greg Kroah-HartmanFrom: Nathan Chancellor <[email protected]>
[ Upstream commit 681ba73c72302214686401e707e2087ed11a6556 ]
ld.lld warns that the '.modinfo' section is not currently handled:
ld.lld: warning: kernel/built-in.a(workqueue.o):(.modinfo) is being placed in '.modinfo' ld.lld: warning: kernel/built-in.a(printk/printk.o):(.modinfo) is being placed in '.modinfo' ld.lld: warning: kernel/built-in.a(irq/spurious.o):(.modinfo) is being placed in '.modinfo' ld.lld: warning: kernel/built-in.a(rcu/update.o):(.modinfo) is being placed in '.modinfo'
The '.modinfo' section was added in commit 898490c010b5 ("moduleparam:
Save information about built-in modules in separate file") to the DISCARDS macro but Hexagon has never used that macro. The unification of DISCARDS happened in commit 023bf6f1b8bf ("linker script: unify usage of discard definition") in 2009, prior to Hexagon being added in 2011.
Switch Hexagon over to the DISCARDS macro so that anything that is expected to be discarded gets discarded.
--- arch/hexagon/kernel/vmlinux.lds.S | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
arch/hexagon/kernel/vmlinux.lds.S +1 -6
@@ -60,13 +60,8 @@ SECTIONS _end = .; - /DISCARD/ : { - EXIT_TEXT - EXIT_DATA - EXIT_CALL - } - STABS_DEBUG DWARF_DEBUG + DISCARDS }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 115/149 ARM: dts: gemini-rut1xx: remove duplicate ethernet node
In reply to Greg Kroah-HartmanFrom: Corentin Labbe <[email protected]>
[ Upstream commit 3d3bb3d27cd371d3edb43eeb1beb8ae4e92a356d ]
Two ethernet node was added by
commit 95220046a62c ("ARM: dts: Add ethernet to a bunch of platforms") and commit d6d0cef55e5b ("ARM: dts: Add the FOTG210 USB host to Gemini boards")
This patch removes the duplicate one.
--- arch/arm/boot/dts/gemini-rut1xx.dts | 12 ------------ 1 file changed, 12 deletions(-)
arch/arm/boot/dts/gemini-rut1xx.dts +0 -12
@@ -125,18 +125,6 @@ }; }; - ethernet@60000000 { - status = "okay"; - - ethernet-port@0 { - phy-mode = "rgmii"; - phy-handle = <&phy0>; - }; - ethernet-port@1 { - /* Not used in this platform */ - }; - }; - usb@68000000 { status = "okay"; };
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 116/149 reset: a10sr: add missing of_match_table reference
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 466ba3c8ff4fae39e455ff8d080b3d5503302765 ]
The driver defined of_device_id table but did not use it with of_match_table. This prevents usual matching via devicetree and causes a W=1 warning:
drivers/reset/reset-a10sr.c:111:34: warning:
‘a10sr_reset_of_match’ defined but not used [-Wunused-const-variable=]
--- drivers/reset/reset-a10sr.c | 1 + 1 file changed, 1 insertion(+)
drivers/reset/reset-a10sr.c +1 -0
@@ -118,6 +118,7 @@ static struct platform_driver a10sr_reset_driver = { .probe = a10sr_reset_probe, .driver = { .name = "altr_a10sr_reset", + .of_match_table = a10sr_reset_of_match, }, };module_platform_driver (a10sr_reset_driver);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 117/149 ARM: exynos: add missing of_node_put for loop iteration
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 48d551bf20858240f38a0276be3016ff379918ac ]
Early exits from for_each_compatible_node() should decrement the node reference counter. Reported by Coccinelle:
arch/arm/mach-exynos/exynos.c:52:1-25: WARNING:
Function "for_each_compatible_node" should have of_node_put() before break around line 58.
--- arch/arm/mach-exynos/exynos.c | 2 ++ 1 file changed, 2 insertions(+)
arch/arm/mach-exynos/exynos.c +2 -0
@@ -46,6 +46,7 @@ void __init exynos_sysram_init(void) sysram_base_addr =of_iomap (node,0 ); sysram_base_phys =of_translate_address (node,of_get_address (node,0 ,NULL ,NULL )); +of_node_put (node);break ; }
@@ -53,6 +54,7 @@ void __init exynos_sysram_init(void)if (!of_device_is_available (node))continue ; sysram_ns_base_addr =of_iomap (node,0 ); +of_node_put (node);break ; } }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 118/149 ARM: dts: exynos: fix PWM LED max brightness on Odroid XU/XU3
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 75121e1dc9fe4def41e63d57f6a53749b88006ed ]
There is no "max_brightness" property. This brings the intentional brightness reduce of green LED and dtschema checks as well:
arch/arm/boot/dts/exynos5410-odroidxu.dt.yaml: led-controller-1: led-1: 'max-brightness' is a required property
--- arch/arm/boot/dts/exynos54xx-odroidxu-leds.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/exynos54xx-odroidxu-leds.dtsi +2 -2
@@ -22,7 +22,7 @@ * Green LED is much brighter than the others * so limit its max brightness */ - max_brightness = <127>; + max-brightness = <127>; linux,default-trigger = "mmc0"; };
@@ -30,7 +30,7 @@ label = "blue:heartbeat"; pwms = <&pwm 2 2000000 0>; pwm-names = "pwm2"; - max_brightness = <255>; + max-brightness = <255>; linux,default-trigger = "heartbeat"; }; };
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 119/149 ARM: dts: exynos: fix PWM LED max brightness on Odroid HC1
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit a7e59c84cf2055a1894f45855c8319191f2fa59e ]
There is no "max_brightness" property as pointed out by dtschema:
arch/arm/boot/dts/exynos5422-odroidhc1.dt.yaml: led-controller: led-1: 'max-brightness' is a required property
--- arch/arm/boot/dts/exynos5422-odroidhc1.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/exynos5422-odroidhc1.dts +1 -1
@@ -22,7 +22,7 @@ label = "blue:heartbeat"; pwms = <&pwm 2 2000000 0>; pwm-names = "pwm2"; - max_brightness = <255>; + max-brightness = <255>; linux,default-trigger = "heartbeat"; }; };
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 120/149 ARM: dts: exynos: fix PWM LED max brightness on Odroid XU4
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit fd2f1717966535b7d0b6fe45cf0d79e94330da5f ]
There is no "max_brightness" property as pointed out by dtschema:
arch/arm/boot/dts/exynos5422-odroidxu4.dt.yaml: led-controller: led-1: 'max-brightness' is a required property
--- arch/arm/boot/dts/exynos5422-odroidxu4.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/exynos5422-odroidxu4.dts +1 -1
@@ -24,7 +24,7 @@ label = "blue:heartbeat"; pwms = <&pwm 2 2000000 0>; pwm-names = "pwm2"; - max_brightness = <255>; + max-brightness = <255>; linux,default-trigger = "heartbeat"; }; };
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 121/149 memory: atmel-ebi: add missing of_node_put for loop iteration
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 907c5bbb514a4676160e79764522fff56ce3448e ]
Early exits from for_each_available_child_of_node() should decrement the node reference counter. Reported by Coccinelle:
drivers/memory/atmel-ebi.c:593:1-33: WARNING:
Function "for_each_available_child_of_node" should have of_node_put() before return around line 604.
--- drivers/memory/atmel-ebi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/memory/atmel-ebi.c +3 -1
@@ -601,8 +601,10 @@ static int atmel_ebi_probe(struct platform_device *pdev) child); ret =atmel_ebi_dev_disable (ebi, child); -if (ret) +if (ret) { +of_node_put (child);return ret; + } } }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 122/149 reset: brcmstb: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit e207457f9045343a24d936fbb67eb4b412f1c6ad ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/reset/reset-brcmstb.c | 1 + 1 file changed, 1 insertion(+)
drivers/reset/reset-brcmstb.c +1 -0
@@ -111,6 +111,7 @@ static const struct of_device_id brcmstb_reset_of_match[] = { { .compatible = "brcm,brcmstb-reset" }, {/* sentinel */ } }; +MODULE_DEVICE_TABLE (of, brcmstb_reset_of_match);static struct platform_driver brcmstb_reset_driver = { .probe = brcmstb_reset_probe,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 123/149 memory: pl353: Fix error return code in pl353_smc_probe()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit 76e5624f3f9343a621dd3f4006f4e4d9c3f91e33 ]
When no child nodes are matched, an appropriate error code -ENODEV should be returned. However, we currently do not explicitly assign this error code to 'err'. As a result, 0 was incorrectly returned.
--- drivers/memory/pl353-smc.c | 1 + 1 file changed, 1 insertion(+)
drivers/memory/pl353-smc.c +1 -0
@@ -407,6 +407,7 @@ static int pl353_smc_probe(struct amba_device *adev, const struct amba_id *id)break ; }if (!match) { + err = -ENODEV ;dev_err (&adev->dev,"no matching children\n" ); goto out_clk_disable; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 124/149 rtc: fix snprintf() checking in is_rtc_hctosys()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit 54b909436ede47e0ee07f1765da27ec2efa41e84 ]
The scnprintf() function silently truncates the printf() and returns the number bytes that it was able to copy (not counting the NUL terminator). Thus, the highest value it can return here is "NAME_SIZE - 1" and the overflow check is dead code. Fix this by using the snprintf() function which returns the number of bytes that would have been copied if there was enough space and changing the condition from "> NAME_SIZE" to ">= NAME_SIZE".
--- drivers/rtc/proc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/rtc/proc.c +2 -2
@@ -23,8 +23,8 @@ static bool is_rtc_hctosys(struct rtc_device *rtc)int size;char name[NAME_SIZE ]; - size =scnprintf (name,NAME_SIZE ,"rtc%d" , rtc->id); -if (size >NAME_SIZE ) + size =snprintf (name,NAME_SIZE ,"rtc%d" , rtc->id); +if (size >=NAME_SIZE )return false;return !strncmp (name,CONFIG_RTC_HCTOSYS_DEVICE ,NAME_SIZE );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 125/149 arm64: dts: renesas: v3msk: Fix memory size
In reply to Greg Kroah-HartmanFrom: Valentine Barshak <[email protected]>
[ Upstream commit a422ec20caef6a50cf3c1efa93538888ebd576a6 ]
The V3MSK board has 2 GiB RAM according to the datasheet and schematics.
--- arch/arm64/boot/dts/renesas/r8a77970-v3msk.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/renesas/r8a77970-v3msk.dts +1 -1
@@ -59,7 +59,7 @@ memory@48000000 { device_type = "memory"; /* first 128MB is reserved for secure area. */ - reg = <0x0 0x48000000 0x0 0x38000000>; + reg = <0x0 0x48000000 0x0 0x78000000>; }; osc5_clk: osc5-clock {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 126/149 ARM: dts: r8a7779, marzen: Fix DU clock names
In reply to Greg Kroah-HartmanFrom: Geert Uytterhoeven <[email protected]>
[ Upstream commit 6ab8c23096a29b69044209a5925758a6f88bd450 ]
"make dtbs_check" complains:
arch/arm/boot/dts/r8a7779-marzen.dt.yaml: display@fff80000: clock-names:0: 'du.0' was expected
Change the first clock name to match the DT bindings.
This has no effect on actual operation, as the Display Unit driver in Linux does not use the first clock name on R-Car H1, but just grabs the first clock.
--- arch/arm/boot/dts/r8a7779-marzen.dts | 2 +- arch/arm/boot/dts/r8a7779.dtsi | 1 + 2 files changed, 2 insertions(+), 1 deletion(-)
arch/arm/boot/dts/r8a7779-marzen.dts +1 -1
@@ -146,7 +146,7 @@ status = "okay"; clocks = <&mstp1_clks R8A7779_CLK_DU>, <&x3_clk>; - clock-names = "du", "dclkin.0"; + clock-names = "du.0", "dclkin.0"; ports { port@0 {
arch/arm/boot/dts/r8a7779.dtsi +1 -0
@@ -463,6 +463,7 @@ reg = <0xfff80000 0x40000>; interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>; clocks = <&mstp1_clks R8A7779_CLK_DU>; + clock-names = "du.0"; power-domains = <&sysc R8A7779_PD_ALWAYS_ON>; status = "disabled";
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 127/149 arm64: dts: qcom: msm8994-angler: Fix gpio-reserved-ranges 85-88
In reply to Greg Kroah-HartmanFrom: Petr Vorel <[email protected]>
[ Upstream commit f890f89d9a80fffbfa7ca791b78927e5b8aba869 ]
Reserve GPIO pins 85-88 as these aren't meant to be accessible from the application CPUs (causes reboot). Yet another fix similar to 9134586715e3, 5f8d3ab136d0, which is needed to allow angler to boot after 3edfb7bd76bd ("gpiolib: Show correct direction from the beginning").
--- arch/arm64/boot/dts/qcom/msm8994-angler-rev-101.dts | 4 ++++ 1 file changed, 4 insertions(+)
arch/arm64/boot/dts/qcom/msm8994-angler-rev-101.dts +4 -0
@@ -30,3 +30,7 @@ }; }; }; + +&tlmm { + gpio-reserved-ranges = <85 4>; +};
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 128/149 firmware: tegra: Fix error return code in tegra210_bpmp_init()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit 7fea67710e9f6a111a2c9440576f2396ccd92d57 ]
When call irq_get_irq_data() to get the IRQ's irq_data failed, an appropriate error code -ENOENT should be returned. However, we directly return 'err', which records the IRQ number instead of the error code.
--- drivers/firmware/tegra/bpmp-tegra210.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/firmware/tegra/bpmp-tegra210.c +1 -1
@@ -210,7 +210,7 @@ static int tegra210_bpmp_init(struct tegra_bpmp *bpmp) priv->tx_irq_data =irq_get_irq_data (err);if (!priv->tx_irq_data) {dev_err (&pdev->dev,"failed to get IRQ data for TX IRQ\n" ); -return err; +return -ENOENT ; } err =platform_get_irq_byname (pdev,"rx" );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 129/149 firmware: arm_scmi: Reset Rx buffer to max size during async commands
In reply to Greg Kroah-HartmanFrom: Cristian Marussi <[email protected]>
[ Upstream commit 0cb7af474e0dbb2f500c67aa62b6db9fafa74de2 ]
During an async commands execution the Rx buffer length is at first set to max_msg_sz when the synchronous part of the command is first sent. However once the synchronous part completes the transport layer waits for the delayed response which will be processed using the same xfer descriptor initially allocated. Since synchronous response received at the end of the xfer will shrink the Rx buffer length to the effective payload response length, it needs to be reset again.
Raise the Rx buffer length again to max_msg_sz before fetching the delayed response to ensure full response is read correctly from the shared memory.
[sudeep.holla: moved reset to scmi_handle_response as it could race with
do_xfer_with_response]
--- drivers/firmware/arm_scmi/driver.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/firmware/arm_scmi/driver.c +4 -0
@@ -370,6 +370,10 @@ static void scmi_rx_callback(struct mbox_client *cl, void *m) xfer = &minfo->xfer_block[xfer_id]; +/* rx.len could be shrunk in the sync do_xfer, so reset to maxsz */ +if (msg_type ==MSG_TYPE_DELAYED_RESP ) + xfer->rx.len = info->desc->max_msg_size; +scmi_dump_header_dbg (dev, &xfer->hdr);scmi_fetch_response (xfer, mem);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 130/149 ARM: dts: BCM5301X: Fixup SPI binding
In reply to Greg Kroah-HartmanFrom: Rafał Miłecki <[email protected]>
[ Upstream commit d5aede3e6dd1b8ca574600a1ecafe1e580c53f2f ]
1. Reorder interrupts
2. Fix typo: s/spi_lr_overhead/spi_lr_overread/
3. Rename node: s/spi-nor@0/flash@0/
This fixes:arch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dt.yaml: spi@18029200: interrupt-names: 'oneOf' conditional failed, one must be fixed:
['spi_lr_fullness_reached', 'spi_lr_session_aborted', 'spi_lr_impatient', 'spi_lr_session_done', 'spi_lr_overhead', 'mspi_done', 'mspi_halted'] is too long Additional items are not allowed ('spi_lr_session_aborted', 'spi_lr_impatient', 'spi_lr_session_done', 'spi_lr_overhead', 'mspi_done', 'mspi_halted' were unexpected) 'mspi_done' was expected
'spi_l1_intr' was expected
'mspi_halted' was expected
'spi_lr_fullness_reached' was expected
'spi_lr_session_aborted' was expected
'spi_lr_impatient' was expected
'spi_lr_session_done' was expected
'spi_lr_overread' was expected
From schema: Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yamlarch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dt.yaml: spi-nor@0: $nodename:0: 'spi-nor@0' does not match '^flash(@.*)?$'
From schema: Documentation/devicetree/bindings/mtd/jedec,spi-nor.yaml
--- arch/arm/boot/dts/bcm5301x.dtsi | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
arch/arm/boot/dts/bcm5301x.dtsi +9 -9
@@ -494,27 +494,27 @@ <0x1811b408 0x004>, <0x180293a0 0x01c>; reg-names = "mspi", "bspi", "intr_regs", "intr_status_reg"; - interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>, + interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>; - interrupt-names = "spi_lr_fullness_reached", + <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "mspi_done", + "mspi_halted", + "spi_lr_fullness_reached", "spi_lr_session_aborted", "spi_lr_impatient", "spi_lr_session_done", - "spi_lr_overhead", - "mspi_done", - "mspi_halted"; + "spi_lr_overread"; clocks = <&iprocmed>; clock-names = "iprocmed"; num-cs = <2>; #address-cells = <1>; #size-cells = <0>; - spi_nor: spi-nor@0 { + spi_nor: flash@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <20000000>;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 131/149 reset: bail if try_module_get() fails
In reply to Greg Kroah-HartmanFrom: Philipp Zabel <[email protected]>
[ Upstream commit 4fb26fb83f0def3d39c14e268bcd4003aae8fade ]
Abort instead of returning a new reset control for a reset controller device that is going to have its module unloaded.
--- drivers/reset/core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/reset/core.c +4 -1
@@ -565,7 +565,10 @@ static struct reset_control *__reset_control_get_internal(if (!rstc)return ERR_PTR (-ENOMEM ); -try_module_get (rcdev->owner); +if (!try_module_get (rcdev->owner)) { +kfree (rstc); +return ERR_PTR (-ENODEV ); + } rstc->rcdev = rcdev;list_add (&rstc->list, &rcdev->reset_control_head);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 132/149 memory: fsl_ifc: fix leak of IO mapping on probe failure
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 3b132ab67fc7a358fff35e808fa65d4bea452521 ]
On probe error the driver should unmap the IO memory. Smatch reports:
drivers/memory/fsl_ifc.c:298 fsl_ifc_ctrl_probe() warn: 'fsl_ifc_ctrl_dev->gregs' not released on lines: 298.
--- drivers/memory/fsl_ifc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/memory/fsl_ifc.c +2 -2
@@ -218,8 +218,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev) fsl_ifc_ctrl_dev->gregs =of_iomap (dev->dev.of_node,0 );if (!fsl_ifc_ctrl_dev->gregs) {dev_err (&dev->dev,"failed to get memory region\n" ); - ret = -ENODEV ; - goto err; +return -ENODEV ; }if (of_property_read_bool (dev->dev.of_node,"little-endian" )) {
@@ -295,6 +294,7 @@ err_irq:free_irq (fsl_ifc_ctrl_dev->irq, fsl_ifc_ctrl_dev);irq_dispose_mapping (fsl_ifc_ctrl_dev->irq); err: +iounmap (fsl_ifc_ctrl_dev->gregs);return ret; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 133/149 memory: fsl_ifc: fix leak of private memory on probe failure
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 8e0d09b1232d0538066c40ed4c13086faccbdff6 ]
On probe error the driver should free the memory allocated for private structure. Fix this by using resource-managed allocation.
--- drivers/memory/fsl_ifc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/memory/fsl_ifc.c +2 -2
@@ -96,7 +96,6 @@ static int fsl_ifc_ctrl_remove(struct platform_device *dev)iounmap (ctrl->gregs);dev_set_drvdata (&dev->dev,NULL ); -kfree (ctrl);return 0 ; }
@@ -208,7 +207,8 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)dev_info (&dev->dev,"Freescale Integrated Flash Controller\n" ); - fsl_ifc_ctrl_dev =kzalloc (sizeof (*fsl_ifc_ctrl_dev),GFP_KERNEL ); + fsl_ifc_ctrl_dev =devm_kzalloc (&dev->dev,sizeof (*fsl_ifc_ctrl_dev), +GFP_KERNEL );if (!fsl_ifc_ctrl_dev)return -ENOMEM ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 134/149 ARM: dts: am335x: align ti,pindir-d0-out-d1-in property with dt-shema
In reply to Greg Kroah-HartmanFrom: Aswath Govindraju <[email protected]>
[ Upstream commit 414bfe1d26b60ef20b58e36efd5363188a694bab ]
ti,pindir-d0-out-d1-in property is expected to be of type boolean. Therefore, fix the property accordingly.
--- arch/arm/boot/dts/am335x-cm-t335.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/am335x-cm-t335.dts +1 -1
@@ -516,7 +516,7 @@ status = "okay"; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>; - ti,pindir-d0-out-d1-in = <1>; + ti,pindir-d0-out-d1-in; /* WLS1271 WiFi */ wlcore: wlcore@1 { compatible = "ti,wl1271";
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 135/149 ARM: dts: am437x: align ti,pindir-d0-out-d1-in property with dt-shema
In reply to Greg Kroah-HartmanFrom: Aswath Govindraju <[email protected]>
[ Upstream commit 9b11fec7345f21995f4ea4bafb0e108b9a620238 ]
ti,pindir-d0-out-d1-in property is expected to be of type boolean. Therefore, fix the property accordingly.
--- arch/arm/boot/dts/am43x-epos-evm.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/am43x-epos-evm.dts +2 -2
@@ -848,7 +848,7 @@ pinctrl-names = "default", "sleep"; pinctrl-0 = <&spi0_pins_default>; pinctrl-1 = <&spi0_pins_sleep>; - ti,pindir-d0-out-d1-in = <1>; + ti,pindir-d0-out-d1-in; }; &spi1 {
@@ -856,7 +856,7 @@ pinctrl-names = "default", "sleep"; pinctrl-0 = <&spi1_pins_default>; pinctrl-1 = <&spi1_pins_sleep>; - ti,pindir-d0-out-d1-in = <1>; + ti,pindir-d0-out-d1-in; }; &usb2_phy1 {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 136/149 ARM: dts: imx6q-dhcom: Fix ethernet reset time properties
In reply to Greg Kroah-HartmanFrom: Christoph Niedermaier <[email protected]>
[ Upstream commit c016c26c1631f539c652b5d82242a3ca402545c1 ]
Fix ethernet reset time properties as described in Documentation/devicetree/bindings/net/ethernet-phy.yaml
--- arch/arm/boot/dts/imx6q-dhcom-som.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/imx6q-dhcom-som.dtsi +2 -2
@@ -98,8 +98,8 @@ reg = <0>; max-speed = <100>; reset-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>; - reset-delay-us = <1000>; - reset-post-delay-us = <1000>; + reset-assert-us = <1000>; + reset-deassert-us = <1000>; }; }; };
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 137/149 ARM: dts: imx6q-dhcom: Fix ethernet plugin detection problems
In reply to Greg Kroah-HartmanFrom: Christoph Niedermaier <[email protected]>
[ Upstream commit e2bdd3484890441b9cc2560413a86e8f2aa04157 ]
To make the ethernet cable plugin detection reliable the power detection of the smsc phy has been disabled.
--- arch/arm/boot/dts/imx6q-dhcom-som.dtsi | 1 + 1 file changed, 1 insertion(+)
arch/arm/boot/dts/imx6q-dhcom-som.dtsi +1 -0
@@ -100,6 +100,7 @@ reset-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>; reset-assert-us = <1000>; reset-deassert-us = <1000>; + smsc,disable-energy-detect; /* Make plugin detection reliable */ }; }; };
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 138/149 ARM: dts: imx6q-dhcom: Add gpios pinctrl for i2c bus recovery
In reply to Greg Kroah-HartmanFrom: Christoph Niedermaier <[email protected]>
[ Upstream commit ddc873cd3c0af4faad6a00bffda21c3f775126dd ]
The i2c bus can freeze at the end of transaction so the bus can no longer work. This scenario is improved by adding scl/sda gpios definitions to implement the i2c bus recovery mechanism.
--- arch/arm/boot/dts/imx6q-dhcom-som.dtsi | 36 +++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-)
arch/arm/boot/dts/imx6q-dhcom-som.dtsi +33 -3
@@ -107,22 +107,31 @@ &i2c1 { clock-frequency = <100000>; - pinctrl-names = "default"; + pinctrl-names = "default", "gpio"; pinctrl-0 = <&pinctrl_i2c1>; + pinctrl-1 = <&pinctrl_i2c1_gpio>; + scl-gpios = <&gpio3 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + sda-gpios = <&gpio3 28 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; status = "okay"; }; &i2c2 { clock-frequency = <100000>; - pinctrl-names = "default"; + pinctrl-names = "default", "gpio"; pinctrl-0 = <&pinctrl_i2c2>; + pinctrl-1 = <&pinctrl_i2c2_gpio>; + scl-gpios = <&gpio4 12 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + sda-gpios = <&gpio4 13 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; status = "okay"; }; &i2c3 { clock-frequency = <100000>; - pinctrl-names = "default"; + pinctrl-names = "default", "gpio"; pinctrl-0 = <&pinctrl_i2c3>; + pinctrl-1 = <&pinctrl_i2c3_gpio>; + scl-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + sda-gpios = <&gpio1 6 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; status = "okay"; ltc3676: pmic@3c {
@@ -288,6 +297,13 @@ >; }; + pinctrl_i2c1_gpio: i2c1-gpio-grp { + fsl,pins = < + MX6QDL_PAD_EIM_D21__GPIO3_IO21 0x4001b8b1 + MX6QDL_PAD_EIM_D28__GPIO3_IO28 0x4001b8b1 + >; + }; + pinctrl_i2c2: i2c2-grp { fsl,pins = < MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
@@ -295,6 +311,13 @@ >; }; + pinctrl_i2c2_gpio: i2c2-gpio-grp { + fsl,pins = < + MX6QDL_PAD_KEY_COL3__GPIO4_IO12 0x4001b8b1 + MX6QDL_PAD_KEY_ROW3__GPIO4_IO13 0x4001b8b1 + >; + }; + pinctrl_i2c3: i2c3-grp { fsl,pins = < MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
@@ -302,6 +325,13 @@ >; }; + pinctrl_i2c3_gpio: i2c3-gpio-grp { + fsl,pins = < + MX6QDL_PAD_GPIO_3__GPIO1_IO03 0x4001b8b1 + MX6QDL_PAD_GPIO_6__GPIO1_IO06 0x4001b8b1 + >; + }; + pinctrl_pmic_hw300: pmic-hw300-grp { fsl,pins = < MX6QDL_PAD_EIM_A25__GPIO5_IO02 0x1B0B0
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 139/149 thermal/drivers/rcar_gen3_thermal: Fix coefficient calculations
In reply to Greg Kroah-HartmanFrom: Niklas Söderlund <[email protected]>
[ Upstream commit 8946187ab57ffd02088e50256c73dd31f49db06d ]
The fixed value of 157 used in the calculations are only correct for M3-W, on other Gen3 SoC it should be 167. The constant can be derived correctly from the static TJ_3 constant and the SoC specific TJ_1 value. Update the calculation be correct on all Gen3 SoCs.
--- drivers/thermal/rcar_gen3_thermal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/thermal/rcar_gen3_thermal.c +1 -1
@@ -143,7 +143,7 @@ static void rcar_gen3_thermal_calc_coefs(struct rcar_gen3_thermal_tsc *tsc,* Division is not scaled in BSP and if scaled it might overflow * the dividend (4095 * 4095 << 14 > INT_MAX) so keep it unscaled */ - tsc->tj_t = (FIXPT_INT ((ptat[1 ] - ptat[2 ]) *157 ) + tsc->tj_t = (FIXPT_INT ((ptat[1 ] - ptat[2 ]) * (ths_tj_1 -TJ_3 )) / (ptat[0 ] - ptat[2 ])) +FIXPT_INT (TJ_3 ); tsc->coef.a1 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[2]),
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 140/149 firmware: turris-mox-rwtm: fix reply status decoding function
In reply to Greg Kroah-HartmanFrom: Marek Behún <[email protected]>
[ Upstream commit e34e60253d9272311831daed8a2d967cf80ca3dc ]
The status decoding function mox_get_status() currently contains an incorrect check: if the error status is not MBOX_STS_SUCCESS, it always returns -EIO, so the comparison to MBOX_STS_FAIL is never executed and we don't get the actual error code sent by the firmware.
Fix this.
--- drivers/firmware/turris-mox-rwtm.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/firmware/turris-mox-rwtm.c +5 -2
@@ -134,11 +134,14 @@ MOX_ATTR_RO(pubkey, "%s\n", pubkey);static int mox_get_status (enum mbox_cmd cmd,u32 retval) { -if (MBOX_STS_CMD (retval) != cmd || -MBOX_STS_ERROR (retval) !=MBOX_STS_SUCCESS ) +if (MBOX_STS_CMD (retval) != cmd)return -EIO ;else if (MBOX_STS_ERROR (retval) ==MBOX_STS_FAIL )return -(int )MBOX_STS_VALUE (retval); +else if (MBOX_STS_ERROR (retval) ==MBOX_STS_BADCMD ) +return -ENOSYS ; +else if (MBOX_STS_ERROR (retval) !=MBOX_STS_SUCCESS ) +return -EIO ;else return MBOX_STS_VALUE (retval); }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 141/149 firmware: turris-mox-rwtm: report failures better
In reply to Greg Kroah-HartmanFrom: Marek Behún <[email protected]>
[ Upstream commit 72f99888944c44de1c899bbe44db1e53bdc9d994 ]
Report a notice level message if a command is not supported by the rWTM firmware.
This should not be an error, merely a notice, because the firmware can be used on boards that do not have manufacturing information burned.
--- drivers/firmware/turris-mox-rwtm.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)
drivers/firmware/turris-mox-rwtm.c +12 -6
@@ -191,11 +191,14 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)return ret; ret =mox_get_status (MBOX_CMD_BOARD_INFO , reply->retval); -if (ret <0 && ret != -ENODATA ) { -return ret; - }else if (ret == -ENODATA ) { +if (ret == -ENODATA ) {dev_warn (rwtm->dev,"Board does not have manufacturing information burned!\n" ); + }else if (ret == -ENOSYS ) { +dev_notice (rwtm->dev, +"Firmware does not support the BOARD_INFO command\n" ); + }else if (ret <0 ) { +return ret; }else { rwtm->serial_number = reply->status[1 ]; rwtm->serial_number <<=32 ;
@@ -224,10 +227,13 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)return ret; ret =mox_get_status (MBOX_CMD_ECDSA_PUB_KEY , reply->retval); -if (ret <0 && ret != -ENODATA ) { -return ret; - }else if (ret == -ENODATA ) { +if (ret == -ENODATA ) {dev_warn (rwtm->dev,"Board has no public key burned!\n" ); + }else if (ret == -ENOSYS ) { +dev_notice (rwtm->dev, +"Firmware does not support the ECDSA_PUB_KEY command\n" ); + }else if (ret <0 ) { +return ret; }else {u32 *s = reply->status;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 142/149 firmware: turris-mox-rwtm: fail probing when firmware does not support hwrng
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit 2eab59cf0d2036a5a9e264f719b71c21ccf679c2 ]
When Marvell's rWTM firmware, which does not support the GET_RANDOM command, is used, kernel prints an error message
hwrng: no data available
every 10 seconds.
Fail probing of this driver if the rWTM firmware does not support the GET_RANDOM command.
--- drivers/firmware/turris-mox-rwtm.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
drivers/firmware/turris-mox-rwtm.c +28 -0
@@ -247,6 +247,27 @@ static int mox_get_board_info(struct mox_rwtm *rwtm)return 0 ; } +static int check_get_random_support (struct mox_rwtm *rwtm) +{ +struct armada_37xx_rwtm_tx_msg msg; +int ret; + + msg.command =MBOX_CMD_GET_RANDOM ; + msg.args[0 ] =1 ; + msg.args[1 ] = rwtm->buf_phys; + msg.args[2 ] =4 ; + + ret =mbox_send_message (rwtm->mbox, &msg); +if (ret <0 ) +return ret; + + ret =wait_for_completion_timeout (&rwtm->cmd_done,HZ /2 ); +if (ret <0 ) +return ret; + +return mox_get_status (MBOX_CMD_GET_RANDOM , rwtm->reply.retval); +} +static int mox_hwrng_read (struct hwrng *rng,void *data,size_t max,bool wait) {struct mox_rwtm *rwtm = (struct mox_rwtm *) rng->priv;
@@ -338,6 +359,13 @@ static int turris_mox_rwtm_probe(struct platform_device *pdev)if (ret <0 )dev_warn (dev,"Cannot read board information: %i\n" , ret); + ret =check_get_random_support (rwtm); +if (ret <0 ) { +dev_notice (dev, +"Firmware does not support the GET_RANDOM command\n" ); + goto free_channel; + } + rwtm->hwrng.name =DRIVER_NAME "_hwrng" ; rwtm->hwrng.read = mox_hwrng_read; rwtm->hwrng.priv = (unsigned long ) rwtm;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 143/149 scsi: be2iscsi: Fix an error handling path in beiscsi_dev_probe()
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit 030e4138d11fced3b831c2761e4cecf347bae99c ]
If an error occurs after a pci_enable_pcie_error_reporting() call, it must be undone by a corresponding pci_disable_pcie_error_reporting() call, as already done in the remove function.
--- drivers/scsi/be2iscsi/be_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/be2iscsi/be_main.c +1 -0
@@ -5745,6 +5745,7 @@ free_hba:pci_disable_msix (phba->pcidev);pci_dev_put (phba->pcidev);iscsi_host_free (phba->shost); +pci_disable_pcie_error_reporting (pcidev);pci_set_drvdata (pcidev,NULL ); disable_pci:pci_release_regions (pcidev);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 144/149 mips: always link byteswap helpers into decompressor
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit cddc40f5617e53f97ef019d5b29c1bd6cbb031ec ]
My series to clean up the unaligned access implementation across architectures caused some mips randconfig builds to fail with:
mips64-linux-ld: arch/mips/boot/compressed/decompress.o: in function `decompress_kernel':
decompress.c:(.text.decompress_kernel+0x54): undefined reference to `__bswapsi2'
It turns out that this problem has already been fixed for the XZ decompressor but now it also shows up in (at least) LZO and LZ4. From my analysis I concluded that the compiler could always have emitted those calls, but the different implementation allowed it to make otherwise better decisions about not inlining the byteswap, which results in the link error when the out-of-line code is missing.
While it could be addressed by adding it to the two decompressor implementations that are known to be affected, but as this only adds 112 bytes to the kernel, the safer choice is to always add them.
--- arch/mips/boot/compressed/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/mips/boot/compressed/Makefile +2 -2
@@ -33,7 +33,7 @@ KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ KCOV_INSTRUMENT := n # decompressor objects (linked with vmlinuz) -vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o +vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/bswapsi.o ifdef CONFIG_DEBUG_ZBOOT vmlinuzobjs-$(CONFIG_DEBUG_ZBOOT) += $(obj)/dbg.o
@@ -47,7 +47,7 @@ extra-y += uart-ath79.c $(obj)/uart-ath79.c: $(srctree)/arch/mips/ath79/early_printk.c $(call cmd,shipped) -vmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o $(obj)/bswapsi.o +vmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o extra-y += ashldi3.c $(obj)/ashldi3.c: $(obj)/%.c: $(srctree)/lib/%.c FORCE
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 145/149 mips: disable branch profiling in boot/decompress.o
In reply to Greg Kroah-HartmanFrom: Randy Dunlap <[email protected]>
[ Upstream commit 97e488073cfca0eea84450169ca4cbfcc64e33e3 ]
Use DISABLE_BRANCH_PROFILING for arch/mips/boot/compressed/decompress.o to prevent linkage errors.
mips64-linux-ld: arch/mips/boot/compressed/decompress.o: in function `LZ4_decompress_fast_extDict':
decompress.c:(.text+0x8c): undefined reference to `ftrace_likely_update'
mips64-linux-ld: decompress.c:(.text+0xf4): undefined reference to `ftrace_likely_update'
mips64-linux-ld: decompress.c:(.text+0x200): undefined reference to `ftrace_likely_update'
mips64-linux-ld: decompress.c:(.text+0x230): undefined reference to `ftrace_likely_update'
mips64-linux-ld: decompress.c:(.text+0x320): undefined reference to `ftrace_likely_update'
mips64-linux-ld: arch/mips/boot/compressed/decompress.o:decompress.c:(.text+0x3f4): more undefined references to `ftrace_likely_update' follow
--- arch/mips/boot/compressed/decompress.c | 2 ++ 1 file changed, 2 insertions(+)
arch/mips/boot/compressed/decompress.c +2 -0
@@ -7,6 +7,8 @@* Author: Wu Zhangjin <[email protected]> */ +#define DISABLE_BRANCH_PROFILING +#include <linux/types.h> #include <linux/kernel.h> #include <linux/string.h>
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 146/149 perf report: Fix --task and --stat with pipe input
In reply to Greg Kroah-HartmanFrom: Namhyung Kim <[email protected]>
[ Upstream commit 892ba7f18621a02af4428c58d97451f64685dba4 ]
Current 'perf report' fails to process a pipe input when --task or --stat options are used. This is because they reset all the tool callbacks and fails to find a matching event for a sample.
When pipe input is used, the event info is passed via ATTR records so it needs to handle that operation. Otherwise the following error occurs. Note, -14 (= -EFAULT) comes from evlist__parse_sample():
# perf record -a -o- sleep 1 | perf report -i- --stat Can't parse sample, err = -14 0x271044 [0x38]: failed to process type: 9 Error: failed to process sample #
Committer testing:
Before:
$ perf record -o- sleep 1 | perf report -i- --stat Can't parse sample, err = -14 [ perf record: Woken up 1 times to write data ] 0x1350 [0x30]: failed to process type: 9 Error: failed to process sample [ perf record: Captured and wrote 0.000 MB - ] $
After:
$ perf record -o- sleep 1 | perf report -i- --stat [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.000 MB - ]
Aggregated stats:
TOTAL events: 41
COMM events: 2 ( 4.9%)
EXIT events: 1 ( 2.4%)
SAMPLE events: 9 (22.0%)
MMAP2 events: 4 ( 9.8%)
ATTR events: 1 ( 2.4%)
FINISHED_ROUND events: 1 ( 2.4%)
THREAD_MAP events: 1 ( 2.4%)
CPU_MAP events: 1 ( 2.4%)
EVENT_UPDATE events: 1 ( 2.4%)
TIME_CONV events: 1 ( 2.4%)
FEATURE events: 19 (46.3%)
cycles:uhH stats:
SAMPLE events: 9
$
--- tools/perf/builtin-report.c | 6 ++++++ 1 file changed, 6 insertions(+)
tools/perf/builtin-report.c +6 -0
@@ -666,9 +666,14 @@ static void report__output_resort(struct report *rep)ui_progress__finish (); } +static int process_attr (struct perf_tool *tool__maybe_unused , +union perf_event *event, +struct evlist **pevlist); +static void stats_setup (struct report *rep) {memset (&rep->tool,0 ,sizeof (rep->tool)); + rep->tool.attr = process_attr; rep->tool.no_warn = true; }
@@ -688,6 +693,7 @@ static void tasks_setup(struct report *rep) rep->tool.mmap = perf_event__process_mmap; rep->tool.mmap2 = perf_event__process_mmap2; } + rep->tool.attr = process_attr; rep->tool.comm = perf_event__process_comm; rep->tool.exit = perf_event__process_exit; rep->tool.fork = perf_event__process_fork;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 147/149 MIPS: vdso: Invalid GIC access through VDSO
In reply to Greg Kroah-HartmanFrom: Martin Fäcknitz <[email protected]>
[ Upstream commit 47ce8527fbba145a7723685bc9a27d9855e06491 ]
Accessing raw timers (currently only CLOCK_MONOTONIC_RAW) through VDSO doesn't return the correct time when using the GIC as clock source. The address of the GIC mapped page is in this case not calculated correctly. The GIC mapped page is calculated from the VDSO data by subtracting PAGE_SIZE:
void *get_gic(const struct vdso_data *data) {
return (void __iomem *)data - PAGE_SIZE;
}However, the data pointer is not page aligned for raw clock sources. This is because the VDSO data for raw clock sources (CS_RAW = 1) is stored after the VDSO data for coarse clock sources (CS_HRES_COARSE = 0). Therefore, only the VDSO data for CS_HRES_COARSE is page aligned:
+--------------------+ | | | vd[CS_RAW] | ---+ | vd[CS_HRES_COARSE] | | +--------------------+ | -PAGE_SIZE | | | | GIC mapped page | <--+ | | +--------------------+
When __arch_get_hw_counter() is called with &vd[CS_RAW], get_gic returns the wrong address (somewhere inside the GIC mapped page). The GIC counter values are not returned which results in an invalid time.
--- arch/mips/include/asm/vdso/vdso.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/include/asm/vdso/vdso.h +1 -1
@@ -67,7 +67,7 @@ static inline const struct vdso_data *get_vdso_data(void)static inline void __iomem *get_gic (const struct vdso_data *data) { -return (void __iomem *)data -PAGE_SIZE ; +return (void __iomem *)((unsigned long )data &PAGE_MASK ) -PAGE_SIZE ; }#endif /* CONFIG_CLKSRC_MIPS_GIC */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 148/149 scsi: scsi_dh_alua: Fix signedness bug in alua_rtpg()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
commit 80927822e8b6be46f488524cd7d5fe683de97fc4 upstream.
The "retval" variable needs to be signed for the error handling to work.
--- drivers/scsi/device_handler/scsi_dh_alua.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/scsi/device_handler/scsi_dh_alua.c +2 -1
@@ -508,7 +508,8 @@ static int alua_rtpg(struct scsi_devicestruct alua_port_group *tmp_pg;int len, k, off, bufflen =ALUA_RTPG_SIZE ;unsigned char *desc, *buff; -unsigned err, retval; +unsigned err; +int retval;unsigned int tpg_desc_tbl_off;unsigned char orig_transition_tmo;unsigned long flags;
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.134 release. There are 149 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 Wed, 21 Jul 2021 14:47:42 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.134-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
Following build errors noticed on arm64 architectures on 5.4 branch
Quoted 2 lines
Petr Vorel <[email protected]>
arm64: dts: qcom: msm8994-angler: Fix gpio-reserved-ranges 85-88
error: /builds/linux/arch/arm64/boot/dts/qcom/msm8994-angler-rev-101.dts:34.1-6 Label or path tlmm not found
FATAL ERROR: Syntax error parsing input tree
make[3]: *** [scripts/Makefile.lib:285:arch/arm64/boot/dts/qcom/msm8994-angler-rev-101.dtb] Error 1 make[3]: Target '__build' not remade because of errors.
make[2]: *** [/builds/linux/scripts/Makefile.build:497:arch/arm64/boot/dts/qcom] Error 2
--
Linaro LKFT
https://lkft.linaro.org
Greg Kroah-Hartman
maintainerPATCH 149/149 misc: alcor_pci: fix inverted branch condition
In reply to Greg Kroah-HartmanFrom: Tong Zhang <[email protected]>
commit 281e468446994a7672733af2bf941f4110d4a895 upstream.
This patch fixes a trivial mistake that I made in the previous attempt in fixing the null bridge issue. The branch condition is inverted and we should call alcor_pci_find_cap_offset() only if bridge is not null.
--- drivers/misc/cardreader/alcor_pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/misc/cardreader/alcor_pci.c +1 -1
@@ -138,7 +138,7 @@ static void alcor_pci_init_check_aspm(st* priv->parent_pdev will be NULL. In this case we don't check its * capability and disable ASPM completely. */ -if (!priv->parent_pdev) +if (priv->parent_pdev) priv->parent_cap_off =alcor_pci_find_cap_offset (priv, priv->parent_pdev);
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.134 release. There are 149 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 Wed, 21 Jul 2021 14:47:42 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.134-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
If you need to post an rc2, could you also pick up:
d0244847f9fc5e20df8b7483c8a4717fe0432d38 ("mmc: sdhci: Fix warning message when accessing RPMB in HS400 mode") which is in 4.9, 4.14 and 4.19 stable queues but not stable 5.4 and beyond. Thanks!
On ARCH_BRCMSTB, using 32-bit and 64-bit ARM kernels:
Signature · 1 line
Florian