All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 5.11 000/120] 5.11.9-rc1 review
@ 2021-03-22 12:26 Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 001/120] ASoC: ak4458: Add MODULE_DEVICE_TABLE Greg Kroah-Hartman
                   ` (122 more replies)
  0 siblings, 123 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, torvalds, akpm, linux, shuah, patches,
	lkft-triage, pavel, jonathanh, f.fainelli, stable

This is the start of the stable review cycle for the 5.11.9 release.
There are 120 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, 24 Mar 2021 12:19:09 +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.11.9-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.11.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Linux 5.11.9-rc1

Johan Hovold <johan@kernel.org>
    x86/apic/of: Fix CPU devicetree-node lookups

Thomas Gleixner <tglx@linutronix.de>
    genirq: Disable interrupts for force threaded handlers

Lv Yunlong <lyl2019@mail.ustc.edu.cn>
    firmware/efi: Fix a use after bug in efi_mem_reserve_persistent

Ard Biesheuvel <ardb@kernel.org>
    efi: use 32-bit alignment for efi_guid_t literals

Peter Zijlstra <peterz@infradead.org>
    static_call: Fix static_call_update() sanity check

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    MAINTAINERS: move the staging subsystem to lists.linux.dev

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    MAINTAINERS: move some real subsystems off of the staging mailing list

Harshad Shirwadkar <harshadshirwadkar@gmail.com>
    ext4: fix rename whiteout with fast commit

Jan Kara <jack@suse.cz>
    ext4: fix timer use-after-free on failed mount

Shijie Luo <luoshijie1@huawei.com>
    ext4: fix potential error in ext4_do_update_inode

zhangyi (F) <yi.zhang@huawei.com>
    ext4: do not try to set xattr into ea_inode if value is empty

Pan Bian <bianpan2016@163.com>
    ext4: stop inode update before return

zhangyi (F) <yi.zhang@huawei.com>
    ext4: find old entry again if failed to rename whiteout

Eric Biggers <ebiggers@google.com>
    ext4: fix error handling in ext4_end_enable_verity()

Shawn Guo <shawn.guo@linaro.org>
    efivars: respect EFI_UNSUPPORTED return from firmware

Oleg Nesterov <oleg@redhat.com>
    x86: Introduce TS_COMPAT_RESTART to fix get_nr_restart_syscall()

Oleg Nesterov <oleg@redhat.com>
    x86: Move TS_COMPAT back to asm/thread_info.h

Oleg Nesterov <oleg@redhat.com>
    kernel, fs: Introduce and use set_restart_fn() and arch_set_restart_data()

Thomas Gleixner <tglx@linutronix.de>
    x86/ioapic: Ignore IRQ2 again

Kan Liang <kan.liang@linux.intel.com>
    perf/x86/intel: Fix unchecked MSR access error caused by VLBR_EVENT

Kan Liang <kan.liang@linux.intel.com>
    perf/x86/intel: Fix a crash caused by zero PEBS status

Tyrel Datwyler <tyreld@linux.ibm.com>
    PCI: rpadlpar: Fix potential drc_name corruption in store functions

Fabrice Gasnier <fabrice.gasnier@foss.st.com>
    counter: stm32-timer-cnt: fix ceiling miss-alignment with reload register

Fabrice Gasnier <fabrice.gasnier@foss.st.com>
    counter: stm32-timer-cnt: fix ceiling write max value

Ye Xiang <xiang.ye@intel.com>
    iio: hid-sensor-temperature: Fix issues of timestamp channel

Ye Xiang <xiang.ye@intel.com>
    iio: hid-sensor-prox: Fix scale not correct issue

Ye Xiang <xiang.ye@intel.com>
    iio: hid-sensor-humidity: Fix alignment issue of timestamp channel

Alexandru Ardelean <alexandru.ardelean@analog.com>
    iio: adc: adi-axi-adc: add proper Kconfig dependencies

Wilfried Wessner <wilfried.wessner@gmail.com>
    iio: adc: ad7949: fix wrong ADC result due to incorrect bit mask

Linus Walleij <linus.walleij@linaro.org>
    iio: adc: ab8500-gpadc: Fix off by 10 to 3

Dinghao Liu <dinghao.liu@zju.edu.cn>
    iio: gyro: mpu3050: Fix error handling in mpu3050_trigger_handler

Dan Carpenter <dan.carpenter@oracle.com>
    iio: adis16400: Fix an error code in adis16400_initial_setup()

Jonathan Albrieux <jonathan.albrieux@gmail.com>
    iio:adc:qcom-spmi-vadc: add default scale to LR_MUX2_BAT_ID channel

Jonathan Cameron <Jonathan.Cameron@huawei.com>
    iio:adc:stm32-adc: Add HAS_IOMEM dependency

Mika Westerberg <mika.westerberg@linux.intel.com>
    thunderbolt: Increase runtime PM reference count on DP tunnel discovery

Mika Westerberg <mika.westerberg@linux.intel.com>
    thunderbolt: Initialize HopID IDAs in tb_switch_alloc()

Wesley Cheng <wcheng@codeaurora.org>
    usb: dwc3: gadget: Prevent EP queuing while stopping transfers

Wesley Cheng <wcheng@codeaurora.org>
    usb: dwc3: gadget: Allow runtime suspend if UDC unbinded

Badhri Jagan Sridharan <badhri@google.com>
    usb: typec: tcpm: Invoke power_supply_changed for tcpm-source-psy-

Elias Rudberg <mail@eliasrudberg.se>
    usb: typec: Remove vdo[3] part of tps6598x_rx_identity_reg struct

Jim Lin <jilin@nvidia.com>
    usb: gadget: configfs: Fix KASAN use-after-free

Colin Ian King <colin.king@canonical.com>
    usbip: Fix incorrect double assignment to udc->ud.tcp_rx

Alan Stern <stern@rowland.harvard.edu>
    usb-storage: Add quirk to defeat Kindle's automatic unload

Christophe Leroy <christophe.leroy@csgroup.eu>
    powerpc: Force inlining of cpu_has_feature() to avoid build failure

Sagi Grimberg <sagi@grimberg.me>
    nvme-rdma: fix possible hang when failing to set io queues

Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    gpiolib: Assign fwnode to parent's if no primary one provided

Christian König <christian.koenig@amd.com>
    drm/ttm: make ttm_bo_unpin more defensive

Daniel Vetter <daniel.vetter@ffwll.ch>
    drm/ttm: Warn on pinning without holding a reference

Christophe Leroy <christophe.leroy@csgroup.eu>
    powerpc/vdso32: Add missing _restgpr_31_x to fix build failure

Jonathan Marek <jonathan@marek.ca>
    ASoC: codecs: lpass-wsa-macro: fix RX MIX input controls

Jonathan Marek <jonathan@marek.ca>
    ASoC: codecs: lpass-va-macro: mute/unmute all active decimators

William Breathitt Gray <vilhelm.gray@gmail.com>
    counter: stm32-timer-cnt: Report count function when SLAVE_MODE_DISABLED

Heinrich Schuchardt <xypron.glpk@gmx.de>
    RISC-V: correct enum sbi_ext_rfence_fid

Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    scsi: mpt3sas: Do not use GFP_KERNEL in atomic context

dongjian <dongjian@yulong.com>
    scsi: ufs: ufs-mediatek: Correct operator & -> &&

Lv Yunlong <lyl2019@mail.ustc.edu.cn>
    scsi: myrs: Fix a double free in myrs_cleanup()

Dan Carpenter <dan.carpenter@oracle.com>
    scsi: lpfc: Fix some error codes in debugfs

Kefeng Wang <wangkefeng.wang@huawei.com>
    riscv: Correct SPARSEMEM configuration

Geert Uytterhoeven <geert@linux-m68k.org>
    RISC-V: Fix out-of-bounds accesses in init_resources()

Steve French <stfrench@microsoft.com>
    cifs: fix allocation size on newly created files

Aurelien Aptel <aaptel@suse.com>
    cifs: warn and fail if trying to use rootfs without the config option

Masahiro Yamada <masahiroy@kernel.org>
    kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again

Pavel Skripkin <paskripkin@gmail.com>
    net/qrtr: fix __netdev_alloc_skb call

Jens Axboe <axboe@kernel.dk>
    io_uring: ensure that SQPOLL thread is started for exit

Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    pstore: Fix warning in pstore_kill_sb()

Dmitry Osipenko <digetx@gmail.com>
    iommu/tegra-smmu: Make tegra_smmu_probe_device() to handle all IOMMU phandles

Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
    i915/perf: Start hrtimer only if sampling the OA buffer

Daniel Kobras <kobras@puzzle-itc.de>
    sunrpc: fix refcount leak for rpc auth modules

Gautam Dawar <gdawar.xilinx@gmail.com>
    vhost_vdpa: fix the missing irq_bypass_unregister_producer() invocation

Jason Gunthorpe <jgg@ziepe.ca>
    vfio: IOMMU_API should be selected

Timo Rothenpieler <timo@rothenpieler.org>
    svcrdma: disable timeouts on rdma backchannel

Olga Kornievskaia <kolga@netapp.com>
    NFSD: fix dest to src mount in inter-server COPY

Joe Korty <joe.korty@concurrent-rt.com>
    NFSD: Repair misuse of sv_lock in 5.10.16-rt30.

J. Bruce Fields <bfields@redhat.com>
    nfsd: don't abort copies early

Trond Myklebust <trond.myklebust@hammerspace.com>
    nfsd: Don't keep looking up unhashed files in the nfsd file cache

Sagi Grimberg <sagi@grimberg.me>
    nvmet: don't check iosqes,iocqes for discovery controllers

Sagi Grimberg <sagi@grimberg.me>
    nvme-tcp: fix a NULL deref when receiving a 0-length r2t PDU

Sagi Grimberg <sagi@grimberg.me>
    nvme-tcp: fix possible hang when failing to set io queues

Sagi Grimberg <sagi@grimberg.me>
    nvme-tcp: fix misuse of __smp_processor_id with preemption enabled

Christoph Hellwig <hch@lst.de>
    nvme: fix Write Zeroes limitations

Colin Ian King <colin.king@canonical.com>
    ALSA: usb-audio: Fix unintentional sign extension issue

David Howells <dhowells@redhat.com>
    afs: Stop listxattr() from listing "afs.*" attributes

David Howells <dhowells@redhat.com>
    afs: Fix accessing YFS xattrs on a non-YFS server

Sameer Pujar <spujar@nvidia.com>
    ASoC: simple-card-utils: Do not handle device clock

Srinivasa Rao Mandadapu <srivasam@codeaurora.org>
    ASoC: qcom: lpass-cpu: Fix lpass dai ids parse

Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    ASoC: codecs: wcd934x: add a sanity check in set channel map

Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    ASoC: qcom: sdm845: Fix array out of range on rx slim channels

Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    ASoC: qcom: sdm845: Fix array out of bounds access

Pan Xiuli <xiuli.pan@linux.intel.com>
    ASoC: SOF: intel: fix wrong poll bits in dsp power down

Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ASoC: SOF: Intel: unregister DMIC device on probe error

Hans de Goede <hdegoede@redhat.com>
    ASoC: Intel: bytcr_rt5640: Fix HP Pavilion x2 10-p0XX OVCD current threshold

Alexander Shiyan <shc_work@mail.ru>
    ASoC: fsl_ssi: Fix TDM slot setup for I2S mode

Joerg Roedel <jroedel@suse.de>
    iommu/amd: Move Stoney Ridge check to detect_ivrs()

Joerg Roedel <jroedel@suse.de>
    iommu/amd: Keep track of amd_iommu_irq_remap state

Joerg Roedel <jroedel@suse.de>
    iommu/amd: Don't call early_amd_iommu_init() when AMD IOMMU is disabled

Dillon Varone <dillon.varone@amd.com>
    drm/amd/display: Remove MPC gamut remap logic for DCN30

Calvin Hou <Calvin.Hou@amd.com>
    drm/amd/display: Correct algorithm for reversed gamma

Sung Lee <sung.lee@amd.com>
    drm/amd/display: Copy over soc values before bounding box creation

Stefano Garzarella <sgarzare@redhat.com>
    vhost-vdpa: set v->config_ctx to NULL if eventfd_ctx_fdget() fails

Stefano Garzarella <sgarzare@redhat.com>
    vhost-vdpa: fix use-after-free of v->config_ctx

David Sterba <dsterba@suse.com>
    btrfs: fix slab cache flags for free space tree bitmap

Filipe Manana <fdmanana@suse.com>
    btrfs: fix race when cloning extent buffer during rewind of an old root

Chao Yu <chao@kernel.org>
    zonefs: fix to update .i_wr_refcnt correctly in zonefs_open_zone()

Damien Le Moal <damien.lemoal@wdc.com>
    zonefs: prevent use of seq files as swap file

Damien Le Moal <damien.lemoal@wdc.com>
    zonefs: Fix O_APPEND async write handling

Niklas Schnelle <schnelle@linux.ibm.com>
    s390/pci: fix leak of PCI device structure

Niklas Schnelle <schnelle@linux.ibm.com>
    s390/pci: remove superfluous zdev->zbus check

Niklas Schnelle <schnelle@linux.ibm.com>
    s390/pci: refactor zpci_create_device()

Gerald Schaefer <gerald.schaefer@linux.ibm.com>
    s390/vtime: fix increased steal time accounting

Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Revert "PM: runtime: Update device status before letting suppliers suspend"

Jeremy Szu <jeremy.szu@canonical.com>
    ALSA: hda/realtek: fix mute/micmute LEDs for HP 850 G8

Jeremy Szu <jeremy.szu@canonical.com>
    ALSA: hda/realtek: fix mute/micmute LEDs for HP 440 G8

Jeremy Szu <jeremy.szu@canonical.com>
    ALSA: hda/realtek: fix mute/micmute LEDs for HP 840 G8

Xiaoliang Yu <yxl_22@outlook.com>
    ALSA: hda/realtek: Apply headset-mic quirks for Xiaomi Redmibook Air

Hui Wang <hui.wang@canonical.com>
    ALSA: hda: generic: Fix the micmute led init state

Xiaoliang Yu <yxl_22@outlook.com>
    ALSA: hda/realtek: apply pin quirk for XiaomiNotebook Pro

Takashi Sakamoto <o-takashi@sakamocchi.jp>
    ALSA: dice: fix null pointer dereference when node is disconnected

Meng Li <Meng.Li@windriver.com>
    spi: cadence: set cqspi to the driver_data field of struct device

Shengjiu Wang <shengjiu.wang@nxp.com>
    ASoC: ak5558: Add MODULE_DEVICE_TABLE

Shengjiu Wang <shengjiu.wang@nxp.com>
    ASoC: ak4458: Add MODULE_DEVICE_TABLE


-------------

Diffstat:

 MAINTAINERS                                        |   7 +-
 Makefile                                           |  10 +-
 arch/powerpc/include/asm/cpu_has_feature.h         |   4 +-
 arch/powerpc/kernel/vdso32/gettimeofday.S          |  11 +++
 arch/riscv/Kconfig                                 |   4 +-
 arch/riscv/include/asm/sbi.h                       |   4 +-
 arch/riscv/kernel/setup.c                          |   3 +-
 arch/s390/include/asm/pci.h                        |   6 +-
 arch/s390/kernel/vtime.c                           |   2 +-
 arch/s390/pci/pci.c                                |  85 +++++++++++++----
 arch/s390/pci/pci_clp.c                            |  40 +-------
 arch/s390/pci/pci_event.c                          |  22 ++---
 arch/x86/events/intel/core.c                       |   3 +
 arch/x86/events/intel/ds.c                         |   2 +-
 arch/x86/include/asm/processor.h                   |   9 --
 arch/x86/include/asm/thread_info.h                 |  23 ++++-
 arch/x86/kernel/apic/apic.c                        |   5 +
 arch/x86/kernel/apic/io_apic.c                     |  10 ++
 arch/x86/kernel/signal.c                           |  24 +----
 drivers/base/power/runtime.c                       |  62 +++++--------
 drivers/counter/stm32-timer-cnt.c                  |  55 ++++++-----
 drivers/firmware/efi/efi.c                         |   3 +-
 drivers/firmware/efi/vars.c                        |   4 +
 drivers/gpio/gpiolib.c                             |   7 ++
 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c |  34 +------
 .../gpu/drm/amd/display/dc/dcn21/dcn21_resource.c  |   5 +
 .../gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c |  26 ++++--
 drivers/gpu/drm/i915/i915_perf.c                   |  13 +--
 drivers/gpu/drm/ttm/ttm_bo.c                       |   2 +-
 drivers/iio/adc/Kconfig                            |   3 +
 drivers/iio/adc/ab8500-gpadc.c                     |   2 +-
 drivers/iio/adc/ad7949.c                           |   2 +-
 drivers/iio/adc/qcom-spmi-vadc.c                   |   2 +-
 drivers/iio/gyro/mpu3050-core.c                    |   2 +
 drivers/iio/humidity/hid-sensor-humidity.c         |  12 ++-
 drivers/iio/imu/adis16400.c                        |   3 +-
 drivers/iio/light/hid-sensor-prox.c                |  13 ++-
 drivers/iio/temperature/hid-sensor-temperature.c   |  14 +--
 drivers/iommu/amd/init.c                           |  36 ++++----
 drivers/iommu/tegra-smmu.c                         |   7 +-
 drivers/nvme/host/core.c                           |  36 +++-----
 drivers/nvme/host/rdma.c                           |   7 +-
 drivers/nvme/host/tcp.c                            |  16 +++-
 drivers/nvme/target/core.c                         |  17 +++-
 drivers/pci/hotplug/rpadlpar_sysfs.c               |  14 ++-
 drivers/pci/hotplug/s390_pci_hpc.c                 |   3 +-
 drivers/scsi/lpfc/lpfc_debugfs.c                   |   4 +-
 drivers/scsi/mpt3sas/mpt3sas_scsih.c               |   2 +-
 drivers/scsi/myrs.c                                |   2 +-
 drivers/scsi/ufs/ufs-mediatek.c                    |   2 +-
 drivers/spi/spi-cadence-quadspi.c                  |   1 +
 drivers/thunderbolt/switch.c                       |  18 ++--
 drivers/thunderbolt/tb.c                           |   4 +
 drivers/usb/dwc3/gadget.c                          |  22 ++++-
 drivers/usb/gadget/configfs.c                      |  14 ++-
 drivers/usb/storage/transport.c                    |   7 ++
 drivers/usb/storage/unusual_devs.h                 |  12 +++
 drivers/usb/typec/tcpm/tcpm.c                      |   9 +-
 drivers/usb/typec/tps6598x.c                       |   1 -
 drivers/usb/usbip/vudc_sysfs.c                     |   2 +-
 drivers/vfio/Kconfig                               |   2 +-
 drivers/vhost/vdpa.c                               |  20 ++--
 fs/afs/dir.c                                       |   1 -
 fs/afs/file.c                                      |   1 -
 fs/afs/fs_operation.c                              |   7 +-
 fs/afs/inode.c                                     |   1 -
 fs/afs/internal.h                                  |   1 -
 fs/afs/mntpt.c                                     |   1 -
 fs/afs/xattr.c                                     |  31 ++-----
 fs/btrfs/ctree.c                                   |   2 +
 fs/btrfs/inode.c                                   |   2 +-
 fs/cifs/fs_context.c                               |   6 +-
 fs/cifs/inode.c                                    |  10 +-
 fs/ext4/ext4.h                                     |   2 +
 fs/ext4/fast_commit.c                              |   9 +-
 fs/ext4/inode.c                                    |  12 ++-
 fs/ext4/namei.c                                    |  32 ++++++-
 fs/ext4/super.c                                    |   2 +-
 fs/ext4/verity.c                                   |  89 +++++++++++-------
 fs/ext4/xattr.c                                    |   2 +-
 fs/io_uring.c                                      |   6 +-
 fs/nfsd/filecache.c                                |   2 +
 fs/nfsd/nfs4proc.c                                 |   2 +-
 fs/nfsd/nfs4state.c                                |   2 +-
 fs/pstore/inode.c                                  |   2 +-
 fs/select.c                                        |  10 +-
 fs/zonefs/super.c                                  | 101 ++++++++++++++++++---
 include/drm/ttm/ttm_bo_api.h                       |   8 +-
 include/linux/efi.h                                |   6 +-
 include/linux/thread_info.h                        |  13 +++
 include/linux/usb_usual.h                          |   2 +
 kernel/futex.c                                     |   3 +-
 kernel/irq/manage.c                                |   4 +
 kernel/jump_label.c                                |   8 ++
 kernel/static_call.c                               |  11 ++-
 kernel/time/alarmtimer.c                           |   2 +-
 kernel/time/hrtimer.c                              |   2 +-
 kernel/time/posix-cpu-timers.c                     |   2 +-
 net/qrtr/qrtr.c                                    |   2 +-
 net/sunrpc/svc.c                                   |   6 +-
 net/sunrpc/svc_xprt.c                              |   4 +-
 net/sunrpc/xprtrdma/svc_rdma_backchannel.c         |   6 +-
 sound/firewire/dice/dice-stream.c                  |   5 +-
 sound/pci/hda/hda_generic.c                        |   2 +-
 sound/pci/hda/patch_realtek.c                      |  16 ++++
 sound/soc/codecs/ak4458.c                          |   1 +
 sound/soc/codecs/ak5558.c                          |   1 +
 sound/soc/codecs/lpass-va-macro.c                  |  28 +++---
 sound/soc/codecs/lpass-wsa-macro.c                 |  20 ++--
 sound/soc/codecs/wcd934x.c                         |   6 ++
 sound/soc/fsl/fsl_ssi.c                            |   6 +-
 sound/soc/generic/simple-card-utils.c              |  13 +--
 sound/soc/intel/boards/bytcr_rt5640.c              |   2 +-
 sound/soc/qcom/lpass-cpu.c                         |   2 +-
 sound/soc/qcom/sdm845.c                            |   6 +-
 sound/soc/sof/intel/hda-dsp.c                      |   2 +-
 sound/soc/sof/intel/hda.c                          |   1 +
 sound/usb/mixer_quirks.c                           |   4 +-
 118 files changed, 809 insertions(+), 517 deletions(-)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 001/120] ASoC: ak4458: Add MODULE_DEVICE_TABLE
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 002/120] ASoC: ak5558: " Greg Kroah-Hartman
                   ` (121 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Shengjiu Wang, Mark Brown

From: Shengjiu Wang <shengjiu.wang@nxp.com>

commit 4ec5b96775a88dd9b1c3ba1d23c43c478cab95a2 upstream.

Add missed MODULE_DEVICE_TABLE for the driver can be loaded
automatically at boot.

Fixes: 08660086eff9 ("ASoC: ak4458: Add support for AK4458 DAC driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://lore.kernel.org/r/1614149872-25510-1-git-send-email-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/codecs/ak4458.c |    1 +
 1 file changed, 1 insertion(+)

--- a/sound/soc/codecs/ak4458.c
+++ b/sound/soc/codecs/ak4458.c
@@ -812,6 +812,7 @@ static const struct of_device_id ak4458_
 	{ .compatible = "asahi-kasei,ak4497", .data = &ak4497_drvdata},
 	{ },
 };
+MODULE_DEVICE_TABLE(of, ak4458_of_match);
 
 static struct i2c_driver ak4458_i2c_driver = {
 	.driver = {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 002/120] ASoC: ak5558: Add MODULE_DEVICE_TABLE
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 001/120] ASoC: ak4458: Add MODULE_DEVICE_TABLE Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 003/120] spi: cadence: set cqspi to the driver_data field of struct device Greg Kroah-Hartman
                   ` (120 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Shengjiu Wang, Mark Brown

From: Shengjiu Wang <shengjiu.wang@nxp.com>

commit 80cffd2468ddb850e678f17841fc356930b2304a upstream.

Add missed MODULE_DEVICE_TABLE for the driver can be loaded
automatically at boot.

Fixes: 920884777480 ("ASoC: ak5558: Add support for AK5558 ADC driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://lore.kernel.org/r/1614149872-25510-2-git-send-email-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/codecs/ak5558.c |    1 +
 1 file changed, 1 insertion(+)

--- a/sound/soc/codecs/ak5558.c
+++ b/sound/soc/codecs/ak5558.c
@@ -419,6 +419,7 @@ static const struct of_device_id ak5558_
 	{ .compatible = "asahi-kasei,ak5558"},
 	{ }
 };
+MODULE_DEVICE_TABLE(of, ak5558_i2c_dt_ids);
 
 static struct i2c_driver ak5558_i2c_driver = {
 	.driver = {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 003/120] spi: cadence: set cqspi to the driver_data field of struct device
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 001/120] ASoC: ak4458: Add MODULE_DEVICE_TABLE Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 002/120] ASoC: ak5558: " Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 004/120] ALSA: dice: fix null pointer dereference when node is disconnected Greg Kroah-Hartman
                   ` (119 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Meng Li, Mark Brown

From: Meng Li <Meng.Li@windriver.com>

commit ea94191e584b146878f0b7fd4b767500d7aae870 upstream.

When initialize cadence qspi controller, it is need to set cqspi
to the driver_data field of struct device, because it will be
used in function cqspi_remove/suspend/resume(). Otherwise, there
will be a crash trace as below when invoking these finctions.

Fixes: 31fb632b5d43 ("spi: Move cadence-quadspi driver to drivers/spi/")
Cc: stable@vger.kernel.org
Signed-off-by: Meng Li <Meng.Li@windriver.com>
Link: https://lore.kernel.org/r/20210311091220.3615-1-Meng.Li@windriver.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/spi/spi-cadence-quadspi.c |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/spi/spi-cadence-quadspi.c
+++ b/drivers/spi/spi-cadence-quadspi.c
@@ -1198,6 +1198,7 @@ static int cqspi_probe(struct platform_d
 	cqspi = spi_master_get_devdata(master);
 
 	cqspi->pdev = pdev;
+	platform_set_drvdata(pdev, cqspi);
 
 	/* Obtain configuration from OF. */
 	ret = cqspi_of_get_pdata(cqspi);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 004/120] ALSA: dice: fix null pointer dereference when node is disconnected
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (2 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 003/120] spi: cadence: set cqspi to the driver_data field of struct device Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 005/120] ALSA: hda/realtek: apply pin quirk for XiaomiNotebook Pro Greg Kroah-Hartman
                   ` (118 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Takashi Sakamoto, Takashi Iwai

From: Takashi Sakamoto <o-takashi@sakamocchi.jp>

commit dd7b836d6bc935df95c826f69ff4d051f5561604 upstream.

When node is removed from IEEE 1394 bus, any transaction fails to the node.
In the case, ALSA dice driver doesn't stop isochronous contexts even if
they are running. As a result, null pointer dereference occurs in callback
from the running context.

This commit fixes the bug to release isochronous contexts always.

Cc: <stable@vger.kernel.org> # v5.4 or later
Fixes: e9f21129b8d8 ("ALSA: dice: support AMDTP domain")
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210312093407.23437-1-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/firewire/dice/dice-stream.c |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

--- a/sound/firewire/dice/dice-stream.c
+++ b/sound/firewire/dice/dice-stream.c
@@ -493,11 +493,10 @@ void snd_dice_stream_stop_duplex(struct
 	struct reg_params tx_params, rx_params;
 
 	if (dice->substreams_counter == 0) {
-		if (get_register_params(dice, &tx_params, &rx_params) >= 0) {
-			amdtp_domain_stop(&dice->domain);
+		if (get_register_params(dice, &tx_params, &rx_params) >= 0)
 			finish_session(dice, &tx_params, &rx_params);
-		}
 
+		amdtp_domain_stop(&dice->domain);
 		release_resources(dice);
 	}
 }



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 005/120] ALSA: hda/realtek: apply pin quirk for XiaomiNotebook Pro
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (3 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 004/120] ALSA: dice: fix null pointer dereference when node is disconnected Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 006/120] ALSA: hda: generic: Fix the micmute led init state Greg Kroah-Hartman
                   ` (117 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Xiaoliang Yu, Takashi Iwai

From: Xiaoliang Yu <yxl_22@outlook.com>

commit b95bc12e0412d14d5fc764f0b82631c7bcaf1959 upstream.

Built-in microphone and combojack on Xiaomi Notebook Pro (1d72:1701) needs
to be fixed, the existing quirk for Dell works well on that machine.

Signed-off-by: Xiaoliang Yu <yxl_22@outlook.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/OS0P286MB02749B9E13920E6899902CD8EE6C9@OS0P286MB0274.JPNP286.PROD.OUTLOOK.COM
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/pci/hda/patch_realtek.c |    1 +
 1 file changed, 1 insertion(+)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -8242,6 +8242,7 @@ static const struct snd_pci_quirk alc269
 	SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
 	SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
 	SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
+	SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
 	SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 006/120] ALSA: hda: generic: Fix the micmute led init state
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (4 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 005/120] ALSA: hda/realtek: apply pin quirk for XiaomiNotebook Pro Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 007/120] ALSA: hda/realtek: Apply headset-mic quirks for Xiaomi Redmibook Air Greg Kroah-Hartman
                   ` (116 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Hui Wang, Takashi Iwai

From: Hui Wang <hui.wang@canonical.com>

commit 2bf44e0ee95f39cc54ea1b942f0a027e0181ca4e upstream.

Recently we found the micmute led init state is not correct after
freshly installing the ubuntu linux on a Lenovo AIO machine. The
internal mic is not muted, but the micmute led is on and led mode is
'follow mute'. If we mute internal mic, the led is keeping on, then
unmute the internal mic, the led is off. And from then on, the
micmute led will work correctly.

So the micmute led init state is not correct. The led is controlled
by codec gpio (ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), in the
patch_realtek, the gpio data is set to 0x4 initially and the led is
on with this data. In the hda_generic, the led_value is set to
0 initially, suppose users set the 'capture switch' to on from
user space and the micmute led should change to be off with this
operation, but the check "if (val == spec->micmute_led.led_value)" in
the call_micmute_led_update() will skip the led setting.

To guarantee the led state will be set by the 1st time of changing
"Capture Switch", set -1 to the init led_value.

Cc: <stable@vger.kernel.org>
Signed-off-by: Hui Wang <hui.wang@canonical.com>
Link: https://lore.kernel.org/r/20210312041408.3776-1-hui.wang@canonical.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/pci/hda/hda_generic.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -4065,7 +4065,7 @@ static int add_micmute_led_hook(struct h
 
 	spec->micmute_led.led_mode = MICMUTE_LED_FOLLOW_MUTE;
 	spec->micmute_led.capture = 0;
-	spec->micmute_led.led_value = 0;
+	spec->micmute_led.led_value = -1;
 	spec->micmute_led.old_hook = spec->cap_sync_hook;
 	spec->cap_sync_hook = update_micmute_led;
 	if (!snd_hda_gen_add_kctl(spec, NULL, &micmute_led_mode_ctl))



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 007/120] ALSA: hda/realtek: Apply headset-mic quirks for Xiaomi Redmibook Air
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (5 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 006/120] ALSA: hda: generic: Fix the micmute led init state Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 008/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 840 G8 Greg Kroah-Hartman
                   ` (115 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Xiaoliang Yu, Takashi Iwai

From: Xiaoliang Yu <yxl_22@outlook.com>

commit e1c86210fe27428399643861b81b080eccd79f87 upstream.

There is another fix for headset-mic problem on Redmibook (1d72:1602),
it also works on Redmibook Air (1d72:1947), which has the same issue.

Signed-off-by: Xiaoliang Yu <yxl_22@outlook.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/TYBP286MB02856DC016849DEA0F9B6A37EE6F9@TYBP286MB0285.JPNP286.PROD.OUTLOOK.COM
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/pci/hda/patch_realtek.c |    1 +
 1 file changed, 1 insertion(+)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -8244,6 +8244,7 @@ static const struct snd_pci_quirk alc269
 	SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
 	SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
+	SND_PCI_QUIRK(0x1d72, 0x1947, "RedmiBook Air", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
 	SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
 	SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 008/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 840 G8
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (6 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 007/120] ALSA: hda/realtek: Apply headset-mic quirks for Xiaomi Redmibook Air Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 009/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 440 G8 Greg Kroah-Hartman
                   ` (114 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Jeremy Szu, Takashi Iwai

From: Jeremy Szu <jeremy.szu@canonical.com>

commit ca6883393f0fa7f13ec8b860dbcef423a759c4a2 upstream.

The HP EliteBook 840 G8 Notebook PC is using ALC285 codec which is
using 0x04 to control mute LED and 0x01 to control micmute LED.
Therefore, add a quirk to make it works.

Signed-off-by: Jeremy Szu <jeremy.szu@canonical.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210316065452.75659-1-jeremy.szu@canonical.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/pci/hda/patch_realtek.c |    1 +
 1 file changed, 1 insertion(+)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -8048,6 +8048,7 @@ static const struct snd_pci_quirk alc269
 	SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
+	SND_PCI_QUIRK(0x103c, 0x884c, "HP EliteBook 840 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
 	SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
 	SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 009/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 440 G8
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (7 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 008/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 840 G8 Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 010/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 850 G8 Greg Kroah-Hartman
                   ` (113 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Jeremy Szu, Takashi Iwai

From: Jeremy Szu <jeremy.szu@canonical.com>

commit e7d66cf799390166e90f9a5715f2eede4fe06d51 upstream.

The HP EliteBook 840 G8 Notebook PC is using ALC236 codec which is
using 0x02 to control mute LED and 0x01 to control micmute LED.
Therefore, add a quirk to make it works.

Signed-off-by: Jeremy Szu <jeremy.szu@canonical.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210316074626.79895-1-jeremy.szu@canonical.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/pci/hda/patch_realtek.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4225,6 +4225,12 @@ static void alc_fixup_hp_gpio_led(struct
 	}
 }
 
+static void alc236_fixup_hp_gpio_led(struct hda_codec *codec,
+				const struct hda_fixup *fix, int action)
+{
+	alc_fixup_hp_gpio_led(codec, action, 0x02, 0x01);
+}
+
 static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
 				const struct hda_fixup *fix, int action)
 {
@@ -6381,6 +6387,7 @@ enum {
 	ALC294_FIXUP_ASUS_GX502_VERBS,
 	ALC285_FIXUP_HP_GPIO_LED,
 	ALC285_FIXUP_HP_MUTE_LED,
+	ALC236_FIXUP_HP_GPIO_LED,
 	ALC236_FIXUP_HP_MUTE_LED,
 	ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
 	ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
@@ -7616,6 +7623,10 @@ static const struct hda_fixup alc269_fix
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc285_fixup_hp_mute_led,
 	},
+	[ALC236_FIXUP_HP_GPIO_LED] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc236_fixup_hp_gpio_led,
+	},
 	[ALC236_FIXUP_HP_MUTE_LED] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc236_fixup_hp_mute_led,
@@ -8045,6 +8056,7 @@ static const struct snd_pci_quirk alc269
 	SND_PCI_QUIRK(0x103c, 0x8783, "HP ZBook Fury 15 G7 Mobile Workstation",
 		      ALC285_FIXUP_HP_GPIO_AMP_INIT),
 	SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
+	SND_PCI_QUIRK(0x103c, 0x87e5, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 010/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 850 G8
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (8 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 009/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 440 G8 Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 011/120] Revert "PM: runtime: Update device status before letting suppliers suspend" Greg Kroah-Hartman
                   ` (112 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Jeremy Szu, Takashi Iwai

From: Jeremy Szu <jeremy.szu@canonical.com>

commit 53b861bec737c189cc14ec3b5785d0f13445ac0f upstream.

The HP EliteBook 850 G8 Notebook PC is using ALC285 codec which is
using 0x04 to control mute LED and 0x01 to control micmute LED.
Therefore, add a quirk to make it works.

Signed-off-by: Jeremy Szu <jeremy.szu@canonical.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210316094236.89028-1-jeremy.szu@canonical.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/pci/hda/patch_realtek.c |    1 +
 1 file changed, 1 insertion(+)

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -8060,6 +8060,7 @@ static const struct snd_pci_quirk alc269
 	SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
+	SND_PCI_QUIRK(0x103c, 0x8846, "HP EliteBook 850 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x103c, 0x884c, "HP EliteBook 840 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
 	SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
 	SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 011/120] Revert "PM: runtime: Update device status before letting suppliers suspend"
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (9 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 010/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 850 G8 Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 012/120] s390/vtime: fix increased steal time accounting Greg Kroah-Hartman
                   ` (111 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Adrian Hunter, Rafael J. Wysocki,
	Ulf Hansson

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

commit 0cab893f409c53634d0d818fa414641cbcdb0dab upstream.

Revert commit 44cc89f76464 ("PM: runtime: Update device status
before letting suppliers suspend") that introduced a race condition
into __rpm_callback() which allowed a concurrent rpm_resume() to
run and resume the device prematurely after its status had been
changed to RPM_SUSPENDED by __rpm_callback().

Fixes: 44cc89f76464 ("PM: runtime: Update device status before letting suppliers suspend")
Link: https://lore.kernel.org/linux-pm/24dfb6fc-5d54-6ee2-9195-26428b7ecf8a@intel.com/
Reported-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: 4.10+ <stable@vger.kernel.org> # 4.10+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/base/power/runtime.c |   62 +++++++++++++++++--------------------------
 1 file changed, 25 insertions(+), 37 deletions(-)

--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -325,22 +325,22 @@ static void rpm_put_suppliers(struct dev
 static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
 	__releases(&dev->power.lock) __acquires(&dev->power.lock)
 {
-	bool use_links = dev->power.links_count > 0;
-	bool get = false;
 	int retval, idx;
-	bool put;
+	bool use_links = dev->power.links_count > 0;
 
 	if (dev->power.irq_safe) {
 		spin_unlock(&dev->power.lock);
-	} else if (!use_links) {
-		spin_unlock_irq(&dev->power.lock);
 	} else {
-		get = dev->power.runtime_status == RPM_RESUMING;
-
 		spin_unlock_irq(&dev->power.lock);
 
-		/* Resume suppliers if necessary. */
-		if (get) {
+		/*
+		 * Resume suppliers if necessary.
+		 *
+		 * The device's runtime PM status cannot change until this
+		 * routine returns, so it is safe to read the status outside of
+		 * the lock.
+		 */
+		if (use_links && dev->power.runtime_status == RPM_RESUMING) {
 			idx = device_links_read_lock();
 
 			retval = rpm_get_suppliers(dev);
@@ -355,36 +355,24 @@ static int __rpm_callback(int (*cb)(stru
 
 	if (dev->power.irq_safe) {
 		spin_lock(&dev->power.lock);
-		return retval;
-	}
-
-	spin_lock_irq(&dev->power.lock);
-
-	if (!use_links)
-		return retval;
-
-	/*
-	 * If the device is suspending and the callback has returned success,
-	 * drop the usage counters of the suppliers that have been reference
-	 * counted on its resume.
-	 *
-	 * Do that if the resume fails too.
-	 */
-	put = dev->power.runtime_status == RPM_SUSPENDING && !retval;
-	if (put)
-		__update_runtime_status(dev, RPM_SUSPENDED);
-	else
-		put = get && retval;
-
-	if (put) {
-		spin_unlock_irq(&dev->power.lock);
-
-		idx = device_links_read_lock();
+	} else {
+		/*
+		 * If the device is suspending and the callback has returned
+		 * success, drop the usage counters of the suppliers that have
+		 * been reference counted on its resume.
+		 *
+		 * Do that if resume fails too.
+		 */
+		if (use_links
+		    && ((dev->power.runtime_status == RPM_SUSPENDING && !retval)
+		    || (dev->power.runtime_status == RPM_RESUMING && retval))) {
+			idx = device_links_read_lock();
 
-fail:
-		rpm_put_suppliers(dev);
+ fail:
+			rpm_put_suppliers(dev);
 
-		device_links_read_unlock(idx);
+			device_links_read_unlock(idx);
+		}
 
 		spin_lock_irq(&dev->power.lock);
 	}



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 012/120] s390/vtime: fix increased steal time accounting
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (10 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 011/120] Revert "PM: runtime: Update device status before letting suppliers suspend" Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 013/120] s390/pci: refactor zpci_create_device() Greg Kroah-Hartman
                   ` (110 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Sabine Forkel, Heiko Carstens,
	Gerald Schaefer

From: Gerald Schaefer <gerald.schaefer@linux.ibm.com>

commit d54cb7d54877d529bc1e0e1f47a3dd082f73add3 upstream.

Commit 152e9b8676c6e ("s390/vtime: steal time exponential moving average")
inadvertently changed the input value for account_steal_time() from
"cputime_to_nsecs(steal)" to just "steal", resulting in broken increased
steal time accounting.

Fix this by changing it back to "cputime_to_nsecs(steal)".

Fixes: 152e9b8676c6e ("s390/vtime: steal time exponential moving average")
Cc: <stable@vger.kernel.org> # 5.1
Reported-by: Sabine Forkel <sabine.forkel@de.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/s390/kernel/vtime.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/s390/kernel/vtime.c
+++ b/arch/s390/kernel/vtime.c
@@ -217,7 +217,7 @@ void vtime_flush(struct task_struct *tsk
 	avg_steal = S390_lowcore.avg_steal_timer / 2;
 	if ((s64) steal > 0) {
 		S390_lowcore.steal_timer = 0;
-		account_steal_time(steal);
+		account_steal_time(cputime_to_nsecs(steal));
 		avg_steal += steal;
 	}
 	S390_lowcore.avg_steal_timer = avg_steal;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 013/120] s390/pci: refactor zpci_create_device()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (11 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 012/120] s390/vtime: fix increased steal time accounting Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 014/120] s390/pci: remove superfluous zdev->zbus check Greg Kroah-Hartman
                   ` (109 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Pierre Morel, Niklas Schnelle, Vasily Gorbik

From: Niklas Schnelle <schnelle@linux.ibm.com>

commit ba764dd703feacb5a9c410d191af1b6cfbe96845 upstream.

Currently zpci_create_device() is only called in clp_add_pci_device()
which allocates the memory for the struct zpci_dev being created. There
is little separation of concerns as only both functions together can
create a zpci_dev and the only CLP specific code in
clp_add_pci_device() is a call to clp_query_pci_fn().

Improve this by removing clp_add_pci_device() and refactor
zpci_create_device() such that it alone creates and initializes the
zpci_dev given the FID and Function Handle. For this we need to make
clp_query_pci_fn() non-static. While at it remove the function handle
parameter since we can just take that from the zpci_dev. Also move
adding to the zpci_list to after the zdev has been fully created which
eliminates a window where a partially initialized zdev can be found by
get_zdev_by_fid().

Acked-by: Pierre Morel <pmorel@linux.ibm.com>
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/s390/include/asm/pci.h |    4 +--
 arch/s390/pci/pci.c         |   57 +++++++++++++++++++++++++++++++-------------
 arch/s390/pci/pci_clp.c     |   40 ++----------------------------
 arch/s390/pci/pci_event.c   |    4 +--
 4 files changed, 48 insertions(+), 57 deletions(-)

--- a/arch/s390/include/asm/pci.h
+++ b/arch/s390/include/asm/pci.h
@@ -201,7 +201,7 @@ extern unsigned int s390_pci_no_rid;
   Prototypes
 ----------------------------------------------------------------------------- */
 /* Base stuff */
-int zpci_create_device(struct zpci_dev *);
+int zpci_create_device(u32 fid, u32 fh, enum zpci_state state);
 void zpci_remove_device(struct zpci_dev *zdev);
 int zpci_enable_device(struct zpci_dev *);
 int zpci_disable_device(struct zpci_dev *);
@@ -212,7 +212,7 @@ void zpci_remove_reserved_devices(void);
 /* CLP */
 int clp_setup_writeback_mio(void);
 int clp_scan_pci_devices(void);
-int clp_add_pci_device(u32, u32, int);
+int clp_query_pci_fn(struct zpci_dev *zdev);
 int clp_enable_fh(struct zpci_dev *, u8);
 int clp_disable_fh(struct zpci_dev *);
 int clp_get_state(u32 fid, enum zpci_state *state);
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -695,43 +695,68 @@ void zpci_remove_device(struct zpci_dev
 	}
 }
 
-int zpci_create_device(struct zpci_dev *zdev)
+/**
+ * zpci_create_device() - Create a new zpci_dev and add it to the zbus
+ * @fid: Function ID of the device to be created
+ * @fh: Current Function Handle of the device to be created
+ * @state: Initial state after creation either Standby or Configured
+ *
+ * Creates a new zpci device and adds it to its, possibly newly created, zbus
+ * as well as zpci_list.
+ *
+ * Returns: 0 on success, an error value otherwise
+ */
+int zpci_create_device(u32 fid, u32 fh, enum zpci_state state)
 {
+	struct zpci_dev *zdev;
 	int rc;
 
-	kref_init(&zdev->kref);
+	zpci_dbg(3, "add fid:%x, fh:%x, c:%d\n", fid, fh, state);
+	zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
+	if (!zdev)
+		return -ENOMEM;
+
+	/* FID and Function Handle are the static/dynamic identifiers */
+	zdev->fid = fid;
+	zdev->fh = fh;
 
-	spin_lock(&zpci_list_lock);
-	list_add_tail(&zdev->entry, &zpci_list);
-	spin_unlock(&zpci_list_lock);
+	/* Query function properties and update zdev */
+	rc = clp_query_pci_fn(zdev);
+	if (rc)
+		goto error;
+	zdev->state =  state;
+
+	kref_init(&zdev->kref);
+	mutex_init(&zdev->lock);
 
 	rc = zpci_init_iommu(zdev);
 	if (rc)
-		goto out;
+		goto error;
 
-	mutex_init(&zdev->lock);
 	if (zdev->state == ZPCI_FN_STATE_CONFIGURED) {
 		rc = zpci_enable_device(zdev);
 		if (rc)
-			goto out_destroy_iommu;
+			goto error_destroy_iommu;
 	}
 
 	rc = zpci_bus_device_register(zdev, &pci_root_ops);
 	if (rc)
-		goto out_disable;
+		goto error_disable;
+
+	spin_lock(&zpci_list_lock);
+	list_add_tail(&zdev->entry, &zpci_list);
+	spin_unlock(&zpci_list_lock);
 
 	return 0;
 
-out_disable:
+error_disable:
 	if (zdev->state == ZPCI_FN_STATE_ONLINE)
 		zpci_disable_device(zdev);
-
-out_destroy_iommu:
+error_destroy_iommu:
 	zpci_destroy_iommu(zdev);
-out:
-	spin_lock(&zpci_list_lock);
-	list_del(&zdev->entry);
-	spin_unlock(&zpci_list_lock);
+error:
+	zpci_dbg(0, "add fid:%x, rc:%d\n", fid, rc);
+	kfree(zdev);
 	return rc;
 }
 
--- a/arch/s390/pci/pci_clp.c
+++ b/arch/s390/pci/pci_clp.c
@@ -181,7 +181,7 @@ static int clp_store_query_pci_fn(struct
 	return 0;
 }
 
-static int clp_query_pci_fn(struct zpci_dev *zdev, u32 fh)
+int clp_query_pci_fn(struct zpci_dev *zdev)
 {
 	struct clp_req_rsp_query_pci *rrb;
 	int rc;
@@ -194,7 +194,7 @@ static int clp_query_pci_fn(struct zpci_
 	rrb->request.hdr.len = sizeof(rrb->request);
 	rrb->request.hdr.cmd = CLP_QUERY_PCI_FN;
 	rrb->response.hdr.len = sizeof(rrb->response);
-	rrb->request.fh = fh;
+	rrb->request.fh = zdev->fh;
 
 	rc = clp_req(rrb, CLP_LPS_PCI);
 	if (!rc && rrb->response.hdr.rsp == CLP_RC_OK) {
@@ -212,40 +212,6 @@ out:
 	return rc;
 }
 
-int clp_add_pci_device(u32 fid, u32 fh, int configured)
-{
-	struct zpci_dev *zdev;
-	int rc = -ENOMEM;
-
-	zpci_dbg(3, "add fid:%x, fh:%x, c:%d\n", fid, fh, configured);
-	zdev = kzalloc(sizeof(*zdev), GFP_KERNEL);
-	if (!zdev)
-		goto error;
-
-	zdev->fh = fh;
-	zdev->fid = fid;
-
-	/* Query function properties and update zdev */
-	rc = clp_query_pci_fn(zdev, fh);
-	if (rc)
-		goto error;
-
-	if (configured)
-		zdev->state = ZPCI_FN_STATE_CONFIGURED;
-	else
-		zdev->state = ZPCI_FN_STATE_STANDBY;
-
-	rc = zpci_create_device(zdev);
-	if (rc)
-		goto error;
-	return 0;
-
-error:
-	zpci_dbg(0, "add fid:%x, rc:%d\n", fid, rc);
-	kfree(zdev);
-	return rc;
-}
-
 static int clp_refresh_fh(u32 fid);
 /*
  * Enable/Disable a given PCI function and update its function handle if
@@ -408,7 +374,7 @@ static void __clp_add(struct clp_fh_list
 
 	zdev = get_zdev_by_fid(entry->fid);
 	if (!zdev)
-		clp_add_pci_device(entry->fid, entry->fh, entry->config_state);
+		zpci_create_device(entry->fid, entry->fh, entry->config_state);
 }
 
 int clp_scan_pci_devices(void)
--- a/arch/s390/pci/pci_event.c
+++ b/arch/s390/pci/pci_event.c
@@ -89,7 +89,7 @@ static void __zpci_event_availability(st
 	switch (ccdf->pec) {
 	case 0x0301: /* Reserved|Standby -> Configured */
 		if (!zdev) {
-			ret = clp_add_pci_device(ccdf->fid, ccdf->fh, 1);
+			zpci_create_device(ccdf->fid, ccdf->fh, ZPCI_FN_STATE_CONFIGURED);
 			break;
 		}
 		/* the configuration request may be stale */
@@ -116,7 +116,7 @@ static void __zpci_event_availability(st
 		break;
 	case 0x0302: /* Reserved -> Standby */
 		if (!zdev) {
-			clp_add_pci_device(ccdf->fid, ccdf->fh, 0);
+			zpci_create_device(ccdf->fid, ccdf->fh, ZPCI_FN_STATE_STANDBY);
 			break;
 		}
 		zdev->fh = ccdf->fh;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 014/120] s390/pci: remove superfluous zdev->zbus check
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (12 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 013/120] s390/pci: refactor zpci_create_device() Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 015/120] s390/pci: fix leak of PCI device structure Greg Kroah-Hartman
                   ` (108 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, kernel test robot, Dan Carpenter,
	Niklas Schnelle, Vasily Gorbik

From: Niklas Schnelle <schnelle@linux.ibm.com>

commit e1bff843cde62a45a287b7f9b4cd5e824e8e49e2 upstream.

Checking zdev->zbus for NULL in __zpci_event_availability() is
superfluous as it can never be NULL at this point. While harmless this
check causes smatch warnings because we later access zdev->zbus with
only having checked zdev != NULL which is sufficient.

The reason zdev->zbus can never be NULL is since with zdev != NULL given
we know the zdev came from get_zdev_by_fid() and thus the zpci_list.
Now on first glance at zpci_create_device() one may assume that there is
a window where the zdev is in the list without a zdev, however this
window can't overlap with __zpci_event_availability() as
zpci_create_device() either runs on the same kthread as part of
availability events, or during the initial CLP List PCI at which point
the __zpci_event_availability() is not yet called as zPCI is not yet
initialized.

Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/s390/pci/pci_event.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/s390/pci/pci_event.c
+++ b/arch/s390/pci/pci_event.c
@@ -80,7 +80,7 @@ static void __zpci_event_availability(st
 	enum zpci_state state;
 	int ret;
 
-	if (zdev && zdev->zbus && zdev->zbus->bus)
+	if (zdev && zdev->zbus->bus)
 		pdev = pci_get_slot(zdev->zbus->bus, zdev->devfn);
 
 	zpci_err("avail CCDF:\n");



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 015/120] s390/pci: fix leak of PCI device structure
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (13 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 014/120] s390/pci: remove superfluous zdev->zbus check Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 016/120] zonefs: Fix O_APPEND async write handling Greg Kroah-Hartman
                   ` (107 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Matthew Rosato, Niklas Schnelle,
	Heiko Carstens

From: Niklas Schnelle <schnelle@linux.ibm.com>

commit 0b13525c20febcfecccf6fc1db5969727401317d upstream.

In commit 05bc1be6db4b2 ("s390/pci: create zPCI bus") we removed the
pci_dev_put() call matching the earlier pci_get_slot() done as part of
__zpci_event_availability(). This was based on the wrong understanding
that the device_put() done as part of pci_destroy_device() would counter
the pci_get_slot() when it only counters the initial reference. This
same understanding and existing bad example also lead to not doing
a pci_dev_put() in zpci_remove_device().

Since releasing the PCI devices, unlike releasing the PCI slot, does not
print any debug message for testing I added one in pci_release_dev().
This revealed that we are indeed leaking the PCI device on PCI
hotunplug. Further testing also revealed another missing pci_dev_put() in
disable_slot().

Fix this by adding the missing pci_dev_put() in disable_slot() and fix
zpci_remove_device() with the correct pci_dev_put() calls. Also instead
of calling pci_get_slot() in __zpci_event_availability() to determine if
a PCI device is registered and then doing the same again in
zpci_remove_device() do this once in zpci_remove_device() which makes
sure that the pdev in __zpci_event_availability() is only used for the
result of pci_scan_single_device() which does not need a reference count
decremnt as its ownership goes to the PCI bus.

Also move the check if zdev->zbus->bus is set into zpci_remove_device()
since it may be that we're removing a device with devfn != 0 which never
had a PCI bus. So we can still set the pdev->error_state to indicate
that the device is not usable anymore, add a flag to set the error state.

Fixes: 05bc1be6db4b2 ("s390/pci: create zPCI bus")
Cc: <stable@vger.kernel.org> # 5.8+: e1bff843cde6 s390/pci: remove superfluous zdev->zbus check
Cc: <stable@vger.kernel.org> # 5.8+: ba764dd703fe s390/pci: refactor zpci_create_device()
Cc: <stable@vger.kernel.org> # 5.8+
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/s390/include/asm/pci.h        |    2 +-
 arch/s390/pci/pci.c                |   28 ++++++++++++++++++++++++----
 arch/s390/pci/pci_event.c          |   18 ++++++------------
 drivers/pci/hotplug/s390_pci_hpc.c |    3 ++-
 4 files changed, 33 insertions(+), 18 deletions(-)

--- a/arch/s390/include/asm/pci.h
+++ b/arch/s390/include/asm/pci.h
@@ -202,7 +202,7 @@ extern unsigned int s390_pci_no_rid;
 ----------------------------------------------------------------------------- */
 /* Base stuff */
 int zpci_create_device(u32 fid, u32 fh, enum zpci_state state);
-void zpci_remove_device(struct zpci_dev *zdev);
+void zpci_remove_device(struct zpci_dev *zdev, bool set_error);
 int zpci_enable_device(struct zpci_dev *);
 int zpci_disable_device(struct zpci_dev *);
 int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -682,16 +682,36 @@ int zpci_disable_device(struct zpci_dev
 }
 EXPORT_SYMBOL_GPL(zpci_disable_device);
 
-void zpci_remove_device(struct zpci_dev *zdev)
+/* zpci_remove_device - Removes the given zdev from the PCI core
+ * @zdev: the zdev to be removed from the PCI core
+ * @set_error: if true the device's error state is set to permanent failure
+ *
+ * Sets a zPCI device to a configured but offline state; the zPCI
+ * device is still accessible through its hotplug slot and the zPCI
+ * API but is removed from the common code PCI bus, making it
+ * no longer available to drivers.
+ */
+void zpci_remove_device(struct zpci_dev *zdev, bool set_error)
 {
 	struct zpci_bus *zbus = zdev->zbus;
 	struct pci_dev *pdev;
 
+	if (!zdev->zbus->bus)
+		return;
+
 	pdev = pci_get_slot(zbus->bus, zdev->devfn);
 	if (pdev) {
-		if (pdev->is_virtfn)
-			return zpci_iov_remove_virtfn(pdev, zdev->vfn);
+		if (set_error)
+			pdev->error_state = pci_channel_io_perm_failure;
+		if (pdev->is_virtfn) {
+			zpci_iov_remove_virtfn(pdev, zdev->vfn);
+			/* balance pci_get_slot */
+			pci_dev_put(pdev);
+			return;
+		}
 		pci_stop_and_remove_bus_device_locked(pdev);
+		/* balance pci_get_slot */
+		pci_dev_put(pdev);
 	}
 }
 
@@ -765,7 +785,7 @@ void zpci_release_device(struct kref *kr
 	struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref);
 
 	if (zdev->zbus->bus)
-		zpci_remove_device(zdev);
+		zpci_remove_device(zdev, false);
 
 	switch (zdev->state) {
 	case ZPCI_FN_STATE_ONLINE:
--- a/arch/s390/pci/pci_event.c
+++ b/arch/s390/pci/pci_event.c
@@ -76,13 +76,10 @@ void zpci_event_error(void *data)
 static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
 {
 	struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid);
-	struct pci_dev *pdev = NULL;
 	enum zpci_state state;
+	struct pci_dev *pdev;
 	int ret;
 
-	if (zdev && zdev->zbus->bus)
-		pdev = pci_get_slot(zdev->zbus->bus, zdev->devfn);
-
 	zpci_err("avail CCDF:\n");
 	zpci_err_hex(ccdf, sizeof(*ccdf));
 
@@ -124,8 +121,7 @@ static void __zpci_event_availability(st
 	case 0x0303: /* Deconfiguration requested */
 		if (!zdev)
 			break;
-		if (pdev)
-			zpci_remove_device(zdev);
+		zpci_remove_device(zdev, false);
 
 		ret = zpci_disable_device(zdev);
 		if (ret)
@@ -140,12 +136,10 @@ static void __zpci_event_availability(st
 	case 0x0304: /* Configured -> Standby|Reserved */
 		if (!zdev)
 			break;
-		if (pdev) {
-			/* Give the driver a hint that the function is
-			 * already unusable. */
-			pdev->error_state = pci_channel_io_perm_failure;
-			zpci_remove_device(zdev);
-		}
+		/* Give the driver a hint that the function is
+		 * already unusable.
+		 */
+		zpci_remove_device(zdev, true);
 
 		zdev->fh = ccdf->fh;
 		zpci_disable_device(zdev);
--- a/drivers/pci/hotplug/s390_pci_hpc.c
+++ b/drivers/pci/hotplug/s390_pci_hpc.c
@@ -93,8 +93,9 @@ static int disable_slot(struct hotplug_s
 		pci_dev_put(pdev);
 		return -EBUSY;
 	}
+	pci_dev_put(pdev);
 
-	zpci_remove_device(zdev);
+	zpci_remove_device(zdev, false);
 
 	rc = zpci_disable_device(zdev);
 	if (rc)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 016/120] zonefs: Fix O_APPEND async write handling
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (14 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 015/120] s390/pci: fix leak of PCI device structure Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 017/120] zonefs: prevent use of seq files as swap file Greg Kroah-Hartman
                   ` (106 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Johannes Thumshirn, Damien Le Moal

From: Damien Le Moal <damien.lemoal@wdc.com>

commit ebfd68cd0c1e81267c757332385cb96df30dacce upstream.

zonefs updates the size of a sequential zone file inode only on
completion of direct writes. When executing asynchronous append writes
(with a file open with O_APPEND or using RWF_APPEND), the use of the
current inode size in generic_write_checks() to set an iocb offset thus
leads to unaligned write if an application issues an append write
operation with another write already being executed.

Fix this problem by introducing zonefs_write_checks() as a modified
version of generic_write_checks() using the file inode wp_offset for an
append write iocb offset. Also introduce zonefs_write_check_limits() to
replace generic_write_check_limits() call. This zonefs special helper
makes sure that the maximum file limit used is the maximum size of the
file being accessed.

Since zonefs_write_checks() already truncates the iov_iter, the calls
to iov_iter_truncate() in zonefs_file_dio_write() and
zonefs_file_buffered_write() are removed.

Fixes: 8dcc1a9d90c1 ("fs: New zonefs file system")
Cc: <stable@vger.kernel.org>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/zonefs/super.c |   78 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 68 insertions(+), 10 deletions(-)

--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -720,6 +720,68 @@ out_release:
 }
 
 /*
+ * Do not exceed the LFS limits nor the file zone size. If pos is under the
+ * limit it becomes a short access. If it exceeds the limit, return -EFBIG.
+ */
+static loff_t zonefs_write_check_limits(struct file *file, loff_t pos,
+					loff_t count)
+{
+	struct inode *inode = file_inode(file);
+	struct zonefs_inode_info *zi = ZONEFS_I(inode);
+	loff_t limit = rlimit(RLIMIT_FSIZE);
+	loff_t max_size = zi->i_max_size;
+
+	if (limit != RLIM_INFINITY) {
+		if (pos >= limit) {
+			send_sig(SIGXFSZ, current, 0);
+			return -EFBIG;
+		}
+		count = min(count, limit - pos);
+	}
+
+	if (!(file->f_flags & O_LARGEFILE))
+		max_size = min_t(loff_t, MAX_NON_LFS, max_size);
+
+	if (unlikely(pos >= max_size))
+		return -EFBIG;
+
+	return min(count, max_size - pos);
+}
+
+static ssize_t zonefs_write_checks(struct kiocb *iocb, struct iov_iter *from)
+{
+	struct file *file = iocb->ki_filp;
+	struct inode *inode = file_inode(file);
+	struct zonefs_inode_info *zi = ZONEFS_I(inode);
+	loff_t count;
+
+	if (IS_SWAPFILE(inode))
+		return -ETXTBSY;
+
+	if (!iov_iter_count(from))
+		return 0;
+
+	if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT))
+		return -EINVAL;
+
+	if (iocb->ki_flags & IOCB_APPEND) {
+		if (zi->i_ztype != ZONEFS_ZTYPE_SEQ)
+			return -EINVAL;
+		mutex_lock(&zi->i_truncate_mutex);
+		iocb->ki_pos = zi->i_wpoffset;
+		mutex_unlock(&zi->i_truncate_mutex);
+	}
+
+	count = zonefs_write_check_limits(file, iocb->ki_pos,
+					  iov_iter_count(from));
+	if (count < 0)
+		return count;
+
+	iov_iter_truncate(from, count);
+	return iov_iter_count(from);
+}
+
+/*
  * Handle direct writes. For sequential zone files, this is the only possible
  * write path. For these files, check that the user is issuing writes
  * sequentially from the end of the file. This code assumes that the block layer
@@ -736,8 +798,7 @@ static ssize_t zonefs_file_dio_write(str
 	struct super_block *sb = inode->i_sb;
 	bool sync = is_sync_kiocb(iocb);
 	bool append = false;
-	size_t count;
-	ssize_t ret;
+	ssize_t ret, count;
 
 	/*
 	 * For async direct IOs to sequential zone files, refuse IOCB_NOWAIT
@@ -755,12 +816,11 @@ static ssize_t zonefs_file_dio_write(str
 		inode_lock(inode);
 	}
 
-	ret = generic_write_checks(iocb, from);
-	if (ret <= 0)
+	count = zonefs_write_checks(iocb, from);
+	if (count <= 0) {
+		ret = count;
 		goto inode_unlock;
-
-	iov_iter_truncate(from, zi->i_max_size - iocb->ki_pos);
-	count = iov_iter_count(from);
+	}
 
 	if ((iocb->ki_pos | count) & (sb->s_blocksize - 1)) {
 		ret = -EINVAL;
@@ -820,12 +880,10 @@ static ssize_t zonefs_file_buffered_writ
 		inode_lock(inode);
 	}
 
-	ret = generic_write_checks(iocb, from);
+	ret = zonefs_write_checks(iocb, from);
 	if (ret <= 0)
 		goto inode_unlock;
 
-	iov_iter_truncate(from, zi->i_max_size - iocb->ki_pos);
-
 	ret = iomap_file_buffered_write(iocb, from, &zonefs_iomap_ops);
 	if (ret > 0)
 		iocb->ki_pos += ret;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 017/120] zonefs: prevent use of seq files as swap file
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (15 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 016/120] zonefs: Fix O_APPEND async write handling Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 018/120] zonefs: fix to update .i_wr_refcnt correctly in zonefs_open_zone() Greg Kroah-Hartman
                   ` (105 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Johannes Thumshirn, Damien Le Moal

From: Damien Le Moal <damien.lemoal@wdc.com>

commit 1601ea068b886da1f8f8d4e18b9403e9e24adef6 upstream.

The sequential write constraint of sequential zone file prevent their
use as swap files. Only allow conventional zone files to be used as swap
files.

Fixes: 8dcc1a9d90c1 ("fs: New zonefs file system")
Cc: <stable@vger.kernel.org>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/zonefs/super.c |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -159,6 +159,21 @@ static int zonefs_writepages(struct addr
 	return iomap_writepages(mapping, wbc, &wpc, &zonefs_writeback_ops);
 }
 
+static int zonefs_swap_activate(struct swap_info_struct *sis,
+				struct file *swap_file, sector_t *span)
+{
+	struct inode *inode = file_inode(swap_file);
+	struct zonefs_inode_info *zi = ZONEFS_I(inode);
+
+	if (zi->i_ztype != ZONEFS_ZTYPE_CNV) {
+		zonefs_err(inode->i_sb,
+			   "swap file: not a conventional zone file\n");
+		return -EINVAL;
+	}
+
+	return iomap_swapfile_activate(sis, swap_file, span, &zonefs_iomap_ops);
+}
+
 static const struct address_space_operations zonefs_file_aops = {
 	.readpage		= zonefs_readpage,
 	.readahead		= zonefs_readahead,
@@ -171,6 +186,7 @@ static const struct address_space_operat
 	.is_partially_uptodate	= iomap_is_partially_uptodate,
 	.error_remove_page	= generic_error_remove_page,
 	.direct_IO		= noop_direct_IO,
+	.swap_activate		= zonefs_swap_activate,
 };
 
 static void zonefs_update_stats(struct inode *inode, loff_t new_isize)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 018/120] zonefs: fix to update .i_wr_refcnt correctly in zonefs_open_zone()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (16 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 017/120] zonefs: prevent use of seq files as swap file Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 019/120] btrfs: fix race when cloning extent buffer during rewind of an old root Greg Kroah-Hartman
                   ` (104 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Chao Yu, Damien Le Moal

From: Chao Yu <yuchao0@huawei.com>

commit 6980d29ce4da223ad7f0751c7f1d61d3c6b54ab3 upstream.

In zonefs_open_zone(), if opened zone count is larger than
.s_max_open_zones threshold, we missed to recover .i_wr_refcnt,
fix this.

Fixes: b5c00e975779 ("zonefs: open/close zone on file open/close")
Cc: <stable@vger.kernel.org>
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/zonefs/super.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -1032,9 +1032,7 @@ static int zonefs_open_zone(struct inode
 
 	mutex_lock(&zi->i_truncate_mutex);
 
-	zi->i_wr_refcnt++;
-	if (zi->i_wr_refcnt == 1) {
-
+	if (!zi->i_wr_refcnt) {
 		if (atomic_inc_return(&sbi->s_open_zones) > sbi->s_max_open_zones) {
 			atomic_dec(&sbi->s_open_zones);
 			ret = -EBUSY;
@@ -1044,7 +1042,6 @@ static int zonefs_open_zone(struct inode
 		if (i_size_read(inode) < zi->i_max_size) {
 			ret = zonefs_zone_mgmt(inode, REQ_OP_ZONE_OPEN);
 			if (ret) {
-				zi->i_wr_refcnt--;
 				atomic_dec(&sbi->s_open_zones);
 				goto unlock;
 			}
@@ -1052,6 +1049,8 @@ static int zonefs_open_zone(struct inode
 		}
 	}
 
+	zi->i_wr_refcnt++;
+
 unlock:
 	mutex_unlock(&zi->i_truncate_mutex);
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 019/120] btrfs: fix race when cloning extent buffer during rewind of an old root
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (17 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 018/120] zonefs: fix to update .i_wr_refcnt correctly in zonefs_open_zone() Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 020/120] btrfs: fix slab cache flags for free space tree bitmap Greg Kroah-Hartman
                   ` (103 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Zygo Blaxell, Filipe Manana, David Sterba

From: Filipe Manana <fdmanana@suse.com>

commit dbcc7d57bffc0c8cac9dac11bec548597d59a6a5 upstream.

While resolving backreferences, as part of a logical ino ioctl call or
fiemap, we can end up hitting a BUG_ON() when replaying tree mod log
operations of a root, triggering a stack trace like the following:

  ------------[ cut here ]------------
  kernel BUG at fs/btrfs/ctree.c:1210!
  invalid opcode: 0000 [#1] SMP KASAN PTI
  CPU: 1 PID: 19054 Comm: crawl_335 Tainted: G        W         5.11.0-2d11c0084b02-misc-next+ #89
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
  RIP: 0010:__tree_mod_log_rewind+0x3b1/0x3c0
  Code: 05 48 8d 74 10 (...)
  RSP: 0018:ffffc90001eb70b8 EFLAGS: 00010297
  RAX: 0000000000000000 RBX: ffff88812344e400 RCX: ffffffffb28933b6
  RDX: 0000000000000007 RSI: dffffc0000000000 RDI: ffff88812344e42c
  RBP: ffffc90001eb7108 R08: 1ffff11020b60a20 R09: ffffed1020b60a20
  R10: ffff888105b050f9 R11: ffffed1020b60a1f R12: 00000000000000ee
  R13: ffff8880195520c0 R14: ffff8881bc958500 R15: ffff88812344e42c
  FS:  00007fd1955e8700(0000) GS:ffff8881f5600000(0000) knlGS:0000000000000000
  CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  CR2: 00007efdb7928718 CR3: 000000010103a006 CR4: 0000000000170ee0
  Call Trace:
   btrfs_search_old_slot+0x265/0x10d0
   ? lock_acquired+0xbb/0x600
   ? btrfs_search_slot+0x1090/0x1090
   ? free_extent_buffer.part.61+0xd7/0x140
   ? free_extent_buffer+0x13/0x20
   resolve_indirect_refs+0x3e9/0xfc0
   ? lock_downgrade+0x3d0/0x3d0
   ? __kasan_check_read+0x11/0x20
   ? add_prelim_ref.part.11+0x150/0x150
   ? lock_downgrade+0x3d0/0x3d0
   ? __kasan_check_read+0x11/0x20
   ? lock_acquired+0xbb/0x600
   ? __kasan_check_write+0x14/0x20
   ? do_raw_spin_unlock+0xa8/0x140
   ? rb_insert_color+0x30/0x360
   ? prelim_ref_insert+0x12d/0x430
   find_parent_nodes+0x5c3/0x1830
   ? resolve_indirect_refs+0xfc0/0xfc0
   ? lock_release+0xc8/0x620
   ? fs_reclaim_acquire+0x67/0xf0
   ? lock_acquire+0xc7/0x510
   ? lock_downgrade+0x3d0/0x3d0
   ? lockdep_hardirqs_on_prepare+0x160/0x210
   ? lock_release+0xc8/0x620
   ? fs_reclaim_acquire+0x67/0xf0
   ? lock_acquire+0xc7/0x510
   ? poison_range+0x38/0x40
   ? unpoison_range+0x14/0x40
   ? trace_hardirqs_on+0x55/0x120
   btrfs_find_all_roots_safe+0x142/0x1e0
   ? find_parent_nodes+0x1830/0x1830
   ? btrfs_inode_flags_to_xflags+0x50/0x50
   iterate_extent_inodes+0x20e/0x580
   ? tree_backref_for_extent+0x230/0x230
   ? lock_downgrade+0x3d0/0x3d0
   ? read_extent_buffer+0xdd/0x110
   ? lock_downgrade+0x3d0/0x3d0
   ? __kasan_check_read+0x11/0x20
   ? lock_acquired+0xbb/0x600
   ? __kasan_check_write+0x14/0x20
   ? _raw_spin_unlock+0x22/0x30
   ? __kasan_check_write+0x14/0x20
   iterate_inodes_from_logical+0x129/0x170
   ? iterate_inodes_from_logical+0x129/0x170
   ? btrfs_inode_flags_to_xflags+0x50/0x50
   ? iterate_extent_inodes+0x580/0x580
   ? __vmalloc_node+0x92/0xb0
   ? init_data_container+0x34/0xb0
   ? init_data_container+0x34/0xb0
   ? kvmalloc_node+0x60/0x80
   btrfs_ioctl_logical_to_ino+0x158/0x230
   btrfs_ioctl+0x205e/0x4040
   ? __might_sleep+0x71/0xe0
   ? btrfs_ioctl_get_supported_features+0x30/0x30
   ? getrusage+0x4b6/0x9c0
   ? __kasan_check_read+0x11/0x20
   ? lock_release+0xc8/0x620
   ? __might_fault+0x64/0xd0
   ? lock_acquire+0xc7/0x510
   ? lock_downgrade+0x3d0/0x3d0
   ? lockdep_hardirqs_on_prepare+0x210/0x210
   ? lockdep_hardirqs_on_prepare+0x210/0x210
   ? __kasan_check_read+0x11/0x20
   ? do_vfs_ioctl+0xfc/0x9d0
   ? ioctl_file_clone+0xe0/0xe0
   ? lock_downgrade+0x3d0/0x3d0
   ? lockdep_hardirqs_on_prepare+0x210/0x210
   ? __kasan_check_read+0x11/0x20
   ? lock_release+0xc8/0x620
   ? __task_pid_nr_ns+0xd3/0x250
   ? lock_acquire+0xc7/0x510
   ? __fget_files+0x160/0x230
   ? __fget_light+0xf2/0x110
   __x64_sys_ioctl+0xc3/0x100
   do_syscall_64+0x37/0x80
   entry_SYSCALL_64_after_hwframe+0x44/0xa9
  RIP: 0033:0x7fd1976e2427
  Code: 00 00 90 48 8b 05 (...)
  RSP: 002b:00007fd1955e5cf8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
  RAX: ffffffffffffffda RBX: 00007fd1955e5f40 RCX: 00007fd1976e2427
  RDX: 00007fd1955e5f48 RSI: 00000000c038943b RDI: 0000000000000004
  RBP: 0000000001000000 R08: 0000000000000000 R09: 00007fd1955e6120
  R10: 0000557835366b00 R11: 0000000000000246 R12: 0000000000000004
  R13: 00007fd1955e5f48 R14: 00007fd1955e5f40 R15: 00007fd1955e5ef8
  Modules linked in:
  ---[ end trace ec8931a1c36e57be ]---

  (gdb) l *(__tree_mod_log_rewind+0x3b1)
  0xffffffff81893521 is in __tree_mod_log_rewind (fs/btrfs/ctree.c:1210).
  1205                     * the modification. as we're going backwards, we do the
  1206                     * opposite of each operation here.
  1207                     */
  1208                    switch (tm->op) {
  1209                    case MOD_LOG_KEY_REMOVE_WHILE_FREEING:
  1210                            BUG_ON(tm->slot < n);
  1211                            fallthrough;
  1212                    case MOD_LOG_KEY_REMOVE_WHILE_MOVING:
  1213                    case MOD_LOG_KEY_REMOVE:
  1214                            btrfs_set_node_key(eb, &tm->key, tm->slot);

Here's what happens to hit that BUG_ON():

1) We have one tree mod log user (through fiemap or the logical ino ioctl),
   with a sequence number of 1, so we have fs_info->tree_mod_seq == 1;

2) Another task is at ctree.c:balance_level() and we have eb X currently as
   the root of the tree, and we promote its single child, eb Y, as the new
   root.

   Then, at ctree.c:balance_level(), we call:

      tree_mod_log_insert_root(eb X, eb Y, 1);

3) At tree_mod_log_insert_root() we create tree mod log elements for each
   slot of eb X, of operation type MOD_LOG_KEY_REMOVE_WHILE_FREEING each
   with a ->logical pointing to ebX->start. These are placed in an array
   named tm_list.
   Lets assume there are N elements (N pointers in eb X);

4) Then, still at tree_mod_log_insert_root(), we create a tree mod log
   element of operation type MOD_LOG_ROOT_REPLACE, ->logical set to
   ebY->start, ->old_root.logical set to ebX->start, ->old_root.level set
   to the level of eb X and ->generation set to the generation of eb X;

5) Then tree_mod_log_insert_root() calls tree_mod_log_free_eb() with
   tm_list as argument. After that, tree_mod_log_free_eb() calls
   __tree_mod_log_insert() for each member of tm_list in reverse order,
   from highest slot in eb X, slot N - 1, to slot 0 of eb X;

6) __tree_mod_log_insert() sets the sequence number of each given tree mod
   log operation - it increments fs_info->tree_mod_seq and sets
   fs_info->tree_mod_seq as the sequence number of the given tree mod log
   operation.

   This means that for the tm_list created at tree_mod_log_insert_root(),
   the element corresponding to slot 0 of eb X has the highest sequence
   number (1 + N), and the element corresponding to the last slot has the
   lowest sequence number (2);

7) Then, after inserting tm_list's elements into the tree mod log rbtree,
   the MOD_LOG_ROOT_REPLACE element is inserted, which gets the highest
   sequence number, which is N + 2;

8) Back to ctree.c:balance_level(), we free eb X by calling
   btrfs_free_tree_block() on it. Because eb X was created in the current
   transaction, has no other references and writeback did not happen for
   it, we add it back to the free space cache/tree;

9) Later some other task T allocates the metadata extent from eb X, since
   it is marked as free space in the space cache/tree, and uses it as a
   node for some other btree;

10) The tree mod log user task calls btrfs_search_old_slot(), which calls
    get_old_root(), and finally that calls __tree_mod_log_oldest_root()
    with time_seq == 1 and eb_root == eb Y;

11) First iteration of the while loop finds the tree mod log element with
    sequence number N + 2, for the logical address of eb Y and of type
    MOD_LOG_ROOT_REPLACE;

12) Because the operation type is MOD_LOG_ROOT_REPLACE, we don't break out
    of the loop, and set root_logical to point to tm->old_root.logical
    which corresponds to the logical address of eb X;

13) On the next iteration of the while loop, the call to
    tree_mod_log_search_oldest() returns the smallest tree mod log element
    for the logical address of eb X, which has a sequence number of 2, an
    operation type of MOD_LOG_KEY_REMOVE_WHILE_FREEING and corresponds to
    the old slot N - 1 of eb X (eb X had N items in it before being freed);

14) We then break out of the while loop and return the tree mod log operation
    of type MOD_LOG_ROOT_REPLACE (eb Y), and not the one for slot N - 1 of
    eb X, to get_old_root();

15) At get_old_root(), we process the MOD_LOG_ROOT_REPLACE operation
    and set "logical" to the logical address of eb X, which was the old
    root. We then call tree_mod_log_search() passing it the logical
    address of eb X and time_seq == 1;

16) Then before calling tree_mod_log_search(), task T adds a key to eb X,
    which results in adding a tree mod log operation of type
    MOD_LOG_KEY_ADD to the tree mod log - this is done at
    ctree.c:insert_ptr() - but after adding the tree mod log operation
    and before updating the number of items in eb X from 0 to 1...

17) The task at get_old_root() calls tree_mod_log_search() and gets the
    tree mod log operation of type MOD_LOG_KEY_ADD just added by task T.
    Then it enters the following if branch:

    if (old_root && tm && tm->op != MOD_LOG_KEY_REMOVE_WHILE_FREEING) {
       (...)
    } (...)

    Calls read_tree_block() for eb X, which gets a reference on eb X but
    does not lock it - task T has it locked.
    Then it clones eb X while it has nritems set to 0 in its header, before
    task T sets nritems to 1 in eb X's header. From hereupon we use the
    clone of eb X which no other task has access to;

18) Then we call __tree_mod_log_rewind(), passing it the MOD_LOG_KEY_ADD
    mod log operation we just got from tree_mod_log_search() in the
    previous step and the cloned version of eb X;

19) At __tree_mod_log_rewind(), we set the local variable "n" to the number
    of items set in eb X's clone, which is 0. Then we enter the while loop,
    and in its first iteration we process the MOD_LOG_KEY_ADD operation,
    which just decrements "n" from 0 to (u32)-1, since "n" is declared with
    a type of u32. At the end of this iteration we call rb_next() to find the
    next tree mod log operation for eb X, that gives us the mod log operation
    of type MOD_LOG_KEY_REMOVE_WHILE_FREEING, for slot 0, with a sequence
    number of N + 1 (steps 3 to 6);

20) Then we go back to the top of the while loop and trigger the following
    BUG_ON():

        (...)
        switch (tm->op) {
        case MOD_LOG_KEY_REMOVE_WHILE_FREEING:
                 BUG_ON(tm->slot < n);
                 fallthrough;
        (...)

    Because "n" has a value of (u32)-1 (4294967295) and tm->slot is 0.

Fix this by taking a read lock on the extent buffer before cloning it at
ctree.c:get_old_root(). This should be done regardless of the extent
buffer having been freed and reused, as a concurrent task might be
modifying it (while holding a write lock on it).

Reported-by: Zygo Blaxell <ce3g8jdj@umail.furryterror.org>
Link: https://lore.kernel.org/linux-btrfs/20210227155037.GN28049@hungrycats.org/
Fixes: 834328a8493079 ("Btrfs: tree mod log's old roots could still be part of the tree")
CC: stable@vger.kernel.org # 4.4+
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/btrfs/ctree.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -1365,7 +1365,9 @@ get_old_root(struct btrfs_root *root, u6
 				   "failed to read tree block %llu from get_old_root",
 				   logical);
 		} else {
+			btrfs_tree_read_lock(old);
 			eb = btrfs_clone_extent_buffer(old);
+			btrfs_tree_read_unlock(old);
 			free_extent_buffer(old);
 		}
 	} else if (old_root) {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 020/120] btrfs: fix slab cache flags for free space tree bitmap
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (18 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 019/120] btrfs: fix race when cloning extent buffer during rewind of an old root Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 021/120] vhost-vdpa: fix use-after-free of v->config_ctx Greg Kroah-Hartman
                   ` (102 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Vlastimil Babka, David Sterba

From: David Sterba <dsterba@suse.com>

commit 34e49994d0dcdb2d31d4d2908d04f4e9ce57e4d7 upstream.

The free space tree bitmap slab cache is created with SLAB_RED_ZONE but
that's a debugging flag and not always enabled. Also the other slabs are
created with at least SLAB_MEM_SPREAD that we want as well to average
the memory placement cost.

Reported-by: Vlastimil Babka <vbabka@suse.cz>
Fixes: 3acd48507dc4 ("btrfs: fix allocation of free space cache v1 bitmap pages")
CC: stable@vger.kernel.org # 5.4+
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/btrfs/inode.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -8806,7 +8806,7 @@ int __init btrfs_init_cachep(void)
 
 	btrfs_free_space_bitmap_cachep = kmem_cache_create("btrfs_free_space_bitmap",
 							PAGE_SIZE, PAGE_SIZE,
-							SLAB_RED_ZONE, NULL);
+							SLAB_MEM_SPREAD, NULL);
 	if (!btrfs_free_space_bitmap_cachep)
 		goto fail;
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 021/120] vhost-vdpa: fix use-after-free of v->config_ctx
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (19 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 020/120] btrfs: fix slab cache flags for free space tree bitmap Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 022/120] vhost-vdpa: set v->config_ctx to NULL if eventfd_ctx_fdget() fails Greg Kroah-Hartman
                   ` (101 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, lingshan.zhu, Stefano Garzarella,
	Michael S. Tsirkin, Jason Wang

From: Stefano Garzarella <sgarzare@redhat.com>

commit f6bbf0010ba004f5e90c7aefdebc0ee4bd3283b9 upstream.

When the 'v->config_ctx' eventfd_ctx reference is released we didn't
set it to NULL. So if the same character device (e.g. /dev/vhost-vdpa-0)
is re-opened, the 'v->config_ctx' is invalid and calling again
vhost_vdpa_config_put() causes use-after-free issues like the
following refcount_t underflow:

    refcount_t: underflow; use-after-free.
    WARNING: CPU: 2 PID: 872 at lib/refcount.c:28 refcount_warn_saturate+0xae/0xf0
    RIP: 0010:refcount_warn_saturate+0xae/0xf0
    Call Trace:
     eventfd_ctx_put+0x5b/0x70
     vhost_vdpa_release+0xcd/0x150 [vhost_vdpa]
     __fput+0x8e/0x240
     ____fput+0xe/0x10
     task_work_run+0x66/0xa0
     exit_to_user_mode_prepare+0x118/0x120
     syscall_exit_to_user_mode+0x21/0x50
     ? __x64_sys_close+0x12/0x40
     do_syscall_64+0x45/0x50
     entry_SYSCALL_64_after_hwframe+0x44/0xae

Fixes: 776f395004d8 ("vhost_vdpa: Support config interrupt in vdpa")
Cc: lingshan.zhu@intel.com
Cc: stable@vger.kernel.org
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Link: https://lore.kernel.org/r/20210311135257.109460-2-sgarzare@redhat.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Zhu Lingshan <lingshan.zhu@intel.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/vhost/vdpa.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -308,8 +308,10 @@ static long vhost_vdpa_get_vring_num(str
 
 static void vhost_vdpa_config_put(struct vhost_vdpa *v)
 {
-	if (v->config_ctx)
+	if (v->config_ctx) {
 		eventfd_ctx_put(v->config_ctx);
+		v->config_ctx = NULL;
+	}
 }
 
 static long vhost_vdpa_set_config_call(struct vhost_vdpa *v, u32 __user *argp)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 022/120] vhost-vdpa: set v->config_ctx to NULL if eventfd_ctx_fdget() fails
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (20 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 021/120] vhost-vdpa: fix use-after-free of v->config_ctx Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 023/120] drm/amd/display: Copy over soc values before bounding box creation Greg Kroah-Hartman
                   ` (100 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, lingshan.zhu, Stefano Garzarella,
	Michael S. Tsirkin, Jason Wang

From: Stefano Garzarella <sgarzare@redhat.com>

commit 0bde59c1723a29e294765c96dbe5c7fb639c2f96 upstream.

In vhost_vdpa_set_config_call() if eventfd_ctx_fdget() fails the
'v->config_ctx' contains an error instead of a valid pointer.

Since we consider 'v->config_ctx' valid if it is not NULL, we should
set it to NULL in this case to avoid to use an invalid pointer in
other functions such as vhost_vdpa_config_put().

Fixes: 776f395004d8 ("vhost_vdpa: Support config interrupt in vdpa")
Cc: lingshan.zhu@intel.com
Cc: stable@vger.kernel.org
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Link: https://lore.kernel.org/r/20210311135257.109460-3-sgarzare@redhat.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/vhost/vdpa.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -331,8 +331,12 @@ static long vhost_vdpa_set_config_call(s
 	if (!IS_ERR_OR_NULL(ctx))
 		eventfd_ctx_put(ctx);
 
-	if (IS_ERR(v->config_ctx))
-		return PTR_ERR(v->config_ctx);
+	if (IS_ERR(v->config_ctx)) {
+		long ret = PTR_ERR(v->config_ctx);
+
+		v->config_ctx = NULL;
+		return ret;
+	}
 
 	v->vdpa->config->set_config_cb(v->vdpa, &cb);
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 023/120] drm/amd/display: Copy over soc values before bounding box creation
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (21 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 022/120] vhost-vdpa: set v->config_ctx to NULL if eventfd_ctx_fdget() fails Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 024/120] drm/amd/display: Correct algorithm for reversed gamma Greg Kroah-Hartman
                   ` (99 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Sung Lee, Tony Cheng, Yongqiang Sun,
	Qingqing Zhuo, Daniel Wheeler, Alex Deucher

From: Sung Lee <sung.lee@amd.com>

commit 73076790e25717b7d452c2eab0bfb118826e5b61 upstream.

[Why]
With certain fclock overclocks, state 1 may be chosen
as the closest clock level. This may result in this state
being empty if not populated beforehand, resulting in
black screens and screen corruption.

[How]
Copy over all soc states to clock_limits before bounding
box creation to avoid any cases with empty states.

Fixes: f2459c52c84449 ("drm/amd/display: Add Bounding Box State for Low DF PState but High Voltage State")
Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1514
Signed-off-by: Sung Lee <sung.lee@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Reviewed-by: Yongqiang Sun <yongqiang.sun@amd.com>
Acked-by: Qingqing Zhuo <Qingqing.Zhuo@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c |    5 +++++
 1 file changed, 5 insertions(+)

--- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
@@ -1595,6 +1595,11 @@ static void update_bw_bounding_box(struc
 	dcn2_1_soc.num_chans = bw_params->num_channels;
 
 	ASSERT(clk_table->num_entries);
+	/* Copy dcn2_1_soc.clock_limits to clock_limits to avoid copying over null states later */
+	for (i = 0; i < dcn2_1_soc.num_states + 1; i++) {
+		clock_limits[i] = dcn2_1_soc.clock_limits[i];
+	}
+
 	for (i = 0; i < clk_table->num_entries; i++) {
 		/* loop backwards*/
 		for (closest_clk_lvl = 0, j = dcn2_1_soc.num_states - 1; j >= 0; j--) {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 024/120] drm/amd/display: Correct algorithm for reversed gamma
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (22 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 023/120] drm/amd/display: Copy over soc values before bounding box creation Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 025/120] drm/amd/display: Remove MPC gamut remap logic for DCN30 Greg Kroah-Hartman
                   ` (98 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Daniel Wheeler, Calvin Hou, Jun Lei,
	Krunoslav Kovac, Solomon Chiu, Vladimir Stempen, Alex Deucher

From: Calvin Hou <Calvin.Hou@amd.com>

commit 34fa493a565cc6fcee6919787c11e264f55603c6 upstream.

[Why]
DCN30 needs to correctly program reversed gamma curve, which DCN20
already has.
Also needs to fix a bug that 252-255 values are clipped.

[How]
Apply two fixes into DCN30.

Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1513
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Calvin Hou <Calvin.Hou@amd.com>
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Reviewed-by: Krunoslav Kovac <Krunoslav.Kovac@amd.com>
Acked-by: Solomon Chiu <solomon.chiu@amd.com>
Acked-by: Vladimir Stempen <Vladimir.Stempen@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c |   26 +++++++++++------
 1 file changed, 18 insertions(+), 8 deletions(-)

--- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c
@@ -113,6 +113,7 @@ bool cm3_helper_translate_curve_to_hw_fo
 	struct pwl_result_data *rgb_resulted;
 	struct pwl_result_data *rgb;
 	struct pwl_result_data *rgb_plus_1;
+	struct pwl_result_data *rgb_minus_1;
 	struct fixed31_32 end_value;
 
 	int32_t region_start, region_end;
@@ -140,7 +141,7 @@ bool cm3_helper_translate_curve_to_hw_fo
 		region_start = -MAX_LOW_POINT;
 		region_end   = NUMBER_REGIONS - MAX_LOW_POINT;
 	} else {
-		/* 10 segments
+		/* 11 segments
 		 * segment is from 2^-10 to 2^0
 		 * There are less than 256 points, for optimization
 		 */
@@ -154,9 +155,10 @@ bool cm3_helper_translate_curve_to_hw_fo
 		seg_distr[7] = 4;
 		seg_distr[8] = 4;
 		seg_distr[9] = 4;
+		seg_distr[10] = 1;
 
 		region_start = -10;
-		region_end = 0;
+		region_end = 1;
 	}
 
 	for (i = region_end - region_start; i < MAX_REGIONS_NUMBER ; i++)
@@ -189,6 +191,10 @@ bool cm3_helper_translate_curve_to_hw_fo
 	rgb_resulted[hw_points - 1].green = output_tf->tf_pts.green[start_index];
 	rgb_resulted[hw_points - 1].blue = output_tf->tf_pts.blue[start_index];
 
+	rgb_resulted[hw_points].red = rgb_resulted[hw_points - 1].red;
+	rgb_resulted[hw_points].green = rgb_resulted[hw_points - 1].green;
+	rgb_resulted[hw_points].blue = rgb_resulted[hw_points - 1].blue;
+
 	// All 3 color channels have same x
 	corner_points[0].red.x = dc_fixpt_pow(dc_fixpt_from_int(2),
 					     dc_fixpt_from_int(region_start));
@@ -259,15 +265,18 @@ bool cm3_helper_translate_curve_to_hw_fo
 
 	rgb = rgb_resulted;
 	rgb_plus_1 = rgb_resulted + 1;
+	rgb_minus_1 = rgb;
 
 	i = 1;
 	while (i != hw_points + 1) {
-		if (dc_fixpt_lt(rgb_plus_1->red, rgb->red))
-			rgb_plus_1->red = rgb->red;
-		if (dc_fixpt_lt(rgb_plus_1->green, rgb->green))
-			rgb_plus_1->green = rgb->green;
-		if (dc_fixpt_lt(rgb_plus_1->blue, rgb->blue))
-			rgb_plus_1->blue = rgb->blue;
+		if (i >= hw_points - 1) {
+			if (dc_fixpt_lt(rgb_plus_1->red, rgb->red))
+				rgb_plus_1->red = dc_fixpt_add(rgb->red, rgb_minus_1->delta_red);
+			if (dc_fixpt_lt(rgb_plus_1->green, rgb->green))
+				rgb_plus_1->green = dc_fixpt_add(rgb->green, rgb_minus_1->delta_green);
+			if (dc_fixpt_lt(rgb_plus_1->blue, rgb->blue))
+				rgb_plus_1->blue = dc_fixpt_add(rgb->blue, rgb_minus_1->delta_blue);
+		}
 
 		rgb->delta_red   = dc_fixpt_sub(rgb_plus_1->red,   rgb->red);
 		rgb->delta_green = dc_fixpt_sub(rgb_plus_1->green, rgb->green);
@@ -283,6 +292,7 @@ bool cm3_helper_translate_curve_to_hw_fo
 		}
 
 		++rgb_plus_1;
+		rgb_minus_1 = rgb;
 		++rgb;
 		++i;
 	}



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 025/120] drm/amd/display: Remove MPC gamut remap logic for DCN30
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (23 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 024/120] drm/amd/display: Correct algorithm for reversed gamma Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 026/120] iommu/amd: Dont call early_amd_iommu_init() when AMD IOMMU is disabled Greg Kroah-Hartman
                   ` (97 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Daniel Wheeler, Dillon Varone,
	Krunoslav Kovac, Aric Cyr, Solomon Chiu, Alex Deucher

From: Dillon Varone <dillon.varone@amd.com>

commit beb6b2f97e0a02164c7f0df6e08c49219cfc2b80 upstream.

[Why?]
Should only reroute gamut remap to mpc unless 3D LUT is not used and all
planes are using the same src->dest.

[How?]
Remove DCN30 specific logic for rerouting gamut remap to mpc.

Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1513
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Dillon Varone <dillon.varone@amd.com>
Reviewed-by: Krunoslav Kovac <Krunoslav.Kovac@amd.com>
Acked-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Solomon Chiu <solomon.chiu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c |   34 +--------------------
 1 file changed, 2 insertions(+), 32 deletions(-)

--- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
@@ -1501,38 +1501,8 @@ static void dcn20_update_dchubp_dpp(
 	if (pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed
 			|| pipe_ctx->stream->update_flags.bits.gamut_remap
 			|| pipe_ctx->stream->update_flags.bits.out_csc) {
-		struct mpc *mpc = pipe_ctx->stream_res.opp->ctx->dc->res_pool->mpc;
-
-		if (mpc->funcs->set_gamut_remap) {
-			int i;
-			int mpcc_id = hubp->inst;
-			struct mpc_grph_gamut_adjustment adjust;
-			bool enable_remap_dpp = false;
-
-			memset(&adjust, 0, sizeof(adjust));
-			adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_BYPASS;
-
-			/* save the enablement of gamut remap for dpp */
-			enable_remap_dpp = pipe_ctx->stream->gamut_remap_matrix.enable_remap;
-
-			/* force bypass gamut remap for dpp/cm */
-			pipe_ctx->stream->gamut_remap_matrix.enable_remap = false;
-			dc->hwss.program_gamut_remap(pipe_ctx);
-
-			/* restore gamut remap flag and use this remap into mpc */
-			pipe_ctx->stream->gamut_remap_matrix.enable_remap = enable_remap_dpp;
-
-			/* build remap matrix for top plane if enabled */
-			if (enable_remap_dpp && pipe_ctx->top_pipe == NULL) {
-					adjust.gamut_adjust_type = GRAPHICS_GAMUT_ADJUST_TYPE_SW;
-					for (i = 0; i < CSC_TEMPERATURE_MATRIX_SIZE; i++)
-						adjust.temperature_matrix[i] =
-								pipe_ctx->stream->gamut_remap_matrix.matrix[i];
-			}
-			mpc->funcs->set_gamut_remap(mpc, mpcc_id, &adjust);
-		} else
-			/* dpp/cm gamut remap*/
-			dc->hwss.program_gamut_remap(pipe_ctx);
+		/* dpp/cm gamut remap*/
+		dc->hwss.program_gamut_remap(pipe_ctx);
 
 		/*call the dcn2 method which uses mpc csc*/
 		dc->hwss.program_output_csc(dc,



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 026/120] iommu/amd: Dont call early_amd_iommu_init() when AMD IOMMU is disabled
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (24 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 025/120] drm/amd/display: Remove MPC gamut remap logic for DCN30 Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 027/120] iommu/amd: Keep track of amd_iommu_irq_remap state Greg Kroah-Hartman
                   ` (96 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Joerg Roedel, Huang Rui

From: Joerg Roedel <jroedel@suse.de>

commit 9f81ca8d1fd68f5697c201f26632ed622e9e462f upstream.

Don't even try to initialize the AMD IOMMU hardware when amd_iommu=off has been
passed on the kernel command line.

Cc: stable@vger.kernel.org # v5.11
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Link: https://lore.kernel.org/r/20210317091037.31374-3-joro@8bytes.org
Acked-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iommu/amd/init.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/iommu/amd/init.c
+++ b/drivers/iommu/amd/init.c
@@ -2917,12 +2917,12 @@ static int __init state_next(void)
 		}
 		break;
 	case IOMMU_IVRS_DETECTED:
-		ret = early_amd_iommu_init();
-		init_state = ret ? IOMMU_INIT_ERROR : IOMMU_ACPI_FINISHED;
-		if (init_state == IOMMU_ACPI_FINISHED && amd_iommu_disabled) {
-			pr_info("AMD IOMMU disabled\n");
+		if (amd_iommu_disabled) {
 			init_state = IOMMU_CMDLINE_DISABLED;
 			ret = -EINVAL;
+		} else {
+			ret = early_amd_iommu_init();
+			init_state = ret ? IOMMU_INIT_ERROR : IOMMU_ACPI_FINISHED;
 		}
 		break;
 	case IOMMU_ACPI_FINISHED:



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 027/120] iommu/amd: Keep track of amd_iommu_irq_remap state
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (25 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 026/120] iommu/amd: Dont call early_amd_iommu_init() when AMD IOMMU is disabled Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 028/120] iommu/amd: Move Stoney Ridge check to detect_ivrs() Greg Kroah-Hartman
                   ` (95 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Joerg Roedel, Huang Rui

From: Joerg Roedel <jroedel@suse.de>

commit 4b8ef157ca832f812b3302b1800548bd92c207de upstream.

The amd_iommu_irq_remap variable is set to true in amd_iommu_prepare().
But if initialization fails it is not set to false. Fix that and
correctly keep track of whether irq remapping is enabled or not.

Fixes: b34f10c2dc59 ("iommu/amd: Stop irq_remapping_select() matching when remapping is disabled")
Cc: stable@vger.kernel.org # v5.11
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Link: https://lore.kernel.org/r/20210317091037.31374-4-joro@8bytes.org
Acked-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iommu/amd/init.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

--- a/drivers/iommu/amd/init.c
+++ b/drivers/iommu/amd/init.c
@@ -3000,8 +3000,11 @@ int __init amd_iommu_prepare(void)
 	amd_iommu_irq_remap = true;
 
 	ret = iommu_go_to_state(IOMMU_ACPI_FINISHED);
-	if (ret)
+	if (ret) {
+		amd_iommu_irq_remap = false;
 		return ret;
+	}
+
 	return amd_iommu_irq_remap ? 0 : -ENODEV;
 }
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 028/120] iommu/amd: Move Stoney Ridge check to detect_ivrs()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (26 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 027/120] iommu/amd: Keep track of amd_iommu_irq_remap state Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 029/120] ASoC: fsl_ssi: Fix TDM slot setup for I2S mode Greg Kroah-Hartman
                   ` (94 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Joerg Roedel, Huang Rui

From: Joerg Roedel <jroedel@suse.de>

commit 072a03e0a0b1bc22eb5970727877264657c61fd3 upstream.

The AMD IOMMU will not be enabled on AMD Stoney Ridge systems. Bail
out even earlier and refuse to even detect the IOMMU there.

Cc: stable@vger.kernel.org # v5.11
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Link: https://lore.kernel.org/r/20210317091037.31374-2-joro@8bytes.org
Acked-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iommu/amd/init.c |   23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

--- a/drivers/iommu/amd/init.c
+++ b/drivers/iommu/amd/init.c
@@ -2712,7 +2712,6 @@ static int __init early_amd_iommu_init(v
 	struct acpi_table_header *ivrs_base;
 	acpi_status status;
 	int i, remap_cache_sz, ret = 0;
-	u32 pci_id;
 
 	if (!amd_iommu_detected)
 		return -ENODEV;
@@ -2802,16 +2801,6 @@ static int __init early_amd_iommu_init(v
 	if (ret)
 		goto out;
 
-	/* Disable IOMMU if there's Stoney Ridge graphics */
-	for (i = 0; i < 32; i++) {
-		pci_id = read_pci_config(0, i, 0, 0);
-		if ((pci_id & 0xffff) == 0x1002 && (pci_id >> 16) == 0x98e4) {
-			pr_info("Disable IOMMU on Stoney Ridge\n");
-			amd_iommu_disabled = true;
-			break;
-		}
-	}
-
 	/* Disable any previously enabled IOMMUs */
 	if (!is_kdump_kernel() || amd_iommu_disabled)
 		disable_iommus();
@@ -2879,6 +2868,7 @@ static bool detect_ivrs(void)
 {
 	struct acpi_table_header *ivrs_base;
 	acpi_status status;
+	int i;
 
 	status = acpi_get_table("IVRS", 0, &ivrs_base);
 	if (status == AE_NOT_FOUND)
@@ -2891,6 +2881,17 @@ static bool detect_ivrs(void)
 
 	acpi_put_table(ivrs_base);
 
+	/* Don't use IOMMU if there is Stoney Ridge graphics */
+	for (i = 0; i < 32; i++) {
+		u32 pci_id;
+
+		pci_id = read_pci_config(0, i, 0, 0);
+		if ((pci_id & 0xffff) == 0x1002 && (pci_id >> 16) == 0x98e4) {
+			pr_info("Disable IOMMU on Stoney Ridge\n");
+			return false;
+		}
+	}
+
 	/* Make sure ACS will be enabled during PCI probe */
 	pci_request_acs();
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 029/120] ASoC: fsl_ssi: Fix TDM slot setup for I2S mode
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (27 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 028/120] iommu/amd: Move Stoney Ridge check to detect_ivrs() Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 030/120] ASoC: Intel: bytcr_rt5640: Fix HP Pavilion x2 10-p0XX OVCD current threshold Greg Kroah-Hartman
                   ` (93 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Alexander Shiyan, Nicolin Chen, Mark Brown

From: Alexander Shiyan <shc_work@mail.ru>

commit 87263968516fb9507d6215d53f44052627fae8d8 upstream.

When using the driver in I2S TDM mode, the _fsl_ssi_set_dai_fmt()
function rewrites the number of slots previously set by the
fsl_ssi_set_dai_tdm_slot() function to 2 by default.
To fix this, let's use the saved slot count value or, if TDM
is not used and the slot count is not set, proceed as before.

Fixes: 4f14f5c11db1 ("ASoC: fsl_ssi: Fix number of words per frame for I2S-slave mode")
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Acked-by: Nicolin Chen <nicoleotsuka@gmail.com>
Link: https://lore.kernel.org/r/20210216114221.26635-1-shc_work@mail.ru
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/fsl/fsl_ssi.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -878,6 +878,7 @@ static int fsl_ssi_hw_free(struct snd_pc
 static int _fsl_ssi_set_dai_fmt(struct fsl_ssi *ssi, unsigned int fmt)
 {
 	u32 strcr = 0, scr = 0, stcr, srcr, mask;
+	unsigned int slots;
 
 	ssi->dai_fmt = fmt;
 
@@ -909,10 +910,11 @@ static int _fsl_ssi_set_dai_fmt(struct f
 			return -EINVAL;
 		}
 
+		slots = ssi->slots ? : 2;
 		regmap_update_bits(ssi->regs, REG_SSI_STCCR,
-				   SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(2));
+				   SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(slots));
 		regmap_update_bits(ssi->regs, REG_SSI_SRCCR,
-				   SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(2));
+				   SSI_SxCCR_DC_MASK, SSI_SxCCR_DC(slots));
 
 		/* Data on rising edge of bclk, frame low, 1clk before data */
 		strcr |= SSI_STCR_TFSI | SSI_STCR_TSCKP | SSI_STCR_TEFS;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 030/120] ASoC: Intel: bytcr_rt5640: Fix HP Pavilion x2 10-p0XX OVCD current threshold
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (28 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 029/120] ASoC: fsl_ssi: Fix TDM slot setup for I2S mode Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 031/120] ASoC: SOF: Intel: unregister DMIC device on probe error Greg Kroah-Hartman
                   ` (92 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Hans de Goede, Pierre-Louis Bossart,
	Mark Brown

From: Hans de Goede <hdegoede@redhat.com>

commit ca08ddfd961d2a17208d9182e0ee5791b39bd8bf upstream.

When I added the quirk for the "HP Pavilion x2 10-p0XX" I copied the
byt_rt5640_quirk_table[] entry for the HP Pavilion x2 10-k0XX / 10-n0XX
models since these use almost the same settings.

While doing this I accidentally also copied and kept the non-standard
OVCD_TH_1500UA setting used on those models. This too low threshold is
causing headsets to often be seen as headphones (without a headset-mic)
and when correctly identified it is causing ghost play/pause
button-presses to get detected.

Correct the HP Pavilion x2 10-p0XX quirk to use the default OVCD_TH_2000UA
setting, fixing these problems.

Fixes: fbdae7d6d04d ("ASoC: Intel: bytcr_rt5640: Fix HP Pavilion x2 Detachable quirks")
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210224105052.42116-1-hdegoede@redhat.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/intel/boards/bytcr_rt5640.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/sound/soc/intel/boards/bytcr_rt5640.c
+++ b/sound/soc/intel/boards/bytcr_rt5640.c
@@ -577,7 +577,7 @@ static const struct dmi_system_id byt_rt
 		},
 		.driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
 					BYT_RT5640_JD_SRC_JD1_IN4P |
-					BYT_RT5640_OVCD_TH_1500UA |
+					BYT_RT5640_OVCD_TH_2000UA |
 					BYT_RT5640_OVCD_SF_0P75 |
 					BYT_RT5640_MCLK_EN),
 	},



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 031/120] ASoC: SOF: Intel: unregister DMIC device on probe error
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (29 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 030/120] ASoC: Intel: bytcr_rt5640: Fix HP Pavilion x2 10-p0XX OVCD current threshold Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 032/120] ASoC: SOF: intel: fix wrong poll bits in dsp power down Greg Kroah-Hartman
                   ` (91 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Bard Liao, Pierre-Louis Bossart,
	Ranjani Sridharan, Guennadi Liakhovetski, Mark Brown

From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>

commit 5bb0ecddb2a7f638d65e457f3da9fa334c967b14 upstream.

We only unregister the platform device during the .remove operation,
but if the probe fails we will never reach this sequence.

Suggested-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Fixes: dd96daca6c83e ("ASoC: SOF: Intel: Add APL/CNL HW DSP support")
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Link: https://lore.kernel.org/r/20210302003410.1178535-1-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/sof/intel/hda.c |    1 +
 1 file changed, 1 insertion(+)

--- a/sound/soc/sof/intel/hda.c
+++ b/sound/soc/sof/intel/hda.c
@@ -896,6 +896,7 @@ free_streams:
 /* dsp_unmap: not currently used */
 	iounmap(sdev->bar[HDA_DSP_BAR]);
 hdac_bus_unmap:
+	platform_device_unregister(hdev->dmic_dev);
 	iounmap(bus->remap_addr);
 	hda_codec_i915_exit(sdev);
 err:



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 032/120] ASoC: SOF: intel: fix wrong poll bits in dsp power down
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (30 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 031/120] ASoC: SOF: Intel: unregister DMIC device on probe error Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 033/120] ASoC: qcom: sdm845: Fix array out of bounds access Greg Kroah-Hartman
                   ` (90 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Rander Wang, Ranjani Sridharan,
	Pan Xiuli, Pierre-Louis Bossart, Mark Brown

From: Pan Xiuli <xiuli.pan@linux.intel.com>

commit fd8299181995093948ec6ca75432e797b4a39143 upstream.

The ADSPCS_SPA is Set Power Active bit. To check if DSP is powered
down, we need to check ADSPCS_CPA, the Current Power Active bit.

Fixes: 747503b1813a3 ("ASoC: SOF: Intel: Add Intel specific HDA DSP HW operations")
Reviewed-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Pan Xiuli <xiuli.pan@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210309004127.4940-1-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/sof/intel/hda-dsp.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/sound/soc/sof/intel/hda-dsp.c
+++ b/sound/soc/sof/intel/hda-dsp.c
@@ -207,7 +207,7 @@ int hda_dsp_core_power_down(struct snd_s
 
 	ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR,
 				HDA_DSP_REG_ADSPCS, adspcs,
-				!(adspcs & HDA_DSP_ADSPCS_SPA_MASK(core_mask)),
+				!(adspcs & HDA_DSP_ADSPCS_CPA_MASK(core_mask)),
 				HDA_DSP_REG_POLL_INTERVAL_US,
 				HDA_DSP_PD_TIMEOUT * USEC_PER_MSEC);
 	if (ret < 0)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 033/120] ASoC: qcom: sdm845: Fix array out of bounds access
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (31 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 032/120] ASoC: SOF: intel: fix wrong poll bits in dsp power down Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 034/120] ASoC: qcom: sdm845: Fix array out of range on rx slim channels Greg Kroah-Hartman
                   ` (89 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, John Stultz, Srinivas Kandagatla, Mark Brown

From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

commit 1c668e1c0a0f74472469cd514f40c9012b324c31 upstream.

Static analysis Coverity had detected a potential array out-of-bounds
write issue due to the fact that MAX AFE port Id was set to 16 instead
of using AFE_PORT_MAX macro.

Fix this by properly using AFE_PORT_MAX macro.

Fixes: 1b93a8843147 ("ASoC: qcom: sdm845: handle soundwire stream")
Reported-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20210309142129.14182-2-srinivas.kandagatla@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/qcom/sdm845.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/sound/soc/qcom/sdm845.c
+++ b/sound/soc/qcom/sdm845.c
@@ -33,12 +33,12 @@
 struct sdm845_snd_data {
 	struct snd_soc_jack jack;
 	bool jack_setup;
-	bool stream_prepared[SLIM_MAX_RX_PORTS];
+	bool stream_prepared[AFE_PORT_MAX];
 	struct snd_soc_card *card;
 	uint32_t pri_mi2s_clk_count;
 	uint32_t sec_mi2s_clk_count;
 	uint32_t quat_tdm_clk_count;
-	struct sdw_stream_runtime *sruntime[SLIM_MAX_RX_PORTS];
+	struct sdw_stream_runtime *sruntime[AFE_PORT_MAX];
 };
 
 static unsigned int tdm_slot_offset[8] = {0, 4, 8, 12, 16, 20, 24, 28};



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 034/120] ASoC: qcom: sdm845: Fix array out of range on rx slim channels
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (32 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 033/120] ASoC: qcom: sdm845: Fix array out of bounds access Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 035/120] ASoC: codecs: wcd934x: add a sanity check in set channel map Greg Kroah-Hartman
                   ` (88 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, John Stultz, Srinivas Kandagatla, Mark Brown

From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

commit 4800fe6ea1022eb240215b1743d2541adad8efc7 upstream.

WCD934x has only 13 RX SLIM ports however we are setting it as 16
in set_channel_map, this will lead to array out of bounds error!

Orignally caught by enabling USBAN array out of bounds check:

Fixes: 5caf64c633a3 ("ASoC: qcom: sdm845: add support to DB845c and Lenovo Yoga")
Reported-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20210309142129.14182-3-srinivas.kandagatla@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/qcom/sdm845.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/sound/soc/qcom/sdm845.c
+++ b/sound/soc/qcom/sdm845.c
@@ -27,7 +27,7 @@
 #define SPK_TDM_RX_MASK         0x03
 #define NUM_TDM_SLOTS           8
 #define SLIM_MAX_TX_PORTS 16
-#define SLIM_MAX_RX_PORTS 16
+#define SLIM_MAX_RX_PORTS 13
 #define WCD934X_DEFAULT_MCLK_RATE	9600000
 
 struct sdm845_snd_data {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 035/120] ASoC: codecs: wcd934x: add a sanity check in set channel map
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (33 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 034/120] ASoC: qcom: sdm845: Fix array out of range on rx slim channels Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:26 ` [PATCH 5.11 036/120] ASoC: qcom: lpass-cpu: Fix lpass dai ids parse Greg Kroah-Hartman
                   ` (87 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, John Stultz, Srinivas Kandagatla, Mark Brown

From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

commit 3bb4852d598f0275ed5996a059df55be7318ac2f upstream.

set channel map can be passed with a channel maps, however if
the number of channels that are passed are more than the actual
supported channels then we would be accessing array out of bounds.

So add a sanity check to validate these numbers!

Fixes: a61f3b4f476e ("ASoC: wcd934x: add support to wcd9340/wcd9341 codec")
Reported-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20210309142129.14182-4-srinivas.kandagatla@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/codecs/wcd934x.c |    6 ++++++
 1 file changed, 6 insertions(+)

--- a/sound/soc/codecs/wcd934x.c
+++ b/sound/soc/codecs/wcd934x.c
@@ -1873,6 +1873,12 @@ static int wcd934x_set_channel_map(struc
 
 	wcd = snd_soc_component_get_drvdata(dai->component);
 
+	if (tx_num > WCD934X_TX_MAX || rx_num > WCD934X_RX_MAX) {
+		dev_err(wcd->dev, "Invalid tx %d or rx %d channel count\n",
+			tx_num, rx_num);
+		return -EINVAL;
+	}
+
 	if (!tx_slot || !rx_slot) {
 		dev_err(wcd->dev, "Invalid tx_slot=%p, rx_slot=%p\n",
 			tx_slot, rx_slot);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 036/120] ASoC: qcom: lpass-cpu: Fix lpass dai ids parse
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (34 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 035/120] ASoC: codecs: wcd934x: add a sanity check in set channel map Greg Kroah-Hartman
@ 2021-03-22 12:26 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 037/120] ASoC: simple-card-utils: Do not handle device clock Greg Kroah-Hartman
                   ` (86 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Srinivasa Rao Mandadapu, Mark Brown

From: Srinivasa Rao Mandadapu <srivasam@codeaurora.org>

commit 9922f50f7178496e709d3d064920b5031f0d9061 upstream.

The max boundary check while parsing dai ids makes
sound card registration fail after common up dai ids.

Fixes: cd3484f7f138 ("ASoC: qcom: Fix broken support to MI2S TERTIARY and QUATERNARY")

Signed-off-by: Srinivasa Rao Mandadapu <srivasam@codeaurora.org>
Link: https://lore.kernel.org/r/20210311154557.24978-1-srivasam@codeaurora.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/qcom/lpass-cpu.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/sound/soc/qcom/lpass-cpu.c
+++ b/sound/soc/qcom/lpass-cpu.c
@@ -737,7 +737,7 @@ static void of_lpass_cpu_parse_dai_data(
 
 	for_each_child_of_node(dev->of_node, node) {
 		ret = of_property_read_u32(node, "reg", &id);
-		if (ret || id < 0 || id >= data->variant->num_dai) {
+		if (ret || id < 0) {
 			dev_err(dev, "valid dai id not found: %d\n", ret);
 			continue;
 		}



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 037/120] ASoC: simple-card-utils: Do not handle device clock
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (35 preceding siblings ...)
  2021-03-22 12:26 ` [PATCH 5.11 036/120] ASoC: qcom: lpass-cpu: Fix lpass dai ids parse Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 038/120] afs: Fix accessing YFS xattrs on a non-YFS server Greg Kroah-Hartman
                   ` (85 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Michael Walle, Mark Brown, Sameer Pujar

From: Sameer Pujar <spujar@nvidia.com>

commit 8ca88d53351cc58d535b2bfc7386835378fb0db2 upstream.

This reverts commit 1e30f642cf29 ("ASoC: simple-card-utils: Fix device
module clock"). The original patch ended up breaking following platform,
which depends on set_sysclk() to configure internal PLL on wm8904 codec
and expects simple-card-utils to not update the MCLK rate.
 - "arch/arm64/boot/dts/freescale/fsl-ls1028a-kontron-sl28-var3-ads2.dts"

It would be best if codec takes care of setting MCLK clock via DAI
set_sysclk() callback.

Reported-by: Michael Walle <michael@walle.cc>
Suggested-by: Mark Brown <broonie@kernel.org>
Suggested-by: Michael Walle <michael@walle.cc>
Fixes: 1e30f642cf29 ("ASoC: simple-card-utils: Fix device module clock")
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Tested-by: Michael Walle <michael@walle.cc>
Link: https://lore.kernel.org/r/1615829492-8972-2-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/generic/simple-card-utils.c |   13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -172,15 +172,16 @@ int asoc_simple_parse_clk(struct device
 	 *  or device's module clock.
 	 */
 	clk = devm_get_clk_from_child(dev, node, NULL);
-	if (IS_ERR(clk))
-		clk = devm_get_clk_from_child(dev, dlc->of_node, NULL);
-
 	if (!IS_ERR(clk)) {
-		simple_dai->clk = clk;
 		simple_dai->sysclk = clk_get_rate(clk);
-	} else if (!of_property_read_u32(node, "system-clock-frequency",
-					 &val)) {
+
+		simple_dai->clk = clk;
+	} else if (!of_property_read_u32(node, "system-clock-frequency", &val)) {
 		simple_dai->sysclk = val;
+	} else {
+		clk = devm_get_clk_from_child(dev, dlc->of_node, NULL);
+		if (!IS_ERR(clk))
+			simple_dai->sysclk = clk_get_rate(clk);
 	}
 
 	if (of_property_read_bool(node, "system-clock-direction-out"))



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 038/120] afs: Fix accessing YFS xattrs on a non-YFS server
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (36 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 037/120] ASoC: simple-card-utils: Do not handle device clock Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 039/120] afs: Stop listxattr() from listing "afs.*" attributes Greg Kroah-Hartman
                   ` (84 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Gaja Sophie Peters, David Howells,
	Marc Dionne, Jeffrey Altman, linux-afs

From: David Howells <dhowells@redhat.com>

commit 64fcbb6158ecc684d84c64424830a9c37c77c5b9 upstream.

If someone attempts to access YFS-related xattrs (e.g. afs.yfs.acl) on a
file on a non-YFS AFS server (such as OpenAFS), then the kernel will jump
to a NULL function pointer because the afs_fetch_acl_operation descriptor
doesn't point to a function for issuing an operation on a non-YFS
server[1].

Fix this by making afs_wait_for_operation() check that the issue_afs_rpc
method is set before jumping to it and setting -ENOTSUPP if not.  This fix
also covers other potential operations that also only exist on YFS servers.

afs_xattr_get/set_yfs() then need to translate -ENOTSUPP to -ENODATA as the
former error is internal to the kernel.

The bug shows up as an oops like the following:

	BUG: kernel NULL pointer dereference, address: 0000000000000000
	[...]
	Code: Unable to access opcode bytes at RIP 0xffffffffffffffd6.
	[...]
	Call Trace:
	 afs_wait_for_operation+0x83/0x1b0 [kafs]
	 afs_xattr_get_yfs+0xe6/0x270 [kafs]
	 __vfs_getxattr+0x59/0x80
	 vfs_getxattr+0x11c/0x140
	 getxattr+0x181/0x250
	 ? __check_object_size+0x13f/0x150
	 ? __fput+0x16d/0x250
	 __x64_sys_fgetxattr+0x64/0xb0
	 do_syscall_64+0x49/0xc0
	 entry_SYSCALL_64_after_hwframe+0x44/0xa9
	RIP: 0033:0x7fb120a9defe

This was triggered with "cp -a" which attempts to copy xattrs, including
afs ones, but is easier to reproduce with getfattr, e.g.:

	getfattr -d -m ".*" /afs/openafs.org/

Fixes: e49c7b2f6de7 ("afs: Build an abstraction around an "operation" concept")
Reported-by: Gaja Sophie Peters <gaja.peters@math.uni-hamburg.de>
Signed-off-by: David Howells <dhowells@redhat.com>
Tested-by: Gaja Sophie Peters <gaja.peters@math.uni-hamburg.de>
Reviewed-by: Marc Dionne <marc.dionne@auristor.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
cc: linux-afs@lists.infradead.org
Link: http://lists.infradead.org/pipermail/linux-afs/2021-March/003498.html [1]
Link: http://lists.infradead.org/pipermail/linux-afs/2021-March/003566.html # v1
Link: http://lists.infradead.org/pipermail/linux-afs/2021-March/003572.html # v2
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/afs/fs_operation.c |    7 +++++--
 fs/afs/xattr.c        |    8 +++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

--- a/fs/afs/fs_operation.c
+++ b/fs/afs/fs_operation.c
@@ -181,10 +181,13 @@ void afs_wait_for_operation(struct afs_o
 		if (test_bit(AFS_SERVER_FL_IS_YFS, &op->server->flags) &&
 		    op->ops->issue_yfs_rpc)
 			op->ops->issue_yfs_rpc(op);
-		else
+		else if (op->ops->issue_afs_rpc)
 			op->ops->issue_afs_rpc(op);
+		else
+			op->ac.error = -ENOTSUPP;
 
-		op->error = afs_wait_for_call_to_complete(op->call, &op->ac);
+		if (op->call)
+			op->error = afs_wait_for_call_to_complete(op->call, &op->ac);
 	}
 
 	switch (op->error) {
--- a/fs/afs/xattr.c
+++ b/fs/afs/xattr.c
@@ -230,6 +230,8 @@ static int afs_xattr_get_yfs(const struc
 			else
 				ret = -ERANGE;
 		}
+	} else if (ret == -ENOTSUPP) {
+		ret = -ENODATA;
 	}
 
 error_yacl:
@@ -254,6 +256,7 @@ static int afs_xattr_set_yfs(const struc
 {
 	struct afs_operation *op;
 	struct afs_vnode *vnode = AFS_FS_I(inode);
+	int ret;
 
 	if (flags == XATTR_CREATE ||
 	    strcmp(name, "acl") != 0)
@@ -268,7 +271,10 @@ static int afs_xattr_set_yfs(const struc
 		return afs_put_operation(op);
 
 	op->ops = &yfs_store_opaque_acl2_operation;
-	return afs_do_sync_operation(op);
+	ret = afs_do_sync_operation(op);
+	if (ret == -ENOTSUPP)
+		ret = -ENODATA;
+	return ret;
 }
 
 static const struct xattr_handler afs_xattr_yfs_handler = {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 039/120] afs: Stop listxattr() from listing "afs.*" attributes
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (37 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 038/120] afs: Fix accessing YFS xattrs on a non-YFS server Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 040/120] ALSA: usb-audio: Fix unintentional sign extension issue Greg Kroah-Hartman
                   ` (83 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Gaja Sophie Peters, David Howells,
	Jeffrey Altman, Marc Dionne, linux-afs

From: David Howells <dhowells@redhat.com>

commit a7889c6320b9200e3fe415238f546db677310fa9 upstream.

afs_listxattr() lists all the available special afs xattrs (i.e. those in
the "afs.*" space), no matter what type of server we're dealing with.  But
OpenAFS servers, for example, cannot deal with some of the extra-capable
attributes that AuriStor (YFS) servers provide.  Unfortunately, the
presence of the afs.yfs.* attributes causes errors[1] for anything that
tries to read them if the server is of the wrong type.

Fix the problem by removing afs_listxattr() so that none of the special
xattrs are listed (AFS doesn't support xattrs).  It does mean, however,
that getfattr won't list them, though they can still be accessed with
getxattr() and setxattr().

This can be tested with something like:

	getfattr -d -m ".*" /afs/example.com/path/to/file

With this change, none of the afs.* attributes should be visible.

Changes:
ver #2:
 - Hide all of the afs.* xattrs, not just the ACL ones.

Fixes: ae46578b963f ("afs: Get YFS ACLs and information through xattrs")
Reported-by: Gaja Sophie Peters <gaja.peters@math.uni-hamburg.de>
Signed-off-by: David Howells <dhowells@redhat.com>
Tested-by: Gaja Sophie Peters <gaja.peters@math.uni-hamburg.de>
Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
Reviewed-by: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Link: http://lists.infradead.org/pipermail/linux-afs/2021-March/003502.html [1]
Link: http://lists.infradead.org/pipermail/linux-afs/2021-March/003567.html # v1
Link: http://lists.infradead.org/pipermail/linux-afs/2021-March/003573.html # v2
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/afs/dir.c      |    1 -
 fs/afs/file.c     |    1 -
 fs/afs/inode.c    |    1 -
 fs/afs/internal.h |    1 -
 fs/afs/mntpt.c    |    1 -
 fs/afs/xattr.c    |   23 -----------------------
 6 files changed, 28 deletions(-)

--- a/fs/afs/dir.c
+++ b/fs/afs/dir.c
@@ -69,7 +69,6 @@ const struct inode_operations afs_dir_in
 	.permission	= afs_permission,
 	.getattr	= afs_getattr,
 	.setattr	= afs_setattr,
-	.listxattr	= afs_listxattr,
 };
 
 const struct address_space_operations afs_dir_aops = {
--- a/fs/afs/file.c
+++ b/fs/afs/file.c
@@ -43,7 +43,6 @@ const struct inode_operations afs_file_i
 	.getattr	= afs_getattr,
 	.setattr	= afs_setattr,
 	.permission	= afs_permission,
-	.listxattr	= afs_listxattr,
 };
 
 const struct address_space_operations afs_fs_aops = {
--- a/fs/afs/inode.c
+++ b/fs/afs/inode.c
@@ -27,7 +27,6 @@
 
 static const struct inode_operations afs_symlink_inode_operations = {
 	.get_link	= page_get_link,
-	.listxattr	= afs_listxattr,
 };
 
 static noinline void dump_vnode(struct afs_vnode *vnode, struct afs_vnode *parent_vnode)
--- a/fs/afs/internal.h
+++ b/fs/afs/internal.h
@@ -1508,7 +1508,6 @@ extern int afs_launder_page(struct page
  * xattr.c
  */
 extern const struct xattr_handler *afs_xattr_handlers[];
-extern ssize_t afs_listxattr(struct dentry *, char *, size_t);
 
 /*
  * yfsclient.c
--- a/fs/afs/mntpt.c
+++ b/fs/afs/mntpt.c
@@ -32,7 +32,6 @@ const struct inode_operations afs_mntpt_
 	.lookup		= afs_mntpt_lookup,
 	.readlink	= page_readlink,
 	.getattr	= afs_getattr,
-	.listxattr	= afs_listxattr,
 };
 
 const struct inode_operations afs_autocell_inode_operations = {
--- a/fs/afs/xattr.c
+++ b/fs/afs/xattr.c
@@ -11,29 +11,6 @@
 #include <linux/xattr.h>
 #include "internal.h"
 
-static const char afs_xattr_list[] =
-	"afs.acl\0"
-	"afs.cell\0"
-	"afs.fid\0"
-	"afs.volume\0"
-	"afs.yfs.acl\0"
-	"afs.yfs.acl_inherited\0"
-	"afs.yfs.acl_num_cleaned\0"
-	"afs.yfs.vol_acl";
-
-/*
- * Retrieve a list of the supported xattrs.
- */
-ssize_t afs_listxattr(struct dentry *dentry, char *buffer, size_t size)
-{
-	if (size == 0)
-		return sizeof(afs_xattr_list);
-	if (size < sizeof(afs_xattr_list))
-		return -ERANGE;
-	memcpy(buffer, afs_xattr_list, sizeof(afs_xattr_list));
-	return sizeof(afs_xattr_list);
-}
-
 /*
  * Deal with the result of a successful fetch ACL operation.
  */



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 040/120] ALSA: usb-audio: Fix unintentional sign extension issue
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (38 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 039/120] afs: Stop listxattr() from listing "afs.*" attributes Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 041/120] nvme: fix Write Zeroes limitations Greg Kroah-Hartman
                   ` (82 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Colin Ian King, Takashi Iwai

From: Colin Ian King <colin.king@canonical.com>

commit 50b1affc891cbc103a2334ce909a026e25f4c84d upstream.

The shifting of the u8 integer device by 24 bits to the left will
be promoted to a 32 bit signed int and then sign-extended to a
64 bit unsigned long. In the event that the top bit of device is
set then all then all the upper 32 bits of the unsigned long will
end up as also being set because of the sign-extension. Fix this
by casting device to an unsigned long before the shift.

Addresses-Coverity: ("Unintended sign extension")
Fixes: a07df82c7990 ("ALSA: usb-audio: Add DJM750 to Pioneer mixer quirk")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Link: https://lore.kernel.org/r/20210318132008.15266-1-colin.king@canonical.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/usb/mixer_quirks.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/sound/usb/mixer_quirks.c
+++ b/sound/usb/mixer_quirks.c
@@ -2883,7 +2883,7 @@ static int snd_djm_controls_put(struct s
 	u8 group = (private_value & SND_DJM_GROUP_MASK) >> SND_DJM_GROUP_SHIFT;
 	u16 value = elem->value.enumerated.item[0];
 
-	kctl->private_value = ((device << SND_DJM_DEVICE_SHIFT) |
+	kctl->private_value = (((unsigned long)device << SND_DJM_DEVICE_SHIFT) |
 			      (group << SND_DJM_GROUP_SHIFT) |
 			      value);
 
@@ -2921,7 +2921,7 @@ static int snd_djm_controls_create(struc
 		value = device->controls[i].default_value;
 		knew.name = device->controls[i].name;
 		knew.private_value = (
-			(device_idx << SND_DJM_DEVICE_SHIFT) |
+			((unsigned long)device_idx << SND_DJM_DEVICE_SHIFT) |
 			(i << SND_DJM_GROUP_SHIFT) |
 			value);
 		err = snd_djm_controls_update(mixer, device_idx, i, value);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 041/120] nvme: fix Write Zeroes limitations
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (39 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 040/120] ALSA: usb-audio: Fix unintentional sign extension issue Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 042/120] nvme-tcp: fix misuse of __smp_processor_id with preemption enabled Greg Kroah-Hartman
                   ` (81 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Christoph Hellwig, Keith Busch,
	Klaus Jensen, Chaitanya Kulkarni, Himanshu Madhani

From: Christoph Hellwig <hch@lst.de>

commit b94e8cd2e6a94fc7563529ddc82726a7e77e04de upstream.

We voluntarily limit the Write Zeroes sizes to the MDTS value provided by
the hardware, but currently get the units wrong, so fix that.

Fixes: 6e02318eaea5 ("nvme: add support for the Write Zeroes command")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Tested-by: Klaus Jensen <k.jensen@samsung.com>
Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/nvme/host/core.c |   38 +++++++++++++-------------------------
 1 file changed, 13 insertions(+), 25 deletions(-)

--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1948,30 +1948,18 @@ static void nvme_config_discard(struct g
 		blk_queue_max_write_zeroes_sectors(queue, UINT_MAX);
 }
 
-static void nvme_config_write_zeroes(struct gendisk *disk, struct nvme_ns *ns)
-{
-	u64 max_blocks;
-
-	if (!(ns->ctrl->oncs & NVME_CTRL_ONCS_WRITE_ZEROES) ||
-	    (ns->ctrl->quirks & NVME_QUIRK_DISABLE_WRITE_ZEROES))
-		return;
-	/*
-	 * Even though NVMe spec explicitly states that MDTS is not
-	 * applicable to the write-zeroes:- "The restriction does not apply to
-	 * commands that do not transfer data between the host and the
-	 * controller (e.g., Write Uncorrectable ro Write Zeroes command).".
-	 * In order to be more cautious use controller's max_hw_sectors value
-	 * to configure the maximum sectors for the write-zeroes which is
-	 * configured based on the controller's MDTS field in the
-	 * nvme_init_identify() if available.
-	 */
-	if (ns->ctrl->max_hw_sectors == UINT_MAX)
-		max_blocks = (u64)USHRT_MAX + 1;
-	else
-		max_blocks = ns->ctrl->max_hw_sectors + 1;
-
-	blk_queue_max_write_zeroes_sectors(disk->queue,
-					   nvme_lba_to_sect(ns, max_blocks));
+/*
+ * Even though NVMe spec explicitly states that MDTS is not applicable to the
+ * write-zeroes, we are cautious and limit the size to the controllers
+ * max_hw_sectors value, which is based on the MDTS field and possibly other
+ * limiting factors.
+ */
+static void nvme_config_write_zeroes(struct request_queue *q,
+		struct nvme_ctrl *ctrl)
+{
+	if ((ctrl->oncs & NVME_CTRL_ONCS_WRITE_ZEROES) &&
+	    !(ctrl->quirks & NVME_QUIRK_DISABLE_WRITE_ZEROES))
+		blk_queue_max_write_zeroes_sectors(q, ctrl->max_hw_sectors);
 }
 
 static bool nvme_ns_ids_valid(struct nvme_ns_ids *ids)
@@ -2143,7 +2131,7 @@ static void nvme_update_disk_info(struct
 	set_capacity_and_notify(disk, capacity);
 
 	nvme_config_discard(disk, ns);
-	nvme_config_write_zeroes(disk, ns);
+	nvme_config_write_zeroes(disk->queue, ns->ctrl);
 
 	if ((id->nsattr & NVME_NS_ATTR_RO) ||
 	    test_bit(NVME_NS_FORCE_RO, &ns->flags))



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 042/120] nvme-tcp: fix misuse of __smp_processor_id with preemption enabled
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (40 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 041/120] nvme: fix Write Zeroes limitations Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 043/120] nvme-tcp: fix possible hang when failing to set io queues Greg Kroah-Hartman
                   ` (80 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Sagi Grimberg, Chaitanya Kulkarni,
	Yi Zhang, Christoph Hellwig

From: Sagi Grimberg <sagi@grimberg.me>

commit bb83337058a7000644cdeffc67361d2473534756 upstream.

For our pure advisory use-case, we only rely on this call as a hint, so
fix the warning complaints of using the smp_processor_id variants with
preemption enabled.

Fixes: db5ad6b7f8cd ("nvme-tcp: try to send request in queue_rq context")
Fixes: ada831772188 ("nvme-tcp: Fix warning with CONFIG_DEBUG_PREEMPT")
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Tested-by: Yi Zhang <yi.zhang@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/nvme/host/tcp.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/nvme/host/tcp.c
+++ b/drivers/nvme/host/tcp.c
@@ -287,7 +287,7 @@ static inline void nvme_tcp_queue_reques
 	 * directly, otherwise queue io_work. Also, only do that if we
 	 * are on the same cpu, so we don't introduce contention.
 	 */
-	if (queue->io_cpu == __smp_processor_id() &&
+	if (queue->io_cpu == raw_smp_processor_id() &&
 	    sync && empty && mutex_trylock(&queue->send_mutex)) {
 		queue->more_requests = !last;
 		nvme_tcp_send_all(queue);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 043/120] nvme-tcp: fix possible hang when failing to set io queues
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (41 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 042/120] nvme-tcp: fix misuse of __smp_processor_id with preemption enabled Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 044/120] nvme-tcp: fix a NULL deref when receiving a 0-length r2t PDU Greg Kroah-Hartman
                   ` (79 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Sagi Grimberg, Christoph Hellwig

From: Sagi Grimberg <sagi@grimberg.me>

commit 72f572428b83d0bc7028e7c4326d1a5f45205e44 upstream.

We only setup io queues for nvme controllers, and it makes absolutely no
sense to allow a controller (re)connect without any I/O queues.  If we
happen to fail setting the queue count for any reason, we should not
allow this to be a successful reconnect as I/O has no chance in going
through. Instead just fail and schedule another reconnect.

Fixes: 3f2304f8c6d6 ("nvme-tcp: add NVMe over TCP host driver")
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/nvme/host/tcp.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- a/drivers/nvme/host/tcp.c
+++ b/drivers/nvme/host/tcp.c
@@ -1748,8 +1748,11 @@ static int nvme_tcp_alloc_io_queues(stru
 		return ret;
 
 	ctrl->queue_count = nr_io_queues + 1;
-	if (ctrl->queue_count < 2)
-		return 0;
+	if (ctrl->queue_count < 2) {
+		dev_err(ctrl->device,
+			"unable to set any I/O queues\n");
+		return -ENOMEM;
+	}
 
 	dev_info(ctrl->device,
 		"creating %d I/O queues.\n", nr_io_queues);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 044/120] nvme-tcp: fix a NULL deref when receiving a 0-length r2t PDU
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (42 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 043/120] nvme-tcp: fix possible hang when failing to set io queues Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 045/120] nvmet: dont check iosqes,iocqes for discovery controllers Greg Kroah-Hartman
                   ` (78 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Belanger, Martin, Sagi Grimberg,
	Christoph Hellwig

From: Sagi Grimberg <sagi@grimberg.me>

commit fd0823f405090f9f410fc3e3ff7efb52e7b486fa upstream.

When the controller sends us a 0-length r2t PDU we should not attempt to
try to set up a h2cdata PDU but rather conclude that this is a buggy
controller (forward progress is not possible) and simply fail it
immediately.

Fixes: 3f2304f8c6d6 ("nvme-tcp: add NVMe over TCP host driver")
Reported-by: Belanger, Martin <Martin.Belanger@dell.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/nvme/host/tcp.c |    7 +++++++
 1 file changed, 7 insertions(+)

--- a/drivers/nvme/host/tcp.c
+++ b/drivers/nvme/host/tcp.c
@@ -568,6 +568,13 @@ static int nvme_tcp_setup_h2c_data_pdu(s
 	req->pdu_len = le32_to_cpu(pdu->r2t_length);
 	req->pdu_sent = 0;
 
+	if (unlikely(!req->pdu_len)) {
+		dev_err(queue->ctrl->ctrl.device,
+			"req %d r2t len is %u, probably a bug...\n",
+			rq->tag, req->pdu_len);
+		return -EPROTO;
+	}
+
 	if (unlikely(req->data_sent + req->pdu_len > req->data_len)) {
 		dev_err(queue->ctrl->ctrl.device,
 			"req %d r2t len %u exceeded data len %u (%zu sent)\n",



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 045/120] nvmet: dont check iosqes,iocqes for discovery controllers
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (43 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 044/120] nvme-tcp: fix a NULL deref when receiving a 0-length r2t PDU Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 046/120] nfsd: Dont keep looking up unhashed files in the nfsd file cache Greg Kroah-Hartman
                   ` (77 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Belanger, Martin, Sagi Grimberg,
	Chaitanya Kulkarni, Christoph Hellwig

From: Sagi Grimberg <sagi@grimberg.me>

commit d218a8a3003e84ab136e69a4e30dd4ec7dab2d22 upstream.

>From the base spec, Figure 78:

  "Controller Configuration, these fields are defined as parameters to
   configure an "I/O Controller (IOC)" and not to configure a "Discovery
   Controller (DC).

   ...
   If the controller does not support I/O queues, then this field shall
   be read-only with a value of 0h

Just perform this check for I/O controllers.

Fixes: a07b4970f464 ("nvmet: add a generic NVMe target")
Reported-by: Belanger, Martin <Martin.Belanger@dell.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/nvme/target/core.c |   17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -1107,9 +1107,20 @@ static void nvmet_start_ctrl(struct nvme
 {
 	lockdep_assert_held(&ctrl->lock);
 
-	if (nvmet_cc_iosqes(ctrl->cc) != NVME_NVM_IOSQES ||
-	    nvmet_cc_iocqes(ctrl->cc) != NVME_NVM_IOCQES ||
-	    nvmet_cc_mps(ctrl->cc) != 0 ||
+	/*
+	 * Only I/O controllers should verify iosqes,iocqes.
+	 * Strictly speaking, the spec says a discovery controller
+	 * should verify iosqes,iocqes are zeroed, however that
+	 * would break backwards compatibility, so don't enforce it.
+	 */
+	if (ctrl->subsys->type != NVME_NQN_DISC &&
+	    (nvmet_cc_iosqes(ctrl->cc) != NVME_NVM_IOSQES ||
+	     nvmet_cc_iocqes(ctrl->cc) != NVME_NVM_IOCQES)) {
+		ctrl->csts = NVME_CSTS_CFS;
+		return;
+	}
+
+	if (nvmet_cc_mps(ctrl->cc) != 0 ||
 	    nvmet_cc_ams(ctrl->cc) != 0 ||
 	    nvmet_cc_css(ctrl->cc) != 0) {
 		ctrl->csts = NVME_CSTS_CFS;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 046/120] nfsd: Dont keep looking up unhashed files in the nfsd file cache
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (44 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 045/120] nvmet: dont check iosqes,iocqes for discovery controllers Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 047/120] nfsd: dont abort copies early Greg Kroah-Hartman
                   ` (76 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Trond Myklebust, Chuck Lever

From: Trond Myklebust <trond.myklebust@hammerspace.com>

commit d30881f573e565ebb5dbb50b31ed6106b5c81328 upstream.

If a file is unhashed, then we're going to reject it anyway and retry,
so make sure we skip it when we're doing the RCU lockless lookup.
This avoids a number of unnecessary nfserr_jukebox returns from
nfsd_file_acquire()

Fixes: 65294c1f2c5e ("nfsd: add a new struct file caching facility to nfsd")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/nfsd/filecache.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/fs/nfsd/filecache.c
+++ b/fs/nfsd/filecache.c
@@ -898,6 +898,8 @@ nfsd_file_find_locked(struct inode *inod
 			continue;
 		if (!nfsd_match_cred(nf->nf_cred, current_cred()))
 			continue;
+		if (!test_bit(NFSD_FILE_HASHED, &nf->nf_flags))
+			continue;
 		if (nfsd_file_get(nf) != NULL)
 			return nf;
 	}



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 047/120] nfsd: dont abort copies early
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (45 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 046/120] nfsd: Dont keep looking up unhashed files in the nfsd file cache Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 048/120] NFSD: Repair misuse of sv_lock in 5.10.16-rt30 Greg Kroah-Hartman
                   ` (75 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, J. Bruce Fields, Chuck Lever

From: J. Bruce Fields <bfields@redhat.com>

commit bfdd89f232aa2de5a4b3fc985cba894148b830a8 upstream.

The typical result of the backwards comparison here is that the source
server in a server-to-server copy will return BAD_STATEID within a few
seconds of the copy starting, instead of giving the copy a full lease
period, so the copy_file_range() call will end up unnecessarily
returning a short read.

Fixes: 624322f1adc5 "NFSD add COPY_NOTIFY operation"
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/nfsd/nfs4state.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -5372,7 +5372,7 @@ nfs4_laundromat(struct nfsd_net *nn)
 	idr_for_each_entry(&nn->s2s_cp_stateids, cps_t, i) {
 		cps = container_of(cps_t, struct nfs4_cpntf_state, cp_stateid);
 		if (cps->cp_stateid.sc_type == NFS4_COPYNOTIFY_STID &&
-				cps->cpntf_time > cutoff)
+				cps->cpntf_time < cutoff)
 			_free_cpntf_state_locked(nn, cps);
 	}
 	spin_unlock(&nn->s2s_cp_lock);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 048/120] NFSD: Repair misuse of sv_lock in 5.10.16-rt30.
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (46 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 047/120] nfsd: dont abort copies early Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 049/120] NFSD: fix dest to src mount in inter-server COPY Greg Kroah-Hartman
                   ` (74 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Joe Korty, Chuck Lever

From: Joe Korty <joe.korty@concurrent-rt.com>

commit c7de87ff9dac5f396f62d584f3908f80ddc0e07b upstream.

[ This problem is in mainline, but only rt has the chops to be
able to detect it. ]

Lockdep reports a circular lock dependency between serv->sv_lock and
softirq_ctl.lock on system shutdown, when using a kernel built with
CONFIG_PREEMPT_RT=y, and a nfs mount exists.

This is due to the definition of spin_lock_bh on rt:

	local_bh_disable();
	rt_spin_lock(lock);

which forces a softirq_ctl.lock -> serv->sv_lock dependency.  This is
not a problem as long as _every_ lock of serv->sv_lock is a:

	spin_lock_bh(&serv->sv_lock);

but there is one of the form:

	spin_lock(&serv->sv_lock);

This is what is causing the circular dependency splat.  The spin_lock()
grabs the lock without first grabbing softirq_ctl.lock via local_bh_disable.
If later on in the critical region,  someone does a local_bh_disable, we
get a serv->sv_lock -> softirq_ctrl.lock dependency established.  Deadlock.

Fix is to make serv->sv_lock be locked with spin_lock_bh everywhere, no
exceptions.

[  OK  ] Stopped target NFS client services.
         Stopping Logout off all iSCSI sessions on shutdown...
         Stopping NFS server and services...
[  109.442380]
[  109.442385] ======================================================
[  109.442386] WARNING: possible circular locking dependency detected
[  109.442387] 5.10.16-rt30 #1 Not tainted
[  109.442389] ------------------------------------------------------
[  109.442390] nfsd/1032 is trying to acquire lock:
[  109.442392] ffff994237617f60 ((softirq_ctrl.lock).lock){+.+.}-{2:2}, at: __local_bh_disable_ip+0xd9/0x270
[  109.442405]
[  109.442405] but task is already holding lock:
[  109.442406] ffff994245cb00b0 (&serv->sv_lock){+.+.}-{0:0}, at: svc_close_list+0x1f/0x90
[  109.442415]
[  109.442415] which lock already depends on the new lock.
[  109.442415]
[  109.442416]
[  109.442416] the existing dependency chain (in reverse order) is:
[  109.442417]
[  109.442417] -> #1 (&serv->sv_lock){+.+.}-{0:0}:
[  109.442421]        rt_spin_lock+0x2b/0xc0
[  109.442428]        svc_add_new_perm_xprt+0x42/0xa0
[  109.442430]        svc_addsock+0x135/0x220
[  109.442434]        write_ports+0x4b3/0x620
[  109.442438]        nfsctl_transaction_write+0x45/0x80
[  109.442440]        vfs_write+0xff/0x420
[  109.442444]        ksys_write+0x4f/0xc0
[  109.442446]        do_syscall_64+0x33/0x40
[  109.442450]        entry_SYSCALL_64_after_hwframe+0x44/0xa9
[  109.442454]
[  109.442454] -> #0 ((softirq_ctrl.lock).lock){+.+.}-{2:2}:
[  109.442457]        __lock_acquire+0x1264/0x20b0
[  109.442463]        lock_acquire+0xc2/0x400
[  109.442466]        rt_spin_lock+0x2b/0xc0
[  109.442469]        __local_bh_disable_ip+0xd9/0x270
[  109.442471]        svc_xprt_do_enqueue+0xc0/0x4d0
[  109.442474]        svc_close_list+0x60/0x90
[  109.442476]        svc_close_net+0x49/0x1a0
[  109.442478]        svc_shutdown_net+0x12/0x40
[  109.442480]        nfsd_destroy+0xc5/0x180
[  109.442482]        nfsd+0x1bc/0x270
[  109.442483]        kthread+0x194/0x1b0
[  109.442487]        ret_from_fork+0x22/0x30
[  109.442492]
[  109.442492] other info that might help us debug this:
[  109.442492]
[  109.442493]  Possible unsafe locking scenario:
[  109.442493]
[  109.442493]        CPU0                    CPU1
[  109.442494]        ----                    ----
[  109.442495]   lock(&serv->sv_lock);
[  109.442496]                                lock((softirq_ctrl.lock).lock);
[  109.442498]                                lock(&serv->sv_lock);
[  109.442499]   lock((softirq_ctrl.lock).lock);
[  109.442501]
[  109.442501]  *** DEADLOCK ***
[  109.442501]
[  109.442501] 3 locks held by nfsd/1032:
[  109.442503]  #0: ffffffff93b49258 (nfsd_mutex){+.+.}-{3:3}, at: nfsd+0x19a/0x270
[  109.442508]  #1: ffff994245cb00b0 (&serv->sv_lock){+.+.}-{0:0}, at: svc_close_list+0x1f/0x90
[  109.442512]  #2: ffffffff93a81b20 (rcu_read_lock){....}-{1:2}, at: rt_spin_lock+0x5/0xc0
[  109.442518]
[  109.442518] stack backtrace:
[  109.442519] CPU: 0 PID: 1032 Comm: nfsd Not tainted 5.10.16-rt30 #1
[  109.442522] Hardware name: Supermicro X9DRL-3F/iF/X9DRL-3F/iF, BIOS 3.2 09/22/2015
[  109.442524] Call Trace:
[  109.442527]  dump_stack+0x77/0x97
[  109.442533]  check_noncircular+0xdc/0xf0
[  109.442546]  __lock_acquire+0x1264/0x20b0
[  109.442553]  lock_acquire+0xc2/0x400
[  109.442564]  rt_spin_lock+0x2b/0xc0
[  109.442570]  __local_bh_disable_ip+0xd9/0x270
[  109.442573]  svc_xprt_do_enqueue+0xc0/0x4d0
[  109.442577]  svc_close_list+0x60/0x90
[  109.442581]  svc_close_net+0x49/0x1a0
[  109.442585]  svc_shutdown_net+0x12/0x40
[  109.442588]  nfsd_destroy+0xc5/0x180
[  109.442590]  nfsd+0x1bc/0x270
[  109.442595]  kthread+0x194/0x1b0
[  109.442600]  ret_from_fork+0x22/0x30
[  109.518225] nfsd: last server has exited, flushing export cache
[  OK  ] Stopped NFSv4 ID-name mapping service.
[  OK  ] Stopped GSSAPI Proxy Daemon.
[  OK  ] Stopped NFS Mount Daemon.
[  OK  ] Stopped NFS status monitor for NFSv2/3 locking..

Fixes: 719f8bcc883e ("svcrpc: fix xpt_list traversal locking on shutdown")
Signed-off-by: Joe Korty <joe.korty@concurrent-rt.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/sunrpc/svc_xprt.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/net/sunrpc/svc_xprt.c
+++ b/net/sunrpc/svc_xprt.c
@@ -1060,7 +1060,7 @@ static int svc_close_list(struct svc_ser
 	struct svc_xprt *xprt;
 	int ret = 0;
 
-	spin_lock(&serv->sv_lock);
+	spin_lock_bh(&serv->sv_lock);
 	list_for_each_entry(xprt, xprt_list, xpt_list) {
 		if (xprt->xpt_net != net)
 			continue;
@@ -1068,7 +1068,7 @@ static int svc_close_list(struct svc_ser
 		set_bit(XPT_CLOSE, &xprt->xpt_flags);
 		svc_xprt_enqueue(xprt);
 	}
-	spin_unlock(&serv->sv_lock);
+	spin_unlock_bh(&serv->sv_lock);
 	return ret;
 }
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 049/120] NFSD: fix dest to src mount in inter-server COPY
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (47 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 048/120] NFSD: Repair misuse of sv_lock in 5.10.16-rt30 Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 050/120] svcrdma: disable timeouts on rdma backchannel Greg Kroah-Hartman
                   ` (73 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Olga Kornievskaia, Chuck Lever, Dai Ngo

From: Olga Kornievskaia <kolga@netapp.com>

commit 614c9750173e412663728215152cc6d12bcb3425 upstream.

A cleanup of the inter SSC copy needs to call fput() of the source
file handle to make sure that file structure is freed as well as
drop the reference on the superblock to unmount the source server.

Fixes: 36e1e5ba90fb ("NFSD: Fix use-after-free warning when doing inter-server copy")
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Dai Ngo <dai.ngo@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/nfsd/nfs4proc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -1304,7 +1304,7 @@ nfsd4_cleanup_inter_ssc(struct vfsmount
 			struct nfsd_file *dst)
 {
 	nfs42_ssc_close(src->nf_file);
-	/* 'src' is freed by nfsd4_do_async_copy */
+	fput(src->nf_file);
 	nfsd_file_put(dst);
 	mntput(ss_mnt);
 }



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 050/120] svcrdma: disable timeouts on rdma backchannel
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (48 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 049/120] NFSD: fix dest to src mount in inter-server COPY Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 051/120] vfio: IOMMU_API should be selected Greg Kroah-Hartman
                   ` (72 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Timo Rothenpieler, Chuck Lever

From: Timo Rothenpieler <timo@rothenpieler.org>

commit 6820bf77864d5894ff67b5c00d7dba8f92011e3d upstream.

This brings it in line with the regular tcp backchannel, which also has
all those timeouts disabled.

Prevents the backchannel from timing out, getting some async operations
like server side copying getting stuck indefinitely on the client side.

Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
Fixes: 5d252f90a800 ("svcrdma: Add class for RDMA backwards direction transport")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/sunrpc/xprtrdma/svc_rdma_backchannel.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/net/sunrpc/xprtrdma/svc_rdma_backchannel.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_backchannel.c
@@ -252,9 +252,9 @@ xprt_setup_rdma_bc(struct xprt_create *a
 	xprt->timeout = &xprt_rdma_bc_timeout;
 	xprt_set_bound(xprt);
 	xprt_set_connected(xprt);
-	xprt->bind_timeout = RPCRDMA_BIND_TO;
-	xprt->reestablish_timeout = RPCRDMA_INIT_REEST_TO;
-	xprt->idle_timeout = RPCRDMA_IDLE_DISC_TO;
+	xprt->bind_timeout = 0;
+	xprt->reestablish_timeout = 0;
+	xprt->idle_timeout = 0;
 
 	xprt->prot = XPRT_TRANSPORT_BC_RDMA;
 	xprt->ops = &xprt_rdma_bc_procs;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 051/120] vfio: IOMMU_API should be selected
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (49 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 050/120] svcrdma: disable timeouts on rdma backchannel Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 052/120] vhost_vdpa: fix the missing irq_bypass_unregister_producer() invocation Greg Kroah-Hartman
                   ` (71 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jason Gunthorpe, Eric Auger, Alex Williamson

From: Jason Gunthorpe <jgg@nvidia.com>

commit 179209fa12709a3df8888c323b37315da2683c24 upstream.

As IOMMU_API is a kconfig without a description (eg does not show in the
menu) the correct operator is select not 'depends on'. Using 'depends on'
for this kind of symbol means VFIO is not selectable unless some other
random kconfig has already enabled IOMMU_API for it.

Fixes: cba3345cc494 ("vfio: VFIO core")
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Message-Id: <1-v1-df057e0f92c3+91-vfio_arm_compile_test_jgg@nvidia.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/vfio/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/vfio/Kconfig
+++ b/drivers/vfio/Kconfig
@@ -21,7 +21,7 @@ config VFIO_VIRQFD
 
 menuconfig VFIO
 	tristate "VFIO Non-Privileged userspace driver framework"
-	depends on IOMMU_API
+	select IOMMU_API
 	select VFIO_IOMMU_TYPE1 if (X86 || S390 || ARM || ARM64)
 	help
 	  VFIO provides a framework for secure userspace device drivers.



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 052/120] vhost_vdpa: fix the missing irq_bypass_unregister_producer() invocation
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (50 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 051/120] vfio: IOMMU_API should be selected Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 053/120] sunrpc: fix refcount leak for rpc auth modules Greg Kroah-Hartman
                   ` (70 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Gautam Dawar, Jason Wang, Michael S. Tsirkin

From: Gautam Dawar <gdawar.xilinx@gmail.com>

commit 4c050286bb202cffd5467c1cba982dff391d62e1 upstream.

When qemu with vhost-vdpa netdevice is run for the first time,
it works well. But after the VM is powered off, the next qemu run
causes kernel panic due to a NULL pointer dereference in
irq_bypass_register_producer().

When the VM is powered off, vhost_vdpa_clean_irq() misses on calling
irq_bypass_unregister_producer() for irq 0 because of the existing check.

This leaves stale producer nodes, which are reset in
vhost_vring_call_reset() when vhost_dev_init() is invoked during the
second qemu run.

As the node member of struct irq_bypass_producer is also initialized
to zero, traversal on the producers list causes crash due to NULL
pointer dereference.

Fixes: 2cf1ba9a4d15c ("vhost_vdpa: implement IRQ offloading in vhost_vdpa")
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=211711
Signed-off-by: Gautam Dawar <gdawar.xilinx@gmail.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Link: https://lore.kernel.org/r/20210224114845.104173-1-gdawar.xilinx@gmail.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/vhost/vdpa.c |    8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -906,14 +906,10 @@ err:
 
 static void vhost_vdpa_clean_irq(struct vhost_vdpa *v)
 {
-	struct vhost_virtqueue *vq;
 	int i;
 
-	for (i = 0; i < v->nvqs; i++) {
-		vq = &v->vqs[i];
-		if (vq->call_ctx.producer.irq)
-			irq_bypass_unregister_producer(&vq->call_ctx.producer);
-	}
+	for (i = 0; i < v->nvqs; i++)
+		vhost_vdpa_unsetup_vq_irq(v, i);
 }
 
 static int vhost_vdpa_release(struct inode *inode, struct file *filep)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 053/120] sunrpc: fix refcount leak for rpc auth modules
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (51 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 052/120] vhost_vdpa: fix the missing irq_bypass_unregister_producer() invocation Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 054/120] i915/perf: Start hrtimer only if sampling the OA buffer Greg Kroah-Hartman
                   ` (69 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Daniel Kobras, Chuck Lever

From: Daniel Kobras <kobras@puzzle-itc.de>

commit f1442d6349a2e7bb7a6134791bdc26cb776c79af upstream.

If an auth module's accept op returns SVC_CLOSE, svc_process_common()
enters a call path that does not call svc_authorise() before leaving the
function, and thus leaks a reference on the auth module's refcount. Hence,
make sure calls to svc_authenticate() and svc_authorise() are paired for
all call paths, to make sure rpc auth modules can be unloaded.

Signed-off-by: Daniel Kobras <kobras@puzzle-itc.de>
Fixes: 4d712ef1db05 ("svcauth_gss: Close connection when dropping an incoming message")
Link: https://lore.kernel.org/linux-nfs/3F1B347F-B809-478F-A1E9-0BE98E22B0F0@oracle.com/T/#t
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/sunrpc/svc.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/net/sunrpc/svc.c
+++ b/net/sunrpc/svc.c
@@ -1413,7 +1413,7 @@ svc_process_common(struct svc_rqst *rqst
 
  sendit:
 	if (svc_authorise(rqstp))
-		goto close;
+		goto close_xprt;
 	return 1;		/* Caller can now send it */
 
 release_dropit:
@@ -1425,6 +1425,8 @@ release_dropit:
 	return 0;
 
  close:
+	svc_authorise(rqstp);
+close_xprt:
 	if (rqstp->rq_xprt && test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags))
 		svc_close_xprt(rqstp->rq_xprt);
 	dprintk("svc: svc_process close\n");
@@ -1433,7 +1435,7 @@ release_dropit:
 err_short_len:
 	svc_printk(rqstp, "short len %zd, dropping request\n",
 			argv->iov_len);
-	goto close;
+	goto close_xprt;
 
 err_bad_rpc:
 	serv->sv_stats->rpcbadfmt++;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 054/120] i915/perf: Start hrtimer only if sampling the OA buffer
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (52 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 053/120] sunrpc: fix refcount leak for rpc auth modules Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 055/120] iommu/tegra-smmu: Make tegra_smmu_probe_device() to handle all IOMMU phandles Greg Kroah-Hartman
                   ` (68 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Umesh Nerlige Ramappa,
	Ashutosh Dixit, Lionel Landwerlin, Jani Nikula

From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

commit 6a77c6bb7260bd5000f95df454d9f8cdb1af7132 upstream.

SAMPLE_OA parameter enables sampling of OA buffer and results in a call
to init the OA buffer which initializes the OA unit head/tail pointers.
The OA_EXPONENT parameter controls the periodicity of the OA reports in
the OA buffer and results in starting a hrtimer.

Before gen12, all use cases required the use of the OA buffer and i915
enforced this setting when vetting out the parameters passed. In these
platforms the hrtimer was enabled if OA_EXPONENT was passed. This worked
fine since it was implied that SAMPLE_OA is always passed.

With gen12, this changed. Users can use perf without enabling the OA
buffer as in OAR use cases. While an OAR use case should ideally not
start the hrtimer, we see that passing an OA_EXPONENT parameter will
start the hrtimer even though SAMPLE_OA is not specified. This results
in an uninitialized OA buffer, so the head/tail pointers used to track
the buffer are zero.

This itself does not fail, but if we ran a use-case that SAMPLED the OA
buffer previously, then the OA_TAIL register is still pointing to an old
value. When the timer callback runs, it ends up calculating a
wrong/large number of available reports. Since we do a spinlock_irq_save
and start processing a large number of reports, NMI watchdog fires and
causes a crash.

Start the timer only if SAMPLE_OA is specified.

v2:
- Drop SAMPLE OA check when appending samples (Ashutosh)
- Prevent read if OA buffer is not being sampled

Fixes: 00a7f0d7155c ("drm/i915/tgl: Add perf support on TGL")
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210305210947.58751-1-umesh.nerlige.ramappa@intel.com
(cherry picked from commit be0bdd67fda9468156c733976688f6487d0c42f7)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/gpu/drm/i915/i915_perf.c |   13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

--- a/drivers/gpu/drm/i915/i915_perf.c
+++ b/drivers/gpu/drm/i915/i915_perf.c
@@ -600,7 +600,6 @@ static int append_oa_sample(struct i915_
 {
 	int report_size = stream->oa_buffer.format_size;
 	struct drm_i915_perf_record_header header;
-	u32 sample_flags = stream->sample_flags;
 
 	header.type = DRM_I915_PERF_RECORD_SAMPLE;
 	header.pad = 0;
@@ -614,10 +613,8 @@ static int append_oa_sample(struct i915_
 		return -EFAULT;
 	buf += sizeof(header);
 
-	if (sample_flags & SAMPLE_OA_REPORT) {
-		if (copy_to_user(buf, report, report_size))
-			return -EFAULT;
-	}
+	if (copy_to_user(buf, report, report_size))
+		return -EFAULT;
 
 	(*offset) += header.size;
 
@@ -2678,7 +2675,7 @@ static void i915_oa_stream_enable(struct
 
 	stream->perf->ops.oa_enable(stream);
 
-	if (stream->periodic)
+	if (stream->sample_flags & SAMPLE_OA_REPORT)
 		hrtimer_start(&stream->poll_check_timer,
 			      ns_to_ktime(stream->poll_oa_period),
 			      HRTIMER_MODE_REL_PINNED);
@@ -2741,7 +2738,7 @@ static void i915_oa_stream_disable(struc
 {
 	stream->perf->ops.oa_disable(stream);
 
-	if (stream->periodic)
+	if (stream->sample_flags & SAMPLE_OA_REPORT)
 		hrtimer_cancel(&stream->poll_check_timer);
 }
 
@@ -3024,7 +3021,7 @@ static ssize_t i915_perf_read(struct fil
 	 * disabled stream as an error. In particular it might otherwise lead
 	 * to a deadlock for blocking file descriptors...
 	 */
-	if (!stream->enabled)
+	if (!stream->enabled || !(stream->sample_flags & SAMPLE_OA_REPORT))
 		return -EIO;
 
 	if (!(file->f_flags & O_NONBLOCK)) {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 055/120] iommu/tegra-smmu: Make tegra_smmu_probe_device() to handle all IOMMU phandles
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (53 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 054/120] i915/perf: Start hrtimer only if sampling the OA buffer Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 056/120] pstore: Fix warning in pstore_kill_sb() Greg Kroah-Hartman
                   ` (67 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dmitry Osipenko, Nicolin Chen, Joerg Roedel

From: Dmitry Osipenko <digetx@gmail.com>

commit 8dfd0fa6ecdc5e2099a57d485b7ce237abc6c7a0 upstream.

The tegra_smmu_probe_device() handles only the first IOMMU device-tree
phandle, skipping the rest. Devices like 3D module on Tegra30 have
multiple IOMMU phandles, one for each h/w block, and thus, only one
IOMMU phandle is added to fwspec for the 3D module, breaking GPU.
Previously this problem was masked by tegra_smmu_attach_dev() which
didn't use the fwspec, but parsed the DT by itself. The previous commit
to tegra-smmu driver partially reverted changes that caused problems for
T124 and now we have tegra_smmu_attach_dev() that uses the fwspec and
the old-buggy variant of tegra_smmu_probe_device() which skips secondary
IOMMUs.

Make tegra_smmu_probe_device() not to skip the secondary IOMMUs. This
fixes a partially attached IOMMU of the 3D module on Tegra30 and now GPU
works properly once again.

Fixes: 765a9d1d02b2 ("iommu/tegra-smmu: Fix mc errors on tegra124-nyan")
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Tested-by: Nicolin Chen <nicoleotsuka@gmail.com>
Link: https://lore.kernel.org/r/20210312155439.18477-1-digetx@gmail.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iommu/tegra-smmu.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

--- a/drivers/iommu/tegra-smmu.c
+++ b/drivers/iommu/tegra-smmu.c
@@ -849,12 +849,11 @@ static struct iommu_device *tegra_smmu_p
 		smmu = tegra_smmu_find(args.np);
 		if (smmu) {
 			err = tegra_smmu_configure(smmu, dev, &args);
-			of_node_put(args.np);
 
-			if (err < 0)
+			if (err < 0) {
+				of_node_put(args.np);
 				return ERR_PTR(err);
-
-			break;
+			}
 		}
 
 		of_node_put(args.np);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 056/120] pstore: Fix warning in pstore_kill_sb()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (54 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 055/120] iommu/tegra-smmu: Make tegra_smmu_probe_device() to handle all IOMMU phandles Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 057/120] io_uring: ensure that SQPOLL thread is started for exit Greg Kroah-Hartman
                   ` (66 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, syzbot, Tetsuo Handa, Kees Cook

From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>

commit 9c7d83ae6ba67d6c6199cce24573983db3b56332 upstream.

syzbot is hitting WARN_ON(pstore_sb != sb) at pstore_kill_sb() [1], for the
assumption that pstore_sb != NULL is wrong because pstore_fill_super() will
not assign pstore_sb = sb when new_inode() for d_make_root() returned NULL
(due to memory allocation fault injection).

Since mount_single() calls pstore_kill_sb() when pstore_fill_super()
failed, pstore_kill_sb() needs to be aware of such failure path.

[1] https://syzkaller.appspot.com/bug?id=6abacb8da5137cb47a416f2bef95719ed60508a0

Reported-by: syzbot <syzbot+d0cf0ad6513e9a1da5df@syzkaller.appspotmail.com>
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20210214031307.57903-1-penguin-kernel@I-love.SAKURA.ne.jp
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/pstore/inode.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/pstore/inode.c
+++ b/fs/pstore/inode.c
@@ -467,7 +467,7 @@ static struct dentry *pstore_mount(struc
 static void pstore_kill_sb(struct super_block *sb)
 {
 	mutex_lock(&pstore_sb_lock);
-	WARN_ON(pstore_sb != sb);
+	WARN_ON(pstore_sb && pstore_sb != sb);
 
 	kill_litter_super(sb);
 	pstore_sb = NULL;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 057/120] io_uring: ensure that SQPOLL thread is started for exit
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (55 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 056/120] pstore: Fix warning in pstore_kill_sb() Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 058/120] net/qrtr: fix __netdev_alloc_skb call Greg Kroah-Hartman
                   ` (65 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+fb5458330b4442f2090d, Jens Axboe

From: Jens Axboe <axboe@kernel.dk>

commit 3ebba796fa251d042be42b929a2d916ee5c34a49 upstream.

If we create it in a disabled state because IORING_SETUP_R_DISABLED is
set on ring creation, we need to ensure that we've kicked the thread if
we're exiting before it's been explicitly disabled. Otherwise we can run
into a deadlock where exit is waiting go park the SQPOLL thread, but the
SQPOLL thread itself is waiting to get a signal to start.

That results in the below trace of both tasks hung, waiting on each other:

INFO: task syz-executor458:8401 blocked for more than 143 seconds.
      Not tainted 5.11.0-next-20210226-syzkaller #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:syz-executor458 state:D stack:27536 pid: 8401 ppid:  8400 flags:0x00004004
Call Trace:
 context_switch kernel/sched/core.c:4324 [inline]
 __schedule+0x90c/0x21a0 kernel/sched/core.c:5075
 schedule+0xcf/0x270 kernel/sched/core.c:5154
 schedule_timeout+0x1db/0x250 kernel/time/timer.c:1868
 do_wait_for_common kernel/sched/completion.c:85 [inline]
 __wait_for_common kernel/sched/completion.c:106 [inline]
 wait_for_common kernel/sched/completion.c:117 [inline]
 wait_for_completion+0x168/0x270 kernel/sched/completion.c:138
 io_sq_thread_park fs/io_uring.c:7115 [inline]
 io_sq_thread_park+0xd5/0x130 fs/io_uring.c:7103
 io_uring_cancel_task_requests+0x24c/0xd90 fs/io_uring.c:8745
 __io_uring_files_cancel+0x110/0x230 fs/io_uring.c:8840
 io_uring_files_cancel include/linux/io_uring.h:47 [inline]
 do_exit+0x299/0x2a60 kernel/exit.c:780
 do_group_exit+0x125/0x310 kernel/exit.c:922
 __do_sys_exit_group kernel/exit.c:933 [inline]
 __se_sys_exit_group kernel/exit.c:931 [inline]
 __x64_sys_exit_group+0x3a/0x50 kernel/exit.c:931
 do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
 entry_SYSCALL_64_after_hwframe+0x44/0xae
RIP: 0033:0x43e899
RSP: 002b:00007ffe89376d48 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
RAX: ffffffffffffffda RBX: 00000000004af2f0 RCX: 000000000043e899
RDX: 000000000000003c RSI: 00000000000000e7 RDI: 0000000000000000
RBP: 0000000000000000 R08: ffffffffffffffc0 R09: 0000000010000000
R10: 0000000000008011 R11: 0000000000000246 R12: 00000000004af2f0
R13: 0000000000000001 R14: 0000000000000000 R15: 0000000000000001
INFO: task iou-sqp-8401:8402 can't die for more than 143 seconds.
task:iou-sqp-8401    state:D stack:30272 pid: 8402 ppid:  8400 flags:0x00004004
Call Trace:
 context_switch kernel/sched/core.c:4324 [inline]
 __schedule+0x90c/0x21a0 kernel/sched/core.c:5075
 schedule+0xcf/0x270 kernel/sched/core.c:5154
 schedule_timeout+0x1db/0x250 kernel/time/timer.c:1868
 do_wait_for_common kernel/sched/completion.c:85 [inline]
 __wait_for_common kernel/sched/completion.c:106 [inline]
 wait_for_common kernel/sched/completion.c:117 [inline]
 wait_for_completion+0x168/0x270 kernel/sched/completion.c:138
 io_sq_thread+0x27d/0x1ae0 fs/io_uring.c:6717
 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:294
INFO: task iou-sqp-8401:8402 blocked for more than 143 seconds.

Reported-by: syzbot+fb5458330b4442f2090d@syzkaller.appspotmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/io_uring.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -2221,6 +2221,7 @@ static void __io_req_task_submit(struct
 		__io_req_task_cancel(req, -EFAULT);
 	mutex_unlock(&ctx->uring_lock);
 
+	ctx->flags &= ~IORING_SETUP_R_DISABLED;
 	if (ctx->flags & IORING_SETUP_SQPOLL)
 		io_sq_thread_drop_mm_files();
 }
@@ -8965,6 +8966,8 @@ static void io_disable_sqo_submit(struct
 {
 	mutex_lock(&ctx->uring_lock);
 	ctx->sqo_dead = 1;
+	if (ctx->flags & IORING_SETUP_R_DISABLED)
+		io_sq_offload_start(ctx);
 	mutex_unlock(&ctx->uring_lock);
 
 	/* make sure callers enter the ring to get error */
@@ -9980,10 +9983,7 @@ static int io_register_enable_rings(stru
 	if (ctx->restrictions.registered)
 		ctx->restricted = 1;
 
-	ctx->flags &= ~IORING_SETUP_R_DISABLED;
-
 	io_sq_offload_start(ctx);
-
 	return 0;
 }
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 058/120] net/qrtr: fix __netdev_alloc_skb call
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (56 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 057/120] io_uring: ensure that SQPOLL thread is started for exit Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 059/120] kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again Greg Kroah-Hartman
                   ` (64 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+80dccaee7c6630fa9dcf,
	Pavel Skripkin, Alexander Lobakin, David S. Miller

From: Pavel Skripkin <paskripkin@gmail.com>

commit 093b036aa94e01a0bea31a38d7f0ee28a2749023 upstream.

syzbot found WARNING in __alloc_pages_nodemask()[1] when order >= MAX_ORDER.
It was caused by a huge length value passed from userspace to qrtr_tun_write_iter(),
which tries to allocate skb. Since the value comes from the untrusted source
there is no need to raise a warning in __alloc_pages_nodemask().

[1] WARNING in __alloc_pages_nodemask+0x5f8/0x730 mm/page_alloc.c:5014
Call Trace:
 __alloc_pages include/linux/gfp.h:511 [inline]
 __alloc_pages_node include/linux/gfp.h:524 [inline]
 alloc_pages_node include/linux/gfp.h:538 [inline]
 kmalloc_large_node+0x60/0x110 mm/slub.c:3999
 __kmalloc_node_track_caller+0x319/0x3f0 mm/slub.c:4496
 __kmalloc_reserve net/core/skbuff.c:150 [inline]
 __alloc_skb+0x4e4/0x5a0 net/core/skbuff.c:210
 __netdev_alloc_skb+0x70/0x400 net/core/skbuff.c:446
 netdev_alloc_skb include/linux/skbuff.h:2832 [inline]
 qrtr_endpoint_post+0x84/0x11b0 net/qrtr/qrtr.c:442
 qrtr_tun_write_iter+0x11f/0x1a0 net/qrtr/tun.c:98
 call_write_iter include/linux/fs.h:1901 [inline]
 new_sync_write+0x426/0x650 fs/read_write.c:518
 vfs_write+0x791/0xa30 fs/read_write.c:605
 ksys_write+0x12d/0x250 fs/read_write.c:658
 do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
 entry_SYSCALL_64_after_hwframe+0x44/0xa9

Reported-by: syzbot+80dccaee7c6630fa9dcf@syzkaller.appspotmail.com
Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
Acked-by: Alexander Lobakin <alobakin@pm.me>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/qrtr/qrtr.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/net/qrtr/qrtr.c
+++ b/net/qrtr/qrtr.c
@@ -439,7 +439,7 @@ int qrtr_endpoint_post(struct qrtr_endpo
 	if (len == 0 || len & 3)
 		return -EINVAL;
 
-	skb = netdev_alloc_skb(NULL, len);
+	skb = __netdev_alloc_skb(NULL, len, GFP_ATOMIC | __GFP_NOWARN);
 	if (!skb)
 		return -ENOMEM;
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 059/120] kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (57 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 058/120] net/qrtr: fix __netdev_alloc_skb call Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 060/120] cifs: warn and fail if trying to use rootfs without the config option Greg Kroah-Hartman
                   ` (63 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Christian Zigotzky, Masahiro Yamada,
	Sasha Levin

From: Masahiro Yamada <masahiroy@kernel.org>

commit 207da4c82ade9a6d59f7e794d737ba0748613fa2 upstream.

Commit 78d3bb4483ba ("kbuild: Fix <linux/version.h> for empty SUBLEVEL
or PATCHLEVEL") fixed the build error for empty SUBLEVEL or PATCHLEVEL
by prepending a zero.

Commit 9b82f13e7ef3 ("kbuild: clamp SUBLEVEL to 255") re-introduced
this issue.

This time, we cannot take the same approach because we have C code:

  #define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL)
  #define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)

Replace empty SUBLEVEL/PATCHLEVEL with a zero.

Fixes: 9b82f13e7ef3 ("kbuild: clamp SUBLEVEL to 255")
Reported-by: Christian Zigotzky <chzigotzky@xenosoft.de>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-and-tested-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 Makefile |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/Makefile
+++ b/Makefile
@@ -1248,15 +1248,17 @@ endef
 define filechk_version.h
 	if [ $(SUBLEVEL) -gt 255 ]; then                                 \
 		echo \#define LINUX_VERSION_CODE $(shell                 \
-		expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
+		expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + 255); \
 	else                                                             \
 		echo \#define LINUX_VERSION_CODE $(shell                 \
-		expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
+		expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
 	fi;                                                              \
 	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) +  \
 	((c) > 255 ? 255 : (c)))'
 endef
 
+$(version_h): PATCHLEVEL := $(if $(PATCHLEVEL), $(PATCHLEVEL), 0)
+$(version_h): SUBLEVEL := $(if $(SUBLEVEL), $(SUBLEVEL), 0)
 $(version_h): FORCE
 	$(call filechk,version.h)
 	$(Q)rm -f $(old_version_h)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 060/120] cifs: warn and fail if trying to use rootfs without the config option
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (58 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 059/120] kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 061/120] cifs: fix allocation size on newly created files Greg Kroah-Hartman
                   ` (62 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Aurelien Aptel, Steve French

From: Aurelien Aptel <aaptel@suse.com>

commit af3ef3b1031634724a3763606695ebcd113d782b upstream.

If CONFIG_CIFS_ROOT is not set, rootfs mount option is invalid

Signed-off-by: Aurelien Aptel <aaptel@suse.com>
CC: <stable@vger.kernel.org> # v5.11
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/cifs/fs_context.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/fs/cifs/fs_context.c
+++ b/fs/cifs/fs_context.c
@@ -1175,9 +1175,11 @@ static int smb3_fs_context_parse_param(s
 		pr_warn_once("Witness protocol support is experimental\n");
 		break;
 	case Opt_rootfs:
-#ifdef CONFIG_CIFS_ROOT
-		ctx->rootfs = true;
+#ifndef CONFIG_CIFS_ROOT
+		cifs_dbg(VFS, "rootfs support requires CONFIG_CIFS_ROOT config option\n");
+		goto cifs_parse_mount_err;
 #endif
+		ctx->rootfs = true;
 		break;
 	case Opt_posixpaths:
 		if (result.negated)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 061/120] cifs: fix allocation size on newly created files
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (59 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 060/120] cifs: warn and fail if trying to use rootfs without the config option Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 062/120] RISC-V: Fix out-of-bounds accesses in init_resources() Greg Kroah-Hartman
                   ` (61 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Steve French, Aurelien Aptel

From: Steve French <stfrench@microsoft.com>

commit 65af8f0166f4d15e61c63db498ec7981acdd897f upstream.

Applications that create and extend and write to a file do not
expect to see 0 allocation size.  When file is extended,
set its allocation size to a plausible value until we have a
chance to query the server for it.  When the file is cached
this will prevent showing an impossible number of allocated
blocks (like 0).  This fixes e.g. xfstests 614 which does

    1) create a file and set its size to 64K
    2) mmap write 64K to the file
    3) stat -c %b for the file (to query the number of allocated blocks)

It was failing because we returned 0 blocks.  Even though we would
return the correct cached file size, we returned an impossible
allocation size.

Signed-off-by: Steve French <stfrench@microsoft.com>
CC: <stable@vger.kernel.org>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/cifs/inode.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -2383,7 +2383,7 @@ int cifs_getattr(const struct path *path
 	 * We need to be sure that all dirty pages are written and the server
 	 * has actual ctime, mtime and file length.
 	 */
-	if ((request_mask & (STATX_CTIME | STATX_MTIME | STATX_SIZE)) &&
+	if ((request_mask & (STATX_CTIME | STATX_MTIME | STATX_SIZE | STATX_BLOCKS)) &&
 	    !CIFS_CACHE_READ(CIFS_I(inode)) &&
 	    inode->i_mapping && inode->i_mapping->nrpages != 0) {
 		rc = filemap_fdatawait(inode->i_mapping);
@@ -2573,6 +2573,14 @@ set_size_out:
 	if (rc == 0) {
 		cifsInode->server_eof = attrs->ia_size;
 		cifs_setsize(inode, attrs->ia_size);
+		/*
+		 * i_blocks is not related to (i_size / i_blksize), but instead
+		 * 512 byte (2**9) size is required for calculating num blocks.
+		 * Until we can query the server for actual allocation size,
+		 * this is best estimate we have for blocks allocated for a file
+		 * Number of blocks must be rounded up so size 1 is not 0 blocks
+		 */
+		inode->i_blocks = (512 - 1 + attrs->ia_size) >> 9;
 
 		/*
 		 * The man page of truncate says if the size changed,



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 062/120] RISC-V: Fix out-of-bounds accesses in init_resources()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (60 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 061/120] cifs: fix allocation size on newly created files Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 063/120] riscv: Correct SPARSEMEM configuration Greg Kroah-Hartman
                   ` (60 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Geert Uytterhoeven, Atish Patra,
	Palmer Dabbelt

From: Geert Uytterhoeven <geert@linux-m68k.org>

commit ce989f1472ae350e844b10c880b22543168fbc92 upstream.

init_resources() allocates an array of resources, based on the current
total number of memory regions and reserved memory regions.  However,
allocating this array using memblock_alloc() might increase the number
of reserved memory regions.  If that happens, populating the array later
based on the new number of regions will cause out-of-bounds writes
beyond the end of the allocated array.

Fix this by allocating one more entry, which may or may not be used.

Fixes: 797f0375dd2ef5cd ("RISC-V: Do not allocate memblock while iterating reserved memblocks")
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
Cc: stable@vger.kernel.org
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/riscv/kernel/setup.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/arch/riscv/kernel/setup.c
+++ b/arch/riscv/kernel/setup.c
@@ -147,7 +147,8 @@ static void __init init_resources(void)
 	bss_res.end = __pa_symbol(__bss_stop) - 1;
 	bss_res.flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
 
-	mem_res_sz = (memblock.memory.cnt + memblock.reserved.cnt) * sizeof(*mem_res);
+	/* + 1 as memblock_alloc() might increase memblock.reserved.cnt */
+	mem_res_sz = (memblock.memory.cnt + memblock.reserved.cnt + 1) * sizeof(*mem_res);
 	mem_res = memblock_alloc(mem_res_sz, SMP_CACHE_BYTES);
 	if (!mem_res)
 		panic("%s: Failed to allocate %zu bytes\n", __func__, mem_res_sz);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 063/120] riscv: Correct SPARSEMEM configuration
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (61 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 062/120] RISC-V: Fix out-of-bounds accesses in init_resources() Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 064/120] scsi: lpfc: Fix some error codes in debugfs Greg Kroah-Hartman
                   ` (59 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Kefeng Wang, Palmer Dabbelt

From: Kefeng Wang <wangkefeng.wang@huawei.com>

commit a5406a7ff56e63376c210b06072aa0ef23473366 upstream.

There are two issues for RV32,
1) if use FLATMEM, it is useless to enable SPARSEMEM_STATIC.
2) if use SPARSMEM, both SPARSEMEM_VMEMMAP and SPARSEMEM_STATIC is enabled.

Fixes: d95f1a542c3d ("RISC-V: Implement sparsemem")
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: stable@vger.kernel.org
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/riscv/Kconfig |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -87,7 +87,6 @@ config RISCV
 	select PCI_MSI if PCI
 	select RISCV_INTC
 	select RISCV_TIMER if RISCV_SBI
-	select SPARSEMEM_STATIC if 32BIT
 	select SPARSE_IRQ
 	select SYSCTL_EXCEPTION_TRACE
 	select THREAD_INFO_IN_TASK
@@ -148,7 +147,8 @@ config ARCH_FLATMEM_ENABLE
 config ARCH_SPARSEMEM_ENABLE
 	def_bool y
 	depends on MMU
-	select SPARSEMEM_VMEMMAP_ENABLE
+	select SPARSEMEM_STATIC if 32BIT && SPARSMEM
+	select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
 
 config ARCH_SELECT_MEMORY_MODEL
 	def_bool ARCH_SPARSEMEM_ENABLE



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 064/120] scsi: lpfc: Fix some error codes in debugfs
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (62 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 063/120] riscv: Correct SPARSEMEM configuration Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 065/120] scsi: myrs: Fix a double free in myrs_cleanup() Greg Kroah-Hartman
                   ` (58 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dan Carpenter, Martin K. Petersen

From: Dan Carpenter <dan.carpenter@oracle.com>

commit 19f1bc7edf0f97186810e13a88f5b62069d89097 upstream.

If copy_from_user() or kstrtoull() fail then the correct behavior is to
return a negative error code.

Link: https://lore.kernel.org/r/YEsbU/UxYypVrC7/@mwanda
Fixes: f9bb2da11db8 ("[SCSI] lpfc 8.3.27: T10 additions for SLI4")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/scsi/lpfc/lpfc_debugfs.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -2421,7 +2421,7 @@ lpfc_debugfs_dif_err_write(struct file *
 	memset(dstbuf, 0, 33);
 	size = (nbytes < 32) ? nbytes : 32;
 	if (copy_from_user(dstbuf, buf, size))
-		return 0;
+		return -EFAULT;
 
 	if (dent == phba->debug_InjErrLBA) {
 		if ((dstbuf[0] == 'o') && (dstbuf[1] == 'f') &&
@@ -2430,7 +2430,7 @@ lpfc_debugfs_dif_err_write(struct file *
 	}
 
 	if ((tmp == 0) && (kstrtoull(dstbuf, 0, &tmp)))
-		return 0;
+		return -EINVAL;
 
 	if (dent == phba->debug_writeGuard)
 		phba->lpfc_injerr_wgrd_cnt = (uint32_t)tmp;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 065/120] scsi: myrs: Fix a double free in myrs_cleanup()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (63 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 064/120] scsi: lpfc: Fix some error codes in debugfs Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 066/120] scsi: ufs: ufs-mediatek: Correct operator & -> && Greg Kroah-Hartman
                   ` (57 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Hannes Reinecke, Lv Yunlong,
	Martin K. Petersen

From: Lv Yunlong <lyl2019@mail.ustc.edu.cn>

commit 2bb817712e2f77486d6ee17e7efaf91997a685f8 upstream.

In myrs_cleanup(), cs->mmio_base will be freed twice by iounmap().

Link: https://lore.kernel.org/r/20210311063005.9963-1-lyl2019@mail.ustc.edu.cn
Fixes: 77266186397c ("scsi: myrs: Add Mylex RAID controller (SCSI interface)")
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Lv Yunlong <lyl2019@mail.ustc.edu.cn>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/scsi/myrs.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/scsi/myrs.c
+++ b/drivers/scsi/myrs.c
@@ -2273,12 +2273,12 @@ static void myrs_cleanup(struct myrs_hba
 	if (cs->mmio_base) {
 		cs->disable_intr(cs);
 		iounmap(cs->mmio_base);
+		cs->mmio_base = NULL;
 	}
 	if (cs->irq)
 		free_irq(cs->irq, cs);
 	if (cs->io_addr)
 		release_region(cs->io_addr, 0x80);
-	iounmap(cs->mmio_base);
 	pci_set_drvdata(pdev, NULL);
 	pci_disable_device(pdev);
 	scsi_host_put(cs->host);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 066/120] scsi: ufs: ufs-mediatek: Correct operator & -> &&
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (64 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 065/120] scsi: myrs: Fix a double free in myrs_cleanup() Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 067/120] scsi: mpt3sas: Do not use GFP_KERNEL in atomic context Greg Kroah-Hartman
                   ` (56 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Avri Altman, dongjian, Yue Hu,
	Martin K. Petersen

From: dongjian <dongjian@yulong.com>

commit 0fdc7d5d8f3719950478cca452cf7f0f1355be10 upstream.

The "lpm" and "->enabled" are all boolean. We should be using &&
rather than the bit operator.

Link: https://lore.kernel.org/r/1615896915-148864-1-git-send-email-dj0227@163.com
Fixes: 488edafb1120 ("scsi: ufs-mediatek: Introduce low-power mode for device power supply")
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Signed-off-by: dongjian <dongjian@yulong.com>
Signed-off-by: Yue Hu <huyue2@yulong.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/scsi/ufs/ufs-mediatek.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/scsi/ufs/ufs-mediatek.c
+++ b/drivers/scsi/ufs/ufs-mediatek.c
@@ -911,7 +911,7 @@ static void ufs_mtk_vreg_set_lpm(struct
 	if (!hba->vreg_info.vccq2 || !hba->vreg_info.vcc)
 		return;
 
-	if (lpm & !hba->vreg_info.vcc->enabled)
+	if (lpm && !hba->vreg_info.vcc->enabled)
 		regulator_set_mode(hba->vreg_info.vccq2->reg,
 				   REGULATOR_MODE_IDLE);
 	else if (!lpm)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 067/120] scsi: mpt3sas: Do not use GFP_KERNEL in atomic context
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (65 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 066/120] scsi: ufs: ufs-mediatek: Correct operator & -> && Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 068/120] RISC-V: correct enum sbi_ext_rfence_fid Greg Kroah-Hartman
                   ` (55 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Christophe JAILLET, Martin K. Petersen

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

commit a50bd64616907ed126ffbdbaa06c5ce708c4a404 upstream.

mpt3sas_get_port_by_id() can be called when a spinlock is held. Use
GFP_ATOMIC instead of GFP_KERNEL when allocating memory.

Issue spotted by call_kern.cocci:
./drivers/scsi/mpt3sas/mpt3sas_scsih.c:416:42-52: ERROR: function mpt3sas_get_port_by_id called on line 7125 inside lock on line 7123 but uses GFP_KERNEL
./drivers/scsi/mpt3sas/mpt3sas_scsih.c:416:42-52: ERROR: function mpt3sas_get_port_by_id called on line 6842 inside lock on line 6839 but uses GFP_KERNEL
./drivers/scsi/mpt3sas/mpt3sas_scsih.c:416:42-52: ERROR: function mpt3sas_get_port_by_id called on line 6854 inside lock on line 6851 but uses GFP_KERNEL
./drivers/scsi/mpt3sas/mpt3sas_scsih.c:416:42-52: ERROR: function mpt3sas_get_port_by_id called on line 7706 inside lock on line 7702 but uses GFP_KERNEL
./drivers/scsi/mpt3sas/mpt3sas_scsih.c:416:42-52: ERROR: function mpt3sas_get_port_by_id called on line 10260 inside lock on line 10256 but uses GFP_KERNEL

Link: https://lore.kernel.org/r/20210220093951.905362-1-christophe.jaillet@wanadoo.fr
Fixes: 324c122fc0a4 ("scsi: mpt3sas: Add module parameter multipath_on_hba")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/scsi/mpt3sas/mpt3sas_scsih.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -407,7 +407,7 @@ mpt3sas_get_port_by_id(struct MPT3SAS_AD
 	 * And add this object to port_table_list.
 	 */
 	if (!ioc->multipath_on_hba) {
-		port = kzalloc(sizeof(struct hba_port), GFP_KERNEL);
+		port = kzalloc(sizeof(struct hba_port), GFP_ATOMIC);
 		if (!port)
 			return NULL;
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 068/120] RISC-V: correct enum sbi_ext_rfence_fid
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (66 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 067/120] scsi: mpt3sas: Do not use GFP_KERNEL in atomic context Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 069/120] counter: stm32-timer-cnt: Report count function when SLAVE_MODE_DISABLED Greg Kroah-Hartman
                   ` (54 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Sean Anderson, Heinrich Schuchardt,
	Anup Patel, Atish Patra, Palmer Dabbelt

From: Heinrich Schuchardt <xypron.glpk@gmx.de>

commit 6dd4879f59b0a0679ed8c3ebaff3d79f37930778 upstream.

The constants in enum sbi_ext_rfence_fid should match the SBI
specification. See
https://github.com/riscv/riscv-sbi-doc/blob/master/riscv-sbi.adoc#78-function-listing

| Function Name               | FID | EID
| sbi_remote_fence_i          |   0 | 0x52464E43
| sbi_remote_sfence_vma       |   1 | 0x52464E43
| sbi_remote_sfence_vma_asid  |   2 | 0x52464E43
| sbi_remote_hfence_gvma_vmid |   3 | 0x52464E43
| sbi_remote_hfence_gvma      |   4 | 0x52464E43
| sbi_remote_hfence_vvma_asid |   5 | 0x52464E43
| sbi_remote_hfence_vvma      |   6 | 0x52464E43

Fixes: ecbacc2a3efd ("RISC-V: Add SBI v0.2 extension definitions")
Reported-by: Sean Anderson <seanga2@gmail.com>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/riscv/include/asm/sbi.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/riscv/include/asm/sbi.h
+++ b/arch/riscv/include/asm/sbi.h
@@ -51,10 +51,10 @@ enum sbi_ext_rfence_fid {
 	SBI_EXT_RFENCE_REMOTE_FENCE_I = 0,
 	SBI_EXT_RFENCE_REMOTE_SFENCE_VMA,
 	SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID,
-	SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA,
 	SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA_VMID,
-	SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA,
+	SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA,
 	SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID,
+	SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA,
 };
 
 enum sbi_ext_hsm_fid {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 069/120] counter: stm32-timer-cnt: Report count function when SLAVE_MODE_DISABLED
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (67 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 068/120] RISC-V: correct enum sbi_ext_rfence_fid Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 070/120] ASoC: codecs: lpass-va-macro: mute/unmute all active decimators Greg Kroah-Hartman
                   ` (53 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Fabrice Gasnier, Maxime Coquelin,
	Alexandre Torgue, William Breathitt Gray, Fabrice Gasnier,
	Jonathan Cameron, Sasha Levin

From: William Breathitt Gray <vilhelm.gray@gmail.com>

[ Upstream commit fae6f62e6a580b663ecf42c2120a0898deae9137 ]

When in SLAVE_MODE_DISABLED mode, the count still increases if the
counter is enabled because an internal clock is used. This patch fixes
the stm32_count_function_get() and stm32_count_function_set() functions
to properly handle this behavior.

Fixes: ad29937e206f ("counter: Add STM32 Timer quadrature encoder")
Cc: Fabrice Gasnier <fabrice.gasnier@st.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Signed-off-by: William Breathitt Gray <vilhelm.gray@gmail.com>
Reviewed-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Link: https://lore.kernel.org/r/20210226012931.161429-1-vilhelm.gray@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/counter/stm32-timer-cnt.c | 39 ++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 14 deletions(-)

diff --git a/drivers/counter/stm32-timer-cnt.c b/drivers/counter/stm32-timer-cnt.c
index ef2a974a2f10..cd50dc12bd02 100644
--- a/drivers/counter/stm32-timer-cnt.c
+++ b/drivers/counter/stm32-timer-cnt.c
@@ -44,13 +44,14 @@ struct stm32_timer_cnt {
  * @STM32_COUNT_ENCODER_MODE_3: counts on both TI1FP1 and TI2FP2 edges
  */
 enum stm32_count_function {
-	STM32_COUNT_SLAVE_MODE_DISABLED = -1,
+	STM32_COUNT_SLAVE_MODE_DISABLED,
 	STM32_COUNT_ENCODER_MODE_1,
 	STM32_COUNT_ENCODER_MODE_2,
 	STM32_COUNT_ENCODER_MODE_3,
 };
 
 static enum counter_count_function stm32_count_functions[] = {
+	[STM32_COUNT_SLAVE_MODE_DISABLED] = COUNTER_COUNT_FUNCTION_INCREASE,
 	[STM32_COUNT_ENCODER_MODE_1] = COUNTER_COUNT_FUNCTION_QUADRATURE_X2_A,
 	[STM32_COUNT_ENCODER_MODE_2] = COUNTER_COUNT_FUNCTION_QUADRATURE_X2_B,
 	[STM32_COUNT_ENCODER_MODE_3] = COUNTER_COUNT_FUNCTION_QUADRATURE_X4,
@@ -90,6 +91,9 @@ static int stm32_count_function_get(struct counter_device *counter,
 	regmap_read(priv->regmap, TIM_SMCR, &smcr);
 
 	switch (smcr & TIM_SMCR_SMS) {
+	case 0:
+		*function = STM32_COUNT_SLAVE_MODE_DISABLED;
+		return 0;
 	case 1:
 		*function = STM32_COUNT_ENCODER_MODE_1;
 		return 0;
@@ -99,9 +103,9 @@ static int stm32_count_function_get(struct counter_device *counter,
 	case 3:
 		*function = STM32_COUNT_ENCODER_MODE_3;
 		return 0;
+	default:
+		return -EINVAL;
 	}
-
-	return -EINVAL;
 }
 
 static int stm32_count_function_set(struct counter_device *counter,
@@ -112,6 +116,9 @@ static int stm32_count_function_set(struct counter_device *counter,
 	u32 cr1, sms;
 
 	switch (function) {
+	case STM32_COUNT_SLAVE_MODE_DISABLED:
+		sms = 0;
+		break;
 	case STM32_COUNT_ENCODER_MODE_1:
 		sms = 1;
 		break;
@@ -122,8 +129,7 @@ static int stm32_count_function_set(struct counter_device *counter,
 		sms = 3;
 		break;
 	default:
-		sms = 0;
-		break;
+		return -EINVAL;
 	}
 
 	/* Store enable status */
@@ -274,31 +280,36 @@ static int stm32_action_get(struct counter_device *counter,
 	size_t function;
 	int err;
 
-	/* Default action mode (e.g. STM32_COUNT_SLAVE_MODE_DISABLED) */
-	*action = STM32_SYNAPSE_ACTION_NONE;
-
 	err = stm32_count_function_get(counter, count, &function);
 	if (err)
-		return 0;
+		return err;
 
 	switch (function) {
+	case STM32_COUNT_SLAVE_MODE_DISABLED:
+		/* counts on internal clock when CEN=1 */
+		*action = STM32_SYNAPSE_ACTION_NONE;
+		return 0;
 	case STM32_COUNT_ENCODER_MODE_1:
 		/* counts up/down on TI1FP1 edge depending on TI2FP2 level */
 		if (synapse->signal->id == count->synapses[0].signal->id)
 			*action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
-		break;
+		else
+			*action = STM32_SYNAPSE_ACTION_NONE;
+		return 0;
 	case STM32_COUNT_ENCODER_MODE_2:
 		/* counts up/down on TI2FP2 edge depending on TI1FP1 level */
 		if (synapse->signal->id == count->synapses[1].signal->id)
 			*action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
-		break;
+		else
+			*action = STM32_SYNAPSE_ACTION_NONE;
+		return 0;
 	case STM32_COUNT_ENCODER_MODE_3:
 		/* counts up/down on both TI1FP1 and TI2FP2 edges */
 		*action = STM32_SYNAPSE_ACTION_BOTH_EDGES;
-		break;
+		return 0;
+	default:
+		return -EINVAL;
 	}
-
-	return 0;
 }
 
 static const struct counter_ops stm32_timer_cnt_ops = {
-- 
2.30.1




^ permalink raw reply related	[flat|nested] 135+ messages in thread

* [PATCH 5.11 070/120] ASoC: codecs: lpass-va-macro: mute/unmute all active decimators
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (68 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 069/120] counter: stm32-timer-cnt: Report count function when SLAVE_MODE_DISABLED Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 071/120] ASoC: codecs: lpass-wsa-macro: fix RX MIX input controls Greg Kroah-Hartman
                   ` (52 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jonathan Marek, Srinivas Kandagatla,
	Mark Brown, Sasha Levin

From: Jonathan Marek <jonathan@marek.ca>

[ Upstream commit 5346f0e80b7160c91fb599d4545fd12560c286ed ]

An interface can have multiple decimators enabled, so loop over all active
decimators. Otherwise only one channel will be unmuted, and other channels
will be zero. This fixes recording from dual DMIC as a single two channel
stream.

Also remove the now unused "active_decimator" field.

Fixes: 908e6b1df26e ("ASoC: codecs: lpass-va-macro: Add support to VA Macro")
Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20210304215646.17956-1-jonathan@marek.ca
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 sound/soc/codecs/lpass-va-macro.c | 28 +++++++++++++---------------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
index 91e6890d6efc..3d6976a3d9e4 100644
--- a/sound/soc/codecs/lpass-va-macro.c
+++ b/sound/soc/codecs/lpass-va-macro.c
@@ -189,7 +189,6 @@ struct va_macro {
 	struct device *dev;
 	unsigned long active_ch_mask[VA_MACRO_MAX_DAIS];
 	unsigned long active_ch_cnt[VA_MACRO_MAX_DAIS];
-	unsigned long active_decimator[VA_MACRO_MAX_DAIS];
 	u16 dmic_clk_div;
 
 	int dec_mode[VA_MACRO_NUM_DECIMATORS];
@@ -549,11 +548,9 @@ static int va_macro_tx_mixer_put(struct snd_kcontrol *kcontrol,
 	if (enable) {
 		set_bit(dec_id, &va->active_ch_mask[dai_id]);
 		va->active_ch_cnt[dai_id]++;
-		va->active_decimator[dai_id] = dec_id;
 	} else {
 		clear_bit(dec_id, &va->active_ch_mask[dai_id]);
 		va->active_ch_cnt[dai_id]--;
-		va->active_decimator[dai_id] = -1;
 	}
 
 	snd_soc_dapm_mixer_update_power(widget->dapm, kcontrol, enable, update);
@@ -880,18 +877,19 @@ static int va_macro_digital_mute(struct snd_soc_dai *dai, int mute, int stream)
 	struct va_macro *va = snd_soc_component_get_drvdata(component);
 	u16 tx_vol_ctl_reg, decimator;
 
-	decimator = va->active_decimator[dai->id];
-
-	tx_vol_ctl_reg = CDC_VA_TX0_TX_PATH_CTL +
-				VA_MACRO_TX_PATH_OFFSET * decimator;
-	if (mute)
-		snd_soc_component_update_bits(component, tx_vol_ctl_reg,
-					      CDC_VA_TX_PATH_PGA_MUTE_EN_MASK,
-					      CDC_VA_TX_PATH_PGA_MUTE_EN);
-	else
-		snd_soc_component_update_bits(component, tx_vol_ctl_reg,
-					      CDC_VA_TX_PATH_PGA_MUTE_EN_MASK,
-					      CDC_VA_TX_PATH_PGA_MUTE_DISABLE);
+	for_each_set_bit(decimator, &va->active_ch_mask[dai->id],
+			 VA_MACRO_DEC_MAX) {
+		tx_vol_ctl_reg = CDC_VA_TX0_TX_PATH_CTL +
+					VA_MACRO_TX_PATH_OFFSET * decimator;
+		if (mute)
+			snd_soc_component_update_bits(component, tx_vol_ctl_reg,
+					CDC_VA_TX_PATH_PGA_MUTE_EN_MASK,
+					CDC_VA_TX_PATH_PGA_MUTE_EN);
+		else
+			snd_soc_component_update_bits(component, tx_vol_ctl_reg,
+					CDC_VA_TX_PATH_PGA_MUTE_EN_MASK,
+					CDC_VA_TX_PATH_PGA_MUTE_DISABLE);
+	}
 
 	return 0;
 }
-- 
2.30.1




^ permalink raw reply related	[flat|nested] 135+ messages in thread

* [PATCH 5.11 071/120] ASoC: codecs: lpass-wsa-macro: fix RX MIX input controls
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (69 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 070/120] ASoC: codecs: lpass-va-macro: mute/unmute all active decimators Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 072/120] powerpc/vdso32: Add missing _restgpr_31_x to fix build failure Greg Kroah-Hartman
                   ` (51 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jonathan Marek, Srinivas Kandagatla,
	Mark Brown, Sasha Levin

From: Jonathan Marek <jonathan@marek.ca>

[ Upstream commit e4b8b7c916038c1ffcba2c4ce92d5523c4cc2f46 ]

Attempting to use the RX MIX path at 48kHz plays at 96kHz, because these
controls are incorrectly toggling the first bit of the register, which
is part of the FS_RATE field.

Fix the problem by using the same method used by the "WSA RX_MIX EC0_MUX"
control, which is to use SND_SOC_NOPM as the register and use an enum in
the shift field instead.

Fixes: 2c4066e5d428 ("ASoC: codecs: lpass-wsa-macro: add dapm widgets and route")
Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20210305005049.24726-1-jonathan@marek.ca
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 sound/soc/codecs/lpass-wsa-macro.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c
index 25f1df214ca5..cd59aa439373 100644
--- a/sound/soc/codecs/lpass-wsa-macro.c
+++ b/sound/soc/codecs/lpass-wsa-macro.c
@@ -1214,14 +1214,16 @@ static int wsa_macro_enable_mix_path(struct snd_soc_dapm_widget *w,
 				     struct snd_kcontrol *kcontrol, int event)
 {
 	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
-	u16 gain_reg;
+	u16 path_reg, gain_reg;
 	int val;
 
-	switch (w->reg) {
-	case CDC_WSA_RX0_RX_PATH_MIX_CTL:
+	switch (w->shift) {
+	case WSA_MACRO_RX_MIX0:
+		path_reg = CDC_WSA_RX0_RX_PATH_MIX_CTL;
 		gain_reg = CDC_WSA_RX0_RX_VOL_MIX_CTL;
 		break;
-	case CDC_WSA_RX1_RX_PATH_MIX_CTL:
+	case WSA_MACRO_RX_MIX1:
+		path_reg = CDC_WSA_RX1_RX_PATH_MIX_CTL;
 		gain_reg = CDC_WSA_RX1_RX_VOL_MIX_CTL;
 		break;
 	default:
@@ -1234,7 +1236,7 @@ static int wsa_macro_enable_mix_path(struct snd_soc_dapm_widget *w,
 		snd_soc_component_write(component, gain_reg, val);
 		break;
 	case SND_SOC_DAPM_POST_PMD:
-		snd_soc_component_update_bits(component, w->reg,
+		snd_soc_component_update_bits(component, path_reg,
 					      CDC_WSA_RX_PATH_MIX_CLK_EN_MASK,
 					      CDC_WSA_RX_PATH_MIX_CLK_DISABLE);
 		break;
@@ -2071,14 +2073,14 @@ static const struct snd_soc_dapm_widget wsa_macro_dapm_widgets[] = {
 	SND_SOC_DAPM_MUX("WSA_RX0 INP0", SND_SOC_NOPM, 0, 0, &rx0_prim_inp0_mux),
 	SND_SOC_DAPM_MUX("WSA_RX0 INP1", SND_SOC_NOPM, 0, 0, &rx0_prim_inp1_mux),
 	SND_SOC_DAPM_MUX("WSA_RX0 INP2", SND_SOC_NOPM, 0, 0, &rx0_prim_inp2_mux),
-	SND_SOC_DAPM_MUX_E("WSA_RX0 MIX INP", CDC_WSA_RX0_RX_PATH_MIX_CTL,
-			   0, 0, &rx0_mix_mux, wsa_macro_enable_mix_path,
+	SND_SOC_DAPM_MUX_E("WSA_RX0 MIX INP", SND_SOC_NOPM, WSA_MACRO_RX_MIX0,
+			   0, &rx0_mix_mux, wsa_macro_enable_mix_path,
 			   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
 	SND_SOC_DAPM_MUX("WSA_RX1 INP0", SND_SOC_NOPM, 0, 0, &rx1_prim_inp0_mux),
 	SND_SOC_DAPM_MUX("WSA_RX1 INP1", SND_SOC_NOPM, 0, 0, &rx1_prim_inp1_mux),
 	SND_SOC_DAPM_MUX("WSA_RX1 INP2", SND_SOC_NOPM, 0, 0, &rx1_prim_inp2_mux),
-	SND_SOC_DAPM_MUX_E("WSA_RX1 MIX INP", CDC_WSA_RX1_RX_PATH_MIX_CTL,
-			   0, 0, &rx1_mix_mux, wsa_macro_enable_mix_path,
+	SND_SOC_DAPM_MUX_E("WSA_RX1 MIX INP", SND_SOC_NOPM, WSA_MACRO_RX_MIX1,
+			   0, &rx1_mix_mux, wsa_macro_enable_mix_path,
 			   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
 
 	SND_SOC_DAPM_MIXER_E("WSA_RX INT0 MIX", SND_SOC_NOPM, 0, 0, NULL, 0,
-- 
2.30.1




^ permalink raw reply related	[flat|nested] 135+ messages in thread

* [PATCH 5.11 072/120] powerpc/vdso32: Add missing _restgpr_31_x to fix build failure
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (70 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 071/120] ASoC: codecs: lpass-wsa-macro: fix RX MIX input controls Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 073/120] drm/ttm: Warn on pinning without holding a reference Greg Kroah-Hartman
                   ` (50 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Christophe Leroy, Michael Ellerman,
	Sasha Levin

From: Christophe Leroy <christophe.leroy@csgroup.eu>

[ Upstream commit 08c18b63d9656e0389087d1956d2b37fd7019172 ]

With some defconfig including CONFIG_CC_OPTIMIZE_FOR_SIZE,
(for instance mvme5100_defconfig and ps3_defconfig), gcc 5
generates a call to _restgpr_31_x.

Until recently it went unnoticed, but
commit 42ed6d56ade2 ("powerpc/vdso: Block R_PPC_REL24 relocations")
made it rise to the surface.

Provide that function (copied from lib/crtsavres.S) in
gettimeofday.S

Fixes: ab037dd87a2f ("powerpc/vdso: Switch VDSO to generic C implementation.")
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a7aa198a88bcd33c6e35e99f70f86c7b7f2f9440.1615270757.git.christophe.leroy@csgroup.eu
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 arch/powerpc/kernel/vdso32/gettimeofday.S | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/arch/powerpc/kernel/vdso32/gettimeofday.S b/arch/powerpc/kernel/vdso32/gettimeofday.S
index a6e29f880e0e..d21d08140a5e 100644
--- a/arch/powerpc/kernel/vdso32/gettimeofday.S
+++ b/arch/powerpc/kernel/vdso32/gettimeofday.S
@@ -65,3 +65,14 @@ V_FUNCTION_END(__kernel_clock_getres)
 V_FUNCTION_BEGIN(__kernel_time)
 	cvdso_call_time __c_kernel_time
 V_FUNCTION_END(__kernel_time)
+
+/* Routines for restoring integer registers, called by the compiler.  */
+/* Called with r11 pointing to the stack header word of the caller of the */
+/* function, just beyond the end of the integer restore area.  */
+_GLOBAL(_restgpr_31_x)
+_GLOBAL(_rest32gpr_31_x)
+	lwz	r0,4(r11)
+	lwz	r31,-4(r11)
+	mtlr	r0
+	mr	r1,r11
+	blr
-- 
2.30.1




^ permalink raw reply related	[flat|nested] 135+ messages in thread

* [PATCH 5.11 073/120] drm/ttm: Warn on pinning without holding a reference
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (71 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 072/120] powerpc/vdso32: Add missing _restgpr_31_x to fix build failure Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-25  8:14   ` Christian König
  2021-03-22 12:27 ` [PATCH 5.11 074/120] drm/ttm: make ttm_bo_unpin more defensive Greg Kroah-Hartman
                   ` (49 subsequent siblings)
  122 siblings, 1 reply; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Huang Rui, Christian König,
	Daniel Vetter, Sasha Levin

From: Daniel Vetter <daniel.vetter@ffwll.ch>

[ Upstream commit 57fcd550eb15bce14a7154736379dfd4ed60ae81 ]

Not technically a problem for ttm, but very likely a driver bug and
pretty big time confusing for reviewing code.

So warn about it, both at cleanup time (so we catch these for sure)
and at pin/unpin time (so we know who's the culprit).

Reviewed-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Christian Koenig <christian.koenig@amd.com>
Cc: Huang Rui <ray.huang@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201028113120.3641237-1-daniel.vetter@ffwll.ch
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/gpu/drm/ttm/ttm_bo.c | 2 +-
 include/drm/ttm/ttm_bo_api.h | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 22073e77fdf9..a76eb2c14e8c 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -514,7 +514,7 @@ static void ttm_bo_release(struct kref *kref)
 		 * shrinkers, now that they are queued for
 		 * destruction.
 		 */
-		if (bo->pin_count) {
+		if (WARN_ON(bo->pin_count)) {
 			bo->pin_count = 0;
 			ttm_bo_del_from_lru(bo);
 			ttm_bo_add_mem_to_lru(bo, &bo->mem);
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h
index 2564e66e67d7..79b9367e0ffd 100644
--- a/include/drm/ttm/ttm_bo_api.h
+++ b/include/drm/ttm/ttm_bo_api.h
@@ -600,6 +600,7 @@ static inline bool ttm_bo_uses_embedded_gem_object(struct ttm_buffer_object *bo)
 static inline void ttm_bo_pin(struct ttm_buffer_object *bo)
 {
 	dma_resv_assert_held(bo->base.resv);
+	WARN_ON_ONCE(!kref_read(&bo->kref));
 	++bo->pin_count;
 }
 
@@ -613,6 +614,7 @@ static inline void ttm_bo_unpin(struct ttm_buffer_object *bo)
 {
 	dma_resv_assert_held(bo->base.resv);
 	WARN_ON_ONCE(!bo->pin_count);
+	WARN_ON_ONCE(!kref_read(&bo->kref));
 	--bo->pin_count;
 }
 
-- 
2.30.1




^ permalink raw reply related	[flat|nested] 135+ messages in thread

* [PATCH 5.11 074/120] drm/ttm: make ttm_bo_unpin more defensive
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (72 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 073/120] drm/ttm: Warn on pinning without holding a reference Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 075/120] gpiolib: Assign fwnode to parents if no primary one provided Greg Kroah-Hartman
                   ` (48 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Christian König, Matthew Auld,
	Sasha Levin

From: Christian König <christian.koenig@amd.com>

[ Upstream commit 6c5403173a13a08ff61dbdafa4c0ed4a9dedbfe0 ]

We seem to have some more driver bugs than thought.

Signed-off-by: Christian König <christian.koenig@amd.com>
Fixes: deb0814b43f3 ("drm/ttm: add ttm_bo_pin()/ttm_bo_unpin() v2")
Acked-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210312093810.2202-1-christian.koenig@amd.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 include/drm/ttm/ttm_bo_api.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h
index 79b9367e0ffd..b5bef3199196 100644
--- a/include/drm/ttm/ttm_bo_api.h
+++ b/include/drm/ttm/ttm_bo_api.h
@@ -613,9 +613,11 @@ static inline void ttm_bo_pin(struct ttm_buffer_object *bo)
 static inline void ttm_bo_unpin(struct ttm_buffer_object *bo)
 {
 	dma_resv_assert_held(bo->base.resv);
-	WARN_ON_ONCE(!bo->pin_count);
 	WARN_ON_ONCE(!kref_read(&bo->kref));
-	--bo->pin_count;
+	if (bo->pin_count)
+		--bo->pin_count;
+	else
+		WARN_ON_ONCE(true);
 }
 
 int ttm_mem_evict_first(struct ttm_bo_device *bdev,
-- 
2.30.1




^ permalink raw reply related	[flat|nested] 135+ messages in thread

* [PATCH 5.11 075/120] gpiolib: Assign fwnode to parents if no primary one provided
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (73 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 074/120] drm/ttm: make ttm_bo_unpin more defensive Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 076/120] nvme-rdma: fix possible hang when failing to set io queues Greg Kroah-Hartman
                   ` (47 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Bartosz Golaszewski, Andy Shevchenko,
	Sasha Levin

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

[ Upstream commit 6cb59afe9e5b45a035bd6b97da6593743feefc72 ]

In case when the properties are supplied in the secondary fwnode
(for example, built-in device properties) the fwnode pointer left
unassigned. This makes unable to retrieve them.

Assign fwnode to parent's if no primary one provided.

Fixes: 7cba1a4d5e16 ("gpiolib: generalize devprop_gpiochip_set_names() for device properties")
Fixes: 2afa97e9868f ("gpiolib: Read "gpio-line-names" from a firmware node")
Reported-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Tested-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/gpio/gpiolib.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index e4cfa27f6893..a4a47305574c 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -573,6 +573,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
 			       struct lock_class_key *lock_key,
 			       struct lock_class_key *request_key)
 {
+	struct fwnode_handle *fwnode = gc->parent ? dev_fwnode(gc->parent) : NULL;
 	unsigned long	flags;
 	int		ret = 0;
 	unsigned	i;
@@ -602,6 +603,12 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
 		gc->of_node = gdev->dev.of_node;
 #endif
 
+	/*
+	 * Assign fwnode depending on the result of the previous calls,
+	 * if none of them succeed, assign it to the parent's one.
+	 */
+	gdev->dev.fwnode = dev_fwnode(&gdev->dev) ?: fwnode;
+
 	gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
 	if (gdev->id < 0) {
 		ret = gdev->id;
-- 
2.30.1




^ permalink raw reply related	[flat|nested] 135+ messages in thread

* [PATCH 5.11 076/120] nvme-rdma: fix possible hang when failing to set io queues
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (74 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 075/120] gpiolib: Assign fwnode to parents if no primary one provided Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 077/120] powerpc: Force inlining of cpu_has_feature() to avoid build failure Greg Kroah-Hartman
                   ` (46 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Chao Leng, Sagi Grimberg,
	Christoph Hellwig, Sasha Levin

From: Sagi Grimberg <sagi@grimberg.me>

[ Upstream commit c4c6df5fc84659690d4391d1fba155cd94185295 ]

We only setup io queues for nvme controllers, and it makes absolutely no
sense to allow a controller (re)connect without any I/O queues.  If we
happen to fail setting the queue count for any reason, we should not allow
this to be a successful reconnect as I/O has no chance in going through.
Instead just fail and schedule another reconnect.

Reported-by: Chao Leng <lengchao@huawei.com>
Fixes: 711023071960 ("nvme-rdma: add a NVMe over Fabrics RDMA host driver")
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Chao Leng <lengchao@huawei.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/nvme/host/rdma.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index 746392eade45..0c3da10c1f29 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -736,8 +736,11 @@ static int nvme_rdma_alloc_io_queues(struct nvme_rdma_ctrl *ctrl)
 		return ret;
 
 	ctrl->ctrl.queue_count = nr_io_queues + 1;
-	if (ctrl->ctrl.queue_count < 2)
-		return 0;
+	if (ctrl->ctrl.queue_count < 2) {
+		dev_err(ctrl->ctrl.device,
+			"unable to set any I/O queues\n");
+		return -ENOMEM;
+	}
 
 	dev_info(ctrl->ctrl.device,
 		"creating %d I/O queues.\n", nr_io_queues);
-- 
2.30.1




^ permalink raw reply related	[flat|nested] 135+ messages in thread

* [PATCH 5.11 077/120] powerpc: Force inlining of cpu_has_feature() to avoid build failure
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (75 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 076/120] nvme-rdma: fix possible hang when failing to set io queues Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 078/120] usb-storage: Add quirk to defeat Kindles automatic unload Greg Kroah-Hartman
                   ` (45 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Christophe Leroy, Michael Ellerman

From: Christophe Leroy <christophe.leroy@csgroup.eu>

commit eed5fae00593ab9d261a0c1ffc1bdb786a87a55a upstream.

The code relies on constant folding of cpu_has_feature() based
on possible and always true values as defined per
CPU_FTRS_ALWAYS and CPU_FTRS_POSSIBLE.

Build failure is encountered with for instance
book3e_all_defconfig on kisskb in the AMDGPU driver which uses
cpu_has_feature(CPU_FTR_VSX_COMP) to decide whether calling
kernel_enable_vsx() or not.

The failure is due to cpu_has_feature() not being inlined with
that configuration with gcc 4.9.

In the same way as commit acdad8fb4a15 ("powerpc: Force inlining of
mmu_has_feature to fix build failure"), for inlining of
cpu_has_feature().

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/b231dfa040ce4cc37f702f5c3a595fdeabfe0462.1615378209.git.christophe.leroy@csgroup.eu
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/powerpc/include/asm/cpu_has_feature.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/powerpc/include/asm/cpu_has_feature.h
+++ b/arch/powerpc/include/asm/cpu_has_feature.h
@@ -7,7 +7,7 @@
 #include <linux/bug.h>
 #include <asm/cputable.h>
 
-static inline bool early_cpu_has_feature(unsigned long feature)
+static __always_inline bool early_cpu_has_feature(unsigned long feature)
 {
 	return !!((CPU_FTRS_ALWAYS & feature) ||
 		  (CPU_FTRS_POSSIBLE & cur_cpu_spec->cpu_features & feature));
@@ -46,7 +46,7 @@ static __always_inline bool cpu_has_feat
 	return static_branch_likely(&cpu_feature_keys[i]);
 }
 #else
-static inline bool cpu_has_feature(unsigned long feature)
+static __always_inline bool cpu_has_feature(unsigned long feature)
 {
 	return early_cpu_has_feature(feature);
 }



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 078/120] usb-storage: Add quirk to defeat Kindles automatic unload
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (76 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 077/120] powerpc: Force inlining of cpu_has_feature() to avoid build failure Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 079/120] usbip: Fix incorrect double assignment to udc->ud.tcp_rx Greg Kroah-Hartman
                   ` (44 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Alan Stern, Matthias Schwarzott

From: Alan Stern <stern@rowland.harvard.edu>

commit 546aa0e4ea6ed81b6c51baeebc4364542fa3f3a7 upstream.

Matthias reports that the Amazon Kindle automatically removes its
emulated media if it doesn't receive another SCSI command within about
one second after a SYNCHRONIZE CACHE.  It does so even when the host
has sent a PREVENT MEDIUM REMOVAL command.  The reason for this
behavior isn't clear, although it's not hard to make some guesses.

At any rate, the results can be unexpected for anyone who tries to
access the Kindle in an unusual fashion, and in theory they can lead
to data loss (for example, if one file is closed and synchronized
while other files are still in the middle of being written).

To avoid such problems, this patch creates a new usb-storage quirks
flag telling the driver always to issue a REQUEST SENSE following a
SYNCHRONIZE CACHE command, and adds an unusual_devs entry for the
Kindle with the flag set.  This is sufficient to prevent the Kindle
from doing its automatic unload, without interfering with proper
operation.

Another possible way to deal with this would be to increase the
frequency of TEST UNIT READY polling that the kernel normally carries
out for removable-media storage devices.  However that would increase
the overall load on the system and it is not as reliable, because the
user can override the polling interval.  Changing the driver's
behavior is safer and has minimal overhead.

CC: <stable@vger.kernel.org>
Reported-and-tested-by: Matthias Schwarzott <zzam@gentoo.org>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://lore.kernel.org/r/20210317190654.GA497856@rowland.harvard.edu
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/storage/transport.c    |    7 +++++++
 drivers/usb/storage/unusual_devs.h |   12 ++++++++++++
 include/linux/usb_usual.h          |    2 ++
 3 files changed, 21 insertions(+)

--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -656,6 +656,13 @@ void usb_stor_invoke_transport(struct sc
 		need_auto_sense = 1;
 	}
 
+	/* Some devices (Kindle) require another command after SYNC CACHE */
+	if ((us->fflags & US_FL_SENSE_AFTER_SYNC) &&
+			srb->cmnd[0] == SYNCHRONIZE_CACHE) {
+		usb_stor_dbg(us, "-- sense after SYNC CACHE\n");
+		need_auto_sense = 1;
+	}
+
 	/*
 	 * If we have a failure, we're going to do a REQUEST_SENSE 
 	 * automatically.  Note that we differentiate between a command
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -2212,6 +2212,18 @@ UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0
 		US_FL_NO_READ_DISC_INFO ),
 
 /*
+ * Reported by Matthias Schwarzott <zzam@gentoo.org>
+ * The Amazon Kindle treats SYNCHRONIZE CACHE as an indication that
+ * the host may be finished with it, and automatically ejects its
+ * emulated media unless it receives another command within one second.
+ */
+UNUSUAL_DEV( 0x1949, 0x0004, 0x0000, 0x9999,
+		"Amazon",
+		"Kindle",
+		USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+		US_FL_SENSE_AFTER_SYNC ),
+
+/*
  * Reported by Oliver Neukum <oneukum@suse.com>
  * This device morphes spontaneously into another device if the access
  * pattern of Windows isn't followed. Thus writable media would be dirty
--- a/include/linux/usb_usual.h
+++ b/include/linux/usb_usual.h
@@ -86,6 +86,8 @@
 		/* lies about caching, so always sync */	\
 	US_FLAG(NO_SAME, 0x40000000)				\
 		/* Cannot handle WRITE_SAME */			\
+	US_FLAG(SENSE_AFTER_SYNC, 0x80000000)			\
+		/* Do REQUEST_SENSE after SYNCHRONIZE_CACHE */	\
 
 #define US_FLAG(name, value)	US_FL_##name = value ,
 enum { US_DO_ALL_FLAGS };



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 079/120] usbip: Fix incorrect double assignment to udc->ud.tcp_rx
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (77 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 078/120] usb-storage: Add quirk to defeat Kindles automatic unload Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 080/120] usb: gadget: configfs: Fix KASAN use-after-free Greg Kroah-Hartman
                   ` (43 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Shuah Khan, Colin Ian King

From: Colin Ian King <colin.king@canonical.com>

commit 9858af27e69247c5d04c3b093190a93ca365f33d upstream.

Currently udc->ud.tcp_rx is being assigned twice, the second assignment
is incorrect, it should be to udc->ud.tcp_tx instead of rx. Fix this.

Fixes: 46613c9dfa96 ("usbip: fix vudc usbip_sockfd_store races leading to gpf")
Acked-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Cc: stable <stable@vger.kernel.org>
Addresses-Coverity: ("Unused value")
Link: https://lore.kernel.org/r/20210311104445.7811-1-colin.king@canonical.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/usbip/vudc_sysfs.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/usb/usbip/vudc_sysfs.c
+++ b/drivers/usb/usbip/vudc_sysfs.c
@@ -174,7 +174,7 @@ static ssize_t usbip_sockfd_store(struct
 
 		udc->ud.tcp_socket = socket;
 		udc->ud.tcp_rx = tcp_rx;
-		udc->ud.tcp_rx = tcp_tx;
+		udc->ud.tcp_tx = tcp_tx;
 		udc->ud.status = SDEV_ST_USED;
 
 		spin_unlock_irq(&udc->ud.lock);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 080/120] usb: gadget: configfs: Fix KASAN use-after-free
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (78 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 079/120] usbip: Fix incorrect double assignment to udc->ud.tcp_rx Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 081/120] usb: typec: Remove vdo[3] part of tps6598x_rx_identity_reg struct Greg Kroah-Hartman
                   ` (42 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Jim Lin, Macpaul Lin

From: Jim Lin <jilin@nvidia.com>

commit 98f153a10da403ddd5e9d98a3c8c2bb54bb5a0b6 upstream.

When gadget is disconnected, running sequence is like this.
. composite_disconnect
. Call trace:
  usb_string_copy+0xd0/0x128
  gadget_config_name_configuration_store+0x4
  gadget_config_name_attr_store+0x40/0x50
  configfs_write_file+0x198/0x1f4
  vfs_write+0x100/0x220
  SyS_write+0x58/0xa8
. configfs_composite_unbind
. configfs_composite_bind

In configfs_composite_bind, it has
"cn->strings.s = cn->configuration;"

When usb_string_copy is invoked. it would
allocate memory, copy input string, release previous pointed memory space,
and use new allocated memory.

When gadget is connected, host sends down request to get information.
Call trace:
  usb_gadget_get_string+0xec/0x168
  lookup_string+0x64/0x98
  composite_setup+0xa34/0x1ee8

If gadget is disconnected and connected quickly, in the failed case,
cn->configuration memory has been released by usb_string_copy kfree but
configfs_composite_bind hasn't been run in time to assign new allocated
"cn->configuration" pointer to "cn->strings.s".

When "strlen(s->s) of usb_gadget_get_string is being executed, the dangling
memory is accessed, "BUG: KASAN: use-after-free" error occurs.

Cc: stable@vger.kernel.org
Signed-off-by: Jim Lin <jilin@nvidia.com>
Signed-off-by: Macpaul Lin <macpaul.lin@mediatek.com>
Link: https://lore.kernel.org/r/1615444961-13376-1-git-send-email-macpaul.lin@mediatek.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/gadget/configfs.c |   14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -97,6 +97,8 @@ struct gadget_config_name {
 	struct list_head list;
 };
 
+#define USB_MAX_STRING_WITH_NULL_LEN	(USB_MAX_STRING_LEN+1)
+
 static int usb_string_copy(const char *s, char **s_copy)
 {
 	int ret;
@@ -106,12 +108,16 @@ static int usb_string_copy(const char *s
 	if (ret > USB_MAX_STRING_LEN)
 		return -EOVERFLOW;
 
-	str = kstrdup(s, GFP_KERNEL);
-	if (!str)
-		return -ENOMEM;
+	if (copy) {
+		str = copy;
+	} else {
+		str = kmalloc(USB_MAX_STRING_WITH_NULL_LEN, GFP_KERNEL);
+		if (!str)
+			return -ENOMEM;
+	}
+	strcpy(str, s);
 	if (str[ret - 1] == '\n')
 		str[ret - 1] = '\0';
-	kfree(copy);
 	*s_copy = str;
 	return 0;
 }



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 081/120] usb: typec: Remove vdo[3] part of tps6598x_rx_identity_reg struct
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (79 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 080/120] usb: gadget: configfs: Fix KASAN use-after-free Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 082/120] usb: typec: tcpm: Invoke power_supply_changed for tcpm-source-psy- Greg Kroah-Hartman
                   ` (41 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Heikki Krogerus, Guido Günther,
	Elias Rudberg

From: Elias Rudberg <mail@eliasrudberg.se>

commit 3cac9104bea41099cf622091f0c0538bcb19050d upstream.

Remove the unused "u32 vdo[3]" part in the tps6598x_rx_identity_reg
struct. This helps avoid "failed to register partner" errors which
happen when tps6598x_read_partner_identity() fails because the
amount of data read is 12 bytes smaller than the struct size.
Note that vdo[3] is already in usb_pd_identity and hence
shouldn't be added to tps6598x_rx_identity_reg as well.

Fixes: f6c56ca91b92 ("usb: typec: Add the Product Type VDOs to struct usb_pd_identity")
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Guido Günther <agx@sigxcpu.org>
Signed-off-by: Elias Rudberg <mail@eliasrudberg.se>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210311124710.6563-1-mail@eliasrudberg.se
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/typec/tps6598x.c |    1 -
 1 file changed, 1 deletion(-)

--- a/drivers/usb/typec/tps6598x.c
+++ b/drivers/usb/typec/tps6598x.c
@@ -64,7 +64,6 @@ enum {
 struct tps6598x_rx_identity_reg {
 	u8 status;
 	struct usb_pd_identity identity;
-	u32 vdo[3];
 } __packed;
 
 /* Standard Task return codes */



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 082/120] usb: typec: tcpm: Invoke power_supply_changed for tcpm-source-psy-
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (80 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 081/120] usb: typec: Remove vdo[3] part of tps6598x_rx_identity_reg struct Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 083/120] usb: dwc3: gadget: Allow runtime suspend if UDC unbinded Greg Kroah-Hartman
                   ` (40 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Guenter Roeck, Heikki Krogerus,
	Badhri Jagan Sridharan

From: Badhri Jagan Sridharan <badhri@google.com>

commit 86629e098a077922438efa98dc80917604dfd317 upstream.

tcpm-source-psy- does not invoke power_supply_changed API when
one of the published power supply properties is changed.
power_supply_changed needs to be called to notify
userspace clients(uevents) and kernel clients.

Fixes: f2a8aa053c176 ("typec: tcpm: Represent source supply through power_supply")
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210317181249.1062995-1-badhri@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/typec/tcpm/tcpm.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -797,6 +797,7 @@ static int tcpm_set_current_limit(struct
 
 	port->supply_voltage = mv;
 	port->current_limit = max_ma;
+	power_supply_changed(port->psy);
 
 	if (port->tcpc->set_current_limit)
 		ret = port->tcpc->set_current_limit(port->tcpc, max_ma, mv);
@@ -2345,6 +2346,7 @@ static int tcpm_pd_select_pdo(struct tcp
 
 	port->pps_data.supported = false;
 	port->usb_type = POWER_SUPPLY_USB_TYPE_PD;
+	power_supply_changed(port->psy);
 
 	/*
 	 * Select the source PDO providing the most power which has a
@@ -2369,6 +2371,7 @@ static int tcpm_pd_select_pdo(struct tcp
 				port->pps_data.supported = true;
 				port->usb_type =
 					POWER_SUPPLY_USB_TYPE_PD_PPS;
+				power_supply_changed(port->psy);
 			}
 			continue;
 		default:
@@ -2526,6 +2529,7 @@ static unsigned int tcpm_pd_select_pps_a
 						  port->pps_data.out_volt));
 		port->pps_data.op_curr = min(port->pps_data.max_curr,
 					     port->pps_data.op_curr);
+		power_supply_changed(port->psy);
 	}
 
 	return src_pdo;
@@ -2761,6 +2765,7 @@ static int tcpm_set_charge(struct tcpm_p
 			return ret;
 	}
 	port->vbus_charge = charge;
+	power_supply_changed(port->psy);
 	return 0;
 }
 
@@ -2935,6 +2940,7 @@ static void tcpm_reset_port(struct tcpm_
 	port->try_src_count = 0;
 	port->try_snk_count = 0;
 	port->usb_type = POWER_SUPPLY_USB_TYPE_C;
+	power_supply_changed(port->psy);
 	port->nr_sink_caps = 0;
 	port->sink_cap_done = false;
 	if (port->tcpc->enable_frs)
@@ -5129,7 +5135,7 @@ static int tcpm_psy_set_prop(struct powe
 		ret = -EINVAL;
 		break;
 	}
-
+	power_supply_changed(port->psy);
 	return ret;
 }
 
@@ -5281,6 +5287,7 @@ struct tcpm_port *tcpm_register_port(str
 	err = devm_tcpm_psy_register(port);
 	if (err)
 		goto out_role_sw_put;
+	power_supply_changed(port->psy);
 
 	port->typec_port = typec_register_port(port->dev, &port->typec_caps);
 	if (IS_ERR(port->typec_port)) {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 083/120] usb: dwc3: gadget: Allow runtime suspend if UDC unbinded
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (81 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 082/120] usb: typec: tcpm: Invoke power_supply_changed for tcpm-source-psy- Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 084/120] usb: dwc3: gadget: Prevent EP queuing while stopping transfers Greg Kroah-Hartman
                   ` (39 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Wesley Cheng

From: Wesley Cheng <wcheng@codeaurora.org>

commit 77adb8bdf4227257e26b7ff67272678e66a0b250 upstream.

The DWC3 runtime suspend routine checks for the USB connected parameter to
determine if the controller can enter into a low power state.  The
connected state is only set to false after receiving a disconnect event.
However, in the case of a device initiated disconnect (i.e. UDC unbind),
the controller is halted and a disconnect event is never generated.  Set
the connected flag to false if issuing a device initiated disconnect to
allow the controller to be suspended.

Signed-off-by: Wesley Cheng <wcheng@codeaurora.org>
Link: https://lore.kernel.org/r/1609283136-22140-2-git-send-email-wcheng@codeaurora.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/dwc3/gadget.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2126,6 +2126,17 @@ static int dwc3_gadget_pullup(struct usb
 	}
 
 	/*
+	 * Check the return value for successful resume, or error.  For a
+	 * successful resume, the DWC3 runtime PM resume routine will handle
+	 * the run stop sequence, so avoid duplicate operations here.
+	 */
+	ret = pm_runtime_get_sync(dwc->dev);
+	if (!ret || ret < 0) {
+		pm_runtime_put(dwc->dev);
+		return 0;
+	}
+
+	/*
 	 * Synchronize any pending event handling before executing the controller
 	 * halt routine.
 	 */
@@ -2163,12 +2174,14 @@ static int dwc3_gadget_pullup(struct usb
 			dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) %
 						dwc->ev_buf->length;
 		}
+		dwc->connected = false;
 	} else {
 		__dwc3_gadget_start(dwc);
 	}
 
 	ret = dwc3_gadget_run_stop(dwc, is_on, false);
 	spin_unlock_irqrestore(&dwc->lock, flags);
+	pm_runtime_put(dwc->dev);
 
 	return ret;
 }



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 084/120] usb: dwc3: gadget: Prevent EP queuing while stopping transfers
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (82 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 083/120] usb: dwc3: gadget: Allow runtime suspend if UDC unbinded Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-04-01 11:55   ` [PATCH] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers" Martin Kepplinger
  2021-03-22 12:27 ` [PATCH 5.11 085/120] thunderbolt: Initialize HopID IDAs in tb_switch_alloc() Greg Kroah-Hartman
                   ` (38 subsequent siblings)
  122 siblings, 1 reply; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Wesley Cheng

From: Wesley Cheng <wcheng@codeaurora.org>

commit f09ddcfcb8c569675066337adac2ac205113471f upstream.

In the situations where the DWC3 gadget stops active transfers, once
calling the dwc3_gadget_giveback(), there is a chance where a function
driver can queue a new USB request in between the time where the dwc3
lock has been released and re-aquired.  This occurs after we've already
issued an ENDXFER command.  When the stop active transfers continues
to remove USB requests from all dep lists, the newly added request will
also be removed, while controller still has an active TRB for it.
This can lead to the controller accessing an unmapped memory address.

Fix this by ensuring parameters to prevent EP queuing are set before
calling the stop active transfers API.

Fixes: ae7e86108b12 ("usb: dwc3: Stop active transfers before halting the controller")
Signed-off-by: Wesley Cheng <wcheng@codeaurora.org>
Link: https://lore.kernel.org/r/1615507142-23097-1-git-send-email-wcheng@codeaurora.org
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/dwc3/gadget.c |   11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -783,8 +783,6 @@ static int __dwc3_gadget_ep_disable(stru
 
 	trace_dwc3_gadget_ep_disable(dep);
 
-	dwc3_remove_requests(dwc, dep);
-
 	/* make sure HW endpoint isn't stalled */
 	if (dep->flags & DWC3_EP_STALL)
 		__dwc3_gadget_ep_set_halt(dep, 0, false);
@@ -803,6 +801,8 @@ static int __dwc3_gadget_ep_disable(stru
 		dep->endpoint.desc = NULL;
 	}
 
+	dwc3_remove_requests(dwc, dep);
+
 	return 0;
 }
 
@@ -1617,7 +1617,7 @@ static int __dwc3_gadget_ep_queue(struct
 {
 	struct dwc3		*dwc = dep->dwc;
 
-	if (!dep->endpoint.desc || !dwc->pullups_connected) {
+	if (!dep->endpoint.desc || !dwc->pullups_connected || !dwc->connected) {
 		dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n",
 				dep->name);
 		return -ESHUTDOWN;
@@ -2150,6 +2150,7 @@ static int dwc3_gadget_pullup(struct usb
 	if (!is_on) {
 		u32 count;
 
+		dwc->connected = false;
 		/*
 		 * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a
 		 * Section 4.1.8 Table 4-7, it states that for a device-initiated
@@ -2174,7 +2175,6 @@ static int dwc3_gadget_pullup(struct usb
 			dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) %
 						dwc->ev_buf->length;
 		}
-		dwc->connected = false;
 	} else {
 		__dwc3_gadget_start(dwc);
 	}
@@ -3267,8 +3267,6 @@ static void dwc3_gadget_reset_interrupt(
 {
 	u32			reg;
 
-	dwc->connected = true;
-
 	/*
 	 * WORKAROUND: DWC3 revisions <1.88a have an issue which
 	 * would cause a missing Disconnect Event if there's a
@@ -3308,6 +3306,7 @@ static void dwc3_gadget_reset_interrupt(
 	 * transfers."
 	 */
 	dwc3_stop_active_transfers(dwc);
+	dwc->connected = true;
 
 	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
 	reg &= ~DWC3_DCTL_TSTCTRL_MASK;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 085/120] thunderbolt: Initialize HopID IDAs in tb_switch_alloc()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (83 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 084/120] usb: dwc3: gadget: Prevent EP queuing while stopping transfers Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 086/120] thunderbolt: Increase runtime PM reference count on DP tunnel discovery Greg Kroah-Hartman
                   ` (37 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Chiranjeevi Rapolu, Mika Westerberg

From: Mika Westerberg <mika.westerberg@linux.intel.com>

commit 781e14eaa7d168dc07d2a2eea5c55831a5bb46f3 upstream.

If there is a failure before the tb_switch_add() is called the switch
object is released by tb_switch_release() but at that point HopID IDAs
have not yet been initialized. So we see splat like this:

BUG: spinlock bad magic on CPU#2, kworker/u8:5/115
...
Workqueue: thunderbolt0 tb_handle_hotplug
Call Trace:
 dump_stack+0x97/0xdc
 ? spin_bug+0x9a/0xa7
 do_raw_spin_lock+0x68/0x98
 _raw_spin_lock_irqsave+0x3f/0x5d
 ida_destroy+0x4f/0x127
 tb_switch_release+0x6d/0xfd
 device_release+0x2c/0x7d
 kobject_put+0x9b/0xbc
 tb_handle_hotplug+0x278/0x452
 process_one_work+0x1db/0x396
 worker_thread+0x216/0x375
 kthread+0x14d/0x155
 ? pr_cont_work+0x58/0x58
 ? kthread_blkcg+0x2e/0x2e
 ret_from_fork+0x1f/0x40

Fix this by always initializing HopID IDAs in tb_switch_alloc().

Fixes: 0b2863ac3cfd ("thunderbolt: Add functions for allocating and releasing HopIDs")
Cc: stable@vger.kernel.org
Reported-by: Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/thunderbolt/switch.c |   18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

--- a/drivers/thunderbolt/switch.c
+++ b/drivers/thunderbolt/switch.c
@@ -762,12 +762,6 @@ static int tb_init_port(struct tb_port *
 
 	tb_dump_port(port->sw->tb, &port->config);
 
-	/* Control port does not need HopID allocation */
-	if (port->port) {
-		ida_init(&port->in_hopids);
-		ida_init(&port->out_hopids);
-	}
-
 	INIT_LIST_HEAD(&port->list);
 	return 0;
 
@@ -1789,10 +1783,8 @@ static void tb_switch_release(struct dev
 	dma_port_free(sw->dma_port);
 
 	tb_switch_for_each_port(sw, port) {
-		if (!port->disabled) {
-			ida_destroy(&port->in_hopids);
-			ida_destroy(&port->out_hopids);
-		}
+		ida_destroy(&port->in_hopids);
+		ida_destroy(&port->out_hopids);
 	}
 
 	kfree(sw->uuid);
@@ -1972,6 +1964,12 @@ struct tb_switch *tb_switch_alloc(struct
 		/* minimum setup for tb_find_cap and tb_drom_read to work */
 		sw->ports[i].sw = sw;
 		sw->ports[i].port = i;
+
+		/* Control port does not need HopID allocation */
+		if (i) {
+			ida_init(&sw->ports[i].in_hopids);
+			ida_init(&sw->ports[i].out_hopids);
+		}
 	}
 
 	ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_PLUG_EVENTS);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 086/120] thunderbolt: Increase runtime PM reference count on DP tunnel discovery
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (84 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 085/120] thunderbolt: Initialize HopID IDAs in tb_switch_alloc() Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 087/120] iio:adc:stm32-adc: Add HAS_IOMEM dependency Greg Kroah-Hartman
                   ` (36 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Mika Westerberg

From: Mika Westerberg <mika.westerberg@linux.intel.com>

commit c94732bda079ee66b5c3904cbb628d0cb218ab39 upstream.

If the driver is unbound and then bound back it goes over the topology
and figure out the existing tunnels. However, if it finds DP tunnel it
should make sure the domain does not runtime suspend as otherwise it
will tear down the DP tunnel unexpectedly.

Fixes: 6ac6faee5d7d ("thunderbolt: Add runtime PM for Software CM")
Cc: stable@vger.kernel.org
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/thunderbolt/tb.c |    4 ++++
 1 file changed, 4 insertions(+)

--- a/drivers/thunderbolt/tb.c
+++ b/drivers/thunderbolt/tb.c
@@ -138,6 +138,10 @@ static void tb_discover_tunnels(struct t
 				parent->boot = true;
 				parent = tb_switch_parent(parent);
 			}
+		} else if (tb_tunnel_is_dp(tunnel)) {
+			/* Keep the domain from powering down */
+			pm_runtime_get_sync(&tunnel->src_port->sw->dev);
+			pm_runtime_get_sync(&tunnel->dst_port->sw->dev);
 		}
 
 		list_add_tail(&tunnel->list, &tcm->tunnel_list);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 087/120] iio:adc:stm32-adc: Add HAS_IOMEM dependency
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (85 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 086/120] thunderbolt: Increase runtime PM reference count on DP tunnel discovery Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 088/120] iio:adc:qcom-spmi-vadc: add default scale to LR_MUX2_BAT_ID channel Greg Kroah-Hartman
                   ` (35 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Stable, Jonathan Cameron

From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

commit 121875b28e3bd7519a675bf8ea2c2e793452c2bd upstream.

Seems that there are config combinations in which this driver gets enabled
and hence selects the MFD, but with out HAS_IOMEM getting pulled in
via some other route.  MFD is entirely contained in an
if HAS_IOMEM block, leading to the build issue in this bugzilla.

https://bugzilla.kernel.org/show_bug.cgi?id=209889

Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/20210124195034.22576-1-jic23@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/adc/Kconfig |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -923,6 +923,7 @@ config STM32_ADC_CORE
 	depends on ARCH_STM32 || COMPILE_TEST
 	depends on OF
 	depends on REGULATOR
+	depends on HAS_IOMEM
 	select IIO_BUFFER
 	select MFD_STM32_TIMERS
 	select IIO_STM32_TIMER_TRIGGER



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 088/120] iio:adc:qcom-spmi-vadc: add default scale to LR_MUX2_BAT_ID channel
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (86 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 087/120] iio:adc:stm32-adc: Add HAS_IOMEM dependency Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 089/120] iio: adis16400: Fix an error code in adis16400_initial_setup() Greg Kroah-Hartman
                   ` (34 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jonathan Albrieux, Bjorn Andersson,
	Stable, Jonathan Cameron

From: Jonathan Albrieux <jonathan.albrieux@gmail.com>

commit 7d200b283aa049fcda0d43dd6e03e9e783d2799c upstream.

Checking at both msm8909-pm8916.dtsi and msm8916.dtsi from downstream
it is indicated that "batt_id" channel has to be scaled with the default
function:

	chan@31 {
		label = "batt_id";
		reg = <0x31>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <0>;
		qcom,hw-settle-time = <0xb>;
		qcom,fast-avg-setup = <0>;
	};

Change LR_MUX2_BAT_ID scaling accordingly.

Signed-off-by: Jonathan Albrieux <jonathan.albrieux@gmail.com>
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Fixes: 7c271eea7b8a ("iio: adc: spmi-vadc: Changes to support different scaling")
Link: https://lore.kernel.org/r/20210113151808.4628-2-jonathan.albrieux@gmail.com
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/adc/qcom-spmi-vadc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/iio/adc/qcom-spmi-vadc.c
+++ b/drivers/iio/adc/qcom-spmi-vadc.c
@@ -598,7 +598,7 @@ static const struct vadc_channels vadc_c
 	VADC_CHAN_NO_SCALE(P_MUX16_1_3, 1)
 
 	VADC_CHAN_NO_SCALE(LR_MUX1_BAT_THERM, 0)
-	VADC_CHAN_NO_SCALE(LR_MUX2_BAT_ID, 0)
+	VADC_CHAN_VOLT(LR_MUX2_BAT_ID, 0, SCALE_DEFAULT)
 	VADC_CHAN_NO_SCALE(LR_MUX3_XO_THERM, 0)
 	VADC_CHAN_NO_SCALE(LR_MUX4_AMUX_THM1, 0)
 	VADC_CHAN_NO_SCALE(LR_MUX5_AMUX_THM2, 0)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 089/120] iio: adis16400: Fix an error code in adis16400_initial_setup()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (87 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 088/120] iio:adc:qcom-spmi-vadc: add default scale to LR_MUX2_BAT_ID channel Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 090/120] iio: gyro: mpu3050: Fix error handling in mpu3050_trigger_handler Greg Kroah-Hartman
                   ` (33 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dan Carpenter, Stable, Jonathan Cameron

From: Dan Carpenter <dan.carpenter@oracle.com>

commit a71266e454b5df10d019b06f5ebacd579f76be28 upstream.

This is to silence a new Smatch warning:

    drivers/iio/imu/adis16400.c:492 adis16400_initial_setup()
    warn: sscanf doesn't return error codes

If the condition "if (st->variant->flags & ADIS16400_HAS_SLOW_MODE) {"
is false then we return 1 instead of returning 0 and probe will fail.

Fixes: 72a868b38bdd ("iio: imu: check sscanf return value")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: <Stable@vger.kernel.org>
Link: https://lore.kernel.org/r/YCwgFb3JVG6qrlQ+@mwanda
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/imu/adis16400.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/drivers/iio/imu/adis16400.c
+++ b/drivers/iio/imu/adis16400.c
@@ -462,8 +462,7 @@ static int adis16400_initial_setup(struc
 		if (ret)
 			goto err_ret;
 
-		ret = sscanf(indio_dev->name, "adis%u\n", &device_id);
-		if (ret != 1) {
+		if (sscanf(indio_dev->name, "adis%u\n", &device_id) != 1) {
 			ret = -EINVAL;
 			goto err_ret;
 		}



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 090/120] iio: gyro: mpu3050: Fix error handling in mpu3050_trigger_handler
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (88 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 089/120] iio: adis16400: Fix an error code in adis16400_initial_setup() Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 091/120] iio: adc: ab8500-gpadc: Fix off by 10 to 3 Greg Kroah-Hartman
                   ` (32 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dinghao Liu, Linus Walleij, Stable,
	Jonathan Cameron

From: Dinghao Liu <dinghao.liu@zju.edu.cn>

commit 6dbbbe4cfd398704b72b21c1d4a5d3807e909d60 upstream.

There is one regmap_bulk_read() call in mpu3050_trigger_handler
that we have caught its return value bug lack further handling.
Check and terminate the execution flow just like the other three
regmap_bulk_read() calls in this function.

Fixes: 3904b28efb2c7 ("iio: gyro: Add driver for the MPU-3050 gyroscope")
Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20210301080421.13436-1-dinghao.liu@zju.edu.cn
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/gyro/mpu3050-core.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/iio/gyro/mpu3050-core.c
+++ b/drivers/iio/gyro/mpu3050-core.c
@@ -551,6 +551,8 @@ static irqreturn_t mpu3050_trigger_handl
 					       MPU3050_FIFO_R,
 					       &fifo_values[offset],
 					       toread);
+			if (ret)
+				goto out_trigger_unlock;
 
 			dev_dbg(mpu3050->dev,
 				"%04x %04x %04x %04x %04x\n",



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 091/120] iio: adc: ab8500-gpadc: Fix off by 10 to 3
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (89 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 090/120] iio: gyro: mpu3050: Fix error handling in mpu3050_trigger_handler Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 092/120] iio: adc: ad7949: fix wrong ADC result due to incorrect bit mask Greg Kroah-Hartman
                   ` (31 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Linus Walleij, Jonathan Cameron

From: Linus Walleij <linus.walleij@linaro.org>

commit 4f5434086d9223f20b3128a7dc78b35271e76655 upstream.

Fix an off by three orders of magnitude error in the AB8500
GPADC driver. Luckily it showed up quite quickly when trying
to make use of it. The processed reads were returning
microvolts, microamperes and microcelsius instead of millivolts,
milliamperes and millicelsius as advertised.

Cc: stable@vger.kernel.org
Fixes: 07063bbfa98e ("iio: adc: New driver for the AB8500 GPADC")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20201224011700.1059659-1-linus.walleij@linaro.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/adc/ab8500-gpadc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/iio/adc/ab8500-gpadc.c
+++ b/drivers/iio/adc/ab8500-gpadc.c
@@ -918,7 +918,7 @@ static int ab8500_gpadc_read_raw(struct
 			return processed;
 
 		/* Return millivolt or milliamps or millicentigrades */
-		*val = processed * 1000;
+		*val = processed;
 		return IIO_VAL_INT;
 	}
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 092/120] iio: adc: ad7949: fix wrong ADC result due to incorrect bit mask
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (90 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 091/120] iio: adc: ab8500-gpadc: Fix off by 10 to 3 Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 093/120] iio: adc: adi-axi-adc: add proper Kconfig dependencies Greg Kroah-Hartman
                   ` (30 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Wilfried Wessner, Andy Shevchenko,
	Charles-Antoine Couret, Stable, Jonathan Cameron

From: Wilfried Wessner <wilfried.wessner@gmail.com>

commit f890987fac8153227258121740a9609668c427f3 upstream.

Fixes a wrong bit mask used for the ADC's result, which was caused by an
improper usage of the GENMASK() macro. The bits higher than ADC's
resolution are undefined and if not masked out correctly, a wrong result
can be given. The GENMASK() macro indexing is zero based, so the mask has
to go from [resolution - 1 , 0].

Fixes: 7f40e0614317f ("iio:adc:ad7949: Add AD7949 ADC driver family")
Signed-off-by: Wilfried Wessner <wilfried.wessner@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Charles-Antoine Couret <charles-antoine.couret@essensium.com>
Cc: <Stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210208142705.GA51260@ubuntu
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/adc/ad7949.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/iio/adc/ad7949.c
+++ b/drivers/iio/adc/ad7949.c
@@ -91,7 +91,7 @@ static int ad7949_spi_read_channel(struc
 	int ret;
 	int i;
 	int bits_per_word = ad7949_adc->resolution;
-	int mask = GENMASK(ad7949_adc->resolution, 0);
+	int mask = GENMASK(ad7949_adc->resolution - 1, 0);
 	struct spi_message msg;
 	struct spi_transfer tx[] = {
 		{



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 093/120] iio: adc: adi-axi-adc: add proper Kconfig dependencies
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (91 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 092/120] iio: adc: ad7949: fix wrong ADC result due to incorrect bit mask Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-24 17:01   ` Richard Narron
  2021-03-25  5:55   ` Richard Narron
  2021-03-22 12:27 ` [PATCH 5.11 094/120] iio: hid-sensor-humidity: Fix alignment issue of timestamp channel Greg Kroah-Hartman
                   ` (29 subsequent siblings)
  122 siblings, 2 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, kernel test robot,
	Alexandru Ardelean, Stable, Jonathan Cameron

From: Alexandru Ardelean <alexandru.ardelean@analog.com>

commit be24c65e9fa2486bb8ec98d9f592bdcf04bedd88 upstream.

The ADI AXI ADC driver requires IO mem access and OF to work. This change
adds these dependencies to the Kconfig symbol of the driver.

This was also found via the lkp bot, as the
devm_platform_ioremap_resource() symbol was not found at link-time on the
S390 architecture.

Fixes: ef04070692a21 ("iio: adc: adi-axi-adc: add support for AXI ADC IP core")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
Cc: <Stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210210105044.48914-1-alexandru.ardelean@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/adc/Kconfig |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -266,6 +266,8 @@ config ADI_AXI_ADC
 	select IIO_BUFFER
 	select IIO_BUFFER_HW_CONSUMER
 	select IIO_BUFFER_DMAENGINE
+	depends on HAS_IOMEM
+	depends on OF
 	help
 	  Say yes here to build support for Analog Devices Generic
 	  AXI ADC IP core. The IP core is used for interfacing with



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 094/120] iio: hid-sensor-humidity: Fix alignment issue of timestamp channel
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (92 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 093/120] iio: adc: adi-axi-adc: add proper Kconfig dependencies Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 095/120] iio: hid-sensor-prox: Fix scale not correct issue Greg Kroah-Hartman
                   ` (28 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ye Xiang, Stable, Jonathan Cameron

From: Ye Xiang <xiang.ye@intel.com>

commit 37e89e574dc238a4ebe439543c5ab4fbb2f0311b upstream.

This patch ensures that, there is sufficient space and correct
alignment for the timestamp.

Fixes: d7ed89d5aadf ("iio: hid: Add humidity sensor support")
Signed-off-by: Ye Xiang <xiang.ye@intel.com>
Cc: <Stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210303063615.12130-2-xiang.ye@intel.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/humidity/hid-sensor-humidity.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

--- a/drivers/iio/humidity/hid-sensor-humidity.c
+++ b/drivers/iio/humidity/hid-sensor-humidity.c
@@ -15,7 +15,10 @@
 struct hid_humidity_state {
 	struct hid_sensor_common common_attributes;
 	struct hid_sensor_hub_attribute_info humidity_attr;
-	s32 humidity_data;
+	struct {
+		s32 humidity_data;
+		u64 timestamp __aligned(8);
+	} scan;
 	int scale_pre_decml;
 	int scale_post_decml;
 	int scale_precision;
@@ -125,9 +128,8 @@ static int humidity_proc_event(struct hi
 	struct hid_humidity_state *humid_st = iio_priv(indio_dev);
 
 	if (atomic_read(&humid_st->common_attributes.data_ready))
-		iio_push_to_buffers_with_timestamp(indio_dev,
-					&humid_st->humidity_data,
-					iio_get_time_ns(indio_dev));
+		iio_push_to_buffers_with_timestamp(indio_dev, &humid_st->scan,
+						   iio_get_time_ns(indio_dev));
 
 	return 0;
 }
@@ -142,7 +144,7 @@ static int humidity_capture_sample(struc
 
 	switch (usage_id) {
 	case HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY:
-		humid_st->humidity_data = *(s32 *)raw_data;
+		humid_st->scan.humidity_data = *(s32 *)raw_data;
 
 		return 0;
 	default:



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 095/120] iio: hid-sensor-prox: Fix scale not correct issue
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (93 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 094/120] iio: hid-sensor-humidity: Fix alignment issue of timestamp channel Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:27 ` [PATCH 5.11 096/120] iio: hid-sensor-temperature: Fix issues of timestamp channel Greg Kroah-Hartman
                   ` (27 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ye Xiang, Stable, Jonathan Cameron

From: Ye Xiang <xiang.ye@intel.com>

commit d68c592e02f6f49a88e705f13dfc1883432cf300 upstream.

Currently, the proxy sensor scale is zero because it just return the
exponent directly. To fix this issue, this patch use
hid_sensor_format_scale to process the scale first then return the
output.

Fixes: 39a3a0138f61 ("iio: hid-sensors: Added Proximity Sensor Driver")
Signed-off-by: Ye Xiang <xiang.ye@intel.com>
Link: https://lore.kernel.org/r/20210130102530.31064-1-xiang.ye@intel.com
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/light/hid-sensor-prox.c |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

--- a/drivers/iio/light/hid-sensor-prox.c
+++ b/drivers/iio/light/hid-sensor-prox.c
@@ -23,6 +23,9 @@ struct prox_state {
 	struct hid_sensor_common common_attributes;
 	struct hid_sensor_hub_attribute_info prox_attr;
 	u32 human_presence;
+	int scale_pre_decml;
+	int scale_post_decml;
+	int scale_precision;
 };
 
 /* Channel definitions */
@@ -93,8 +96,9 @@ static int prox_read_raw(struct iio_dev
 		ret_type = IIO_VAL_INT;
 		break;
 	case IIO_CHAN_INFO_SCALE:
-		*val = prox_state->prox_attr.units;
-		ret_type = IIO_VAL_INT;
+		*val = prox_state->scale_pre_decml;
+		*val2 = prox_state->scale_post_decml;
+		ret_type = prox_state->scale_precision;
 		break;
 	case IIO_CHAN_INFO_OFFSET:
 		*val = hid_sensor_convert_exponent(
@@ -234,6 +238,11 @@ static int prox_parse_report(struct plat
 			HID_USAGE_SENSOR_HUMAN_PRESENCE,
 			&st->common_attributes.sensitivity);
 
+	st->scale_precision = hid_sensor_format_scale(
+				hsdev->usage,
+				&st->prox_attr,
+				&st->scale_pre_decml, &st->scale_post_decml);
+
 	return ret;
 }
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 096/120] iio: hid-sensor-temperature: Fix issues of timestamp channel
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (94 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 095/120] iio: hid-sensor-prox: Fix scale not correct issue Greg Kroah-Hartman
@ 2021-03-22 12:27 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 097/120] counter: stm32-timer-cnt: fix ceiling write max value Greg Kroah-Hartman
                   ` (26 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ye Xiang, Stable, Jonathan Cameron

From: Ye Xiang <xiang.ye@intel.com>

commit 141e7633aa4d2838d1f6ad5c74cccc53547c16ac upstream.

This patch fixes 2 issues of timestamp channel:
1. This patch ensures that there is sufficient space and correct
alignment for the timestamp.
2. Correct the timestamp channel scan index.

Fixes: 59d0f2da3569 ("iio: hid: Add temperature sensor support")
Signed-off-by: Ye Xiang <xiang.ye@intel.com>
Cc: <Stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210303063615.12130-4-xiang.ye@intel.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/iio/temperature/hid-sensor-temperature.c |   14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

--- a/drivers/iio/temperature/hid-sensor-temperature.c
+++ b/drivers/iio/temperature/hid-sensor-temperature.c
@@ -15,7 +15,10 @@
 struct temperature_state {
 	struct hid_sensor_common common_attributes;
 	struct hid_sensor_hub_attribute_info temperature_attr;
-	s32 temperature_data;
+	struct {
+		s32 temperature_data;
+		u64 timestamp __aligned(8);
+	} scan;
 	int scale_pre_decml;
 	int scale_post_decml;
 	int scale_precision;
@@ -32,7 +35,7 @@ static const struct iio_chan_spec temper
 			BIT(IIO_CHAN_INFO_SAMP_FREQ) |
 			BIT(IIO_CHAN_INFO_HYSTERESIS),
 	},
-	IIO_CHAN_SOFT_TIMESTAMP(3),
+	IIO_CHAN_SOFT_TIMESTAMP(1),
 };
 
 /* Adjust channel real bits based on report descriptor */
@@ -123,9 +126,8 @@ static int temperature_proc_event(struct
 	struct temperature_state *temp_st = iio_priv(indio_dev);
 
 	if (atomic_read(&temp_st->common_attributes.data_ready))
-		iio_push_to_buffers_with_timestamp(indio_dev,
-				&temp_st->temperature_data,
-				iio_get_time_ns(indio_dev));
+		iio_push_to_buffers_with_timestamp(indio_dev, &temp_st->scan,
+						   iio_get_time_ns(indio_dev));
 
 	return 0;
 }
@@ -140,7 +142,7 @@ static int temperature_capture_sample(st
 
 	switch (usage_id) {
 	case HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE:
-		temp_st->temperature_data = *(s32 *)raw_data;
+		temp_st->scan.temperature_data = *(s32 *)raw_data;
 		return 0;
 	default:
 		return -EINVAL;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 097/120] counter: stm32-timer-cnt: fix ceiling write max value
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (95 preceding siblings ...)
  2021-03-22 12:27 ` [PATCH 5.11 096/120] iio: hid-sensor-temperature: Fix issues of timestamp channel Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 098/120] counter: stm32-timer-cnt: fix ceiling miss-alignment with reload register Greg Kroah-Hartman
                   ` (25 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Fabrice Gasnier,
	William Breathitt Gray, Stable, Jonathan Cameron

From: Fabrice Gasnier <fabrice.gasnier@foss.st.com>

commit e4c3e133294c0a292d21073899b05ebf530169bd upstream.

The ceiling value isn't checked before writing it into registers. The user
could write a value higher than the counter resolution (e.g. 16 or 32 bits
indicated by max_arr). This makes most significant bits to be truncated.
Fix it by checking the max_arr to report a range error [1] to the user.

[1] https://lkml.org/lkml/2021/2/12/358

Fixes: ad29937e206f ("counter: Add STM32 Timer quadrature encoder")
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
Cc: <Stable@vger.kernel.org>
Link: https://lore.kernel.org/r/1614696235-24088-1-git-send-email-fabrice.gasnier@foss.st.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/counter/stm32-timer-cnt.c |    5 +++++
 1 file changed, 5 insertions(+)

--- a/drivers/counter/stm32-timer-cnt.c
+++ b/drivers/counter/stm32-timer-cnt.c
@@ -32,6 +32,7 @@ struct stm32_timer_cnt {
 	struct regmap *regmap;
 	struct clk *clk;
 	u32 ceiling;
+	u32 max_arr;
 	bool enabled;
 	struct stm32_timer_regs bak;
 };
@@ -191,6 +192,9 @@ static ssize_t stm32_count_ceiling_write
 	if (ret)
 		return ret;
 
+	if (ceiling > priv->max_arr)
+		return -ERANGE;
+
 	/* TIMx_ARR register shouldn't be buffered (ARPE=0) */
 	regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
 	regmap_write(priv->regmap, TIM_ARR, ceiling);
@@ -371,6 +375,7 @@ static int stm32_timer_cnt_probe(struct
 	priv->regmap = ddata->regmap;
 	priv->clk = ddata->clk;
 	priv->ceiling = ddata->max_arr;
+	priv->max_arr = ddata->max_arr;
 
 	priv->counter.name = dev_name(dev);
 	priv->counter.parent = dev;



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 098/120] counter: stm32-timer-cnt: fix ceiling miss-alignment with reload register
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (96 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 097/120] counter: stm32-timer-cnt: fix ceiling write max value Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 099/120] PCI: rpadlpar: Fix potential drc_name corruption in store functions Greg Kroah-Hartman
                   ` (24 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, William Breathitt Gray,
	Fabrice Gasnier, Stable, Jonathan Cameron

From: Fabrice Gasnier <fabrice.gasnier@foss.st.com>

commit b14d72ac731753708a7c1a6b3657b9312b6f0042 upstream.

Ceiling value may be miss-aligned with what's actually configured into the
ARR register. This is seen after probe as currently the ARR value is zero,
whereas ceiling value is set to the maximum. So:
- reading ceiling reports zero
- in case the counter gets enabled without any prior configuration,
  it won't count.
- in case the function gets set by the user 1st, (priv->ceiling) is used.

Fix it by getting rid of the cached "priv->ceiling" variable. Rather use
the ARR register value directly by using regmap read or write when needed.
There should be no drawback on performance as priv->ceiling isn't used in
performance critical path.
There's also no point in writing ARR while setting function (sms), so
it can be safely removed.

Fixes: ad29937e206f ("counter: Add STM32 Timer quadrature encoder")
Suggested-by: William Breathitt Gray <vilhelm.gray@gmail.com>
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
Cc: <Stable@vger.kernel.org>
Link: https://lore.kernel.org/r/1614793789-10346-1-git-send-email-fabrice.gasnier@foss.st.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/counter/stm32-timer-cnt.c |   11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

--- a/drivers/counter/stm32-timer-cnt.c
+++ b/drivers/counter/stm32-timer-cnt.c
@@ -31,7 +31,6 @@ struct stm32_timer_cnt {
 	struct counter_device counter;
 	struct regmap *regmap;
 	struct clk *clk;
-	u32 ceiling;
 	u32 max_arr;
 	bool enabled;
 	struct stm32_timer_regs bak;
@@ -75,8 +74,10 @@ static int stm32_count_write(struct coun
 			     const unsigned long val)
 {
 	struct stm32_timer_cnt *const priv = counter->priv;
+	u32 ceiling;
 
-	if (val > priv->ceiling)
+	regmap_read(priv->regmap, TIM_ARR, &ceiling);
+	if (val > ceiling)
 		return -EINVAL;
 
 	return regmap_write(priv->regmap, TIM_CNT, val);
@@ -138,10 +139,6 @@ static int stm32_count_function_set(stru
 
 	regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
 
-	/* TIMx_ARR register shouldn't be buffered (ARPE=0) */
-	regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
-	regmap_write(priv->regmap, TIM_ARR, priv->ceiling);
-
 	regmap_update_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS, sms);
 
 	/* Make sure that registers are updated */
@@ -199,7 +196,6 @@ static ssize_t stm32_count_ceiling_write
 	regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
 	regmap_write(priv->regmap, TIM_ARR, ceiling);
 
-	priv->ceiling = ceiling;
 	return len;
 }
 
@@ -374,7 +370,6 @@ static int stm32_timer_cnt_probe(struct
 
 	priv->regmap = ddata->regmap;
 	priv->clk = ddata->clk;
-	priv->ceiling = ddata->max_arr;
 	priv->max_arr = ddata->max_arr;
 
 	priv->counter.name = dev_name(dev);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 099/120] PCI: rpadlpar: Fix potential drc_name corruption in store functions
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (97 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 098/120] counter: stm32-timer-cnt: fix ceiling miss-alignment with reload register Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 100/120] perf/x86/intel: Fix a crash caused by zero PEBS status Greg Kroah-Hartman
                   ` (23 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Tyrel Datwyler, Michael Ellerman

From: Tyrel Datwyler <tyreld@linux.ibm.com>

commit cc7a0bb058b85ea03db87169c60c7cfdd5d34678 upstream.

Both add_slot_store() and remove_slot_store() try to fix up the
drc_name copied from the store buffer by placing a NUL terminator at
nbyte + 1 or in place of a '\n' if present. However, the static buffer
that we copy the drc_name data into is not zeroed and can contain
anything past the n-th byte.

This is problematic if a '\n' byte appears in that buffer after nbytes
and the string copied into the store buffer was not NUL terminated to
start with as the strchr() search for a '\n' byte will mark this
incorrectly as the end of the drc_name string resulting in a drc_name
string that contains garbage data after the n-th byte.

Additionally it will cause us to overwrite that '\n' byte on the stack
with NUL, potentially corrupting data on the stack.

The following debugging shows an example of the drmgr utility writing
"PHB 4543" to the add_slot sysfs attribute, but add_slot_store()
logging a corrupted string value.

  drmgr: drmgr: -c phb -a -s PHB 4543 -d 1
  add_slot_store: drc_name = PHB 4543°|<82>!, rc = -19

Fix this by using strscpy() instead of memcpy() to ensure the string
is NUL terminated when copied into the static drc_name buffer.
Further, since the string is now NUL terminated the code only needs to
change '\n' to '\0' when present.

Cc: stable@vger.kernel.org
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
[mpe: Reformat change log and add mention of possible stack corruption]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210315214821.452959-1-tyreld@linux.ibm.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/pci/hotplug/rpadlpar_sysfs.c |   14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

--- a/drivers/pci/hotplug/rpadlpar_sysfs.c
+++ b/drivers/pci/hotplug/rpadlpar_sysfs.c
@@ -34,12 +34,11 @@ static ssize_t add_slot_store(struct kob
 	if (nbytes >= MAX_DRC_NAME_LEN)
 		return 0;
 
-	memcpy(drc_name, buf, nbytes);
+	strscpy(drc_name, buf, nbytes + 1);
 
 	end = strchr(drc_name, '\n');
-	if (!end)
-		end = &drc_name[nbytes];
-	*end = '\0';
+	if (end)
+		*end = '\0';
 
 	rc = dlpar_add_slot(drc_name);
 	if (rc)
@@ -65,12 +64,11 @@ static ssize_t remove_slot_store(struct
 	if (nbytes >= MAX_DRC_NAME_LEN)
 		return 0;
 
-	memcpy(drc_name, buf, nbytes);
+	strscpy(drc_name, buf, nbytes + 1);
 
 	end = strchr(drc_name, '\n');
-	if (!end)
-		end = &drc_name[nbytes];
-	*end = '\0';
+	if (end)
+		*end = '\0';
 
 	rc = dlpar_remove_slot(drc_name);
 	if (rc)



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 100/120] perf/x86/intel: Fix a crash caused by zero PEBS status
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (98 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 099/120] PCI: rpadlpar: Fix potential drc_name corruption in store functions Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 101/120] perf/x86/intel: Fix unchecked MSR access error caused by VLBR_EVENT Greg Kroah-Hartman
                   ` (22 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Vince Weaver, Peter Zijlstra (Intel),
	Kan Liang

From: Kan Liang <kan.liang@linux.intel.com>

commit d88d05a9e0b6d9356e97129d4ff9942d765f46ea upstream.

A repeatable crash can be triggered by the perf_fuzzer on some Haswell
system.
https://lore.kernel.org/lkml/7170d3b-c17f-1ded-52aa-cc6d9ae999f4@maine.edu/

For some old CPUs (HSW and earlier), the PEBS status in a PEBS record
may be mistakenly set to 0. To minimize the impact of the defect, the
commit was introduced to try to avoid dropping the PEBS record for some
cases. It adds a check in the intel_pmu_drain_pebs_nhm(), and updates
the local pebs_status accordingly. However, it doesn't correct the PEBS
status in the PEBS record, which may trigger the crash, especially for
the large PEBS.

It's possible that all the PEBS records in a large PEBS have the PEBS
status 0. If so, the first get_next_pebs_record_by_bit() in the
__intel_pmu_pebs_event() returns NULL. The at = NULL. Since it's a large
PEBS, the 'count' parameter must > 1. The second
get_next_pebs_record_by_bit() will crash.

Besides the local pebs_status, correct the PEBS status in the PEBS
record as well.

Fixes: 01330d7288e0 ("perf/x86: Allow zero PEBS status with only single active event")
Reported-by: Vince Weaver <vincent.weaver@maine.edu>
Suggested-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/1615555298-140216-1-git-send-email-kan.liang@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/events/intel/ds.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/events/intel/ds.c
+++ b/arch/x86/events/intel/ds.c
@@ -1899,7 +1899,7 @@ static void intel_pmu_drain_pebs_nhm(str
 		 */
 		if (!pebs_status && cpuc->pebs_enabled &&
 			!(cpuc->pebs_enabled & (cpuc->pebs_enabled-1)))
-			pebs_status = cpuc->pebs_enabled;
+			pebs_status = p->status = cpuc->pebs_enabled;
 
 		bit = find_first_bit((unsigned long *)&pebs_status,
 					x86_pmu.max_pebs_events);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 101/120] perf/x86/intel: Fix unchecked MSR access error caused by VLBR_EVENT
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (99 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 100/120] perf/x86/intel: Fix a crash caused by zero PEBS status Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 102/120] x86/ioapic: Ignore IRQ2 again Greg Kroah-Hartman
                   ` (21 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Vince Weaver, Kan Liang,
	Peter Zijlstra (Intel)

From: Kan Liang <kan.liang@linux.intel.com>

commit 2dc0572f2cef87425147658698dce2600b799bd3 upstream.

On a Haswell machine, the perf_fuzzer managed to trigger this message:

[117248.075892] unchecked MSR access error: WRMSR to 0x3f1 (tried to
write 0x0400000000000000) at rIP: 0xffffffff8106e4f4
(native_write_msr+0x4/0x20)
[117248.089957] Call Trace:
[117248.092685]  intel_pmu_pebs_enable_all+0x31/0x40
[117248.097737]  intel_pmu_enable_all+0xa/0x10
[117248.102210]  __perf_event_task_sched_in+0x2df/0x2f0
[117248.107511]  finish_task_switch.isra.0+0x15f/0x280
[117248.112765]  schedule_tail+0xc/0x40
[117248.116562]  ret_from_fork+0x8/0x30

A fake event called VLBR_EVENT may use the bit 58 of the PEBS_ENABLE, if
the precise_ip is set. The bit 58 is reserved by the HW. Accessing the
bit causes the unchecked MSR access error.

The fake event doesn't support PEBS. The case should be rejected.

Fixes: 097e4311cda9 ("perf/x86: Add constraint to create guest LBR event without hw counter")
Reported-by: Vince Weaver <vincent.weaver@maine.edu>
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/1615555298-140216-2-git-send-email-kan.liang@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/events/intel/core.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -3575,6 +3575,9 @@ static int intel_pmu_hw_config(struct pe
 		return ret;
 
 	if (event->attr.precise_ip) {
+		if ((event->attr.config & INTEL_ARCH_EVENT_MASK) == INTEL_FIXED_VLBR_EVENT)
+			return -EINVAL;
+
 		if (!(event->attr.freq || (event->attr.wakeup_events && !event->attr.watermark))) {
 			event->hw.flags |= PERF_X86_EVENT_AUTO_RELOAD;
 			if (!(event->attr.sample_type &



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 102/120] x86/ioapic: Ignore IRQ2 again
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (100 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 101/120] perf/x86/intel: Fix unchecked MSR access error caused by VLBR_EVENT Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 103/120] kernel, fs: Introduce and use set_restart_fn() and arch_set_restart_data() Greg Kroah-Hartman
                   ` (20 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Vitaly Kuznetsov, Thomas Gleixner

From: Thomas Gleixner <tglx@linutronix.de>

commit a501b048a95b79e1e34f03cac3c87ff1e9f229ad upstream.

Vitaly ran into an issue with hotplugging CPU0 on an Amazon instance where
the matrix allocator claimed to be out of vectors. He analyzed it down to
the point that IRQ2, the PIC cascade interrupt, which is supposed to be not
ever routed to the IO/APIC ended up having an interrupt vector assigned
which got moved during unplug of CPU0.

The underlying issue is that IRQ2 for various reasons (see commit
af174783b925 ("x86: I/O APIC: Never configure IRQ2" for details) is treated
as a reserved system vector by the vector core code and is not accounted as
a regular vector. The Amazon BIOS has an routing entry of pin2 to IRQ2
which causes the IO/APIC setup to claim that interrupt which is granted by
the vector domain because there is no sanity check. As a consequence the
allocation counter of CPU0 underflows which causes a subsequent unplug to
fail with:

  [ ... ] CPU 0 has 4294967295 vectors, 589 available. Cannot disable CPU

There is another sanity check missing in the matrix allocator, but the
underlying root cause is that the IO/APIC code lost the IRQ2 ignore logic
during the conversion to irqdomains.

For almost 6 years nobody complained about this wreckage, which might
indicate that this requirement could be lifted, but for any system which
actually has a PIC IRQ2 is unusable by design so any routing entry has no
effect and the interrupt cannot be connected to a device anyway.

Due to that and due to history biased paranoia reasons restore the IRQ2
ignore logic and treat it as non existent despite a routing entry claiming
otherwise.

Fixes: d32932d02e18 ("x86/irq: Convert IOAPIC to use hierarchical irqdomain interfaces")
Reported-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20210318192819.636943062@linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/apic/io_apic.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1032,6 +1032,16 @@ static int mp_map_pin_to_irq(u32 gsi, in
 	if (idx >= 0 && test_bit(mp_irqs[idx].srcbus, mp_bus_not_pci)) {
 		irq = mp_irqs[idx].srcbusirq;
 		legacy = mp_is_legacy_irq(irq);
+		/*
+		 * IRQ2 is unusable for historical reasons on systems which
+		 * have a legacy PIC. See the comment vs. IRQ2 further down.
+		 *
+		 * If this gets removed at some point then the related code
+		 * in lapic_assign_system_vectors() needs to be adjusted as
+		 * well.
+		 */
+		if (legacy && irq == PIC_CASCADE_IR)
+			return -EINVAL;
 	}
 
 	mutex_lock(&ioapic_mutex);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 103/120] kernel, fs: Introduce and use set_restart_fn() and arch_set_restart_data()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (101 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 102/120] x86/ioapic: Ignore IRQ2 again Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 104/120] x86: Move TS_COMPAT back to asm/thread_info.h Greg Kroah-Hartman
                   ` (19 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Oleg Nesterov, Thomas Gleixner

From: Oleg Nesterov <oleg@redhat.com>

commit 5abbe51a526253b9f003e9a0a195638dc882d660 upstream.

Preparation for fixing get_nr_restart_syscall() on X86 for COMPAT.

Add a new helper which sets restart_block->fn and calls a dummy
arch_set_restart_data() helper.

Fixes: 609c19a385c8 ("x86/ptrace: Stop setting TS_COMPAT in ptrace code")
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20210201174641.GA17871@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/select.c                    |   10 ++++------
 include/linux/thread_info.h    |   13 +++++++++++++
 kernel/futex.c                 |    3 +--
 kernel/time/alarmtimer.c       |    2 +-
 kernel/time/hrtimer.c          |    2 +-
 kernel/time/posix-cpu-timers.c |    2 +-
 6 files changed, 21 insertions(+), 11 deletions(-)

--- a/fs/select.c
+++ b/fs/select.c
@@ -1055,10 +1055,9 @@ static long do_restart_poll(struct resta
 
 	ret = do_sys_poll(ufds, nfds, to);
 
-	if (ret == -ERESTARTNOHAND) {
-		restart_block->fn = do_restart_poll;
-		ret = -ERESTART_RESTARTBLOCK;
-	}
+	if (ret == -ERESTARTNOHAND)
+		ret = set_restart_fn(restart_block, do_restart_poll);
+
 	return ret;
 }
 
@@ -1080,7 +1079,6 @@ SYSCALL_DEFINE3(poll, struct pollfd __us
 		struct restart_block *restart_block;
 
 		restart_block = &current->restart_block;
-		restart_block->fn = do_restart_poll;
 		restart_block->poll.ufds = ufds;
 		restart_block->poll.nfds = nfds;
 
@@ -1091,7 +1089,7 @@ SYSCALL_DEFINE3(poll, struct pollfd __us
 		} else
 			restart_block->poll.has_timeout = 0;
 
-		ret = -ERESTART_RESTARTBLOCK;
+		ret = set_restart_fn(restart_block, do_restart_poll);
 	}
 	return ret;
 }
--- a/include/linux/thread_info.h
+++ b/include/linux/thread_info.h
@@ -11,6 +11,7 @@
 #include <linux/types.h>
 #include <linux/bug.h>
 #include <linux/restart_block.h>
+#include <linux/errno.h>
 
 #ifdef CONFIG_THREAD_INFO_IN_TASK
 /*
@@ -59,6 +60,18 @@ enum syscall_work_bit {
 
 #ifdef __KERNEL__
 
+#ifndef arch_set_restart_data
+#define arch_set_restart_data(restart) do { } while (0)
+#endif
+
+static inline long set_restart_fn(struct restart_block *restart,
+					long (*fn)(struct restart_block *))
+{
+	restart->fn = fn;
+	arch_set_restart_data(restart);
+	return -ERESTART_RESTARTBLOCK;
+}
+
 #ifndef THREAD_ALIGN
 #define THREAD_ALIGN	THREAD_SIZE
 #endif
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -2728,14 +2728,13 @@ retry:
 		goto out;
 
 	restart = &current->restart_block;
-	restart->fn = futex_wait_restart;
 	restart->futex.uaddr = uaddr;
 	restart->futex.val = val;
 	restart->futex.time = *abs_time;
 	restart->futex.bitset = bitset;
 	restart->futex.flags = flags | FLAGS_HAS_TIMEOUT;
 
-	ret = -ERESTART_RESTARTBLOCK;
+	ret = set_restart_fn(restart, futex_wait_restart);
 
 out:
 	if (to) {
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -848,9 +848,9 @@ static int alarm_timer_nsleep(const cloc
 	if (flags == TIMER_ABSTIME)
 		return -ERESTARTNOHAND;
 
-	restart->fn = alarm_timer_nsleep_restart;
 	restart->nanosleep.clockid = type;
 	restart->nanosleep.expires = exp;
+	set_restart_fn(restart, alarm_timer_nsleep_restart);
 	return ret;
 }
 
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -1957,9 +1957,9 @@ long hrtimer_nanosleep(ktime_t rqtp, con
 	}
 
 	restart = &current->restart_block;
-	restart->fn = hrtimer_nanosleep_restart;
 	restart->nanosleep.clockid = t.timer.base->clockid;
 	restart->nanosleep.expires = hrtimer_get_expires_tv64(&t.timer);
+	set_restart_fn(restart, hrtimer_nanosleep_restart);
 out:
 	destroy_hrtimer_on_stack(&t.timer);
 	return ret;
--- a/kernel/time/posix-cpu-timers.c
+++ b/kernel/time/posix-cpu-timers.c
@@ -1480,8 +1480,8 @@ static int posix_cpu_nsleep(const clocki
 		if (flags & TIMER_ABSTIME)
 			return -ERESTARTNOHAND;
 
-		restart_block->fn = posix_cpu_nsleep_restart;
 		restart_block->nanosleep.clockid = which_clock;
+		set_restart_fn(restart_block, posix_cpu_nsleep_restart);
 	}
 	return error;
 }



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 104/120] x86: Move TS_COMPAT back to asm/thread_info.h
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (102 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 103/120] kernel, fs: Introduce and use set_restart_fn() and arch_set_restart_data() Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 105/120] x86: Introduce TS_COMPAT_RESTART to fix get_nr_restart_syscall() Greg Kroah-Hartman
                   ` (18 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Oleg Nesterov, Thomas Gleixner

From: Oleg Nesterov <oleg@redhat.com>

commit 66c1b6d74cd7035e85c426f0af4aede19e805c8a upstream.

Move TS_COMPAT back to asm/thread_info.h, close to TS_I386_REGS_POKED.

It was moved to asm/processor.h by b9d989c7218a ("x86/asm: Move the
thread_info::status field to thread_struct"), then later 37a8f7c38339
("x86/asm: Move 'status' from thread_struct to thread_info") moved the
'status' field back but TS_COMPAT was forgotten.

Preparatory patch to fix the COMPAT case for get_nr_restart_syscall()

Fixes: 609c19a385c8 ("x86/ptrace: Stop setting TS_COMPAT in ptrace code")
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20210201174649.GA17880@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/processor.h   |    9 ---------
 arch/x86/include/asm/thread_info.h |    9 +++++++++
 2 files changed, 9 insertions(+), 9 deletions(-)

--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -552,15 +552,6 @@ static inline void arch_thread_struct_wh
 	*size = fpu_kernel_xstate_size;
 }
 
-/*
- * Thread-synchronous status.
- *
- * This is different from the flags in that nobody else
- * ever touches our thread-synchronous status, so we don't
- * have to worry about atomic accesses.
- */
-#define TS_COMPAT		0x0002	/* 32bit syscall active (64BIT)*/
-
 static inline void
 native_load_sp0(unsigned long sp0)
 {
--- a/arch/x86/include/asm/thread_info.h
+++ b/arch/x86/include/asm/thread_info.h
@@ -205,6 +205,15 @@ static inline int arch_within_stack_fram
 
 #endif
 
+/*
+ * Thread-synchronous status.
+ *
+ * This is different from the flags in that nobody else
+ * ever touches our thread-synchronous status, so we don't
+ * have to worry about atomic accesses.
+ */
+#define TS_COMPAT		0x0002	/* 32bit syscall active (64BIT)*/
+
 #ifdef CONFIG_COMPAT
 #define TS_I386_REGS_POKED	0x0004	/* regs poked by 32-bit ptracer */
 #endif



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 105/120] x86: Introduce TS_COMPAT_RESTART to fix get_nr_restart_syscall()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (103 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 104/120] x86: Move TS_COMPAT back to asm/thread_info.h Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 106/120] efivars: respect EFI_UNSUPPORTED return from firmware Greg Kroah-Hartman
                   ` (17 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jan Kratochvil, Oleg Nesterov,
	Thomas Gleixner

From: Oleg Nesterov <oleg@redhat.com>

commit 8c150ba2fb5995c84a7a43848250d444a3329a7d upstream.

The comment in get_nr_restart_syscall() says:

	 * The problem is that we can get here when ptrace pokes
	 * syscall-like values into regs even if we're not in a syscall
	 * at all.

Yes, but if not in a syscall then the

	status & (TS_COMPAT|TS_I386_REGS_POKED)

check below can't really help:

	- TS_COMPAT can't be set

	- TS_I386_REGS_POKED is only set if regs->orig_ax was changed by
	  32bit debugger; and even in this case get_nr_restart_syscall()
	  is only correct if the tracee is 32bit too.

Suppose that a 64bit debugger plays with a 32bit tracee and

	* Tracee calls sleep(2)	// TS_COMPAT is set
	* User interrupts the tracee by CTRL-C after 1 sec and does
	  "(gdb) call func()"
	* gdb saves the regs by PTRACE_GETREGS
	* does PTRACE_SETREGS to set %rip='func' and %orig_rax=-1
	* PTRACE_CONT		// TS_COMPAT is cleared
	* func() hits int3.
	* Debugger catches SIGTRAP.
	* Restore original regs by PTRACE_SETREGS.
	* PTRACE_CONT

get_nr_restart_syscall() wrongly returns __NR_restart_syscall==219, the
tracee calls ia32_sys_call_table[219] == sys_madvise.

Add the sticky TS_COMPAT_RESTART flag which survives after return to user
mode. It's going to be removed in the next step again by storing the
information in the restart block. As a further cleanup it might be possible
to remove also TS_I386_REGS_POKED with that.

Test-case:

  $ cvs -d :pserver:anoncvs:anoncvs@sourceware.org:/cvs/systemtap co ptrace-tests
  $ gcc -o erestartsys-trap-debuggee ptrace-tests/tests/erestartsys-trap-debuggee.c --m32
  $ gcc -o erestartsys-trap-debugger ptrace-tests/tests/erestartsys-trap-debugger.c -lutil
  $ ./erestartsys-trap-debugger
  Unexpected: retval 1, errno 22
  erestartsys-trap-debugger: ptrace-tests/tests/erestartsys-trap-debugger.c:421

Fixes: 609c19a385c8 ("x86/ptrace: Stop setting TS_COMPAT in ptrace code")
Reported-by: Jan Kratochvil <jan.kratochvil@redhat.com>
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20210201174709.GA17895@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/thread_info.h |   14 +++++++++++++-
 arch/x86/kernel/signal.c           |   24 +-----------------------
 2 files changed, 14 insertions(+), 24 deletions(-)

--- a/arch/x86/include/asm/thread_info.h
+++ b/arch/x86/include/asm/thread_info.h
@@ -214,10 +214,22 @@ static inline int arch_within_stack_fram
  */
 #define TS_COMPAT		0x0002	/* 32bit syscall active (64BIT)*/
 
+#ifndef __ASSEMBLY__
 #ifdef CONFIG_COMPAT
 #define TS_I386_REGS_POKED	0x0004	/* regs poked by 32-bit ptracer */
+#define TS_COMPAT_RESTART	0x0008
+
+#define arch_set_restart_data	arch_set_restart_data
+
+static inline void arch_set_restart_data(struct restart_block *restart)
+{
+	struct thread_info *ti = current_thread_info();
+	if (ti->status & TS_COMPAT)
+		ti->status |= TS_COMPAT_RESTART;
+	else
+		ti->status &= ~TS_COMPAT_RESTART;
+}
 #endif
-#ifndef __ASSEMBLY__
 
 #ifdef CONFIG_X86_32
 #define in_ia32_syscall() true
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -766,30 +766,8 @@ handle_signal(struct ksignal *ksig, stru
 
 static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs)
 {
-	/*
-	 * This function is fundamentally broken as currently
-	 * implemented.
-	 *
-	 * The idea is that we want to trigger a call to the
-	 * restart_block() syscall and that we want in_ia32_syscall(),
-	 * in_x32_syscall(), etc. to match whatever they were in the
-	 * syscall being restarted.  We assume that the syscall
-	 * instruction at (regs->ip - 2) matches whatever syscall
-	 * instruction we used to enter in the first place.
-	 *
-	 * The problem is that we can get here when ptrace pokes
-	 * syscall-like values into regs even if we're not in a syscall
-	 * at all.
-	 *
-	 * For now, we maintain historical behavior and guess based on
-	 * stored state.  We could do better by saving the actual
-	 * syscall arch in restart_block or (with caveats on x32) by
-	 * checking if regs->ip points to 'int $0x80'.  The current
-	 * behavior is incorrect if a tracer has a different bitness
-	 * than the tracee.
-	 */
 #ifdef CONFIG_IA32_EMULATION
-	if (current_thread_info()->status & (TS_COMPAT|TS_I386_REGS_POKED))
+	if (current_thread_info()->status & TS_COMPAT_RESTART)
 		return __NR_ia32_restart_syscall;
 #endif
 #ifdef CONFIG_X86_X32_ABI



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 106/120] efivars: respect EFI_UNSUPPORTED return from firmware
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (104 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 105/120] x86: Introduce TS_COMPAT_RESTART to fix get_nr_restart_syscall() Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 107/120] ext4: fix error handling in ext4_end_enable_verity() Greg Kroah-Hartman
                   ` (16 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Shawn Guo, Ard Biesheuvel

From: Shawn Guo <shawn.guo@linaro.org>

commit 483028edacab374060d93955382b4865a9e07cba upstream.

As per UEFI spec 2.8B section 8.2, EFI_UNSUPPORTED may be returned by
EFI variable runtime services if no variable storage is supported by
firmware.  In this case, there is no point for kernel to continue
efivars initialization.  That said, efivar_init() should fail by
returning an error code, so that efivarfs will not be mounted on
/sys/firmware/efi/efivars at all.  Otherwise, user space like efibootmgr
will be confused by the EFIVARFS_MAGIC seen there, while EFI variable
calls cannot be made successfully.

Cc: <stable@vger.kernel.org> # v5.10+
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/firmware/efi/vars.c |    4 ++++
 1 file changed, 4 insertions(+)

--- a/drivers/firmware/efi/vars.c
+++ b/drivers/firmware/efi/vars.c
@@ -485,6 +485,10 @@ int efivar_init(int (*func)(efi_char16_t
 			}
 
 			break;
+		case EFI_UNSUPPORTED:
+			err = -EOPNOTSUPP;
+			status = EFI_NOT_FOUND;
+			break;
 		case EFI_NOT_FOUND:
 			break;
 		default:



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 107/120] ext4: fix error handling in ext4_end_enable_verity()
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (105 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 106/120] efivars: respect EFI_UNSUPPORTED return from firmware Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 108/120] ext4: find old entry again if failed to rename whiteout Greg Kroah-Hartman
                   ` (15 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Yunlei He, Eric Biggers, Theodore Tso

From: Eric Biggers <ebiggers@google.com>

commit f053cf7aa66cd9d592b0fc967f4d887c2abff1b7 upstream.

ext4 didn't properly clean up if verity failed to be enabled on a file:

- It left verity metadata (pages past EOF) in the page cache, which
  would be exposed to userspace if the file was later extended.

- It didn't truncate the verity metadata at all (either from cache or
  from disk) if an error occurred while setting the verity bit.

Fix these bugs by adding a call to truncate_inode_pages() and ensuring
that we truncate the verity metadata (both from cache and from disk) in
all error paths.  Also rework the code to cleanly separate the success
path from the error paths, which makes it much easier to understand.

Reported-by: Yunlei He <heyunlei@hihonor.com>
Fixes: c93d8f885809 ("ext4: add basic fs-verity support")
Cc: stable@vger.kernel.org # v5.4+
Signed-off-by: Eric Biggers <ebiggers@google.com>
Link: https://lore.kernel.org/r/20210302200420.137977-2-ebiggers@kernel.org
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/ext4/verity.c |   93 +++++++++++++++++++++++++++++++++----------------------
 1 file changed, 57 insertions(+), 36 deletions(-)

--- a/fs/ext4/verity.c
+++ b/fs/ext4/verity.c
@@ -201,55 +201,76 @@ static int ext4_end_enable_verity(struct
 	struct inode *inode = file_inode(filp);
 	const int credits = 2; /* superblock and inode for ext4_orphan_del() */
 	handle_t *handle;
+	struct ext4_iloc iloc;
 	int err = 0;
-	int err2;
 
-	if (desc != NULL) {
-		/* Succeeded; write the verity descriptor. */
-		err = ext4_write_verity_descriptor(inode, desc, desc_size,
-						   merkle_tree_size);
-
-		/* Write all pages before clearing VERITY_IN_PROGRESS. */
-		if (!err)
-			err = filemap_write_and_wait(inode->i_mapping);
-	}
+	/*
+	 * If an error already occurred (which fs/verity/ signals by passing
+	 * desc == NULL), then only clean-up is needed.
+	 */
+	if (desc == NULL)
+		goto cleanup;
 
-	/* If we failed, truncate anything we wrote past i_size. */
-	if (desc == NULL || err)
-		ext4_truncate(inode);
+	/* Append the verity descriptor. */
+	err = ext4_write_verity_descriptor(inode, desc, desc_size,
+					   merkle_tree_size);
+	if (err)
+		goto cleanup;
 
 	/*
-	 * We must always clean up by clearing EXT4_STATE_VERITY_IN_PROGRESS and
-	 * deleting the inode from the orphan list, even if something failed.
-	 * If everything succeeded, we'll also set the verity bit in the same
-	 * transaction.
+	 * Write all pages (both data and verity metadata).  Note that this must
+	 * happen before clearing EXT4_STATE_VERITY_IN_PROGRESS; otherwise pages
+	 * beyond i_size won't be written properly.  For crash consistency, this
+	 * also must happen before the verity inode flag gets persisted.
 	 */
+	err = filemap_write_and_wait(inode->i_mapping);
+	if (err)
+		goto cleanup;
 
-	ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
+	/*
+	 * Finally, set the verity inode flag and remove the inode from the
+	 * orphan list (in a single transaction).
+	 */
 
 	handle = ext4_journal_start(inode, EXT4_HT_INODE, credits);
 	if (IS_ERR(handle)) {
-		ext4_orphan_del(NULL, inode);
-		return PTR_ERR(handle);
+		err = PTR_ERR(handle);
+		goto cleanup;
 	}
 
-	err2 = ext4_orphan_del(handle, inode);
-	if (err2)
-		goto out_stop;
-
-	if (desc != NULL && !err) {
-		struct ext4_iloc iloc;
-
-		err = ext4_reserve_inode_write(handle, inode, &iloc);
-		if (err)
-			goto out_stop;
-		ext4_set_inode_flag(inode, EXT4_INODE_VERITY);
-		ext4_set_inode_flags(inode, false);
-		err = ext4_mark_iloc_dirty(handle, inode, &iloc);
-	}
-out_stop:
+	err = ext4_orphan_del(handle, inode);
+	if (err)
+		goto stop_and_cleanup;
+
+	err = ext4_reserve_inode_write(handle, inode, &iloc);
+	if (err)
+		goto stop_and_cleanup;
+
+	ext4_set_inode_flag(inode, EXT4_INODE_VERITY);
+	ext4_set_inode_flags(inode, false);
+	err = ext4_mark_iloc_dirty(handle, inode, &iloc);
+	if (err)
+		goto stop_and_cleanup;
+
 	ext4_journal_stop(handle);
-	return err ?: err2;
+
+	ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
+	return 0;
+
+stop_and_cleanup:
+	ext4_journal_stop(handle);
+cleanup:
+	/*
+	 * Verity failed to be enabled, so clean up by truncating any verity
+	 * metadata that was written beyond i_size (both from cache and from
+	 * disk), removing the inode from the orphan list (if it wasn't done
+	 * already), and clearing EXT4_STATE_VERITY_IN_PROGRESS.
+	 */
+	truncate_inode_pages(inode->i_mapping, inode->i_size);
+	ext4_truncate(inode);
+	ext4_orphan_del(NULL, inode);
+	ext4_clear_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
+	return err;
 }
 
 static int ext4_get_verity_descriptor_location(struct inode *inode,



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 108/120] ext4: find old entry again if failed to rename whiteout
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (106 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 107/120] ext4: fix error handling in ext4_end_enable_verity() Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 109/120] ext4: stop inode update before return Greg Kroah-Hartman
                   ` (14 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, zhangyi (F), Theodore Tso

From: zhangyi (F) <yi.zhang@huawei.com>

commit b7ff91fd030dc9d72ed91b1aab36e445a003af4f upstream.

If we failed to add new entry on rename whiteout, we cannot reset the
old->de entry directly, because the old->de could have moved from under
us during make indexed dir. So find the old entry again before reset is
needed, otherwise it may corrupt the filesystem as below.

  /dev/sda: Entry '00000001' in ??? (12) has deleted/unused inode 15. CLEARED.
  /dev/sda: Unattached inode 75
  /dev/sda: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.

Fixes: 6b4b8e6b4ad ("ext4: fix bug for rename with RENAME_WHITEOUT")
Cc: stable@vger.kernel.org
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Link: https://lore.kernel.org/r/20210303131703.330415-1-yi.zhang@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/ext4/namei.c |   29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -3601,6 +3601,31 @@ static int ext4_setent(handle_t *handle,
 	return retval;
 }
 
+static void ext4_resetent(handle_t *handle, struct ext4_renament *ent,
+			  unsigned ino, unsigned file_type)
+{
+	struct ext4_renament old = *ent;
+	int retval = 0;
+
+	/*
+	 * old->de could have moved from under us during make indexed dir,
+	 * so the old->de may no longer valid and need to find it again
+	 * before reset old inode info.
+	 */
+	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
+	if (IS_ERR(old.bh))
+		retval = PTR_ERR(old.bh);
+	if (!old.bh)
+		retval = -ENOENT;
+	if (retval) {
+		ext4_std_error(old.dir->i_sb, retval);
+		return;
+	}
+
+	ext4_setent(handle, &old, ino, file_type);
+	brelse(old.bh);
+}
+
 static int ext4_find_delete_entry(handle_t *handle, struct inode *dir,
 				  const struct qstr *d_name)
 {
@@ -3923,8 +3948,8 @@ static int ext4_rename(struct inode *old
 end_rename:
 	if (whiteout) {
 		if (retval) {
-			ext4_setent(handle, &old,
-				old.inode->i_ino, old_file_type);
+			ext4_resetent(handle, &old,
+				      old.inode->i_ino, old_file_type);
 			drop_nlink(whiteout);
 		}
 		unlock_new_inode(whiteout);



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 109/120] ext4: stop inode update before return
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (107 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 108/120] ext4: find old entry again if failed to rename whiteout Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 110/120] ext4: do not try to set xattr into ea_inode if value is empty Greg Kroah-Hartman
                   ` (13 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Pan Bian, stable, Harshad Shirwadkar,
	Theodore Tso

From: Pan Bian <bianpan2016@163.com>

commit 512c15ef05d73a04f1aef18a3bc61a8bb516f323 upstream.

The inode update should be stopped before returing the error code.

Signed-off-by: Pan Bian <bianpan2016@163.com>
Link: https://lore.kernel.org/r/20210117085732.93788-1-bianpan2016@163.com
Fixes: 8016e29f4362 ("ext4: fast commit recovery path")
Cc: stable@kernel.org
Reviewed-by: Harshad Shirwadkar <harshadshirwadkar@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/ext4/inode.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -5389,8 +5389,10 @@ int ext4_setattr(struct dentry *dentry,
 			inode->i_gid = attr->ia_gid;
 		error = ext4_mark_inode_dirty(handle, inode);
 		ext4_journal_stop(handle);
-		if (unlikely(error))
+		if (unlikely(error)) {
+			ext4_fc_stop_update(inode);
 			return error;
+		}
 	}
 
 	if (attr->ia_valid & ATTR_SIZE) {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 110/120] ext4: do not try to set xattr into ea_inode if value is empty
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (108 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 109/120] ext4: stop inode update before return Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 111/120] ext4: fix potential error in ext4_do_update_inode Greg Kroah-Hartman
                   ` (12 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+98b881fdd8ebf45ab4ae, stable,
	zhangyi (F),
	Theodore Tso

From: zhangyi (F) <yi.zhang@huawei.com>

commit 6b22489911b726eebbf169caee52fea52013fbdd upstream.

Syzbot report a warning that ext4 may create an empty ea_inode if set
an empty extent attribute to a file on the file system which is no free
blocks left.

  WARNING: CPU: 6 PID: 10667 at fs/ext4/xattr.c:1640 ext4_xattr_set_entry+0x10f8/0x1114 fs/ext4/xattr.c:1640
  ...
  Call trace:
   ext4_xattr_set_entry+0x10f8/0x1114 fs/ext4/xattr.c:1640
   ext4_xattr_block_set+0x1d0/0x1b1c fs/ext4/xattr.c:1942
   ext4_xattr_set_handle+0x8a0/0xf1c fs/ext4/xattr.c:2390
   ext4_xattr_set+0x120/0x1f0 fs/ext4/xattr.c:2491
   ext4_xattr_trusted_set+0x48/0x5c fs/ext4/xattr_trusted.c:37
   __vfs_setxattr+0x208/0x23c fs/xattr.c:177
  ...

Now, ext4 try to store extent attribute into an external inode if
ext4_xattr_block_set() return -ENOSPC, but for the case of store an
empty extent attribute, store the extent entry into the extent
attribute block is enough. A simple reproduce below.

  fallocate test.img -l 1M
  mkfs.ext4 -F -b 2048 -O ea_inode test.img
  mount test.img /mnt
  dd if=/dev/zero of=/mnt/foo bs=2048 count=500
  setfattr -n "user.test" /mnt/foo

Reported-by: syzbot+98b881fdd8ebf45ab4ae@syzkaller.appspotmail.com
Fixes: 9c6e7853c531 ("ext4: reserve space for xattr entries/names")
Cc: stable@kernel.org
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Link: https://lore.kernel.org/r/20210305120508.298465-1-yi.zhang@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/ext4/xattr.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -2400,7 +2400,7 @@ retry_inode:
 				 * external inode if possible.
 				 */
 				if (ext4_has_feature_ea_inode(inode->i_sb) &&
-				    !i.in_inode) {
+				    i.value_len && !i.in_inode) {
 					i.in_inode = 1;
 					goto retry_inode;
 				}



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 111/120] ext4: fix potential error in ext4_do_update_inode
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (109 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 110/120] ext4: do not try to set xattr into ea_inode if value is empty Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 112/120] ext4: fix timer use-after-free on failed mount Greg Kroah-Hartman
                   ` (11 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Shijie Luo, stable, Jan Kara, Theodore Tso

From: Shijie Luo <luoshijie1@huawei.com>

commit 7d8bd3c76da1d94b85e6c9b7007e20e980bfcfe6 upstream.

If set_large_file = 1 and errors occur in ext4_handle_dirty_metadata(),
the error code will be overridden, go to out_brelse to avoid this
situation.

Signed-off-by: Shijie Luo <luoshijie1@huawei.com>
Link: https://lore.kernel.org/r/20210312065051.36314-1-luoshijie1@huawei.com
Cc: stable@kernel.org
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/ext4/inode.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -5029,7 +5029,7 @@ static int ext4_do_update_inode(handle_t
 	struct ext4_inode_info *ei = EXT4_I(inode);
 	struct buffer_head *bh = iloc->bh;
 	struct super_block *sb = inode->i_sb;
-	int err = 0, rc, block;
+	int err = 0, block;
 	int need_datasync = 0, set_large_file = 0;
 	uid_t i_uid;
 	gid_t i_gid;
@@ -5141,9 +5141,9 @@ static int ext4_do_update_inode(handle_t
 					      bh->b_data);
 
 	BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
-	rc = ext4_handle_dirty_metadata(handle, NULL, bh);
-	if (!err)
-		err = rc;
+	err = ext4_handle_dirty_metadata(handle, NULL, bh);
+	if (err)
+		goto out_brelse;
 	ext4_clear_inode_state(inode, EXT4_STATE_NEW);
 	if (set_large_file) {
 		BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get write access");



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 112/120] ext4: fix timer use-after-free on failed mount
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (110 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 111/120] ext4: fix potential error in ext4_do_update_inode Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 113/120] ext4: fix rename whiteout with fast commit Greg Kroah-Hartman
                   ` (10 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+628472a2aac693ab0fcd,
	Jan Kara, Theodore Tso

From: Jan Kara <jack@suse.cz>

commit 2a4ae3bcdf05b8639406eaa09a2939f3c6dd8e75 upstream.

When filesystem mount fails because of corrupted filesystem we first
cancel the s_err_report timer reminding fs errors every day and only
then we flush s_error_work. However s_error_work may report another fs
error and re-arm timer thus resulting in timer use-after-free. Fix the
problem by first flushing the work and only after that canceling the
s_err_report timer.

Reported-by: syzbot+628472a2aac693ab0fcd@syzkaller.appspotmail.com
Fixes: 2d01ddc86606 ("ext4: save error info to sb through journal if available")
CC: stable@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20210315165906.2175-1-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/ext4/super.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -5149,8 +5149,8 @@ failed_mount_wq:
 failed_mount3a:
 	ext4_es_unregister_shrinker(sbi);
 failed_mount3:
-	del_timer_sync(&sbi->s_err_report);
 	flush_work(&sbi->s_error_work);
+	del_timer_sync(&sbi->s_err_report);
 	if (sbi->s_mmp_tsk)
 		kthread_stop(sbi->s_mmp_tsk);
 failed_mount2:



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 113/120] ext4: fix rename whiteout with fast commit
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (111 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 112/120] ext4: fix timer use-after-free on failed mount Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 114/120] MAINTAINERS: move some real subsystems off of the staging mailing list Greg Kroah-Hartman
                   ` (9 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, stable, Harshad Shirwadkar, Theodore Tso

From: Harshad Shirwadkar <harshadshirwadkar@gmail.com>

commit 8210bb29c1b66200cff7b25febcf6e39baf49fbf upstream.

This patch adds rename whiteout support in fast commits. Note that the
whiteout object that gets created is actually char device. Which
imples, the function ext4_inode_journal_mode(struct inode *inode)
would return "JOURNAL_DATA" for this inode. This has a consequence in
fast commit code that it will make creation of the whiteout object a
fast-commit ineligible behavior and thus will fall back to full
commits. With this patch, this can be observed by running fast commits
with rename whiteout and seeing the stats generated by ext4_fc_stats
tracepoint as follows:

ext4_fc_stats: dev 254:32 fc ineligible reasons:
XATTR:0, CROSS_RENAME:0, JOURNAL_FLAG_CHANGE:0, NO_MEM:0, SWAP_BOOT:0,
RESIZE:0, RENAME_DIR:0, FALLOC_RANGE:0, INODE_JOURNAL_DATA:16;
num_commits:6, ineligible: 6, numblks: 3

So in short, this patch guarantees that in case of rename whiteout, we
fall back to full commits.

Amir mentioned that instead of creating a new whiteout object for
every rename, we can create a static whiteout object with irrelevant
nlink. That will make fast commits to not fall back to full
commit. But until this happens, this patch will ensure correctness by
falling back to full commits.

Fixes: 8016e29f4362 ("ext4: fast commit recovery path")
Cc: stable@kernel.org
Signed-off-by: Harshad Shirwadkar <harshadshirwadkar@gmail.com>
Link: https://lore.kernel.org/r/20210316221921.1124955-1-harshadshirwadkar@gmail.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/ext4/ext4.h        |    2 ++
 fs/ext4/fast_commit.c |    9 +++++++--
 fs/ext4/namei.c       |    3 +++
 3 files changed, 12 insertions(+), 2 deletions(-)

--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -2792,6 +2792,8 @@ void __ext4_fc_track_link(handle_t *hand
 	struct dentry *dentry);
 void ext4_fc_track_unlink(handle_t *handle, struct dentry *dentry);
 void ext4_fc_track_link(handle_t *handle, struct dentry *dentry);
+void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
+			    struct dentry *dentry);
 void ext4_fc_track_create(handle_t *handle, struct dentry *dentry);
 void ext4_fc_track_inode(handle_t *handle, struct inode *inode);
 void ext4_fc_mark_ineligible(struct super_block *sb, int reason);
--- a/fs/ext4/fast_commit.c
+++ b/fs/ext4/fast_commit.c
@@ -513,10 +513,10 @@ void ext4_fc_track_link(handle_t *handle
 	__ext4_fc_track_link(handle, d_inode(dentry), dentry);
 }
 
-void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
+void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
+			  struct dentry *dentry)
 {
 	struct __track_dentry_update_args args;
-	struct inode *inode = d_inode(dentry);
 	int ret;
 
 	args.dentry = dentry;
@@ -527,6 +527,11 @@ void ext4_fc_track_create(handle_t *hand
 	trace_ext4_fc_track_create(inode, dentry, ret);
 }
 
+void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
+{
+	__ext4_fc_track_create(handle, d_inode(dentry), dentry);
+}
+
 /* __track_fn for inode tracking */
 static int __track_inode(struct inode *inode, void *arg, bool update)
 {
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -3861,6 +3861,7 @@ static int ext4_rename(struct inode *old
 		retval = ext4_mark_inode_dirty(handle, whiteout);
 		if (unlikely(retval))
 			goto end_rename;
+
 	}
 	if (!new.bh) {
 		retval = ext4_add_entry(handle, new.dentry, old.inode);
@@ -3934,6 +3935,8 @@ static int ext4_rename(struct inode *old
 			ext4_fc_track_unlink(handle, new.dentry);
 		__ext4_fc_track_link(handle, old.inode, new.dentry);
 		__ext4_fc_track_unlink(handle, old.inode, old.dentry);
+		if (whiteout)
+			__ext4_fc_track_create(handle, whiteout, old.dentry);
 	}
 
 	if (new.inode) {



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 114/120] MAINTAINERS: move some real subsystems off of the staging mailing list
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (112 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 113/120] ext4: fix rename whiteout with fast commit Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 115/120] MAINTAINERS: move the staging subsystem to lists.linux.dev Greg Kroah-Hartman
                   ` (8 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Martyn Welch, Manohar Vanga,
	Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
	Joel Fernandes, Christian Brauner, Hridya Valsaraju,
	Suren Baghdasaryan, Konstantin Ryabitsev

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f8d70fd6a5a7a38a95eb8021e00d2e547f88efec upstream.

The VME and Android drivers still have their MAINTAINERS entries
pointing to the "driverdevel" mailing list, due to them having their
codebase move out of the drivers/staging/ directory, but no one
remembered to change the mailing list entries.

Move them both to linux-kernel for lack of a more specific place at the
moment.  These are both low-volume areas of the kernel, so this
shouldn't be an issue.

Cc: Martyn Welch <martyn@welchs.me.uk>
Cc: Manohar Vanga <manohar.vanga@gmail.com>
Cc: Arve Hjønnevåg <arve@android.com>
Cc: Todd Kjos <tkjos@android.com>
Cc: Martijn Coenen <maco@android.com>
Cc: Joel Fernandes <joel@joelfernandes.org>
Cc: Christian Brauner <christian@brauner.io>
Cc: Hridya Valsaraju <hridya@google.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Reported-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Link: https://lore.kernel.org/r/YEzE6u6U1jkBatmr@kroah.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 MAINTAINERS |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1169,7 +1169,7 @@ M:	Joel Fernandes <joel@joelfernandes.or
 M:	Christian Brauner <christian@brauner.io>
 M:	Hridya Valsaraju <hridya@google.com>
 M:	Suren Baghdasaryan <surenb@google.com>
-L:	devel@driverdev.osuosl.org
+L:	linux-kernel@vger.kernel.org
 S:	Supported
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
 F:	drivers/android/
@@ -18993,7 +18993,7 @@ VME SUBSYSTEM
 M:	Martyn Welch <martyn@welchs.me.uk>
 M:	Manohar Vanga <manohar.vanga@gmail.com>
 M:	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-L:	devel@driverdev.osuosl.org
+L:	linux-kernel@vger.kernel.org
 S:	Maintained
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
 F:	Documentation/driver-api/vme.rst



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 115/120] MAINTAINERS: move the staging subsystem to lists.linux.dev
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (113 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 114/120] MAINTAINERS: move some real subsystems off of the staging mailing list Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 116/120] static_call: Fix static_call_update() sanity check Greg Kroah-Hartman
                   ` (7 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Mauro Carvalho Chehab

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e06da9ea3e3f6746a849edeae1d09ee821f5c2ce upstream.

The drivers/staging/ tree has a new mailing list,
linux-staging@lists.linux.dev, so move the MAINTAINER entry to point to
it so that we get patches sent to the proper place.

There was no need to specify a list for the hikey9xx driver, the tools
pick up the "base" list for drivers/staging/* so remove that line to
make the file simpler.

Cc: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/20210316102311.182375-1-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 MAINTAINERS |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8079,7 +8079,6 @@ F:	drivers/crypto/hisilicon/sec2/sec_mai
 
 HISILICON STAGING DRIVERS FOR HIKEY 960/970
 M:	Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
-L:	devel@driverdev.osuosl.org
 S:	Maintained
 F:	drivers/staging/hikey9xx/
 
@@ -16911,7 +16910,7 @@ F:	drivers/staging/vt665?/
 
 STAGING SUBSYSTEM
 M:	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-L:	devel@driverdev.osuosl.org
+L:	linux-staging@lists.linux.dev
 S:	Supported
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
 F:	drivers/staging/



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 116/120] static_call: Fix static_call_update() sanity check
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (114 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 115/120] MAINTAINERS: move the staging subsystem to lists.linux.dev Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 117/120] efi: use 32-bit alignment for efi_guid_t literals Greg Kroah-Hartman
                   ` (6 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Sumit Garg, Peter Zijlstra (Intel),
	Jarkko Sakkinen

From: Peter Zijlstra <peterz@infradead.org>

commit 38c93587375053c5b9ef093f4a5ea754538cba32 upstream.

Sites that match init_section_contains() get marked as INIT. For
built-in code init_sections contains both __init and __exit text. OTOH
kernel_text_address() only explicitly includes __init text (and there
are no __exit text markers).

Match what jump_label already does and ignore the warning for INIT
sites. Also see the excellent changelog for commit: 8f35eaa5f2de
("jump_label: Don't warn on __exit jump entries")

Fixes: 9183c3f9ed710 ("static_call: Add inline static call infrastructure")
Reported-by: Sumit Garg <sumit.garg@linaro.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Jarkko Sakkinen <jarkko@kernel.org>
Tested-by: Sumit Garg <sumit.garg@linaro.org>
Link: https://lkml.kernel.org/r/20210318113610.739542434@infradead.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 kernel/jump_label.c  |    8 ++++++++
 kernel/static_call.c |   11 ++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

--- a/kernel/jump_label.c
+++ b/kernel/jump_label.c
@@ -407,6 +407,14 @@ static bool jump_label_can_update(struct
 		return false;
 
 	if (!kernel_text_address(jump_entry_code(entry))) {
+		/*
+		 * This skips patching built-in __exit, which
+		 * is part of init_section_contains() but is
+		 * not part of kernel_text_address().
+		 *
+		 * Skipping built-in __exit is fine since it
+		 * will never be executed.
+		 */
 		WARN_ONCE(!jump_entry_is_init(entry),
 			  "can't patch jump_label at %pS",
 			  (void *)jump_entry_code(entry));
--- a/kernel/static_call.c
+++ b/kernel/static_call.c
@@ -182,7 +182,16 @@ void __static_call_update(struct static_
 			}
 
 			if (!kernel_text_address((unsigned long)site_addr)) {
-				WARN_ONCE(1, "can't patch static call site at %pS",
+				/*
+				 * This skips patching built-in __exit, which
+				 * is part of init_section_contains() but is
+				 * not part of kernel_text_address().
+				 *
+				 * Skipping built-in __exit is fine since it
+				 * will never be executed.
+				 */
+				WARN_ONCE(!static_call_is_init(site),
+					  "can't patch static call site at %pS",
 					  site_addr);
 				continue;
 			}



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 117/120] efi: use 32-bit alignment for efi_guid_t literals
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (115 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 116/120] static_call: Fix static_call_update() sanity check Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 118/120] firmware/efi: Fix a use after bug in efi_mem_reserve_persistent Greg Kroah-Hartman
                   ` (5 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Nathan Chancellor, Nick Desaulniers,
	Ard Biesheuvel

From: Ard Biesheuvel <ardb@kernel.org>

commit fb98cc0b3af2ba4d87301dff2b381b12eee35d7d upstream.

Commit 494c704f9af0 ("efi: Use 32-bit alignment for efi_guid_t") updated
the type definition of efi_guid_t to ensure that it always appears
sufficiently aligned (the UEFI spec is ambiguous about this, but given
the fact that its EFI_GUID type is defined in terms of a struct carrying
a uint32_t, the natural alignment is definitely >= 32 bits).

However, we missed the EFI_GUID() macro which is used to instantiate
efi_guid_t literals: that macro is still based on the guid_t type,
which does not have a minimum alignment at all. This results in warnings
such as

  In file included from drivers/firmware/efi/mokvar-table.c:35:
  include/linux/efi.h:1093:34: warning: passing 1-byte aligned argument to
      4-byte aligned parameter 2 of 'get_var' may result in an unaligned pointer
      access [-Walign-mismatch]
          status = get_var(L"SecureBoot", &EFI_GLOBAL_VARIABLE_GUID, NULL, &size,
                                          ^
  include/linux/efi.h:1101:24: warning: passing 1-byte aligned argument to
      4-byte aligned parameter 2 of 'get_var' may result in an unaligned pointer
      access [-Walign-mismatch]
          get_var(L"SetupMode", &EFI_GLOBAL_VARIABLE_GUID, NULL, &size, &setupmode);

The distinction only matters on CPUs that do not support misaligned loads
fully, but 32-bit ARM's load-multiple instructions fall into that category,
and these are likely to be emitted by the compiler that built the firmware
for loading word-aligned 128-bit GUIDs from memory

So re-implement the initializer in terms of our own efi_guid_t type, so that
the alignment becomes a property of the literal's type.

Fixes: 494c704f9af0 ("efi: Use 32-bit alignment for efi_guid_t")
Reported-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Link: https://github.com/ClangBuiltLinux/linux/issues/1327
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/efi.h |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -72,8 +72,10 @@ typedef void *efi_handle_t;
  */
 typedef guid_t efi_guid_t __aligned(__alignof__(u32));
 
-#define EFI_GUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \
-	GUID_INIT(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)
+#define EFI_GUID(a, b, c, d...) (efi_guid_t){ {					\
+	(a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff,	\
+	(b) & 0xff, ((b) >> 8) & 0xff,						\
+	(c) & 0xff, ((c) >> 8) & 0xff, d } }
 
 /*
  * Generic EFI table header



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 118/120] firmware/efi: Fix a use after bug in efi_mem_reserve_persistent
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (116 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 117/120] efi: use 32-bit alignment for efi_guid_t literals Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 119/120] genirq: Disable interrupts for force threaded handlers Greg Kroah-Hartman
                   ` (4 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Lv Yunlong, Ard Biesheuvel

From: Lv Yunlong <lyl2019@mail.ustc.edu.cn>

commit 9ceee7d0841a8f7d7644021ba7d4cc1fbc7966e3 upstream.

In the for loop in efi_mem_reserve_persistent(), prsv = rsv->next
use the unmapped rsv. Use the unmapped pages will cause segment
fault.

Fixes: 18df7577adae6 ("efi/memreserve: deal with memreserve entries in unmapped memory")
Signed-off-by: Lv Yunlong <lyl2019@mail.ustc.edu.cn>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/firmware/efi/efi.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -927,7 +927,7 @@ int __ref efi_mem_reserve_persistent(phy
 	}
 
 	/* first try to find a slot in an existing linked list entry */
-	for (prsv = efi_memreserve_root->next; prsv; prsv = rsv->next) {
+	for (prsv = efi_memreserve_root->next; prsv; ) {
 		rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
 		index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
 		if (index < rsv->size) {
@@ -937,6 +937,7 @@ int __ref efi_mem_reserve_persistent(phy
 			memunmap(rsv);
 			return efi_mem_reserve_iomem(addr, size);
 		}
+		prsv = rsv->next;
 		memunmap(rsv);
 	}
 



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 119/120] genirq: Disable interrupts for force threaded handlers
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (117 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 118/120] firmware/efi: Fix a use after bug in efi_mem_reserve_persistent Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 12:28 ` [PATCH 5.11 120/120] x86/apic/of: Fix CPU devicetree-node lookups Greg Kroah-Hartman
                   ` (3 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Johan Hovold, Thomas Gleixner,
	Sebastian Andrzej Siewior

From: Thomas Gleixner <tglx@linutronix.de>

commit 81e2073c175b887398e5bca6c004efa89983f58d upstream.

With interrupt force threading all device interrupt handlers are invoked
from kernel threads. Contrary to hard interrupt context the invocation only
disables bottom halfs, but not interrupts. This was an oversight back then
because any code like this will have an issue:

thread(irq_A)
  irq_handler(A)
    spin_lock(&foo->lock);

interrupt(irq_B)
  irq_handler(B)
    spin_lock(&foo->lock);

This has been triggered with networking (NAPI vs. hrtimers) and console
drivers where printk() happens from an interrupt which interrupted the
force threaded handler.

Now people noticed and started to change the spin_lock() in the handler to
spin_lock_irqsave() which affects performance or add IRQF_NOTHREAD to the
interrupt request which in turn breaks RT.

Fix the root cause and not the symptom and disable interrupts before
invoking the force threaded handler which preserves the regular semantics
and the usefulness of the interrupt force threading as a general debugging
tool.

For not RT this is not changing much, except that during the execution of
the threaded handler interrupts are delayed until the handler
returns. Vs. scheduling and softirq processing there is no difference.

For RT kernels there is no issue.

Fixes: 8d32a307e4fa ("genirq: Provide forced interrupt threading")
Reported-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Johan Hovold <johan@kernel.org>
Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: https://lore.kernel.org/r/20210317143859.513307808@linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 kernel/irq/manage.c |    4 ++++
 1 file changed, 4 insertions(+)

--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -1142,11 +1142,15 @@ irq_forced_thread_fn(struct irq_desc *de
 	irqreturn_t ret;
 
 	local_bh_disable();
+	if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+		local_irq_disable();
 	ret = action->thread_fn(action->irq, action->dev_id);
 	if (ret == IRQ_HANDLED)
 		atomic_inc(&desc->threads_handled);
 
 	irq_finalize_oneshot(desc, action);
+	if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+		local_irq_enable();
 	local_bh_enable();
 	return ret;
 }



^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH 5.11 120/120] x86/apic/of: Fix CPU devicetree-node lookups
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (118 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 119/120] genirq: Disable interrupts for force threaded handlers Greg Kroah-Hartman
@ 2021-03-22 12:28 ` Greg Kroah-Hartman
  2021-03-22 14:35 ` [PATCH 5.11 000/120] 5.11.9-rc1 review Jon Hunter
                   ` (2 subsequent siblings)
  122 siblings, 0 replies; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-22 12:28 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Johan Hovold, Thomas Gleixner

From: Johan Hovold <johan@kernel.org>

commit dd926880da8dbbe409e709c1d3c1620729a94732 upstream.

Architectures that describe the CPU topology in devicetree and do not have
an identity mapping between physical and logical CPU ids must override the
default implementation of arch_match_cpu_phys_id().

Failing to do so breaks CPU devicetree-node lookups using of_get_cpu_node()
and of_cpu_device_node_get() which several drivers rely on. It also causes
the CPU struct devices exported through sysfs to point to the wrong
devicetree nodes.

On x86, CPUs are described in devicetree using their APIC ids and those
do not generally coincide with the logical ids, even if CPU0 typically
uses APIC id 0.

Add the missing implementation of arch_match_cpu_phys_id() so that CPU-node
lookups work also with SMP.

Apart from fixing the broken sysfs devicetree-node links this likely does
not affect current users of mainline kernels on x86.

Fixes: 4e07db9c8db8 ("x86/devicetree: Use CPU description from Device Tree")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20210312092033.26317-1-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/apic/apic.c |    5 +++++
 1 file changed, 5 insertions(+)

--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -2334,6 +2334,11 @@ static int cpuid_to_apicid[] = {
 	[0 ... NR_CPUS - 1] = -1,
 };
 
+bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
+{
+	return phys_id == cpuid_to_apicid[cpu];
+}
+
 #ifdef CONFIG_SMP
 /**
  * apic_id_is_primary_thread - Check whether APIC ID belongs to a primary thread



^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH 5.11 000/120] 5.11.9-rc1 review
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (119 preceding siblings ...)
  2021-03-22 12:28 ` [PATCH 5.11 120/120] x86/apic/of: Fix CPU devicetree-node lookups Greg Kroah-Hartman
@ 2021-03-22 14:35 ` Jon Hunter
  2021-03-22 19:00 ` Naresh Kamboju
  2021-03-22 21:50 ` Guenter Roeck
  122 siblings, 0 replies; 135+ messages in thread
From: Jon Hunter @ 2021-03-22 14:35 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Greg Kroah-Hartman, torvalds, akpm, linux, shuah, patches,
	lkft-triage, pavel, jonathanh, f.fainelli, stable, linux-tegra

On Mon, 22 Mar 2021 13:26:23 +0100, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 5.11.9 release.
> There are 120 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, 24 Mar 2021 12:19:09 +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.11.9-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.11.y
> and the diffstat can be found below.
> 
> thanks,
> 
> greg k-h

All tests passing for Tegra ...

Test results for stable-v5.11:
    12 builds:	12 pass, 0 fail
    28 boots:	28 pass, 0 fail
    74 tests:	74 pass, 0 fail

Linux version:	5.11.9-rc1-g3f03c425f75c
Boards tested:	tegra124-jetson-tk1, tegra186-p2771-0000,
                tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
                tegra20-ventana, tegra210-p2371-2180,
                tegra210-p3450-0000, tegra30-cardhu-a04

Tested-by: Jon Hunter <jonathanh@nvidia.com>

Jon

^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH 5.11 000/120] 5.11.9-rc1 review
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (120 preceding siblings ...)
  2021-03-22 14:35 ` [PATCH 5.11 000/120] 5.11.9-rc1 review Jon Hunter
@ 2021-03-22 19:00 ` Naresh Kamboju
  2021-03-22 21:50 ` Guenter Roeck
  122 siblings, 0 replies; 135+ messages in thread
From: Naresh Kamboju @ 2021-03-22 19:00 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: open list, Linus Torvalds, Andrew Morton, Guenter Roeck,
	Shuah Khan, patches, lkft-triage, Pavel Machek, Jon Hunter,
	Florian Fainelli, linux-stable

On Mon, 22 Mar 2021 at 18:02, Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>
> This is the start of the stable review cycle for the 5.11.9 release.
> There are 120 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, 24 Mar 2021 12:19:09 +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.11.9-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.11.y
> and the diffstat can be found below.
>
> thanks,
>
> greg k-h

Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.

Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>

Summary
------------------------------------------------------------------------

kernel: 5.11.9-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-5.11.y
git commit: 3f03c425f75c4a6828beda5de7774ce0b75d55f2
git describe: v5.11.8-121-g3f03c425f75c
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-5.11.y/build/v5.11.8-121-g3f03c425f75c

No regressions (compared to build v5.11.8)


No fixes (compared to build v5.11.8)


Ran 65573 total tests in the following environments and test suites.

Environments
--------------
- arc
- arm
- arm64
- dragonboard-410c
- hi6220-hikey
- i386
- juno-64k_page_size
- juno-r2
- juno-r2-compat
- juno-r2-kasan
- mips
- nxp-ls2088
- nxp-ls2088-64k_page_size
- parisc
- powerpc
- qemu-arm-clang
- qemu-arm-debug
- qemu-arm64-clang
- qemu-arm64-debug
- qemu-arm64-kasan
- qemu-i386-clang
- qemu-i386-debug
- qemu-x86_64-clang
- qemu-x86_64-debug
- qemu-x86_64-kasan
- qemu-x86_64-kcsan
- qemu_arm
- qemu_arm64
- qemu_arm64-compat
- qemu_i386
- qemu_x86_64
- qemu_x86_64-compat
- riscv
- s390
- sh
- sparc
- x15
- x86
- x86-kasan
- x86_64

Test Suites
-----------
* build
* linux-log-parser
* install-android-platform-tools-r2600
* kselftest-
* kselftest-android
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-kexec
* kselftest-kvm
* kselftest-vm
* kselftest-x86
* kselftest-bpf
* kselftest-efivarfs
* kselftest-filesystems
* kselftest-firmware
* kselftest-fpu
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-lib
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-tc-testing
* kselftest-timens
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-zram
* kselftest-vsyscall-mode-native-
* kselftest-vsyscall-mode-none-
* libhugetlbfs
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-cve-tests
* ltp-dio-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-syscalls-tests
* perf
* v4l2-compliance
* kselftest-lkdtm
* ltp-fs-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-tracing-tests
* network-basic-tests
* ltp-controllers-tests
* ltp-open-posix-tests
* kvm-unit-tests
* fwts
* rcutorture
* kunit
* igt-gpu-tools
* ssuite

-- 
Linaro LKFT
https://lkft.linaro.org

^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH 5.11 000/120] 5.11.9-rc1 review
  2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
                   ` (121 preceding siblings ...)
  2021-03-22 19:00 ` Naresh Kamboju
@ 2021-03-22 21:50 ` Guenter Roeck
  122 siblings, 0 replies; 135+ messages in thread
From: Guenter Roeck @ 2021-03-22 21:50 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, torvalds, akpm, shuah, patches, lkft-triage, pavel,
	jonathanh, f.fainelli, stable

On Mon, Mar 22, 2021 at 01:26:23PM +0100, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 5.11.9 release.
> There are 120 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, 24 Mar 2021 12:19:09 +0000.
> Anything received after that time might be too late.
> 

Build results:
	total: 155 pass: 155 fail: 0
Qemu test results:
	total: 437 pass: 437 fail: 0

Tested-by: Guenter Roeck <linux@roeck-us.net>

Guenter

^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH 5.11 093/120] iio: adc: adi-axi-adc: add proper Kconfig dependencies
  2021-03-22 12:27 ` [PATCH 5.11 093/120] iio: adc: adi-axi-adc: add proper Kconfig dependencies Greg Kroah-Hartman
@ 2021-03-24 17:01   ` Richard Narron
  2021-03-25  5:55   ` Richard Narron
  1 sibling, 0 replies; 135+ messages in thread
From: Richard Narron @ 2021-03-24 17:01 UTC (permalink / raw)
  To: stable
  Cc: Greg Kroah-Hartman, kernel test robot, Alexandru Ardelean,
	Jonathan Cameron

This patch gives me a new error message building 5.11.9 on x86_64
using the Slackware current 5.11.8 config:

$make oldconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  HOSTCC  scripts/kconfig/preprocess.o
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/util.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTLD  scripts/kconfig/conf

WARNING: unmet direct dependencies detected for ADI_AXI_ADC
  Depends on [n]: IIO [=m] && HAS_IOMEM [=y] && OF [=n]
  Selected by [m]:
  - AD9467 [=m] && IIO [=m] && SPI [=y]

WARNING: unmet direct dependencies detected for ADI_AXI_ADC
  Depends on [n]: IIO [=m] && HAS_IOMEM [=y] && OF [=n]
  Selected by [m]:
  - AD9467 [=m] && IIO [=m] && SPI [=y]
#
# configuration written to .config
#

The Slackware 5.11.8 config is here:

https://mirrors.kernel.org/slackware/slackware64-current/testing/source/linux-5.11.x/kernel-configs/config-huge-5.11.8.x64

It looks like a similar bug was found earlier:

https://lkml.org/lkml/2021/3/17/231

^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH 5.11 093/120] iio: adc: adi-axi-adc: add proper Kconfig dependencies
  2021-03-22 12:27 ` [PATCH 5.11 093/120] iio: adc: adi-axi-adc: add proper Kconfig dependencies Greg Kroah-Hartman
  2021-03-24 17:01   ` Richard Narron
@ 2021-03-25  5:55   ` Richard Narron
  1 sibling, 0 replies; 135+ messages in thread
From: Richard Narron @ 2021-03-25  5:55 UTC (permalink / raw)
  To: stable
  Cc: Greg Kroah-Hartman, kernel test robot, Alexandru Ardelean,
	Jonathan Cameron

Slackware changed their 5.11.8 configuration for 5.11.9.  The simply
turned off ADI_AXI_ADC and AD9467...

To keep a copy of the original 5.11.8 configuration around for testing I
saved it as an attachment to bugzilla 212433:

https://bugzilla.kernel.org/show_bug.cgi?id=212433

https://bugzilla.kernel.org/attachment.cgi?id=296047

^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH 5.11 073/120] drm/ttm: Warn on pinning without holding a reference
  2021-03-22 12:27 ` [PATCH 5.11 073/120] drm/ttm: Warn on pinning without holding a reference Greg Kroah-Hartman
@ 2021-03-25  8:14   ` Christian König
  2021-03-25  8:50     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 135+ messages in thread
From: Christian König @ 2021-03-25  8:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: stable, Huang Rui, Daniel Vetter, Sasha Levin

Hi Greg,

sorry just realized this after users started to complain. This patch 
shouldn't been backported to 5.11 in the first place.

The warning itself is a good idea, but we also have patch for drivers 
and TTM in the pipeline for 5.12 so that the warning isn't triggered any 
more.

Without backporting all of that we now get a rain of warnings in 5.11.9.

My suggestion is to revert this patch from the 5.11 branch.

Thanks,
Christian.

Am 22.03.21 um 13:27 schrieb Greg Kroah-Hartman:
> From: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> [ Upstream commit 57fcd550eb15bce14a7154736379dfd4ed60ae81 ]
>
> Not technically a problem for ttm, but very likely a driver bug and
> pretty big time confusing for reviewing code.
>
> So warn about it, both at cleanup time (so we catch these for sure)
> and at pin/unpin time (so we know who's the culprit).
>
> Reviewed-by: Huang Rui <ray.huang@amd.com>
> Reviewed-by: Christian König <christian.koenig@amd.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Christian Koenig <christian.koenig@amd.com>
> Cc: Huang Rui <ray.huang@amd.com>
> Link: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwork.freedesktop.org%2Fpatch%2Fmsgid%2F20201028113120.3641237-1-daniel.vetter%40ffwll.ch&amp;data=04%7C01%7Cchristian.koenig%40amd.com%7C090c217ffc0f4823bbe508d8ed2ec6eb%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637520132480960479%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=SJqFJ7QthSG4R%2B918EqjKliGwi1DJUORh6DtpHGTtn8%3D&amp;reserved=0
> Signed-off-by: Sasha Levin <sashal@kernel.org>
> ---
>   drivers/gpu/drm/ttm/ttm_bo.c | 2 +-
>   include/drm/ttm/ttm_bo_api.h | 2 ++
>   2 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 22073e77fdf9..a76eb2c14e8c 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -514,7 +514,7 @@ static void ttm_bo_release(struct kref *kref)
>   		 * shrinkers, now that they are queued for
>   		 * destruction.
>   		 */
> -		if (bo->pin_count) {
> +		if (WARN_ON(bo->pin_count)) {
>   			bo->pin_count = 0;
>   			ttm_bo_del_from_lru(bo);
>   			ttm_bo_add_mem_to_lru(bo, &bo->mem);
> diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h
> index 2564e66e67d7..79b9367e0ffd 100644
> --- a/include/drm/ttm/ttm_bo_api.h
> +++ b/include/drm/ttm/ttm_bo_api.h
> @@ -600,6 +600,7 @@ static inline bool ttm_bo_uses_embedded_gem_object(struct ttm_buffer_object *bo)
>   static inline void ttm_bo_pin(struct ttm_buffer_object *bo)
>   {
>   	dma_resv_assert_held(bo->base.resv);
> +	WARN_ON_ONCE(!kref_read(&bo->kref));
>   	++bo->pin_count;
>   }
>   
> @@ -613,6 +614,7 @@ static inline void ttm_bo_unpin(struct ttm_buffer_object *bo)
>   {
>   	dma_resv_assert_held(bo->base.resv);
>   	WARN_ON_ONCE(!bo->pin_count);
> +	WARN_ON_ONCE(!kref_read(&bo->kref));
>   	--bo->pin_count;
>   }
>   


^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH 5.11 073/120] drm/ttm: Warn on pinning without holding a reference
  2021-03-25  8:14   ` Christian König
@ 2021-03-25  8:50     ` Greg Kroah-Hartman
  2021-03-25  8:51       ` Christian König
  0 siblings, 1 reply; 135+ messages in thread
From: Greg Kroah-Hartman @ 2021-03-25  8:50 UTC (permalink / raw)
  To: Christian König
  Cc: linux-kernel, stable, Huang Rui, Daniel Vetter, Sasha Levin

On Thu, Mar 25, 2021 at 09:14:59AM +0100, Christian König wrote:
> Hi Greg,
> 
> sorry just realized this after users started to complain. This patch
> shouldn't been backported to 5.11 in the first place.
> 
> The warning itself is a good idea, but we also have patch for drivers and
> TTM in the pipeline for 5.12 so that the warning isn't triggered any more.
> 
> Without backporting all of that we now get a rain of warnings in 5.11.9.
> 
> My suggestion is to revert this patch from the 5.11 branch.

Thanks, will go do so right now and push out a new 5.11 release with
that in it to keep the noise down for you.

greg k-h

^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH 5.11 073/120] drm/ttm: Warn on pinning without holding a reference
  2021-03-25  8:50     ` Greg Kroah-Hartman
@ 2021-03-25  8:51       ` Christian König
  0 siblings, 0 replies; 135+ messages in thread
From: Christian König @ 2021-03-25  8:51 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, stable, Huang Rui, Daniel Vetter, Sasha Levin

Am 25.03.21 um 09:50 schrieb Greg Kroah-Hartman:
> On Thu, Mar 25, 2021 at 09:14:59AM +0100, Christian König wrote:
>> Hi Greg,
>>
>> sorry just realized this after users started to complain. This patch
>> shouldn't been backported to 5.11 in the first place.
>>
>> The warning itself is a good idea, but we also have patch for drivers and
>> TTM in the pipeline for 5.12 so that the warning isn't triggered any more.
>>
>> Without backporting all of that we now get a rain of warnings in 5.11.9.
>>
>> My suggestion is to revert this patch from the 5.11 branch.
> Thanks, will go do so right now and push out a new 5.11 release with
> that in it to keep the noise down for you.

Thanks a lot for that! I got a bit swamped this morning because of mails 
and bug reports.

Christian.

>
> greg k-h


^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers"
  2021-03-22 12:27 ` [PATCH 5.11 084/120] usb: dwc3: gadget: Prevent EP queuing while stopping transfers Greg Kroah-Hartman
@ 2021-04-01 11:55   ` Martin Kepplinger
  2021-04-01 13:04     ` Greg KH
  2021-04-01 18:09     ` [PATCH] " Wesley Cheng
  0 siblings, 2 replies; 135+ messages in thread
From: Martin Kepplinger @ 2021-04-01 11:55 UTC (permalink / raw)
  To: gregkh, balbi; +Cc: linux-kernel, stable, linux-usb, wcheng, Martin Kepplinger

This reverts commit 9de499997c3737e0c0207beb03615b320cabe495.

Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>
---

I more or less blindly report:
commit 9de499997c ("usb: dwc3: gadget: Prevent EP queuing while stopping
transfers") results in the below error every time I connect the type-c
connector to the dwc3, configured with serial and ethernet gadgets.

fyi, I apply the following to dwc3 on this port:
dr_mode = "otg";                                                        
snps,dis_u3_susphy_quirk;                                               
hnp-disable;                                                            
srp-disable;                                                            
adp-disable;                                                            
usb-role-switch;

v5.12-rc5 does not have this error so I'm not sure whether it's
more appropriate to add something to dwc3 than reverting. I hope usb
people to know better and maybe even see the problem.

thanks,
                               martin




[   51.148220] ------------[ cut here ]------------
[   51.148241] dwc3 38100000.usb: No resource for ep2in
[   51.148376] WARNING: CPU: 0 PID: 299 at drivers/usb/dwc3/gadget.c:360 dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.148431] Modules linked in: aes_ce_ccm rfcomm algif_hash algif_skcipher af_alg bnep qmi_wwan cdc_wdm usbnet mii option usb_wwan usbserial caam_jr caamhash_desc caamalg_desc crypto_engine mousedev redpine_sdio redpine_91x bluetooth uas usb_storage mac80211 st_lsm6dsx_spi aes_ce_blk crypto_simd crct10dif_ce cfg80211 ghash_ce sha2_ce sha1_ce bq25890_charger s5k3l6xx snd_soc_wm8962 hi846 vcnl4000 leds_lm3560 edt_ft5x06 ofpart industrialio_triggered_buffer tps6598x st_lsm6dsx_i2c st_lsm6dsx kfifo_buf gnss_mtk typec mxc_mipi_csi2_yav gnss_serial mx6s_capture gnss videobuf2_dma_contig videobuf2_memops spi_nor v4l2_fwnode videobuf2_v4l2 videobuf2_common snd_soc_gtm601 snd_soc_simple_card videodev mtd snd_soc_simple_card_utils mc snd_soc_fsl_sai imx_pcm_dma caam error snvs_pwrkey imx_sdma virt_dma snd_soc_core imx2_wdt snd_pcm_dmaengine snd_pcm watchdog snd_timer snd soundcore pwm_vibra rfkill_hks rfkill ledtrig_timer usb_f_acm u_serial usb_f_rndis g_multi usb_f_mass_storage u_ether
[   51.148759]  libcomposite ledtrig_pattern fuse ip_tables x_tables ipv6 xhci_plat_hcd xhci_hcd usbcore dwc3 cdns_mhdp_imx ulpi cdns_mhdp_drmcore udc_core imx_dcss roles usb_common phy_fsl_imx8mq_usb clk_bd718x7
[   51.148837] CPU: 0 PID: 299 Comm: irq/64-dwc3 Not tainted 5.11.11-librem5-00334-ge4c4ff3624e9 #218
[   51.148848] Hardware name: Purism Librem 5r4 (DT)
[   51.148854] pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
[   51.148863] pc : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.148894] lr : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.148924] sp : ffff800011cb3ac0
[   51.148929] x29: ffff800011cb3ac0 x28: ffff0000032a7b00 
[   51.148942] x27: ffff00000327da00 x26: 0000000000000000 
[   51.148954] x25: 00000000ffffffea x24: 0000000000000006 
[   51.148967] x23: ffff0000bee1c080 x22: ffff800011cb3b7c 
[   51.148979] x21: 0000000000000406 x20: ffff0000bf170000 
[   51.148992] x19: 0000000000000001 x18: 0000000000000000 
[   51.149004] x17: 0000000000000000 x16: 0000000000000000 
[   51.149016] x15: 0000000000000000 x14: ffff8000114512c0 
[   51.149028] x13: 0000000000001698 x12: 0000000000000040 
[   51.149040] x11: ffff80001151a6f8 x10: 00000000ffffe000 
[   51.149052] x9 : ffff8000100b2b7c x8 : ffff80001146a6f8 
[   51.149065] x7 : ffff80001151a6f8 x6 : 0000000000000000 
[   51.149077] x5 : ffff0000bf939948 x4 : 0000000000000000 
[   51.149089] x3 : 0000000000000027 x2 : 0000000000000000 
[   51.149101] x1 : 0000000000000000 x0 : ffff0000049ae040 
[   51.149114] Call trace:
[   51.149120]  dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.149150]  __dwc3_gadget_ep_enable+0x288/0x4fc [dwc3]
[   51.149179]  dwc3_gadget_ep_enable+0x6c/0x15c [dwc3]
[   51.149209]  usb_ep_enable+0x48/0x110 [udc_core]
[   51.149251]  rndis_set_alt+0x138/0x1c0 [usb_f_rndis]
[   51.149276]  composite_setup+0x674/0x194c [libcomposite]
[   51.149314]  dwc3_ep0_interrupt+0x9c4/0xb9c [dwc3]
[   51.149344]  dwc3_thread_interrupt+0x8bc/0xe74 [dwc3]
[   51.149374]  irq_thread_fn+0x38/0xb0
[   51.149388]  irq_thread+0x170/0x294
[   51.149397]  kthread+0x164/0x16c
[   51.149407]  ret_from_fork+0x10/0x34
[   51.149419] ---[ end trace 62c6cc2ebfb18047 ]---
[   51.149436] ------------[ cut here ]------------
[   51.149440] dwc3 38100000.usb: No resource for ep1in
[   51.149507] WARNING: CPU: 0 PID: 299 at drivers/usb/dwc3/gadget.c:360 dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.149543] Modules linked in: aes_ce_ccm rfcomm algif_hash algif_skcipher af_alg bnep qmi_wwan cdc_wdm usbnet mii option usb_wwan usbserial caam_jr caamhash_desc caamalg_desc crypto_engine mousedev redpine_sdio redpine_91x bluetooth uas usb_storage mac80211 st_lsm6dsx_spi aes_ce_blk crypto_simd crct10dif_ce cfg80211 ghash_ce sha2_ce sha1_ce bq25890_charger s5k3l6xx snd_soc_wm8962 hi846 vcnl4000 leds_lm3560 edt_ft5x06 ofpart industrialio_triggered_buffer tps6598x st_lsm6dsx_i2c st_lsm6dsx kfifo_buf gnss_mtk typec mxc_mipi_csi2_yav gnss_serial mx6s_capture gnss videobuf2_dma_contig videobuf2_memops spi_nor v4l2_fwnode videobuf2_v4l2 videobuf2_common snd_soc_gtm601 snd_soc_simple_card videodev mtd snd_soc_simple_card_utils mc snd_soc_fsl_sai imx_pcm_dma caam error snvs_pwrkey imx_sdma virt_dma snd_soc_core imx2_wdt snd_pcm_dmaengine snd_pcm watchdog snd_timer snd soundcore pwm_vibra rfkill_hks rfkill ledtrig_timer usb_f_acm u_serial usb_f_rndis g_multi usb_f_mass_storage u_ether
[   51.149852]  libcomposite ledtrig_pattern fuse ip_tables x_tables ipv6 xhci_plat_hcd xhci_hcd usbcore dwc3 cdns_mhdp_imx ulpi cdns_mhdp_drmcore udc_core imx_dcss roles usb_common phy_fsl_imx8mq_usb clk_bd718x7
[   51.149923] CPU: 0 PID: 299 Comm: irq/64-dwc3 Tainted: G        W         5.11.11-librem5-00334-ge4c4ff3624e9 #218
[   51.149933] Hardware name: Purism Librem 5r4 (DT)
[   51.149937] pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
[   51.149946] pc : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.149977] lr : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.150007] sp : ffff800011cb3a80
[   51.150011] x29: ffff800011cb3a80 x28: ffff0000032a7b00 
[   51.150024] x27: ffff00000327da00 x26: 0000000000000000 
[   51.150037] x25: 00000000ffffffea x24: 0000000000000006 
[   51.150049] x23: ffff0000bee1c080 x22: ffff800011cb3b3c 
[   51.150062] x21: 0000000000000406 x20: ffff0000bf033f00 
[   51.150074] x19: 0000000000000001 x18: 0000000000000000 
[   51.150086] x17: 0000000000000000 x16: 0000000000000000 
[   51.150098] x15: 0000000000000000 x14: ffff8000114512c0 
[   51.150111] x13: 0000000000001698 x12: 0000000000000040 
[   51.150123] x11: ffff80001151a6f8 x10: 00000000ffffe000 
[   51.150135] x9 : ffff8000100b2b7c x8 : ffff80001146a6f8 
[   51.150147] x7 : ffff80001151a6f8 x6 : 0000000000000000 
[   51.150159] x5 : ffff0000bf939948 x4 : 0000000000000000 
[   51.150172] x3 : 0000000000000027 x2 : 0000000000000000 
[   51.150183] x1 : 0000000000000000 x0 : ffff0000049ae040 
[   51.150196] Call trace:
[   51.150200]  dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.150231]  __dwc3_gadget_ep_enable+0x288/0x4fc [dwc3]
[   51.150260]  dwc3_gadget_ep_enable+0x6c/0x15c [dwc3]
[   51.150289]  usb_ep_enable+0x48/0x110 [udc_core]
[   51.150322]  gether_connect+0x3c/0x1f4 [u_ether]
[   51.150340]  rndis_set_alt+0x74/0x1c0 [usb_f_rndis]
[   51.150361]  composite_setup+0x674/0x194c [libcomposite]
[   51.150392]  dwc3_ep0_interrupt+0x9c4/0xb9c [dwc3]
[   51.150423]  dwc3_thread_interrupt+0x8bc/0xe74 [dwc3]
[   51.150452]  irq_thread_fn+0x38/0xb0
[   51.150461]  irq_thread+0x170/0x294
[   51.150469]  kthread+0x164/0x16c
[   51.150478]  ret_from_fork+0x10/0x34
[   51.150487] ---[ end trace 62c6cc2ebfb18048 ]---


 drivers/usb/dwc3/gadget.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 2a86ad4b12b3..ef8ecaf8655a 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -783,6 +783,8 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
 
 	trace_dwc3_gadget_ep_disable(dep);
 
+	dwc3_remove_requests(dwc, dep);
+
 	/* make sure HW endpoint isn't stalled */
 	if (dep->flags & DWC3_EP_STALL)
 		__dwc3_gadget_ep_set_halt(dep, 0, false);
@@ -801,8 +803,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
 		dep->endpoint.desc = NULL;
 	}
 
-	dwc3_remove_requests(dwc, dep);
-
 	return 0;
 }
 
@@ -1617,7 +1617,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
 {
 	struct dwc3		*dwc = dep->dwc;
 
-	if (!dep->endpoint.desc || !dwc->pullups_connected || !dwc->connected) {
+	if (!dep->endpoint.desc || !dwc->pullups_connected) {
 		dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n",
 				dep->name);
 		return -ESHUTDOWN;
@@ -2150,7 +2150,6 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
 	if (!is_on) {
 		u32 count;
 
-		dwc->connected = false;
 		/*
 		 * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a
 		 * Section 4.1.8 Table 4-7, it states that for a device-initiated
@@ -2175,6 +2174,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
 			dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) %
 						dwc->ev_buf->length;
 		}
+		dwc->connected = false;
 	} else {
 		__dwc3_gadget_start(dwc);
 	}
@@ -3267,6 +3267,8 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
 {
 	u32			reg;
 
+	dwc->connected = true;
+
 	/*
 	 * WORKAROUND: DWC3 revisions <1.88a have an issue which
 	 * would cause a missing Disconnect Event if there's a
@@ -3306,7 +3308,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
 	 * transfers."
 	 */
 	dwc3_stop_active_transfers(dwc);
-	dwc->connected = true;
 
 	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
 	reg &= ~DWC3_DCTL_TSTCTRL_MASK;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 135+ messages in thread

* Re: [PATCH] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers"
  2021-04-01 11:55   ` [PATCH] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers" Martin Kepplinger
@ 2021-04-01 13:04     ` Greg KH
  2021-04-01 13:11       ` [PATCH v2] " Martin Kepplinger
  2021-04-01 18:09     ` [PATCH] " Wesley Cheng
  1 sibling, 1 reply; 135+ messages in thread
From: Greg KH @ 2021-04-01 13:04 UTC (permalink / raw)
  To: Martin Kepplinger; +Cc: balbi, linux-kernel, stable, linux-usb, wcheng

On Thu, Apr 01, 2021 at 01:55:58PM +0200, Martin Kepplinger wrote:
> This reverts commit 9de499997c3737e0c0207beb03615b320cabe495.
> 

You do not put a reason here, so I can not take this :(

Please fix up and resend.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 135+ messages in thread

* [PATCH v2] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers"
  2021-04-01 13:04     ` Greg KH
@ 2021-04-01 13:11       ` Martin Kepplinger
  2021-04-01 14:14         ` Greg KH
  0 siblings, 1 reply; 135+ messages in thread
From: Martin Kepplinger @ 2021-04-01 13:11 UTC (permalink / raw)
  To: gregkh, balbi; +Cc: linux-kernel, stable, linux-usb, wcheng, Martin Kepplinger

commit 9de499997c ("usb: dwc3: gadget: Prevent EP queuing while stopping
transfers") results in the below error every time I connect the type-c
connector to the dwc3, configured with serial and ethernet gadgets.
I also apply the following to dwc3 on this port:

dr_mode = "otg";                                                        
snps,dis_u3_susphy_quirk;                                               
hnp-disable;                                                            
srp-disable;                                                            
adp-disable;                                                            
usb-role-switch;

[   51.148220] ------------[ cut here ]------------
[   51.148241] dwc3 38100000.usb: No resource for ep2in
[   51.148376] WARNING: CPU: 0 PID: 299 at drivers/usb/dwc3/gadget.c:360 dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.148837] CPU: 0 PID: 299 Comm: irq/64-dwc3 Not tainted 5.11.11-librem5-00334-ge4c4ff3624e9 #218
[   51.148848] Hardware name: Purism Librem 5r4 (DT)
[   51.148854] pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
[   51.148863] pc : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.148894] lr : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.148924] sp : ffff800011cb3ac0
[   51.148929] x29: ffff800011cb3ac0 x28: ffff0000032a7b00 
[   51.148942] x27: ffff00000327da00 x26: 0000000000000000 
[   51.148954] x25: 00000000ffffffea x24: 0000000000000006 
[   51.148967] x23: ffff0000bee1c080 x22: ffff800011cb3b7c 
[   51.148979] x21: 0000000000000406 x20: ffff0000bf170000 
[   51.148992] x19: 0000000000000001 x18: 0000000000000000 
[   51.149004] x17: 0000000000000000 x16: 0000000000000000 
[   51.149016] x15: 0000000000000000 x14: ffff8000114512c0 
[   51.149028] x13: 0000000000001698 x12: 0000000000000040 
[   51.149040] x11: ffff80001151a6f8 x10: 00000000ffffe000 
[   51.149052] x9 : ffff8000100b2b7c x8 : ffff80001146a6f8 
[   51.149065] x7 : ffff80001151a6f8 x6 : 0000000000000000 
[   51.149077] x5 : ffff0000bf939948 x4 : 0000000000000000 
[   51.149089] x3 : 0000000000000027 x2 : 0000000000000000 
[   51.149101] x1 : 0000000000000000 x0 : ffff0000049ae040 
[   51.149114] Call trace:
[   51.149120]  dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
[   51.149150]  __dwc3_gadget_ep_enable+0x288/0x4fc [dwc3]
[   51.149179]  dwc3_gadget_ep_enable+0x6c/0x15c [dwc3]
[   51.149209]  usb_ep_enable+0x48/0x110 [udc_core]
[   51.149251]  rndis_set_alt+0x138/0x1c0 [usb_f_rndis]
[   51.149276]  composite_setup+0x674/0x194c [libcomposite]
[   51.149314]  dwc3_ep0_interrupt+0x9c4/0xb9c [dwc3]
[   51.149344]  dwc3_thread_interrupt+0x8bc/0xe74 [dwc3]
[   51.149374]  irq_thread_fn+0x38/0xb0
[   51.149388]  irq_thread+0x170/0x294
[   51.149397]  kthread+0x164/0x16c
[   51.149407]  ret_from_fork+0x10/0x34
[   51.149419] ---[ end trace 62c6cc2ebfb18047 ]---

Linus' tree isn't affected. Revert the change.

Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>

---

 drivers/usb/dwc3/gadget.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 2a86ad4b12b3..ef8ecaf8655a 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -783,6 +783,8 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
 
 	trace_dwc3_gadget_ep_disable(dep);
 
+	dwc3_remove_requests(dwc, dep);
+
 	/* make sure HW endpoint isn't stalled */
 	if (dep->flags & DWC3_EP_STALL)
 		__dwc3_gadget_ep_set_halt(dep, 0, false);
@@ -801,8 +803,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
 		dep->endpoint.desc = NULL;
 	}
 
-	dwc3_remove_requests(dwc, dep);
-
 	return 0;
 }
 
@@ -1617,7 +1617,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
 {
 	struct dwc3		*dwc = dep->dwc;
 
-	if (!dep->endpoint.desc || !dwc->pullups_connected || !dwc->connected) {
+	if (!dep->endpoint.desc || !dwc->pullups_connected) {
 		dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n",
 				dep->name);
 		return -ESHUTDOWN;
@@ -2150,7 +2150,6 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
 	if (!is_on) {
 		u32 count;
 
-		dwc->connected = false;
 		/*
 		 * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a
 		 * Section 4.1.8 Table 4-7, it states that for a device-initiated
@@ -2175,6 +2174,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
 			dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) %
 						dwc->ev_buf->length;
 		}
+		dwc->connected = false;
 	} else {
 		__dwc3_gadget_start(dwc);
 	}
@@ -3267,6 +3267,8 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
 {
 	u32			reg;
 
+	dwc->connected = true;
+
 	/*
 	 * WORKAROUND: DWC3 revisions <1.88a have an issue which
 	 * would cause a missing Disconnect Event if there's a
@@ -3306,7 +3308,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
 	 * transfers."
 	 */
 	dwc3_stop_active_transfers(dwc);
-	dwc->connected = true;
 
 	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
 	reg &= ~DWC3_DCTL_TSTCTRL_MASK;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 135+ messages in thread

* Re: [PATCH v2] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers"
  2021-04-01 13:11       ` [PATCH v2] " Martin Kepplinger
@ 2021-04-01 14:14         ` Greg KH
  0 siblings, 0 replies; 135+ messages in thread
From: Greg KH @ 2021-04-01 14:14 UTC (permalink / raw)
  To: Martin Kepplinger; +Cc: balbi, linux-kernel, stable, linux-usb, wcheng

On Thu, Apr 01, 2021 at 03:11:08PM +0200, Martin Kepplinger wrote:
> commit 9de499997c ("usb: dwc3: gadget: Prevent EP queuing while stopping
> transfers") results in the below error every time I connect the type-c
> connector to the dwc3, configured with serial and ethernet gadgets.
> I also apply the following to dwc3 on this port:
> 
> dr_mode = "otg";                                                        
> snps,dis_u3_susphy_quirk;                                               
> hnp-disable;                                                            
> srp-disable;                                                            
> adp-disable;                                                            

Why all the trailing whitespace?

> usb-role-switch;
> 
> [   51.148220] ------------[ cut here ]------------
> [   51.148241] dwc3 38100000.usb: No resource for ep2in
> [   51.148376] WARNING: CPU: 0 PID: 299 at drivers/usb/dwc3/gadget.c:360 dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.148837] CPU: 0 PID: 299 Comm: irq/64-dwc3 Not tainted 5.11.11-librem5-00334-ge4c4ff3624e9 #218
> [   51.148848] Hardware name: Purism Librem 5r4 (DT)
> [   51.148854] pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
> [   51.148863] pc : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.148894] lr : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.148924] sp : ffff800011cb3ac0
> [   51.148929] x29: ffff800011cb3ac0 x28: ffff0000032a7b00 
> [   51.148942] x27: ffff00000327da00 x26: 0000000000000000 
> [   51.148954] x25: 00000000ffffffea x24: 0000000000000006 
> [   51.148967] x23: ffff0000bee1c080 x22: ffff800011cb3b7c 
> [   51.148979] x21: 0000000000000406 x20: ffff0000bf170000 
> [   51.148992] x19: 0000000000000001 x18: 0000000000000000 
> [   51.149004] x17: 0000000000000000 x16: 0000000000000000 
> [   51.149016] x15: 0000000000000000 x14: ffff8000114512c0 
> [   51.149028] x13: 0000000000001698 x12: 0000000000000040 
> [   51.149040] x11: ffff80001151a6f8 x10: 00000000ffffe000 
> [   51.149052] x9 : ffff8000100b2b7c x8 : ffff80001146a6f8 
> [   51.149065] x7 : ffff80001151a6f8 x6 : 0000000000000000 
> [   51.149077] x5 : ffff0000bf939948 x4 : 0000000000000000 
> [   51.149089] x3 : 0000000000000027 x2 : 0000000000000000 
> [   51.149101] x1 : 0000000000000000 x0 : ffff0000049ae040 
> [   51.149114] Call trace:
> [   51.149120]  dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.149150]  __dwc3_gadget_ep_enable+0x288/0x4fc [dwc3]
> [   51.149179]  dwc3_gadget_ep_enable+0x6c/0x15c [dwc3]
> [   51.149209]  usb_ep_enable+0x48/0x110 [udc_core]
> [   51.149251]  rndis_set_alt+0x138/0x1c0 [usb_f_rndis]
> [   51.149276]  composite_setup+0x674/0x194c [libcomposite]
> [   51.149314]  dwc3_ep0_interrupt+0x9c4/0xb9c [dwc3]
> [   51.149344]  dwc3_thread_interrupt+0x8bc/0xe74 [dwc3]
> [   51.149374]  irq_thread_fn+0x38/0xb0
> [   51.149388]  irq_thread+0x170/0x294
> [   51.149397]  kthread+0x164/0x16c
> [   51.149407]  ret_from_fork+0x10/0x34
> [   51.149419] ---[ end trace 62c6cc2ebfb18047 ]---
> 
> Linus' tree isn't affected. Revert the change.

What does this mean?

> 
> Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>
> 
> ---

What changed from v1?  Always put that below the --- line.

And as this is a revert, is a "Fixes:" line also relevant?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers"
  2021-04-01 11:55   ` [PATCH] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers" Martin Kepplinger
  2021-04-01 13:04     ` Greg KH
@ 2021-04-01 18:09     ` Wesley Cheng
  2021-04-02  9:27       ` Martin Kepplinger
  1 sibling, 1 reply; 135+ messages in thread
From: Wesley Cheng @ 2021-04-01 18:09 UTC (permalink / raw)
  To: Martin Kepplinger, gregkh, balbi; +Cc: linux-kernel, stable, linux-usb



On 4/1/2021 4:55 AM, Martin Kepplinger wrote:
> This reverts commit 9de499997c3737e0c0207beb03615b320cabe495.
> 
> Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>
> ---
> 
> I more or less blindly report:
> commit 9de499997c ("usb: dwc3: gadget: Prevent EP queuing while stopping
> transfers") results in the below error every time I connect the type-c
> connector to the dwc3, configured with serial and ethernet gadgets.
> 
> fyi, I apply the following to dwc3 on this port:
> dr_mode = "otg";                                                        
> snps,dis_u3_susphy_quirk;                                               
> hnp-disable;                                                            
> srp-disable;                                                            
> adp-disable;                                                            
> usb-role-switch;
> 
> v5.12-rc5 does not have this error so I'm not sure whether it's
> more appropriate to add something to dwc3 than reverting. I hope usb
> people to know better and maybe even see the problem.
> 
> thanks,
>                                martin
> 
Hi Martin,

This has been fixed with the below:
https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/commit/?h=usb-linus&id=5aef629704ad4d983ecf5c8a25840f16e45b6d59

Can you pull that in and give it a try?

Thanks
Wesley Cheng

> 
> 
> 
> [   51.148220] ------------[ cut here ]------------
> [   51.148241] dwc3 38100000.usb: No resource for ep2in
> [   51.148376] WARNING: CPU: 0 PID: 299 at drivers/usb/dwc3/gadget.c:360 dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.148431] Modules linked in: aes_ce_ccm rfcomm algif_hash algif_skcipher af_alg bnep qmi_wwan cdc_wdm usbnet mii option usb_wwan usbserial caam_jr caamhash_desc caamalg_desc crypto_engine mousedev redpine_sdio redpine_91x bluetooth uas usb_storage mac80211 st_lsm6dsx_spi aes_ce_blk crypto_simd crct10dif_ce cfg80211 ghash_ce sha2_ce sha1_ce bq25890_charger s5k3l6xx snd_soc_wm8962 hi846 vcnl4000 leds_lm3560 edt_ft5x06 ofpart industrialio_triggered_buffer tps6598x st_lsm6dsx_i2c st_lsm6dsx kfifo_buf gnss_mtk typec mxc_mipi_csi2_yav gnss_serial mx6s_capture gnss videobuf2_dma_contig videobuf2_memops spi_nor v4l2_fwnode videobuf2_v4l2 videobuf2_common snd_soc_gtm601 snd_soc_simple_card videodev mtd snd_soc_simple_card_utils mc snd_soc_fsl_sai imx_pcm_dma caam error snvs_pwrkey imx_sdma virt_dma snd_soc_core imx2_wdt snd_pcm_dmaengine snd_pcm watchdog snd_timer snd soundcore pwm_vibra rfkill_hks rfkill ledtrig_timer usb_f_acm u_serial usb_f_rndis g_multi usb_f_mass_storage u_ether
> [   51.148759]  libcomposite ledtrig_pattern fuse ip_tables x_tables ipv6 xhci_plat_hcd xhci_hcd usbcore dwc3 cdns_mhdp_imx ulpi cdns_mhdp_drmcore udc_core imx_dcss roles usb_common phy_fsl_imx8mq_usb clk_bd718x7
> [   51.148837] CPU: 0 PID: 299 Comm: irq/64-dwc3 Not tainted 5.11.11-librem5-00334-ge4c4ff3624e9 #218
> [   51.148848] Hardware name: Purism Librem 5r4 (DT)
> [   51.148854] pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
> [   51.148863] pc : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.148894] lr : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.148924] sp : ffff800011cb3ac0
> [   51.148929] x29: ffff800011cb3ac0 x28: ffff0000032a7b00 
> [   51.148942] x27: ffff00000327da00 x26: 0000000000000000 
> [   51.148954] x25: 00000000ffffffea x24: 0000000000000006 
> [   51.148967] x23: ffff0000bee1c080 x22: ffff800011cb3b7c 
> [   51.148979] x21: 0000000000000406 x20: ffff0000bf170000 
> [   51.148992] x19: 0000000000000001 x18: 0000000000000000 
> [   51.149004] x17: 0000000000000000 x16: 0000000000000000 
> [   51.149016] x15: 0000000000000000 x14: ffff8000114512c0 
> [   51.149028] x13: 0000000000001698 x12: 0000000000000040 
> [   51.149040] x11: ffff80001151a6f8 x10: 00000000ffffe000 
> [   51.149052] x9 : ffff8000100b2b7c x8 : ffff80001146a6f8 
> [   51.149065] x7 : ffff80001151a6f8 x6 : 0000000000000000 
> [   51.149077] x5 : ffff0000bf939948 x4 : 0000000000000000 
> [   51.149089] x3 : 0000000000000027 x2 : 0000000000000000 
> [   51.149101] x1 : 0000000000000000 x0 : ffff0000049ae040 
> [   51.149114] Call trace:
> [   51.149120]  dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.149150]  __dwc3_gadget_ep_enable+0x288/0x4fc [dwc3]
> [   51.149179]  dwc3_gadget_ep_enable+0x6c/0x15c [dwc3]
> [   51.149209]  usb_ep_enable+0x48/0x110 [udc_core]
> [   51.149251]  rndis_set_alt+0x138/0x1c0 [usb_f_rndis]
> [   51.149276]  composite_setup+0x674/0x194c [libcomposite]
> [   51.149314]  dwc3_ep0_interrupt+0x9c4/0xb9c [dwc3]
> [   51.149344]  dwc3_thread_interrupt+0x8bc/0xe74 [dwc3]
> [   51.149374]  irq_thread_fn+0x38/0xb0
> [   51.149388]  irq_thread+0x170/0x294
> [   51.149397]  kthread+0x164/0x16c
> [   51.149407]  ret_from_fork+0x10/0x34
> [   51.149419] ---[ end trace 62c6cc2ebfb18047 ]---
> [   51.149436] ------------[ cut here ]------------
> [   51.149440] dwc3 38100000.usb: No resource for ep1in
> [   51.149507] WARNING: CPU: 0 PID: 299 at drivers/usb/dwc3/gadget.c:360 dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.149543] Modules linked in: aes_ce_ccm rfcomm algif_hash algif_skcipher af_alg bnep qmi_wwan cdc_wdm usbnet mii option usb_wwan usbserial caam_jr caamhash_desc caamalg_desc crypto_engine mousedev redpine_sdio redpine_91x bluetooth uas usb_storage mac80211 st_lsm6dsx_spi aes_ce_blk crypto_simd crct10dif_ce cfg80211 ghash_ce sha2_ce sha1_ce bq25890_charger s5k3l6xx snd_soc_wm8962 hi846 vcnl4000 leds_lm3560 edt_ft5x06 ofpart industrialio_triggered_buffer tps6598x st_lsm6dsx_i2c st_lsm6dsx kfifo_buf gnss_mtk typec mxc_mipi_csi2_yav gnss_serial mx6s_capture gnss videobuf2_dma_contig videobuf2_memops spi_nor v4l2_fwnode videobuf2_v4l2 videobuf2_common snd_soc_gtm601 snd_soc_simple_card videodev mtd snd_soc_simple_card_utils mc snd_soc_fsl_sai imx_pcm_dma caam error snvs_pwrkey imx_sdma virt_dma snd_soc_core imx2_wdt snd_pcm_dmaengine snd_pcm watchdog snd_timer snd soundcore pwm_vibra rfkill_hks rfkill ledtrig_timer usb_f_acm u_serial usb_f_rndis g_multi usb_f_mass_storage u_ether
> [   51.149852]  libcomposite ledtrig_pattern fuse ip_tables x_tables ipv6 xhci_plat_hcd xhci_hcd usbcore dwc3 cdns_mhdp_imx ulpi cdns_mhdp_drmcore udc_core imx_dcss roles usb_common phy_fsl_imx8mq_usb clk_bd718x7
> [   51.149923] CPU: 0 PID: 299 Comm: irq/64-dwc3 Tainted: G        W         5.11.11-librem5-00334-ge4c4ff3624e9 #218
> [   51.149933] Hardware name: Purism Librem 5r4 (DT)
> [   51.149937] pstate: 60000085 (nZCv daIf -PAN -UAO -TCO BTYPE=--)
> [   51.149946] pc : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.149977] lr : dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.150007] sp : ffff800011cb3a80
> [   51.150011] x29: ffff800011cb3a80 x28: ffff0000032a7b00 
> [   51.150024] x27: ffff00000327da00 x26: 0000000000000000 
> [   51.150037] x25: 00000000ffffffea x24: 0000000000000006 
> [   51.150049] x23: ffff0000bee1c080 x22: ffff800011cb3b3c 
> [   51.150062] x21: 0000000000000406 x20: ffff0000bf033f00 
> [   51.150074] x19: 0000000000000001 x18: 0000000000000000 
> [   51.150086] x17: 0000000000000000 x16: 0000000000000000 
> [   51.150098] x15: 0000000000000000 x14: ffff8000114512c0 
> [   51.150111] x13: 0000000000001698 x12: 0000000000000040 
> [   51.150123] x11: ffff80001151a6f8 x10: 00000000ffffe000 
> [   51.150135] x9 : ffff8000100b2b7c x8 : ffff80001146a6f8 
> [   51.150147] x7 : ffff80001151a6f8 x6 : 0000000000000000 
> [   51.150159] x5 : ffff0000bf939948 x4 : 0000000000000000 
> [   51.150172] x3 : 0000000000000027 x2 : 0000000000000000 
> [   51.150183] x1 : 0000000000000000 x0 : ffff0000049ae040 
> [   51.150196] Call trace:
> [   51.150200]  dwc3_send_gadget_ep_cmd+0x570/0x740 [dwc3]
> [   51.150231]  __dwc3_gadget_ep_enable+0x288/0x4fc [dwc3]
> [   51.150260]  dwc3_gadget_ep_enable+0x6c/0x15c [dwc3]
> [   51.150289]  usb_ep_enable+0x48/0x110 [udc_core]
> [   51.150322]  gether_connect+0x3c/0x1f4 [u_ether]
> [   51.150340]  rndis_set_alt+0x74/0x1c0 [usb_f_rndis]
> [   51.150361]  composite_setup+0x674/0x194c [libcomposite]
> [   51.150392]  dwc3_ep0_interrupt+0x9c4/0xb9c [dwc3]
> [   51.150423]  dwc3_thread_interrupt+0x8bc/0xe74 [dwc3]
> [   51.150452]  irq_thread_fn+0x38/0xb0
> [   51.150461]  irq_thread+0x170/0x294
> [   51.150469]  kthread+0x164/0x16c
> [   51.150478]  ret_from_fork+0x10/0x34
> [   51.150487] ---[ end trace 62c6cc2ebfb18048 ]---
> 
> 
>  drivers/usb/dwc3/gadget.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 2a86ad4b12b3..ef8ecaf8655a 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -783,6 +783,8 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
>  
>  	trace_dwc3_gadget_ep_disable(dep);
>  
> +	dwc3_remove_requests(dwc, dep);
> +
>  	/* make sure HW endpoint isn't stalled */
>  	if (dep->flags & DWC3_EP_STALL)
>  		__dwc3_gadget_ep_set_halt(dep, 0, false);
> @@ -801,8 +803,6 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep)
>  		dep->endpoint.desc = NULL;
>  	}
>  
> -	dwc3_remove_requests(dwc, dep);
> -
>  	return 0;
>  }
>  
> @@ -1617,7 +1617,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
>  {
>  	struct dwc3		*dwc = dep->dwc;
>  
> -	if (!dep->endpoint.desc || !dwc->pullups_connected || !dwc->connected) {
> +	if (!dep->endpoint.desc || !dwc->pullups_connected) {
>  		dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n",
>  				dep->name);
>  		return -ESHUTDOWN;
> @@ -2150,7 +2150,6 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
>  	if (!is_on) {
>  		u32 count;
>  
> -		dwc->connected = false;
>  		/*
>  		 * In the Synopsis DesignWare Cores USB3 Databook Rev. 3.30a
>  		 * Section 4.1.8 Table 4-7, it states that for a device-initiated
> @@ -2175,6 +2174,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
>  			dwc->ev_buf->lpos = (dwc->ev_buf->lpos + count) %
>  						dwc->ev_buf->length;
>  		}
> +		dwc->connected = false;
>  	} else {
>  		__dwc3_gadget_start(dwc);
>  	}
> @@ -3267,6 +3267,8 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
>  {
>  	u32			reg;
>  
> +	dwc->connected = true;
> +
>  	/*
>  	 * WORKAROUND: DWC3 revisions <1.88a have an issue which
>  	 * would cause a missing Disconnect Event if there's a
> @@ -3306,7 +3308,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
>  	 * transfers."
>  	 */
>  	dwc3_stop_active_transfers(dwc);
> -	dwc->connected = true;
>  
>  	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
>  	reg &= ~DWC3_DCTL_TSTCTRL_MASK;
> 

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 135+ messages in thread

* Re: [PATCH] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers"
  2021-04-01 18:09     ` [PATCH] " Wesley Cheng
@ 2021-04-02  9:27       ` Martin Kepplinger
  0 siblings, 0 replies; 135+ messages in thread
From: Martin Kepplinger @ 2021-04-02  9:27 UTC (permalink / raw)
  To: Wesley Cheng, gregkh, balbi; +Cc: linux-kernel, stable, linux-usb

Am Donnerstag, dem 01.04.2021 um 11:09 -0700 schrieb Wesley Cheng:
> 
> 
> On 4/1/2021 4:55 AM, Martin Kepplinger wrote:
> > This reverts commit 9de499997c3737e0c0207beb03615b320cabe495.
> > 
> > Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>
> > ---
> > 
> > I more or less blindly report:
> > commit 9de499997c ("usb: dwc3: gadget: Prevent EP queuing while
> > stopping
> > transfers") results in the below error every time I connect the
> > type-c
> > connector to the dwc3, configured with serial and ethernet gadgets.
> > 
> > fyi, I apply the following to dwc3 on this port:
> > dr_mode =
> > "otg";                                                        
> > snps,dis_u3_susphy_quirk;                                          
> >      
> > hnp-
> > disable;                                                           
> > srp-
> > disable;                                                           
> > adp-
> > disable;                                                           
> > usb-role-switch;
> > 
> > v5.12-rc5 does not have this error so I'm not sure whether it's
> > more appropriate to add something to dwc3 than reverting. I hope
> > usb
> > people to know better and maybe even see the problem.
> > 
> > thanks,
> >                                martin
> > 
> Hi Martin,
> 
> This has been fixed with the below:
> https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/commit/?h=usb-linus&id=5aef629704ad4d983ecf5c8a25840f16e45b6d59
> 
> Can you pull that in and give it a try?
> 
> Thanks
> Wesley Cheng

yes, that's a fix for my problem (and what I secretly had hoped to get
:). Thank you very much. In case it helps:

Tested-by: Martin Kepplinger <martin.kepplinger@puri.sm>



^ permalink raw reply	[flat|nested] 135+ messages in thread

end of thread, other threads:[~2021-04-02  9:28 UTC | newest]

Thread overview: 135+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-22 12:26 [PATCH 5.11 000/120] 5.11.9-rc1 review Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 001/120] ASoC: ak4458: Add MODULE_DEVICE_TABLE Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 002/120] ASoC: ak5558: " Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 003/120] spi: cadence: set cqspi to the driver_data field of struct device Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 004/120] ALSA: dice: fix null pointer dereference when node is disconnected Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 005/120] ALSA: hda/realtek: apply pin quirk for XiaomiNotebook Pro Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 006/120] ALSA: hda: generic: Fix the micmute led init state Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 007/120] ALSA: hda/realtek: Apply headset-mic quirks for Xiaomi Redmibook Air Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 008/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 840 G8 Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 009/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 440 G8 Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 010/120] ALSA: hda/realtek: fix mute/micmute LEDs for HP 850 G8 Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 011/120] Revert "PM: runtime: Update device status before letting suppliers suspend" Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 012/120] s390/vtime: fix increased steal time accounting Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 013/120] s390/pci: refactor zpci_create_device() Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 014/120] s390/pci: remove superfluous zdev->zbus check Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 015/120] s390/pci: fix leak of PCI device structure Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 016/120] zonefs: Fix O_APPEND async write handling Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 017/120] zonefs: prevent use of seq files as swap file Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 018/120] zonefs: fix to update .i_wr_refcnt correctly in zonefs_open_zone() Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 019/120] btrfs: fix race when cloning extent buffer during rewind of an old root Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 020/120] btrfs: fix slab cache flags for free space tree bitmap Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 021/120] vhost-vdpa: fix use-after-free of v->config_ctx Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 022/120] vhost-vdpa: set v->config_ctx to NULL if eventfd_ctx_fdget() fails Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 023/120] drm/amd/display: Copy over soc values before bounding box creation Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 024/120] drm/amd/display: Correct algorithm for reversed gamma Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 025/120] drm/amd/display: Remove MPC gamut remap logic for DCN30 Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 026/120] iommu/amd: Dont call early_amd_iommu_init() when AMD IOMMU is disabled Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 027/120] iommu/amd: Keep track of amd_iommu_irq_remap state Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 028/120] iommu/amd: Move Stoney Ridge check to detect_ivrs() Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 029/120] ASoC: fsl_ssi: Fix TDM slot setup for I2S mode Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 030/120] ASoC: Intel: bytcr_rt5640: Fix HP Pavilion x2 10-p0XX OVCD current threshold Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 031/120] ASoC: SOF: Intel: unregister DMIC device on probe error Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 032/120] ASoC: SOF: intel: fix wrong poll bits in dsp power down Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 033/120] ASoC: qcom: sdm845: Fix array out of bounds access Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 034/120] ASoC: qcom: sdm845: Fix array out of range on rx slim channels Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 035/120] ASoC: codecs: wcd934x: add a sanity check in set channel map Greg Kroah-Hartman
2021-03-22 12:26 ` [PATCH 5.11 036/120] ASoC: qcom: lpass-cpu: Fix lpass dai ids parse Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 037/120] ASoC: simple-card-utils: Do not handle device clock Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 038/120] afs: Fix accessing YFS xattrs on a non-YFS server Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 039/120] afs: Stop listxattr() from listing "afs.*" attributes Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 040/120] ALSA: usb-audio: Fix unintentional sign extension issue Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 041/120] nvme: fix Write Zeroes limitations Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 042/120] nvme-tcp: fix misuse of __smp_processor_id with preemption enabled Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 043/120] nvme-tcp: fix possible hang when failing to set io queues Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 044/120] nvme-tcp: fix a NULL deref when receiving a 0-length r2t PDU Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 045/120] nvmet: dont check iosqes,iocqes for discovery controllers Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 046/120] nfsd: Dont keep looking up unhashed files in the nfsd file cache Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 047/120] nfsd: dont abort copies early Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 048/120] NFSD: Repair misuse of sv_lock in 5.10.16-rt30 Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 049/120] NFSD: fix dest to src mount in inter-server COPY Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 050/120] svcrdma: disable timeouts on rdma backchannel Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 051/120] vfio: IOMMU_API should be selected Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 052/120] vhost_vdpa: fix the missing irq_bypass_unregister_producer() invocation Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 053/120] sunrpc: fix refcount leak for rpc auth modules Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 054/120] i915/perf: Start hrtimer only if sampling the OA buffer Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 055/120] iommu/tegra-smmu: Make tegra_smmu_probe_device() to handle all IOMMU phandles Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 056/120] pstore: Fix warning in pstore_kill_sb() Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 057/120] io_uring: ensure that SQPOLL thread is started for exit Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 058/120] net/qrtr: fix __netdev_alloc_skb call Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 059/120] kbuild: Fix <linux/version.h> for empty SUBLEVEL or PATCHLEVEL again Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 060/120] cifs: warn and fail if trying to use rootfs without the config option Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 061/120] cifs: fix allocation size on newly created files Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 062/120] RISC-V: Fix out-of-bounds accesses in init_resources() Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 063/120] riscv: Correct SPARSEMEM configuration Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 064/120] scsi: lpfc: Fix some error codes in debugfs Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 065/120] scsi: myrs: Fix a double free in myrs_cleanup() Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 066/120] scsi: ufs: ufs-mediatek: Correct operator & -> && Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 067/120] scsi: mpt3sas: Do not use GFP_KERNEL in atomic context Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 068/120] RISC-V: correct enum sbi_ext_rfence_fid Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 069/120] counter: stm32-timer-cnt: Report count function when SLAVE_MODE_DISABLED Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 070/120] ASoC: codecs: lpass-va-macro: mute/unmute all active decimators Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 071/120] ASoC: codecs: lpass-wsa-macro: fix RX MIX input controls Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 072/120] powerpc/vdso32: Add missing _restgpr_31_x to fix build failure Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 073/120] drm/ttm: Warn on pinning without holding a reference Greg Kroah-Hartman
2021-03-25  8:14   ` Christian König
2021-03-25  8:50     ` Greg Kroah-Hartman
2021-03-25  8:51       ` Christian König
2021-03-22 12:27 ` [PATCH 5.11 074/120] drm/ttm: make ttm_bo_unpin more defensive Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 075/120] gpiolib: Assign fwnode to parents if no primary one provided Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 076/120] nvme-rdma: fix possible hang when failing to set io queues Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 077/120] powerpc: Force inlining of cpu_has_feature() to avoid build failure Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 078/120] usb-storage: Add quirk to defeat Kindles automatic unload Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 079/120] usbip: Fix incorrect double assignment to udc->ud.tcp_rx Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 080/120] usb: gadget: configfs: Fix KASAN use-after-free Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 081/120] usb: typec: Remove vdo[3] part of tps6598x_rx_identity_reg struct Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 082/120] usb: typec: tcpm: Invoke power_supply_changed for tcpm-source-psy- Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 083/120] usb: dwc3: gadget: Allow runtime suspend if UDC unbinded Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 084/120] usb: dwc3: gadget: Prevent EP queuing while stopping transfers Greg Kroah-Hartman
2021-04-01 11:55   ` [PATCH] Revert "usb: dwc3: gadget: Prevent EP queuing while stopping transfers" Martin Kepplinger
2021-04-01 13:04     ` Greg KH
2021-04-01 13:11       ` [PATCH v2] " Martin Kepplinger
2021-04-01 14:14         ` Greg KH
2021-04-01 18:09     ` [PATCH] " Wesley Cheng
2021-04-02  9:27       ` Martin Kepplinger
2021-03-22 12:27 ` [PATCH 5.11 085/120] thunderbolt: Initialize HopID IDAs in tb_switch_alloc() Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 086/120] thunderbolt: Increase runtime PM reference count on DP tunnel discovery Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 087/120] iio:adc:stm32-adc: Add HAS_IOMEM dependency Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 088/120] iio:adc:qcom-spmi-vadc: add default scale to LR_MUX2_BAT_ID channel Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 089/120] iio: adis16400: Fix an error code in adis16400_initial_setup() Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 090/120] iio: gyro: mpu3050: Fix error handling in mpu3050_trigger_handler Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 091/120] iio: adc: ab8500-gpadc: Fix off by 10 to 3 Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 092/120] iio: adc: ad7949: fix wrong ADC result due to incorrect bit mask Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 093/120] iio: adc: adi-axi-adc: add proper Kconfig dependencies Greg Kroah-Hartman
2021-03-24 17:01   ` Richard Narron
2021-03-25  5:55   ` Richard Narron
2021-03-22 12:27 ` [PATCH 5.11 094/120] iio: hid-sensor-humidity: Fix alignment issue of timestamp channel Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 095/120] iio: hid-sensor-prox: Fix scale not correct issue Greg Kroah-Hartman
2021-03-22 12:27 ` [PATCH 5.11 096/120] iio: hid-sensor-temperature: Fix issues of timestamp channel Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 097/120] counter: stm32-timer-cnt: fix ceiling write max value Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 098/120] counter: stm32-timer-cnt: fix ceiling miss-alignment with reload register Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 099/120] PCI: rpadlpar: Fix potential drc_name corruption in store functions Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 100/120] perf/x86/intel: Fix a crash caused by zero PEBS status Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 101/120] perf/x86/intel: Fix unchecked MSR access error caused by VLBR_EVENT Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 102/120] x86/ioapic: Ignore IRQ2 again Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 103/120] kernel, fs: Introduce and use set_restart_fn() and arch_set_restart_data() Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 104/120] x86: Move TS_COMPAT back to asm/thread_info.h Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 105/120] x86: Introduce TS_COMPAT_RESTART to fix get_nr_restart_syscall() Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 106/120] efivars: respect EFI_UNSUPPORTED return from firmware Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 107/120] ext4: fix error handling in ext4_end_enable_verity() Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 108/120] ext4: find old entry again if failed to rename whiteout Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 109/120] ext4: stop inode update before return Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 110/120] ext4: do not try to set xattr into ea_inode if value is empty Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 111/120] ext4: fix potential error in ext4_do_update_inode Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 112/120] ext4: fix timer use-after-free on failed mount Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 113/120] ext4: fix rename whiteout with fast commit Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 114/120] MAINTAINERS: move some real subsystems off of the staging mailing list Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 115/120] MAINTAINERS: move the staging subsystem to lists.linux.dev Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 116/120] static_call: Fix static_call_update() sanity check Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 117/120] efi: use 32-bit alignment for efi_guid_t literals Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 118/120] firmware/efi: Fix a use after bug in efi_mem_reserve_persistent Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 119/120] genirq: Disable interrupts for force threaded handlers Greg Kroah-Hartman
2021-03-22 12:28 ` [PATCH 5.11 120/120] x86/apic/of: Fix CPU devicetree-node lookups Greg Kroah-Hartman
2021-03-22 14:35 ` [PATCH 5.11 000/120] 5.11.9-rc1 review Jon Hunter
2021-03-22 19:00 ` Naresh Kamboju
2021-03-22 21:50 ` Guenter Roeck

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.