5.4.86-rc1 review
Subsystems (10)
Greg Kroah-Hartman
maintainercover 5.4.86-rc1 review
This is the start of the stable review cycle for the 5.4.86 release. There are 453 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, 30 Dec 2020 12:48:23 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.86-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.4.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.4.86-rc1
Steven Rostedt (VMware) <[email protected]>
Revert: "ring-buffer: Remove HAVE_64BIT_ALIGNED_ACCESS"
Nikita Shubin <[email protected]>
rtc: ep93xx: Fix NULL pointer dereference in ep93xx_rtc_read_time
DingHua Ma <[email protected]>
regulator: axp20x: Fix DLDO2 voltage control register mask for AXP22x
Jubin Zhong <[email protected]>
PCI: Fix pci_slot_release() NULL pointer dereference
Carlos Garnacho <[email protected]>
platform/x86: intel-vbtn: Allow switch events on Acer Switch Alpha 12
Dan Williams <[email protected]>
libnvdimm/namespace: Fix reaping of invalidated block-window-namespace labels
SeongJae Park <[email protected]>
xenbus/xenbus_backend: Disallow pending watch messages
SeongJae Park <[email protected]>
xen/xenbus: Count pending messages for each watch
SeongJae Park <[email protected]>
xen/xenbus/xen_bus_type: Support will_handle watch callback
SeongJae Park <[email protected]>
xen/xenbus: Add 'will_handle' callback support in xenbus_watch_path()
SeongJae Park <[email protected]>
xen/xenbus: Allow watches discard events before queueing
Pawel Wieczorkiewicz <[email protected]>
xen-blkback: set ring->xenblkd to NULL after kthread_stop()
Maarten Lankhorst <[email protected]>
dma-buf/dma-resv: Respect num_fences when initializing the shared fence list.
Wang Hai <[email protected]>
device-dax/core: Fix memory leak when rmmod dax.ko
Nicolin Chen <[email protected]>
clk: tegra: Do not return 0 on failure
Terry Zhou <[email protected]>
clk: mvebu: a3700: fix the XTAL MODE pin to MPP1_9
Paul Cercueil <[email protected]>
clk: ingenic: Fix divider calculation with div tables
Yangtao Li <[email protected]>
pinctrl: sunxi: Always call chained_irq_{enter, exit} in sunxi_pinctrl_irq_handler
Zhao Heming <[email protected]>
md/cluster: fix deadlock when node is doing resync job
Zhao Heming <[email protected]>
md/cluster: block reshape with remote resync job
Jonathan Cameron <[email protected]>
iio:adc:ti-ads124s08: Fix alignment and data leak issues.
Jonathan Cameron <[email protected]>
iio:adc:ti-ads124s08: Fix buffer being too long.
Jonathan Cameron <[email protected]>
iio:imu:bmi160: Fix too large a buffer.
Jonathan Cameron <[email protected]>
iio:pressure:mpl3115: Force alignment of buffer
Jonathan Cameron <[email protected]>
iio:magnetometer:mag3110: Fix alignment and data leak issues.
Jonathan Cameron <[email protected]>
iio:light:st_uvis25: Fix timestamp alignment and prevent data leak.
Jonathan Cameron <[email protected]>
iio:light:rpr0521: Fix timestamp alignment and prevent data leak.
Qinglang Miao <[email protected]>
iio: adc: rockchip_saradc: fix missing clk_disable_unprepare() on error in rockchip_saradc_resume
Nuno Sá <[email protected]>
iio: buffer: Fix demux update
James Smart <[email protected]>
scsi: lpfc: Re-fix use after free in lpfc_rq_buf_free()
James Smart <[email protected]>
scsi: lpfc: Fix invalid sleeping context in lpfc_sli4_nvmet_alloc()
Arun Easi <[email protected]>
scsi: qla2xxx: Fix crash during driver load on big endian machines
Sergei Antonov <[email protected]>
mtd: rawnand: meson: fix meson_nfc_dma_buffer_release() arguments
Praveenkumar I <[email protected]>
mtd: rawnand: qcom: Fix DMA sync on FLASH_STATUS register read
Sven Eckelmann <[email protected]>
mtd: parser: cmdline: Fix parsing of part-names with colons
Miquel Raynal <[email protected]>
mtd: spinand: Fix OOB read
Evan Green <[email protected]>
soc: qcom: smp2p: Safely acquire spinlock without IRQs
Tudor Ambarus <[email protected]>
spi: atmel-quadspi: Fix AHB memory accesses
Lukas Wunner <[email protected]>
spi: atmel-quadspi: Disable clock in probe error path
Lukas Wunner <[email protected]>
spi: mt7621: Don't leak SPI master in probe error path
Lukas Wunner <[email protected]>
spi: mt7621: Disable clock in probe error path
Lukas Wunner <[email protected]>
spi: synquacer: Disable clock in probe error path
Lukas Wunner <[email protected]>
spi: st-ssc4: Fix unbalanced pm_runtime_disable() in probe error path
Lukas Wunner <[email protected]>
spi: sc18is602: Don't leak SPI master in probe error path
Lukas Wunner <[email protected]>
spi: rb4xx: Don't leak SPI master in probe error path
Lukas Wunner <[email protected]>
spi: pic32: Don't leak DMA channels in probe error path
Lukas Wunner <[email protected]>
spi: mxic: Don't leak SPI master in probe error path
Lukas Wunner <[email protected]>
spi: gpio: Don't leak SPI master in probe error path
Rasmus Villemoes <[email protected]>
spi: fsl: fix use of spisel_boot signal on MPC8309
Lukas Wunner <[email protected]>
spi: davinci: Fix use-after-free on unbind
Lukas Wunner <[email protected]>
spi: atmel-quadspi: Fix use-after-free on unbind
Lukas Wunner <[email protected]>
spi: spi-sh: Fix use-after-free on unbind
Lukas Wunner <[email protected]>
spi: pxa2xx: Fix use-after-free on unbind
Chris Wilson <[email protected]>
drm/i915: Fix mismatch between misplaced vma check and vma insert
Zwane Mwaikambo <[email protected]>
drm/dp_aux_dev: check aux_dev before use in drm_dp_aux_dev_get_by_minor()
Stylon Wang <[email protected]>
drm/amd/display: Fix memory leaks in S3 resume
Bas Nieuwenhuizen <[email protected]>
drm/amd/display: Honor the offset for plane 0.
Dave Kleikamp <[email protected]>
jfs: Fix array index bounds check in dbAdjTree
lizhe <[email protected]>
jffs2: Fix ignoring mounting options problem during remounting
Zhe Li <[email protected]>
jffs2: Fix GC exit abnormally
Richard Weinberger <[email protected]>
ubifs: wbuf: Don't leak kernel memory to flash
Steve French <[email protected]>
SMB3: avoid confusing warning message on mount to Azure
Luis Henriques <[email protected]>
ceph: fix race in concurrent __ceph_remove_cap invocations
Anton Ivanov <[email protected]>
um: Remove use of asprinf in umid.c
Roberto Sassu <[email protected]>
ima: Don't modify file descriptor mode on the fly
David Hildenbrand <[email protected]>
powerpc/powernv/memtrace: Fix crashing the kernel when enabling concurrently
David Hildenbrand <[email protected]>
powerpc/powernv/memtrace: Don't leak kernel memory to user space
Alexey Kardashevskiy <[email protected]>
powerpc/powernv/npu: Do not attempt NPU2 setup on POWER8NVL NPU
Christophe Leroy <[email protected]>
powerpc/mm: Fix verification of MMU_FTR_TYPE_44x
Christophe Leroy <[email protected]>
powerpc/8xx: Fix early debug when SMC1 is relocated
Christophe Leroy <[email protected]>
powerpc/xmon: Change printk() to pr_cont()
Christophe Leroy <[email protected]>
powerpc/feature: Add CPU_FTR_NOEXECUTE to G2_LE
Tyrel Datwyler <[email protected]>
powerpc/rtas: Fix typo of ibm,open-errinjct in RTAS filter
Mathieu Desnoyers <[email protected]>
powerpc: Fix incorrect stw{, ux, u, x} instructions in __set_pte_at
Chuck Lever <[email protected]>
xprtrdma: Fix XDRBUF_SPARSE_PAGES support
Nicolas Ferre <[email protected]>
ARM: dts: at91: sama5d2: fix CAN message ram offset and size
H. Nikolaus Schaller <[email protected]>
ARM: dts: pandaboard: fix pinmux for gpio user button of Pandaboard ES
Marc Zyngier <[email protected]>
KVM: arm64: Introduce handling of AArch32 TTBCR2 traps
Jan Kara <[email protected]>
ext4: fix deadlock with fs freezing and EA inodes
Chunguang Xu <[email protected]>
ext4: fix a memory leak of ext4_free_data
Qu Wenruo <[email protected]>
btrfs: trim: fix underflow in trim length to prevent access beyond device boundary
Josef Bacik <[email protected]>
btrfs: do not shorten unpin len for caching block groups
Johan Hovold <[email protected]>
USB: serial: keyspan_pda: fix write unthrottling
Johan Hovold <[email protected]>
USB: serial: keyspan_pda: fix tx-unthrottle use-after-free
Johan Hovold <[email protected]>
USB: serial: keyspan_pda: fix write-wakeup use-after-free
Johan Hovold <[email protected]>
USB: serial: keyspan_pda: fix stalled writes
Johan Hovold <[email protected]>
USB: serial: keyspan_pda: fix write deadlock
Johan Hovold <[email protected]>
USB: serial: keyspan_pda: fix dropped unthrottle interrupts
Johan Hovold <[email protected]>
USB: serial: digi_acceleport: fix write-wakeup deadlocks
Johan Hovold <[email protected]>
USB: serial: mos7720: fix parallel-port state restore
Daniel Jordan <[email protected]>
cpuset: fix race between hotplug work and later CPU offline
Borislav Petkov <[email protected]>
EDAC/amd64: Fix PCI component registration
Qiuxu Zhuo <[email protected]>
EDAC/i10nm: Use readl() to access MMIO registers
Ard Biesheuvel <[email protected]>
crypto: arm/aes-ce - work around Cortex-A57/A72 silion errata
Ard Biesheuvel <[email protected]>
crypto: ecdh - avoid unaligned accesses in ecdh_set_secret()
Athira Rajeev <[email protected]>
powerpc/perf: Exclude kernel samples while counting events in user space.
Kan Liang <[email protected]>
perf/x86/intel: Fix rtm_abort_event encoding on Ice Lake
Kan Liang <[email protected]>
perf/x86/intel: Add event constraint for CYCLE_ACTIVITY.STALLS_MEM_ANY
Ian Abbott <[email protected]>
staging: comedi: mf6x4: Fix AI end-of-conversion detection
Takashi Iwai <[email protected]>
ASoC: cx2072x: Fix doubly definitions of Playback and Capture streams
Todd Kjos <[email protected]>
binder: add flag to clear buffer on txn complete
Stefan Haberland <[email protected]>
s390/dasd: fix list corruption of lcu list
Stefan Haberland <[email protected]>
s390/dasd: fix list corruption of pavgroup group list
Stefan Haberland <[email protected]>
s390/dasd: prevent inconsistent LCU device data
Stefan Haberland <[email protected]>
s390/dasd: fix hanging device offline processing
Philipp Rudo <[email protected]>
s390/kexec_file: fix diag308 subcode when loading crash kernel
Sven Schnelle <[email protected]>
s390/smp: perform initial CPU reset also for SMT siblings
Robin Gong <[email protected]>
ALSA: core: memalloc: add page alignment for iram
Takashi Iwai <[email protected]>
ALSA: usb-audio: Disable sample read check if firmware doesn't give back
Amadej Kastelic <[email protected]>
ALSA: usb-audio: Add VID to support native DSD reproduction on FiiO devices
Chris Chiu <[email protected]>
ALSA: hda/realtek: Apply jack fixup for Quanta NL3
Takashi Iwai <[email protected]>
ALSA: hda/realtek: Add quirk for MSI-GP73
Chris Chiu <[email protected]>
ALSA/hda: apply jack fixup for the Acer Veriton N4640G/N6640G/N2510G
Takashi Iwai <[email protected]>
ALSA: pcm: oss: Fix a few more UBSAN fixes
Kailang Yang <[email protected]>
ALSA: hda/realtek - Add supported for more Lenovo ALC285 Headset Button
Chris Chiu <[email protected]>
ALSA: hda/realtek - Enable headset mic of ASUS Q524UQK with ALC255
Chris Chiu <[email protected]>
ALSA: hda/realtek - Enable headset mic of ASUS X430UN with ALC256
Hui Wang <[email protected]>
ALSA: hda/realtek: make bass spk volume adjustable on a yoga laptop
Connor McAdams <[email protected]>
ALSA: hda/ca0132 - Fix AE-5 rear headphone pincfg.
Takashi Iwai <[email protected]>
ALSA: hda: Fix regressions on clear and reconfig sysfs
Hui Wang <[email protected]>
ACPI: PNP: compare the string length in the matching_id()
Daniel Scally <[email protected]>
Revert "ACPI / resources: Use AE_CTRL_TERMINATE to terminate resources walks"
Rafael J. Wysocki <[email protected]>
PM: ACPI: PCI: Drop acpi_pm_set_bridge_wakeup()
Connor McAdams <[email protected]>
ALSA: hda/ca0132 - Change Input Source enum strings.
Arnd Bergmann <[email protected]>
Input: cyapa_gen6 - fix out-of-bounds stack access
Sakari Ailus <[email protected]>
media: ipu3-cio2: Make the field on subdev format V4L2_FIELD_NONE
Sakari Ailus <[email protected]>
media: ipu3-cio2: Validate mbus format in setting subdev format
Sakari Ailus <[email protected]>
media: ipu3-cio2: Serialise access to pad format
Sakari Ailus <[email protected]>
media: ipu3-cio2: Return actual subdev format
Sakari Ailus <[email protected]>
media: ipu3-cio2: Remove traces of returned buffers
Lukas Wunner <[email protected]>
media: netup_unidvb: Don't leak SPI master in probe error path
Sean Young <[email protected]>
media: sunxi-cir: ensure IR is handled when it is continuous
Alan Stern <[email protected]>
media: gspca: Fix memory leak in probe
Alexey Kardashevskiy <[email protected]>
vfio/pci/nvlink2: Do not attempt NPU2 setup on POWER8NVL NPU
Simon Beginn <[email protected]>
Input: goodix - add upside-down quirk for Teclast X98 Pro tablet
Arnd Bergmann <[email protected]>
initramfs: fix clang build failure
Dmitry Torokhov <[email protected]>
Input: cros_ec_keyb - send 'scancodes' in addition to key events
Felix Kuehling <[email protected]>
drm/amdkfd: Fix leak in dmabuf import
Chris Park <[email protected]>
drm/amd/display: Prevent bandwidth overflow
Dongdong Wang <[email protected]>
lwt: Disable BH too in run_lwt_bpf()
Serge Hallyn <[email protected]>
fix namespaced fscaps when !CONFIG_SECURITY
Sara Sharon <[email protected]>
cfg80211: initialize rekey_data
Paul Kocialkowski <[email protected]>
ARM: sunxi: Add machine match for the Allwinner V3 SoC
Arnaldo Carvalho de Melo <[email protected]>
perf probe: Fix memory leak when synthesizing SDT probes
Masahiro Yamada <[email protected]>
kconfig: fix return value of do_error_if()
Jernej Skrabec <[email protected]>
clk: sunxi-ng: Make sure divider tables have sentinel
Christophe JAILLET <[email protected]>
clk: s2mps11: Fix a resource leak in error handling paths in the probe function
Alexandre Belloni <[email protected]>
clk: at91: sam9x60: remove atmel,osc-bypass support
Dan Carpenter <[email protected]>
virtio_ring: Fix two use after free bugs
Dan Carpenter <[email protected]>
virtio_net: Fix error code in probe()
Dan Carpenter <[email protected]>
virtio_ring: Cut and paste bugs in vring_create_virtqueue_packed()
Dan Carpenter <[email protected]>
qlcnic: Fix error code in probe
Zheng Zengkai <[email protected]>
perf record: Fix memory leak when using '--user-regs=?' to list registers
Lokesh Vutla <[email protected]>
pwm: lp3943: Dynamically allocate PWM chip base
Uwe Kleine-König <[email protected]>
pwm: zx: Add missing cleanup in error path
Zhang Qilong <[email protected]>
clk: ti: Fix memleak in ti_fapll_synth_setup
Arnd Bergmann <[email protected]>
watchdog: coh901327: add COMMON_CLK dependency
Manivannan Sadhasivam <[email protected]>
watchdog: qcom: Avoid context switch in restart handler
Zhang Qilong <[email protected]>
libnvdimm/label: Return -ENXIO for no slot in __blk_label_update
Vincent Stehlé <[email protected]>
net: korina: fix return value
Christophe JAILLET <[email protected]>
net: allwinner: Fix some resources leak in the error handling path of the probe and in the remove function
Christophe JAILLET <[email protected]>
net: bcmgenet: Fix a resource leak in an error handling path in the probe functin
Sven Van Asbroeck <[email protected]>
lan743x: fix rx_napi_poll/interrupt ping-pong
Dwaipayan Ray <[email protected]>
checkpatch: fix unescaped left brace
Johannes Weiner <[email protected]>
mm: don't wake kswapd prematurely when watermark boosting is disabled
Matthew Wilcox (Oracle) <[email protected]>
sparc: fix handling of page table constructor failure
Vincent Stehlé <[email protected]>
powerpc/ps3: use dma_mapping_error()
Bongsu Jeon <[email protected]>
nfc: s3fwrn5: Release the nfc firmware
Leon Romanovsky <[email protected]>
RDMA/cma: Don't overwrite sgid_attr after device is released
Dan Aloni <[email protected]>
sunrpc: fix xs_read_xdr_buf for partial pages receive
Anton Ivanov <[email protected]>
um: chan_xterm: Fix fd leak
Anton Ivanov <[email protected]>
um: tty: Fix handling of close in tty lines
Anton Ivanov <[email protected]>
um: Monitor error events in IRQ controller
Wang ShaoBo <[email protected]>
ubifs: Fix error return code in ubifs_init_authentication()
Wang Wensheng <[email protected]>
watchdog: Fix potential dereferencing of null pointer
Lingling Xu <[email protected]>
watchdog: sprd: check busy bit before new loading rather than after that
Lingling Xu <[email protected]>
watchdog: sprd: remove watchdog disable from resume fail path
Guenter Roeck <[email protected]>
watchdog: sirfsoc: Add missing dependency on HAS_IOMEM
Guenter Roeck <[email protected]>
watchdog: armada_37xx: Add missing dependency on HAS_IOMEM
Marc Zyngier <[email protected]>
irqchip/alpine-msi: Fix freeing of interrupts on allocation error path
Dan Carpenter <[email protected]>
ASoC: wm_adsp: remove "ctl" from list on error in wm_adsp_create_control()
Johannes Berg <[email protected]>
mac80211: don't set set TDLS STA bandwidth wider than possible
Arnd Bergmann <[email protected]>
crypto: atmel-i2c - select CONFIG_BITREVERSE
Marek Szyprowski <[email protected]>
extcon: max77693: Fix modalias string
Han Xu <[email protected]>
mtd: rawnand: gpmi: Fix the random DMA timeout issue
Dan Carpenter <[email protected]>
mtd: rawnand: meson: Fix a resource leak in init
Zhang Qilong <[email protected]>
mtd: rawnand: gpmi: fix reference count leak in gpmi ops
Dmitry Osipenko <[email protected]>
clk: tegra: Fix duplicated SE clock entry
Zhang Changzhong <[email protected]>
remoteproc: qcom: Fix potential NULL dereference in adsp_init_mmio()
Zhang Qilong <[email protected]>
remoteproc: qcom: fix reference leak in adsp_start
Zhang Qilong <[email protected]>
remoteproc: q6v5-mss: fix error handling in q6v5_pds_enable
Jack Morgenstein <[email protected]>
RDMA/core: Do not indicate device ready when device enablement fails
Sean Nyekjaer <[email protected]>
can: m_can: m_can_config_endisable(): remove double clearing of clock stop request bit
Huang Jianan <[email protected]>
erofs: avoid using generic_block_bmap
Johannes Berg <[email protected]>
iwlwifi: mvm: hook up missing RX handlers
Qinglang Miao <[email protected]>
s390/cio: fix use-after-free in ccw_device_destroy_console
Zhang Changzhong <[email protected]>
bus: fsl-mc: fix error return code in fsl_mc_object_allocate()
Stephen Boyd <[email protected]>
platform/chrome: cros_ec_spi: Don't overwrite spi::mode
Masami Hiramatsu <[email protected]>
x86/kprobes: Restore BTF if the single-stepping is cancelled
Cheng Lin <[email protected]>
nfs_common: need lock during iterate through the list
kazuo ito <[email protected]>
nfsd: Fix message level for normal termination
Yang Yingliang <[email protected]>
speakup: fix uninitialized flush_lock
Zhang Qilong <[email protected]>
usb: oxu210hp-hcd: Fix memory leak in oxu_create
Zhang Qilong <[email protected]>
usb: ehci-omap: Fix PM disable depth umbalance in ehci_hcd_omap_probe
Christophe Leroy <[email protected]>
powerpc/mm: sanity_check_fault() should work for all, not only BOOK3S
Chuhong Yuan <[email protected]>
ASoC: amd: change clk_get() to devm_clk_get() and add missed checks
Colin Ian King <[email protected]>
drm/mediatek: avoid dereferencing a null hdmi_phy on an error message
Nathan Lynch <[email protected]>
powerpc/pseries/hibernation: remove redundant cacheinfo update
Nathan Lynch <[email protected]>
powerpc/pseries/hibernation: drop pseries_suspend_begin() from suspend ops
Vadim Pasternak <[email protected]>
platform/x86: mlx-platform: Fix item counter assignment for MSN2700, MSN24xx systems
Zhang Changzhong <[email protected]>
scsi: fnic: Fix error return code in fnic_probe()
Arnd Bergmann <[email protected]>
seq_buf: Avoid type mismatch for seq_buf_init
Zhang Qilong <[email protected]>
scsi: pm80xx: Fix error return in pm8001_pci_probe()
Qinglang Miao <[email protected]>
scsi: qedi: Fix missing destroy_workqueue() on error in __qedi_probe
Stefan Agner <[email protected]>
arm64: dts: meson: g12a: x96-max: fix PHY deassert timing requirements
Stefan Agner <[email protected]>
ARM: dts: meson: fix PHY deassert timing requirements
Stefan Agner <[email protected]>
arm64: dts: meson: fix PHY deassert timing requirements
Jing Xiangfeng <[email protected]>
Bluetooth: btmtksdio: Add the missed release_firmware() in mtk_setup_firmware()
Jing Xiangfeng <[email protected]>
Bluetooth: btusb: Add the missed release_firmware() in btusb_mtk_setup_firmware()
Pali Rohár <[email protected]>
cpufreq: scpi: Add missing MODULE_ALIAS
Pali Rohár <[email protected]>
cpufreq: loongson1: Add missing MODULE_ALIAS
Pali Rohár <[email protected]>
cpufreq: sun50i: Add missing MODULE_DEVICE_TABLE
Pali Rohár <[email protected]>
cpufreq: st: Add missing MODULE_DEVICE_TABLE
Pali Rohár <[email protected]>
cpufreq: qcom: Add missing MODULE_DEVICE_TABLE
Pali Rohár <[email protected]>
cpufreq: mediatek: Add missing MODULE_DEVICE_TABLE
Pali Rohár <[email protected]>
cpufreq: highbank: Add missing MODULE_DEVICE_TABLE
Pali Rohár <[email protected]>
cpufreq: ap806: Add missing MODULE_DEVICE_TABLE
Keqian Zhu <[email protected]>
clocksource/drivers/arm_arch_timer: Correct fault programming of CNTKCTL_EL1.EVNTI
Keqian Zhu <[email protected]>
clocksource/drivers/arm_arch_timer: Use stable count reader in erratum sne
Wang Li <[email protected]>
phy: renesas: rcar-gen3-usb2: disable runtime pm in case of failure
Qinglang Miao <[email protected]>
dm ioctl: fix error return code in target_message
Chuhong Yuan <[email protected]>
ASoC: jz4740-i2s: add missed checks for clk_get()
Leon Romanovsky <[email protected]>
net/mlx5: Properly convey driver version to firmware
Alexander Sverdlin <[email protected]>
MIPS: Don't round up kernel sections size for memblock_add()
Jing Xiangfeng <[email protected]>
memstick: r592: Fix error return in r592_probe()
Chen-Yu Tsai <[email protected]>
arm64: dts: rockchip: Fix UART pull-ups on rk3328
Yu Kuai <[email protected]>
pinctrl: falcon: add missing put_device() call in pinctrl_falcon_probe()
Andrii Nakryiko <[email protected]>
bpf: Fix bpf_put_raw_tracepoint()'s use of __module_address()
Claudiu Beznea <[email protected]>
ARM: dts: at91: sama5d2: map securam as device
Lars-Peter Clausen <[email protected]>
iio: hrtimer-trigger: Mark hrtimer to expire in hard interrupt context
Yu Kuai <[email protected]>
clocksource/drivers/cadence_ttc: Fix memory leak in ttc_setup_clockevent()
Yang Yingliang <[email protected]>
clocksource/drivers/orion: Add missing clk_disable_unprepare() on error path
Jordan Niethe <[email protected]>
powerpc/64: Fix an EMIT_BUG_ENTRY in head_64.S
Athira Rajeev <[email protected]>
powerpc/perf: Fix crash with is_sier_available when pmu is not set
Dan Carpenter <[email protected]>
media: saa7146: fix array overflow in vidioc_s_audio()
Zhang Qilong <[email protected]>
hwmon: (ina3221) Fix PM usage counter unbalance in ina3221_write_enable
Jason Gunthorpe <[email protected]>
vfio-pci: Use io_remap_pfn_range() for PCI IO memory
Mickaël Salaün <[email protected]>
selftests/seccomp: Update kernel config
NeilBrown <[email protected]>
NFS: switch nfsiod to be an UNBOUND workqueue.
Calum Mackay <[email protected]>
lockd: don't use interval-based rebinding over TCP
Fedor Tokarev <[email protected]>
net: sunrpc: Fix 'snprintf' return value check in 'do_xprt_debugfs'
Trond Myklebust <[email protected]>
NFSv4: Fix the alignment of page data in the getdeviceinfo reply
Trond Myklebust <[email protected]>
SUNRPC: xprt_load_transport() needs to support the netid "rdma6"
Olga Kornievskaia <[email protected]>
NFSv4.2: condition READDIR's mask for security label based on LSM state
Trond Myklebust <[email protected]>
SUNRPC: rpc_wake_up() should wake up tasks in the correct order
Christophe JAILLET <[email protected]>
ath10k: Release some resources in an error handling path
Christophe JAILLET <[email protected]>
ath10k: Fix an error handling path
Rakesh Pillai <[email protected]>
ath10k: Fix the parsing error in service available event
Qinglang Miao <[email protected]>
platform/x86: dell-smbios-base: Fix error return code in dell_smbios_init
Alexandre Belloni <[email protected]>
ARM: dts: at91: at91sam9rl: fix ADC triggers
Yu Kuai <[email protected]>
soc: amlogic: canvas: add missing put_device() call in meson_canvas_get()
Dongjin Kim <[email protected]>
arm64: dts: meson-sm1: fix typo in opp table
Artem Lapkin <[email protected]>
arm64: dts: meson: fix spi-max-frequency on Khadas VIM2
Bharat Gooty <[email protected]>
PCI: iproc: Fix out-of-bound array accesses
Colin Ian King <[email protected]>
PCI: Fix overflow in command-line resource alignment requests
Bjorn Helgaas <[email protected]>
PCI: Bounds-check command-line resource alignment requests
Bjorn Andersson <[email protected]>
arm64: dts: qcom: c630: Polish i2c-hid devices
Michael Walle <[email protected]>
arm64: dts: ls1028a: fix ENETC PTP clock input
Marc Zyngier <[email protected]>
genirq/irqdomain: Don't try to free an interrupt that has no mapping
Zhang Qilong <[email protected]>
power: supply: bq24190_charger: fix reference leak
Hans de Goede <[email protected]>
power: supply: axp288_charger: Fix HP Pavilion x2 10 DMI matching
Chen-Yu Tsai <[email protected]>
arm64: dts: rockchip: Set dr_mode to "host" for OTG on rk3328-roc-cc
Marek Behún <[email protected]>
arm64: dts: armada-3720-turris-mox: update ethernet-phy handle name
Chris Packham <[email protected]>
ARM: dts: Remove non-existent i2c1 from 98dx3236
Jing Xiangfeng <[email protected]>
HSI: omap_ssi: Don't jump to free ID in ssi_add_controller()
Bjorn Andersson <[email protected]>
slimbus: qcom-ngd-ctrl: Avoid sending power requests without QMI
Dan Carpenter <[email protected]>
media: max2175: fix max2175_set_csm_mode() error code
Qinglang Miao <[email protected]>
mips: cdmm: fix use-after-free in mips_cdmm_bus_discover
Daniel Gomez <[email protected]>
media: imx214: Fix stop streaming
Daniel T. Lee <[email protected]>
samples: bpf: Fix lwt_len_hist reusing previous BPF map
Vadim Pasternak <[email protected]>
platform/x86: mlx-platform: Remove PSU EEPROM from MSN274x platform configuration
Vadim Pasternak <[email protected]>
platform/x86: mlx-platform: Remove PSU EEPROM from default platform configuration
Keita Suzuki <[email protected]>
media: siano: fix memory leak of debugfs members in smsdvb_hotplug
Vidya Sagar <[email protected]>
arm64: tegra: Fix DT binding for IO High Voltage entry
Yu Kuai <[email protected]>
leds: netxbig: add missing put_device() call in netxbig_leds_get_of_pdata()
Zhihao Cheng <[email protected]>
dmaengine: mv_xor_v2: Fix error return code in mv_xor_v2_probe()
Qinglang Miao <[email protected]>
cw1200: fix missing destroy_workqueue() on error in cw1200_init_common
Zhang Changzhong <[email protected]>
rsi: fix error return code in rsi_reset_card()
Wang Hai <[email protected]>
qtnfmac: fix error return code in qtnf_pcie_probe()
Sebastian Andrzej Siewior <[email protected]>
orinoco: Move context allocation after processing the skb
Zhihao Cheng <[email protected]>
mmc: pxamci: Fix error return code in pxamci_probe
Cristian Birsan <[email protected]>
ARM: dts: at91: sama5d3_xplained: add pincontrol for USB Host
Cristian Birsan <[email protected]>
ARM: dts: at91: sama5d4_xplained: add pincontrol for USB Host
Qinglang Miao <[email protected]>
memstick: fix a double-free bug in memstick_check
Kamal Heib <[email protected]>
RDMA/cxgb4: Validate the number of CQEs
Kevin Hilman <[email protected]>
clk: meson: Kconfig: fix dependency for G12A
Zhang Qilong <[email protected]>
Input: omap4-keypad - fix runtime PM error handling
Zhihao Cheng <[email protected]>
drivers: soc: ti: knav_qmss_queue: Fix error return code in knav_queue_probe
Zhang Qilong <[email protected]>
soc: ti: Fix reference imbalance in knav_dma_probe
Zhang Qilong <[email protected]>
soc: ti: knav_qmss: fix reference leak in knav_queue_probe
Uwe Kleine-König <[email protected]>
spi: fix resource leak for drivers without .remove callback
Zhang Qilong <[email protected]>
crypto: omap-aes - Fix PM disable depth imbalance in omap_aes_probe
Nathan Chancellor <[email protected]>
crypto: crypto4xx - Replace bitwise OR with logical OR in crypto4xx_build_pd
Yazen Ghannam <[email protected]>
EDAC/mce_amd: Use struct cpuinfo_x86.cpu_die_id for AMD NodeId
Christophe Leroy <[email protected]>
powerpc/feature: Fix CPU_FTRS_ALWAYS by removing CPU_FTRS_GENERIC_32
Ard Biesheuvel <[email protected]>
powerpc: Avoid broken GCC __attribute__((optimize))
Björn Töpel <[email protected]>
selftests/bpf: Fix broken riscv build
Zhang Qilong <[email protected]>
spi: mxs: fix reference leak in mxs_spi_probe
Yang Yingliang <[email protected]>
usb/max3421: fix return error code in max3421_probe()
Dmitry Torokhov <[email protected]>
Input: ads7846 - fix unaligned access on 7845
Oleksij Rempel <[email protected]>
Input: ads7846 - fix integer overflow on Rt calculation
David Jander <[email protected]>
Input: ads7846 - fix race that causes missing releases
Yang Yingliang <[email protected]>
drm/omap: dmm_tiler: fix return error code in omap_dmm_probe()
Yang Yingliang <[email protected]>
video: fbdev: atmel_lcdfb: fix return error code in atmel_lcdfb_of_init()
Qinglang Miao <[email protected]>
media: solo6x10: fix missing snd_card_free in error handling case
Martin Wilck <[email protected]>
scsi: core: Fix VPD LUN ID designator priorities
Jerome Brunet <[email protected]>
ASoC: meson: fix COMPILE_TEST error
Lad Prabhakar <[email protected]>
media: v4l2-fwnode: Return -EINVAL for invalid bus-type
Yu Kuai <[email protected]>
media: mtk-vcodec: add missing put_device() call in mtk_vcodec_init_enc_pm()
Yu Kuai <[email protected]>
media: mtk-vcodec: add missing put_device() call in mtk_vcodec_release_dec_pm()
Yu Kuai <[email protected]>
media: mtk-vcodec: add missing put_device() call in mtk_vcodec_init_dec_pm()
Colin Ian King <[email protected]>
media: tm6000: Fix sizeof() mismatches
Jing Xiangfeng <[email protected]>
staging: gasket: interrupt: fix the missed eventfd_ctx_put() in gasket_interrupt.c
Zhang Qilong <[email protected]>
staging: greybus: codecs: Fix reference counter leak in error handling
Jack Xu <[email protected]>
crypto: qat - fix status check in qat_hal_put_rel_rd_xfer()
Necip Fazil Yildiran <[email protected]>
MIPS: BCM47XX: fix kconfig dependency bug for BCM47XX_BCMA
Arnd Bergmann <[email protected]>
RDMa/mthca: Work around -Wenum-conversion warning
Zhang Qilong <[email protected]>
ASoC: arizona: Fix a wrong free in wm8997_probe
Vincent Bernat <[email protected]>
net: evaluate net.ipv4.conf.all.proxy_arp_pvlan
Vincent Bernat <[email protected]>
net: evaluate net.ipvX.conf.all.ignore_routes_with_linkdown
Zhang Qilong <[email protected]>
spi: sprd: fix reference leak in sprd_spi_remove
Zhang Qilong <[email protected]>
ASoC: wm8998: Fix PM disable depth imbalance on error
Hangbin Liu <[email protected]>
selftest/bpf: Add missed ip6ip6 test back
Tsuchiya Yuto <[email protected]>
mwifiex: fix mwifiex_shutdown_sw() causing sw reset failure
Qinglang Miao <[email protected]>
spi: bcm63xx-hsspi: fix missing clk_disable_unprepare() on error in bcm63xx_hsspi_resume
Zhang Qilong <[email protected]>
spi: tegra114: fix reference leak in tegra spi ops
Zhang Qilong <[email protected]>
spi: tegra20-sflash: fix reference leak in tegra_sflash_resume
Zhang Qilong <[email protected]>
spi: tegra20-slink: fix reference leak in slink ops of tegra20
Qinglang Miao <[email protected]>
spi: mt7621: fix missing clk_disable_unprepare() on error in mt7621_spi_probe
Zhang Qilong <[email protected]>
spi: spi-ti-qspi: fix reference leak in ti_qspi_setup
Anant Thazhemadam <[email protected]>
Bluetooth: hci_h5: fix memory leak in h5_close
Anmol Karn <[email protected]>
Bluetooth: Fix null pointer dereference in hci_event_packet()
Paweł Chmiel <[email protected]>
arm64: dts: exynos: Correct psci compatible used on Exynos7
Paweł Chmiel <[email protected]>
arm64: dts: exynos: Include common syscon restart/poweroff for Exynos7
Seung-Woo Kim <[email protected]>
brcmfmac: Fix memory leak for unpaired brcmf_{alloc/free}Zhang Qilong <[email protected]>
spi: stm32: fix reference leak in stm32_spi_resume
Paul Moore <[email protected]>
selinux: fix inode_doinit_with_dentry() LABEL_INVALID error handling
Andrii Nakryiko <[email protected]>
libbpf: Fix BTF data layout checks and allow empty BTF
Cezary Rojewski <[email protected]>
ASoC: pcm: DRAIN support reactivation
Zhang Qilong <[email protected]>
spi: spi-mem: fix reference leak in spi_mem_access_start
Dmitry Baryshkov <[email protected]>
drm/msm/dsi_pll_10nm: restore VCO rate during restore_state
Jaegeuk Kim <[email protected]>
f2fs: call f2fs_get_meta_page_retry for nat page
Zhang Qilong <[email protected]>
spi: img-spfi: fix reference leak in img_spfi_resume
Jordan Niethe <[email protected]>
powerpc/64: Set up a kernel stack for secondaries before cpu_restore()
Arnd Bergmann <[email protected]>
drm/amdgpu: fix build_coefficients() argument
Vijay Khemka <[email protected]>
ARM: dts: aspeed: tiogapass: Remove vuart
Clément Péron <[email protected]>
ASoC: sun4i-i2s: Fix lrck_period computation for I2S justified mode
Colin Ian King <[email protected]>
crypto: inside-secure - Fix sizeof() mismatch
Christophe Leroy <[email protected]>
crypto: talitos - Fix return type of current_desc_hdr()
Christophe Leroy <[email protected]>
crypto: talitos - Endianess in current_desc_hdr()
Arnd Bergmann <[email protected]>
drm/amdgpu: fix incorrect enum type
Thomas Gleixner <[email protected]>
sched: Reenable interrupts in do_sched_yield()
Peng Liu <[email protected]>
sched/deadline: Fix sched_dl_global_validate()
David Woodhouse <[email protected]>
x86/apic: Fix x2apic enablement without interrupt remapping
Ard Biesheuvel <[email protected]>
ARM: p2v: fix handling of LPAE translation in BE mode
Arvind Sankar <[email protected]>
x86/mm/ident_map: Check for errors from ident_pud_init()
Bob Pearson <[email protected]>
RDMA/rxe: Compute PSN windows correctly
Joel Stanley <[email protected]>
ARM: dts: aspeed: s2600wf: Fix VGA memory region location
Tianyue Ren <[email protected]>
selinux: fix error initialization in inode_doinit_with_dentry()
Dan Carpenter <[email protected]>
rtc: pcf2127: fix pcf2127_nvmem_read/write() returns
Kamal Heib <[email protected]>
RDMA/bnxt_re: Set queue pair state when being queried
Douglas Anderson <[email protected]>
Revert "i2c: i2c-qcom-geni: Fix DMA transfer race"
Douglas Anderson <[email protected]>
soc: qcom: geni: More properly switch to DMA mode
Nicolas Boichat <[email protected]>
soc: mediatek: Check if power domains can be powered on at boot time
Dan Carpenter <[email protected]>
soc: renesas: rmobile-sysc: Fix some leaks in rmobile_init_pm_domains()
Biju Das <[email protected]>
arm64: dts: renesas: cat875: Remove rxc-skew-ps from ethernet-phy node
Biju Das <[email protected]>
arm64: dts: renesas: hihope-rzg2-ex: Drop rxc-skew-ps from ethernet-phy node
Krzysztof Kozlowski <[email protected]>
drm/tve200: Fix handling of platform_get_irq() error
Krzysztof Kozlowski <[email protected]>
drm/mcde: Fix handling of platform_get_irq() error
Randy Dunlap <[email protected]>
drm/aspeed: Fix Kconfig warning & subsequent build errors
Tom Rix <[email protected]>
drm/gma500: fix double free of gma_connector
Dae R. Jeong <[email protected]>
md: fix a warning caused by a race between concurrent md_ioctl()s
Eric Biggers <[email protected]>
crypto: af_alg - avoid undefined behavior accessing salg_name
Antti Palosaari <[email protected]>
media: msi2500: assign SPI bus number dynamically
Jan Kara <[email protected]>
quota: Sanity-check quota file headers on load
Peilin Ye <[email protected]>
Bluetooth: Fix slab-out-of-bounds read in hci_le_direct_adv_report_evt()
Alexey Kardashevskiy <[email protected]>
serial_core: Check for port state when tty is in error state
Julian Sax <[email protected]>
HID: i2c-hid: add Vero K147 to descriptor override
Arnd Bergmann <[email protected]>
scsi: megaraid_sas: Check user-provided offsets
Sai Prakash Ranjan <[email protected]>
coresight: etb10: Fix possible NULL ptr dereference in etb_enable_perf()
Suzuki K Poulose <[email protected]>
coresight: tmc-etr: Fix barrier packet insertion for perf buffer
Mao Jinlong <[email protected]>
coresight: tmc-etr: Check if page is valid before dma_map_page()
Sai Prakash Ranjan <[email protected]>
coresight: tmc-etf: Fix NULL ptr dereference in tmc_enable_etf_sink_perf()
Krzysztof Kozlowski <[email protected]>
ARM: dts: exynos: fix USB 3.0 pins supply being turned off on Odroid XU
Krzysztof Kozlowski <[email protected]>
ARM: dts: exynos: fix USB 3.0 VBUS control and over-current pins on Exynos5410
Krzysztof Kozlowski <[email protected]>
ARM: dts: exynos: fix roles of USB 3.0 ports on Odroid XU
Fabio Estevam <[email protected]>
usb: chipidea: ci_hdrc_imx: Pass DISABLE_DEVICE_STREAMING flag to imx6ul
Will McVicker <[email protected]>
USB: gadget: f_rndis: fix bitrate for SuperSpeed and above
Jack Pham <[email protected]>
usb: gadget: f_fs: Re-use SS descriptors for SuperSpeedPlus
Will McVicker <[email protected]>
USB: gadget: f_midi: setup SuperSpeed Plus descriptors
taehyun.cho <[email protected]>
USB: gadget: f_acm: add support for SuperSpeed Plus
Johan Hovold <[email protected]>
USB: serial: option: add interface-number sanity check to flag handling
Dan Carpenter <[email protected]>
usb: mtu3: fix memory corruption in mtu3_debugfs_regset()
Nicolin Chen <[email protected]>
soc/tegra: fuse: Fix index bug in get_process_id
Masahiro Yamada <[email protected]>
kbuild: avoid split lines in .mod files
Stephane Eranian <[email protected]>
perf/x86/intel: Check PEBS status correctly
Brandon Syu <[email protected]>
drm/amd/display: Init clock value by current vbios CLKs
Luca Coelho <[email protected]>
iwlwifi: pcie: add one missing entry for AX210
Thomas Gleixner <[email protected]>
dm table: Remove BUG_ON(in_interrupt())
Sreekanth Reddy <[email protected]>
scsi: mpt3sas: Increase IOCInit request timeout to 30s
Sven Eckelmann <[email protected]>
vxlan: Copy needed_tailroom from lowerdev
Sven Eckelmann <[email protected]>
vxlan: Add needed_headroom for lower device
Mark Rutland <[email protected]>
arm64: syscall: exit userspace before unmasking exceptions
Ofir Bitton <[email protected]>
habanalabs: put devices before driver removal
Qinglang Miao <[email protected]>
drm/tegra: sor: Disable clocks on error in tegra_sor_init()
Nicholas Piggin <[email protected]>
kernel/cpu: add arch override for clear_tasks_mm_cpumask() mm handling
Deepak R Varma <[email protected]>
drm/tegra: replace idr_init() by idr_init_base()
Russell King <[email protected]>
net: mvpp2: add mvpp2_phylink_to_port() helper
Paolo Abeni <[email protected]>
selftests: fix poll error in udpgro.sh
Björn Töpel <[email protected]>
ixgbe: avoid premature Rx buffer reuse
Björn Töpel <[email protected]>
i40e: avoid premature Rx buffer reuse
Li RongQing <[email protected]>
i40e: optimise prefetch page refcount
Björn Töpel <[email protected]>
i40e: Refactor rx_bi accesses
Leon Romanovsky <[email protected]>
RDMA/cm: Fix an attempt to use non-valid pointer when cleaning timewait
Toke Høiland-Jørgensen <[email protected]>
selftests/bpf/test_offload.py: Reset ethtool features after failed setting
Brett Mastbergen <[email protected]>
netfilter: nft_ct: Remove confirmation check for NFT_CT_ID
Chunyan Zhang <[email protected]>
gpio: eic-sprd: break loop when getting NULL device resource
Baolin Wang <[email protected]>
Revert "gpio: eic-sprd: Use devm_platform_ioremap_resource()"
David Howells <[email protected]>
afs: Fix memory leak when mounting with multiple source parameters
Pablo Neira Ayuso <[email protected]>
netfilter: nft_dynset: fix timeouts later than 23 days
Florian Westphal <[email protected]>
netfilter: nft_compat: make sure xtables destructors have run
Subash Abhinov Kasiviswanathan <[email protected]>
netfilter: x_tables: Switch synchronization to RCU
Andrew Jeffery <[email protected]>
pinctrl: aspeed: Fix GPIO requests on pass-through banks
Douglas Anderson <[email protected]>
blk-mq: In blk_mq_dispatch_rq_list() "no budget" is a reason to kick
Johannes Thumshirn <[email protected]>
block: factor out requeue handling from dispatch code
Damien Le Moal <[email protected]>
block: Simplify REQ_OP_ZONE_RESET_ALL handling
Geert Uytterhoeven <[email protected]>
clk: renesas: r9a06g032: Drop __packed for portability
Zhang Qilong <[email protected]>
can: softing: softing_netdev_open(): fix error handling
Xuan Zhuo <[email protected]>
xsk: Replace datagram_poll by sock_poll_wait
Luc Van Oostenryck <[email protected]>
xsk: Fix xsk_poll()'s return type
Randy Dunlap <[email protected]>
scsi: bnx2i: Requires MMU
Baruch Siach <[email protected]>
gpio: mvebu: fix potential user-after-free on probe
Qinglang Miao <[email protected]>
gpio: zynq: fix reference leak in zynq_gpio functions
Zhang Qilong <[email protected]>
PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter
Bernd Bauer <[email protected]>
ARM: dts: imx6qdl-kontron-samx6i: fix I2C_PM scl pin
Fabio Estevam <[email protected]>
ARM: dts: imx6qdl-wandboard-revd1: Remove PAD_GPIO_6 from enetgrp
Adam Sampson <[email protected]>
ARM: dts: sun7i: pcduino3-nano: enable RGMII RX/TX delay on PHY
Icenowy Zheng <[email protected]>
ARM: dts: sun8i: v3s: fix GIC node memory range
Andy Shevchenko <[email protected]>
pinctrl: baytrail: Avoid clearing debounce value when turning it off
Andy Shevchenko <[email protected]>
pinctrl: merrifield: Set default bias in case no particular value given
Pablo Greco <[email protected]>
ARM: dts: sun8i: v40: bananapi-m2-berry: Fix ethernet node
Pablo Greco <[email protected]>
ARM: dts: sun8i: r40: bananapi-m2-berry: Fix dcdc1 regulator
Pablo Greco <[email protected]>
ARM: dts: sun7i: bananapi: Enable RGMII RX/TX delay on Ethernet PHY
-------------
Diffstat:
Documentation/networking/ip-sysctl.txt | 3 + Makefile | 4 +- arch/Kconfig | 16 +++ arch/arm/boot/dts/armada-xp-98dx3236.dtsi | 5 - .../arm/boot/dts/aspeed-bmc-facebook-tiogapass.dts | 5 - arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts | 4 +- arch/arm/boot/dts/at91-sama5d3_xplained.dts | 7 ++ arch/arm/boot/dts/at91-sama5d4_xplained.dts | 7 ++ arch/arm/boot/dts/at91sam9rl.dtsi | 19 ++-- arch/arm/boot/dts/exynos5410-odroidxu.dts | 6 +- arch/arm/boot/dts/exynos5410-pinctrl.dtsi | 28 +++++ arch/arm/boot/dts/exynos5410.dtsi | 4 + arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi | 2 +- arch/arm/boot/dts/imx6qdl-wandboard-revd1.dtsi | 1 - arch/arm/boot/dts/meson8b-odroidc1.dts | 2 +- arch/arm/boot/dts/meson8m2-mxiii-plus.dts | 2 +- arch/arm/boot/dts/omap4-panda-es.dts | 2 +- arch/arm/boot/dts/sama5d2.dtsi | 7 +- arch/arm/boot/dts/sun7i-a20-bananapi.dts | 2 +- arch/arm/boot/dts/sun7i-a20-pcduino3-nano.dts | 4 +- arch/arm/boot/dts/sun8i-v3s.dtsi | 2 +- arch/arm/boot/dts/sun8i-v40-bananapi-m2-berry.dts | 12 +- arch/arm/crypto/aes-ce-core.S | 32 ++++-- arch/arm/kernel/head.S | 6 +- arch/arm/mach-sunxi/sunxi.c | 1 + arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts | 2 +- .../boot/dts/amlogic/meson-gxbb-nanopi-k2.dts | 2 +- .../arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts | 2 +- .../boot/dts/amlogic/meson-gxbb-vega-s95.dtsi | 2 +- arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 2 +- .../boot/dts/amlogic/meson-gxl-s905d-p230.dts | 2 +- .../boot/dts/amlogic/meson-gxm-khadas-vim2.dts | 4 +- .../arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-gxm-q200.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-sm1.dtsi | 2 +- arch/arm64/boot/dts/exynos/exynos7.dtsi | 12 +- arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 +- .../boot/dts/marvell/armada-3720-turris-mox.dts | 2 +- arch/arm64/boot/dts/nvidia/tegra194.dtsi | 4 +- .../boot/dts/qcom/sdm850-lenovo-yoga-c630.dts | 31 ++--- arch/arm64/boot/dts/renesas/cat875.dtsi | 1 - arch/arm64/boot/dts/renesas/hihope-rzg2-ex.dtsi | 1 - arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 1 + arch/arm64/boot/dts/rockchip/rk3328.dtsi | 16 +-- arch/arm64/include/asm/kvm_host.h | 1 + arch/arm64/kernel/syscall.c | 2 +- arch/arm64/kvm/sys_regs.c | 1 + arch/mips/bcm47xx/Kconfig | 1 + arch/mips/kernel/setup.c | 4 +- arch/powerpc/include/asm/book3s/32/pgtable.h | 4 +- arch/powerpc/include/asm/cpm1.h | 1 + arch/powerpc/include/asm/cputable.h | 7 +- arch/powerpc/include/asm/nohash/pgtable.h | 4 +- arch/powerpc/kernel/Makefile | 3 + arch/powerpc/kernel/head_64.S | 10 +- arch/powerpc/kernel/paca.c | 4 +- arch/powerpc/kernel/rtas.c | 2 +- arch/powerpc/kernel/setup-common.c | 4 +- arch/powerpc/kernel/setup.h | 6 - arch/powerpc/kernel/setup_64.c | 2 +- arch/powerpc/mm/fault.c | 8 +- arch/powerpc/mm/mem.c | 2 +- arch/powerpc/perf/core-book3s.c | 13 +++ arch/powerpc/platforms/8xx/micropatch.c | 11 ++ arch/powerpc/platforms/powernv/memtrace.c | 44 +++++-- arch/powerpc/platforms/powernv/npu-dma.c | 16 ++- arch/powerpc/platforms/pseries/suspend.c | 4 - arch/powerpc/xmon/nonstdio.c | 2 +- arch/s390/kernel/smp.c | 18 +-- arch/s390/purgatory/head.S | 9 +- arch/sparc/mm/init_64.c | 2 +- arch/um/drivers/chan_user.c | 4 +- arch/um/drivers/xterm.c | 5 + arch/um/os-Linux/irq.c | 2 +- arch/um/os-Linux/umid.c | 17 +-- arch/x86/events/intel/core.c | 5 +- arch/x86/events/intel/ds.c | 2 +- arch/x86/include/asm/apic.h | 1 + arch/x86/kernel/apic/apic.c | 14 ++- arch/x86/kernel/apic/x2apic_phys.c | 9 ++ arch/x86/kernel/kprobes/core.c | 5 + arch/x86/mm/ident_map.c | 12 +- block/blk-mq.c | 37 +++--- block/blk-zoned.c | 40 +++---- crypto/af_alg.c | 10 +- crypto/ecdh.c | 9 +- drivers/acpi/acpi_pnp.c | 3 + drivers/acpi/device_pm.c | 41 ++----- drivers/acpi/resource.c | 2 +- drivers/android/binder.c | 1 + drivers/android/binder_alloc.c | 48 ++++++++ drivers/android/binder_alloc.h | 4 +- drivers/block/xen-blkback/xenbus.c | 4 +- drivers/bluetooth/btmtksdio.c | 2 +- drivers/bluetooth/btusb.c | 2 +- drivers/bluetooth/hci_h5.c | 3 + drivers/bus/fsl-mc/fsl-mc-allocator.c | 4 +- drivers/bus/mips_cdmm.c | 4 +- drivers/clk/at91/sam9x60.c | 6 +- drivers/clk/clk-s2mps11.c | 1 + drivers/clk/ingenic/cgu.c | 14 ++- drivers/clk/meson/Kconfig | 1 + drivers/clk/mvebu/armada-37xx-xtal.c | 4 +- drivers/clk/renesas/r9a06g032-clocks.c | 2 +- drivers/clk/sunxi-ng/ccu-sun50i-a64.c | 1 + drivers/clk/sunxi-ng/ccu-sun8i-h3.c | 1 + drivers/clk/tegra/clk-dfll.c | 4 +- drivers/clk/tegra/clk-id.h | 1 + drivers/clk/tegra/clk-tegra-periph.c | 2 +- drivers/clk/ti/fapll.c | 11 +- drivers/clocksource/arm_arch_timer.c | 27 +++-- drivers/clocksource/timer-cadence-ttc.c | 18 +-- drivers/clocksource/timer-orion.c | 11 +- drivers/cpufreq/armada-8k-cpufreq.c | 6 + drivers/cpufreq/highbank-cpufreq.c | 7 ++ drivers/cpufreq/loongson1-cpufreq.c | 1 + drivers/cpufreq/mediatek-cpufreq.c | 1 + drivers/cpufreq/qcom-cpufreq-nvmem.c | 1 + drivers/cpufreq/scpi-cpufreq.c | 1 + drivers/cpufreq/sti-cpufreq.c | 7 ++ drivers/cpufreq/sun50i-cpufreq-nvmem.c | 1 + drivers/crypto/Kconfig | 1 + drivers/crypto/amcc/crypto4xx_core.c | 2 +- drivers/crypto/inside-secure/safexcel.c | 2 +- drivers/crypto/omap-aes.c | 3 +- drivers/crypto/qat/qat_common/qat_hal.c | 2 +- drivers/crypto/talitos.c | 10 +- drivers/dax/super.c | 1 + drivers/dma-buf/dma-resv.c | 2 +- drivers/dma/mv_xor_v2.c | 4 +- drivers/edac/amd64_edac.c | 26 +++-- drivers/edac/i10nm_base.c | 11 +- drivers/edac/mce_amd.c | 2 +- drivers/extcon/extcon-max77693.c | 2 +- drivers/gpio/gpio-eic-sprd.c | 9 +- drivers/gpio/gpio-mvebu.c | 16 ++- drivers/gpio/gpio-zynq.c | 4 +- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 17 ++- .../drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c | 13 ++- drivers/gpu/drm/amd/display/dc/core/dc_link.c | 7 +- drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 4 +- .../drm/amd/display/modules/color/color_gamma.c | 2 +- drivers/gpu/drm/aspeed/Kconfig | 1 + drivers/gpu/drm/drm_dp_aux_dev.c | 2 +- drivers/gpu/drm/gma500/cdv_intel_dp.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +- drivers/gpu/drm/mcde/mcde_drv.c | 4 +- drivers/gpu/drm/mediatek/mtk_hdmi_phy.c | 5 +- drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c | 8 ++ drivers/gpu/drm/omapdrm/omap_dmm_tiler.c | 1 + drivers/gpu/drm/tegra/drm.c | 2 +- drivers/gpu/drm/tegra/sor.c | 10 +- drivers/gpu/drm/tve200/tve200_drv.c | 4 +- drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c | 8 ++ drivers/hsi/controllers/omap_ssi_core.c | 2 +- drivers/hwmon/ina3221.c | 2 +- drivers/hwtracing/coresight/coresight-etb10.c | 4 +- drivers/hwtracing/coresight/coresight-priv.h | 2 + drivers/hwtracing/coresight/coresight-tmc-etf.c | 4 +- drivers/hwtracing/coresight/coresight-tmc-etr.c | 4 +- drivers/i2c/busses/i2c-qcom-geni.c | 6 +- drivers/iio/adc/rockchip_saradc.c | 2 +- drivers/iio/adc/ti-ads124s08.c | 13 ++- drivers/iio/imu/bmi160/bmi160_core.c | 4 +- drivers/iio/industrialio-buffer.c | 6 +- drivers/iio/light/rpr0521.c | 17 ++- drivers/iio/light/st_uvis25.h | 5 + drivers/iio/light/st_uvis25_core.c | 8 +- drivers/iio/magnetometer/mag3110.c | 13 ++- drivers/iio/pressure/mpl3115.c | 9 +- drivers/iio/trigger/iio-trig-hrtimer.c | 4 +- drivers/infiniband/core/cm.c | 2 + drivers/infiniband/core/cma.c | 7 +- drivers/infiniband/core/device.c | 7 +- drivers/infiniband/hw/bnxt_re/ib_verbs.c | 1 + drivers/infiniband/hw/cxgb4/cq.c | 3 + drivers/infiniband/hw/mthca/mthca_cq.c | 2 +- drivers/infiniband/hw/mthca/mthca_dev.h | 1 - drivers/infiniband/sw/rxe/rxe_req.c | 3 +- drivers/input/keyboard/cros_ec_keyb.c | 1 + drivers/input/keyboard/omap4-keypad.c | 89 +++++++++------ drivers/input/mouse/cyapa_gen6.c | 2 +- drivers/input/touchscreen/ads7846.c | 52 +++++---- drivers/input/touchscreen/goodix.c | 12 ++ drivers/irqchip/irq-alpine-msi.c | 3 +- drivers/leds/leds-netxbig.c | 35 ++++-- drivers/md/dm-ioctl.c | 1 + drivers/md/dm-table.c | 6 - drivers/md/md-cluster.c | 67 ++++++----- drivers/md/md.c | 21 +++- drivers/media/common/siano/smsdvb-main.c | 5 +- drivers/media/i2c/imx214.c | 2 +- drivers/media/i2c/max2175.c | 2 +- drivers/media/pci/intel/ipu3/ipu3-cio2.c | 62 +++++----- drivers/media/pci/intel/ipu3/ipu3-cio2.h | 1 + drivers/media/pci/netup_unidvb/netup_unidvb_spi.c | 5 +- drivers/media/pci/saa7146/mxb.c | 19 ++-- drivers/media/pci/solo6x10/solo6x10-g723.c | 2 +- .../media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c | 19 +++- .../media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | 26 +++-- drivers/media/rc/sunxi-cir.c | 2 + drivers/media/usb/gspca/gspca.c | 1 + drivers/media/usb/msi2500/msi2500.c | 2 +- drivers/media/usb/tm6000/tm6000-video.c | 5 +- drivers/media/v4l2-core/v4l2-fwnode.c | 6 +- drivers/memstick/core/memstick.c | 1 - drivers/memstick/host/r592.c | 12 +- drivers/misc/habanalabs/device.c | 16 +-- drivers/mmc/host/pxamci.c | 1 + drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 38 +++++-- drivers/mtd/nand/raw/meson_nand.c | 7 +- drivers/mtd/nand/raw/qcom_nandc.c | 2 + drivers/mtd/nand/spi/core.c | 4 + drivers/mtd/parsers/cmdlinepart.c | 14 ++- drivers/net/can/m_can/m_can.c | 4 - drivers/net/can/softing/softing_main.c | 9 +- drivers/net/ethernet/allwinner/sun4i-emac.c | 7 +- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 +- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 46 +++++--- drivers/net/ethernet/intel/i40e/i40e_xsk.c | 18 ++- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 24 ++-- drivers/net/ethernet/korina.c | 2 +- drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 29 +++-- drivers/net/ethernet/mellanox/mlx5/core/main.c | 6 +- drivers/net/ethernet/microchip/lan743x_main.c | 43 +++---- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 1 + drivers/net/virtio_net.c | 1 + drivers/net/vxlan.c | 3 + drivers/net/wireless/ath/ath10k/usb.c | 7 +- drivers/net/wireless/ath/ath10k/wmi-tlv.c | 4 +- drivers/net/wireless/ath/ath10k/wmi.c | 9 +- drivers/net/wireless/ath/ath10k/wmi.h | 1 + .../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 6 +- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 1 + drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 6 + drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 1 + .../net/wireless/intersil/orinoco/orinoco_usb.c | 14 +-- drivers/net/wireless/marvell/mwifiex/main.c | 2 + drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c | 6 +- drivers/net/wireless/rsi/rsi_91x_usb.c | 30 ++--- drivers/net/wireless/st/cw1200/main.c | 2 + drivers/net/xen-netback/xenbus.c | 6 +- drivers/nfc/s3fwrn5/firmware.c | 4 +- drivers/nvdimm/label.c | 13 ++- drivers/pci/controller/pcie-iproc.c | 10 +- drivers/pci/pci-acpi.c | 4 +- drivers/pci/pci.c | 14 ++- drivers/pci/slot.c | 6 +- drivers/phy/renesas/phy-rcar-gen3-usb2.c | 6 +- drivers/pinctrl/aspeed/pinctrl-aspeed.c | 74 +++++++++++- drivers/pinctrl/aspeed/pinmux-aspeed.h | 7 +- drivers/pinctrl/intel/pinctrl-baytrail.c | 8 +- drivers/pinctrl/intel/pinctrl-merrifield.c | 8 ++ drivers/pinctrl/pinctrl-falcon.c | 14 ++- drivers/pinctrl/sunxi/pinctrl-sunxi.c | 6 +- drivers/platform/chrome/cros_ec_spi.c | 1 - drivers/platform/x86/dell-smbios-base.c | 1 + drivers/platform/x86/intel-vbtn.c | 6 + drivers/platform/x86/mlx-platform.c | 16 +-- drivers/power/supply/axp288_charger.c | 28 +++-- drivers/power/supply/bq24190_charger.c | 20 +++- drivers/ps3/ps3stor_lib.c | 2 +- drivers/pwm/pwm-lp3943.c | 1 + drivers/pwm/pwm-zx.c | 1 + drivers/regulator/axp20x-regulator.c | 2 +- drivers/remoteproc/qcom_q6v5_adsp.c | 13 +-- drivers/remoteproc/qcom_q6v5_mss.c | 5 +- drivers/rtc/rtc-ep93xx.c | 6 +- drivers/rtc/rtc-pcf2127.c | 12 +- drivers/s390/block/dasd_alias.c | 22 +++- drivers/s390/cio/device.c | 4 +- drivers/scsi/bnx2i/Kconfig | 1 + drivers/scsi/fnic/fnic_main.c | 1 + drivers/scsi/lpfc/lpfc_mem.c | 6 +- drivers/scsi/lpfc/lpfc_sli.c | 10 +- drivers/scsi/megaraid/megaraid_sas_base.c | 16 ++- drivers/scsi/mpt3sas/mpt3sas_base.c | 2 +- drivers/scsi/pm8001/pm8001_init.c | 3 +- drivers/scsi/qedi/qedi_main.c | 4 +- drivers/scsi/qla2xxx/qla_tmpl.c | 9 +- drivers/scsi/qla2xxx/qla_tmpl.h | 2 +- drivers/scsi/scsi_lib.c | 126 ++++++++++++++------- drivers/slimbus/qcom-ngd-ctrl.c | 6 + drivers/soc/amlogic/meson-canvas.c | 4 +- drivers/soc/mediatek/mtk-scpsys.c | 5 +- drivers/soc/qcom/qcom-geni-se.c | 17 ++- drivers/soc/qcom/smp2p.c | 5 +- drivers/soc/renesas/rmobile-sysc.c | 1 + drivers/soc/tegra/fuse/speedo-tegra210.c | 2 +- drivers/soc/ti/knav_dma.c | 13 ++- drivers/soc/ti/knav_qmss_queue.c | 4 +- drivers/spi/atmel-quadspi.c | 27 +++-- drivers/spi/spi-bcm63xx-hsspi.c | 4 +- drivers/spi/spi-davinci.c | 2 +- drivers/spi/spi-fsl-spi.c | 11 +- drivers/spi/spi-gpio.c | 15 +-- drivers/spi/spi-img-spfi.c | 4 +- drivers/spi/spi-mem.c | 1 + drivers/spi/spi-mt7621.c | 11 +- drivers/spi/spi-mxic.c | 10 +- drivers/spi/spi-mxs.c | 1 + drivers/spi/spi-pic32.c | 1 + drivers/spi/spi-pxa2xx.c | 5 +- drivers/spi/spi-rb4xx.c | 2 +- drivers/spi/spi-sc18is602.c | 13 +-- drivers/spi/spi-sh.c | 13 +-- drivers/spi/spi-sprd.c | 1 + drivers/spi/spi-st-ssc4.c | 5 +- drivers/spi/spi-stm32.c | 1 + drivers/spi/spi-synquacer.c | 15 +-- drivers/spi/spi-tegra114.c | 2 + drivers/spi/spi-tegra20-sflash.c | 1 + drivers/spi/spi-tegra20-slink.c | 2 + drivers/spi/spi-ti-qspi.c | 1 + drivers/spi/spi.c | 19 ++-- drivers/staging/comedi/drivers/mf6x4.c | 3 +- drivers/staging/gasket/gasket_interrupt.c | 15 ++- drivers/staging/greybus/audio_codec.c | 2 + drivers/staging/speakup/speakup_dectlk.c | 2 +- drivers/tty/serial/serial_core.c | 4 + drivers/usb/chipidea/ci_hdrc_imx.c | 3 +- drivers/usb/gadget/function/f_acm.c | 2 +- drivers/usb/gadget/function/f_fs.c | 5 +- drivers/usb/gadget/function/f_midi.c | 6 + drivers/usb/gadget/function/f_rndis.c | 4 +- drivers/usb/host/ehci-omap.c | 1 + drivers/usb/host/max3421-hcd.c | 3 +- drivers/usb/host/oxu210hp-hcd.c | 4 +- drivers/usb/mtu3/mtu3_debugfs.c | 2 +- drivers/usb/serial/digi_acceleport.c | 45 +++----- drivers/usb/serial/keyspan_pda.c | 63 ++++++----- drivers/usb/serial/mos7720.c | 2 + drivers/usb/serial/option.c | 23 +++- drivers/vfio/pci/vfio_pci.c | 4 +- drivers/vfio/pci/vfio_pci_nvlink2.c | 7 +- drivers/video/fbdev/atmel_lcdfb.c | 2 +- drivers/virtio/virtio_ring.c | 8 +- drivers/watchdog/Kconfig | 4 +- drivers/watchdog/qcom-wdt.c | 2 +- drivers/watchdog/sprd_wdt.c | 34 +++--- drivers/watchdog/watchdog_core.c | 22 ++-- drivers/xen/xen-pciback/xenbus.c | 2 +- drivers/xen/xenbus/xenbus.h | 2 + drivers/xen/xenbus/xenbus_client.c | 8 +- drivers/xen/xenbus/xenbus_probe.c | 1 + drivers/xen/xenbus/xenbus_probe_backend.c | 7 ++ drivers/xen/xenbus/xenbus_xs.c | 34 ++++-- fs/afs/super.c | 3 + fs/btrfs/extent-tree.c | 22 +++- fs/btrfs/extent_io.h | 2 + fs/btrfs/volumes.c | 4 + fs/ceph/caps.c | 11 +- fs/cifs/smb2ops.c | 3 +- fs/erofs/data.c | 26 ++--- fs/ext4/inode.c | 19 +++- fs/ext4/mballoc.c | 1 + fs/f2fs/node.c | 2 +- fs/jffs2/readinode.c | 16 +++ fs/jffs2/super.c | 17 +++ fs/jfs/jfs_dmap.h | 2 +- fs/lockd/host.c | 20 ++-- fs/nfs/inode.c | 2 +- fs/nfs/nfs4proc.c | 10 +- fs/nfs/nfs4xdr.c | 10 +- fs/nfs_common/grace.c | 6 +- fs/nfsd/nfssvc.c | 3 +- fs/quota/quota_v2.c | 19 ++++ fs/ubifs/auth.c | 4 +- fs/ubifs/io.c | 13 ++- include/acpi/acpi_bus.h | 5 - include/linux/inetdevice.h | 4 +- include/linux/netfilter/x_tables.h | 5 +- include/linux/pm_runtime.h | 21 ++++ include/linux/prefetch.h | 8 ++ include/linux/security.h | 2 +- include/linux/seq_buf.h | 2 +- include/linux/sunrpc/xprt.h | 1 + include/linux/trace_seq.h | 4 +- include/media/v4l2-mediabus.h | 2 + include/net/netfilter/nf_tables.h | 6 + include/uapi/linux/android/binder.h | 1 + include/uapi/linux/if_alg.h | 16 +++ include/xen/xenbus.h | 15 ++- init/initramfs.c | 2 +- kernel/cgroup/cpuset.c | 33 +++++- kernel/cpu.c | 6 +- kernel/irq/irqdomain.c | 11 +- kernel/sched/core.c | 6 +- kernel/sched/deadline.c | 5 +- kernel/sched/sched.h | 42 +++---- kernel/trace/bpf_trace.c | 8 +- kernel/trace/ring_buffer.c | 17 ++- mm/page_alloc.c | 13 ++- net/bluetooth/hci_event.c | 17 +-- net/core/lwt_bpf.c | 8 +- net/ipv4/netfilter/arp_tables.c | 14 +-- net/ipv4/netfilter/ip_tables.c | 14 +-- net/ipv6/netfilter/ip6_tables.c | 14 +-- net/mac80211/vht.c | 14 ++- net/netfilter/nf_tables_api.c | 14 ++- net/netfilter/nft_compat.c | 36 +++++- net/netfilter/nft_ct.c | 2 - net/netfilter/nft_dynset.c | 8 +- net/netfilter/x_tables.c | 49 +++----- net/sunrpc/debugfs.c | 4 +- net/sunrpc/sched.c | 65 ++++++----- net/sunrpc/xprt.c | 65 ++++++++--- net/sunrpc/xprtrdma/module.c | 1 + net/sunrpc/xprtrdma/rpc_rdma.c | 40 +++++-- net/sunrpc/xprtrdma/transport.c | 1 + net/sunrpc/xprtsock.c | 7 +- net/wireless/nl80211.c | 2 +- net/xdp/xsk.c | 10 +- samples/bpf/lwt_len_hist.sh | 2 + samples/bpf/test_lwt_bpf.sh | 0 scripts/Makefile.build | 12 +- scripts/checkpatch.pl | 2 +- scripts/kconfig/preprocess.c | 2 +- security/integrity/ima/ima_crypto.c | 20 +--- security/selinux/hooks.c | 16 ++- sound/core/memalloc.c | 3 +- sound/core/oss/pcm_oss.c | 22 ++-- sound/pci/hda/hda_codec.c | 2 +- sound/pci/hda/hda_sysfs.c | 2 +- sound/pci/hda/patch_ca0132.c | 4 +- sound/pci/hda/patch_realtek.c | 18 +++ sound/soc/amd/acp-da7219-max98357a.c | 9 +- sound/soc/codecs/cx2072x.c | 4 +- sound/soc/codecs/wm8997.c | 2 + sound/soc/codecs/wm8998.c | 4 +- sound/soc/codecs/wm_adsp.c | 5 +- sound/soc/jz4740/jz4740-i2s.c | 4 + sound/soc/meson/Kconfig | 2 +- sound/soc/soc-pcm.c | 2 + sound/soc/sunxi/sun4i-i2s.c | 4 +- sound/usb/clock.c | 6 + sound/usb/quirks.c | 1 + tools/lib/bpf/btf.c | 16 +-- tools/perf/util/parse-regs-options.c | 2 +- tools/perf/util/probe-file.c | 13 ++- tools/testing/selftests/bpf/Makefile | 3 +- .../testing/selftests/bpf/progs/test_tunnel_kern.c | 42 ++----- tools/testing/selftests/bpf/test_offload.py | 1 + tools/testing/selftests/bpf/test_tunnel.sh | 43 ++++++- tools/testing/selftests/net/udpgso_bench_rx.c | 3 + tools/testing/selftests/seccomp/config | 1 + 448 files changed, 2712 insertions(+), 1477 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/453 ARM: dts: sun7i: bananapi: Enable RGMII RX/TX delay on Ethernet PHY
From: Pablo Greco <[email protected]>
[ Upstream commit 8c9cb4094ccf242eddd140efba13872c55f68a87 ]
The Ethernet PHY on the Bananapi M1 has the RX and TX delays enabled on the PHY, using pull-ups on the RXDLY and TXDLY pins.
Fix the phy-mode description to correct reflect this so that the implementation doesn't reconfigure the delays incorrectly. This happened with commit bbc4d71d6354 ("net: phy: realtek: fix rtl8211e rx/tx delay config").
--- arch/arm/boot/dts/sun7i-a20-bananapi.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/sun7i-a20-bananapi.dts +1 -1
@@ -132,7 +132,7 @@ pinctrl-names = "default"; pinctrl-0 = <&gmac_rgmii_pins>; phy-handle = <&phy1>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; phy-supply = <®_gmac_3v3>; status = "okay"; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 2/453 ARM: dts: sun8i: r40: bananapi-m2-berry: Fix dcdc1 regulator
In reply to Greg Kroah-HartmanFrom: Pablo Greco <[email protected]>
[ Upstream commit bd5cdcdc66e1f7179ff6d172d1e5f55e43403aa8 ]
DCDC1 regulator powers many different subsystems. While some of them can work at 3.0 V, some of them can not. For example, VCC-HDMI can only work between 3.24 V and 3.36 V. According to OS images provided by the board manufacturer this regulator should be set to 3.3 V.
Set DCDC1 and DCDC1SW to 3.3 V in order to fix this.
--- arch/arm/boot/dts/sun8i-v40-bananapi-m2-berry.dts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
arch/arm/boot/dts/sun8i-v40-bananapi-m2-berry.dts +5 -5
@@ -198,16 +198,16 @@ }; ®_dc1sw { - regulator-min-microvolt = <3000000>; - regulator-max-microvolt = <3000000>; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; regulator-name = "vcc-gmac-phy"; }; ®_dcdc1 { regulator-always-on; - regulator-min-microvolt = <3000000>; - regulator-max-microvolt = <3000000>; - regulator-name = "vcc-3v0"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-name = "vcc-3v3"; }; ®_dcdc2 {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 3/453 ARM: dts: sun8i: v40: bananapi-m2-berry: Fix ethernet node
In reply to Greg Kroah-HartmanFrom: Pablo Greco <[email protected]>
[ Upstream commit 8a82d91fa275aaea49be06d7f5b1407ce1c0dd4b ]
Ethernet PHY on BananaPi M2 Berry provides RX and TX delays. Fix ethernet node to reflect that fact.
--- arch/arm/boot/dts/sun8i-v40-bananapi-m2-berry.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/sun8i-v40-bananapi-m2-berry.dts +1 -1
@@ -120,7 +120,7 @@ pinctrl-names = "default"; pinctrl-0 = <&gmac_rgmii_pins>; phy-handle = <&phy1>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; phy-supply = <®_dc1sw>; status = "okay"; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 4/453 pinctrl: merrifield: Set default bias in case no particular value given
In reply to Greg Kroah-HartmanFrom: Andy Shevchenko <[email protected]>
[ Upstream commit 0fa86fc2e28227f1e64f13867e73cf864c6d25ad ]
When GPIO library asks pin control to set the bias, it doesn't pass any value of it and argument is considered boolean (and this is true for ACPI GpioIo() / GpioInt() resources, by the way). Thus, individual drivers must behave well, when they got the resistance value of 1 Ohm, i.e. transforming it to sane default.
In case of Intel Merrifield pin control hardware the 20 kOhm sounds plausible because it gives a good trade off between weakness and minimization of leakage current (will be only 50 uA with the above choice).
Depends-on: 2956b5d94a76 ("pinctrl / gpio: Introduce .set_config() callback for GPIO chips")
--- drivers/pinctrl/intel/pinctrl-merrifield.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/pinctrl/intel/pinctrl-merrifield.c +8 -0
@@ -741,6 +741,10 @@ static int mrfld_config_set_pin(struct mrfld_pinctrl *mp, unsigned int pin, mask |= BUFCFG_Px_EN_MASK |BUFCFG_PUPD_VAL_MASK ; bits |=BUFCFG_PU_EN ; +/* Set default strength value in case none is given */ +if (arg ==1 ) + arg =20000 ; +switch (arg) {case 50000 : bits |=BUFCFG_PUPD_VAL_50K <<BUFCFG_PUPD_VAL_SHIFT ;
@@ -761,6 +765,10 @@ static int mrfld_config_set_pin(struct mrfld_pinctrl *mp, unsigned int pin, mask |= BUFCFG_Px_EN_MASK |BUFCFG_PUPD_VAL_MASK ; bits |=BUFCFG_PD_EN ; +/* Set default strength value in case none is given */ +if (arg ==1 ) + arg =20000 ; +switch (arg) {case 50000 : bits |=BUFCFG_PUPD_VAL_50K <<BUFCFG_PUPD_VAL_SHIFT ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 5/453 pinctrl: baytrail: Avoid clearing debounce value when turning it off
In reply to Greg Kroah-HartmanFrom: Andy Shevchenko <[email protected]>
[ Upstream commit 0b74e40a4e41f3cbad76dff4c50850d47b525b26 ]
Baytrail pin control has a common register to set up debounce timeout. When a pin configuration requested debounce to be disabled, the rest of the pins may still want to have debounce enabled and thus rely on the common timeout value. Avoid clearing debounce value when turning it off for one pin while others may still use it.
Depends-on: 04ff5a095d66 ("pinctrl: baytrail: Rectify debounce support")
Depends-on: 827e1579e1d5 ("pinctrl: baytrail: Rectify debounce support (part 2)")
--- drivers/pinctrl/intel/pinctrl-baytrail.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/pinctrl/intel/pinctrl-baytrail.c +7 -1
@@ -1060,7 +1060,6 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,break ;case PIN_CONFIG_INPUT_DEBOUNCE : debounce =readl (db_reg); - debounce &= ~BYT_DEBOUNCE_PULSE_MASK ;if (arg) conf |=BYT_DEBOUNCE_EN ;
@@ -1069,24 +1068,31 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,switch (arg) {case 375 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_375US ;break ;case 750 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_750US ;break ;case 1500 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_1500US ;break ;case 3000 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_3MS ;break ;case 6000 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_6MS ;break ;case 12000 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_12MS ;break ;case 24000 : + debounce &= ~BYT_DEBOUNCE_PULSE_MASK ; debounce |=BYT_DEBOUNCE_PULSE_24MS ;break ;default :
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 6/453 ARM: dts: sun8i: v3s: fix GIC node memory range
In reply to Greg Kroah-HartmanFrom: Icenowy Zheng <[email protected]>
[ Upstream commit a98fd117a2553ab1a6d2fe3c7acae88c1eca4372 ]
Currently the GIC node in V3s DTSI follows some old DT examples, and being broken. This leads a warning at boot.
Fix this.
--- arch/arm/boot/dts/sun8i-v3s.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/sun8i-v3s.dtsi +1 -1
@@ -423,7 +423,7 @@ gic: interrupt-controller@1c81000 { compatible = "arm,gic-400"; reg = <0x01c81000 0x1000>, - <0x01c82000 0x1000>, + <0x01c82000 0x2000>, <0x01c84000 0x2000>, <0x01c86000 0x2000>; interrupt-controller;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 7/453 ARM: dts: sun7i: pcduino3-nano: enable RGMII RX/TX delay on PHY
In reply to Greg Kroah-HartmanFrom: Adam Sampson <[email protected]>
[ Upstream commit a7361b9c4615951f52ffd2b1afa09a1384c7b4e4 ]
The RX/TX delays for the Ethernet PHY on the Linksprite pcDuino 3 Nano are configured in hardware, using resistors that are populated to pull the RTL8211E's RXDLY/TXDLY pins low or high as needed.
phy-mode should be set to rgmii-id to reflect this. Previously it was set to rgmii, which used to work but now results in the delays being disabled again as a result of the bugfix in commit bbc4d71d6354 ("net:
phy: realtek: fix rtl8211e rx/tx delay config").
Tested on two pcDuino 3 Nano boards purchased in 2015. Without this fix, Ethernet works unreliably on one board and doesn't work at all on the other.
--- arch/arm/boot/dts/sun7i-a20-pcduino3-nano.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/sun7i-a20-pcduino3-nano.dts +2 -2
@@ -1,5 +1,5 @@ /* - * Copyright 2015 Adam Sampson <[email protected]> + * Copyright 2015-2020 Adam Sampson <[email protected]> * * This file is dual-licensed: you can use it either under the terms * of the GPL or the X11 license, at your option. Note that this dual
@@ -115,7 +115,7 @@ pinctrl-names = "default"; pinctrl-0 = <&gmac_rgmii_pins>; phy-handle = <&phy1>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; status = "okay"; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 8/453 ARM: dts: imx6qdl-wandboard-revd1: Remove PAD_GPIO_6 from enetgrp
In reply to Greg Kroah-HartmanFrom: Fabio Estevam <[email protected]>
[ Upstream commit 58d6bca5efc73235b0f84c0d53321737177c651e ]
Since commit 8ad2d1dcce54 ("ARM: dts: imx6qdl-wandboard: Add OV5645 camera support") the PAD_GPIO_6 is used for providing the camera sensor clock.
Remove it from the enetgrp to fix the following IOMXU conflict:
[ 9.972414] imx6q-pinctrl 20e0000.pinctrl: pin MX6Q_PAD_GPIO_6 already requested by 2188000.ethernet; cannot claim for 1-003c [ 9.983857] imx6q-pinctrl 20e0000.pinctrl: pin-140 (1-003c) status -22 [ 9.990514] imx6q-pinctrl 20e0000.pinctrl: could not request pin 140 (MX6Q_PAD_GPIO_6) from group ov5645grp on device 20e0000.pinctrl
--- arch/arm/boot/dts/imx6qdl-wandboard-revd1.dtsi | 1 - 1 file changed, 1 deletion(-)
arch/arm/boot/dts/imx6qdl-wandboard-revd1.dtsi +0 -1
@@ -166,7 +166,6 @@ MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b030 MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b030 MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b030 - MX6QDL_PAD_GPIO_6__ENET_IRQ 0x000b1 >; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 9/453 ARM: dts: imx6qdl-kontron-samx6i: fix I2C_PM scl pin
In reply to Greg Kroah-HartmanFrom: Bernd Bauer <[email protected]>
[ Upstream commit 19ba8fb810c60b46869acc9f455613de454e0fca ]
Use the correct pin for the i2c scl signal else we can't access the SoM eeprom.
--- arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi +1 -1
@@ -551,7 +551,7 @@ pinctrl_i2c3: i2c3grp { fsl,pins = < - MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1 + MX6QDL_PAD_GPIO_5__I2C3_SCL 0x4001b8b1 MX6QDL_PAD_GPIO_16__I2C3_SDA 0x4001b8b1 >; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 10/453 PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit dd8088d5a8969dc2b42f71d7bc01c25c61a78066 ]
In many case, we need to check return value of pm_runtime_get_sync, but it brings a trouble to the usage counter processing. Many callers forget to decrease the usage counter when it failed, which could resulted in reference leak. It has been discussed a lot[0][1]. So we add a function to deal with the usage counter for better coding.
[0]https://lkml.org/lkml/2020/6/14/88 [1]https://patchwork.ozlabs.org/project/linux-tegra/list/?series=178139
--- include/linux/pm_runtime.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
include/linux/pm_runtime.h +21 -0
@@ -224,6 +224,27 @@ static inline int pm_runtime_get_sync(struct device *dev)return __pm_runtime_resume (dev,RPM_GET_PUT ); } +/** +* pm_runtime_resume_and_get - Bump up usage counter of a device and resume it. +* @dev: Target device. +* +* Resume @dev synchronously and if that is successful, increment its runtime +* PM usage counter. Return 0 if the runtime PM usage counter of @dev has been +* incremented or a negative error code otherwise. +*/ +static inline int pm_runtime_resume_and_get (struct device *dev) +{ +int ret; + + ret =__pm_runtime_resume (dev,RPM_GET_PUT ); +if (ret <0 ) { +pm_runtime_put_noidle (dev); +return ret; + } + +return 0 ; +} +static inline int pm_runtime_put (struct device *dev) {return __pm_runtime_idle (dev,RPM_GET_PUT |RPM_ASYNC );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 11/453 gpio: zynq: fix reference leak in zynq_gpio functions
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit 7f57b295f990c0fa07f96d51ca1c82c52dbf79cc ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to putting operation will result in a reference leak here.
A new function pm_runtime_resume_and_get is introduced in
[0] to keep usage counter balanced. So We fix the reference leak by replacing it with new funtion.
[0] dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter")
--- drivers/gpio/gpio-zynq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpio/gpio-zynq.c +2 -2
@@ -556,7 +556,7 @@ static int zynq_gpio_irq_reqres(struct irq_data *d)struct gpio_chip *chip =irq_data_get_irq_chip_data (d);int ret; - ret =pm_runtime_get_sync (chip->parent); + ret =pm_runtime_resume_and_get (chip->parent);if (ret <0 )return ret;
@@ -884,7 +884,7 @@ static int zynq_gpio_probe(struct platform_device *pdev)pm_runtime_set_active (&pdev->dev);pm_runtime_enable (&pdev->dev); - ret =pm_runtime_get_sync (&pdev->dev); + ret =pm_runtime_resume_and_get (&pdev->dev);if (ret <0 ) goto err_pm_dis;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 12/453 gpio: mvebu: fix potential user-after-free on probe
In reply to Greg Kroah-HartmanFrom: Baruch Siach <[email protected]>
[ Upstream commit 7ee1a01e47403f72b9f38839a737692f6991263e ]
When mvebu_pwm_probe() fails IRQ domain is not released. Move pwm probe before IRQ domain allocation. Add pwm cleanup code to the failure path.
--- drivers/gpio/gpio-mvebu.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
drivers/gpio/gpio-mvebu.c +11 -5
@@ -1196,6 +1196,13 @@ static int mvebu_gpio_probe(struct platform_device *pdev)devm_gpiochip_add_data (&pdev->dev, &mvchip->chip, mvchip); +/* Some MVEBU SoCs have simple PWM support for GPIO lines */ +if (IS_ENABLED (CONFIG_PWM )) { + err =mvebu_pwm_probe (pdev, mvchip, id); +if (err) +return err; + } +/* Some gpio controllers do not provide irq support */ if (!have_irqs)return 0 ;
@@ -1205,7 +1212,8 @@ static int mvebu_gpio_probe(struct platform_device *pdev)if (!mvchip->domain) {dev_err (&pdev->dev,"couldn't allocate irq domain %s (DT).\n" , mvchip->chip.label); -return -ENODEV ; + err = -ENODEV ; + goto err_pwm; } err = irq_alloc_domain_generic_chips(
@@ -1253,14 +1261,12 @@ static int mvebu_gpio_probe(struct platform_device *pdev) mvchip); } -/* Some MVEBU SoCs have simple PWM support for GPIO lines */ -if (IS_ENABLED (CONFIG_PWM )) -return mvebu_pwm_probe (pdev, mvchip, id); -return 0 ; err_domain:irq_domain_remove (mvchip->domain); +err_pwm: +pwmchip_remove (&mvchip->mvpwm->chip);return err; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 13/453 scsi: bnx2i: Requires MMU
In reply to Greg Kroah-HartmanFrom: Randy Dunlap <[email protected]>
[ Upstream commit 2d586494c4a001312650f0b919d534e429dd1e09 ]
The SCSI_BNX2_ISCSI kconfig symbol selects CNIC and CNIC selects UIO, which depends on MMU.
Since 'select' does not follow dependency chains, add the same MMU dependency to SCSI_BNX2_ISCSI.
Quietens this kconfig warning:
WARNING: unmet direct dependencies detected for CNIC
Depends on [n]: NETDEVICES [=y] && ETHERNET [=y] && NET_VENDOR_BROADCOM [=y] && PCI [=y] && (IPV6 [=m] || IPV6 [=m]=n) && MMU [=n] Selected by [m]:
- SCSI_BNX2_ISCSI [=m] && SCSI_LOWLEVEL [=y] && SCSI [=y] && NET [=y] && PCI [=y] && (IPV6 [=m] || IPV6 [=m]=n)
--- drivers/scsi/bnx2i/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/bnx2i/Kconfig +1 -0
@@ -4,6 +4,7 @@ config SCSI_BNX2_ISCSI depends on NET depends on PCI depends on (IPV6 || IPV6=n) + depends on MMU select SCSI_ISCSI_ATTRS select NETDEVICES select ETHERNET
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 14/453 xsk: Fix xsk_poll()s return type
In reply to Greg Kroah-HartmanFrom: Luc Van Oostenryck <[email protected]>
[ Upstream commit 5d946c5abbaf68083fa6a41824dd79e1f06286d8 ]
xsk_poll() is defined as returning 'unsigned int' but the .poll method is declared as returning '__poll_t', a bitwise type.
Fix this by using the proper return type and using the EPOLL constants instead of the POLL ones, as required for __poll_t.
--- net/xdp/xsk.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
net/xdp/xsk.c +4 -4
@@ -426,10 +426,10 @@ static int xsk_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len)return __xsk_sendmsg (sk); } -static unsigned int xsk_poll (struct file *file,struct socket *sock, +static __poll_t xsk_poll (struct file *file,struct socket *sock,struct poll_table_struct *wait) { -unsigned int mask =datagram_poll (file, sock, wait); +__poll_t mask =datagram_poll (file, sock, wait);struct sock *sk = sock->sk;struct xdp_sock *xs =xdp_sk (sk);struct xdp_umem *umem;
@@ -448,9 +448,9 @@ static unsigned int xsk_poll(struct file *file, struct socket *sock, }if (xs->rx && !xskq_empty_desc (xs->rx)) - mask |=POLLIN |POLLRDNORM ; + mask |=EPOLLIN |EPOLLRDNORM ;if (xs->tx && !xskq_full_desc (xs->tx)) - mask |=POLLOUT |POLLWRNORM ; + mask |=EPOLLOUT |EPOLLWRNORM ;return mask; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 15/453 xsk: Replace datagram_poll by sock_poll_wait
In reply to Greg Kroah-HartmanFrom: Xuan Zhuo <[email protected]>
[ Upstream commit f5da54187e33dce9bea63170667dbb0ca8d98194 ]
datagram_poll will judge the current socket status (EPOLLIN, EPOLLOUT) based on the traditional socket information (eg: sk_wmem_alloc), but this does not apply to xsk. So this patch uses sock_poll_wait instead of datagram_poll, and the mask is calculated by xsk_poll.
--- net/xdp/xsk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
net/xdp/xsk.c +3 -1
@@ -429,11 +429,13 @@ static int xsk_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len)static __poll_t xsk_poll (struct file *file,struct socket *sock,struct poll_table_struct *wait) { -__poll_t mask =datagram_poll (file, sock, wait); +__poll_t mask =0 ;struct sock *sk = sock->sk;struct xdp_sock *xs =xdp_sk (sk);struct xdp_umem *umem; +sock_poll_wait (file, sock, wait); +if (unlikely (!xsk_is_bound (xs)))return mask;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 16/453 can: softing: softing_netdev_open(): fix error handling
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 4d1be581ec6b92a338bb7ed23e1381f45ddf336f ]
If softing_netdev_open() fails, we should call close_candev() to avoid reference leak.
--- drivers/net/can/softing/softing_main.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/net/can/softing/softing_main.c +7 -2
@@ -382,8 +382,13 @@ static int softing_netdev_open(struct net_device *ndev)/* check or determine and set bittime */ ret =open_candev (ndev); -if (!ret) - ret =softing_startstop (ndev,1 ); +if (ret) +return ret; + + ret =softing_startstop (ndev,1 ); +if (ret <0 ) +close_candev (ndev); +return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 17/453 clk: renesas: r9a06g032: Drop __packed for portability
In reply to Greg Kroah-HartmanFrom: Geert Uytterhoeven <[email protected]>
[ Upstream commit ceabbf94c317c6175dee6e91805fca4a6353745a ]
The R9A06G032 clock driver uses an array of packed structures to reduce kernel size. However, this array contains pointers, which are no longer aligned naturally, and cannot be relocated on PPC64. Hence when compile-testing this driver on PPC64 with CONFIG_RELOCATABLE=y (e.g. PowerPC allyesconfig), the following warnings are produced:
WARNING: 136 bad relocations
c000000000616be3 R_PPC64_UADDR64 .rodata+0x00000000000cf338
c000000000616bfe R_PPC64_UADDR64 .rodata+0x00000000000cf370
...Fix this by dropping the __packed attribute from the r9a06g032_clkdesc definition, trading a small size increase for portability.
This increases the 156-entry clock table by 1 byte per entry, but due to the compiler generating more efficient code for unpacked accesses, the net size increase is only 76 bytes (gcc 9.3.0 on arm32).
--- drivers/clk/renesas/r9a06g032-clocks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clk/renesas/r9a06g032-clocks.c +1 -1
@@ -55,7 +55,7 @@ struct r9a06g032_clkdesc {u16 sel, g1, r1, g2, r2; } dual; }; -} __packed; +};#define I_GATE (_clk, _rst, _rdy, _midle, _scon, _mirack, _mistat) \ { .gate = _clk, .reset = _rst, \
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 18/453 block: Simplify REQ_OP_ZONE_RESET_ALL handling
In reply to Greg Kroah-HartmanFrom: Damien Le Moal <[email protected]>
[ Upstream commit c7a1d926dc4076aadad187614500afcd8de78818 ]
There is no need for the function __blkdev_reset_all_zones() as REQ_OP_ZONE_RESET_ALL can be handled directly in blkdev_reset_zones() bio loop with an early break from the loop. This patch removes this function and modifies blkdev_reset_zones(), simplifying the code.
--- block/blk-zoned.c | 40 +++++++++++++--------------------------- 1 file changed, 13 insertions(+), 27 deletions(-)
block/blk-zoned.c +13 -27
@@ -202,32 +202,14 @@ int blkdev_report_zones(struct block_device *bdev, sector_t sector, }EXPORT_SYMBOL_GPL (blkdev_report_zones); -/* -* Special case of zone reset operation to reset all zones in one command, -* useful for applications like mkfs. -*/ -static int __blkdev_reset_all_zones (struct block_device *bdev,gfp_t gfp_mask) -{ -struct bio *bio =bio_alloc (gfp_mask,0 ); -int ret; - -/* across the zones operations, don't need any sectors */ -bio_set_dev (bio, bdev); -bio_set_op_attrs (bio,REQ_OP_ZONE_RESET_ALL ,0 ); - - ret =submit_bio_wait (bio); -bio_put (bio); - -return ret; -} -static inline bool blkdev_allow_reset_all_zones (struct block_device *bdev, +sector_t sector,sector_t nr_sectors) {if (!blk_queue_zone_resetall (bdev_get_queue (bdev)))return false; -if (nr_sectors !=part_nr_sects_read (bdev->bd_part)) +if (sector || nr_sectors !=part_nr_sects_read (bdev->bd_part))return false;/* * REQ_OP_ZONE_RESET_ALL can be executed only if the block device is
@@ -271,9 +253,6 @@ int blkdev_reset_zones(struct block_device *bdev,/* Out of range */ return -EINVAL ; -if (blkdev_allow_reset_all_zones (bdev, nr_sectors)) -return __blkdev_reset_all_zones (bdev, gfp_mask); -/* Check alignment (handle eventual smaller last zone) */ zone_sectors =blk_queue_zone_sectors (q);if (sector & (zone_sectors -1 ))
@@ -285,17 +264,24 @@ int blkdev_reset_zones(struct block_device *bdev,blk_start_plug (&plug);while (sector < end_sector) { - bio =blk_next_bio (bio,0 , gfp_mask); - bio->bi_iter.bi_sector = sector;bio_set_dev (bio, bdev); -bio_set_op_attrs (bio,REQ_OP_ZONE_RESET ,0 ); +/* +* Special case for the zone reset operation that reset all +* zones, this is useful for applications like mkfs. +*/ +if (blkdev_allow_reset_all_zones (bdev, sector, nr_sectors)) { + bio->bi_opf =REQ_OP_ZONE_RESET_ALL ; +break ; + } + + bio->bi_opf =REQ_OP_ZONE_RESET ; + bio->bi_iter.bi_sector = sector; sector += zone_sectors;/* This may take a while, so be nice to others */ cond_resched (); - } ret =submit_bio_wait (bio);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 19/453 block: factor out requeue handling from dispatch code
In reply to Greg Kroah-HartmanFrom: Johannes Thumshirn <[email protected]>
[ Upstream commit c92a41031a6d57395889b5c87cea359220a24d2a ]
Factor out the requeue handling from the dispatch code, this will make subsequent addition of different requeueing schemes easier.
--- block/blk-mq.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-)
block/blk-mq.c +18 -11
@@ -1205,6 +1205,23 @@ static void blk_mq_update_dispatch_busy(struct blk_mq_hw_ctx *hctx, bool busy)#define BLK_MQ_RESOURCE_DELAY 3/* ms units */ +static void blk_mq_handle_dev_resource (struct request *rq, +struct list_head *list) +{ +struct request *next = + list_first_entry_or_null(list, struct request, queuelist); + +/* +* If an I/O scheduler has been configured and we got a driver tag for +* the next request already, free it. +*/ +if (next) +blk_mq_put_driver_tag (next); + +list_add (&rq->queuelist, list); +__blk_mq_requeue_request (rq); +} +/* * Returns true if we did some work AND can potentially do more. */
@@ -1274,17 +1291,7 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list, ret = q->mq_ops->queue_rq (hctx, &bd);if (ret ==BLK_STS_RESOURCE || ret ==BLK_STS_DEV_RESOURCE ) { -/* -* If an I/O scheduler has been configured and we got a -* driver tag for the next request already, free it -* again. -*/ -if (!list_empty (list)) { - nxt = list_first_entry(list, struct request, queuelist); -blk_mq_put_driver_tag (nxt); - } -list_add (&rq->queuelist, list); -__blk_mq_requeue_request (rq); +blk_mq_handle_dev_resource (rq, list);break ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 20/453 blk-mq: In blk_mq_dispatch_rq_list() "no budget" is a reason to kick
In reply to Greg Kroah-HartmanFrom: Douglas Anderson <[email protected]>
[ Upstream commit ab3cee3762e5e69f27c302c43691289fdfc12316 ]
In blk_mq_dispatch_rq_list(), if blk_mq_sched_needs_restart() returns true and the driver returns BLK_STS_RESOURCE then we'll kick the queue. However, there's another case where we might need to kick it. If we were unable to get budget we can be in much the same state as when the driver returns BLK_STS_RESOURCE, so we should treat it the same.
It should be noted that even if we add a whole bunch of extra kicking to the queue in other patches this patch is still important. Specifically any kicking that happened before we re-spliced leftover requests into 'hctx->dispatch' wouldn't have found any work, so we really need to make sure we kick ourselves after we've done the splicing.
--- block/blk-mq.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
block/blk-mq.c +6 -2
@@ -1233,6 +1233,7 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list,bool no_tag = false;int errors, queued;blk_status_t ret =BLK_STS_OK ; +bool no_budget_avail = false;if (list_empty (list))return false;
@@ -1251,6 +1252,7 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list, hctx = rq->mq_hctx;if (!got_budget && !blk_mq_get_dispatch_budget (hctx)) {blk_mq_put_driver_tag (rq); + no_budget_avail = true;break ; }
@@ -1356,13 +1358,15 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list,* * If driver returns BLK_STS_RESOURCE and SCHED_RESTART * bit is set, run queue after a delay to avoid IO stalls -* that could otherwise occur if the queue is idle. +* that could otherwise occur if the queue is idle. We'll do +* similar if we couldn't get budget and SCHED_RESTART is set. */ needs_restart =blk_mq_sched_needs_restart (hctx);if (!needs_restart || (no_tag &&list_empty_careful (&hctx->dispatch_wait.entry)))blk_mq_run_hw_queue (hctx, true); -else if (needs_restart && (ret ==BLK_STS_RESOURCE )) +else if (needs_restart && (ret ==BLK_STS_RESOURCE || + no_budget_avail))blk_mq_delay_run_hw_queue (hctx,BLK_MQ_RESOURCE_DELAY );blk_mq_update_dispatch_busy (hctx, true);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 21/453 pinctrl: aspeed: Fix GPIO requests on pass-through banks
In reply to Greg Kroah-HartmanFrom: Andrew Jeffery <[email protected]>
[ Upstream commit 7aeb353802611a8e655e019f09a370ff682af1a6 ]
Commit 6726fbff19bf ("pinctrl: aspeed: Fix GPI only function problem.") fixes access to GPIO banks T and U on the AST2600. Both banks contain input-only pins and the GPIO pin function is named GPITx and GPIUx respectively. Unfortunately the fix had a negative impact on GPIO banks D and E for the AST2400 and AST2500 where the GPIO pass-through functions take similar "GPI"-style names. The net effect on the older SoCs was that when the GPIO subsystem requested a pin in banks D or E be muxed for GPIO, they were instead muxed for pass-through mode. Mistakenly muxing pass-through mode e.g. breaks booting the host on IBM's Witherspoon (AC922) platform where GPIOE0 is used for FSI.
Further exploit the names in the provided expression structure to differentiate pass-through from pin-specific GPIO modes.
This follow-up fix gives the expected behaviour for the following tests:
Witherspoon BMC (AST2500):
1. Power-on the Witherspoon host
2. Request GPIOD1 be muxed via /sys/class/gpio/export
3. Request GPIOE1 be muxed via /sys/class/gpio/export
4. Request the balls for GPIOs E2 and E3 be muxed as GPIO pass-through ("GPIE2" mode) via a pinctrl hog in the devicetree
Rainier BMC (AST2600):
5. Request GPIT0 be muxed via /sys/class/gpio/export
6. Request GPIU0 be muxed via /sys/class/gpio/export
Together the tests demonstrate that all three pieces of functionality (general GPIOs via 1, 2 and 3, input-only GPIOs via 5 and 6, pass-through mode via 4) operate as desired across old and new SoCs.
--- drivers/pinctrl/aspeed/pinctrl-aspeed.c | 74 +++++++++++++++++++++++-- drivers/pinctrl/aspeed/pinmux-aspeed.h | 7 ++- 2 files changed, 72 insertions(+), 9 deletions(-)
drivers/pinctrl/aspeed/pinctrl-aspeed.c +68 -6
@@ -277,14 +277,76 @@ int aspeed_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int function,static bool aspeed_expr_is_gpio (const struct aspeed_sig_expr *expr) {/* -* The signal type is GPIO if the signal name has "GPI" as a prefix. -* strncmp (rather than strcmp) is used to implement the prefix -* requirement. +* We need to differentiate between GPIO and non-GPIO signals to +* implement the gpio_request_enable() interface. For better or worse +* the ASPEED pinctrl driver uses the expression names to determine +* whether an expression will mux a pin for GPIO. * -* expr->signal might look like "GPIOB1" in the GPIO case. -* expr->signal might look like "GPIT0" in the GPI case. +* Generally we have the following - A GPIO such as B1 has: +* +* - expr->signal set to "GPIOB1" +* - expr->function set to "GPIOB1" +* +* Using this fact we can determine whether the provided expression is +* a GPIO expression by testing the signal name for the string prefix +* "GPIO". +* +* However, some GPIOs are input-only, and the ASPEED datasheets name +* them differently. An input-only GPIO such as T0 has: +* +* - expr->signal set to "GPIT0" +* - expr->function set to "GPIT0" +* +* It's tempting to generalise the prefix test from "GPIO" to "GPI" to +* account for both GPIOs and GPIs, but in doing so we run aground on +* another feature: +* +* Some pins in the ASPEED BMC SoCs have a "pass-through" GPIO +* function where the input state of one pin is replicated as the +* output state of another (as if they were shorted together - a mux +* configuration that is typically enabled by hardware strapping). +* This feature allows the BMC to pass e.g. power button state through +* to the host while the BMC is yet to boot, but take control of the +* button state once the BMC has booted by muxing each pin as a +* separate, pin-specific GPIO. +* +* Conceptually this pass-through mode is a form of GPIO and is named +* as such in the datasheets, e.g. "GPID0". This naming similarity +* trips us up with the simple GPI-prefixed-signal-name scheme +* discussed above, as the pass-through configuration is not what we +* want when muxing a pin as GPIO for the GPIO subsystem. +* +* On e.g. the AST2400, a pass-through function "GPID0" is grouped on +* balls A18 and D16, where we have: +* +* For ball A18: +* - expr->signal set to "GPID0IN" +* - expr->function set to "GPID0" +* +* For ball D16: +* - expr->signal set to "GPID0OUT" +* - expr->function set to "GPID0" +* +* By contrast, the pin-specific GPIO expressions for the same pins are +* as follows: +* +* For ball A18: +* - expr->signal looks like "GPIOD0" +* - expr->function looks like "GPIOD0" +* +* For ball D16: +* - expr->signal looks like "GPIOD1" +* - expr->function looks like "GPIOD1" +* +* Testing both the signal _and_ function names gives us the means +* differentiate the pass-through GPIO pinmux configuration from the +* pin-specific configuration that the GPIO subsystem is after: An +* expression is a pin-specific (non-pass-through) GPIO configuration +* if the signal prefix is "GPI" and the signal name matches the +* function name. */ -return strncmp (expr->signal,"GPI" ,3 ) ==0 ; +return !strncmp (expr->signal,"GPI" ,3 ) && + !strcmp (expr->signal, expr->function); }static bool aspeed_gpio_in_exprs (const struct aspeed_sig_expr **exprs)
drivers/pinctrl/aspeed/pinmux-aspeed.h +4 -3
@@ -452,10 +452,11 @@ struct aspeed_sig_desc {* evaluation of the descriptors. * * @signal: The signal name for the priority level on the pin. If the signal -* type is GPIO, then the signal name must begin with the string -* "GPIO", e.g. GPIOA0, GPIOT4 etc. +* type is GPIO, then the signal name must begin with the +* prefix "GPI", e.g. GPIOA0, GPIT0 etc. * @function: The name of the function the signal participates in for the -* associated expression +* associated expression. For pin-specific GPIO, the function +* name must match the signal name. * @ndescs: The number of signal descriptors in the expression * @descs: Pointer to an array of signal descriptors that comprise the * function expression
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 22/453 netfilter: x_tables: Switch synchronization to RCU
In reply to Greg Kroah-HartmanFrom: Subash Abhinov Kasiviswanathan <[email protected]>
[ Upstream commit cc00bcaa589914096edef7fb87ca5cee4a166b5c ]
When running concurrent iptables rules replacement with data, the per CPU sequence count is checked after the assignment of the new information. The sequence count is used to synchronize with the packet path without the use of any explicit locking. If there are any packets in the packet path using the table information, the sequence count is incremented to an odd value and is incremented to an even after the packet process completion.
The new table value assignment is followed by a write memory barrier so every CPU should see the latest value. If the packet path has started with the old table information, the sequence counter will be odd and the iptables replacement will wait till the sequence count is even prior to freeing the old table info.
However, this assumes that the new table information assignment and the memory barrier is actually executed prior to the counter check in the replacement thread. If CPU decides to execute the assignment later as there is no user of the table information prior to the sequence check, the packet path in another CPU may use the old table information. The replacement thread would then free the table information under it leading to a use after free in the packet processing context-
Unable to handle kernel NULL pointer dereference at virtual address 000000000000008e pc : ip6t_do_table+0x5d0/0x89c lr : ip6t_do_table+0x5b8/0x89c ip6t_do_table+0x5d0/0x89c ip6table_filter_hook+0x24/0x30 nf_hook_slow+0x84/0x120 ip6_input+0x74/0xe0 ip6_rcv_finish+0x7c/0x128 ipv6_rcv+0xac/0xe4 __netif_receive_skb+0x84/0x17c process_backlog+0x15c/0x1b8 napi_poll+0x88/0x284 net_rx_action+0xbc/0x23c __do_softirq+0x20c/0x48c
This could be fixed by forcing instruction order after the new table information assignment or by switching to RCU for the synchronization.
--- include/linux/netfilter/x_tables.h | 5 ++- net/ipv4/netfilter/arp_tables.c | 14 ++++----- net/ipv4/netfilter/ip_tables.c | 14 ++++----- net/ipv6/netfilter/ip6_tables.c | 14 ++++----- net/netfilter/x_tables.c | 49 +++++++++--------------------- 5 files changed, 40 insertions(+), 56 deletions(-)
include/linux/netfilter/x_tables.h +4 -1
@@ -227,7 +227,7 @@ struct xt_table {unsigned int valid_hooks;/* Man behind the curtain... */ -struct xt_table_info *private; +struct xt_table_info __rcu *private;/* Set this to THIS_MODULE if you are a module, otherwise NULL */ struct module *me;
@@ -448,6 +448,9 @@ xt_get_per_cpu_counter(struct xt_counters *cnt, unsigned int cpu)struct nf_hook_ops *xt_hook_ops_alloc (const struct xt_table *,nf_hookfn *); +struct xt_table_info +*xt_table_get_private_protected (const struct xt_table *table); +#ifdef CONFIG_COMPAT #include <net/compat.h>
net/ipv4/netfilter/arp_tables.c +7 -7
@@ -203,7 +203,7 @@ unsigned int arpt_do_table(struct sk_buff *skb,local_bh_disable (); addend =xt_write_recseq_begin (); - private =READ_ONCE (table->private);/* Address dependency. */ + private =rcu_access_pointer (table->private); cpu =smp_processor_id (); table_base = private->entries; jumpstack = (struct arpt_entry **)private->jumpstack[cpu];
@@ -649,7 +649,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table) {unsigned int countersize;struct xt_counters *counters; -const struct xt_table_info *private = table->private; +const struct xt_table_info *private =xt_table_get_private_protected (table);/* We need atomic snapshot of counters: rest doesn't change * (other than comefrom, which userspace doesn't care
@@ -673,7 +673,7 @@ static int copy_entries_to_user(unsigned int total_size,unsigned int off, num;const struct arpt_entry *e;struct xt_counters *counters; -struct xt_table_info *private = table->private; +struct xt_table_info *private =xt_table_get_private_protected (table);int ret =0 ;void *loc_cpu_entry;
@@ -808,7 +808,7 @@ static int get_info(struct net *net, void __user *user, t =xt_request_find_table_lock (net,NFPROTO_ARP , name);if (!IS_ERR (t)) {struct arpt_getinfo info; -const struct xt_table_info *private = t->private; +const struct xt_table_info *private =xt_table_get_private_protected (t);#ifdef CONFIG_COMPAT struct xt_table_info tmp;
@@ -861,7 +861,7 @@ static int get_entries(struct net *net, struct arpt_get_entries __user *uptr, t =xt_find_table_lock (net,NFPROTO_ARP , get.name);if (!IS_ERR (t)) { -const struct xt_table_info *private = t->private; +const struct xt_table_info *private =xt_table_get_private_protected (t);if (get.size == private->size) ret = copy_entries_to_user(private->size,
@@ -1020,7 +1020,7 @@ static int do_add_counters(struct net *net, const void __user *user, }local_bh_disable (); - private = t->private; + private =xt_table_get_private_protected (t);if (private->number != tmp.num_counters) { ret = -EINVAL ; goto unlock_up_free;
@@ -1357,7 +1357,7 @@ static int compat_copy_entries_to_user(unsigned int total_size, void __user *userptr) {struct xt_counters *counters; -const struct xt_table_info *private = table->private; +const struct xt_table_info *private =xt_table_get_private_protected (table);void __user *pos;unsigned int size;int ret =0 ;
net/ipv4/netfilter/ip_tables.c +7 -7
@@ -258,7 +258,7 @@ ipt_do_table(struct sk_buff *skb,WARN_ON (!(table->valid_hooks & (1 << hook)));local_bh_disable (); addend =xt_write_recseq_begin (); - private =READ_ONCE (table->private);/* Address dependency. */ + private =rcu_access_pointer (table->private); cpu =smp_processor_id (); table_base = private->entries; jumpstack = (struct ipt_entry **)private->jumpstack[cpu];
@@ -791,7 +791,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table) {unsigned int countersize;struct xt_counters *counters; -const struct xt_table_info *private = table->private; +const struct xt_table_info *private =xt_table_get_private_protected (table);/* We need atomic snapshot of counters: rest doesn't change (other than comefrom, which userspace doesn't care
@@ -815,7 +815,7 @@ copy_entries_to_user(unsigned int total_size,unsigned int off, num;const struct ipt_entry *e;struct xt_counters *counters; -const struct xt_table_info *private = table->private; +const struct xt_table_info *private =xt_table_get_private_protected (table);int ret =0 ;const void *loc_cpu_entry;
@@ -965,7 +965,7 @@ static int get_info(struct net *net, void __user *user, t =xt_request_find_table_lock (net,AF_INET , name);if (!IS_ERR (t)) {struct ipt_getinfo info; -const struct xt_table_info *private = t->private; +const struct xt_table_info *private =xt_table_get_private_protected (t);#ifdef CONFIG_COMPAT struct xt_table_info tmp;
@@ -1019,7 +1019,7 @@ get_entries(struct net *net, struct ipt_get_entries __user *uptr, t =xt_find_table_lock (net,AF_INET , get.name);if (!IS_ERR (t)) { -const struct xt_table_info *private = t->private; +const struct xt_table_info *private =xt_table_get_private_protected (t);if (get.size == private->size) ret =copy_entries_to_user (private->size, t, uptr->entrytable);
@@ -1175,7 +1175,7 @@ do_add_counters(struct net *net, const void __user *user, }local_bh_disable (); - private = t->private; + private =xt_table_get_private_protected (t);if (private->number != tmp.num_counters) { ret = -EINVAL ; goto unlock_up_free;
@@ -1570,7 +1570,7 @@ compat_copy_entries_to_user(unsigned int total_size, struct xt_table *table, void __user *userptr) {struct xt_counters *counters; -const struct xt_table_info *private = table->private; +const struct xt_table_info *private =xt_table_get_private_protected (table);void __user *pos;unsigned int size;int ret =0 ;
net/ipv6/netfilter/ip6_tables.c +7 -7
@@ -280,7 +280,7 @@ ip6t_do_table(struct sk_buff *skb,local_bh_disable (); addend =xt_write_recseq_begin (); - private =READ_ONCE (table->private);/* Address dependency. */ + private =rcu_access_pointer (table->private); cpu =smp_processor_id (); table_base = private->entries; jumpstack = (struct ip6t_entry **)private->jumpstack[cpu];
@@ -807,7 +807,7 @@ static struct xt_counters *alloc_counters(const struct xt_table *table) {unsigned int countersize;struct xt_counters *counters; -const struct xt_table_info *private = table->private; +const struct xt_table_info *private =xt_table_get_private_protected (table);/* We need atomic snapshot of counters: rest doesn't change (other than comefrom, which userspace doesn't care
@@ -831,7 +831,7 @@ copy_entries_to_user(unsigned int total_size,unsigned int off, num;const struct ip6t_entry *e;struct xt_counters *counters; -const struct xt_table_info *private = table->private; +const struct xt_table_info *private =xt_table_get_private_protected (table);int ret =0 ;const void *loc_cpu_entry;
@@ -981,7 +981,7 @@ static int get_info(struct net *net, void __user *user, t =xt_request_find_table_lock (net,AF_INET6 , name);if (!IS_ERR (t)) {struct ip6t_getinfo info; -const struct xt_table_info *private = t->private; +const struct xt_table_info *private =xt_table_get_private_protected (t);#ifdef CONFIG_COMPAT struct xt_table_info tmp;
@@ -1036,7 +1036,7 @@ get_entries(struct net *net, struct ip6t_get_entries __user *uptr, t =xt_find_table_lock (net,AF_INET6 , get.name);if (!IS_ERR (t)) { -struct xt_table_info *private = t->private; +struct xt_table_info *private =xt_table_get_private_protected (t);if (get.size == private->size) ret =copy_entries_to_user (private->size, t, uptr->entrytable);
@@ -1191,7 +1191,7 @@ do_add_counters(struct net *net, const void __user *user, unsigned int len, }local_bh_disable (); - private = t->private; + private =xt_table_get_private_protected (t);if (private->number != tmp.num_counters) { ret = -EINVAL ; goto unlock_up_free;
@@ -1579,7 +1579,7 @@ compat_copy_entries_to_user(unsigned int total_size, struct xt_table *table, void __user *userptr) {struct xt_counters *counters; -const struct xt_table_info *private = table->private; +const struct xt_table_info *private =xt_table_get_private_protected (table);void __user *pos;unsigned int size;int ret =0 ;
net/netfilter/x_tables.c +15 -34
94 lines not on this page · raw message
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 23/453 netfilter: nft_compat: make sure xtables destructors have run
In reply to Greg Kroah-HartmanFrom: Florian Westphal <[email protected]>
[ Upstream commit ffe8923f109b7ea92c0842c89e61300eefa11c94 ]
Pablo Neira found that after recent update of xt_IDLETIMER the iptables-nft tests sometimes show an error.
He tracked this down to the delayed cleanup used by nf_tables core:
del rule (transaction A)
add rule (transaction B)
Its possible that by time transaction B (both in same netns) runs, the xt target destructor has not been invoked yet.
For native nft expressions this is no problem because all expressions that have such side effects make sure these are handled from the commit phase, rather than async cleanup.
For nft_compat however this isn't true.
Instead of forcing synchronous behaviour for nft_compat, keep track of the number of outstanding destructor calls.
When we attempt to create a new expression, flush the cleanup worker to make sure destructors have completed.
With lots of help from Pablo Neira.
--- include/net/netfilter/nf_tables.h | 2 ++ net/netfilter/nf_tables_api.c | 10 +++++++-- net/netfilter/nft_compat.c | 36 +++++++++++++++++++++++++++---- 3 files changed, 42 insertions(+), 6 deletions(-)
include/net/netfilter/nf_tables.h +2 -0
@@ -1462,4 +1462,6 @@ void nft_chain_filter_fini(void);void __init nft_chain_route_init (void );void nft_chain_route_fini (void ); + +void nf_tables_trans_destroy_flush_work (void );#endif /* _NET_NF_TABLES_H */
net/netfilter/nf_tables_api.c +8 -2
@@ -6605,6 +6605,12 @@ static void nf_tables_trans_destroy_work(struct work_struct *w) } } +void nf_tables_trans_destroy_flush_work (void ) +{ +flush_work (&trans_destroy_work); +} +EXPORT_SYMBOL_GPL (nf_tables_trans_destroy_flush_work); +static int nf_tables_commit_chain_prepare (struct net *net,struct nft_chain *chain) {struct nft_rule *rule;
@@ -6776,9 +6782,9 @@ static void nf_tables_commit_release(struct net *net)spin_unlock (&nf_tables_destroy_list_lock);nf_tables_module_autoload_cleanup (net); -mutex_unlock (&net->nft.commit_mutex); -schedule_work (&trans_destroy_work); + +mutex_unlock (&net->nft.commit_mutex); }static int nf_tables_commit (struct net *net,struct sk_buff *skb)
net/netfilter/nft_compat.c +32 -4
@@ -27,6 +27,8 @@ struct nft_xt_match_priv {void *info; }; +static refcount_t nft_compat_pending_destroy =REFCOUNT_INIT (1 ); +static int nft_compat_chain_validate_dependency (const struct nft_ctx *ctx,const char *tablename) {
@@ -236,6 +238,15 @@ nft_target_init(const struct nft_ctx *ctx, const struct nft_expr *expr,nft_target_set_tgchk_param (&par, ctx, target, info, &e, proto, inv); +/* xtables matches or targets can have side effects, e.g. +* creation/destruction of /proc files. +* The xt ->destroy functions are run asynchronously from +* work queue. If we have pending invocations we thus +* need to wait for those to finish. +*/ +if (refcount_read (&nft_compat_pending_destroy) >1 ) +nf_tables_trans_destroy_flush_work (); + ret =xt_check_target (&par, size, proto, inv);if (ret <0 )return ret;
@@ -247,6 +258,13 @@ nft_target_init(const struct nft_ctx *ctx, const struct nft_expr *expr,return 0 ; } +static void __nft_mt_tg_destroy (struct module *me,const struct nft_expr *expr) +{ +refcount_dec (&nft_compat_pending_destroy); +module_put (me); +kfree (expr->ops); +} +static void nft_target_destroy (const struct nft_ctx *ctx,const struct nft_expr *expr) {
@@ -262,8 +280,7 @@ nft_target_destroy(const struct nft_ctx *ctx, const struct nft_expr *expr)if (par.target->destroy !=NULL ) par.target->destroy (&par); -module_put (me); -kfree (expr->ops); +__nft_mt_tg_destroy (me, expr); } static int nft_extension_dump_info(struct sk_buff *skb, int attr,
@@ -494,8 +511,7 @@ __nft_match_destroy(const struct nft_ctx *ctx, const struct nft_expr *expr,if (par.match->destroy !=NULL ) par.match->destroy (&par); -module_put (me); -kfree (expr->ops); +__nft_mt_tg_destroy (me, expr); } static void
@@ -700,6 +716,14 @@ static const struct nfnetlink_subsystem nfnl_compat_subsys = {static struct nft_expr_type nft_match_type; +static void nft_mt_tg_deactivate (const struct nft_ctx *ctx, +const struct nft_expr *expr, +enum nft_trans_phase phase) +{ +if (phase ==NFT_TRANS_COMMIT ) +refcount_inc (&nft_compat_pending_destroy); +} +static const struct nft_expr_ops *nft_match_select_ops (const struct nft_ctx *ctx,const struct nlattr *const tb[])
@@ -738,6 +762,7 @@ nft_match_select_ops(const struct nft_ctx *ctx, ops->type = &nft_match_type; ops->eval = nft_match_eval; ops->init = nft_match_init; + ops->deactivate = nft_mt_tg_deactivate, ops->destroy = nft_match_destroy; ops->dump = nft_match_dump; ops->validate = nft_match_validate;
@@ -828,6 +853,7 @@ nft_target_select_ops(const struct nft_ctx *ctx, ops->size =NFT_EXPR_SIZE (XT_ALIGN (target->targetsize)); ops->init = nft_target_init; ops->destroy = nft_target_destroy; + ops->deactivate = nft_mt_tg_deactivate, ops->dump = nft_target_dump; ops->validate = nft_target_validate; ops->data = target;
@@ -891,6 +917,8 @@ static void __exit nft_compat_module_exit(void)nfnetlink_subsys_unregister (&nfnl_compat_subsys);nft_unregister_expr (&nft_target_type);nft_unregister_expr (&nft_match_type); + +WARN_ON_ONCE (refcount_read (&nft_compat_pending_destroy) !=1 ); }MODULE_ALIAS_NFNL_SUBSYS (NFNL_SUBSYS_NFT_COMPAT );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 24/453 netfilter: nft_dynset: fix timeouts later than 23 days
In reply to Greg Kroah-HartmanFrom: Pablo Neira Ayuso <[email protected]>
[ Upstream commit 917d80d376ffbaa9725fde9e3c0282f63643f278 ]
Use nf_msecs_to_jiffies64 and nf_jiffies64_to_msecs as provided by 8e1102d5a159 ("netfilter: nf_tables: support timeouts larger than 23 days"), otherwise ruleset listing breaks.
--- include/net/netfilter/nf_tables.h | 4 ++++ net/netfilter/nf_tables_api.c | 4 ++-- net/netfilter/nft_dynset.c | 8 +++++--- 3 files changed, 11 insertions(+), 5 deletions(-)
include/net/netfilter/nf_tables.h +4 -0
@@ -1464,4 +1464,8 @@ void __init nft_chain_route_init(void);void nft_chain_route_fini (void );void nf_tables_trans_destroy_flush_work (void ); + +int nf_msecs_to_jiffies64 (const struct nlattr *nla,u64 *result); +__be64 nf_jiffies64_to_msecs (u64 input); +#endif /* _NET_NF_TABLES_H */
net/netfilter/nf_tables_api.c +2 -2
@@ -3277,7 +3277,7 @@ static int nf_tables_set_alloc_name(struct nft_ctx *ctx, struct nft_set *set,return 0 ; } -static int nf_msecs_to_jiffies64 (const struct nlattr *nla,u64 *result) +int nf_msecs_to_jiffies64 (const struct nlattr *nla,u64 *result) {u64 ms =be64_to_cpu (nla_get_be64 (nla));u64 max = (u64)(~((u64 )0 ));
@@ -3291,7 +3291,7 @@ static int nf_msecs_to_jiffies64(const struct nlattr *nla, u64 *result)return 0 ; } -static __be64 nf_jiffies64_to_msecs (u64 input) +__be64 nf_jiffies64_to_msecs (u64 input) {return cpu_to_be64 (jiffies64_to_msecs (input)); }
net/netfilter/nft_dynset.c +5 -3
@@ -180,8 +180,10 @@ static int nft_dynset_init(const struct nft_ctx *ctx,if (tb[NFTA_DYNSET_TIMEOUT ] !=NULL ) {if (!(set->flags &NFT_SET_TIMEOUT ))return -EINVAL ; - timeout =msecs_to_jiffies (be64_to_cpu (nla_get_be64 ( - tb[NFTA_DYNSET_TIMEOUT ]))); + + err =nf_msecs_to_jiffies64 (tb[NFTA_DYNSET_TIMEOUT ], &timeout); +if (err) +return err; } priv->sreg_key =nft_parse_register (tb[NFTA_DYNSET_SREG_KEY ]);
@@ -296,7 +298,7 @@ static int nft_dynset_dump(struct sk_buff *skb, const struct nft_expr *expr)if (nla_put_string (skb,NFTA_DYNSET_SET_NAME , priv->set->name)) goto nla_put_failure;if (nla_put_be64 (skb,NFTA_DYNSET_TIMEOUT , -cpu_to_be64 (jiffies_to_msecs (priv->timeout)), +nf_jiffies64_to_msecs (priv->timeout),NFTA_DYNSET_PAD )) goto nla_put_failure;if (priv->expr &&nft_expr_dump (skb,NFTA_DYNSET_EXPR , priv->expr))
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 25/453 afs: Fix memory leak when mounting with multiple source parameters
In reply to Greg Kroah-HartmanFrom: David Howells <[email protected]>
[ Upstream commit 4cb682964706deffb4861f0a91329ab3a705039f ]
There's a memory leak in afs_parse_source() whereby multiple source= parameters overwrite fc->source in the fs_context struct without freeing the previously recorded source.
Fix this by only permitting a single source parameter and rejecting with an error all subsequent ones.
This was caught by syzbot with the kernel memory leak detector, showing something like the following trace:
unreferenced object 0xffff888114375440 (size 32):
comm "repro", pid 5168, jiffies 4294923723 (age 569.948s)
backtrace:
slab_post_alloc_hook+0x42/0x79
__kmalloc_track_caller+0x125/0x16a
kmemdup_nul+0x24/0x3c
vfs_parse_fs_string+0x5a/0xa1
generic_parse_monolithic+0x9d/0xc5
do_new_mount+0x10d/0x15a
do_mount+0x5f/0x8e
__do_sys_mount+0xff/0x127
do_syscall_64+0x2d/0x3a
entry_SYSCALL_64_after_hwframe+0x44/0xa9--- fs/afs/super.c | 3 +++ 1 file changed, 3 insertions(+)
fs/afs/super.c +3 -0
@@ -236,6 +236,9 @@ static int afs_parse_source(struct fs_context *fc, struct fs_parameter *param)_enter (",%s" , name); +if (fc->source) +return invalf (fc,"kAFS: Multiple sources not supported" ); +if (!name) {printk (KERN_ERR "kAFS: no volume name specified\n" );return -EINVAL ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 26/453 Revert "gpio: eic-sprd: Use devm_platform_ioremap_resource()"
In reply to Greg Kroah-HartmanFrom: Baolin Wang <[email protected]>
[ Upstream commit 4ed7d7dd4890bb8120a3e77c16191a695fdfcc5a ]
This reverts commit 0f5cb8cc27a266c81e6523b436479802e9aafc9e.
This commit will cause below warnings, since our EIC controller can support differnt banks on different Spreadtrum SoCs, and each bank has its own base address, we will get invalid resource warning if the bank number is less than SPRD_EIC_MAX_BANK on some Spreadtrum SoCs.
So we should not use devm_platform_ioremap_resource() here to remove the warnings.
[ 1.118508] sprd-eic 40210000.gpio: invalid resource [ 1.118535] sprd-eic 40210000.gpio: invalid resource [ 1.119034] sprd-eic 40210080.gpio: invalid resource [ 1.119055] sprd-eic 40210080.gpio: invalid resource [ 1.119462] sprd-eic 402100a0.gpio: invalid resource [ 1.119482] sprd-eic 402100a0.gpio: invalid resource [ 1.119893] sprd-eic 402100c0.gpio: invalid resource [ 1.119913] sprd-eic 402100c0.gpio: invalid resource
--- drivers/gpio/gpio-eic-sprd.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/gpio/gpio-eic-sprd.c +7 -2
@@ -569,6 +569,7 @@ static int sprd_eic_probe(struct platform_device *pdev)const struct sprd_eic_variant_data *pdata;struct gpio_irq_chip *irq;struct sprd_eic *sprd_eic; +struct resource *res;int ret, i; pdata =of_device_get_match_data (&pdev->dev);
@@ -595,9 +596,13 @@ static int sprd_eic_probe(struct platform_device *pdev)* have one bank EIC, thus base[1] and base[2] can be * optional. */ - sprd_eic->base[i] =devm_platform_ioremap_resource (pdev, i); -if (IS_ERR (sprd_eic->base[i])) + res =platform_get_resource (pdev,IORESOURCE_MEM , i); +if (!res)continue ; + + sprd_eic->base[i] =devm_ioremap_resource (&pdev->dev, res); +if (IS_ERR (sprd_eic->base[i])) +return PTR_ERR (sprd_eic->base[i]); } sprd_eic->chip.label = sprd_eic_label_name[sprd_eic->type];
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 27/453 gpio: eic-sprd: break loop when getting NULL device resource
In reply to Greg Kroah-HartmanFrom: Chunyan Zhang <[email protected]>
[ Upstream commit 263ade7166a2e589c5b605272690c155c0637dcb ]
EIC controller have unfixed numbers of banks on different Spreadtrum SoCs, and each bank has its own base address, the loop of getting there base address in driver should break if the resource gotten via platform_get_resource() is NULL already. The later ones would be all NULL even if the loop continues.
--- drivers/gpio/gpio-eic-sprd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpio/gpio-eic-sprd.c +1 -1
@@ -598,7 +598,7 @@ static int sprd_eic_probe(struct platform_device *pdev)*/ res =platform_get_resource (pdev,IORESOURCE_MEM , i);if (!res) -continue ; +break ; sprd_eic->base[i] =devm_ioremap_resource (&pdev->dev, res);if (IS_ERR (sprd_eic->base[i]))
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 28/453 netfilter: nft_ct: Remove confirmation check for NFT_CT_ID
In reply to Greg Kroah-HartmanFrom: Brett Mastbergen <[email protected]>
[ Upstream commit 2d94b20b95b009eec1a267dcf026b01af627c0cd ]
Since commit 656c8e9cc1ba ("netfilter: conntrack: Use consistent ct id hash calculation") the ct id will not change from initialization to confirmation. Removing the confirmation check allows for things like adding an element to a 'typeof ct id' set in prerouting upon reception of the first packet of a new connection, and then being able to reference that set consistently both before and after the connection is confirmed.
--- net/netfilter/nft_ct.c | 2 -- 1 file changed, 2 deletions(-)
net/netfilter/nft_ct.c +0 -2
@@ -177,8 +177,6 @@ static void nft_ct_get_eval(const struct nft_expr *expr, }#endif case NFT_CT_ID : -if (!nf_ct_is_confirmed (ct)) - goto err; *dest =nf_ct_get_id (ct);return ;default :
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 29/453 selftests/bpf/test_offload.py: Reset ethtool features after failed setting
In reply to Greg Kroah-HartmanFrom: Toke Høiland-Jørgensen <[email protected]>
[ Upstream commit 766e62b7fcd2cf1d43e6594ba37c659dc48f7ddb ]
When setting the ethtool feature flag fails (as expected for the test), the kernel now tracks that the feature was requested to be 'off' and refuses to subsequently disable it again. So reset it back to 'on' so a subsequent disable (that's not supposed to fail) can succeed.
--- tools/testing/selftests/bpf/test_offload.py | 1 + 1 file changed, 1 insertion(+)
tools/testing/selftests/bpf/test_offload.py +1 -0
@@ -930,6 +930,7 @@ try: start_test("Test disabling TC offloads is rejected while filters installed...") ret, _ = sim.set_ethtool_tc_offloads(False, fail=False) fail(ret == 0, "Driver should refuse to disable TC offloads with filters installed...") + sim.set_ethtool_tc_offloads(True) start_test("Test qdisc removal frees things...") sim.tc_flush_filters()
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 30/453 RDMA/cm: Fix an attempt to use non-valid pointer when cleaning timewait
In reply to Greg Kroah-HartmanFrom: Leon Romanovsky <[email protected]>
[ Upstream commit 340b940ea0ed12d9adbb8f72dea17d516b2019e8 ]
If cm_create_timewait_info() fails, the timewait_info pointer will contain an error value and will be used in cm_remove_remote() later.
general protection fault, probably for non-canonical address 0xdffffc0000000024: 0000 [#1] SMP KASAN PTI KASAN: null-ptr-deref in range [0×0000000000000120-0×0000000000000127] CPU: 2 PID: 12446 Comm: syz-executor.3 Not tainted 5.10.0-rc5-5d4c0742a60e #27 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 RIP: 0010:cm_remove_remote.isra.0+0x24/0×170 drivers/infiniband/core/cm.c:978 Code: 84 00 00 00 00 00 41 54 55 53 48 89 fb 48 8d ab 2d 01 00 00 e8 7d bf 4b fe 48 89 ea 48 b8 00 00 00 00 00 fc ff df 48 c1 ea 03 <0f> b6 04 02 48 89 ea 83 e2 07 38 d0 7f 08 84 c0 0f 85 fc 00 00 00 RSP: 0018:ffff888013127918 EFLAGS: 00010006 RAX: dffffc0000000000 RBX: fffffffffffffff4 RCX: ffffc9000a18b000 RDX: 0000000000000024 RSI: ffffffff82edc573 RDI: fffffffffffffff4 RBP: 0000000000000121 R08: 0000000000000001 R09: ffffed1002624f1d R10: 0000000000000003 R11: ffffed1002624f1c R12: ffff888107760c70 R13: ffff888107760c40 R14: fffffffffffffff4 R15: ffff888107760c9c FS: 00007fe1ffcc1700(0000) GS:ffff88811a600000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000001b2ff21000 CR3: 000000010f504001 CR4: 0000000000370ee0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: cm_destroy_id+0x189/0×15b0 drivers/infiniband/core/cm.c:1155 cma_connect_ib drivers/infiniband/core/cma.c:4029 [inline] rdma_connect_locked+0x1100/0×17c0 drivers/infiniband/core/cma.c:4107 rdma_connect+0x2a/0×40 drivers/infiniband/core/cma.c:4140 ucma_connect+0x277/0×340 drivers/infiniband/core/ucma.c:1069 ucma_write+0x236/0×2f0 drivers/infiniband/core/ucma.c:1724 vfs_write+0x220/0×830 fs/read_write.c:603 ksys_write+0x1df/0×240 fs/read_write.c:658 do_syscall_64+0x33/0×40 arch/x86/entry/common.c:46 entry_SYSCALL_64_after_hwframe+0x44/0xa9
--- drivers/infiniband/core/cm.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/infiniband/core/cm.c +2 -0
@@ -1435,6 +1435,7 @@ int ib_send_cm_req(struct ib_cm_id *cm_id, id.local_id);if (IS_ERR (cm_id_priv->timewait_info)) { ret =PTR_ERR (cm_id_priv->timewait_info); + cm_id_priv->timewait_info =NULL ; goto out; }
@@ -1961,6 +1962,7 @@ static int cm_req_handler(struct cm_work *work) id.local_id);if (IS_ERR (cm_id_priv->timewait_info)) { ret =PTR_ERR (cm_id_priv->timewait_info); + cm_id_priv->timewait_info =NULL ; goto destroy; } cm_id_priv->timewait_info->work.remote_id = req_msg->local_comm_id;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 31/453 i40e: Refactor rx_bi accesses
In reply to Greg Kroah-HartmanFrom: Bj?rn T?pel <[email protected]>
[ Upstream commit e1675f97367bed74d4dcfe08de9ce9b5d6b288c1 ]
As a first step to migrate i40e to the new MEM_TYPE_XSK_BUFF_POOL APIs, code that accesses the rx_bi (SW/shadow ring) is refactored to use an accessor function.
--- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 17 +++++++++++------ drivers/net/ethernet/intel/i40e/i40e_xsk.c | 18 ++++++++++++------ 2 files changed, 23 insertions(+), 12 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +11 -6
@@ -1195,6 +1195,11 @@ static void i40e_update_itr(struct i40e_q_vector *q_vector, rc->total_packets =0 ; } +static struct i40e_rx_buffer *i40e_rx_bi (struct i40e_ring *rx_ring,u32 idx) +{ +return &rx_ring->rx_bi[idx]; +} +/** * i40e_reuse_rx_page - page flip buffer and store it back on the ring * @rx_ring: rx descriptor ring to store buffers on
@@ -1208,7 +1213,7 @@ static void i40e_reuse_rx_page(struct i40e_ring *rx_ring,struct i40e_rx_buffer *new_buff;u16 nta = rx_ring->next_to_alloc; - new_buff = &rx_ring->rx_bi[nta]; + new_buff =i40e_rx_bi (rx_ring, nta);/* update, and store next to alloc */ nta++;
@@ -1272,7 +1277,7 @@ struct i40e_rx_buffer *i40e_clean_programming_status( ntc = rx_ring->next_to_clean;/* fetch, update, and store next to clean */ - rx_buffer = &rx_ring->rx_bi[ntc++]; + rx_buffer =i40e_rx_bi (rx_ring, ntc++); ntc = (ntc < rx_ring->count) ? ntc :0 ; rx_ring->next_to_clean = ntc;
@@ -1361,7 +1366,7 @@ void i40e_clean_rx_ring(struct i40e_ring *rx_ring)/* Free all the Rx ring sk_buffs */ for (i =0 ; i < rx_ring->count; i++) { -struct i40e_rx_buffer *rx_bi = &rx_ring->rx_bi[i]; +struct i40e_rx_buffer *rx_bi =i40e_rx_bi (rx_ring, i);if (!rx_bi->page)continue ;
@@ -1576,7 +1581,7 @@ bool i40e_alloc_rx_buffers(struct i40e_ring *rx_ring, u16 cleaned_count)return false; rx_desc =I40E_RX_DESC (rx_ring, ntu); - bi = &rx_ring->rx_bi[ntu]; + bi =i40e_rx_bi (rx_ring, ntu); do { if (!i40e_alloc_mapped_page(rx_ring, bi))
@@ -1598,7 +1603,7 @@ bool i40e_alloc_rx_buffers(struct i40e_ring *rx_ring, u16 cleaned_count) ntu++;if (unlikely (ntu == rx_ring->count)) { rx_desc =I40E_RX_DESC (rx_ring,0 ); - bi = rx_ring->rx_bi; + bi =i40e_rx_bi (rx_ring,0 ); ntu =0 ; }
@@ -1965,7 +1970,7 @@ static struct i40e_rx_buffer *i40e_get_rx_buffer(struct i40e_ring *rx_ring, {struct i40e_rx_buffer *rx_buffer; - rx_buffer = &rx_ring->rx_bi[rx_ring->next_to_clean]; + rx_buffer =i40e_rx_bi (rx_ring, rx_ring->next_to_clean);prefetchw (rx_buffer->page);/* we are reusing so sync this buffer for CPU use */
drivers/net/ethernet/intel/i40e/i40e_xsk.c +12 -6
@@ -9,6 +9,11 @@#include "i40e_txrx_common.h" #include "i40e_xsk.h" +static struct i40e_rx_buffer *i40e_rx_bi (struct i40e_ring *rx_ring,u32 idx) +{ +return &rx_ring->rx_bi[idx]; +} +/** * i40e_xsk_umem_dma_map - DMA maps all UMEM memory for the netdev * @vsi: Current VSI
@@ -321,7 +326,7 @@ __i40e_alloc_rx_buffers_zc(struct i40e_ring *rx_ring, u16 count,bool ok = true; rx_desc =I40E_RX_DESC (rx_ring, ntu); - bi = &rx_ring->rx_bi[ntu]; + bi =i40e_rx_bi (rx_ring, ntu); do { if (!alloc(rx_ring, bi)) { ok = false;
@@ -340,7 +345,7 @@ __i40e_alloc_rx_buffers_zc(struct i40e_ring *rx_ring, u16 count,if (unlikely (ntu == rx_ring->count)) { rx_desc =I40E_RX_DESC (rx_ring,0 ); - bi = rx_ring->rx_bi; + bi =i40e_rx_bi (rx_ring,0 ); ntu =0 ; }
@@ -402,7 +407,7 @@ static struct i40e_rx_buffer *i40e_get_rx_buffer_zc(struct i40e_ring *rx_ring, {struct i40e_rx_buffer *bi; - bi = &rx_ring->rx_bi[rx_ring->next_to_clean]; + bi =i40e_rx_bi (rx_ring, rx_ring->next_to_clean);/* we are reusing so sync this buffer for CPU use */ dma_sync_single_range_for_cpu(rx_ring->dev,
@@ -424,7 +429,8 @@ static struct i40e_rx_buffer *i40e_get_rx_buffer_zc(struct i40e_ring *rx_ring,static void i40e_reuse_rx_buffer_zc (struct i40e_ring *rx_ring,struct i40e_rx_buffer *old_bi) { -struct i40e_rx_buffer *new_bi = &rx_ring->rx_bi[rx_ring->next_to_alloc]; +struct i40e_rx_buffer *new_bi =i40e_rx_bi (rx_ring, + rx_ring->next_to_alloc);u16 nta = rx_ring->next_to_alloc;/* update, and store next to alloc */
@@ -456,7 +462,7 @@ void i40e_zca_free(struct zero_copy_allocator *alloc, unsigned long handle) mask = rx_ring->xsk_umem->chunk_mask; nta = rx_ring->next_to_alloc; - bi = &rx_ring->rx_bi[nta]; + bi =i40e_rx_bi (rx_ring, nta); nta++; rx_ring->next_to_alloc = (nta < rx_ring->count) ? nta :0 ;
@@ -824,7 +830,7 @@ void i40e_xsk_clean_rx_ring(struct i40e_ring *rx_ring)u16 i;for (i =0 ; i < rx_ring->count; i++) { -struct i40e_rx_buffer *rx_bi = &rx_ring->rx_bi[i]; +struct i40e_rx_buffer *rx_bi =i40e_rx_bi (rx_ring, i);if (!rx_bi->addr)continue ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 32/453 i40e: optimise prefetch page refcount
In reply to Greg Kroah-HartmanFrom: Li RongQing <[email protected]>
[ Upstream commit 1fa5cef283420b3dad93cd6ab04d7125bc1562de ]
refcount of rx_buffer page will be added here originally, so prefetchw is needed, but after commit 1793668c3b8c ("i40e/i40evf: Update code to better handle incrementing page count"), and refcount is not added every time, so change prefetchw as prefetch.
Now it mainly services page_address(), but which accesses struct page only when WANT_PAGE_VIRTUAL or HASHED_PAGE_VIRTUAL is defined otherwise it returns address based on offset, so we prefetch it conditionally.
Jakub suggested to define prefetch_page_address in a common header.
--- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 2 +- include/linux/prefetch.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +1 -1
@@ -1971,7 +1971,7 @@ static struct i40e_rx_buffer *i40e_get_rx_buffer(struct i40e_ring *rx_ring,struct i40e_rx_buffer *rx_buffer; rx_buffer =i40e_rx_bi (rx_ring, rx_ring->next_to_clean); -prefetchw (rx_buffer->page); +prefetch_page_address (rx_buffer->page);/* we are reusing so sync this buffer for CPU use */ dma_sync_single_range_for_cpu(rx_ring->dev,
include/linux/prefetch.h +8 -0
@@ -15,6 +15,7 @@#include <asm/processor.h> #include <asm/cache.h> +struct page ;/* prefetch(x) attempts to pre-emptively get the memory pointed to by address "x" into the CPU L1 cache.
@@ -62,4 +63,11 @@ static inline void prefetch_range(void *addr, size_t len) #endif } +static inline void prefetch_page_address (struct page *page) +{ +#if defined(WANT_PAGE_VIRTUAL ) || defined(HASHED_PAGE_VIRTUAL ) +prefetch (page); +#endif +} +#endif
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 33/453 i40e: avoid premature Rx buffer reuse
In reply to Greg Kroah-HartmanFrom: Björn Töpel <[email protected]>
[ Upstream commit 75aab4e10ae6a4593a60f66d13de755d4e91f400 ]
The page recycle code, incorrectly, relied on that a page fragment could not be freed inside xdp_do_redirect(). This assumption leads to that page fragments that are used by the stack/XDP redirect can be reused and overwritten.
To avoid this, store the page count prior invoking xdp_do_redirect().
Longer explanation:
Intel NICs have a recycle mechanism. The main idea is that a page is split into two parts. One part is owned by the driver, one part might be owned by someone else, such as the stack.
t0: Page is allocated, and put on the Rx ring
+---------------
used by NIC ->| upper buffer
(rx_buffer) +---------------
| lower buffer
+---------------
page count == USHRT_MAX rx_buffer->pagecnt_bias == USHRT_MAX
t1: Buffer is received, and passed to the stack (e.g.)
+---------------
| upper buff (skb)
+---------------
used by NIC ->| lower buffer
(rx_buffer) +---------------
page count == USHRT_MAX rx_buffer->pagecnt_bias == USHRT_MAX - 1
t2: Buffer is received, and redirected
+---------------
| upper buff (skb)
+---------------
used by NIC ->| lower buffer
(rx_buffer) +---------------Now, prior calling xdp_do_redirect():
page count == USHRT_MAX
rx_buffer->pagecnt_bias == USHRT_MAX - 2
This means that buffer *cannot* be flipped/reused, because the skb is still using it.
The problem arises when xdp_do_redirect() actually frees the segment. Then we get:
page count == USHRT_MAX - 1 rx_buffer->pagecnt_bias == USHRT_MAX - 2
Quoted 1 line
From a recycle perspective, the buffer can be flipped and reused,
which means that the skb data area is passed to the Rx HW ring!
To work around this, the page count is stored prior calling xdp_do_redirect().
Note that this is not optimal, since the NIC could actually reuse the "lower buffer" again. However, then we need to track whether XDP_REDIRECT consumed the buffer or not.
--- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 27 +++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +20 -7
@@ -1869,6 +1869,7 @@ static inline bool i40e_page_is_reusable(struct page *page)* the adapter for another receive * * @rx_buffer: buffer containing the page +* @rx_buffer_pgcnt: buffer page refcount pre xdp_do_redirect() call * * If page is reusable, rx_buffer->page_offset is adjusted to point to * an unused region in the page.
@@ -1891,7 +1892,8 @@ static inline bool i40e_page_is_reusable(struct page *page)* * In either case, if the page is reusable its refcount is increased. **/ -static bool i40e_can_reuse_rx_page (struct i40e_rx_buffer *rx_buffer) +static bool i40e_can_reuse_rx_page (struct i40e_rx_buffer *rx_buffer, +int rx_buffer_pgcnt) {unsigned int pagecnt_bias = rx_buffer->pagecnt_bias;struct page *page = rx_buffer->page;
@@ -1902,7 +1904,7 @@ static bool i40e_can_reuse_rx_page(struct i40e_rx_buffer *rx_buffer)#if (PAGE_SIZE <8192 )/* if we are only owner of page we can reuse it */ -if (unlikely ((page_count (page) - pagecnt_bias) >1 )) +if (unlikely ((rx_buffer_pgcnt - pagecnt_bias) >1 ))return false;#else #define I40E_LAST_OFFSET \
@@ -1961,16 +1963,24 @@ static void i40e_add_rx_frag(struct i40e_ring *rx_ring,* i40e_get_rx_buffer - Fetch Rx buffer and synchronize data for use * @rx_ring: rx descriptor ring to transact packets on * @size: size of buffer to add to skb +* @rx_buffer_pgcnt: buffer page refcount * * This function will pull an Rx buffer from the ring and synchronize it * for use by the CPU. */ static struct i40e_rx_buffer *i40e_get_rx_buffer (struct i40e_ring *rx_ring, -const unsigned int size) +const unsigned int size, +int *rx_buffer_pgcnt) {struct i40e_rx_buffer *rx_buffer; rx_buffer =i40e_rx_bi (rx_ring, rx_ring->next_to_clean); + *rx_buffer_pgcnt = +#if (PAGE_SIZE <8192 ) +page_count (rx_buffer->page); +#else +0 ; +#endif prefetch_page_address (rx_buffer->page);/* we are reusing so sync this buffer for CPU use */
@@ -2125,14 +2135,16 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,* i40e_put_rx_buffer - Clean up used buffer and either recycle or free * @rx_ring: rx descriptor ring to transact packets on * @rx_buffer: rx buffer to pull data from +* @rx_buffer_pgcnt: rx buffer page refcount pre xdp_do_redirect() call * * This function will clean up the contents of the rx_buffer. It will * either recycle the buffer or unmap it and free the associated resources. */ static void i40e_put_rx_buffer (struct i40e_ring *rx_ring, -struct i40e_rx_buffer *rx_buffer) +struct i40e_rx_buffer *rx_buffer, +int rx_buffer_pgcnt) { -if (i40e_can_reuse_rx_page (rx_buffer)) { +if (i40e_can_reuse_rx_page (rx_buffer, rx_buffer_pgcnt)) {/* hand second half of page back to the ring */ i40e_reuse_rx_page (rx_ring, rx_buffer); }else {
@@ -2345,6 +2357,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)while (likely (total_rx_packets < (unsigned int )budget)) {struct i40e_rx_buffer *rx_buffer;union i40e_rx_desc *rx_desc; +int rx_buffer_pgcnt;unsigned int size;u64 qword;
@@ -2384,7 +2397,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)break ;i40e_trace (clean_rx_irq, rx_ring, rx_desc, skb); - rx_buffer =i40e_get_rx_buffer (rx_ring, size); + rx_buffer =i40e_get_rx_buffer (rx_ring, size, &rx_buffer_pgcnt);/* retrieve a buffer from the ring */ if (!skb) {
@@ -2424,7 +2437,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)break ; } -i40e_put_rx_buffer (rx_ring, rx_buffer); +i40e_put_rx_buffer (rx_ring, rx_buffer, rx_buffer_pgcnt); cleaned_count++;if (i40e_is_non_eop (rx_ring, rx_desc, skb))
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 34/453 ixgbe: avoid premature Rx buffer reuse
In reply to Greg Kroah-HartmanFrom: Björn Töpel <[email protected]>
[ Upstream commit a06316dc87bdc000f7f39a315476957af2ba0f05 ]
The page recycle code, incorrectly, relied on that a page fragment could not be freed inside xdp_do_redirect(). This assumption leads to that page fragments that are used by the stack/XDP redirect can be reused and overwritten.
To avoid this, store the page count prior invoking xdp_do_redirect().
--- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +17 -7
@@ -1947,7 +1947,8 @@ static inline bool ixgbe_page_is_reserved(struct page *page)return (page_to_nid (page) !=numa_mem_id ()) ||page_is_pfmemalloc (page); } -static bool ixgbe_can_reuse_rx_page (struct ixgbe_rx_buffer *rx_buffer) +static bool ixgbe_can_reuse_rx_page (struct ixgbe_rx_buffer *rx_buffer, +int rx_buffer_pgcnt) {unsigned int pagecnt_bias = rx_buffer->pagecnt_bias;struct page *page = rx_buffer->page;
@@ -1958,7 +1959,7 @@ static bool ixgbe_can_reuse_rx_page(struct ixgbe_rx_buffer *rx_buffer)#if (PAGE_SIZE <8192 )/* if we are only owner of page we can reuse it */ -if (unlikely ((page_ref_count (page) - pagecnt_bias) >1 )) +if (unlikely ((rx_buffer_pgcnt - pagecnt_bias) >1 ))return false;#else /* The last offset is a bit aggressive in that we assume the
@@ -2023,11 +2024,18 @@ static void ixgbe_add_rx_frag(struct ixgbe_ring *rx_ring,static struct ixgbe_rx_buffer *ixgbe_get_rx_buffer (struct ixgbe_ring *rx_ring,union ixgbe_adv_rx_desc *rx_desc,struct sk_buff **skb, -const unsigned int size) +const unsigned int size, +int *rx_buffer_pgcnt) {struct ixgbe_rx_buffer *rx_buffer; rx_buffer = &rx_ring->rx_buffer_info[rx_ring->next_to_clean]; + *rx_buffer_pgcnt = +#if (PAGE_SIZE <8192 ) +page_count (rx_buffer->page); +#else +0 ; +#endif prefetchw (rx_buffer->page); *skb = rx_buffer->skb;
@@ -2057,9 +2065,10 @@ static struct ixgbe_rx_buffer *ixgbe_get_rx_buffer(struct ixgbe_ring *rx_ring,static void ixgbe_put_rx_buffer (struct ixgbe_ring *rx_ring,struct ixgbe_rx_buffer *rx_buffer, -struct sk_buff *skb) +struct sk_buff *skb, +int rx_buffer_pgcnt) { -if (ixgbe_can_reuse_rx_page (rx_buffer)) { +if (ixgbe_can_reuse_rx_page (rx_buffer, rx_buffer_pgcnt)) {/* hand second half of page back to the ring */ ixgbe_reuse_rx_page (rx_ring, rx_buffer); }else {
@@ -2295,6 +2304,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,union ixgbe_adv_rx_desc *rx_desc;struct ixgbe_rx_buffer *rx_buffer;struct sk_buff *skb; +int rx_buffer_pgcnt;unsigned int size;/* return some buffers to hardware, one at a time is too slow */
@@ -2314,7 +2324,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,*/ dma_rmb (); - rx_buffer =ixgbe_get_rx_buffer (rx_ring, rx_desc, &skb, size); + rx_buffer =ixgbe_get_rx_buffer (rx_ring, rx_desc, &skb, size, &rx_buffer_pgcnt);/* retrieve a buffer from the ring */ if (!skb) {
@@ -2356,7 +2366,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,break ; } -ixgbe_put_rx_buffer (rx_ring, rx_buffer, skb); +ixgbe_put_rx_buffer (rx_ring, rx_buffer, skb, rx_buffer_pgcnt); cleaned_count++;/* place incomplete frames back on ring for completion */
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 35/453 selftests: fix poll error in udpgro.sh
In reply to Greg Kroah-HartmanFrom: Paolo Abeni <[email protected]>
[ Upstream commit 38bf8cd821be292e7d8e6f6283d67c5d9708f887 ]
The test program udpgso_bench_rx always invokes the poll() syscall with a timeout of 10ms. If a larger timeout is specified via the command line, udpgso_bench_rx is supposed to do multiple poll() calls till the timeout is expired or an event is received.
Currently the poll() loop errors out after the first invocation with no events, and may causes self-tests failure alike:
failed
GRO with custom segment size ./udpgso_bench_rx: poll: 0x0 expected 0x1
This change addresses the issue allowing the poll() loop to consume all the configured timeout.
--- tools/testing/selftests/net/udpgso_bench_rx.c | 3 +++ 1 file changed, 3 insertions(+)
tools/testing/selftests/net/udpgso_bench_rx.c +3 -0
@@ -113,6 +113,9 @@ static void do_poll(int fd, int timeout_ms) interrupted = true;break ; } + +/* no events and more time to wait, do poll again */ +continue ; }if (pfd.revents !=POLLIN ) error(1, errno, "poll: 0x%x expected 0x%x\n",
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 36/453 net: mvpp2: add mvpp2_phylink_to_port() helper
In reply to Greg Kroah-HartmanFrom: Russell King <[email protected]>
[ Upstream commit 6c2b49eb96716e91f202756bfbd3f5fea3b2b172 ]
Add a helper to convert the struct phylink_config pointer passed in from phylink to the drivers internal struct mvpp2_port.
--- .../net/ethernet/marvell/mvpp2/mvpp2_main.c | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-)
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +14 -15
@@ -4745,12 +4745,16 @@ static void mvpp2_port_copy_mac_addr(struct net_device *dev, struct mvpp2 *priv,eth_hw_addr_random (dev); } +static struct mvpp2_port *mvpp2_phylink_to_port (struct phylink_config *config) +{ + return container_of(config, struct mvpp2_port, phylink_config); +} +static void mvpp2_phylink_validate (struct phylink_config *config,unsigned long *supported,struct phylink_link_state *state) { - struct mvpp2_port *port = container_of(config, struct mvpp2_port, - phylink_config); +struct mvpp2_port *port =mvpp2_phylink_to_port (config);__ETHTOOL_DECLARE_LINK_MODE_MASK (mask) = {0 , };/* Invalid combinations */
@@ -4877,8 +4881,7 @@ static void mvpp2_gmac_link_state(struct mvpp2_port *port,static int mvpp2_phylink_mac_link_state (struct phylink_config *config,struct phylink_link_state *state) { - struct mvpp2_port *port = container_of(config, struct mvpp2_port, - phylink_config); +struct mvpp2_port *port =mvpp2_phylink_to_port (config);if (port->priv->hw_version ==MVPP22 && port->gop_id ==0 ) {u32 mode =readl (port->base +MVPP22_XLG_CTRL3_REG );
@@ -4896,8 +4899,7 @@ static int mvpp2_phylink_mac_link_state(struct phylink_config *config,static void mvpp2_mac_an_restart (struct phylink_config *config) { - struct mvpp2_port *port = container_of(config, struct mvpp2_port, - phylink_config); +struct mvpp2_port *port =mvpp2_phylink_to_port (config);u32 val =readl (port->base +MVPP2_GMAC_AUTONEG_CONFIG ); writel(val | MVPP2_GMAC_IN_BAND_RESTART_AN,
@@ -5085,13 +5087,12 @@ static void mvpp2_gmac_config(struct mvpp2_port *port, unsigned int mode,static void mvpp2_mac_config (struct phylink_config *config,unsigned int mode,const struct phylink_link_state *state) { -struct net_device *dev =to_net_dev (config->dev); -struct mvpp2_port *port =netdev_priv (dev); +struct mvpp2_port *port =mvpp2_phylink_to_port (config);bool change_interface = port->phy_interface != state->interface;/* Check for invalid configuration */ if (mvpp2_is_xlg (state->interface) && port->gop_id !=0 ) { -netdev_err (dev,"Invalid mode on %s\n" , dev->name); +netdev_err (port->dev,"Invalid mode on %s\n" , port->dev->name);return ; }
@@ -5128,8 +5129,7 @@ static void mvpp2_mac_config(struct phylink_config *config, unsigned int mode,static void mvpp2_mac_link_up (struct phylink_config *config,unsigned int mode,phy_interface_t interface,struct phy_device *phy) { -struct net_device *dev =to_net_dev (config->dev); -struct mvpp2_port *port =netdev_priv (dev); +struct mvpp2_port *port =mvpp2_phylink_to_port (config);u32 val;if (!phylink_autoneg_inband (mode)) {
@@ -5150,14 +5150,13 @@ static void mvpp2_mac_link_up(struct phylink_config *config, unsigned int mode,mvpp2_egress_enable (port);mvpp2_ingress_enable (port); -netif_tx_wake_all_queues (dev); +netif_tx_wake_all_queues (port->dev); }static void mvpp2_mac_link_down (struct phylink_config *config,unsigned int mode,phy_interface_t interface) { -struct net_device *dev =to_net_dev (config->dev); -struct mvpp2_port *port =netdev_priv (dev); +struct mvpp2_port *port =mvpp2_phylink_to_port (config);u32 val;if (!phylink_autoneg_inband (mode)) {
@@ -5174,7 +5173,7 @@ static void mvpp2_mac_link_down(struct phylink_config *config, } } -netif_tx_stop_all_queues (dev); +netif_tx_stop_all_queues (port->dev);mvpp2_egress_disable (port);mvpp2_ingress_disable (port);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 37/453 drm/tegra: replace idr_init() by idr_init_base()
In reply to Greg Kroah-HartmanFrom: Deepak R Varma <[email protected]>
[ Upstream commit 41f71629b4c432f8dd47d70ace813be5f79d4d75 ]
idr_init() uses base 0 which is an invalid identifier for this driver. The new function idr_init_base allows IDR to set the ID lookup from base 1. This avoids all lookups that otherwise starts from 0 since 0 is always unused.
--- drivers/gpu/drm/tegra/drm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/tegra/drm.c +1 -1
@@ -256,7 +256,7 @@ static int tegra_drm_open(struct drm_device *drm, struct drm_file *filp)if (!fpriv)return -ENOMEM ; -idr_init (&fpriv->contexts); +idr_init_base (&fpriv->contexts,1 );mutex_init (&fpriv->lock); filp->driver_priv = fpriv;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 38/453 kernel/cpu: add arch override for clear_tasks_mm_cpumask() mm handling
In reply to Greg Kroah-HartmanFrom: Nicholas Piggin <[email protected]>
[ Upstream commit 8ff00399b153440c1c83e20c43020385b416415b ]
powerpc/64s keeps a counter in the mm which counts bits set in mm_cpumask as well as other things. This means it can't use generic code to clear bits out of the mask and doesn't adjust the arch specific counter.
Add an arch override that allows powerpc/64s to use clear_tasks_mm_cpumask().
--- kernel/cpu.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
kernel/cpu.c +5 -1
@@ -815,6 +815,10 @@ void __init cpuhp_threads_init(void) }#ifdef CONFIG_HOTPLUG_CPU +#ifndef arch_clear_mm_cpumask_cpu +#define arch_clear_mm_cpumask_cpu (cpu, mm) cpumask_clear_cpu(cpu, mm_cpumask(mm)) +#endif +/** * clear_tasks_mm_cpumask - Safely clear tasks' mm_cpumask for a CPU * @cpu: a CPU id
@@ -850,7 +854,7 @@ void clear_tasks_mm_cpumask(int cpu) t =find_lock_task_mm (p);if (!t)continue ; -cpumask_clear_cpu (cpu,mm_cpumask (t->mm)); +arch_clear_mm_cpumask_cpu (cpu, t->mm);task_unlock (t); }rcu_read_unlock ();
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 39/453 drm/tegra: sor: Disable clocks on error in tegra_sor_init()
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit bf3a3cdcad40e5928a22ea0fd200d17fd6d6308d ]
Fix the missing clk_disable_unprepare() before return from tegra_sor_init() in the error handling case.
--- drivers/gpu/drm/tegra/sor.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/gpu/drm/tegra/sor.c +8 -2
@@ -2899,6 +2899,7 @@ static int tegra_sor_init(struct host1x_client *client)if (err <0 ) {dev_err (sor->dev,"failed to deassert SOR reset: %d\n" , err); +clk_disable_unprepare (sor->clk);return err; }
@@ -2906,12 +2907,17 @@ static int tegra_sor_init(struct host1x_client *client) } err =clk_prepare_enable (sor->clk_safe); -if (err <0 ) +if (err <0 ) { +clk_disable_unprepare (sor->clk);return err; + } err =clk_prepare_enable (sor->clk_dp); -if (err <0 ) +if (err <0 ) { +clk_disable_unprepare (sor->clk_safe); +clk_disable_unprepare (sor->clk);return err; + }/* * Enable and unmask the HDA codec SCRATCH0 register interrupt. This
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 40/453 habanalabs: put devices before driver removal
In reply to Greg Kroah-HartmanFrom: Ofir Bitton <[email protected]>
[ Upstream commit 5555b7c56bdec7a29c789fec27f84d40f52fbdfa ]
Driver never puts its device and control_device objects, hence a memory leak is introduced every driver removal.
--- drivers/misc/habanalabs/device.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/misc/habanalabs/device.c +8 -8
@@ -229,16 +229,16 @@ static int device_cdev_sysfs_add(struct hl_device *hdev)static void device_cdev_sysfs_del (struct hl_device *hdev) { -/* device_release() won't be called so must free devices explicitly */ -if (!hdev->cdev_sysfs_created) { -kfree (hdev->dev_ctrl); -kfree (hdev->dev); -return ; - } +if (!hdev->cdev_sysfs_created) + goto put_devices;hl_sysfs_fini (hdev);cdev_device_del (&hdev->cdev_ctrl, hdev->dev_ctrl);cdev_device_del (&hdev->cdev, hdev->dev); + +put_devices: +put_device (hdev->dev); +put_device (hdev->dev_ctrl); }/*
@@ -1285,9 +1285,9 @@ int hl_device_init(struct hl_device *hdev, struct class *hclass) early_fini:device_early_fini (hdev); free_dev_ctrl: -kfree (hdev->dev_ctrl); +put_device (hdev->dev_ctrl); free_dev: -kfree (hdev->dev); +put_device (hdev->dev); out_disabled: hdev->disabled = true;if (add_cdev_sysfs_on_err)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 41/453 arm64: syscall: exit userspace before unmasking exceptions
In reply to Greg Kroah-HartmanFrom: Mark Rutland <[email protected]>
[ Upstream commit ca1314d73eed493c49bb1932c60a8605530db2e4 ]
In el0_svc_common() we unmask exceptions before we call user_exit(), and so there's a window where an IRQ or debug exception can be taken while RCU is not watching. In do_debug_exception() we account for this in via debug_exception_{enter,exit}(), but in the el1_irq asm we do not and we call trace functions which rely on RCU before we have a guarantee that RCU is watching.
Let's avoid this by having el0_svc_common() exit userspace before unmasking exceptions, matching what we do for all other EL0 entry paths. We can use user_exit_irqoff() to avoid the pointless save/restore of IRQ flags while we're sure exceptions are masked in DAIF.
The workaround for Cortex-A76 erratum 1463225 may trigger a debug exception before this point, but the debug code invoked in this case is safe even when RCU is not watching.
--- arch/arm64/kernel/syscall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/kernel/syscall.c +1 -1
@@ -102,8 +102,8 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr, regs->syscallno = scno;cortex_a76_erratum_1463225_svc_handler (); +user_exit_irqoff ();local_daif_restore (DAIF_PROCCTX ); -user_exit ();if (has_syscall_work (flags)) {/* set default errno for user-issued syscall(-1) */
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 42/453 vxlan: Add needed_headroom for lower device
In reply to Greg Kroah-HartmanFrom: Sven Eckelmann <[email protected]>
[ Upstream commit 0a35dc41fea67ac4495ce7584406bf9557a6e7d0 ]
It was observed that sending data via batadv over vxlan (on top of wireguard) reduced the performance massively compared to raw ethernet or batadv on raw ethernet. A check of perf data showed that the vxlan_build_skb was calling all the time pskb_expand_head to allocate enough headroom for:
min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len
+ VXLAN_HLEN + iphdr_len;
But the vxlan_config_apply only requested needed headroom for:
lowerdev->hard_header_len + VXLAN6_HEADROOM or VXLAN_HEADROOM
So it completely ignored the needed_headroom of the lower device. The first caller of net_dev_xmit could therefore never make sure that enough headroom was allocated for the rest of the transmit path.
--- drivers/net/vxlan.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/vxlan.c +1 -0
@@ -3538,6 +3538,7 @@ static void vxlan_config_apply(struct net_device *dev, dev->gso_max_segs = lowerdev->gso_max_segs; needed_headroom = lowerdev->hard_header_len; + needed_headroom += lowerdev->needed_headroom; max_mtu = lowerdev->mtu - (use_ipv6 ?VXLAN6_HEADROOM :VXLAN_HEADROOM );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 43/453 vxlan: Copy needed_tailroom from lowerdev
In reply to Greg Kroah-HartmanFrom: Sven Eckelmann <[email protected]>
[ Upstream commit a5e74021e84bb5eadf760aaf2c583304f02269be ]
While vxlan doesn't need any extra tailroom, the lowerdev might need it. In that case, copy it over to reduce the chance for additional (re)allocations in the transmit path.
--- drivers/net/vxlan.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/vxlan.c +2 -0
@@ -3540,6 +3540,8 @@ static void vxlan_config_apply(struct net_device *dev, needed_headroom = lowerdev->hard_header_len; needed_headroom += lowerdev->needed_headroom; + dev->needed_tailroom = lowerdev->needed_tailroom; + max_mtu = lowerdev->mtu - (use_ipv6 ?VXLAN6_HEADROOM :VXLAN_HEADROOM );if (max_mtu <ETH_MIN_MTU )
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 44/453 scsi: mpt3sas: Increase IOCInit request timeout to 30s
In reply to Greg Kroah-HartmanFrom: Sreekanth Reddy <[email protected]>
[ Upstream commit 85dad327d9b58b4c9ce08189a2707167de392d23 ]
Currently the IOCInit request message timeout is set to 10s. This is not sufficient in some scenarios such as during HBA FW downgrade operations.
Increase the IOCInit request timeout to 30s.
--- drivers/scsi/mpt3sas/mpt3sas_base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/mpt3sas/mpt3sas_base.c +1 -1
@@ -6227,7 +6227,7 @@ _base_send_ioc_init(struct MPT3SAS_ADAPTER *ioc) r =_base_handshake_req_reply_wait (ioc,sizeof (Mpi2IOCInitRequest_t), (u32 *)&mpi_request, -sizeof (Mpi2IOCInitReply_t), (u16 *)&mpi_reply,10 ); +sizeof (Mpi2IOCInitReply_t), (u16 *)&mpi_reply,30 );if (r !=0 ) {ioc_err (ioc,"%s: handshake failed (r=%d)\n" , __func__, r);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 45/453 dm table: Remove BUG_ON(in_interrupt())
In reply to Greg Kroah-HartmanFrom: Thomas Gleixner <[email protected]>
[ Upstream commit e7b624183d921b49ef0a96329f21647d38865ee9 ]
The BUG_ON(in_interrupt()) in dm_table_event() is a historic leftover from a rework of the dm table code which changed the calling context.
Issuing a BUG for a wrong calling context is frowned upon and in_interrupt() is deprecated and only covering parts of the wrong contexts. The sanity check for the context is covered by CONFIG_DEBUG_ATOMIC_SLEEP and other debug facilities already.
--- drivers/md/dm-table.c | 6 ------ 1 file changed, 6 deletions(-)
drivers/md/dm-table.c +0 -6
@@ -1320,12 +1320,6 @@ void dm_table_event_callback(struct dm_table *t,void dm_table_event (struct dm_table *t) { -/* -* You can no longer call dm_table_event() from interrupt -* context, use a bottom half instead. -*/ -BUG_ON (in_interrupt ()); -mutex_lock (&_event_lock);if (t->event_fn) t->event_fn (t->event_context);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 46/453 iwlwifi: pcie: add one missing entry for AX210
In reply to Greg Kroah-HartmanFrom: Luca Coelho <[email protected]>
[ Upstream commit 5febcdef30902fa870128b9789b873199f13aff1 ]
The 0x0024 subsytem device ID was missing from the list, so some AX210 devices were not recognized. Add it.
--- drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/wireless/intel/iwlwifi/pcie/drv.c +1 -0
@@ -968,6 +968,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = { {IWL_PCI_DEVICE(0x2725, 0x0090, iwlax211_2ax_cfg_so_gf_a0)}, {IWL_PCI_DEVICE(0x2725, 0x0020, iwlax210_2ax_cfg_ty_gf_a0)}, + {IWL_PCI_DEVICE(0x2725, 0x0024, iwlax210_2ax_cfg_ty_gf_a0)}, {IWL_PCI_DEVICE(0x2725, 0x0310, iwlax210_2ax_cfg_ty_gf_a0)}, {IWL_PCI_DEVICE(0x2725, 0x0510, iwlax210_2ax_cfg_ty_gf_a0)}, {IWL_PCI_DEVICE(0x2725, 0x0A10, iwlax210_2ax_cfg_ty_gf_a0)},
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 47/453 drm/amd/display: Init clock value by current vbios CLKs
In reply to Greg Kroah-HartmanFrom: Brandon Syu <[email protected]>
[ Upstream commit 7e0b367db85ef7b91399006253759a024eab7653 ]
[Why]
While booting into OS, driver updates DPP/DISP CLKs. But init clock value is zero which is invalid.
[How]
Get current clocks value to update init clocks. To avoid underflow.
--- .../drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c +11 -2
@@ -97,8 +97,17 @@ void rn_update_clocks(struct clk_mgr *clk_mgr_base, new_clocks->dppclk_khz =100000 ; } -if (should_set_clock (safe_to_lower, new_clocks->dppclk_khz, clk_mgr->base.clks.dppclk_khz)) { -if (clk_mgr->base.clks.dppclk_khz > new_clocks->dppclk_khz) +/* +* Temporally ignore thew 0 cases for disp and dpp clks. +* We may have a new feature that requires 0 clks in the future. +*/ +if (new_clocks->dppclk_khz ==0 || new_clocks->dispclk_khz ==0 ) { + new_clocks->dppclk_khz = clk_mgr_base->clks.dppclk_khz; + new_clocks->dispclk_khz = clk_mgr_base->clks.dispclk_khz; + } + +if (should_set_clock (safe_to_lower, new_clocks->dppclk_khz, clk_mgr_base->clks.dppclk_khz)) { +if (clk_mgr_base->clks.dppclk_khz > new_clocks->dppclk_khz) dpp_clock_lowered = true; clk_mgr_base->clks.dppclk_khz = new_clocks->dppclk_khz; update_dppclk = true;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 48/453 perf/x86/intel: Check PEBS status correctly
In reply to Greg Kroah-HartmanFrom: Stephane Eranian <[email protected]>
[ Upstream commit fc17db8aa4c53cbd2d5469bb0521ea0f0a6dbb27 ]
The kernel cannot disambiguate when 2+ PEBS counters overflow at the same time. This is what the comment for this code suggests. However, I see the comparison is done with the unfiltered p->status which is a copy of IA32_PERF_GLOBAL_STATUS at the time of the sample. This register contains more than the PEBS counter overflow bits. It also includes many other bits which could also be set.
--- arch/x86/events/intel/ds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/events/intel/ds.c +1 -1
@@ -1912,7 +1912,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs)* that caused the PEBS record. It's called collision. * If collision happened, the record will be dropped. */ -if (p->status != (1ULL << bit)) { +if (pebs_status != (1ULL << bit)) {for_each_set_bit (i, (unsigned long *)&pebs_status, size) error[i]++;continue ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 49/453 kbuild: avoid split lines in .mod files
In reply to Greg Kroah-HartmanFrom: Masahiro Yamada <[email protected]>
[ Upstream commit 7d32358be8acb119dcfe39b6cf67ec6d94bf1fe7 ]
"xargs echo" is not a safe way to remove line breaks because the input may exceed the command line limit and xargs may break it up into multiple invocations of echo. This should never happen because scripts/gen_autoksyms.sh expects all undefined symbols are placed in the second line of .mod files.
One possible way is to replace "xargs echo" with
"sed ':x;N;$!bx;s/\n/ /g'" or something, but I rewrote the code by using awk because it is more readable.
This issue was reported by Sami Tolvanen; in his Clang LTO patch set, $(multi-used-m) is no longer an ELF object, but a thin archive that contains LLVM bitcode files. llvm-nm prints out symbols for each archive member separately, which results a lot of dupications, in some places, beyond the system-defined limit.
This problem must be fixed irrespective of LTO, and we must ensure zero possibility of having this issue.
--- scripts/Makefile.build | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
scripts/Makefile.build +4 -8
@@ -234,6 +234,9 @@ objtool_dep = $(objtool_obj) \ ifdef CONFIG_TRIM_UNUSED_KSYMS cmd_gen_ksymdeps = \ $(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd + +# List module undefined symbols +undefined_syms = $(NM) $< | $(AWK) '$$1 == "U" { printf("%s%s", x++ ? " " : "", $$2) }'; endif define rule_cc_o_c
@@ -253,13 +256,6 @@ define rule_as_o_S $(call cmd,modversions_S) endef -# List module undefined symbols (or empty line if not enabled) -ifdef CONFIG_TRIM_UNUSED_KSYMS -cmd_undef_syms = $(NM) $< | sed -n 's/^ *U //p' | xargs echo -else -cmd_undef_syms = echo -endif - # Built-in and composite module parts $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE $(call cmd,force_checksrc)
@@ -267,7 +263,7 @@ $(obj)/%.o: $(src)/%.c $(recordmcount_source) $(objtool_dep) FORCE cmd_mod = { \ echo $(if $($*-objs)$($*-y)$($*-m), $(addprefix $(obj)/, $($*-objs) $($*-y) $($*-m)), $(@:.mod=.o)); \ - $(cmd_undef_syms); \ + $(undefined_syms) echo; \ } > $@ $(obj)/%.mod: $(obj)/%.o FORCE
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 50/453 soc/tegra: fuse: Fix index bug in get_process_id
In reply to Greg Kroah-HartmanFrom: Nicolin Chen <[email protected]>
commit b9ce9b0f83b536a4ac7de7567a265d28d13e5bea upstream.
This patch simply fixes a bug of referencing speedos[num] in every for-loop iteration in get_process_id function.
--- drivers/soc/tegra/fuse/speedo-tegra210.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/soc/tegra/fuse/speedo-tegra210.c +1 -1
@@ -94,7 +94,7 @@ static int get_process_id(int value, conunsigned int i;for (i =0 ; i < num; i++) -if (value < speedos[num]) +if (value < speedos[i])return i;return -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 51/453 usb: mtu3: fix memory corruption in mtu3_debugfs_regset()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
commit 3f6f6343a29d9ea7429306b83b18e66dc1331d5c upstream.
This code is using the wrong sizeof() so it does not allocate enough memory. It allocates 32 bytes but 72 are required. That will lead to memory corruption.
--- drivers/usb/mtu3/mtu3_debugfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/mtu3/mtu3_debugfs.c +1 -1
@@ -127,7 +127,7 @@ static void mtu3_debugfs_regset(struct mstruct debugfs_regset32 *regset;struct mtu3_regset *mregs; - mregs =devm_kzalloc (mtu->dev,sizeof (*regset),GFP_KERNEL ); + mregs =devm_kzalloc (mtu->dev,sizeof (*mregs),GFP_KERNEL );if (!mregs)return ;
Greg Kroah-Hartman
maintainerPATCH 52/453 USB: serial: option: add interface-number sanity check to flag handling
In reply to Greg Kroah-HartmanFrom: Johan Hovold <[email protected]>
commit a251963f76fa0226d0fdf0c4f989496f18d9ae7f upstream.
Add an interface-number sanity check before testing the device flags to avoid relying on undefined behaviour when left shifting in case a device uses an interface number greater than or equal to BITS_PER_LONG (i.e. 64 or 32).
--- drivers/usb/serial/option.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-)
drivers/usb/serial/option.c +21 -2
@@ -563,6 +563,9 @@ static void option_instat_callback(struc/* Device flags */ +/* Highest interface number which can be used with NCTRL() and RSVD() */ +#define FLAG_IFNUM_MAX 7 +/* Interface does not support modem-control requests */ #define NCTRL (ifnum) ((BIT(ifnum) & 0xff) << 8)
@@ -2101,6 +2104,14 @@ static struct usb_serial_driver * constmodule_usb_serial_driver (serial_drivers, option_ids); +static bool iface_is_reserved (unsigned long device_flags,u8 ifnum) +{ +if (ifnum >FLAG_IFNUM_MAX ) +return false; + +return device_flags &RSVD (ifnum); +} +static int option_probe (struct usb_serial *serial,const struct usb_device_id *id) {
@@ -2117,7 +2128,7 @@ static int option_probe(struct usb_seria* the same class/subclass/protocol as the serial interfaces. Look at * the Windows driver .INF files for reserved interface numbers. */ -if (device_flags &RSVD (iface_desc->bInterfaceNumber)) +if (iface_is_reserved (device_flags, iface_desc->bInterfaceNumber))return -ENODEV ;/*
@@ -2133,6 +2144,14 @@ static int option_probe(struct usb_seriareturn 0 ; } +static bool iface_no_modem_control (unsigned long device_flags,u8 ifnum) +{ +if (ifnum >FLAG_IFNUM_MAX ) +return false; + +return device_flags &NCTRL (ifnum); +} +static int option_attach (struct usb_serial *serial) {struct usb_interface_descriptor *iface_desc;
@@ -2148,7 +2167,7 @@ static int option_attach(struct usb_seri iface_desc = &serial->interface->cur_altsetting->desc; -if (!(device_flags &NCTRL (iface_desc->bInterfaceNumber))) +if (!iface_no_modem_control (device_flags, iface_desc->bInterfaceNumber)) data->use_send_setup =1 ;if (device_flags &ZLP )
Greg Kroah-Hartman
maintainerPATCH 53/453 USB: gadget: f_acm: add support for SuperSpeed Plus
In reply to Greg Kroah-HartmanFrom: taehyun.cho <[email protected]>
commit 3ee05c20656782387aa9eb010fdb9bb16982ac3f upstream.
Setup the SuperSpeed Plus descriptors for f_acm. This allows the gadget to work properly without crashing at SuperSpeed rates.
--- drivers/usb/gadget/function/f_acm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/gadget/function/f_acm.c +1 -1
@@ -684,7 +684,7 @@ acm_bind(struct usb_configuration *c, st acm_ss_out_desc.bEndpointAddress = acm_fs_out_desc.bEndpointAddress; status =usb_assign_descriptors (f, acm_fs_function, acm_hs_function, - acm_ss_function,NULL ); + acm_ss_function, acm_ss_function);if (status) goto fail;
Greg Kroah-Hartman
maintainerPATCH 54/453 USB: gadget: f_midi: setup SuperSpeed Plus descriptors
In reply to Greg Kroah-HartmanFrom: Will McVicker <[email protected]>
commit 457a902ba1a73b7720666b21ca038cd19764db18 upstream.
Needed for SuperSpeed Plus support for f_midi. This allows the gadget to work properly without crashing at SuperSpeed rates.
--- drivers/usb/gadget/function/f_midi.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/usb/gadget/function/f_midi.c +6 -0
@@ -1048,6 +1048,12 @@ static int f_midi_bind(struct usb_config f->ss_descriptors =usb_copy_descriptors (midi_function);if (!f->ss_descriptors) goto fail_f_midi; + +if (gadget_is_superspeed_plus (c->cdev->gadget)) { + f->ssp_descriptors =usb_copy_descriptors (midi_function); +if (!f->ssp_descriptors) + goto fail_f_midi; + } }kfree (midi_function);
Greg Kroah-Hartman
maintainerPATCH 55/453 usb: gadget: f_fs: Re-use SS descriptors for SuperSpeedPlus
In reply to Greg Kroah-HartmanFrom: Jack Pham <[email protected]>
commit a353397b0d5dfa3c99b372505db3378fc919c6c6 upstream.
In many cases a function that supports SuperSpeed can very well operate in SuperSpeedPlus, if a gadget controller supports it, as the endpoint descriptors (and companion descriptors) are generally identical and can be re-used. This is true for two commonly used functions: Android's ADB and MTP. So we can simply assign the usb_function's ssp_descriptors array to point to its ss_descriptors, if available. Similarly, we need to allow an epfile's ioctl for FUNCTIONFS_ENDPOINT_DESC to correctly return the corresponding SuperSpeed endpoint descriptor in case the connected speed is SuperSpeedPlus as well.
The only exception is if a function wants to implement an Isochronous endpoint capable of transferring more than 48KB per service interval when operating at greater than USB 3.1 Gen1 speed, in which case it would require an additional SuperSpeedPlus Isochronous Endpoint Companion descriptor to be returned as part of the Configuration Descriptor. Support for that would need to be separately added to the userspace-facing FunctionFS API which may not be a trivial task--likely a new descriptor format (v3?) may need to be devised to allow for separate SS and SSP descriptors to be supplied.
--- drivers/usb/gadget/function/f_fs.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/usb/gadget/function/f_fs.c +4 -1
@@ -1332,6 +1332,7 @@ static long ffs_epfile_ioctl(struct fileswitch (epfile->ffs->gadget->speed) {case USB_SPEED_SUPER : +case USB_SPEED_SUPER_PLUS : desc_idx =2 ;break ;case USB_SPEED_HIGH :
@@ -3193,7 +3194,8 @@ static int _ffs_func_bind(struct usb_con }if (likely (super)) { - func->function.ss_descriptors =vla_ptr (vlabuf, d, ss_descs); + func->function.ss_descriptors = func->function.ssp_descriptors = +vla_ptr (vlabuf, d, ss_descs); ss_len = ffs_do_descs(ffs->ss_descs_count, vla_ptr(vlabuf, d, raw_descs) + fs_len + hs_len, d_raw_descs__sz - fs_len - hs_len,
@@ -3603,6 +3605,7 @@ static void ffs_func_unbind(struct usb_c func->function.fs_descriptors =NULL ; func->function.hs_descriptors =NULL ; func->function.ss_descriptors =NULL ; + func->function.ssp_descriptors =NULL ; func->interfaces_nums =NULL ;ffs_event_add (ffs,FUNCTIONFS_UNBIND );
Greg Kroah-Hartman
maintainerPATCH 56/453 USB: gadget: f_rndis: fix bitrate for SuperSpeed and above
In reply to Greg Kroah-HartmanFrom: Will McVicker <[email protected]>
commit b00f444f9add39b64d1943fa75538a1ebd54a290 upstream.
Align the SuperSpeed Plus bitrate for f_rndis to match f_ncm's ncm_bitrate defined by commit 1650113888fe ("usb: gadget: f_ncm: add SuperSpeed descriptors for CDC NCM").
--- drivers/usb/gadget/function/f_rndis.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/usb/gadget/function/f_rndis.c +3 -1
@@ -87,8 +87,10 @@ static inline struct f_rndis *func_to_rn/* peak (theoretical) bulk transfer rate in bits-per-second */ static unsigned int bitrate (struct usb_gadget *g) { +if (gadget_is_superspeed (g) && g->speed >=USB_SPEED_SUPER_PLUS ) +return 4250000000U ;if (gadget_is_superspeed (g) && g->speed ==USB_SPEED_SUPER ) -return 13 *1024 *8 *1000 *8 ; +return 3750000000U ;else if (gadget_is_dualspeed (g) && g->speed ==USB_SPEED_HIGH )return 13 *512 *8 *1000 *8 ;else
Greg Kroah-Hartman
maintainerPATCH 57/453 usb: chipidea: ci_hdrc_imx: Pass DISABLE_DEVICE_STREAMING flag to imx6ul
In reply to Greg Kroah-HartmanFrom: Fabio Estevam <[email protected]>
commit c7721e15f434920145c376e8fe77e1c079fc3726 upstream.
According to the i.MX6UL Errata document:
https://www.nxp.com/docs/en/errata/IMX6ULCE.pdf
ERR007881 also affects i.MX6UL, so pass the CI_HDRC_DISABLE_DEVICE_STREAMING flag to workaround the issue.
--- drivers/usb/chipidea/ci_hdrc_imx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/usb/chipidea/ci_hdrc_imx.c +2 -1
@@ -57,7 +57,8 @@ static const struct ci_hdrc_imx_platformstatic const struct ci_hdrc_imx_platform_flag imx6ul_usb_data = { .flags =CI_HDRC_SUPPORTS_RUNTIME_PM | -CI_HDRC_TURN_VBUS_EARLY_ON , +CI_HDRC_TURN_VBUS_EARLY_ON | +CI_HDRC_DISABLE_DEVICE_STREAMING , };static const struct ci_hdrc_imx_platform_flag imx7d_usb_data = {
Greg Kroah-Hartman
maintainerPATCH 58/453 ARM: dts: exynos: fix roles of USB 3.0 ports on Odroid XU
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
commit ecc1ff532b499d20304a4f682247137025814c34 upstream.
On Odroid XU board the USB3-0 port is a microUSB and USB3-1 port is USB type A (host). The roles were copied from Odroid XU3 (Exynos5422) design which has it reversed.
--- arch/arm/boot/dts/exynos5410-odroidxu.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/exynos5410-odroidxu.dts +2 -2
@@ -637,11 +637,11 @@ }; &usbdrd_dwc3_0 { - dr_mode = "host"; + dr_mode = "peripheral"; }; &usbdrd_dwc3_1 { - dr_mode = "peripheral"; + dr_mode = "host"; }; &usbdrd3_0 {
Greg Kroah-Hartman
maintainerPATCH 59/453 ARM: dts: exynos: fix USB 3.0 VBUS control and over-current pins on Exynos5410
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
commit 3d992fd8f4e0f09c980726308d2f2725587b32d6 upstream.
The VBUS control (PWREN) and over-current pins of USB 3.0 DWC3 controllers are on Exynos5410 regular GPIOs. This is different than for example on Exynos5422 where these are special ETC pins with proper reset values (pulls, functions).
Therefore these pins should be configured to enable proper USB 3.0 peripheral and host modes. This also fixes over-current warning:
[ 6.024658] usb usb4-port1: over-current condition
[ 6.028271] usb usb3-port1: over-current condition--- arch/arm/boot/dts/exynos5410-pinctrl.dtsi | 28 ++++++++++++++++++++++++++++ arch/arm/boot/dts/exynos5410.dtsi | 4 ++++ 2 files changed, 32 insertions(+)
arch/arm/boot/dts/exynos5410-pinctrl.dtsi +28 -0
@@ -560,6 +560,34 @@ interrupt-controller; #interrupt-cells = <2>; }; + + usb3_1_oc: usb3-1-oc { + samsung,pins = "gpk2-4", "gpk2-5"; + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; + samsung,pin-pud = <EXYNOS_PIN_PULL_UP>; + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; + }; + + usb3_1_vbusctrl: usb3-1-vbusctrl { + samsung,pins = "gpk2-6", "gpk2-7"; + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; + samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>; + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; + }; + + usb3_0_oc: usb3-0-oc { + samsung,pins = "gpk3-0", "gpk3-1"; + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; + samsung,pin-pud = <EXYNOS_PIN_PULL_UP>; + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; + }; + + usb3_0_vbusctrl: usb3-0-vbusctrl { + samsung,pins = "gpk3-2", "gpk3-3"; + samsung,pin-function = <EXYNOS_PIN_FUNC_2>; + samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>; + samsung,pin-drv = <EXYNOS5420_PIN_DRV_LV1>; + }; }; &pinctrl_2 {
arch/arm/boot/dts/exynos5410.dtsi +4 -0
@@ -398,6 +398,8 @@ &usbdrd3_0 { clocks = <&clock CLK_USBD300>; clock-names = "usbdrd30"; + pinctrl-names = "default"; + pinctrl-0 = <&usb3_0_oc>, <&usb3_0_vbusctrl>; }; &usbdrd_phy0 {
@@ -409,6 +411,8 @@ &usbdrd3_1 { clocks = <&clock CLK_USBD301>; clock-names = "usbdrd30"; + pinctrl-names = "default"; + pinctrl-0 = <&usb3_1_oc>, <&usb3_1_vbusctrl>; }; &usbdrd_dwc3_1 {
Greg Kroah-Hartman
maintainerPATCH 60/453 ARM: dts: exynos: fix USB 3.0 pins supply being turned off on Odroid XU
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
commit bd7e7ff56feea7810df900fb09c9741d259861d9 upstream.
On Odroid XU LDO12 and LDO15 supplies the power to USB 3.0 blocks but the GPK GPIO pins are supplied by LDO7 (VDDQ_LCD). LDO7 also supplies GPJ GPIO pins.
The Exynos pinctrl driver does not take any supplies, so to have entire GPIO block always available, make the regulator always on.
--- arch/arm/boot/dts/exynos5410-odroidxu.dts | 2 ++ 1 file changed, 2 insertions(+)
arch/arm/boot/dts/exynos5410-odroidxu.dts +2 -0
@@ -327,6 +327,8 @@ regulator-name = "vddq_lcd"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; + /* Supplies also GPK and GPJ */ + regulator-always-on; }; ldo8_reg: LDO8 {
Greg Kroah-Hartman
maintainerPATCH 61/453 coresight: tmc-etf: Fix NULL ptr dereference in tmc_enable_etf_sink_perf()
In reply to Greg Kroah-HartmanFrom: Sai Prakash Ranjan <[email protected]>
commit 868663dd5d69fef05bfb004f91da5c30e9b93461 upstream.
There was a report of NULL pointer dereference in ETF enable path for perf CS mode with PID monitoring. It is almost 100% reproducible when the process to monitor is something very active such as chrome and with ETF as the sink and not ETR. Currently in a bid to find the pid, the owner is dereferenced via task_pid_nr() call in tmc_enable_etf_sink_perf() and with owner being NULL, we get a NULL pointer dereference.
Looking at the ETR and other places in the kernel, ETF and the ETB are the only places trying to dereference the task(owner) in tmc_enable_etf_sink_perf() which is also called from the sched_in path as in the call trace. Owner(task) is NULL even in the case of ETR in tmc_enable_etr_sink_perf(), but since we cache the PID in alloc_buffer() callback and it is done as part of etm_setup_aux() when allocating buffer for ETR sink, we never dereference this NULL pointer and we are safe. So lets do the same thing with ETF and cache the PID to which the cs_buffer belongs in tmc_alloc_etf_buffer() as done for ETR. This will also remove the unnecessary function calls(task_pid_nr()) since we are caching the PID.
Easily reproducible running below:
perf record -e cs_etm/@tmc_etf0/ -N -p <pid>
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000548
Mem abort info:
ESR = 0x96000006
EC = 0x25: DABT (current EL), IL = 32 bits
SET = 0, FnV = 0
EA = 0, S1PTW = 0
Data abort info:
ISV = 0, ISS = 0x00000006
CM = 0, WnR = 0
<snip>...
Call trace: tmc_enable_etf_sink+0xe4/0x280 coresight_enable_path+0x168/0x1fc etm_event_start+0x8c/0xf8 etm_event_add+0x38/0x54 event_sched_in+0x194/0x2ac group_sched_in+0x54/0x12c flexible_sched_in+0xd8/0x120 visit_groups_merge+0x100/0x16c ctx_flexible_sched_in+0x50/0x74 ctx_sched_in+0xa4/0xa8 perf_event_sched_in+0x60/0x6c perf_event_context_sched_in+0x98/0xe0 __perf_event_task_sched_in+0x5c/0xd8 finish_task_switch+0x184/0x1cc schedule_tail+0x20/0xec ret_from_fork+0x4/0x18
--- drivers/hwtracing/coresight/coresight-priv.h | 2 ++ drivers/hwtracing/coresight/coresight-tmc-etf.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/hwtracing/coresight/coresight-priv.h +2 -0
@@ -86,6 +86,7 @@ enum cs_mode {* struct cs_buffer - keep track of a recording session' specifics * @cur: index of the current buffer * @nr_pages: max number of pages granted to us +* @pid: PID this cs_buffer belongs to * @offset: offset within the current buffer * @data_size: how much we collected in this run * @snapshot: is this run in snapshot mode
@@ -94,6 +95,7 @@ enum cs_mode {struct cs_buffers {unsigned int cur;unsigned int nr_pages; +pid_t pid;unsigned long offset;local_t data_size;bool snapshot;
drivers/hwtracing/coresight/coresight-tmc-etf.c +3 -1
@@ -227,6 +227,7 @@ static int tmc_enable_etf_sink_perf(struunsigned long flags;struct tmc_drvdata *drvdata =dev_get_drvdata (csdev->dev.parent);struct perf_output_handle *handle = data; +struct cs_buffers *buf =etm_perf_sink_config (handle);spin_lock_irqsave (&drvdata->spinlock, flags); do {
@@ -243,7 +244,7 @@ static int tmc_enable_etf_sink_perf(stru }/* Get a handle on the pid of the process to monitor */ - pid =task_pid_nr (handle->event->owner); + pid = buf->pid;if (drvdata->pid !=-1 && drvdata->pid != pid) { ret = -EBUSY ;
@@ -399,6 +400,7 @@ static void *tmc_alloc_etf_buffer(structif (!buf)return NULL ; + buf->pid =task_pid_nr (event->owner); buf->snapshot = overwrite; buf->nr_pages = nr_pages; buf->data_pages = pages;
Greg Kroah-Hartman
maintainerPATCH 62/453 coresight: tmc-etr: Check if page is valid before dma_map_page()
In reply to Greg Kroah-HartmanFrom: Mao Jinlong <[email protected]>
commit 1cc573d5754e92372a7e30e35468644f8811e1a4 upstream.
alloc_pages_node() return should be checked before calling dma_map_page() to make sure that valid page is mapped or else it can lead to aborts as below:
Unable to handle kernel paging request at virtual address ffffffc008000000 Mem abort info: <snip>... pc : __dma_inv_area+0x40/0x58 lr : dma_direct_map_page+0xd8/0x1c8 Call trace: __dma_inv_area tmc_pages_alloc tmc_alloc_data_pages tmc_alloc_sg_table tmc_init_etr_sg_table tmc_alloc_etr_buf tmc_enable_etr_sink_sysfs tmc_enable_etr_sink coresight_enable_path coresight_enable enable_source_store dev_attr_store sysfs_kf_write
--- drivers/hwtracing/coresight/coresight-tmc-etr.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/hwtracing/coresight/coresight-tmc-etr.c +2 -0
@@ -217,6 +217,8 @@ static int tmc_pages_alloc(struct tmc_pa }else { page =alloc_pages_node (node,GFP_KERNEL | __GFP_ZERO,0 ); +if (!page) + goto err; } paddr =dma_map_page (real_dev, page,0 ,PAGE_SIZE , dir);if (dma_mapping_error (real_dev, paddr))
Greg Kroah-Hartman
maintainerPATCH 63/453 coresight: tmc-etr: Fix barrier packet insertion for perf buffer
In reply to Greg Kroah-HartmanFrom: Suzuki K Poulose <[email protected]>
commit 83be0b84fe846edf0c722fefe225482d5f0d7395 upstream.
When the ETR is used in perf mode with a larger buffer (configured via sysfs or the default size of 1M) than the perf aux buffer size, we end up inserting the barrier packet at the wrong offset, while moving the offset forward. i.e, instead of the "new moved offset", we insert it at the current hardware buffer offset. These packets will not be visible as they are never copied and could lead to corruption in the trace decoding side, as the decoder is not aware that it needs to reset the decoding.
--- drivers/hwtracing/coresight/coresight-tmc-etr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hwtracing/coresight/coresight-tmc-etr.c +1 -1
@@ -1535,7 +1535,7 @@ tmc_update_etr_buffer(struct coresight_d/* Insert barrier packets at the beginning, if there was an overflow */ if (lost) -tmc_etr_buf_insert_barrier_packet (etr_buf, etr_buf->offset); +tmc_etr_buf_insert_barrier_packet (etr_buf, offset);tmc_etr_sync_perf_buffer (etr_perf, offset, size);/*
Greg Kroah-Hartman
maintainerPATCH 64/453 coresight: etb10: Fix possible NULL ptr dereference in etb_enable_perf()
In reply to Greg Kroah-HartmanFrom: Sai Prakash Ranjan <[email protected]>
commit 22b2beaa7f166f550424cbb3b988aeaa7ef0425a upstream.
There was a report of NULL pointer dereference in ETF enable path for perf CS mode with PID monitoring. It is almost 100% reproducible when the process to monitor is something very active such as chrome and with ETF as the sink, not ETR.
But code path shows that ETB has a similar path as ETF, so there could be possible NULL pointer dereference crash in ETB as well. Currently in a bid to find the pid, the owner is dereferenced via task_pid_nr() call in etb_enable_perf() and with owner being NULL, we can get a NULL pointer dereference, so have a similar fix as ETF where we cache PID in alloc_buffer() callback which is called as the part of etm_setup_aux().
--- drivers/hwtracing/coresight/coresight-etb10.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/hwtracing/coresight/coresight-etb10.c +3 -1
@@ -176,6 +176,7 @@ static int etb_enable_perf(struct coresiunsigned long flags;struct etb_drvdata *drvdata =dev_get_drvdata (csdev->dev.parent);struct perf_output_handle *handle = data; +struct cs_buffers *buf =etm_perf_sink_config (handle);spin_lock_irqsave (&drvdata->spinlock, flags);
@@ -186,7 +187,7 @@ static int etb_enable_perf(struct coresi }/* Get a handle on the pid of the process to monitor */ - pid =task_pid_nr (handle->event->owner); + pid = buf->pid;if (drvdata->pid !=-1 && drvdata->pid != pid) { ret = -EBUSY ;
@@ -383,6 +384,7 @@ static void *etb_alloc_buffer(struct corif (!buf)return NULL ; + buf->pid =task_pid_nr (event->owner); buf->snapshot = overwrite; buf->nr_pages = nr_pages; buf->data_pages = pages;
Greg Kroah-Hartman
maintainerPATCH 65/453 scsi: megaraid_sas: Check user-provided offsets
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
commit 381d34e376e3d9d27730fda8a0e870600e6c8196 upstream.
It sounds unwise to let user space pass an unchecked 32-bit offset into a kernel structure in an ioctl. This is an unsigned variable, so checking the upper bound for the size of the structure it points into is sufficient to avoid data corruption, but as the pointer might also be unaligned, it has to be written carefully as well.
While I stumbled over this problem by reading the code, I did not continue checking the function for further problems like it.
--- drivers/scsi/megaraid/megaraid_sas_base.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
drivers/scsi/megaraid/megaraid_sas_base.c +11 -5
@@ -8038,7 +8038,7 @@ megasas_mgmt_fw_ioctl(struct megasas_insint error =0 , i;void *sense =NULL ;dma_addr_t sense_handle; -unsigned long *sense_ptr; +void *sense_ptr;u32 opcode =0 ;memset (kbuff_arr,0 ,sizeof (kbuff_arr));
@@ -8160,6 +8160,13 @@ megasas_mgmt_fw_ioctl(struct megasas_ins }if (ioc->sense_len) { +/* make sure the pointer is part of the frame */ +if (ioc->sense_off > + (sizeof (union megasas_frame ) -sizeof (__le64))) { + error = -EINVAL ; + goto out; + } + sense =dma_alloc_coherent (&instance->pdev->dev, ioc->sense_len, &sense_handle,GFP_KERNEL );if (!sense) {
@@ -8167,12 +8174,11 @@ megasas_mgmt_fw_ioctl(struct megasas_ins goto out; } - sense_ptr = - (unsigned long *) ((unsigned long )cmd->frame + ioc->sense_off); + sense_ptr = (void *)cmd->frame + ioc->sense_off;if (instance->consistent_mask_64bit) - *sense_ptr =cpu_to_le64 (sense_handle); +put_unaligned_le64 (sense_handle, sense_ptr);else - *sense_ptr =cpu_to_le32 (sense_handle); +put_unaligned_le32 (sense_handle, sense_ptr); }/*
Greg Kroah-Hartman
maintainerPATCH 66/453 HID: i2c-hid: add Vero K147 to descriptor override
In reply to Greg Kroah-HartmanFrom: Julian Sax <[email protected]>
commit c870d50ce387d84b6438211a7044c60afbd5d60a upstream.
This device uses the SIPODEV SP1064 touchpad, which does not supply descriptors, so it has to be added to the override list.
--- drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c +8 -0
@@ -405,6 +405,14 @@ static const struct dmi_system_id i2c_hi }, .driver_data = (void *)&sipodev_desc }, + { + .ident = "Vero K147", + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VERO"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "K147"), + }, + .driver_data = (void *)&sipodev_desc + }, { } /* Terminate list */ };
Greg Kroah-Hartman
maintainerPATCH 67/453 serial_core: Check for port state when tty is in error state
In reply to Greg Kroah-HartmanFrom: Alexey Kardashevskiy <[email protected]>
commit 2f70e49ed860020f5abae4f7015018ebc10e1f0e upstream.
At the moment opening a serial device node (such as /dev/ttyS3) succeeds even if there is no actual serial device behind it. Reading/writing/ioctls fail as expected because the uart port is not initialized (the type is PORT_UNKNOWN) and the TTY_IO_ERROR error state bit is set fot the tty.
However setting line discipline does not have these checks 8250_port.c (8250 is the default choice made by univ8250_console_init()). As the result of PORT_UNKNOWN, uart_port::iobase is NULL which a platform translates onto some address accessing which produces a crash like below.
This adds tty_port_initialized() to uart_set_ldisc() to prevent the crash.
Found by syzkaller.
--- drivers/tty/serial/serial_core.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/tty/serial/serial_core.c +4 -0
@@ -1465,6 +1465,10 @@ static void uart_set_ldisc(struct tty_st {struct uart_state *state = tty->driver_data;struct uart_port *uport; +struct tty_port *port = &state->port; + +if (!tty_port_initialized (port)) +return ;mutex_lock (&state->port.mutex); uport =uart_port_check (state);
Greg Kroah-Hartman
maintainerPATCH 68/453 Bluetooth: Fix slab-out-of-bounds read in hci_le_direct_adv_report_evt()
In reply to Greg Kroah-HartmanFrom: Peilin Ye <[email protected]>
commit f7e0e8b2f1b0a09b527885babda3e912ba820798 upstream.
num_reports is not being properly checked. A malformed event packet with a large num_reports number makes hci_le_direct_adv_report_evt() read out of bounds. Fix it.
--- net/bluetooth/hci_event.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
net/bluetooth/hci_event.c +5 -7
@@ -5711,21 +5711,19 @@ static void hci_le_direct_adv_report_evt struct sk_buff *skb) {u8 num_reports = skb->data[0 ]; -void *ptr = &skb->data[1 ]; +struct hci_ev_le_direct_adv_info *ev = (void *)&skb->data[1 ]; -hci_dev_lock (hdev); +if (!num_reports || skb->len < num_reports *sizeof (*ev) +1 ) +return ; -while (num_reports--) { -struct hci_ev_le_direct_adv_info *ev = ptr; +hci_dev_lock (hdev); +for (; num_reports; num_reports--, ev++)process_adv_report (hdev, ev->evt_type, &ev->bdaddr, ev->bdaddr_type, &ev->direct_addr, ev->direct_addr_type, ev->rssi,NULL ,0 , false); - ptr +=sizeof (*ev); - } -hci_dev_unlock (hdev); }
Greg Kroah-Hartman
maintainerPATCH 69/453 quota: Sanity-check quota file headers on load
In reply to Greg Kroah-HartmanFrom: Jan Kara <[email protected]>
commit 11c514a99bb960941535134f0587102855e8ddee upstream.
Perform basic sanity checks of quota headers to avoid kernel crashes on corrupted quota files.
--- fs/quota/quota_v2.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
fs/quota/quota_v2.c +19 -0
@@ -159,6 +159,25 @@ static int v2_read_file_info(struct supe qinfo->dqi_entry_size =sizeof (struct v2r1_disk_dqblk ); qinfo->dqi_ops = &v2r1_qtree_ops; } + ret = -EUCLEAN ; +/* Some sanity checks of the read headers... */ +if ((loff_t )qinfo->dqi_blocks << qinfo->dqi_blocksize_bits > +i_size_read (sb_dqopt (sb)->files[type])) { +quota_error (sb,"Number of blocks too big for quota file size (%llu > %llu)." , + (loff_t )qinfo->dqi_blocks << qinfo->dqi_blocksize_bits, +i_size_read (sb_dqopt (sb)->files[type])); + goto out; + } +if (qinfo->dqi_free_blk >= qinfo->dqi_blocks) { +quota_error (sb,"Free block number too big (%u >= %u)." , + qinfo->dqi_free_blk, qinfo->dqi_blocks); + goto out; + } +if (qinfo->dqi_free_entry >= qinfo->dqi_blocks) { +quota_error (sb,"Block with free entry too big (%u >= %u)." , + qinfo->dqi_free_entry, qinfo->dqi_blocks); + goto out; + } ret =0 ; out:up_read (&dqopt->dqio_sem);
Greg Kroah-Hartman
maintainerPATCH 70/453 media: msi2500: assign SPI bus number dynamically
In reply to Greg Kroah-HartmanFrom: Antti Palosaari <[email protected]>
commit 9c60cc797cf72e95bb39f32316e9f0e5f85435f9 upstream.
SPI bus number must be assigned dynamically for each device, otherwise it will crash when multiple devices are plugged to system.
--- drivers/media/usb/msi2500/msi2500.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/usb/msi2500/msi2500.c +1 -1
@@ -1230,7 +1230,7 @@ static int msi2500_probe(struct usb_inte } dev->master = master; - master->bus_num =0 ; + master->bus_num =-1 ; master->num_chipselect =1 ; master->transfer_one_message = msi2500_transfer_one_message;spi_master_set_devdata (master, dev);
Greg Kroah-Hartman
maintainerPATCH 71/453 crypto: af_alg - avoid undefined behavior accessing salg_name
In reply to Greg Kroah-HartmanFrom: Eric Biggers <[email protected]>
commit 92eb6c3060ebe3adf381fd9899451c5b047bb14d upstream.
Commit 3f69cc60768b ("crypto: af_alg - Allow arbitrarily long algorithm names") made the kernel start accepting arbitrarily long algorithm names in sockaddr_alg. However, the actual length of the salg_name field stayed at the original 64 bytes.
This is broken because the kernel can access indices >= 64 in salg_name, which is undefined behavior -- even though the memory that is accessed is still located within the sockaddr structure. It would only be defined behavior if the array were properly marked as arbitrary-length (either by making it a flexible array, which is the recommended way these days, or by making it an array of length 0 or 1).
We can't simply change salg_name into a flexible array, since that would break source compatibility with userspace programs that embed sockaddr_alg into another struct, or (more commonly) declare a sockaddr_alg like 'struct sockaddr_alg sa = { .salg_name = "foo" };'.
One solution would be to change salg_name into a flexible array only when '#ifdef __KERNEL__'. However, that would keep userspace without an easy way to actually use the longer algorithm names.
Instead, add a new structure 'sockaddr_alg_new' that has the flexible array field, and expose it to both userspace and the kernel. Make the kernel use it correctly in alg_bind().
This addresses the syzbot report
"UBSAN: array-index-out-of-bounds in alg_bind"
(https://syzkaller.appspot.com/bug?extid=92ead4eb8e26a26d465e).
--- crypto/af_alg.c | 10 +++++++--- include/uapi/linux/if_alg.h | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-)
crypto/af_alg.c +7 -3
@@ -147,7 +147,7 @@ static int alg_bind(struct socket *sock,const u32 allowed =CRYPTO_ALG_KERN_DRIVER_ONLY ;struct sock *sk = sock->sk;struct alg_sock *ask =alg_sk (sk); -struct sockaddr_alg *sa = (void *)uaddr; +struct sockaddr_alg_new *sa = (void *)uaddr;const struct af_alg_type *type;void *private;int err;
@@ -155,7 +155,11 @@ static int alg_bind(struct socket *sock,if (sock->state ==SS_CONNECTED )return -EINVAL ; -if (addr_len <sizeof (*sa)) +BUILD_BUG_ON (offsetof(struct sockaddr_alg_new , salg_name) != + offsetof(struct sockaddr_alg , salg_name)); +BUILD_BUG_ON (offsetof(struct sockaddr_alg , salg_name) !=sizeof (*sa)); + +if (addr_len <sizeof (*sa) +1 )return -EINVAL ;/* If caller uses non-allowed flag, return error. */
@@ -163,7 +167,7 @@ static int alg_bind(struct socket *sock,return -EINVAL ; sa->salg_type[sizeof (sa->salg_type) -1 ] =0 ; - sa->salg_name[sizeof (sa->salg_name) + addr_len -sizeof (*sa) -1 ] =0 ; + sa->salg_name[addr_len -sizeof (*sa) -1 ] =0 ; type =alg_get_type (sa->salg_type);if (IS_ERR (type) &&PTR_ERR (type) == -ENOENT ) {
include/uapi/linux/if_alg.h +16 -0
@@ -24,6 +24,22 @@ struct sockaddr_alg {__u8 salg_name[64 ]; }; +/* +* Linux v4.12 and later removed the 64-byte limit on salg_name[]; it's now an +* arbitrary-length field. We had to keep the original struct above for source +* compatibility with existing userspace programs, though. Use the new struct +* below if support for very long algorithm names is needed. To do this, +* allocate 'sizeof(struct sockaddr_alg_new) + strlen(algname) + 1' bytes, and +* copy algname (including the null terminator) into salg_name. +*/ +struct sockaddr_alg_new { +__u16 salg_family; +__u8 salg_type[14 ]; +__u32 salg_feat; +__u32 salg_mask; +__u8 salg_name[]; +}; +struct af_alg_iv {__u32 ivlen;__u8 iv[0 ];
Greg Kroah-Hartman
maintainerPATCH 72/453 md: fix a warning caused by a race between concurrent md_ioctl()s
In reply to Greg Kroah-HartmanFrom: Dae R. Jeong <[email protected]>
commit c731b84b51bf7fe83448bea8f56a6d55006b0615 upstream.
Syzkaller reports a warning as belows.
WARNING: CPU: 0 PID: 9647 at drivers/md/md.c:7169 ... Call Trace: ... RIP: 0010:md_ioctl+0x4017/0x5980 drivers/md/md.c:7169 RSP: 0018:ffff888096027950 EFLAGS: 00010293 RAX: ffff88809322c380 RBX: 0000000000000932 RCX: ffffffff84e266f2 RDX: 0000000000000000 RSI: ffffffff84e299f7 RDI: 0000000000000007 RBP: ffff888096027bc0 R08: ffff88809322c380 R09: ffffed101341a482 R10: ffff888096027940 R11: ffff88809a0d240f R12: 0000000000000932 R13: ffff8880a2c14100 R14: ffff88809a0d2268 R15: ffff88809a0d2408 __blkdev_driver_ioctl block/ioctl.c:304 [inline] blkdev_ioctl+0xece/0x1c10 block/ioctl.c:606 block_ioctl+0xee/0x130 fs/block_dev.c:1930 vfs_ioctl fs/ioctl.c:46 [inline] file_ioctl fs/ioctl.c:509 [inline] do_vfs_ioctl+0xd5f/0x1380 fs/ioctl.c:696 ksys_ioctl+0xab/0xd0 fs/ioctl.c:713 __do_sys_ioctl fs/ioctl.c:720 [inline] __se_sys_ioctl fs/ioctl.c:718 [inline] __x64_sys_ioctl+0x73/0xb0 fs/ioctl.c:718 do_syscall_64+0xfd/0x680 arch/x86/entry/common.c:301 entry_SYSCALL_64_after_hwframe+0x49/0xbe
This is caused by a race between two concurrenct md_ioctl()s closing the array.
CPU1 (md_ioctl()) CPU2 (md_ioctl())
------ ------set_bit(MD_CLOSING, &mddev->flags);
did_set_md_closing = true;
WARN_ON_ONCE(test_bit(MD_CLOSING,
&mddev->flags));
if(did_set_md_closing)
clear_bit(MD_CLOSING, &mddev->flags);Fix the warning by returning immediately if the MD_CLOSING bit is set in &mddev->flags which indicates that the array is being closed.
--- drivers/md/md.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/md/md.c +5 -2
@@ -7371,8 +7371,11 @@ static int md_ioctl(struct block_device err = -EBUSY ; goto out; } -WARN_ON_ONCE (test_bit (MD_CLOSING , &mddev->flags)); -set_bit (MD_CLOSING , &mddev->flags); +if (test_and_set_bit (MD_CLOSING , &mddev->flags)) { +mutex_unlock (&mddev->open_mutex); + err = -EBUSY ; + goto out; + } did_set_md_closing = true;mutex_unlock (&mddev->open_mutex);sync_blockdev (bdev);
Greg Kroah-Hartman
maintainerPATCH 73/453 drm/gma500: fix double free of gma_connector
In reply to Greg Kroah-HartmanFrom: Tom Rix <[email protected]>
[ Upstream commit 4e19d51ca5b28a1d435a844c7b2a8e1b1b6fa237 ]
clang static analysis reports this problem:
cdv_intel_dp.c:2101:2: warning: Attempt to free released memory
kfree(gma_connector);
^~~~~~~~~~~~~~~~~~~~In cdv_intel_dp_init() when the call to cdv_intel_edp_panel_vdd_off() fails, the handler calls cdv_intel_dp_destroy(connector) which does the first free of gma_connector. So adjust the goto label and skip the second free.
--- drivers/gpu/drm/gma500/cdv_intel_dp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/gma500/cdv_intel_dp.c +1 -1
@@ -2125,7 +2125,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_devDRM_INFO ("failed to retrieve link info, disabling eDP\n" );cdv_intel_dp_encoder_destroy (encoder);cdv_intel_dp_destroy (connector); - goto err_priv; + goto err_connector; }else { DRM_DEBUG_KMS("DPCD: Rev=%x LN_Rate=%x LN_CNT=%x LN_DOWNSP=%x\n", intel_dp->dpcd[0], intel_dp->dpcd[1],
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 74/453 drm/aspeed: Fix Kconfig warning & subsequent build errors
In reply to Greg Kroah-HartmanFrom: Randy Dunlap <[email protected]>
[ Upstream commit bf296b35489b46780b73b74ad984d06750ed5479 ]
Kernel test robot reported build errors (undefined references) that didn't make much sense. After reproducing them, there is also a Kconfig warning that is the root cause of the build errors, so fix that Kconfig problem.
Fixes this Kconfig warning:
WARNING: unmet direct dependencies detected for CMA
Depends on [n]: MMU [=n]
Selected by [m]:
- DRM_ASPEED_GFX [=m] && HAS_IOMEM [=y] && DRM [=m] && OF [=y] && (COMPILE_TEST [=y] || ARCH_ASPEED) && HAVE_DMA_CONTIGUOUS [=y]
and these dependent build errors:
(.text+0x10c8c): undefined reference to `start_isolate_page_range'
microblaze-linux-ld: (.text+0x10f14): undefined reference to `test_pages_isolated'
microblaze-linux-ld: (.text+0x10fd0): undefined reference to `undo_isolate_page_range'
--- drivers/gpu/drm/aspeed/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/aspeed/Kconfig +1 -0
@@ -3,6 +3,7 @@ config DRM_ASPEED_GFX tristate "ASPEED BMC Display Controller" depends on DRM && OF depends on (COMPILE_TEST || ARCH_ASPEED) + depends on MMU select DRM_KMS_HELPER select DRM_KMS_CMA_HELPER select DMA_CMA if HAVE_DMA_CONTIGUOUS
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 75/453 drm/mcde: Fix handling of platform_get_irq() error
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit e2dae672a9d5e11856fe30ede63467c65f999a81 ]
platform_get_irq() returns -ERRNO on error. In such case comparison to 0 would pass the check.
--- drivers/gpu/drm/mcde/mcde_drv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/mcde/mcde_drv.c +2 -2
@@ -410,8 +410,8 @@ static int mcde_probe(struct platform_device *pdev) } irq =platform_get_irq (pdev,0 ); -if (!irq) { - ret = -EINVAL ; +if (irq <0 ) { + ret = irq; goto clk_disable; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 76/453 drm/tve200: Fix handling of platform_get_irq() error
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 77bb5aaf2bb8180e7d1bb70b4df306f511707a7d ]
platform_get_irq() returns -ERRNO on error. In such case comparison to 0 would pass the check.
--- drivers/gpu/drm/tve200/tve200_drv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/tve200/tve200_drv.c +2 -2
@@ -210,8 +210,8 @@ static int tve200_probe(struct platform_device *pdev) } irq =platform_get_irq (pdev,0 ); -if (!irq) { - ret = -EINVAL ; +if (irq <0 ) { + ret = irq; goto clk_disable; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 77/453 arm64: dts: renesas: hihope-rzg2-ex: Drop rxc-skew-ps from ethernet-phy node
In reply to Greg Kroah-HartmanFrom: Biju Das <[email protected]>
[ Upstream commit 67d3dcf12a3d245b6fd6ca5672893f7ae4e137ed ]
HiHope RZG2[HMN] boards uses Realtek phy and the driver does not support rxc-skew-ps property. So remove rxc-skew-ps from ethernet-phy node.
--- arch/arm64/boot/dts/renesas/hihope-rzg2-ex.dtsi | 1 - 1 file changed, 1 deletion(-)
arch/arm64/boot/dts/renesas/hihope-rzg2-ex.dtsi +0 -1
@@ -23,7 +23,6 @@ status = "okay"; phy0: ethernet-phy@0 { - rxc-skew-ps = <1500>; reg = <0>; interrupt-parent = <&gpio2>; interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 78/453 arm64: dts: renesas: cat875: Remove rxc-skew-ps from ethernet-phy node
In reply to Greg Kroah-HartmanFrom: Biju Das <[email protected]>
[ Upstream commit 53e573dc39fba1834f3e4fa002cb754b61a30701 ]
The CAT875 sub board from Silicon Linux uses Realtek phy and the driver does not support rxc-skew-ps property.
--- arch/arm64/boot/dts/renesas/cat875.dtsi | 1 - 1 file changed, 1 deletion(-)
arch/arm64/boot/dts/renesas/cat875.dtsi +0 -1
@@ -22,7 +22,6 @@ status = "okay"; phy0: ethernet-phy@0 { - rxc-skew-ps = <1500>; reg = <0>; interrupt-parent = <&gpio2>; interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 79/453 soc: renesas: rmobile-sysc: Fix some leaks in rmobile_init_pm_domains()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit cf25d802e029c31efac8bdc979236927f37183bd ]
This code needs to call iounmap() on one error path.
--- drivers/soc/renesas/rmobile-sysc.c | 1 + 1 file changed, 1 insertion(+)
drivers/soc/renesas/rmobile-sysc.c +1 -0
@@ -327,6 +327,7 @@ static int __init rmobile_init_pm_domains(void) pmd =of_get_child_by_name (np,"pm-domains" );if (!pmd) { +iounmap (base);pr_warn ("%pOF lacks pm-domains node\n" , np);continue ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 80/453 soc: mediatek: Check if power domains can be powered on at boot time
In reply to Greg Kroah-HartmanFrom: Nicolas Boichat <[email protected]>
[ Upstream commit 4007844b05815717f522c7ea9914e24ad0ff6c79 ]
In the error case, where a power domain cannot be powered on successfully at boot time (in mtk_register_power_domains), pm_genpd_init would still be called with is_off=false, and the system would later try to disable the power domain again, triggering warnings as disabled clocks are disabled again (and other potential issues).
Also print a warning splat in that case, as this should never happen.
--- drivers/soc/mediatek/mtk-scpsys.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/soc/mediatek/mtk-scpsys.c +3 -2
@@ -446,6 +446,7 @@ static void mtk_register_power_domains(struct platform_device *pdev,for (i =0 ; i < num; i++) {struct scp_domain *scpd = &scp->domains[i];struct generic_pm_domain *genpd = &scpd->genpd; +bool on;/* * Initially turn on all domains to make the domains usable
@@ -453,9 +454,9 @@ static void mtk_register_power_domains(struct platform_device *pdev,* software. The unused domains will be switched off during * late_init time. */ - genpd->power_on (genpd); + on = !WARN_ON (genpd->power_on (genpd) <0 ); -pm_genpd_init (genpd,NULL , false); +pm_genpd_init (genpd,NULL , !on); }/*
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 81/453 soc: qcom: geni: More properly switch to DMA mode
In reply to Greg Kroah-HartmanFrom: Douglas Anderson <[email protected]>
[ Upstream commit 4b6ea87be44ef34732846fc71e44c41125f0c4fa ]
On geni-i2c transfers using DMA, it was seen that if you program the command (I2C_READ) before calling geni_se_rx_dma_prep() that it could cause interrupts to fire. If we get unlucky, these interrupts can just keep firing (and not be handled) blocking further progress and hanging the system.
In commit 02b9aec59243 ("i2c: i2c-qcom-geni: Fix DMA transfer race") we avoided that by making sure we didn't program the command until after geni_se_rx_dma_prep() was called. While that avoided the problems, it also turns out to be invalid. At least in the TX case we started seeing sporadic corrupted transfers. This is easily seen by adding an msleep() between the DMA prep and the writing of the command, which makes the problem worse. That means we need to revert that commit and find another way to fix the bogus IRQs.
Specifically, after reverting commit 02b9aec59243 ("i2c:
i2c-qcom-geni: Fix DMA transfer race"), I put some traces in. I found that the when the interrupts were firing like crazy:
- "m_stat" had bits for M_RX_IRQ_EN, M_RX_FIFO_WATERMARK_EN set.
- "dma" was set.
Further debugging showed that I could make the problem happen more reliably by adding an "msleep(1)" any time after geni_se_setup_m_cmd() ran up until geni_se_rx_dma_prep() programmed the length.
A rather simple fix is to change geni_se_select_dma_mode() so it's a true inverse of geni_se_select_fifo_mode() and disables all the FIFO related interrupts. Now the problematic interrupts can't fire and we can program things in the correct order without worrying.
As part of this, let's also change the writel_relaxed() in the prepare function to a writel() so that our DMA is guaranteed to be prepared now that we can't rely on geni_se_setup_m_cmd()'s writel().
NOTE: the only current user of GENI_SE_DMA in mainline is i2c.
--- drivers/soc/qcom/qcom-geni-se.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)
drivers/soc/qcom/qcom-geni-se.c +15 -2
@@ -282,10 +282,23 @@ static void geni_se_select_fifo_mode(struct geni_se *se)static void geni_se_select_dma_mode (struct geni_se *se) { +u32 proto =geni_se_read_proto (se);u32 val;geni_se_irq_clear (se); + val =readl_relaxed (se->base +SE_GENI_M_IRQ_EN ); +if (proto !=GENI_SE_UART ) { + val &= ~(M_CMD_DONE_EN |M_TX_FIFO_WATERMARK_EN ); + val &= ~(M_RX_FIFO_WATERMARK_EN |M_RX_FIFO_LAST_EN ); + } +writel_relaxed (val, se->base +SE_GENI_M_IRQ_EN ); + + val =readl_relaxed (se->base +SE_GENI_S_IRQ_EN ); +if (proto !=GENI_SE_UART ) + val &= ~S_CMD_DONE_EN ; +writel_relaxed (val, se->base +SE_GENI_S_IRQ_EN ); + val =readl_relaxed (se->base +SE_GENI_DMA_MODE_EN ); val |=GENI_DMA_MODE_EN ;writel_relaxed (val, se->base +SE_GENI_DMA_MODE_EN );
@@ -644,7 +657,7 @@ int geni_se_tx_dma_prep(struct geni_se *se, void *buf, size_t len,writel_relaxed (lower_32_bits (*iova), se->base +SE_DMA_TX_PTR_L );writel_relaxed (upper_32_bits (*iova), se->base +SE_DMA_TX_PTR_H );writel_relaxed (GENI_SE_DMA_EOT_BUF , se->base +SE_DMA_TX_ATTR ); -writel_relaxed (len, se->base +SE_DMA_TX_LEN ); +writel (len, se->base +SE_DMA_TX_LEN );return 0 ; }EXPORT_SYMBOL (geni_se_tx_dma_prep);
@@ -681,7 +694,7 @@ int geni_se_rx_dma_prep(struct geni_se *se, void *buf, size_t len,writel_relaxed (upper_32_bits (*iova), se->base +SE_DMA_RX_PTR_H );/* RX does not have EOT buffer type bit. So just reset RX_ATTR */ writel_relaxed (0 , se->base +SE_DMA_RX_ATTR ); -writel_relaxed (len, se->base +SE_DMA_RX_LEN ); +writel (len, se->base +SE_DMA_RX_LEN );return 0 ; }EXPORT_SYMBOL (geni_se_rx_dma_prep);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 82/453 Revert "i2c: i2c-qcom-geni: Fix DMA transfer race"
In reply to Greg Kroah-HartmanFrom: Douglas Anderson <[email protected]>
[ Upstream commit 9cb4c67d7717135d6f4600a49ab07b470ea4ee2f ]
This reverts commit 02b9aec59243c6240fc42884acc958602146ddf6.
As talked about in the patch ("soc: qcom: geni: More properly switch to DMA mode"), swapping the order of geni_se_setup_m_cmd() and geni_se_xx_dma_prep() can sometimes cause corrupted transfers. Thus we traded one problem for another. Now that we've debugged the problem further and fixed the geni helper functions to more disable FIFO interrupts when we move to DMA mode we can revert it and end up with (hopefully) zero problems!
To be explicit, the patch ("soc: qcom: geni: More properly switch to DMA mode") is a prerequisite for this one.
--- drivers/i2c/busses/i2c-qcom-geni.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/i2c/busses/i2c-qcom-geni.c +2 -4
@@ -368,6 +368,7 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,geni_se_select_mode (se,GENI_SE_FIFO );writel_relaxed (len, se->base +SE_I2C_RX_TRANS_LEN ); +geni_se_setup_m_cmd (se,I2C_READ , m_param);if (dma_buf &&geni_se_rx_dma_prep (se, dma_buf, len, &rx_dma)) {geni_se_select_mode (se,GENI_SE_FIFO );
@@ -375,8 +376,6 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, dma_buf =NULL ; } -geni_se_setup_m_cmd (se,I2C_READ , m_param); - time_left =wait_for_completion_timeout (&gi2c->done,XFER_TIMEOUT );if (!time_left)geni_i2c_abort_xfer (gi2c);
@@ -410,6 +409,7 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,geni_se_select_mode (se,GENI_SE_FIFO );writel_relaxed (len, se->base +SE_I2C_TX_TRANS_LEN ); +geni_se_setup_m_cmd (se,I2C_WRITE , m_param);if (dma_buf &&geni_se_tx_dma_prep (se, dma_buf, len, &tx_dma)) {geni_se_select_mode (se,GENI_SE_FIFO );
@@ -417,8 +417,6 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, dma_buf =NULL ; } -geni_se_setup_m_cmd (se,I2C_WRITE , m_param); -if (!dma_buf)/* Get FIFO IRQ */ writel_relaxed (1 , se->base +SE_GENI_TX_WATERMARK_REG );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 83/453 RDMA/bnxt_re: Set queue pair state when being queried
In reply to Greg Kroah-HartmanFrom: Kamal Heib <[email protected]>
[ Upstream commit 53839b51a7671eeb3fb44d479d541cf3a0f2dd45 ]
The API for ib_query_qp requires the driver to set cur_qp_state on return, add the missing set.
--- drivers/infiniband/hw/bnxt_re/ib_verbs.c | 1 + 1 file changed, 1 insertion(+)
drivers/infiniband/hw/bnxt_re/ib_verbs.c +1 -0
@@ -1793,6 +1793,7 @@ int bnxt_re_query_qp(struct ib_qp *ib_qp, struct ib_qp_attr *qp_attr, goto out; } qp_attr->qp_state =__to_ib_qp_state (qplib_qp->state); + qp_attr->cur_qp_state =__to_ib_qp_state (qplib_qp->cur_qp_state); qp_attr->en_sqd_async_notify = qplib_qp->en_sqd_async_notify ?1 :0 ; qp_attr->qp_access_flags =__to_ib_access_flags (qplib_qp->access); qp_attr->pkey_index = qplib_qp->pkey_index;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 84/453 rtc: pcf2127: fix pcf2127_nvmem_read/write() returns
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit ba1c30bf3f2536f248d262c6f257b5a787305991 ]
These functions should return zero on success. Non-zero returns are treated as error. On some paths, this doesn't matter but in nvmem_cell_read() a non-zero return would be passed to ERR_PTR() and lead to an Oops.
--- drivers/rtc/rtc-pcf2127.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
drivers/rtc/rtc-pcf2127.c +4 -8
@@ -230,10 +230,8 @@ static int pcf2127_nvmem_read(void *priv, unsigned int offset,if (ret)return ret; - ret =regmap_bulk_read (pcf2127->regmap,PCF2127_REG_RAM_RD_CMD , - val, bytes); - -return ret ?: bytes; +return regmap_bulk_read (pcf2127->regmap,PCF2127_REG_RAM_RD_CMD , + val, bytes); } static int pcf2127_nvmem_write(void *priv, unsigned int offset,
@@ -248,10 +246,8 @@ static int pcf2127_nvmem_write(void *priv, unsigned int offset,if (ret)return ret; - ret =regmap_bulk_write (pcf2127->regmap,PCF2127_REG_RAM_WRT_CMD , - val, bytes); - -return ret ?: bytes; +return regmap_bulk_write (pcf2127->regmap,PCF2127_REG_RAM_WRT_CMD , + val, bytes); }/* watchdog driver */
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 85/453 selinux: fix error initialization in inode_doinit_with_dentry()
In reply to Greg Kroah-HartmanFrom: Tianyue Ren <[email protected]>
[ Upstream commit 83370b31a915493231e5b9addc72e4bef69f8d31 ]
Mark the inode security label as invalid if we cannot find a dentry so that we will retry later rather than marking it initialized with the unlabeled SID.
--- security/selinux/hooks.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-)
security/selinux/hooks.c +16 -3
@@ -1499,7 +1499,13 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent* inode_doinit with a dentry, before these inodes could * be used again by userspace. */ - goto out; + isec->initialized =LABEL_INVALID ; +/* +* There is nothing useful to jump to the "out" +* label, except a needless spin lock/unlock +* cycle. +*/ +return 0 ; } rc = inode_doinit_use_xattr(inode, dentry, sbsec->def_sid,
@@ -1553,8 +1559,15 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent* inode_doinit() with a dentry, before these inodes * could be used again by userspace. */ -if (!dentry) - goto out; +if (!dentry) { + isec->initialized =LABEL_INVALID ; +/* +* There is nothing useful to jump to the "out" +* label, except a needless spin lock/unlock +* cycle. +*/ +return 0 ; + } rc =selinux_genfs_get_sid (dentry, sclass, sbsec->flags, &sid);if (rc) {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 86/453 ARM: dts: aspeed: s2600wf: Fix VGA memory region location
In reply to Greg Kroah-HartmanFrom: Joel Stanley <[email protected]>
[ Upstream commit 9e1cc9679776f5b9e42481d392b1550753ebd084 ]
The VGA memory region is always from the top of RAM. On this board, that is 0x80000000 + 0x20000000 - 0x01000000 = 0x9f000000.
This was not an issue in practice as the region is "reserved" by the vendor's u-boot reducing the amount of available RAM, and the only user is the host VGA device poking at RAM over PCIe. That is, nothing from the ARM touches it.
It is worth fixing as developers copy existing device trees when building their machines, and the XDMA driver does use the memory region from the ARM side.
--- arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts +2 -2
@@ -22,9 +22,9 @@ #size-cells = <1>; ranges; - vga_memory: framebuffer@7f000000 { + vga_memory: framebuffer@9f000000 { no-map; - reg = <0x7f000000 0x01000000>; + reg = <0x9f000000 0x01000000>; /* 16M */ }; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 87/453 RDMA/rxe: Compute PSN windows correctly
In reply to Greg Kroah-HartmanFrom: Bob Pearson <[email protected]>
[ Upstream commit bb3ab2979fd69db23328691cb10067861df89037 ]
The code which limited the number of unacknowledged PSNs was incorrect. The PSNs are limited to 24 bits and wrap back to zero from 0x00ffffff. The test was computing a 32 bit value which wraps at 32 bits so that qp->req.psn can appear smaller than the limit when it is actually larger.
Replace '>' test with psn_compare which is used for other PSN comparisons and correctly handles the 24 bit size.
--- drivers/infiniband/sw/rxe/rxe_req.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/infiniband/sw/rxe/rxe_req.c +2 -1
@@ -664,7 +664,8 @@ next_wqe: }if (unlikely (qp_type (qp) ==IB_QPT_RC && - qp->req.psn > (qp->comp.psn +RXE_MAX_UNACKED_PSNS ))) { +psn_compare (qp->req.psn, (qp->comp.psn + +RXE_MAX_UNACKED_PSNS )) >0 )) { qp->req.wait_psn =1 ; goto exit; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 88/453 x86/mm/ident_map: Check for errors from ident_pud_init()
In reply to Greg Kroah-HartmanFrom: Arvind Sankar <[email protected]>
[ Upstream commit 1fcd009102ee02e217f2e7635ab65517d785da8e ]
Commit
ea3b5e60ce80 ("x86/mm/ident_map: Add 5-level paging support")
added ident_p4d_init() to support 5-level paging, but this function doesn't check and return errors from ident_pud_init().
For example, the decompressor stub uses this code to create an identity mapping. If it runs out of pages while trying to allocate a PMD pagetable, the error will be currently ignored.
Fix this to propagate errors.
[ bp: Space out statements for better readability. ]
--- arch/x86/mm/ident_map.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
arch/x86/mm/ident_map.c +10 -2
@@ -62,6 +62,7 @@ static int ident_p4d_init(struct x86_mapping_info *info, p4d_t *p4d_page, unsigned long addr, unsigned long end) {unsigned long next; +int result;for (; addr < end; addr = next) {p4d_t *p4d = p4d_page +p4d_index (addr);
@@ -73,13 +74,20 @@ static int ident_p4d_init(struct x86_mapping_info *info, p4d_t *p4d_page,if (p4d_present (*p4d)) { pud =pud_offset (p4d,0 ); -ident_pud_init (info, pud, addr, next); + result =ident_pud_init (info, pud, addr, next); +if (result) +return result; +continue ; } pud = (pud_t *)info->alloc_pgt_page (info->context);if (!pud)return -ENOMEM ; -ident_pud_init (info, pud, addr, next); + + result =ident_pud_init (info, pud, addr, next); +if (result) +return result; +set_p4d (p4d,__p4d (__pa (pud) | info->kernpg_flag)); }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 89/453 ARM: p2v: fix handling of LPAE translation in BE mode
In reply to Greg Kroah-HartmanFrom: Ard Biesheuvel <[email protected]>
[ Upstream commit 4e79f0211b473f8e1eab8211a9fd50cc41a3a061 ]
When running in BE mode on LPAE hardware with a PA-to-VA translation that exceeds 4 GB, we patch bits 39:32 of the offset into the wrong byte of the opcode. So fix that, by rotating the offset in r0 to the right by 8 bits, which will put the 8-bit immediate in bits 31:24.
Note that this will also move bit #22 in its correct place when applying the rotation to the constant #0x400000.
--- arch/arm/kernel/head.S | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
arch/arm/kernel/head.S +1 -5
@@ -671,12 +671,8 @@ ARM_BE8(rev16 ip, ip) ldrcc r7, [r4], #4 @ use branch for delay slot bcc 1b bx lr -#else -#ifdef CONFIG_CPU_ENDIAN_BE8 - moveq r0, #0x00004000 @ set bit 22, mov to mvn instruction #else moveq r0, #0x400000 @ set bit 22, mov to mvn instruction -#endif b 2f 1: ldr ip, [r7, r3] #ifdef CONFIG_CPU_ENDIAN_BE8
@@ -685,7 +681,7 @@ ARM_BE8(rev16 ip, ip) tst ip, #0x000f0000 @ check the rotation field orrne ip, ip, r6, lsl #24 @ mask in offset bits 31-24 biceq ip, ip, #0x00004000 @ clear bit 22 - orreq ip, ip, r0 @ mask in offset bits 7-0 + orreq ip, ip, r0, ror #8 @ mask in offset bits 7-0 #else bic ip, ip, #0x000000ff tst ip, #0xf00 @ check the rotation field
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 90/453 x86/apic: Fix x2apic enablement without interrupt remapping
In reply to Greg Kroah-HartmanFrom: David Woodhouse <[email protected]>
[ Upstream commit 26573a97746c7a99f394f9d398ce91a8853b3b89 ]
Currently, Linux as a hypervisor guest will enable x2apic only if there are no CPUs present at boot time with an APIC ID above 255.
Hotplugging a CPU later with a higher APIC ID would result in a CPU which cannot be targeted by external interrupts.
Add a filter in x2apic_apic_id_valid() which can be used to prevent such CPUs from coming online, and allow x2apic to be enabled even if they are present at boot time.
--- arch/x86/include/asm/apic.h | 1 + arch/x86/kernel/apic/apic.c | 14 ++++++++------ arch/x86/kernel/apic/x2apic_phys.c | 9 +++++++++ 3 files changed, 18 insertions(+), 6 deletions(-)
arch/x86/include/asm/apic.h +1 -0
@@ -259,6 +259,7 @@ static inline u64 native_x2apic_icr_read(void)extern int x2apic_mode;extern int x2apic_phys; +extern void __init x2apic_set_max_apicid (u32 apicid);extern void __init check_x2apic (void );extern void x2apic_setup (void );static inline int x2apic_enabled (void )
arch/x86/kernel/apic/apic.c +8 -6
@@ -1886,20 +1886,22 @@ static __init void try_to_enable_x2apic(int remap_mode)return ;if (remap_mode !=IRQ_REMAP_X2APIC_MODE ) { -/* IR is required if there is APIC ID > 255 even when running -* under KVM +/* +* Using X2APIC without IR is not architecturally supported +* on bare metal but may be supported in guests. */ -if (max_physical_apicid >255 || - !x86_init.hyper.x2apic_available ()) { +if (!x86_init.hyper.x2apic_available ()) {pr_info ("x2apic: IRQ remapping doesn't support X2APIC mode\n" );x2apic_disable ();return ; }/* -* without IR all CPUs can be addressed by IOAPIC/MSI -* only in physical mode +* Without IR, all CPUs can be addressed by IOAPIC/MSI only +* in physical mode, and CPUs with an APIC ID that cannnot +* be addressed must not be brought online. */ +x2apic_set_max_apicid (255 ); x2apic_phys =1 ; }x2apic_enable ();
arch/x86/kernel/apic/x2apic_phys.c +9 -0
@@ -8,6 +8,12 @@int x2apic_phys;static struct apic apic_x2apic_phys; +static u32 x2apic_max_apicid__ro_after_init ; + +void __init x2apic_set_max_apicid (u32 apicid) +{ + x2apic_max_apicid = apicid; +}static int __init set_x2apic_phys_mode (char *arg) {
@@ -98,6 +104,9 @@ static int x2apic_phys_probe(void)/* Common x2apic functions, also used by x2apic_cluster */ int x2apic_apic_id_valid (u32 apicid) { +if (x2apic_max_apicid && apicid > x2apic_max_apicid) +return 0 ; +return 1 ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 91/453 sched/deadline: Fix sched_dl_global_validate()
In reply to Greg Kroah-HartmanFrom: Peng Liu <[email protected]>
[ Upstream commit a57415f5d1e43c3a5c5d412cd85e2792d7ed9b11 ]
When change sched_rt_{runtime, period}_us, we validate that the new settings should at least accommodate the currently allocated -dl bandwidth:
sched_rt_handler()
--> sched_dl_bandwidth_validate()
{
new_bw = global_rt_runtime()/global_rt_period();
for_each_possible_cpu(cpu) {
dl_b = dl_bw_of(cpu);
if (new_bw < dl_b->total_bw) <-------
ret = -EBUSY;
}
}But under CONFIG_SMP, dl_bw is per root domain , but not per CPU, dl_b->total_bw is the allocated bandwidth of the whole root domain. Instead, we should compare dl_b->total_bw against "cpus*new_bw", where 'cpus' is the number of CPUs of the root domain.
Also, below annotation(in kernel/sched/sched.h) implied implementation only appeared in SCHED_DEADLINE v2[1], then deadline scheduler kept evolving till got merged(v9), but the annotation remains unchanged, meaningless and misleading, update it.
* With respect to SMP, the bandwidth is given on a per-CPU basis,
* meaning that:
* - dl_bw (< 100%) is the bandwidth of the system (group) on each CPU;
* - dl_total_bw array contains, in the i-eth element, the currently
* allocated bandwidth on the i-eth CPU.
[1]: https://lore.kernel.org/lkml/1267385230.13676.101.camel@Palantir/
--- kernel/sched/deadline.c | 5 +++-- kernel/sched/sched.h | 42 ++++++++++++++++++----------------------- 2 files changed, 21 insertions(+), 26 deletions(-)
kernel/sched/deadline.c +3 -2
@@ -2469,7 +2469,7 @@ int sched_dl_global_validate(void)u64 period =global_rt_period ();u64 new_bw =to_ratio (period, runtime);struct dl_bw *dl_b; -int cpu, ret =0 ; +int cpu, cpus, ret =0 ;unsigned long flags;/*
@@ -2484,9 +2484,10 @@ int sched_dl_global_validate(void)for_each_possible_cpu (cpu) {rcu_read_lock_sched (); dl_b =dl_bw_of (cpu); + cpus =dl_bw_cpus (cpu);raw_spin_lock_irqsave (&dl_b->lock, flags); -if (new_bw < dl_b->total_bw) +if (new_bw * cpus < dl_b->total_bw) ret = -EBUSY ;raw_spin_unlock_irqrestore (&dl_b->lock, flags);
kernel/sched/sched.h +18 -24
54 lines not on this page · raw message
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 92/453 sched: Reenable interrupts in do_sched_yield()
In reply to Greg Kroah-HartmanFrom: Thomas Gleixner <[email protected]>
[ Upstream commit 345a957fcc95630bf5535d7668a59ed983eb49a7 ]
do_sched_yield() invokes schedule() with interrupts disabled which is not allowed. This goes back to the pre git era to commit a6efb709806c ("[PATCH] irqlock patch 2.5.27-H6") in the history tree.
Reenable interrupts and remove the misleading comment which "explains" it.
--- kernel/sched/core.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
kernel/sched/core.c +1 -5
@@ -5679,12 +5679,8 @@ static void do_sched_yield(void)schedstat_inc (rq->yld_count); current->sched_class->yield_task (rq); -/* -* Since we are going to call schedule() anyway, there's -* no need to preempt or enable interrupts: -*/ preempt_disable (); -rq_unlock (rq, &rf); +rq_unlock_irq (rq, &rf);sched_preempt_enable_no_resched ();schedule ();
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 93/453 drm/amdgpu: fix incorrect enum type
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit a110f3750bf8b93764f13bd1402c7cba03d15d61 ]
core_link_write_dpcd() returns enum dc_status, not ddc_result:
display/dc/core/dc_link_dp.c: In function 'dp_set_panel_mode':display/dc/core/dc_link_dp.c:4237:11: warning: implicit conversion from 'enum dc_status' to 'enum ddc_result' [-Wenum-conversion]
Avoid the warning by using the correct enum in the caller.
--- drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +2 -2
@@ -3378,7 +3378,7 @@ void dp_set_panel_mode(struct dc_link *link, enum dp_panel_mode panel_mode)if (edp_config_set.bits.PANEL_MODE_EDP != panel_mode_edp) { -enum ddc_result result =DDC_RESULT_UNKNOWN ; +enum dc_status result =DC_ERROR_UNEXPECTED ; edp_config_set.bits.PANEL_MODE_EDP = panel_mode_edp;
@@ -3388,7 +3388,7 @@ void dp_set_panel_mode(struct dc_link *link, enum dp_panel_mode panel_mode) &edp_config_set.raw, sizeof(edp_config_set.raw)); -ASSERT (result ==DDC_RESULT_SUCESSFULL ); +ASSERT (result ==DC_OK ); } } DC_LOG_DETECTION_DP_CAPS("Link: %d eDP panel mode supported: %d "
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 94/453 crypto: talitos - Endianess in current_desc_hdr()
In reply to Greg Kroah-HartmanFrom: Christophe Leroy <[email protected]>
[ Upstream commit 195404db27f9533c71fdcb78d32a77075c2cb4a2 ]
current_desc_hdr() compares the value of the current descriptor with the next_desc member of the talitos_desc struct.
While the current descriptor is obtained from in_be32() which return CPU ordered bytes, next_desc member is in big endian order.
Convert the current descriptor into big endian before comparing it with next_desc.
This fixes a sparse warning.
--- drivers/crypto/talitos.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/crypto/talitos.c +2 -2
@@ -478,7 +478,7 @@ static u32 current_desc_hdr(struct device *dev, int ch) iter = tail;while (priv->chan[ch].fifo[iter].dma_desc != cur_desc && - priv->chan[ch].fifo[iter].desc->next_desc != cur_desc) { + priv->chan[ch].fifo[iter].desc->next_desc !=cpu_to_be32 (cur_desc)) { iter = (iter +1 ) & (priv->fifo_len -1 );if (iter == tail) {dev_err (dev,"couldn't locate current descriptor\n" );
@@ -486,7 +486,7 @@ static u32 current_desc_hdr(struct device *dev, int ch) } } -if (priv->chan[ch].fifo[iter].desc->next_desc == cur_desc) { +if (priv->chan[ch].fifo[iter].desc->next_desc ==cpu_to_be32 (cur_desc)) {struct talitos_edesc *edesc; edesc = container_of(priv->chan[ch].fifo[iter].desc,
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 95/453 crypto: talitos - Fix return type of current_desc_hdr()
In reply to Greg Kroah-HartmanFrom: Christophe Leroy <[email protected]>
[ Upstream commit 0237616173fd363a54bd272aa3bd376faa1d7caa ]
current_desc_hdr() returns a u32 but in fact this is a __be32, leading to a lot of sparse warnings.
Change the return type to __be32 and ensure it is handled as sure by the caller.
--- drivers/crypto/talitos.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/crypto/talitos.c +3 -3
@@ -460,7 +460,7 @@ DEF_TALITOS2_DONE(ch1_3, TALITOS2_ISR_CH_1_3_DONE)/* * locate current (offending) descriptor */ -static u32 current_desc_hdr (struct device *dev,int ch) +static __be32 current_desc_hdr (struct device *dev,int ch) {struct talitos_private *priv =dev_get_drvdata (dev);int tail, iter;
@@ -501,13 +501,13 @@ static u32 current_desc_hdr(struct device *dev, int ch)/* * user diagnostics; report root cause of error based on execution unit status */ -static void report_eu_error (struct device *dev,int ch,u32 desc_hdr) +static void report_eu_error (struct device *dev,int ch,__be32 desc_hdr) {struct talitos_private *priv =dev_get_drvdata (dev);int i;if (!desc_hdr) - desc_hdr =in_be32 (priv->chan[ch].reg +TALITOS_DESCBUF ); + desc_hdr =cpu_to_be32 (in_be32 (priv->chan[ch].reg +TALITOS_DESCBUF ));switch (desc_hdr &DESC_HDR_SEL0_MASK ) {case DESC_HDR_SEL0_AFEU :
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 96/453 crypto: inside-secure - Fix sizeof() mismatch
In reply to Greg Kroah-HartmanFrom: Colin Ian King <[email protected]>
[ Upstream commit c98e233062cd9d0e2f10e445a671f0799daaef67 ]
An incorrect sizeof() is being used, sizeof(priv->ring[i].rdr_req) is not correct, it should be sizeof(*priv->ring[i].rdr_req). Note that since the size of ** is the same size as * this is not causing any issues.
Addresses-Coverity: ("Sizeof not portable (SIZEOF_MISMATCH)")
--- drivers/crypto/inside-secure/safexcel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/inside-secure/safexcel.c +1 -1
@@ -1467,7 +1467,7 @@ static int safexcel_probe_generic(void *pdev, priv->ring[i].rdr_req =devm_kcalloc (dev,EIP197_DEFAULT_RING_SIZE , -sizeof (priv->ring[i].rdr_req), +sizeof (*priv->ring[i].rdr_req),GFP_KERNEL );if (!priv->ring[i].rdr_req)return -ENOMEM ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 97/453 ASoC: sun4i-i2s: Fix lrck_period computation for I2S justified mode
In reply to Greg Kroah-HartmanFrom: Clément Péron <[email protected]>
[ Upstream commit 93c0210671d8f3ec2262da703fab93a1497158a8 ]
Left and Right justified mode are computed using the same formula as DSP_A and DSP_B mode.
Which is wrong and the user manual explicitly says:
LRCK_PERDIOD:
PCM Mode: Number of BCLKs within (Left + Right) channel width. I2S/Left-Justified/Right-Justified Mode: Number of BCLKs within each individual channel width(Left or Right)
Fix this by using the same formula as the I2S mode.
--- sound/soc/sunxi/sun4i-i2s.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/sunxi/sun4i-i2s.c +2 -2
@@ -442,11 +442,11 @@ static int sun8i_i2s_set_chan_cfg(const struct sun4i_i2s *i2s,switch (i2s->format &SND_SOC_DAIFMT_FORMAT_MASK ) {case SND_SOC_DAIFMT_DSP_A :case SND_SOC_DAIFMT_DSP_B : -case SND_SOC_DAIFMT_LEFT_J : -case SND_SOC_DAIFMT_RIGHT_J : lrck_period =params_physical_width (params) * slots;break ; +case SND_SOC_DAIFMT_LEFT_J : +case SND_SOC_DAIFMT_RIGHT_J :case SND_SOC_DAIFMT_I2S : lrck_period =params_physical_width (params);break ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 98/453 ARM: dts: aspeed: tiogapass: Remove vuart
In reply to Greg Kroah-HartmanFrom: Vijay Khemka <[email protected]>
[ Upstream commit 14f100c00f1e35e5890340d4c6a64bda5dff4320 ]
Removed vuart for facebook tiogapass platform as it uses uart2 and uart3 pin with aspeed uart routing feature.
--- arch/arm/boot/dts/aspeed-bmc-facebook-tiogapass.dts | 5 ----- 1 file changed, 5 deletions(-)
arch/arm/boot/dts/aspeed-bmc-facebook-tiogapass.dts +0 -5
@@ -81,11 +81,6 @@ status = "okay"; }; -&vuart { - // VUART Host Console - status = "okay"; -}; - &uart1 { // Host Console status = "okay";
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 99/453 drm/amdgpu: fix build_coefficients() argument
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit dbb60031dd0c2b85f10ce4c12ae604c28d3aaca4 ]
gcc -Wextra warns about a function taking an enum argument being called with a bool:
drivers/gpu/drm/amd/amdgpu/../display/modules/color/color_gamma.c: In function 'apply_degamma_for_user_regamma':drivers/gpu/drm/amd/amdgpu/../display/modules/color/color_gamma.c:1617:29: warning: implicit conversion from 'enum <anonymous>' to 'enum dc_transfer_func_predefined' [-Wenum-conversion]
1617 | build_coefficients(&coeff, true);
It appears that a patch was added using the old calling conventions after the type was changed, and the value should actually be 0 (TRANSFER_FUNCTION_SRGB) here instead of 1 (true).
--- drivers/gpu/drm/amd/display/modules/color/color_gamma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/display/modules/color/color_gamma.c +1 -1
@@ -1576,7 +1576,7 @@ static void apply_degamma_for_user_regamma(struct pwl_float_data_ex *rgb_regammastruct pwl_float_data_ex *rgb = rgb_regamma;const struct hw_x_point *coord_x = coordinates_x; -build_coefficients (&coeff, true); +build_coefficients (&coeff,TRANSFER_FUNCTION_SRGB ); i =0 ;while (i != hw_points_num +1 ) {
Signature · 1 line
2.27.0
Re: [PATCH 5.4 099/453] drm/amdgpu: fix build_coefficients() argument
Hi!
Quoted 7 lines
From: Arnd Bergmann <[email protected]>
[ Upstream commit
dbb60031dd0c2b85f10ce4c12ae604c28d3aaca4]gcc -Wextra warns about a function taking an enum argument being called with a bool:
Quoted 7 lines
drivers/gpu/drm/amd/amdgpu/../display/modules/color/color_gamma.c: In function 'apply_degamma_for_user_regamma':drivers/gpu/drm/amd/amdgpu/../display/modules/color/color_gamma.c:1617:29: warning: implicit conversion from 'enum <anonymous>' to 'enumdc_transfer_func_predefined' [-Wenum-conversion]
1617 |build_coefficients(&coeff, true);It appears that a patch was added using the old calling conventions after the type was changed, and the value should actually be 0 (
TRANSFER_FUNCTION_SRGB) here instead of 1 (true).
Yeah, but 4.19 still uses bool there, so this actually introduces a bug.
Please drop.
Pavel
Quoted 14 lines
+++
b/drivers/gpu/drm/amd/display/modules/color/color_gamma.cdrivers/gpu/drm/amd/display/modules/color/color_gamma.c +1
-1@@ -1576,7 +1576,7 @@ static void apply_degamma_for_user_regamma(struct pwl_float_data_ex *rgb_regammastruct pwl_float_data_ex *rgb = rgb_regamma;const struct hw_x_point *coord_x = coordinates_x; -build_coefficients (&coeff, true); +build_coefficients (&coeff,TRANSFER_FUNCTION_SRGB ); i =0 ;while (i != hw_points_num +1 ) {Signature · 1 line
2.27.0
Signature · 1 line
http://www.livejournal.com/~pavelmachek
Greg Kroah-Hartman
maintainerRe: [PATCH 5.4 099/453] drm/amdgpu: fix build_coefficients() argument
Quoted 13 lines · Pavel Machek
Hi!
Quoted 11 lines
From: Arnd Bergmann <[email protected]>
[ Upstream commit
dbb60031dd0c2b85f10ce4c12ae604c28d3aaca4]gcc -Wextra warns about a function taking an enum argument being called with a bool:
drivers/gpu/drm/amd/amdgpu/../display/modules/color/color_gamma.c: In function 'apply_degamma_for_user_regamma':drivers/gpu/drm/amd/amdgpu/../display/modules/color/color_gamma.c:1617:29: warning: implicit conversion from 'enum <anonymous>' to 'enumdc_transfer_func_predefined' [-Wenum-conversion]
1617 |build_coefficients(&coeff, true);
Quoted 8 lines
Quoted 3 lines
It appears that a patch was added using the old calling conventions after the type was changed, and the value should actually be 0 (
TRANSFER_FUNCTION_SRGB) here instead of 1 (true).Yeah, but 4.19 still uses bool there, so this actually introduces a bug.
Please drop.
Now dropped, thanks.
greg k-h
Greg Kroah-Hartman
maintainerPATCH 100/453 powerpc/64: Set up a kernel stack for secondaries before cpu_restore()
In reply to Greg Kroah-HartmanFrom: Jordan Niethe <[email protected]>
[ Upstream commit 3c0b976bf20d236c57adcefa80f86a0a1d737727 ]
Currently in generic_secondary_smp_init(), cur_cpu_spec->cpu_restore() is called before a stack has been set up in r1. This was previously fine as the cpu_restore() functions were implemented in assembly and did not use a stack. However commit 5a61ef74f269 ("powerpc/64s: Support new device tree binding for discovering CPU features") used __restore_cpu_cpufeatures() as the cpu_restore() function for a device-tree features based cputable entry. This is a C function and hence uses a stack in r1.
generic_secondary_smp_init() is entered on the secondary cpus via the primary cpu using the OPAL call opal_start_cpu(). In OPAL, each hardware thread has its own stack. The OPAL call is ran in the primary's hardware thread. During the call, a job is scheduled on a secondary cpu that will start executing at the address of generic_secondary_smp_init(). Hence the value that will be left in r1 when the secondary cpu enters the kernel is part of that secondary cpu's individual OPAL stack. This means that __restore_cpu_cpufeatures() will write to that OPAL stack. This is not horribly bad as each hardware thread has its own stack and the call that enters the kernel from OPAL never returns, but it is still wrong and should be corrected.
Create the temp kernel stack before calling cpu_restore().
As noted by mpe, for a kexec boot, the secondary CPUs are released from the spin loop at address 0x60 by smp_release_cpus() and then jump to generic_secondary_smp_init(). The call to smp_release_cpus() is in setup_arch(), and it comes before the call to emergency_stack_init(). emergency_stack_init() allocates an emergency stack in the PACA for each CPU. This address in the PACA is what is used to set up the temp kernel stack in generic_secondary_smp_init(). Move releasing the secondary CPUs to after the PACAs have been allocated an emergency stack, otherwise the PACA stack pointer will contain garbage and hence the temp kernel stack created from it will be broken.
--- arch/powerpc/kernel/head_64.S | 8 ++++---- arch/powerpc/kernel/setup-common.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-)
arch/powerpc/kernel/head_64.S +4 -4
@@ -420,6 +420,10 @@ generic_secondary_common_init: /* From now on, r24 is expected to be logical cpuid */ mr r24,r5 + /* Create a temp kernel stack for use before relocation is on. */ + ld r1,PACAEMERGSP(r13) + subi r1,r1,STACK_FRAME_OVERHEAD + /* See if we need to call a cpu state restore handler */ LOAD_REG_ADDR(r23, cur_cpu_spec) ld r23,0(r23)
@@ -448,10 +452,6 @@ generic_secondary_common_init: sync /* order paca.run and cur_cpu_spec */ isync /* In case code patching happened */ - /* Create a temp kernel stack for use before relocation is on. */ - ld r1,PACAEMERGSP(r13) - subi r1,r1,STACK_FRAME_OVERHEAD - b __secondary_start #endif /* SMP */
arch/powerpc/kernel/setup-common.c +2 -2
@@ -903,8 +903,6 @@ void __init setup_arch(char **cmdline_p)/* On BookE, setup per-core TLB data structures. */ setup_tlb_core_data (); - -smp_release_cpus ();#endif /* Print various info about the machine that has been gathered so far. */
@@ -925,6 +923,8 @@ void __init setup_arch(char **cmdline_p)exc_lvl_early_init ();emergency_stack_init (); +smp_release_cpus (); +initmem_init ();early_memtest (min_low_pfn <<PAGE_SHIFT , max_low_pfn <<PAGE_SHIFT );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 101/453 spi: img-spfi: fix reference leak in img_spfi_resume
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit ee5558a9084584015c8754ffd029ce14a5827fa8 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in img_spfi_resume, so we should fix it.
--- drivers/spi/spi-img-spfi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/spi/spi-img-spfi.c +3 -1
@@ -771,8 +771,10 @@ static int img_spfi_resume(struct device *dev)int ret; ret =pm_runtime_get_sync (dev); -if (ret) +if (ret) { +pm_runtime_put_noidle (dev);return ret; + }spfi_reset (spfi);pm_runtime_put (dev);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 102/453 f2fs: call f2fs_get_meta_page_retry for nat page
In reply to Greg Kroah-HartmanFrom: Jaegeuk Kim <[email protected]>
[ Upstream commit 3acc4522d89e0a326db69e9d0afaad8cf763a54c ]
When running fault injection test, if we don't stop checkpoint, some stale NAT entries were flushed which breaks consistency.
--- fs/f2fs/node.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/f2fs/node.c +1 -1
@@ -109,7 +109,7 @@ static void clear_node_page_dirty(struct page *page)static struct page *get_current_nat_page (struct f2fs_sb_info *sbi,nid_t nid) { -return f2fs_get_meta_page (sbi,current_nat_addr (sbi, nid)); +return f2fs_get_meta_page_retry (sbi,current_nat_addr (sbi, nid)); }static struct page *get_next_nat_page (struct f2fs_sb_info *sbi,nid_t nid)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 103/453 drm/msm/dsi_pll_10nm: restore VCO rate during restore_state
In reply to Greg Kroah-HartmanFrom: Dmitry Baryshkov <[email protected]>
[ Upstream commit a4ccc37693a271330a46208afbeaed939d54fdbb ]
PHY disable/enable resets PLL registers to default values. Thus in addition to restoring several registers we also need to restore VCO rate settings.
--- drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c +8 -0
@@ -559,6 +559,7 @@ static int dsi_pll_10nm_restore_state(struct msm_dsi_pll *pll)struct pll_10nm_cached_state *cached = &pll_10nm->cached_state;void __iomem *phy_base = pll_10nm->phy_cmn_mmio;u32 val; +int ret; val =pll_read (pll_10nm->mmio + REG_DSI_10nm_PHY_PLL_PLL_OUTDIV_RATE); val &= ~0x3 ;
@@ -573,6 +574,13 @@ static int dsi_pll_10nm_restore_state(struct msm_dsi_pll *pll) val |= cached->pll_mux;pll_write (phy_base + REG_DSI_10nm_PHY_CMN_CLK_CFG1, val); + ret =dsi_pll_10nm_vco_set_rate (&pll->clk_hw, pll_10nm->vco_current_rate, pll_10nm->vco_ref_clk_rate); +if (ret) { +DRM_DEV_ERROR (&pll_10nm->pdev->dev, +"restore vco rate failed. ret=%d\n" , ret); +return ret; + } +DBG ("DSI PLL%d" , pll_10nm->id);return 0 ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 104/453 spi: spi-mem: fix reference leak in spi_mem_access_start
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit c02bb16b0e826bf0e19aa42c3ae60ea339f32cf5 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in spi_mem_access_start, so we should fix it.
--- drivers/spi/spi-mem.c | 1 + 1 file changed, 1 insertion(+)
drivers/spi/spi-mem.c +1 -0
@@ -237,6 +237,7 @@ static int spi_mem_access_start(struct spi_mem *mem) ret =pm_runtime_get_sync (ctlr->dev.parent);if (ret <0 ) { +pm_runtime_put_noidle (ctlr->dev.parent);dev_err (&ctlr->dev,"Failed to power device: %d\n" , ret);return ret;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 105/453 ASoC: pcm: DRAIN support reactivation
In reply to Greg Kroah-HartmanFrom: Cezary Rojewski <[email protected]>
[ Upstream commit 4c22b80f61540ea99d9b4af0127315338755f05b ]
soc-pcm's dpcm_fe_dai_do_trigger() supported DRAIN commnad up to kernel v5.4 where explicit switch(cmd) has been introduced which takes into account all SNDRV_PCM_TRIGGER_xxx but SNDRV_PCM_TRIGGER_DRAIN. Update switch statement to reactive support for it.
As DRAIN is somewhat unique by lacking negative/stop counterpart, bring behaviour of dpcm_fe_dai_do_trigger() for said command back to its pre-v5.4 state by adding it to START/RESUME/PAUSE_RELEASE group.
--- sound/soc/soc-pcm.c | 2 ++ 1 file changed, 2 insertions(+)
sound/soc/soc-pcm.c +2 -0
@@ -2346,6 +2346,7 @@ static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd)case SNDRV_PCM_TRIGGER_START :case SNDRV_PCM_TRIGGER_RESUME :case SNDRV_PCM_TRIGGER_PAUSE_RELEASE : +case SNDRV_PCM_TRIGGER_DRAIN : ret =dpcm_dai_trigger_fe_be (substream, cmd, true);break ;case SNDRV_PCM_TRIGGER_STOP :
@@ -2363,6 +2364,7 @@ static int dpcm_fe_dai_do_trigger(struct snd_pcm_substream *substream, int cmd)case SNDRV_PCM_TRIGGER_START :case SNDRV_PCM_TRIGGER_RESUME :case SNDRV_PCM_TRIGGER_PAUSE_RELEASE : +case SNDRV_PCM_TRIGGER_DRAIN : ret =dpcm_dai_trigger_fe_be (substream, cmd, false);break ;case SNDRV_PCM_TRIGGER_STOP :
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 106/453 libbpf: Fix BTF data layout checks and allow empty BTF
In reply to Greg Kroah-HartmanFrom: Andrii Nakryiko <[email protected]>
[ Upstream commit d8123624506cd62730c9cd9c7672c698e462703d ]
Make data section layout checks stricter, disallowing overlap of types and strings data.
Additionally, allow BTFs with no type data. There is nothing inherently wrong with having BTF with no types (put potentially with some strings). This could be a situation with kernel module BTFs, if module doesn't introduce any new type information.
Also fix invalid offset alignment check for btf->hdr->type_off.
--- tools/lib/bpf/btf.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)
tools/lib/bpf/btf.c +6 -10
@@ -100,22 +100,18 @@ static int btf_parse_hdr(struct btf *btf)return -EINVAL ; } -if (meta_left < hdr->type_off) { -pr_debug ("Invalid BTF type section offset:%u\n" , hdr->type_off); +if (meta_left < hdr->str_off + hdr->str_len) { +pr_debug ("Invalid BTF total size:%u\n" , btf->raw_size);return -EINVAL ; } -if (meta_left < hdr->str_off) { -pr_debug ("Invalid BTF string section offset:%u\n" , hdr->str_off); +if (hdr->type_off + hdr->type_len > hdr->str_off) { +pr_debug ("Invalid BTF data sections layout: type data at %u + %u, strings data at %u + %u\n" , + hdr->type_off, hdr->type_len, hdr->str_off, hdr->str_len);return -EINVAL ; } -if (hdr->type_off >= hdr->str_off) { -pr_debug ("BTF type section offset >= string section offset. No type?\n" ); -return -EINVAL ; - } - -if (hdr->type_off &0x02 ) { +if (hdr->type_off %4 ) {pr_debug ("BTF type section is not aligned to 4 bytes\n" );return -EINVAL ; }
Signature · 1 line
2.27.0
Re: [PATCH 5.4 106/453] libbpf: Fix BTF data layout checks and allow empty BTF
Perf build failed on stable-rc 5.4 branch due to this patch.
Quoted 29 lines · Greg Kroah-Hartman
From: Andrii Nakryiko <[email protected]>
[ Upstream commit
d8123624506cd62730c9cd9c7672c698e462703d]Make data section layout checks stricter, disallowing overlap of types and strings data.
Additionally, allow BTFs with no type data. There is nothing inherently wrong with having BTF with no types (put potentially with some strings). This could be a situation with kernel module BTFs, if module doesn't introduce any new type information.
Also fix invalid offset alignment check for
btf->hdr->type_off.Fixes 8a138aed4a80 ("bpf: btf: Add BTF support to libbpf")Signed-off-by Andrii Nakryiko <[email protected]>Signed-off-by Alexei Starovoitov <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- tools/lib/bpf/btf.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)tools/lib/bpf/btf.c +0
-0
tools/lib/bpf/btf.c static int btf_parse_hdr(struct btf *btf) · line 104
Quoted 7 lines
tools/lib/bpf/btf.c +2
-2@@ -100,22 +100,18 @@ static int btf_parse_hdr(struct btf *btf)return -EINVAL ; } -if (meta_left < hdr->type_off) { -pr_debug ("Invalid BTF type section offset:%u\n" , hdr->type_off); +if (meta_left < hdr->str_off + hdr->str_len) { +pr_debug ("Invalid BTF total size:%u\n" , btf->raw_size);
In file included from btf.c:17:0:btf.c: In function 'btf_parse_hdr':
btf.c:104:48: error: 'struct btf' has no member named 'raw_size'; did you mean 'data_size'?
pr_debug("Invalid BTF total size:%u\n", btf->raw_size);
^
libbpf_internal.h:59:40: note: in definition of macro '__pr'
libbpf_print(level, "libbpf: " fmt, ##__VA_ARGS__); \
^~~~~~~~~~~btf.c:104:3: note: in expansion of macro 'pr_debug'
pr_debug("Invalid BTF total size:%u\n", btf->raw_size); ^~~~~~~~
full build log link,
https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.4/DISTRO=lkft,MACHINE=intel-corei7-64,label=docker-buster-lkft/346/consoleText
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Re: [PATCH 5.4 106/453] libbpf: Fix BTF data layout checks and allow empty BTF
Quoted 46 lines · Naresh Kamboju
Perf build failed on stable-rc 5.4 branch due to this patch.
Quoted 29 lines · Greg Kroah-Hartman
From: Andrii Nakryiko <[email protected]>
[ Upstream commit
d8123624506cd62730c9cd9c7672c698e462703d]Make data section layout checks stricter, disallowing overlap of types and strings data.
Additionally, allow BTFs with no type data. There is nothing inherently wrong with having BTF with no types (put potentially with some strings). This could be a situation with kernel module BTFs, if module doesn't introduce any new type information.
Also fix invalid offset alignment check for
btf->hdr->type_off.Fixes 8a138aed4a80 ("bpf: btf: Add BTF support to libbpf")Signed-off-by Andrii Nakryiko <[email protected]>Signed-off-by Alexei Starovoitov <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- tools/lib/bpf/btf.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)tools/lib/bpf/btf.c +0
-0tools/lib/bpf/btf.c static int btf_parse_hdr(struct btf *btf) · line 104
Quoted 7 lines
tools/lib/bpf/btf.c +2
-2@@ -100,22 +100,18 @@ static int btf_parse_hdr(struct btf *btf)return -EINVAL ; } -if (meta_left < hdr->type_off) { -pr_debug ("Invalid BTF type section offset:%u\n" , hdr->type_off); +if (meta_left < hdr->str_off + hdr->str_len) { +pr_debug ("Invalid BTF total size:%u\n" , btf->raw_size);In file included from btf.c:17:0:
btf.c: In function 'btf_parse_hdr':
btf.c:104:48: error: 'struct btf' has no member named 'raw_size'; did you mean 'data_size'?
Quoted 9 lines
pr_debug("Invalid BTF total size:%u\n", btf->raw_size);
^
libbpf_internal.h:59:40: note: in definition of macro '__pr'
libbpf_print(level, "libbpf: " fmt, ##__VA_ARGS__); \
^~~~~~~~~~~
btf.c:104:3: note: in expansion of macro 'pr_debug'
pr_debug("Invalid BTF total size:%u\n", btf->raw_size);
^~~~~~~~This patch fixes the bug introduced back in 8a138aed4a80 ("bpf: btf:
Add BTF support to libbpf"), but a bunch of other refactorings happened since then, adding/renaming struct btf internals. The fix here is not that critical, so it's probably best to just drop this patch from the stable, if possible. Would it be ok, Greg?
Quoted 6 lines
full build log link,
https://ci.linaro.org/view/lkft/job/openembedded-lkft-linux-stable-rc-5.4/DISTRO=lkft,MACHINE=intel-corei7-64,label=docker-buster-lkft/346/consoleText--
Linaro LKFT
https://lkft.linaro.org
Sasha Levin
maintainerRe: [PATCH 5.4 106/453] libbpf: Fix BTF data layout checks and allow empty BTF
Quoted 58 lines · Andrii Nakryiko
Quoted 46 lines · Naresh Kamboju
Perf build failed on stable-rc 5.4 branch due to this patch.
Quoted 29 lines · Greg Kroah-Hartman
From: Andrii Nakryiko <[email protected]>
[ Upstream commit
d8123624506cd62730c9cd9c7672c698e462703d]Make data section layout checks stricter, disallowing overlap of types and strings data.
Additionally, allow BTFs with no type data. There is nothing inherently wrong with having BTF with no types (put potentially with some strings). This could be a situation with kernel module BTFs, if module doesn't introduce any new type information.
Also fix invalid offset alignment check for
btf->hdr->type_off.Fixes 8a138aed4a80 ("bpf: btf: Add BTF support to libbpf")Signed-off-by Andrii Nakryiko <[email protected]>Signed-off-by Alexei Starovoitov <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- tools/lib/bpf/btf.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)tools/lib/bpf/btf.c +0
-0tools/lib/bpf/btf.c static int btf_parse_hdr(struct btf *btf) · line 104
Quoted 7 lines
tools/lib/bpf/btf.c +2
-2@@ -100,22 +100,18 @@ static int btf_parse_hdr(struct btf *btf)return -EINVAL ; } -if (meta_left < hdr->type_off) { -pr_debug ("Invalid BTF type section offset:%u\n" , hdr->type_off); +if (meta_left < hdr->str_off + hdr->str_len) { +pr_debug ("Invalid BTF total size:%u\n" , btf->raw_size);In file included from btf.c:17:0:
btf.c: In function 'btf_parse_hdr':
btf.c:104:48: error: 'struct btf' has no member named 'raw_size'; did you mean 'data_size'?Quoted 9 lines
pr_debug("Invalid BTF total size:%u\n", btf->raw_size); ^ libbpf_internal.h:59:40: note: in definition of macro '__pr' libbpf_print(level, "libbpf: " fmt, ##__VA_ARGS__); \ ^~~~~~~~~~~ btf.c:104:3: note: in expansion of macro 'pr_debug' pr_debug("Invalid BTF total size:%u\n", btf->raw_size); ^~~~~~~~
Quoted 5 lines
This patch fixes the bug introduced back in
8a138aed4a80("bpf: btf:
Add BTF support to libbpf"), but a bunch of other refactorings happened since then, adding/renaming struct btf internals. The fix here is not that critical, so it's probably best to just drop this patch from the stable, if possible. Would it be ok, Greg?
I'll drop it, thanks.
Signature · 2 lines
Thanks, Sasha
Greg Kroah-Hartman
maintainerRe: [PATCH 5.4 106/453] libbpf: Fix BTF data layout checks and allow empty BTF
Quoted 59 lines · Sasha Levin
Quoted 58 lines · Andrii Nakryiko
Quoted 55 lines · Naresh Kamboju
Perf build failed on stable-rc 5.4 branch due to this patch.
Quoted 29 lines · Greg Kroah-Hartman
From: Andrii Nakryiko <[email protected]>
[ Upstream commit
d8123624506cd62730c9cd9c7672c698e462703d]Make data section layout checks stricter, disallowing overlap of types and strings data.
Additionally, allow BTFs with no type data. There is nothing inherently wrong with having BTF with no types (put potentially with some strings). This could be a situation with kernel module BTFs, if module doesn't introduce any new type information.
Also fix invalid offset alignment check for
btf->hdr->type_off.Fixes 8a138aed4a80 ("bpf: btf: Add BTF support to libbpf")Signed-off-by Andrii Nakryiko <[email protected]>Signed-off-by Alexei Starovoitov <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- tools/lib/bpf/btf.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)tools/lib/bpf/btf.c +0
-0tools/lib/bpf/btf.c static int btf_parse_hdr(struct btf *btf) · line 104
Quoted 7 lines
tools/lib/bpf/btf.c +2
-2@@ -100,22 +100,18 @@ static int btf_parse_hdr(struct btf *btf)return -EINVAL ; } -if (meta_left < hdr->type_off) { -pr_debug ("Invalid BTF type section offset:%u\n" , hdr->type_off); +if (meta_left < hdr->str_off + hdr->str_len) { +pr_debug ("Invalid BTF total size:%u\n" , btf->raw_size);In file included from btf.c:17:0:
btf.c: In function 'btf_parse_hdr':
btf.c:104:48: error: 'struct btf' has no member named 'raw_size'; did you mean 'data_size'?pr_debug("Invalid BTF total size:%u\n", btf->raw_size); ^ libbpf_internal.h:59:40: note: in definition of macro '__pr' libbpf_print(level, "libbpf: " fmt, ##__VA_ARGS__); \ ^~~~~~~~~~~ btf.c:104:3: note: in expansion of macro 'pr_debug' pr_debug("Invalid BTF total size:%u\n", btf->raw_size); ^~~~~~~~
Quoted 7 lines
Quoted 5 lines
This patch fixes the bug introduced back in
8a138aed4a80("bpf: btf:
Add BTF support to libbpf"), but a bunch of other refactorings happened since then, adding/renaming struct btf internals. The fix here is not that critical, so it's probably best to just drop this patch from the stable, if possible. Would it be ok, Greg?I'll drop it, thanks.
Thanks for dropping this and doing the other fixups. I'll go push out some -rc2 releases soon...
greg k-h
Greg Kroah-Hartman
maintainerPATCH 107/453 selinux: fix inode_doinit_with_dentry() LABEL_INVALID error handling
In reply to Greg Kroah-HartmanFrom: Paul Moore <[email protected]>
[ Upstream commit 200ea5a2292dc444a818b096ae6a32ba3caa51b9 ]
A previous fix, commit 83370b31a915 ("selinux: fix error initialization in inode_doinit_with_dentry()"), changed how failures were handled before a SELinux policy was loaded. Unfortunately that patch was potentially problematic for two reasons: it set the isec->initialized state without holding a lock, and it didn't set the inode's SELinux label to the "default" for the particular filesystem. The later can be a problem if/when a later attempt to revalidate the inode fails and SELinux reverts to the existing inode label.
This patch should restore the default inode labeling that existed before the original fix, without affecting the LABEL_INVALID marking such that revalidation will still be attempted in the future.
--- security/selinux/hooks.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-)
security/selinux/hooks.c +13 -18
@@ -1499,13 +1499,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent* inode_doinit with a dentry, before these inodes could * be used again by userspace. */ - isec->initialized =LABEL_INVALID ; -/* -* There is nothing useful to jump to the "out" -* label, except a needless spin lock/unlock -* cycle. -*/ -return 0 ; + goto out_invalid; } rc = inode_doinit_use_xattr(inode, dentry, sbsec->def_sid,
@@ -1559,15 +1553,8 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent* inode_doinit() with a dentry, before these inodes * could be used again by userspace. */ -if (!dentry) { - isec->initialized =LABEL_INVALID ; -/* -* There is nothing useful to jump to the "out" -* label, except a needless spin lock/unlock -* cycle. -*/ -return 0 ; - } +if (!dentry) + goto out_invalid; rc =selinux_genfs_get_sid (dentry, sclass, sbsec->flags, &sid);if (rc) {
@@ -1592,11 +1579,10 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent out:spin_lock (&isec->lock);if (isec->initialized ==LABEL_PENDING ) { -if (!sid || rc) { +if (rc) { isec->initialized =LABEL_INVALID ; goto out_unlock; } - isec->initialized =LABEL_INITIALIZED ; isec->sid = sid; }
@@ -1604,6 +1590,15 @@ out: out_unlock:spin_unlock (&isec->lock);return rc; + +out_invalid: +spin_lock (&isec->lock); +if (isec->initialized ==LABEL_PENDING ) { + isec->initialized =LABEL_INVALID ; + isec->sid = sid; + } +spin_unlock (&isec->lock); +return 0 ; }/* Convert a Linux signal to an access vector. */
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 108/453 spi: stm32: fix reference leak in stm32_spi_resume
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 900ccdcb79bb61471df1566a70b2b39687a628d5 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in stm32_spi_resume, so we should fix it.
--- drivers/spi/spi-stm32.c | 1 + 1 file changed, 1 insertion(+)
drivers/spi/spi-stm32.c +1 -0
@@ -2055,6 +2055,7 @@ static int stm32_spi_resume(struct device *dev) ret =pm_runtime_get_sync (dev);if (ret <0 ) { +pm_runtime_put_noidle (dev);dev_err (dev,"Unable to power device:%d\n" , ret);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 109/453 brcmfmac: Fix memory leak for unpaired brcmf_{alloc/free}
In reply to Greg Kroah-HartmanFrom: Seung-Woo Kim <[email protected]>
[ Upstream commit 9db946284e07bb27309dd546b7fee528664ba82a ]
There are missig brcmf_free() for brcmf_alloc(). Fix memory leak by adding missed brcmf_free().
--- drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 6 ++++-- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 1 + 2 files changed, 5 insertions(+), 2 deletions(-)
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +4 -2
@@ -1936,16 +1936,18 @@ brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) fwreq =brcmf_pcie_prepare_fw_request (devinfo);if (!fwreq) { ret = -ENOMEM ; - goto fail_bus; + goto fail_brcmf; } ret =brcmf_fw_get_firmwares (bus->dev, fwreq, brcmf_pcie_setup);if (ret <0 ) {kfree (fwreq); - goto fail_bus; + goto fail_brcmf; }return 0 ; +fail_brcmf: +brcmf_free (&devinfo->pdev->dev); fail_bus:kfree (bus->msgbuf);kfree (bus);
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +1 -0
@@ -4433,6 +4433,7 @@ void brcmf_sdio_remove(struct brcmf_sdio *bus)brcmf_sdiod_intr_unregister (bus->sdiodev);brcmf_detach (bus->sdiodev->dev); +brcmf_free (bus->sdiodev->dev);cancel_work_sync (&bus->datawork);if (bus->brcmf_wq)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 110/453 arm64: dts: exynos: Include common syscon restart/poweroff for Exynos7
In reply to Greg Kroah-HartmanFrom: Paweł Chmiel <[email protected]>
[ Upstream commit 73bc7510ea0dafb4ff1ae6808759627a8ec51f5a ]
Exynos7 uses the same syscon reboot and poweroff nodes as other Exynos SoCs, so instead of duplicating code we can just include common dtsi file, which already contains definitions of them. After this change, poweroff node will be also available, previously this dts file did contain only reboot node.
--- arch/arm64/boot/dts/exynos/exynos7.dtsi | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
arch/arm64/boot/dts/exynos/exynos7.dtsi +1 -7
@@ -494,13 +494,6 @@ pmu_system_controller: system-controller@105c0000 { compatible = "samsung,exynos7-pmu", "syscon"; reg = <0x105c0000 0x5000>; - - reboot: syscon-reboot { - compatible = "syscon-reboot"; - regmap = <&pmu_system_controller>; - offset = <0x0400>; - mask = <0x1>; - }; }; rtc: rtc@10590000 {
@@ -650,3 +643,4 @@ }; #include "exynos7-pinctrl.dtsi" +#include "arm/exynos-syscon-restart.dtsi"
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 111/453 arm64: dts: exynos: Correct psci compatible used on Exynos7
In reply to Greg Kroah-HartmanFrom: Paweł Chmiel <[email protected]>
[ Upstream commit e1e47fbca668507a81bb388fcae044b89d112ecc ]
It's not possible to reboot or poweroff Exynos7420 using PSCI. Instead we need to use syscon reboot/poweroff drivers, like it's done for other Exynos SoCs. This was confirmed by checking vendor source and testing it on Samsung Galaxy S6 device based on this SoC.
To be able to use custom restart/poweroff handlers instead of PSCI functions, we need to correct psci compatible. This also requires us to provide function ids for CPU_ON and CPU_OFF.
--- arch/arm64/boot/dts/exynos/exynos7.dtsi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/arm64/boot/dts/exynos/exynos7.dtsi +3 -1
@@ -90,8 +90,10 @@ }; psci { - compatible = "arm,psci-0.2"; + compatible = "arm,psci"; method = "smc"; + cpu_off = <0x84000002>; + cpu_on = <0xC4000003>; }; soc: soc {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 112/453 Bluetooth: Fix null pointer dereference in hci_event_packet()
In reply to Greg Kroah-HartmanFrom: Anmol Karn <[email protected]>
[ Upstream commit 6dfccd13db2ff2b709ef60a50163925d477549aa ]
AMP_MGR is getting derefernced in hci_phy_link_complete_evt(), when called from hci_event_packet() and there is a possibility, that hcon->amp_mgr may not be found when accessing after initialization of hcon.
- net/bluetooth/hci_event.c:4945
The bug seems to get triggered in this line:
bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
Fix it by adding a NULL check for the hcon->amp_mgr before checking the ev-status.
--- net/bluetooth/hci_event.c | 5 +++++ 1 file changed, 5 insertions(+)
net/bluetooth/hci_event.c +5 -0
@@ -4791,6 +4791,11 @@ static void hci_phy_link_complete_evt(struct hci_dev *hdev,return ; } +if (!hcon->amp_mgr) { +hci_dev_unlock (hdev); +return ; + } +if (ev->status) {hci_conn_del (hcon);hci_dev_unlock (hdev);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 113/453 Bluetooth: hci_h5: fix memory leak in h5_close
In reply to Greg Kroah-HartmanFrom: Anant Thazhemadam <[email protected]>
[ Upstream commit 855af2d74c870d747bf53509f8b2d7b9dc9ee2c3 ]
When h5_close() is called, h5 is directly freed when !hu->serdev. However, h5->rx_skb is not freed, which causes a memory leak.
Freeing h5->rx_skb and setting it to NULL, fixes this memory leak.
--- drivers/bluetooth/hci_h5.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/bluetooth/hci_h5.c +3 -0
@@ -244,6 +244,9 @@ static int h5_close(struct hci_uart *hu)skb_queue_purge (&h5->rel);skb_queue_purge (&h5->unrel); +kfree_skb (h5->rx_skb); + h5->rx_skb =NULL ; +if (h5->vnd && h5->vnd->close) h5->vnd->close (h5);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 114/453 spi: spi-ti-qspi: fix reference leak in ti_qspi_setup
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 45c0cba753641e5d7c3207f04241bd0e7a021698 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in ti_qspi_setup, so we should fix it.
--- drivers/spi/spi-ti-qspi.c | 1 + 1 file changed, 1 insertion(+)
drivers/spi/spi-ti-qspi.c +1 -0
@@ -176,6 +176,7 @@ static int ti_qspi_setup(struct spi_device *spi) ret =pm_runtime_get_sync (qspi->dev);if (ret <0 ) { +pm_runtime_put_noidle (qspi->dev);dev_err (qspi->dev,"pm_runtime_get_sync() failed\n" );return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 115/453 spi: mt7621: fix missing clk_disable_unprepare() on error in mt7621_spi_probe
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit 702b15cb97123cedcec56a39d9a21c5288eb9ae1 ]
Fix the missing clk_disable_unprepare() before return from mt7621_spi_probe in the error handling case.
--- drivers/spi/spi-mt7621.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/spi/spi-mt7621.c +2 -0
@@ -353,6 +353,7 @@ static int mt7621_spi_probe(struct platform_device *pdev) master =spi_alloc_master (&pdev->dev,sizeof (*rs));if (!master) {dev_info (&pdev->dev,"master allocation failed\n" ); +clk_disable_unprepare (clk);return -ENOMEM ; }
@@ -377,6 +378,7 @@ static int mt7621_spi_probe(struct platform_device *pdev) ret =device_reset (&pdev->dev);if (ret) {dev_err (&pdev->dev,"SPI reset failed!\n" ); +clk_disable_unprepare (clk);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 116/453 spi: tegra20-slink: fix reference leak in slink ops of tegra20
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 763eab7074f6e71babd85d796156f05a675f9510 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in two callers(tegra_slink_setup and tegra_slink_resume), so we should fix it.
--- drivers/spi/spi-tegra20-slink.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/spi/spi-tegra20-slink.c +2 -0
@@ -756,6 +756,7 @@ static int tegra_slink_setup(struct spi_device *spi) ret =pm_runtime_get_sync (tspi->dev);if (ret <0 ) { +pm_runtime_put_noidle (tspi->dev);dev_err (tspi->dev,"pm runtime failed, e = %d\n" , ret);return ret; }
@@ -1192,6 +1193,7 @@ static int tegra_slink_resume(struct device *dev) ret =pm_runtime_get_sync (dev);if (ret <0 ) { +pm_runtime_put_noidle (dev);dev_err (dev,"pm runtime failed, e = %d\n" , ret);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 117/453 spi: tegra20-sflash: fix reference leak in tegra_sflash_resume
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 3482e797ab688da6703fe18d8bad52f94199f4f2 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in tegra_sflash_resume, so we should fix it.
--- drivers/spi/spi-tegra20-sflash.c | 1 + 1 file changed, 1 insertion(+)
drivers/spi/spi-tegra20-sflash.c +1 -0
@@ -551,6 +551,7 @@ static int tegra_sflash_resume(struct device *dev) ret =pm_runtime_get_sync (dev);if (ret <0 ) { +pm_runtime_put_noidle (dev);dev_err (dev,"pm runtime failed, e = %d\n" , ret);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 118/453 spi: tegra114: fix reference leak in tegra spi ops
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit a042184c7fb99961ea083d4ec192614bec671969 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in two callers(tegra_spi_setup and tegra_spi_resume), so we should fix it.
--- drivers/spi/spi-tegra114.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/spi/spi-tegra114.c +2 -0
@@ -954,6 +954,7 @@ static int tegra_spi_setup(struct spi_device *spi) ret =pm_runtime_get_sync (tspi->dev);if (ret <0 ) { +pm_runtime_put_noidle (tspi->dev);dev_err (tspi->dev,"pm runtime failed, e = %d\n" , ret);if (cdata)tegra_spi_cleanup (spi);
@@ -1472,6 +1473,7 @@ static int tegra_spi_resume(struct device *dev) ret =pm_runtime_get_sync (dev);if (ret <0 ) { +pm_runtime_put_noidle (dev);dev_err (dev,"pm runtime failed, e = %d\n" , ret);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 119/453 spi: bcm63xx-hsspi: fix missing clk_disable_unprepare() on error in bcm63xx_hsspi_resume
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit 9bb9ef2b3e5d9d012876e7e2d7757eb30e865bee ]
Fix the missing clk_disable_unprepare() before return from bcm63xx_hsspi_resume in the error handling case when fails to prepare and enable bs->pll_clk.
--- drivers/spi/spi-bcm63xx-hsspi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/spi/spi-bcm63xx-hsspi.c +3 -1
@@ -483,8 +483,10 @@ static int bcm63xx_hsspi_resume(struct device *dev)if (bs->pll_clk) { ret =clk_prepare_enable (bs->pll_clk); -if (ret) +if (ret) { +clk_disable_unprepare (bs->clk);return ret; + } }spi_master_resume (master);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 120/453 mwifiex: fix mwifiex_shutdown_sw() causing sw reset failure
In reply to Greg Kroah-HartmanFrom: Tsuchiya Yuto <[email protected]>
[ Upstream commit fa74cb1dc0f4da46c441b735ca865ac52de42c0e ]
When a PCIe function level reset (FLR) is performed but without fw reset for some reasons (e.g., on Microsoft Surface devices, fw reset requires other quirks), it fails to reset wifi properly. You can trigger the issue on such devices via debugfs entry for reset:
$ echo 1 | sudo tee /sys/kernel/debug/mwifiex/mlan0/reset
and the resulting dmesg log:
[ 45.740508] mwifiex_pcie 0000:03:00.0: Resetting per request
[ 45.742937] mwifiex_pcie 0000:03:00.0: info: successfully disconnected from [BSSID]: reason code 3
[ 45.744666] mwifiex_pcie 0000:03:00.0: info: shutdown mwifiex...
[ 45.751530] mwifiex_pcie 0000:03:00.0: PREP_CMD: card is removed
[ 45.751539] mwifiex_pcie 0000:03:00.0: PREP_CMD: card is removed
[ 45.771691] mwifiex_pcie 0000:03:00.0: PREP_CMD: card is removed
[ 45.771695] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[ 45.771697] mwifiex_pcie 0000:03:00.0: PREP_CMD: card is removed
[ 45.771698] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[ 45.771699] mwifiex_pcie 0000:03:00.0: PREP_CMD: card is removed
[ 45.771701] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[ 45.771702] mwifiex_pcie 0000:03:00.0: PREP_CMD: card is removed
[ 45.771703] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[ 45.771704] mwifiex_pcie 0000:03:00.0: PREP_CMD: card is removed
[ 45.771705] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[ 45.771707] mwifiex_pcie 0000:03:00.0: PREP_CMD: card is removed
[ 45.771708] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[ 53.099343] mwifiex_pcie 0000:03:00.0: info: trying to associate to '[SSID]' bssid [BSSID]
[ 53.241870] mwifiex_pcie 0000:03:00.0: info: associated to bssid [BSSID] successfully
[ 75.377942] mwifiex_pcie 0000:03:00.0: cmd_wait_q terminated: -110
[ 85.385491] mwifiex_pcie 0000:03:00.0: info: successfully disconnected from [BSSID]: reason code 15
[ 87.539408] mwifiex_pcie 0000:03:00.0: cmd_wait_q terminated: -110
[ 87.539412] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[ 99.699917] mwifiex_pcie 0000:03:00.0: cmd_wait_q terminated: -110
[ 99.699925] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[ 111.859802] mwifiex_pcie 0000:03:00.0: cmd_wait_q terminated: -110
[ 111.859808] mwifiex_pcie 0000:03:00.0: deleting the crypto keys
[...]When comparing mwifiex_shutdown_sw() with mwifiex_pcie_remove(), it lacks mwifiex_init_shutdown_fw().
This commit fixes mwifiex_shutdown_sw() by adding the missing mwifiex_init_shutdown_fw().
--- drivers/net/wireless/marvell/mwifiex/main.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/marvell/mwifiex/main.c +2 -0
@@ -1469,6 +1469,8 @@ int mwifiex_shutdown_sw(struct mwifiex_adapter *adapter) priv =mwifiex_get_priv (adapter,MWIFIEX_BSS_ROLE_ANY );mwifiex_deauthenticate (priv,NULL ); +mwifiex_init_shutdown_fw (priv,MWIFIEX_FUNC_SHUTDOWN ); +mwifiex_uninit_sw (adapter); adapter->is_up = false;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 121/453 selftest/bpf: Add missed ip6ip6 test back
In reply to Greg Kroah-HartmanFrom: Hangbin Liu <[email protected]>
[ Upstream commit 58cfa49c2ba7f815adccc27a775e7cf8a8f7f539 ]
In comment 173ca26e9b51 ("samples/bpf: add comprehensive ipip, ipip6, ip6ip6 test") we added ip6ip6 test for bpf tunnel testing. But in commit 933a741e3b82 ("selftests/bpf: bpf tunnel test.") when we moved it to the current folder, we didn't add it.
This patch add the ip6ip6 test back to bpf tunnel test. Update the ipip6's topology for both IPv4 and IPv6 testing. Since iperf test is removed as currect framework simplified it in purpose, I also removed unused tcp checkings in test_tunnel_kern.c.
--- .../selftests/bpf/progs/test_tunnel_kern.c | 42 +++--------------- tools/testing/selftests/bpf/test_tunnel.sh | 43 +++++++++++++++++-- 2 files changed, 46 insertions(+), 39 deletions(-)
tools/testing/selftests/bpf/progs/test_tunnel_kern.c +7 -35
@@ -15,7 +15,6 @@#include <linux/ip.h> #include <linux/ipv6.h> #include <linux/types.h> -#include <linux/tcp.h> #include <linux/socket.h> #include <linux/pkt_cls.h> #include <linux/erspan.h>
@@ -528,12 +527,11 @@ int _ipip_set_tunnel(struct __sk_buff *skb)struct bpf_tunnel_key key = {};void *data = (void *)(long )skb->data;struct iphdr *iph = data; -struct tcphdr *tcp = data +sizeof (*iph);void *data_end = (void *)(long )skb->data_end;int ret;/* single length check */ -if (data +sizeof (*iph) +sizeof (*tcp) > data_end) { +if (data +sizeof (*iph) > data_end) {ERROR (1 );return TC_ACT_SHOT ; }
@@ -541,16 +539,6 @@ int _ipip_set_tunnel(struct __sk_buff *skb) key.tunnel_ttl =64 ;if (iph->protocol ==IPPROTO_ICMP ) { key.remote_ipv4 =0xac100164 ;/* 172.16.1.100 */ - }else { -if (iph->protocol !=IPPROTO_TCP || iph->ihl !=5 ) -return TC_ACT_SHOT ; - -if (tcp->dest ==bpf_htons (5200 )) - key.remote_ipv4 =0xac100164 ;/* 172.16.1.100 */ -else if (tcp->dest ==bpf_htons (5201 )) - key.remote_ipv4 =0xac100165 ;/* 172.16.1.101 */ -else -return TC_ACT_SHOT ; } ret =bpf_skb_set_tunnel_key (skb, &key,sizeof (key),0 );
@@ -585,19 +573,20 @@ int _ipip6_set_tunnel(struct __sk_buff *skb)struct bpf_tunnel_key key = {};void *data = (void *)(long )skb->data;struct iphdr *iph = data; -struct tcphdr *tcp = data +sizeof (*iph);void *data_end = (void *)(long )skb->data_end;int ret;/* single length check */ -if (data +sizeof (*iph) +sizeof (*tcp) > data_end) { +if (data +sizeof (*iph) > data_end) {ERROR (1 );return TC_ACT_SHOT ; }__builtin_memset (&key,0x0 ,sizeof (key)); - key.remote_ipv6[3 ] =bpf_htonl (0x11 );/* ::11 */ key.tunnel_ttl =64 ; +if (iph->protocol ==IPPROTO_ICMP ) { + key.remote_ipv6[3 ] =bpf_htonl (0x11 );/* ::11 */ + } ret =bpf_skb_set_tunnel_key (skb, &key,sizeof (key),BPF_F_TUNINFO_IPV6 );
@@ -634,35 +623,18 @@ int _ip6ip6_set_tunnel(struct __sk_buff *skb)struct bpf_tunnel_key key = {};void *data = (void *)(long )skb->data;struct ipv6hdr *iph = data; -struct tcphdr *tcp = data +sizeof (*iph);void *data_end = (void *)(long )skb->data_end;int ret;/* single length check */ -if (data +sizeof (*iph) +sizeof (*tcp) > data_end) { +if (data +sizeof (*iph) > data_end) {ERROR (1 );return TC_ACT_SHOT ; } - key.remote_ipv6[0 ] =bpf_htonl (0x2401db00 ); key.tunnel_ttl =64 ; -if (iph->nexthdr ==58 /* NEXTHDR_ICMP */ ) { - key.remote_ipv6[3 ] =bpf_htonl (1 ); - }else { -if (iph->nexthdr !=6 /* NEXTHDR_TCP */ ) { -ERROR (iph->nexthdr); -return TC_ACT_SHOT ; - } - -if (tcp->dest ==bpf_htons (5200 )) { - key.remote_ipv6[3 ] =bpf_htonl (1 ); - }else if (tcp->dest ==bpf_htons (5201 )) { - key.remote_ipv6[3 ] =bpf_htonl (2 ); - }else { -ERROR (tcp->dest); -return TC_ACT_SHOT ; - } + key.remote_ipv6[3 ] =bpf_htonl (0x11 );/* ::11 */ } ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key),
tools/testing/selftests/bpf/test_tunnel.sh +39 -4
94 lines not on this page · raw message
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 122/453 ASoC: wm8998: Fix PM disable depth imbalance on error
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 193aa0a043645220d2a2f783ba06ae13d4601078 ]
The pm_runtime_enable will increase power disable depth. Thus a pairing decrement is needed on the error handling path to keep it balanced according to context.
--- sound/soc/codecs/wm8998.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
sound/soc/codecs/wm8998.c +3 -1
@@ -1375,7 +1375,7 @@ static int wm8998_probe(struct platform_device *pdev) ret =arizona_init_spk_irqs (arizona);if (ret <0 ) -return ret; + goto err_pm_disable; ret = devm_snd_soc_register_component(&pdev->dev, &soc_component_dev_wm8998,
@@ -1390,6 +1390,8 @@ static int wm8998_probe(struct platform_device *pdev) err_spk_irqs:arizona_free_spk_irqs (arizona); +err_pm_disable: +pm_runtime_disable (&pdev->dev);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 123/453 spi: sprd: fix reference leak in sprd_spi_remove
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit e4062765bc2a41e025e29dd56bad798505036427 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in sprd_spi_remove, so we should fix it.
--- drivers/spi/spi-sprd.c | 1 + 1 file changed, 1 insertion(+)
drivers/spi/spi-sprd.c +1 -0
@@ -1008,6 +1008,7 @@ static int sprd_spi_remove(struct platform_device *pdev) ret =pm_runtime_get_sync (ss->dev);if (ret <0 ) { +pm_runtime_put_noidle (ss->dev);dev_err (ss->dev,"failed to resume SPI controller\n" );return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 124/453 net: evaluate net.ipvX.conf.all.ignore_routes_with_linkdown
In reply to Greg Kroah-HartmanFrom: Vincent Bernat <[email protected]>
[ Upstream commit c0c5a60f0f1311bcf08bbe735122096d6326fb5b ]
Introduced in 0eeb075fad73, the "ignore_routes_with_linkdown" sysctl ignores a route whose interface is down. It is provided as a per-interface sysctl. However, while a "all" variant is exposed, it was a noop since it was never evaluated. We use the usual "or" logic for this kind of sysctls.
Tested with:
ip link add type veth # veth0 + veth1
ip link add type veth # veth1 + veth2
ip link set up dev veth0
ip link set up dev veth1 # link-status paired with veth0
ip link set up dev veth2
ip link set up dev veth3 # link-status paired with veth2
# First available path
ip -4 addr add 203.0.113.${uts#H}/24 dev veth0
ip -6 addr add 2001:db8:1::${uts#H}/64 dev veth0
# Second available path
ip -4 addr add 192.0.2.${uts#H}/24 dev veth2
ip -6 addr add 2001:db8:2::${uts#H}/64 dev veth2
# More specific route through first path
ip -4 route add 198.51.100.0/25 via 203.0.113.254 # via veth0
ip -6 route add 2001:db8:3::/56 via 2001:db8:1::ff # via veth0
# Less specific route through second path
ip -4 route add 198.51.100.0/24 via 192.0.2.254 # via veth2
ip -6 route add 2001:db8:3::/48 via 2001:db8:2::ff # via veth2
# H1: enable on "all"
# H2: enable on "veth0"
for v in ipv4 ipv6; do
case $uts in
H1)
sysctl -qw net.${v}.conf.all.ignore_routes_with_linkdown=1
;;
H2)
sysctl -qw net.${v}.conf.veth0.ignore_routes_with_linkdown=1
;;
esac
done
set -xe
# When veth0 is up, best route is through veth0
ip -o route get 198.51.100.1 | grep -Fw veth0
ip -o route get 2001:db8:3::1 | grep -Fw veth0
# When veth0 is down, best route should be through veth2 on H1/H2,
# but on veth0 on H2
ip link set down dev veth1 # down veth0
ip route show
[ $uts != H3 ] || ip -o route get 198.51.100.1 | grep -Fw veth0
[ $uts != H3 ] || ip -o route get 2001:db8:3::1 | grep -Fw veth0
[ $uts = H3 ] || ip -o route get 198.51.100.1 | grep -Fw veth2
[ $uts = H3 ] || ip -o route get 2001:db8:3::1 | grep -Fw veth2Without this patch, the two last lines would fail on H1 (the one using the "all" sysctl). With the patch, everything succeeds as expected.
Also document the sysctl in ip-sysctl.rst.
--- Documentation/networking/ip-sysctl.txt | 3 +++ include/linux/inetdevice.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
Documentation/networking/ip-sysctl.txt +3 -0
@@ -1366,6 +1366,9 @@ igmpv3_unsolicited_report_interval - INTEGER IGMPv3 report retransmit will take place. Default: 1000 (1 seconds) +ignore_routes_with_linkdown - BOOLEAN + Ignore routes whose link is down when performing a FIB lookup. + promote_secondaries - BOOLEAN When a primary IP address is removed from this interface promote a corresponding secondary IP address instead of
include/linux/inetdevice.h +1 -1
@@ -126,7 +126,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev) IN_DEV_ORCONF((in_dev), ACCEPT_REDIRECTS)))#define IN_DEV_IGNORE_ROUTES_WITH_LINKDOWN (in_dev) \ - IN_DEV_CONF_GET((in_dev), IGNORE_ROUTES_WITH_LINKDOWN) + IN_DEV_ORCONF((in_dev), IGNORE_ROUTES_WITH_LINKDOWN)#define IN_DEV_ARPFILTER (in_dev) IN_DEV_ORCONF((in_dev), ARPFILTER)#define IN_DEV_ARP_ACCEPT (in_dev) IN_DEV_ORCONF((in_dev), ARP_ACCEPT)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 125/453 net: evaluate net.ipv4.conf.all.proxy_arp_pvlan
In reply to Greg Kroah-HartmanFrom: Vincent Bernat <[email protected]>
[ Upstream commit 1af5318c00a8acc33a90537af49b3f23f72a2c4b ]
Introduced in 65324144b50b, the "proxy_arp_vlan" sysctl is a per-interface sysctl to tune proxy ARP support for private VLANs. While the "all" variant is exposed, it was a noop and never evaluated. We use the usual "or" logic for this kind of sysctls.
--- include/linux/inetdevice.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/inetdevice.h +1 -1
@@ -105,7 +105,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)#define IN_DEV_LOG_MARTIANS (in_dev) IN_DEV_ORCONF((in_dev), LOG_MARTIANS)#define IN_DEV_PROXY_ARP (in_dev) IN_DEV_ORCONF((in_dev), PROXY_ARP) -#define IN_DEV_PROXY_ARP_PVLAN (in_dev) IN_DEV_CONF_GET(in_dev, PROXY_ARP_PVLAN) +#define IN_DEV_PROXY_ARP_PVLAN (in_dev) IN_DEV_ORCONF((in_dev), PROXY_ARP_PVLAN)#define IN_DEV_SHARED_MEDIA (in_dev) IN_DEV_ORCONF((in_dev), SHARED_MEDIA)#define IN_DEV_TX_REDIRECTS (in_dev) IN_DEV_ORCONF((in_dev), SEND_REDIRECTS)#define IN_DEV_SEC_REDIRECTS (in_dev) IN_DEV_ORCONF((in_dev), \
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 126/453 ASoC: arizona: Fix a wrong free in wm8997_probe
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 5e7aace13df24ff72511f29c14ebbfe638ef733c ]
In the normal path, we should not free the arizona, we should return immediately. It will be free when call remove operation.
--- sound/soc/codecs/wm8997.c | 2 ++ 1 file changed, 2 insertions(+)
sound/soc/codecs/wm8997.c +2 -0
@@ -1177,6 +1177,8 @@ static int wm8997_probe(struct platform_device *pdev) goto err_spk_irqs; } +return ret; + err_spk_irqs:arizona_free_spk_irqs (arizona);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 127/453 RDMa/mthca: Work around -Wenum-conversion warning
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit fbb7dc5db6dee553b5a07c27e86364a5223e244c ]
gcc points out a suspicious mixing of enum types in a function that converts from MTHCA_OPCODE_* values to IB_WC_* values:
drivers/infiniband/hw/mthca/mthca_cq.c: In function 'mthca_poll_one':drivers/infiniband/hw/mthca/mthca_cq.c:607:21: warning: implicit conversion from 'enum <anonymous>' to 'enum ib_wc_opcode' [-Wenum-conversion]
607 | entry->opcode = MTHCA_OPCODE_INVALID;
Nothing seems to ever check for MTHCA_OPCODE_INVALID again, no idea if this is meaningful, but it seems harmless as it deals with an invalid input.
Remove MTHCA_OPCODE_INVALID and set the ib_wc_opcode to 0xFF, which is still bogus, but at least doesn't make compiler warnings.
--- drivers/infiniband/hw/mthca/mthca_cq.c | 2 +- drivers/infiniband/hw/mthca/mthca_dev.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-)
drivers/infiniband/hw/mthca/mthca_cq.c +1 -1
@@ -604,7 +604,7 @@ static inline int mthca_poll_one(struct mthca_dev *dev, entry->byte_len =MTHCA_ATOMIC_BYTE_LEN ;break ;default : - entry->opcode =MTHCA_OPCODE_INVALID ; + entry->opcode =0xFF ;break ; } }else {
drivers/infiniband/hw/mthca/mthca_dev.h +0 -1
@@ -105,7 +105,6 @@ enum {MTHCA_OPCODE_ATOMIC_CS =0x11 ,MTHCA_OPCODE_ATOMIC_FA =0x12 , MTHCA_OPCODE_BIND_MW = 0x18, -MTHCA_OPCODE_INVALID =0xff }; enum {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 128/453 MIPS: BCM47XX: fix kconfig dependency bug for BCM47XX_BCMA
In reply to Greg Kroah-HartmanFrom: Necip Fazil Yildiran <[email protected]>
[ Upstream commit 3a5fe2fb9635c43359c9729352f45044f3c8df6b ]
When BCM47XX_BCMA is enabled and BCMA_DRIVER_PCI is disabled, it results in the following Kbuild warning:
WARNING: unmet direct dependencies detected for BCMA_DRIVER_PCI_HOSTMODE
Depends on [n]: MIPS [=y] && BCMA_DRIVER_PCI [=n] && PCI_DRIVERS_LEGACY [=y] && BCMA [=y]=y Selected by [y]:
- BCM47XX_BCMA [=y] && BCM47XX [=y] && PCI [=y]
The reason is that BCM47XX_BCMA selects BCMA_DRIVER_PCI_HOSTMODE without depending on or selecting BCMA_DRIVER_PCI while BCMA_DRIVER_PCI_HOSTMODE depends on BCMA_DRIVER_PCI. This can also fail building the kernel.
Honor the kconfig dependency to remove unmet direct dependency warnings and avoid any potential build failures.
--- arch/mips/bcm47xx/Kconfig | 1 + 1 file changed, 1 insertion(+)
arch/mips/bcm47xx/Kconfig +1 -0
@@ -27,6 +27,7 @@ config BCM47XX_BCMA select BCMA select BCMA_HOST_SOC select BCMA_DRIVER_MIPS + select BCMA_DRIVER_PCI if PCI select BCMA_DRIVER_PCI_HOSTMODE if PCI select BCMA_DRIVER_GPIO default y
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 129/453 crypto: qat - fix status check in qat_hal_put_rel_rd_xfer()
In reply to Greg Kroah-HartmanFrom: Jack Xu <[email protected]>
[ Upstream commit 3b5c130fb2e4c045369791c33c83b59f6e84f7d6 ]
The return value of qat_hal_rd_ae_csr() is always a CSR value and never a status and should not be stored in the status variable of qat_hal_put_rel_rd_xfer().
This removes the assignment as qat_hal_rd_ae_csr() is not expected to fail.
A more comprehensive handling of the theoretical corner case which could result in a fail will be submitted in a separate patch.
--- drivers/crypto/qat/qat_common/qat_hal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/qat/qat_common/qat_hal.c +1 -1
@@ -1189,7 +1189,7 @@ static int qat_hal_put_rel_rd_xfer(struct icp_qat_fw_loader_handle *handle,unsigned short mask;unsigned short dr_offset =0x10 ; - status = ctx_enables =qat_hal_rd_ae_csr (handle, ae,CTX_ENABLES ); + ctx_enables =qat_hal_rd_ae_csr (handle, ae,CTX_ENABLES );if (CE_INUSE_CONTEXTS & ctx_enables) {if (ctx &0x1 ) {pr_err ("QAT: bad 4-ctx mode,ctx=0x%x\n" , ctx);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 130/453 staging: greybus: codecs: Fix reference counter leak in error handling
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 3952659a6108f77a0d062d8e8487bdbdaf52a66c ]
gb_pm_runtime_get_sync has increased the usage counter of the device here. Forgetting to call gb_pm_runtime_put_noidle will result in usage counter leak in the error branch of (gbcodec_hw_params and gbcodec_prepare). We fixed it by adding it.
--- drivers/staging/greybus/audio_codec.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/staging/greybus/audio_codec.c +2 -0
@@ -489,6 +489,7 @@ static int gbcodec_hw_params(struct snd_pcm_substream *substream,if (ret) {dev_err_ratelimited (dai->dev,"%d: Error during set_config\n" , ret); +gb_pm_runtime_put_noidle (bundle);mutex_unlock (&codec->lock);return ret; }
@@ -565,6 +566,7 @@ static int gbcodec_prepare(struct snd_pcm_substream *substream,break ; }if (ret) { +gb_pm_runtime_put_noidle (bundle);mutex_unlock (&codec->lock);dev_err_ratelimited (dai->dev,"set_data_size failed:%d\n" , ret);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 131/453 staging: gasket: interrupt: fix the missed eventfd_ctx_put() in gasket_interrupt.c
In reply to Greg Kroah-HartmanFrom: Jing Xiangfeng <[email protected]>
[ Upstream commit ab5b769a23af12a675b9f3d7dd529250c527f5ac ]
gasket_interrupt_set_eventfd() misses to call eventfd_ctx_put() in an error path. We check interrupt is valid before calling eventfd_ctx_fdget() to fix it.
There is the same issue in gasket_interrupt_clear_eventfd(), Add the missed function call to fix it.
--- drivers/staging/gasket/gasket_interrupt.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
drivers/staging/gasket/gasket_interrupt.c +10 -5
@@ -487,14 +487,16 @@ int gasket_interrupt_system_status(struct gasket_dev *gasket_dev)int gasket_interrupt_set_eventfd (struct gasket_interrupt_data *interrupt_data,int interrupt,int event_fd) { -struct eventfd_ctx *ctx =eventfd_ctx_fdget (event_fd); - -if (IS_ERR (ctx)) -return PTR_ERR (ctx); +struct eventfd_ctx *ctx;if (interrupt <0 || interrupt >= interrupt_data->num_interrupts)return -EINVAL ; + ctx =eventfd_ctx_fdget (event_fd); + +if (IS_ERR (ctx)) +return PTR_ERR (ctx); + interrupt_data->eventfd_ctxs[interrupt] = ctx;return 0 ; }
@@ -505,6 +507,9 @@ int gasket_interrupt_clear_eventfd(struct gasket_interrupt_data *interrupt_data,if (interrupt <0 || interrupt >= interrupt_data->num_interrupts)return -EINVAL ; - interrupt_data->eventfd_ctxs[interrupt] =NULL ; +if (interrupt_data->eventfd_ctxs[interrupt]) { +eventfd_ctx_put (interrupt_data->eventfd_ctxs[interrupt]); + interrupt_data->eventfd_ctxs[interrupt] =NULL ; + }return 0 ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 132/453 media: tm6000: Fix sizeof() mismatches
In reply to Greg Kroah-HartmanFrom: Colin Ian King <[email protected]>
[ Upstream commit a08ad6339e0441ca12533969ed94a87e3655426e ]
The are two instances of sizeof() being used incorrectly. The sizeof(void *) is incorrect because urb_buffer is a char ** pointer, fix this by using sizeof(*dev->urb_buffer). The sizeof(dma_addr_t *) is incorrect, it should be sizeof(*dev->urb_dma), which is a dma_addr_t and not a dma_addr_t *. This errors did not cause any issues because it just so happens the sizes are the same.
Addresses-Coverity: ("Sizeof not portable (SIZEOF_MISMATCH)")
--- drivers/media/usb/tm6000/tm6000-video.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/media/usb/tm6000/tm6000-video.c +3 -2
@@ -461,11 +461,12 @@ static int tm6000_alloc_urb_buffers(struct tm6000_core *dev)if (dev->urb_buffer)return 0 ; - dev->urb_buffer =kmalloc_array (num_bufs,sizeof (void *),GFP_KERNEL ); + dev->urb_buffer =kmalloc_array (num_bufs,sizeof (*dev->urb_buffer), +GFP_KERNEL );if (!dev->urb_buffer)return -ENOMEM ; - dev->urb_dma =kmalloc_array (num_bufs,sizeof (dma_addr_t *), + dev->urb_dma =kmalloc_array (num_bufs,sizeof (*dev->urb_dma),GFP_KERNEL );if (!dev->urb_dma)return -ENOMEM ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 133/453 media: mtk-vcodec: add missing put_device() call in mtk_vcodec_init_dec_pm()
In reply to Greg Kroah-HartmanFrom: Yu Kuai <[email protected]>
[ Upstream commit 5d4fa2c50125c9cda9e380d89268757cc5fa743d ]
if of_find_device_by_node() succeed, mtk_vcodec_init_dec_pm() doesn't have a corresponding put_device(). Thus add jump target to fix the exception handling for this function implementation.
--- .../platform/mtk-vcodec/mtk_vcodec_dec_pm.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)
drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c +12 -6
@@ -48,11 +48,14 @@ int mtk_vcodec_init_dec_pm(struct mtk_vcodec_dev *mtkdev) dec_clk->clk_info =devm_kcalloc (&pdev->dev, dec_clk->clk_num,sizeof (*clk_info),GFP_KERNEL ); -if (!dec_clk->clk_info) -return -ENOMEM ; +if (!dec_clk->clk_info) { + ret = -ENOMEM ; + goto put_device; + } }else {mtk_v4l2_err ("Failed to get vdec clock count" ); -return -EINVAL ; + ret = -EINVAL ; + goto put_device; }for (i =0 ; i < dec_clk->clk_num; i++) {
@@ -61,19 +64,22 @@ int mtk_vcodec_init_dec_pm(struct mtk_vcodec_dev *mtkdev) "clock-names", i, &clk_info->clk_name);if (ret) {mtk_v4l2_err ("Failed to get clock name id = %d" , i); -return ret; + goto put_device; } clk_info->vcodec_clk =devm_clk_get (&pdev->dev, clk_info->clk_name);if (IS_ERR (clk_info->vcodec_clk)) {mtk_v4l2_err ("devm_clk_get (%d)%s fail" , i, clk_info->clk_name); -return PTR_ERR (clk_info->vcodec_clk); + ret =PTR_ERR (clk_info->vcodec_clk); + goto put_device; } }pm_runtime_enable (&pdev->dev); - +return 0 ; +put_device: +put_device (pm->larbvdec);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 134/453 media: mtk-vcodec: add missing put_device() call in mtk_vcodec_release_dec_pm()
In reply to Greg Kroah-HartmanFrom: Yu Kuai <[email protected]>
[ Upstream commit 27c3943683f74e35e1d390ceb2e3639eff616ad6 ]
mtk_vcodec_release_dec_pm() will be called in two places:
a. mtk_vcodec_init_dec_pm() succeed while mtk_vcodec_probe() return error. b. mtk_vcodec_dec_remove().
In both cases put_device() call is needed, since of_find_device_by_node() was called in mtk_vcodec_init_dec_pm() previously.
Thus add put_devices() call in mtk_vcodec_release_dec_pm()
--- drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c | 1 + 1 file changed, 1 insertion(+)
drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_pm.c +1 -0
@@ -86,6 +86,7 @@ put_device:void mtk_vcodec_release_dec_pm (struct mtk_vcodec_dev *dev) {pm_runtime_disable (dev->pm.dev); +put_device (dev->pm.larbvdec); }void mtk_vcodec_dec_pw_on (struct mtk_vcodec_pm *pm)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 135/453 media: mtk-vcodec: add missing put_device() call in mtk_vcodec_init_enc_pm()
In reply to Greg Kroah-HartmanFrom: Yu Kuai <[email protected]>
[ Upstream commit 4affafd7bec7c65da31777f18bd20420f1aeb5f8 ]
if of_find_device_by_node() succeed, mtk_vcodec_init_enc_pm() doesn't have a corresponding put_device(). Thus add jump target to fix the exception handling for this function implementation.
--- .../platform/mtk-vcodec/mtk_vcodec_enc_pm.c | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-)
drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c +19 -7
@@ -49,14 +49,16 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) node =of_parse_phandle (dev->of_node,"mediatek,larb" ,1 );if (!node) {mtk_v4l2_err ("no mediatek,larb found" ); -return -ENODEV ; + ret = -ENODEV ; + goto put_larbvenc; } pdev =of_find_device_by_node (node);of_node_put (node);if (!pdev) {mtk_v4l2_err ("no mediatek,larb device found" ); -return -ENODEV ; + ret = -ENODEV ; + goto put_larbvenc; } pm->larbvenclt = &pdev->dev;
@@ -69,11 +71,14 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) enc_clk->clk_info =devm_kcalloc (&pdev->dev, enc_clk->clk_num,sizeof (*clk_info),GFP_KERNEL ); -if (!enc_clk->clk_info) -return -ENOMEM ; +if (!enc_clk->clk_info) { + ret = -ENOMEM ; + goto put_larbvenclt; + } }else {mtk_v4l2_err ("Failed to get venc clock count" ); -return -EINVAL ; + ret = -EINVAL ; + goto put_larbvenclt; }for (i =0 ; i < enc_clk->clk_num; i++) {
@@ -82,17 +87,24 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) "clock-names", i, &clk_info->clk_name);if (ret) {mtk_v4l2_err ("venc failed to get clk name %d" , i); -return ret; + goto put_larbvenclt; } clk_info->vcodec_clk =devm_clk_get (&pdev->dev, clk_info->clk_name);if (IS_ERR (clk_info->vcodec_clk)) {mtk_v4l2_err ("venc devm_clk_get (%d)%s fail" , i, clk_info->clk_name); -return PTR_ERR (clk_info->vcodec_clk); + ret =PTR_ERR (clk_info->vcodec_clk); + goto put_larbvenclt; } } +return 0 ; + +put_larbvenclt: +put_device (pm->larbvenclt); +put_larbvenc: +put_device (pm->larbvenc);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 136/453 media: v4l2-fwnode: Return -EINVAL for invalid bus-type
In reply to Greg Kroah-HartmanFrom: Lad Prabhakar <[email protected]>
[ Upstream commit 69baf338fc16a4d55c78da8874ce3f06feb38c78 ]
Return -EINVAL if invalid bus-type is detected while parsing endpoints.
--- drivers/media/v4l2-core/v4l2-fwnode.c | 6 +++++- include/media/v4l2-mediabus.h | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-)
drivers/media/v4l2-core/v4l2-fwnode.c +5 -1
@@ -93,7 +93,7 @@ v4l2_fwnode_bus_type_to_mbus(enum v4l2_fwnode_bus_type type)const struct v4l2_fwnode_bus_conv *conv =get_v4l2_fwnode_bus_conv_by_fwnode_bus (type); -return conv ? conv->mbus_type :V4L2_MBUS_UNKNOWN ; +return conv ? conv->mbus_type :V4L2_MBUS_INVALID ; } static const char *
@@ -436,6 +436,10 @@ static int __v4l2_fwnode_endpoint_parse(struct fwnode_handle *fwnode,v4l2_fwnode_mbus_type_to_string (vep->bus_type), vep->bus_type); mbus_type =v4l2_fwnode_bus_type_to_mbus (bus_type); +if (mbus_type ==V4L2_MBUS_INVALID ) { +pr_debug ("unsupported bus type %u\n" , bus_type); +return -EINVAL ; + }if (vep->bus_type !=V4L2_MBUS_UNKNOWN ) { if (mbus_type != V4L2_MBUS_UNKNOWN &&
include/media/v4l2-mediabus.h +2 -0
@@ -78,6 +78,7 @@* @V4L2_MBUS_CCP2: CCP2 (Compact Camera Port 2) * @V4L2_MBUS_CSI2_DPHY: MIPI CSI-2 serial interface, with D-PHY * @V4L2_MBUS_CSI2_CPHY: MIPI CSI-2 serial interface, with C-PHY +* @V4L2_MBUS_INVALID: invalid bus type (keep as last) */ enum v4l2_mbus_type {V4L2_MBUS_UNKNOWN ,
@@ -87,6 +88,7 @@ enum v4l2_mbus_type {V4L2_MBUS_CCP2 ,V4L2_MBUS_CSI2_DPHY ,V4L2_MBUS_CSI2_CPHY , + V4L2_MBUS_INVALID, };/**
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 137/453 ASoC: meson: fix COMPILE_TEST error
In reply to Greg Kroah-HartmanFrom: Jerome Brunet <[email protected]>
[ Upstream commit 299fe9937dbd1a4d9a1da6a2b6f222298534ca57 ]
When compiled with CONFIG_HAVE_CLK, the kernel need to get provider for the clock API. This is usually selected by the platform and the sound drivers should not really care about this. However COMPILE_TEST is special and the platform required may not have been selected, leading to this type of error:
Quoted 1 line
aiu-encoder-spdif.c:(.text+0x3a0): undefined reference to `clk_set_parent'
Since we need a sane provider of the API with COMPILE_TEST, depends on COMMON_CLK.
--- sound/soc/meson/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/meson/Kconfig +1 -1
@@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only menu "ASoC support for Amlogic platforms" - depends on ARCH_MESON || COMPILE_TEST + depends on ARCH_MESON || (COMPILE_TEST && COMMON_CLK) config SND_MESON_AXG_FIFO tristate
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 138/453 scsi: core: Fix VPD LUN ID designator priorities
In reply to Greg Kroah-HartmanFrom: Martin Wilck <[email protected]>
[ Upstream commit 2e4209b3806cda9b89c30fd5e7bfecb7044ec78b ]
The current implementation of scsi_vpd_lun_id() uses the designator length as an implicit measure of priority. This works most of the time, but not always. For example, some Hitachi storage arrays return this in VPD 0x83:
VPD INQUIRY: Device Identification page
Designation descriptor number 1, descriptor length: 24
designator_type: T10 vendor identification, code_set: ASCII associated with the Addressed logical unit
vendor id: HITACHI
vendor specific: 5030C3502025
Designation descriptor number 2, descriptor length: 6
designator_type: vendor specific [0x0], code_set: Binary associated with the Target port
vendor specific: 08 03
Designation descriptor number 3, descriptor length: 20
designator_type: NAA, code_set: Binary
associated with the Addressed logical unit
NAA 6, IEEE Company_id: 0x60e8
Vendor Specific Identifier: 0x7c35000
Vendor Specific Identifier Extension: 0x30c35000002025
[0x60060e8007c350000030c35000002025]The current code would use the first descriptor because it's longer than the NAA descriptor. But this is wrong, the kernel is supposed to prefer NAA descriptors over T10 vendor ID. Designator length should only be used to compare designators of the same type.
This patch addresses the issue by separating designator priority and length.
--- drivers/scsi/scsi_lib.c | 126 +++++++++++++++++++++++++++------------- 1 file changed, 86 insertions(+), 40 deletions(-)
drivers/scsi/scsi_lib.c +86 -40
@@ -2930,6 +2930,78 @@ void sdev_enable_disk_events(struct scsi_device *sdev) }EXPORT_SYMBOL (sdev_enable_disk_events); +static unsigned char designator_prio (const unsigned char *d) +{ +if (d[1 ] &0x30 ) +/* not associated with LUN */ +return 0 ; + +if (d[3 ] ==0 ) +/* invalid length */ +return 0 ; + +/* +* Order of preference for lun descriptor: +* - SCSI name string +* - NAA IEEE Registered Extended +* - EUI-64 based 16-byte +* - EUI-64 based 12-byte +* - NAA IEEE Registered +* - NAA IEEE Extended +* - EUI-64 based 8-byte +* - SCSI name string (truncated) +* - T10 Vendor ID +* as longer descriptors reduce the likelyhood +* of identification clashes. +*/ + +switch (d[1 ] &0xf ) { +case 8 : +/* SCSI name string, variable-length UTF-8 */ +return 9 ; +case 3 : +switch (d[4 ] >>4 ) { +case 6 : +/* NAA registered extended */ +return 8 ; +case 5 : +/* NAA registered */ +return 5 ; +case 4 : +/* NAA extended */ +return 4 ; +case 3 : +/* NAA locally assigned */ +return 1 ; +default : +break ; + } +break ; +case 2 : +switch (d[3 ]) { +case 16 : +/* EUI64-based, 16 byte */ +return 7 ; +case 12 : +/* EUI64-based, 12 byte */ +return 6 ; +case 8 : +/* EUI64-based, 8 byte */ +return 3 ; +default : +break ; + } +break ; +case 1 : +/* T10 vendor ID */ +return 1 ; +default : +break ; + } + +return 0 ; +} +/** * scsi_vpd_lun_id - return a unique device identification * @sdev: SCSI device
@@ -2946,7 +3018,7 @@ EXPORT_SYMBOL(sdev_enable_disk_events);*/ int scsi_vpd_lun_id (struct scsi_device *sdev,char *id,size_t id_len) { -u8 cur_id_type =0xff ; +u8 cur_id_prio =0 ;u8 cur_id_size =0 ;const unsigned char *d, *cur_id_str;const struct scsi_vpd *vpd_pg83;
@@ -2959,20 +3031,6 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len)return -ENXIO ; } -/* -* Look for the correct descriptor. -* Order of preference for lun descriptor: -* - SCSI name string -* - NAA IEEE Registered Extended -* - EUI-64 based 16-byte -* - EUI-64 based 12-byte -* - NAA IEEE Registered -* - NAA IEEE Extended -* - T10 Vendor ID -* as longer descriptors reduce the likelyhood -* of identification clashes. -*/ -/* The id string must be at least 20 bytes + terminating NULL byte */ if (id_len <21 ) {rcu_read_unlock ();
@@ -2982,8 +3040,9 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len)memset (id,0 , id_len); d = vpd_pg83->data +4 ;while (d < vpd_pg83->data + vpd_pg83->len) { -/* Skip designators not referring to the LUN */ -if ((d[1 ] &0x30 ) !=0x00 ) +u8 prio =designator_prio (d); + +if (prio ==0 || cur_id_prio > prio) goto next_desig;switch (d[1 ] &0xf ) {
@@ -2991,28 +3050,19 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len)/* T10 Vendor ID */ if (cur_id_size > d[3 ])break ; -/* Prefer anything */ -if (cur_id_type >0x01 && cur_id_type !=0xff ) -break ; + cur_id_prio = prio; cur_id_size = d[3 ];if (cur_id_size +4 > id_len) cur_id_size = id_len -4 ; cur_id_str = d +4 ; - cur_id_type = d[1 ] &0xf ; id_size =snprintf (id, id_len,"t10.%*pE" , cur_id_size, cur_id_str);break ;case 0x2 :/* EUI-64 */ -if (cur_id_size > d[3 ]) -break ; -/* Prefer NAA IEEE Registered Extended */ -if (cur_id_type ==0x3 && - cur_id_size == d[3 ]) -break ; + cur_id_prio = prio; cur_id_size = d[3 ]; cur_id_str = d +4 ; - cur_id_type = d[1 ] &0xf ;switch (cur_id_size) {case 8 : id_size = snprintf(id, id_len,
@@ -3030,17 +3080,14 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len) cur_id_str);break ;default : - cur_id_size =0 ;break ; }break ;case 0x3 :/* NAA */ -if (cur_id_size > d[3 ]) -break ; + cur_id_prio = prio; cur_id_size = d[3 ]; cur_id_str = d +4 ; - cur_id_type = d[1 ] &0xf ;switch (cur_id_size) {case 8 : id_size = snprintf(id, id_len,
@@ -3053,26 +3100,25 @@ int scsi_vpd_lun_id(struct scsi_device *sdev, char *id, size_t id_len) cur_id_str);break ;default : - cur_id_size =0 ;break ; }break ;case 0x8 :/* SCSI name string */ -if (cur_id_size +4 > d[3 ]) +if (cur_id_size > d[3 ])break ;/* Prefer others for truncated descriptor */ -if (cur_id_size && d[3 ] > id_len) -break ; +if (d[3 ] > id_len) { + prio =2 ; +if (cur_id_prio > prio) +break ; + } + cur_id_prio = prio; cur_id_size = id_size = d[3 ]; cur_id_str = d +4 ; - cur_id_type = d[1 ] &0xf ;if (cur_id_size >= id_len) cur_id_size = id_len -1 ;memcpy (id, cur_id_str, cur_id_size); -/* Decrease priority for truncated descriptor */ -if (cur_id_size != id_size) - cur_id_size =6 ;break ;default :break ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 139/453 media: solo6x10: fix missing snd_card_free in error handling case
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit dcdff74fa6bc00c32079d0bebd620764c26f2d89 ]
Fix to goto snd_error in error handling case when fails to do snd_ctl_add, as done elsewhere in this function.
--- drivers/media/pci/solo6x10/solo6x10-g723.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/pci/solo6x10/solo6x10-g723.c +1 -1
@@ -399,7 +399,7 @@ int solo_g723_init(struct solo_dev *solo_dev) ret =snd_ctl_add (card,snd_ctl_new1 (&kctl, solo_dev));if (ret <0 ) -return ret; + goto snd_error; ret =solo_snd_pcm_init (solo_dev);if (ret <0 )
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 140/453 video: fbdev: atmel_lcdfb: fix return error code in atmel_lcdfb_of_init()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit ba236455ee750270f33998df57f982433cea4d8e ]
If devm_kzalloc() failed after the first time, atmel_lcdfb_of_init() can't return -ENOMEM, fix this by putting the error code in loop.
--- drivers/video/fbdev/atmel_lcdfb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/video/fbdev/atmel_lcdfb.c +1 -1
@@ -987,8 +987,8 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo) }INIT_LIST_HEAD (&pdata->pwr_gpios); - ret = -ENOMEM ;for (i =0 ; i <gpiod_count (dev,"atmel,power-control" ); i++) { + ret = -ENOMEM ; gpiod =devm_gpiod_get_index (dev,"atmel,power-control" , i,GPIOD_ASIS );if (IS_ERR (gpiod))
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 141/453 drm/omap: dmm_tiler: fix return error code in omap_dmm_probe()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit 723ae803218da993143387bf966042eccefac077 ]
Return -ENOMEM when allocating refill memory failed.
--- drivers/gpu/drm/omapdrm/omap_dmm_tiler.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/omapdrm/omap_dmm_tiler.c +1 -0
@@ -891,6 +891,7 @@ static int omap_dmm_probe(struct platform_device *dev) &omap_dmm->refill_pa, GFP_KERNEL);if (!omap_dmm->refill_va) {dev_err (&dev->dev,"could not allocate refill memory\n" ); + ret = -ENOMEM ; goto fail; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 142/453 Input: ads7846 - fix race that causes missing releases
In reply to Greg Kroah-HartmanFrom: David Jander <[email protected]>
[ Upstream commit e52cd628a03f72a547dbf90ccb703ee64800504a ]
If touchscreen is released while busy reading HWMON device, the release can be missed. The IRQ thread is not started because no touch is active and BTN_TOUCH release event is never sent.
--- drivers/input/touchscreen/ads7846.c | 44 +++++++++++++++++------------ 1 file changed, 26 insertions(+), 18 deletions(-)
drivers/input/touchscreen/ads7846.c +26 -18
@@ -199,6 +199,26 @@ struct ads7846 {#define REF_ON (READ_12BIT_DFR(x, 1, 1))#define REF_OFF (READ_12BIT_DFR(y, 0, 0)) +static int get_pendown_state (struct ads7846 *ts) +{ +if (ts->get_pendown_state) +return ts->get_pendown_state (); + +return !gpio_get_value (ts->gpio_pendown); +} + +static void ads7846_report_pen_up (struct ads7846 *ts) +{ +struct input_dev *input = ts->input; + +input_report_key (input,BTN_TOUCH ,0 ); +input_report_abs (input,ABS_PRESSURE ,0 ); +input_sync (input); + + ts->pendown = false; +dev_vdbg (&ts->spi->dev,"UP\n" ); +} +/* Must be called with ts->lock held */ static void ads7846_stop (struct ads7846 *ts) {
@@ -215,6 +235,10 @@ static void ads7846_stop(struct ads7846 *ts)static void ads7846_restart (struct ads7846 *ts) {if (!ts->disabled && !ts->suspended) { +/* Check if pen was released since last stop */ +if (ts->pendown && !get_pendown_state (ts)) +ads7846_report_pen_up (ts); +/* Tell IRQ thread that it may poll the device. */ ts->stopped = false;mb ();
@@ -605,14 +629,6 @@ static const struct attribute_group ads784x_attr_group = {/*--------------------------------------------------------------------------*/ -static int get_pendown_state (struct ads7846 *ts) -{ -if (ts->get_pendown_state) -return ts->get_pendown_state (); - -return !gpio_get_value (ts->gpio_pendown); -} -static void null_wait_for_sync (void ) { }
@@ -867,16 +883,8 @@ static irqreturn_t ads7846_irq(int irq, void *handle) msecs_to_jiffies(TS_POLL_PERIOD)); } -if (ts->pendown && !ts->stopped) { -struct input_dev *input = ts->input; - -input_report_key (input,BTN_TOUCH ,0 ); -input_report_abs (input,ABS_PRESSURE ,0 ); -input_sync (input); - - ts->pendown = false; -dev_vdbg (&ts->spi->dev,"UP\n" ); - } +if (ts->pendown && !ts->stopped) +ads7846_report_pen_up (ts);return IRQ_HANDLED ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 143/453 Input: ads7846 - fix integer overflow on Rt calculation
In reply to Greg Kroah-HartmanFrom: Oleksij Rempel <[email protected]>
[ Upstream commit 820830ec918f6c3dcd77a54a1c6198ab57407916 ]
In some rare cases the 32 bit Rt value will overflow if z2 and x is max, z1 is minimal value and x_plate_ohms is relatively high (for example 800 ohm). This would happen on some screen age with low pressure.
There are two possible fixes:
- make Rt 64bit
- reorder calculation to avoid overflow
The second variant seems to be preferable, since 64 bit calculation on 32 bit system is a bit more expensive.
--- drivers/input/touchscreen/ads7846.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/input/touchscreen/ads7846.c +3 -2
@@ -801,10 +801,11 @@ static void ads7846_report_state(struct ads7846 *ts)/* compute touch pressure resistance using equation #2 */ Rt = z2; Rt -= z1; - Rt *= x; Rt *= ts->x_plate_ohms; + Rt =DIV_ROUND_CLOSEST (Rt,16 ); + Rt *= x; Rt /= z1; - Rt = (Rt +2047 ) >>12 ; + Rt =DIV_ROUND_CLOSEST (Rt,256 ); }else { Rt =0 ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 144/453 Input: ads7846 - fix unaligned access on 7845
In reply to Greg Kroah-HartmanFrom: Dmitry Torokhov <[email protected]>
[ Upstream commit 03e2c9c782f721b661a0e42b1b58f394b5298544 ]
req->sample[1] is not naturally aligned at word boundary, and therefore we should use get_unaligned_be16() when accessing it.
--- drivers/input/touchscreen/ads7846.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/input/touchscreen/ads7846.c +2 -1
@@ -33,6 +33,7 @@#include <linux/regulator/consumer.h> #include <linux/module.h> #include <asm/irq.h> +#include <asm/unaligned.h> /* * This code has been heavily tested on a Nokia 770, and lightly
@@ -434,7 +435,7 @@ static int ads7845_read12_ser(struct device *dev, unsigned command)if (status ==0 ) {/* BE12 value, then padding */ - status =be16_to_cpu (*((u16 *)&req->sample[1 ])); + status =get_unaligned_be16 (&req->sample[1 ]); status = status >>3 ; status &=0x0fff ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 145/453 usb/max3421: fix return error code in max3421_probe()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit 5a569343e8a618dc73edebe0957eb42f2ab476bd ]
retval may be reassigned to 0 after max3421_of_vbus_en_pin(), if allocate memory failed after this, max3421_probe() cann't return ENOMEM, fix this by moving assign retval afther max3421_probe().
--- drivers/usb/host/max3421-hcd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/usb/host/max3421-hcd.c +2 -1
@@ -1847,7 +1847,7 @@ max3421_probe(struct spi_device *spi)struct max3421_hcd *max3421_hcd;struct usb_hcd *hcd =NULL ;struct max3421_hcd_platform_data *pdata =NULL ; -int retval = -ENOMEM ; +int retval;if (spi_setup (spi) <0 ) {dev_err (&spi->dev,"Unable to setup SPI bus" );
@@ -1889,6 +1889,7 @@ max3421_probe(struct spi_device *spi) goto error; } + retval = -ENOMEM ; hcd =usb_create_hcd (&max3421_hcd_desc, &spi->dev,dev_name (&spi->dev));if (!hcd) {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 146/453 spi: mxs: fix reference leak in mxs_spi_probe
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 03fc41afaa6549baa2dab7a84e1afaf5cadb5b18 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in mxs_spi_probe, so we should fix it.
--- drivers/spi/spi-mxs.c | 1 + 1 file changed, 1 insertion(+)
drivers/spi/spi-mxs.c +1 -0
@@ -608,6 +608,7 @@ static int mxs_spi_probe(struct platform_device *pdev) ret =pm_runtime_get_sync (ssp->dev);if (ret <0 ) { +pm_runtime_put_noidle (ssp->dev);dev_err (ssp->dev,"runtime_get_sync failed\n" ); goto out_pm_runtime_disable; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 147/453 selftests/bpf: Fix broken riscv build
In reply to Greg Kroah-HartmanFrom: Björn Töpel <[email protected]>
[ Upstream commit 6016df8fe874e1cf36f6357d71438b384198ce06 ]
The selftests/bpf Makefile includes system include directories from the host, when building BPF programs. On RISC-V glibc requires that __riscv_xlen is defined. This is not the case for "clang -target bpf", which messes up __WORDSIZE (errno.h -> ... -> wordsize.h) and breaks the build.
By explicitly defining __risc_xlen correctly for riscv, we can workaround this.
--- tools/testing/selftests/bpf/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
tools/testing/selftests/bpf/Makefile +2 -1
@@ -144,7 +144,8 @@ endif # build would have failed anyways. define get_sys_includes $(shell $(1) -v -E - </dev/null 2>&1 \ - | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') + | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \ +$(shell $(1) -dM -E - </dev/null | grep '#define __riscv_xlen ' | sed 's/#define /-D/' | sed 's/ /=/') endef CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG)) BPF_CFLAGS = -I. -I./include/uapi -I../../../include/uapi \
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 148/453 powerpc: Avoid broken GCC __attribute__((optimize))
In reply to Greg Kroah-HartmanFrom: Ard Biesheuvel <[email protected]>
[ Upstream commit a7223f5bfcaeade4a86d35263493bcda6c940891 ]
Commit 7053f80d9696 ("powerpc/64: Prevent stack protection in early boot") introduced a couple of uses of __attribute__((optimize)) with function scope, to disable the stack protector in some early boot code.
Unfortunately, and this is documented in the GCC man pages [0], overriding function attributes for optimization is broken, and is only supported for debug scenarios, not for production: the problem appears to be that setting GCC -f flags using this method will cause it to forget about some or all other optimization settings that have been applied.
So the only safe way to disable the stack protector is to disable it for the entire source file.
[0] https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
--- arch/powerpc/kernel/Makefile | 3 +++ arch/powerpc/kernel/paca.c | 4 ++-- arch/powerpc/kernel/setup.h | 6 ------ arch/powerpc/kernel/setup_64.c | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-)
arch/powerpc/kernel/Makefile +3 -0
@@ -181,6 +181,9 @@ KCOV_INSTRUMENT_cputable.o := n KCOV_INSTRUMENT_setup_64.o := n KCOV_INSTRUMENT_paca.o := n +CFLAGS_setup_64.o += -fno-stack-protector +CFLAGS_paca.o += -fno-stack-protector + extra-$(CONFIG_PPC_FPU) += fpu.o extra-$(CONFIG_ALTIVEC) += vector.o extra-$(CONFIG_PPC64) += entry_64.o
arch/powerpc/kernel/paca.c +2 -2
@@ -176,7 +176,7 @@ static struct slb_shadow * __init new_slb_shadow(int cpu, unsigned long limit)struct paca_struct **paca_ptrs__read_mostly ;EXPORT_SYMBOL (paca_ptrs); -void __init __nostackprotector initialise_paca(struct paca_struct *new_paca, int cpu) +void __init initialise_paca (struct paca_struct *new_paca,int cpu) {#ifdef CONFIG_PPC_PSERIES new_paca->lppaca_ptr =NULL ;
@@ -205,7 +205,7 @@ void __init __nostackprotector initialise_paca(struct paca_struct *new_paca, int }/* Put the paca pointer into r13 and SPRG_PACA */ -void __nostackprotector setup_paca(struct paca_struct *new_paca) +void setup_paca (struct paca_struct *new_paca) {/* Setup r13 */ local_paca = new_paca;
arch/powerpc/kernel/setup.h +0 -6
@@ -8,12 +8,6 @@#ifndef __ARCH_POWERPC_KERNEL_SETUP_H#define __ARCH_POWERPC_KERNEL_SETUP_H -#ifdef CONFIG_CC_IS_CLANG -#define __nostackprotector -#else -#define __nostackprotector __attribute__((__optimize__("no-stack-protector"))) -#endif -void initialize_cache_info (void );void irqstack_early_init (void );
arch/powerpc/kernel/setup_64.c +1 -1
@@ -284,7 +284,7 @@ void __init record_spr_defaults(void)* device-tree is not accessible via normal means at this point. */ -void __init __nostackprotector early_setup(unsigned long dt_ptr) +void __init early_setup (unsigned long dt_ptr) {static __initdata struct paca_struct boot_paca;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 149/453 powerpc/feature: Fix CPU_FTRS_ALWAYS by removing CPU_FTRS_GENERIC_32
In reply to Greg Kroah-HartmanFrom: Christophe Leroy <[email protected]>
[ Upstream commit 78665179e569c7e1fe102fb6c21d0f5b6951f084 ]
On 8xx, we get the following features:
[ 0.000000] cpu_features = 0x0000000000000100 [ 0.000000] possible = 0x0000000000000120 [ 0.000000] always = 0x0000000000000000
This is not correct. As CONFIG_PPC_8xx is mutually exclusive with all other configurations, the three lines should be equal.
The problem is due to CPU_FTRS_GENERIC_32 which is taken when CONFIG_BOOK3S_32 is NOT selected. This CPU_FTRS_GENERIC_32 is pointless because there is no generic configuration supporting all 32 bits but book3s/32.
Remove this pointless generic features definition to unbreak the calculation of 'possible' features and 'always' features.
--- arch/powerpc/include/asm/cputable.h | 5 ----- 1 file changed, 5 deletions(-)
arch/powerpc/include/asm/cputable.h +0 -5
@@ -407,7 +407,6 @@ static inline void cpu_feature_keys_init(void) { } CPU_FTR_DBELL | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ CPU_FTR_DEBUG_LVL_EXC | CPU_FTR_EMB_HV | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_CELL_TB_BUG | CPU_FTR_SMT) -#define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN)/* 64-bit CPUs */ #define CPU_FTRS_PPC970 (CPU_FTR_LWSYNC | \
@@ -507,8 +506,6 @@ enum { CPU_FTRS_7447 | CPU_FTRS_7447A | CPU_FTRS_82XX | CPU_FTRS_G2_LE | CPU_FTRS_E300 | CPU_FTRS_E300C2 | CPU_FTRS_CLASSIC32 | -#else - CPU_FTRS_GENERIC_32 |#endif #ifdef CONFIG_PPC_8xx CPU_FTRS_8XX |
@@ -585,8 +582,6 @@ enum { CPU_FTRS_7447 & CPU_FTRS_7447A & CPU_FTRS_82XX & CPU_FTRS_G2_LE & CPU_FTRS_E300 & CPU_FTRS_E300C2 & CPU_FTRS_CLASSIC32 & -#else - CPU_FTRS_GENERIC_32 &#endif #ifdef CONFIG_PPC_8xx CPU_FTRS_8XX &
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 150/453 EDAC/mce_amd: Use struct cpuinfo_x86.cpu_die_id for AMD NodeId
In reply to Greg Kroah-HartmanFrom: Yazen Ghannam <[email protected]>
[ Upstream commit 8de0c9917cc1297bc5543b61992d5bdee4ce621a ]
The edac_mce_amd module calls decode_dram_ecc() on AMD Family17h and later systems. This function is used in amd64_edac_mod to do system-specific decoding for DRAM ECC errors. The function takes a "NodeId" as a parameter.
In AMD documentation, NodeId is used to identify a physical die in a system. This can be used to identify a node in the AMD_NB code and also it is used with umc_normaddr_to_sysaddr().
However, the input used for decode_dram_ecc() is currently the NUMA node of a logical CPU. In the default configuration, the NUMA node and physical die will be equivalent, so this doesn't have an impact.
But the NUMA node configuration can be adjusted with optional memory interleaving modes. This will cause the NUMA node enumeration to not match the physical die enumeration. The mismatch will cause the address translation function to fail or report incorrect results.
Use struct cpuinfo_x86.cpu_die_id for the node_id parameter to ensure the physical ID is used.
--- drivers/edac/mce_amd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/edac/mce_amd.c +1 -1
@@ -975,7 +975,7 @@ static void decode_smca_error(struct mce *m) }if (bank_type ==SMCA_UMC && xec ==0 && decode_dram_ecc) -decode_dram_ecc (cpu_to_node (m->extcpu), m); +decode_dram_ecc (topology_die_id (m->extcpu), m); }static inline void amd_decode_err_code (u16 ec)
Signature · 1 line
2.27.0
Re: [PATCH 5.4 150/453] EDAC/mce_amd: Use struct cpuinfo_x86.cpu_die_id for AMD NodeId
Quoted 39 lines · Greg Kroah-Hartman
From: Yazen Ghannam <[email protected]>
[ Upstream commit
8de0c9917cc1297bc5543b61992d5bdee4ce621a]The
edac_mce_amdmodule callsdecode_dram_ecc()on AMD Family17h and later systems. This function is used inamd64_edac_modto do system-specific decoding for DRAM ECC errors. The function takes a "NodeId" as a parameter.In AMD documentation, NodeId is used to identify a physical die in a system. This can be used to identify a node in the
AMD_NBcode and also it is used withumc_normaddr_to_sysaddr().However, the input used for
decode_dram_ecc()is currently the NUMA node of a logical CPU. In the default configuration, the NUMA node and physical die will be equivalent, so this doesn't have an impact.But the NUMA node configuration can be adjusted with optional memory interleaving modes. This will cause the NUMA node enumeration to not match the physical die enumeration. The mismatch will cause the address translation function to fail or report incorrect results.
Use struct cpuinfo_x86.cpu_die_id for the
node_idparameter to ensure the physical ID is used.Fixes fbe63acf62f5 ("EDAC, mce_amd: Use cpu_to_node() to find the node ID")Signed-off-by Yazen Ghannam <[email protected]>Signed-off-by Borislav Petkov <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- drivers/edac/mce_amd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/edac/mce_amd.c +0
-0
drivers/edac/mce_amd.c static void decode_smca_error(struct mce *m) · line 981
Quoted 8 lines
drivers/edac/mce_amd.c +1
-1@@ -975,7 +975,7 @@ static void decode_smca_error(struct mce *m) }if (bank_type ==SMCA_UMC && xec ==0 && decode_dram_ecc) -decode_dram_ecc (cpu_to_node (m->extcpu), m); +decode_dram_ecc (topology_die_id (m->extcpu), m); }static inline void amd_decode_err_code (u16 ec)
I believe this one needs:
028c221ed190 ("x86/CPU/AMD: Save AMD NodeId as cpu_die_id")
to be backported too otherwise ->cpu_die_id will be uninitialized.
Signature · 4 lines
Regards/Gruss,
Boris.
SUSE Software Solutions Germany GmbH, GF: Felix Imendörffer, HRB 36809, AG NürnbergSasha Levin
maintainerRe: [PATCH 5.4 150/453] EDAC/mce_amd: Use struct cpuinfo_x86.cpu_die_id for AMD NodeId
Quoted 47 lines · Borislav Petkov
Quoted 46 lines · Greg Kroah-Hartman
From: Yazen Ghannam <[email protected]>
[ Upstream commit
8de0c9917cc1297bc5543b61992d5bdee4ce621a]The
edac_mce_amdmodule callsdecode_dram_ecc()on AMD Family17h and later systems. This function is used inamd64_edac_modto do system-specific decoding for DRAM ECC errors. The function takes a "NodeId" as a parameter.In AMD documentation, NodeId is used to identify a physical die in a system. This can be used to identify a node in the
AMD_NBcode and also it is used withumc_normaddr_to_sysaddr().However, the input used for
decode_dram_ecc()is currently the NUMA node of a logical CPU. In the default configuration, the NUMA node and physical die will be equivalent, so this doesn't have an impact.But the NUMA node configuration can be adjusted with optional memory interleaving modes. This will cause the NUMA node enumeration to not match the physical die enumeration. The mismatch will cause the address translation function to fail or report incorrect results.
Use struct cpuinfo_x86.cpu_die_id for the
node_idparameter to ensure the physical ID is used.Fixes fbe63acf62f5 ("EDAC, mce_amd: Use cpu_to_node() to find the node ID")Signed-off-by Yazen Ghannam <[email protected]>Signed-off-by Borislav Petkov <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- drivers/edac/mce_amd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/edac/mce_amd.c +1
-1@@ -975,7 +975,7 @@ static void decode_smca_error(struct mce *m) }if (bank_type ==SMCA_UMC && xec ==0 && decode_dram_ecc) -decode_dram_ecc (cpu_to_node (m->extcpu), m); +decode_dram_ecc (topology_die_id (m->extcpu), m); }
Quoted 7 lines
drivers/edac/mce_amd.c static void decode_smca_error(struct mce *m) · line 981
Quoted 1 line
drivers/edac/mce_amd.c +0
-0static inline void amd_decode_err_code (u16 ec)I believe this one needs:
028c221ed190("x86/CPU/AMD: Save AMD NodeId ascpu_die_id")to be backported too otherwise ->cpu_die_id will be uninitialized.
I'll take it, thanks.
Signature · 2 lines
Thanks, Sasha
Greg Kroah-Hartman
maintainerPATCH 151/453 crypto: crypto4xx - Replace bitwise OR with logical OR in crypto4xx_build_pd
In reply to Greg Kroah-HartmanFrom: Nathan Chancellor <[email protected]>
[ Upstream commit 5bdad829c31a09069fd508534f03c2ea1576ac75 ]
Clang warns:
drivers/crypto/amcc/crypto4xx_core.c:921:60: warning: operator '?:' has lower precedence than '|'; '|' will be evaluated first [-Wbitwise-conditional-parentheses]
(crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AEAD) ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
drivers/crypto/amcc/crypto4xx_core.c:921:60: note: place parentheses
around the '|' expression to silence this warning
(crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AEAD) ?
^
)
drivers/crypto/amcc/crypto4xx_core.c:921:60: note: place parentheses
around the '?:' expression to evaluate it first
(crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AEAD) ?
^
(1 warning generated.
It looks like this should have been a logical OR so that PD_CTL_HASH_FINAL gets added to the w bitmask if crypto_tfm_alg_type is either CRYPTO_ALG_TYPE_AHASH or CRYPTO_ALG_TYPE_AEAD. Change the operator so that everything works properly.
--- drivers/crypto/amcc/crypto4xx_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/amcc/crypto4xx_core.c +1 -1
@@ -916,7 +916,7 @@ int crypto4xx_build_pd(struct crypto_async_request *req, } pd->pd_ctl.w =PD_CTL_HOST_READY | - ((crypto_tfm_alg_type (req->tfm) ==CRYPTO_ALG_TYPE_AHASH ) | + ((crypto_tfm_alg_type (req->tfm) ==CRYPTO_ALG_TYPE_AHASH ) || (crypto_tfm_alg_type (req->tfm) ==CRYPTO_ALG_TYPE_AEAD ) ?PD_CTL_HASH_FINAL :0 ); pd->pd_ctl_len.w =0x00400000 | (assoclen + datalen);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 152/453 crypto: omap-aes - Fix PM disable depth imbalance in omap_aes_probe
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit ff8107200367f4abe0e5bce66a245e8d0f2d229e ]
The pm_runtime_enable will increase power disable depth. Thus a pairing decrement is needed on the error handling path to keep it balanced according to context.
--- drivers/crypto/omap-aes.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/crypto/omap-aes.c +2 -1
@@ -1157,7 +1157,7 @@ static int omap_aes_probe(struct platform_device *pdev)if (err <0 ) {dev_err (dev,"%s: failed to get_sync(%d)\n" , __func__, err); - goto err_res; + goto err_pm_disable; }omap_aes_dma_stop (dd);
@@ -1267,6 +1267,7 @@ err_engine:omap_aes_dma_cleanup (dd); err_irq:tasklet_kill (&dd->done_task); +err_pm_disable:pm_runtime_disable (dev); err_res: dd =NULL ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 153/453 spi: fix resource leak for drivers without .remove callback
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit 440408dbadfe47a615afd0a0a4a402e629be658a ]
Consider an spi driver with a .probe but without a .remove callback (e.g. rtc-ds1347). The function spi_drv_probe() is called to bind a device and so dev_pm_domain_attach() is called. As there is no remove callback spi_drv_remove() isn't called at unbind time however and so calling dev_pm_domain_detach() is missed and the pm domain keeps active.
To fix this always use both spi_drv_probe() and spi_drv_remove() and make them handle the respective callback not being set. This has the side effect that for a (hypothetical) driver that has neither .probe nor remove the clk and pm domain setup is done.
--- drivers/spi/spi.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)
drivers/spi/spi.c +10 -9
@@ -405,9 +405,11 @@ static int spi_drv_probe(struct device *dev)if (ret)return ret; - ret = sdrv->probe (spi); -if (ret) -dev_pm_domain_detach (dev, true); +if (sdrv->probe) { + ret = sdrv->probe (spi); +if (ret) +dev_pm_domain_detach (dev, true); + }return ret; }
@@ -415,9 +417,10 @@ static int spi_drv_probe(struct device *dev)static int spi_drv_remove (struct device *dev) {const struct spi_driver *sdrv =to_spi_driver (dev->driver); -int ret; +int ret =0 ; - ret = sdrv->remove (to_spi_device (dev)); +if (sdrv->remove) + ret = sdrv->remove (to_spi_device (dev));dev_pm_domain_detach (dev, true);return ret;
@@ -442,10 +445,8 @@ int __spi_register_driver(struct module *owner, struct spi_driver *sdrv) { sdrv->driver.owner = owner; sdrv->driver.bus = &spi_bus_type; -if (sdrv->probe) - sdrv->driver.probe = spi_drv_probe; -if (sdrv->remove) - sdrv->driver.remove = spi_drv_remove; + sdrv->driver.probe = spi_drv_probe; + sdrv->driver.remove = spi_drv_remove;if (sdrv->shutdown) sdrv->driver.shutdown = spi_drv_shutdown;return driver_register (&sdrv->driver);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 154/453 soc: ti: knav_qmss: fix reference leak in knav_queue_probe
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit ec8684847d8062496c4619bc3fcff31c19d56847 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in knav_queue_probe, so we should fix it.
--- drivers/soc/ti/knav_qmss_queue.c | 1 + 1 file changed, 1 insertion(+)
drivers/soc/ti/knav_qmss_queue.c +1 -0
@@ -1791,6 +1791,7 @@ static int knav_queue_probe(struct platform_device *pdev)pm_runtime_enable (&pdev->dev); ret =pm_runtime_get_sync (&pdev->dev);if (ret <0 ) { +pm_runtime_put_noidle (&pdev->dev);dev_err (dev,"Failed to enable QMSS\n" );return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 155/453 soc: ti: Fix reference imbalance in knav_dma_probe
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit b4fa73358c306d747a2200aec6f7acb97e5750e6 ]
The patch fix two reference leak.
1) pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to call put operation will result in reference leak.
2) The pm_runtime_enable will increase power disable depth. Thus a pairing decrement is needed on the error handling path to keep it balanced.
We fix it by: 1) adding call pm_runtime_put_noidle or pm_runtime_put_sync in error handling. 2) adding pm_runtime_disable in error handling, to keep usage counter and disable depth balanced.
--- drivers/soc/ti/knav_dma.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
drivers/soc/ti/knav_dma.c +11 -2
@@ -759,8 +759,9 @@ static int knav_dma_probe(struct platform_device *pdev)pm_runtime_enable (kdev->dev); ret =pm_runtime_get_sync (kdev->dev);if (ret <0 ) { +pm_runtime_put_noidle (kdev->dev);dev_err (kdev->dev,"unable to enable pktdma, err %d\n" , ret); -return ret; + goto err_pm_disable; }/* Initialise all packet dmas */
@@ -774,7 +775,8 @@ static int knav_dma_probe(struct platform_device *pdev)if (list_empty (&kdev->list)) {dev_err (dev,"no valid dma instance\n" ); -return -ENODEV ; + ret = -ENODEV ; + goto err_put_sync; } debugfs_create_file("knav_dma", S_IFREG | S_IRUGO, NULL, NULL,
@@ -782,6 +784,13 @@ static int knav_dma_probe(struct platform_device *pdev) device_ready = true;return ret; + +err_put_sync: +pm_runtime_put_sync (kdev->dev); +err_pm_disable: +pm_runtime_disable (kdev->dev); + +return ret; }static int knav_dma_remove (struct platform_device *pdev)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 156/453 drivers: soc: ti: knav_qmss_queue: Fix error return code in knav_queue_probe
In reply to Greg Kroah-HartmanFrom: Zhihao Cheng <[email protected]>
[ Upstream commit 4cba398f37f868f515ff12868418dc28574853a1 ]
Fix to return the error code from of_get_child_by_name() instaed of 0 in knav_queue_probe().
--- drivers/soc/ti/knav_qmss_queue.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/soc/ti/knav_qmss_queue.c +2 -1
@@ -1859,9 +1859,10 @@ static int knav_queue_probe(struct platform_device *pdev)if (ret) goto err; - regions =of_get_child_by_name (node,"descriptor-regions" ); + regions =of_get_child_by_name (node,"descriptor-regions" );if (!regions) {dev_err (dev,"descriptor-regions not specified\n" ); + ret = -ENODEV ; goto err; } ret =knav_queue_setup_regions (kdev, regions);
Signature · 1 line
2.27.0