Linux 5.10.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.11 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/ABI/testing/sysfs-class-devlink | 4 Documentation/ABI/testing/sysfs-devices-consumer | 5 Documentation/ABI/testing/sysfs-devices-supplier | 5 Documentation/admin-guide/device-mapper/dm-integrity.rst | 12 - Documentation/admin-guide/kernel-parameters.txt | 4 Makefile | 2 arch/arm/xen/enlighten.c | 2 arch/arm64/include/asm/atomic.h | 10 - arch/arm64/kernel/signal.c | 7 arch/arm64/kernel/syscall.c | 9 arch/powerpc/include/asm/exception-64s.h | 13 + arch/powerpc/include/asm/feature-fixups.h | 10 + arch/powerpc/kernel/entry_64.S | 2 arch/powerpc/kernel/exceptions-64s.S | 19 + arch/powerpc/kernel/vmlinux.lds.S | 32 +-- arch/powerpc/lib/feature-fixups.c | 24 ++ arch/riscv/Kconfig | 6 arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts | 2 arch/riscv/configs/defconfig | 2 arch/riscv/kernel/cacheinfo.c | 11 + arch/riscv/kernel/entry.S | 9 arch/riscv/kernel/time.c | 3 arch/riscv/mm/init.c | 16 + arch/sh/Kconfig | 1 arch/sh/drivers/dma/Kconfig | 3 arch/x86/entry/common.c | 10 - arch/x86/hyperv/hv_init.c | 4 arch/x86/include/asm/fpu/api.h | 15 + arch/x86/include/asm/mshyperv.h | 2 arch/x86/include/asm/topology.h | 4 arch/x86/kernel/cpu/amd.c | 4 arch/x86/kernel/cpu/mshyperv.c | 18 + arch/x86/kernel/cpu/topology.c | 2 arch/x86/kernel/fpu/core.c | 9 arch/x86/kernel/setup.c | 20 -- arch/x86/kernel/sev-es.c | 14 + arch/x86/lib/mmx_32.c | 20 +- arch/x86/xen/enlighten_hvm.c | 11 + arch/x86/xen/smp_hvm.c | 29 +-- crypto/xor.c | 2 drivers/acpi/scan.c | 2 drivers/base/core.c | 44 +++- drivers/base/dd.c | 2 drivers/clk/tegra/clk-tegra30.c | 2 drivers/counter/ti-eqep.c | 35 --- drivers/crypto/Kconfig | 1 drivers/gpio/Kconfig | 3 drivers/gpio/gpiolib-cdev.c | 145 +++++++-------- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 drivers/gpu/drm/amd/amdgpu/psp_gfx_if.h | 2 drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 11 - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 2 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c | 4 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 7 drivers/gpu/drm/drm_atomic_helper.c | 2 drivers/gpu/drm/drm_syncobj.c | 8 drivers/gpu/drm/i915/display/intel_ddi.c | 8 drivers/gpu/drm/i915/display/intel_dp.c | 33 +-- drivers/gpu/drm/i915/display/intel_dp.h | 5 drivers/gpu/drm/i915/display/intel_dp_mst.c | 2 drivers/gpu/drm/i915/display/intel_hdcp.c | 9 drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 9 drivers/gpu/drm/i915/gt/intel_lrc.c | 3 drivers/gpu/drm/i915/gt/intel_timeline.c | 10 - drivers/gpu/drm/i915/i915_request.h | 37 +++ drivers/gpu/drm/nouveau/dispnv50/disp.c | 4 drivers/gpu/drm/nouveau/dispnv50/disp.h | 2 drivers/gpu/drm/nouveau/dispnv50/wimmc37b.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c | 8 drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c | 10 - drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c | 10 - drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c | 6 drivers/gpu/drm/vc4/vc4_hdmi.c | 1 drivers/hid/Kconfig | 1 drivers/hid/hid-ids.h | 1 drivers/hid/hid-input.c | 2 drivers/hid/hid-logitech-dj.c | 4 drivers/hid/hid-logitech-hidpp.c | 2 drivers/hid/hid-multitouch.c | 4 drivers/hv/vmbus_drv.c | 2 drivers/hwtracing/intel_th/pci.c | 5 drivers/hwtracing/stm/heartbeat.c | 6 drivers/i2c/busses/Kconfig | 1 drivers/i2c/busses/i2c-octeon-core.c | 2 drivers/i2c/busses/i2c-tegra-bpmp.c | 2 drivers/i2c/busses/i2c-tegra.c | 2 drivers/iio/adc/ti_am335x_adc.c | 6 drivers/iio/common/st_sensors/st_sensors_trigger.c | 31 +-- drivers/iio/dac/ad5504.c | 4 drivers/iio/temperature/mlx90632.c | 6 drivers/infiniband/core/cma_configfs.c | 4 drivers/infiniband/core/ucma.c | 135 +++++++------ drivers/infiniband/core/umem.c | 2 drivers/interconnect/imx/imx8mq.c | 2 drivers/irqchip/irq-mips-cpu.c | 7 drivers/lightnvm/core.c | 3 drivers/md/Kconfig | 1 drivers/md/dm-crypt.c | 6 drivers/md/dm-integrity.c | 32 +++ drivers/md/dm-table.c | 15 + drivers/mmc/core/queue.c | 4 drivers/mmc/host/sdhci-brcmstb.c | 6 drivers/mmc/host/sdhci-of-dwcmshc.c | 27 ++ drivers/mmc/host/sdhci-xenon.c | 7 drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 2 drivers/mtd/nand/raw/nandsim.c | 7 drivers/net/can/dev.c | 4 drivers/net/can/usb/peak_usb/pcan_usb_fd.c | 8 drivers/net/can/vxcan.c | 6 drivers/net/dsa/b53/b53_common.c | 2 drivers/net/dsa/mv88e6xxx/global1_vtu.c | 4 drivers/net/ethernet/broadcom/bcmsysport.c | 6 drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 6 drivers/net/ethernet/mscc/ocelot.c | 23 +- drivers/net/ethernet/mscc/ocelot_net.c | 4 drivers/net/ethernet/renesas/sh_eth.c | 4 drivers/nvme/host/pci.c | 105 ++++++---- drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 2 drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 4 drivers/pinctrl/pinctrl-ingenic.c | 26 +- drivers/pinctrl/qcom/pinctrl-msm.c | 96 ++++++--- drivers/pinctrl/qcom/pinctrl-msm.h | 2 drivers/platform/x86/hp-wmi.c | 3 drivers/platform/x86/i2c-multi-instantiate.c | 31 ++- drivers/platform/x86/ideapad-laptop.c | 15 + drivers/platform/x86/intel-vbtn.c | 6 drivers/scsi/megaraid/megaraid_sas_base.c | 6 drivers/scsi/qedi/qedi_main.c | 4 drivers/scsi/scsi_debug.c | 5 drivers/scsi/sd.c | 4 drivers/scsi/ufs/Kconfig | 1 drivers/scsi/ufs/ufshcd.c | 35 +-- drivers/target/target_core_user.c | 11 - drivers/tty/n_tty.c | 7 drivers/tty/serial/mvebu-uart.c | 10 - drivers/tty/serial/sifive.c | 1 drivers/tty/tty_io.c | 51 ++--- drivers/usb/cdns3/cdns3-imx.c | 17 - drivers/usb/gadget/udc/aspeed-vhub/epn.c | 5 drivers/usb/gadget/udc/bdc/Kconfig | 2 drivers/usb/gadget/udc/core.c | 13 + drivers/usb/gadget/udc/dummy_hcd.c | 10 - drivers/usb/host/ehci-hcd.c | 12 + drivers/usb/host/ehci-hub.c | 3 drivers/usb/host/xhci-ring.c | 2 drivers/usb/host/xhci-tegra.c | 7 drivers/xen/events/events_base.c | 10 - drivers/xen/platform-pci.c | 1 drivers/xen/xenbus/xenbus.h | 1 drivers/xen/xenbus/xenbus_comms.c | 8 drivers/xen/xenbus/xenbus_probe.c | 81 ++++++-- fs/btrfs/backref.c | 2 fs/btrfs/block-group.c | 3 fs/btrfs/disk-io.c | 2 fs/btrfs/extent-tree.c | 10 - fs/btrfs/print-tree.c | 10 - fs/btrfs/print-tree.h | 2 fs/btrfs/send.c | 15 + fs/btrfs/volumes.c | 2 fs/cachefiles/rdwr.c | 2 fs/cifs/transport.c | 4 fs/fs-writeback.c | 24 +- fs/io_uring.c | 43 +++- fs/kernfs/file.c | 65 ++---- fs/nfsd/nfs4xdr.c | 14 + fs/pipe.c | 1 fs/proc/proc_sysctl.c | 7 include/asm-generic/bitops/atomic.h | 6 include/linux/device.h | 12 + include/linux/tty.h | 1 include/net/inet_connection_sock.h | 3 include/net/sock.h | 17 + include/xen/xenbus.h | 2 kernel/bpf/bpf_inode_storage.c | 5 kernel/bpf/syscall.c | 6 kernel/locking/lockdep.c | 2 kernel/printk/printk.c | 4 kernel/printk/printk_ringbuffer.c | 2 lib/iov_iter.c | 2 mm/kasan/init.c | 23 +- mm/memcontrol.c | 4 mm/migrate.c | 23 +- net/bpf/test_run.c | 3 net/core/dev.c | 5 net/core/devlink.c | 4 net/core/gen_estimator.c | 11 - net/core/skbuff.c | 6 net/ipv4/inet_connection_sock.c | 1 net/ipv4/netfilter/ipt_rpfilter.c | 2 net/ipv4/tcp.c | 1 net/ipv4/tcp_input.c | 6 net/ipv4/tcp_ipv4.c | 29 +-- net/ipv4/tcp_output.c | 1 net/ipv4/tcp_timer.c | 36 +-- net/ipv4/udp.c | 3 net/ipv6/addrconf.c | 3 net/sched/cls_flower.c | 22 +- net/sched/cls_tcindex.c | 8 net/sched/sch_api.c | 3 net/sunrpc/svcsock.c | 86 ++++++++ net/xdp/xsk.c | 4 sound/core/seq/oss/seq_oss_synth.c | 3 sound/pci/hda/hda_codec.c | 24 -- sound/pci/hda/hda_tegra.c | 2 sound/pci/hda/patch_realtek.c | 8 sound/pci/hda/patch_via.c | 1 sound/soc/codecs/rt711.c | 6 sound/soc/intel/boards/haswell.c | 1 sound/soc/sof/intel/hda-codec.c | 18 - sound/soc/sof/intel/hda-dsp.c | 6 tools/gpio/gpio-event-mon.c | 4 tools/gpio/gpio-watch.c | 5 tools/lib/perf/evlist.c | 17 - tools/lib/perf/tests/test-cpumap.c | 2 tools/lib/perf/tests/test-evlist.c | 3 tools/lib/perf/tests/test-evsel.c | 2 tools/lib/perf/tests/test-threadmap.c | 2 tools/testing/selftests/net/fib_tests.sh | 1 tools/testing/selftests/powerpc/mm/pkey_exec_prot.c | 2 tools/testing/selftests/powerpc/mm/pkey_siginfo.c | 2 221 files changed, 1591 insertions(+), 884 deletions(-)
Adrian Hunter (1):
perf evlist: Fix id index for heterogeneous systems
Aharon Landau (1):
RDMA/umem: Avoid undefined behavior of rounddown_pow_of_two()
Al Cooper (1):
mmc: sdhci-brcmstb: Fix mmc timeout errors on S5 suspend
Alan Stern (1):
USB: gadget: dummy-hcd: Fix errors in port-reset handling
Alban Bedel (1):
net: mscc: ocelot: Fix multicast to the CPU port
Alex Leibovich (1):
mmc: sdhci-xenon: fix 1.8v regulator stabilization
Alexander Lobakin (1):
skbuff: back tiny skbs with kmalloc() in __netdev_alloc_skb() too
Alexander Shishkin (1):
intel_th: pci: Add Alder Lake-P support
Alexandru Ardelean (1):
iio: adc: ti_am335x_adc: remove omitted iio_kfifo_free()
Andy Lutomirski (2):
x86/fpu: Add kernel_fpu_begin_mask() to selectively initialize state x86/mmx: Use KFPU_387 for MMX string operations
Anshuman Gupta (2):
drm/i915/hdcp: Update CP property in update_pipe drm/i915/hdcp: Get conn while content_type changed
Anthony Iliopoulos (1):
dm integrity: select CRYPTO_SKCIPHER
Ariel Marcovitch (1):
powerpc: Fix alignment bug within the init sections
Arnd Bergmann (4):
HID: sony: select CONFIG_CRC32
arm64: make atomic helpers __always_inline
scsi: megaraid_sas: Fix MEGASAS_IOC_FIRMWARE regression
crypto: omap-sham - Fix link error without crypto-engine
Atish Patra (2):
RISC-V: Set current memblock limit
RISC-V: Fix maximum allowed phsyical memory for RV32
Ben Skeggs (5):
drm/nouveau/bios: fix issue shadowing expansion ROMs drm/nouveau/privring: ack interrupts the same way as RM drm/nouveau/i2c/gm200: increase width of aux semaphore owner fields drm/nouveau/mmu: fix vram heap sizing drm/nouveau/kms/nv50-: fix case where notifier buffer is at offset 0
Billy Tsai (1):
pinctrl: aspeed: g6: Fix PWMG0 pinctrl setting
Borislav Petkov (1):
x86/topology: Make __max_die_per_package available unconditionally
Can Guo (1):
scsi: ufs: Correct the LUN used in eh_device_reset_handler() callback
Cezary Rojewski (1):
ASoC: Intel: haswell: Add missing pm_ops
Chris Chiu (1):
ALSA: hda/realtek - Limit int mic boost on Acer Aspire E5-575T
Chris Wilson (2):
drm/i915/gt: Prevent use of engine->wa_ctx after error
drm/i915: Check for rq->hwsp validity after acquiring RCU lockChristoph Hellwig (6):
iov_iter: fix the uaccess area in copy_compat_iovec_from_user
nvme-pci: refactor nvme_unmap_data
nvme-pci: fix error unwind in nvme_map_data
kernfs: implement ->read_iter
kernfs: implement ->write_iter
kernfs: wire up ->splice_read and ->splice_write
Chuck Lever (1):
SUNRPC: Handle TCP socket sends with kernel_sendpage() again
Cong Wang (1):
cls_flower: call nla_ok() before nla_next()
Damien Le Moal (3):
riscv: Fix kernel time_init()
riscv: Fix sifive serial driver
riscv: Enable interrupts during syscalls with M-Mode
Dan Carpenter (1):
net: dsa: b53: fix an off by one in checking "vlan->vid"
Daniel Vetter (1):
drm/syncobj: Fix use-after-free
David Lechner (1):
counter:ti-eqep: remove floor
David Woodhouse (3):
xen: Fix event channel callback via INTX/GSI
x86/xen: Add xen_no_vector_callback option to test PCI INTX delivery x86/xen: Fix xen_hvm_smp_init() when vector callback not available
Dexuan Cui (1):
x86/hyperv: Fix kexec panic/hang issues
Dinghao Liu (1):
scsi: scsi_debug: Fix memleak in scsi_debug_init()
Douglas Anderson (4):
pinctrl: qcom: Allow SoCs to specify a GPIO function that's not 0
pinctrl: qcom: No need to read-modify-write the interrupt status
pinctrl: qcom: Properly clear "intr_ack_high" interrupts when unmasking
pinctrl: qcom: Don't clear pending interrupts when enabling
Enke Chen (1):
tcp: fix TCP_USER_TIMEOUT with zero window
Eric Biggers (1):
fs: fix lazytime expiration handling in __writeback_single_inode()
Eric Dumazet (4):
net_sched: gen_estimator: support large ewma log
net_sched: avoid shift-out-of-bounds in tcindex_set_parms()
net_sched: reject silly cell_log in qdisc_get_rtab()
tcp: do not mess with cloned skbs in tcp_add_backlog()
Eugene Korenevsky (1):
ehci: fix EHCI host controller initialization sequence
Ewan D. Milne (1):
scsi: sd: Suppress spurious errors when WRITE SAME is being disabled
Filipe Laíns (1):
HID: logitech-dj: add the G602 receiver
Filipe Manana (1):
btrfs: send: fix invalid clone operations when cloning from the same file and root
Geert Uytterhoeven (1):
sh_eth: Fix power down vs. is_opened flag ordering
Greg Kroah-Hartman (1):
Linux 5.10.11
Guillaume Nault (2):
netfilter: rpfilter: mask ecn bits before fib lookup
udp: mask TOS bits in udp_v4_early_demux()
Hangbin Liu (1):
selftests: net: fib_tests: remove duplicate log test
Hannes Reinecke (1):
dm: avoid filesystem lookup in dm_get_dev_t()
Hans de Goede (3):
ACPI: scan: Make acpi_bus_get_device() clear return pointer on error platform/x86: intel-vbtn: Drop HP Stream x360 Convertible PC 11 from allow-list platform/x86: hp-wmi: Don't log a warning on HPWMI_RET_UNKNOWN_COMMAND errors
Heikki Krogerus (1):
platform/x86: i2c-multi-instantiate: Don't create platform device for INT3515 ACPI nodes
Hsin-Yi Wang (1):
pinctrl: mediatek: Fix fallback call path
Huang Rui (1):
drm/amdgpu: remove gpu info firmware of green sardine
Hyunwook (Wooky) Baek (1):
x86/sev-es: Handle string port IO to kernel memory properly
Ian Rogers (2):
libperf tests: If a test fails return non-zero libperf tests: Fail when failing to get a tracepoint id
Ignat Korchagin (1):
dm crypt: fix copy and paste bug in crypt_alloc_req_aead
JC Kuo (1):
xhci: tegra: Delay for disabling LFPS detector
Jaegeuk Kim (1):
scsi: ufs: Fix tm request when non-fatal error happens
Jason Gunthorpe (1):
RDMA/ucma: Do not miss ctx destruction steps in some cases
Jens Axboe (2):
io_uring: iopoll requests should also wake task ->in_idle state
io_uring: fix SQPOLL IORING_OP_CLOSE cancelation state
Jeremy Cline (1):
drm/amdkfd: Fix out-of-bounds read in kdf_create_vcrat_image_cpu()
Jiaxun Yang (1):
platform/x86: ideapad-laptop: Disable touchpad_switch for ELAN0634
Jinyang He (1):
sh: Remove unused HAVE_COPY_THREAD_TLS macro
Jiri Olsa (1):
bpf: Prevent double bpf_prog_put call from bpf_tracing_prog_attach
Jisheng Zhang (1):
mmc: sdhci-of-dwcmshc: fix rpmb access
Johannes Berg (1):
fs/pipe: allow sendfile() to pipe again
John Ogness (2):
printk: ringbuffer: fix line counting
printk: fix kmsg_dump_get_buffer length calulations
Josef Bacik (5):
btrfs: don't get an EINTR during drop_snapshot for reloc
btrfs: do not double free backref nodes on error
btrfs: fix lockdep splat in btrfs_recover_relocation
btrfs: don't clear ret in btrfs_start_dirty_block_groups
btrfs: print the actual offset in btrfs_root_name
KP Singh (1):
bpf: Local storage helpers should check nullness of owner ptr passed
Kai Vehmanen (1):
ASoC: SOF: Intel: fix page fault at probe if i915 init fails
Kai-Heng Feng (3):
HID: multitouch: Enable multi-input for Synaptics pointstick/touchpad device
ALSA: hda: Balance runtime/system PM if direct-complete is disabled
ASoC: SOF: Intel: hda: Avoid checking jack on system suspend
Kefeng Wang (1):
riscv: cacheinfo: Fix using smp_processor_id() in preemptible
Kent Gibson (3):
gpiolib: cdev: fix frame size warning in gpio_ioctl()
tools: gpio: fix %llu warning in gpio-event-mon.c
tools: gpio: fix %llu warning in gpio-watch.c
Kirill Tkhai (1):
crypto: xor - Fix divide error in do_xor_speed()
Krzysztof Kozlowski (1):
i2c: sprd: depend on COMMON_CLK to fix compile tests
Kuniyuki Iwashima (1):
tcp: Fix potential use-after-free due to double kfree()
Lars-Peter Clausen (1):
iio: ad5504: Fix setting power-down state
Lecopzer Chen (2):
kasan: fix unaligned address is unhandled in kasan_remove_zero_shadow
kasan: fix incorrect arguments passing in kasan_add_zero_shadow
Li, Roman (1):
drm/amd/display: disable dcn10 pipe split by default
Linus Torvalds (3):
tty: implement write_iter
tty: fix up hung_up_tty_write() conversion
Revert "mm: fix initialization of struct page for holes in memory layout"
Longfang Liu (1):
USB: ehci: fix an interrupt calltrace error
Lorenzo Bianconi (1):
iio: common: st_sensors: fix possible infinite loop in st_sensors_irq_thread
Marcelo Diop-Gonzalez (1):
io_uring: flush timeouts that should already have expired
Mark Rutland (1):
arm64: entry: remove redundant IRQ flag tracing
Martin Kepplinger (1):
interconnect: imx8mq: Use icc_sync_state
Mathias Kresin (1):
irqchip/mips-cpu: Set IPI domain parent chip
Mathias Nyman (1):
xhci: make sure TRB is fully written before giving it to the controller
Matteo Croce (2):
ipv6: create multicast route with RTPROT_KERNEL
ipv6: set multicast flag on the multicast route
Maxim Mikityanskiy (1):
xsk: Clear pool even for inactive queues
Meng Li (1):
drivers core: Free dma_range_map when driver probe failed
Mike Rapoport (2):
x86/setup: don't remove E820_TYPE_RAM for pfn 0
mm: fix initialization of struct page for holes in memory layout
Mikko Perttunen (2):
i2c: tegra: Wait for config load atomically while in ISR
i2c: bpmp-tegra: Ignore unknown I2C_M flags
Mikulas Patocka (2):
dm integrity: fix a crash if "recalculate" used without "internal_hash" dm integrity: conditionally disable "recalculate" feature
Miquel Raynal (1):
mtd: rawnand: nandsim: Fix the logic when selecting Hamming soft ECC engine
Necip Fazil Yildiran (1):
sh: dma: fix kconfig dependency for G2_DMA
Neta Ostrovsky (1):
RDMA/cma: Fix error flow in default_roce_mode_store
Nicholas Miell (1):
HID: logitech-hidpp: Add product ID for MX Ergo in Bluetooth mode
Nicholas Piggin (1):
powerpc/64s: fix scv entry fallback flush vs interrupt
Nicolas Saenz Julienne (1):
drm/vc4: Unify PCM card's driver_name
Nilesh Javali (1):
scsi: qedi: Correct max length of CHAP secret
Oleksandr Mazur (1):
net: core: devlink: use right genl user_ptr when handling port param get/set
Pali Rohár (1):
serial: mvebu-uart: fix tx lost characters at power off
Pan Bian (3):
drm/atomic: put state on error path
lightnvm: fix memory leak when submit fails
net: systemport: free dev before on error path
Patrik Jakobsson (1):
usb: bdc: Make bdc pci driver depend on BROKEN
Paul Cercueil (1):
pinctrl: ingenic: Fix JZ4760 support
Pavel Begunkov (1):
io_uring: fix short read retries for non-reg files
Peter Chen (2):
usb: cdns3: imx: fix writing read-only memory issue
usb: cdns3: imx: fix can't create core device the second time issue
Peter Collingbourne (1):
mmc: core: don't initialize block size from ext_csd if not present
Peter Geis (2):
clk: tegra30: Add hda clock default rates to clock driver
ALSA: hda/tegra: fix tegra-hda on tegra30 soc
Peter Zijlstra (3):
x86/entry: Fix noinstr fail
locking/lockdep: Cure noinstr fail
x86/sev: Fix nonistr violation
Rafael J. Wysocki (1):
driver core: Extend device_is_dependent()
Randy Dunlap (3):
x86/xen: fix 'nopvspin' build error
scsi: ufs: ufshcd-pltfrm depends on HAS_IOMEM
gpio: sifive: select IRQ_DOMAIN_HIERARCHY rather than depend on it
Rasmus Villemoes (1):
net: dsa: mv88e6xxx: also read STU state in mv88e6250_g1_vtu_getnext
Roman Gushchin (1):
mm: memcg/slab: optimize objcg stock draining
Ronnie Sahlberg (1):
cifs: do not fail __smb_send_rqst if non-fatal signals are pending
Ryan Chen (1):
usb: gadget: aspeed: fix stop dma register setting.
Sagar Shrikant Kadam (3):
dts: phy: fix missing mdio device and probe failure of vsc8541-01 device
dts: phy: add GPIO number and active state used for phy reset
riscv: defconfig: enable gpio support for HiFive Unleashed
Sami Tolvanen (1):
Commit 9bb48c82aced ("tty: implement write_iter") converted the tty layer to use write_iter. Fix the redirected_tty_write declaration also in n_tty and change the comparisons to use write_iter instead of write. also in n_tty and change the comparisons to use write_iter instead of write.
Sandipan Das (1):
selftests/powerpc: Fix exit status of pkey tests
Saravana Kannan (1):
driver core: Fix device link device name collision
Sean Nyekjaer (1):
mtd: rawnand: gpmi: fix dst bit offset when extracting raw payload
Seth Miller (1):
HID: Ignore battery for Elan touchscreen on ASUS UX550
Shakeel Butt (2):
mm: memcg: fix memcg file_dirty numa stat
mm: fix numa stats for thp migration
Shin'ichiro Kawasaki (1):
scsi: target: tcmu: Fix use-after-free of se_cmd->priv
Shuming Fan (1):
ASoC: rt711: mutex between calibration and power state changes
Slaveyko Slaveykov (1):
drivers: iio: temperature: Add delay after the addressed reset command in mlx90632.c
Song Liu (1):
bpf: Reject too big ctx_size_in for raw_tp test run
Stanley Chu (1):
scsi: ufs: Relax the condition of UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL
Sung Lee (1):
drm/amd/display: DCN2X Find Secondary Pipe properly in MPO + ODM Case
Takashi Iwai (3):
ALSA: seq: oss: Fix missing error check in snd_seq_oss_synth_make_info()
ALSA: hda/via: Add minimum mute flag
cachefiles: Drop superfluous readpages aops NULL check
Tariq Toukan (1):
net: Disable NETIF_F_HW_TLS_RX when RXCSUM is disabled
Thinh Nguyen (1):
usb: udc: core: Use lock when write to soft_connect
Trond Myklebust (2):
nfsd: Fixes for nfsd4_encode_read_plus_data()
nfsd: Don't set eof on a truncated READ_PLUS
Victor Zhao (1):
drm/amdgpu/psp: fix psp gfx ctrl cmds
Ville Syrjälä (2):
drm/i915: s/intel_dp_sink_dpms/intel_dp_set_power/
drm/i915: Only enable DFP 4:4:4->4:2:0 conversion when outputting YCbCr 4:4:4Vincent Mailhol (3):
can: dev: can_restart: fix use after free bug
can: vxcan: vxcan_xmit: fix use after free bug
can: peak_usb: fix use after free bugs
Vladimir Oltean (1):
net: mscc: ocelot: allow offloading of bridge on top of LAG
Wang Hui (1):
stm class: Fix module init return on allocation failure
Wayne Lin (1):
drm/amd/display: Fix to be able to stop crc calculation
Wolfram Sang (1):
i2c: octeon: check correct size of maximum RECV_LEN packet
Xiaoming Ni (1):
proc_sysctl: fix oops caused by incorrect command parameters
Yazen Ghannam (1):
x86/cpu/amd: Set __max_die_per_package on AMD
Yingjie Wang (1):
octeontx2-af: Fix missing check bugs in rvu_cgx.c
Youling Tang (1):
powerpc: Use the common INIT_DATA_SECTION macro in vmlinux.lds.S
Yuchung Cheng (1):
tcp: fix TCP socket rehash stats mis-accounting
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-class-devlink +2 -2
@@ -5,8 +5,8 @@ Description: Provide a place in sysfs for the device link objects in the kernel at any given time. The name of a device link directory, denoted as ... above, is of the form <supplier>--<consumer> - where <supplier> is the supplier device name and <consumer> is - the consumer device name. + where <supplier> is the supplier bus:device name and <consumer> + is the consumer bus:device name. What: /sys/class/devlink/.../auto_remove_on Date: May 2020
Documentation/ABI/testing/sysfs-devices-consumer +3 -2
@@ -4,5 +4,6 @@ Contact: Saravana Kannan <[email protected]> Description: The /sys/devices/.../consumer:<consumer> are symlinks to device links where this device is the supplier. <consumer> denotes the - name of the consumer in that device link. There can be zero or - more of these symlinks for a given device. + name of the consumer in that device link and is of the form + bus:device name. There can be zero or more of these symlinks + for a given device.
Documentation/ABI/testing/sysfs-devices-supplier +3 -2
@@ -4,5 +4,6 @@ Contact: Saravana Kannan <[email protected]> Description: The /sys/devices/.../supplier:<supplier> are symlinks to device links where this device is the consumer. <supplier> denotes the - name of the supplier in that device link. There can be zero or - more of these symlinks for a given device. + name of the supplier in that device link and is of the form + bus:device name. There can be zero or more of these symlinks + for a given device.
Documentation/admin-guide/device-mapper/dm-integrity.rst +9 -3
@@ -177,14 +177,20 @@ bitmap_flush_interval:number The bitmap flush interval in milliseconds. The metadata buffers are synchronized when this interval expires. +allow_discards + Allow block discard requests (a.k.a. TRIM) for the integrity device. + Discards are only allowed to devices using internal hash. + fix_padding Use a smaller padding of the tag area that is more space-efficient. If this option is not present, large padding is used - that is for compatibility with older kernels. -allow_discards - Allow block discard requests (a.k.a. TRIM) for the integrity device. - Discards are only allowed to devices using internal hash. +legacy_recalculate + Allow recalculating of volumes with HMAC keys. This is disabled by + default for security reasons - an attacker could modify the volume, + set recalc_sector to zero, and the kernel would not detect the + modification. The journal mode (D/J), buffer_sectors, journal_watermark, commit_time and allow_discards can be changed when reloading the target (load an inactive
Documentation/admin-guide/kernel-parameters.txt +4 -0
@@ -5965,6 +5965,10 @@ This option is obsoleted by the "nopv" option, which has equivalent effect for XEN platform. + xen_no_vector_callback + [KNL,X86,XEN] Disable the vector callback for Xen + event channel interrupts. + xen_scrub_pages= [XEN] Boolean option to control scrubbing pages before giving them back to Xen, for use by other domains. Can be also changed at runtime
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/xen/enlighten.c +1 -1
@@ -371,7 +371,7 @@ static int __init xen_guest_init(void) }gnttab_init ();if (!xen_initial_domain ()) -xenbus_probe (NULL ); +xenbus_probe ();/* * Making sure board specific code will not set up ops for
arch/arm64/include/asm/atomic.h +5 -5
@@ -17,7 +17,7 @@#include <asm/lse.h> #define ATOMIC_OP (op) \ -static inline void arch_##op(int i, atomic_t *v) \ +static __always_inline void arch_##op(int i, atomic_t *v) \ { \ __lse_ll_sc_body(op, i, v); \ }
@@ -32,7 +32,7 @@ ATOMIC_OP(atomic_sub)#undef ATOMIC_OP#define ATOMIC_FETCH_OP (name, op) \ -static inline int arch_##op##name(int i, atomic_t *v) \ +static __always_inline int arch_##op##name(int i, atomic_t *v) \ { \ return __lse_ll_sc_body(op##name, i, v); \ }
@@ -56,7 +56,7 @@ ATOMIC_FETCH_OPS(atomic_sub_return)#undef ATOMIC_FETCH_OPS#define ATOMIC64_OP (op) \ -static inline void arch_##op(long i, atomic64_t *v) \ +static __always_inline void arch_##op(long i, atomic64_t *v) \ { \ __lse_ll_sc_body(op, i, v); \ }
@@ -71,7 +71,7 @@ ATOMIC64_OP(atomic64_sub)#undef ATOMIC64_OP#define ATOMIC64_FETCH_OP (name, op) \ -static inline long arch_##op##name(long i, atomic64_t *v) \ +static __always_inline long arch_##op##name(long i, atomic64_t *v) \ { \ return __lse_ll_sc_body(op##name, i, v); \ }
@@ -94,7 +94,7 @@ ATOMIC64_FETCH_OPS(atomic64_sub_return)#undef ATOMIC64_FETCH_OP#undef ATOMIC64_FETCH_OPS -static inline long arch_atomic64_dec_if_positive (atomic64_t *v) +static __always_inline long arch_atomic64_dec_if_positive (atomic64_t *v) {return __lse_ll_sc_body (atomic64_dec_if_positive, v); }
arch/arm64/kernel/signal.c +0 -7
@@ -914,13 +914,6 @@ static void do_signal(struct pt_regs *regs) asmlinkage void do_notify_resume(struct pt_regs *regs,unsigned long thread_flags) { -/* -* The assembly code enters us with IRQs off, but it hasn't -* informed the tracing code of that for efficiency reasons. -* Update the trace code with the current status. -*/ -trace_hardirqs_off (); - do { /* Check valid user FS if needed */ addr_limit_user_check();
arch/arm64/kernel/syscall.c +1 -8
@@ -165,15 +165,8 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,if (!has_syscall_work (flags) && !IS_ENABLED (CONFIG_DEBUG_RSEQ )) {local_daif_mask (); flags =current_thread_info ()->flags; -if (!has_syscall_work (flags) && !(flags & _TIF_SINGLESTEP)) { -/* -* We're off to userspace, where interrupts are -* always enabled after we restore the flags from -* the SPSR. -*/ -trace_hardirqs_on (); +if (!has_syscall_work (flags) && !(flags & _TIF_SINGLESTEP))return ; - }local_daif_restore (DAIF_PROCCTX ); }
arch/powerpc/include/asm/exception-64s.h +13 -0
@@ -63,6 +63,12 @@ nop; \ nop; +#define SCV_ENTRY_FLUSH_SLOT \ + SCV_ENTRY_FLUSH_FIXUP_SECTION; \ + nop; \ + nop; \ + nop; +/* * r10 must be free to use, r13 must be paca */
@@ -70,6 +76,13 @@STF_ENTRY_BARRIER_SLOT ; \ENTRY_FLUSH_SLOT +/* +* r10, ctr must be free to use, r13 must be paca + */ +#define SCV_INTERRUPT_TO_KERNEL \ + STF_ENTRY_BARRIER_SLOT; \ + SCV_ENTRY_FLUSH_SLOT +/* * Macros for annotating the expected destination of (h)rfid *
arch/powerpc/include/asm/feature-fixups.h +10 -0
@@ -221,6 +221,14 @@ label##3: \ FTR_ENTRY_OFFSET 957b-958b; \ .popsection; +#define SCV_ENTRY_FLUSH_FIXUP_SECTION \ +957: \ + .pushsection __scv_entry_flush_fixup,"a"; \ + .align 2; \ +958: \ + FTR_ENTRY_OFFSET 957b-958b; \ + .popsection; +#define RFI_FLUSH_FIXUP_SECTION \ 951: \ .pushsection __rfi_flush_fixup,"a"; \
@@ -254,10 +262,12 @@ label##3: \extern long stf_barrier_fallback;extern long entry_flush_fallback; +extern long scv_entry_flush_fallback;extern long __start___stf_entry_barrier_fixup, __stop___stf_entry_barrier_fixup;extern long __start___stf_exit_barrier_fixup, __stop___stf_exit_barrier_fixup;extern long __start___uaccess_flush_fixup, __stop___uaccess_flush_fixup;extern long __start___entry_flush_fixup, __stop___entry_flush_fixup; +extern long __start___scv_entry_flush_fixup, __stop___scv_entry_flush_fixup;extern long __start___rfi_flush_fixup, __stop___rfi_flush_fixup;extern long __start___barrier_nospec_fixup, __stop___barrier_nospec_fixup;extern long __start__btb_flush_fixup, __stop__btb_flush_fixup;
arch/powerpc/kernel/entry_64.S +1 -1
@@ -75,7 +75,7 @@ BEGIN_FTR_SECTION bne .Ltabort_syscall END_FTR_SECTION_IFSET(CPU_FTR_TM) #endif - INTERRUPT_TO_KERNEL + SCV_INTERRUPT_TO_KERNEL mr r10,r1 ld r1,PACAKSAVE(r13) std r10,0(r1)
arch/powerpc/kernel/exceptions-64s.S +19 -0
@@ -2993,6 +2993,25 @@ TRAMP_REAL_BEGIN(entry_flush_fallback) ld r11,PACA_EXRFI+EX_R11(r13) blr +/* + * The SCV entry flush happens with interrupts enabled, so it must disable + * to prevent EXRFI being clobbered by NMIs (e.g., soft_nmi_common). r10 + * (containing LR) does not need to be preserved here because scv entry + * puts 0 in the pt_regs, CTR can be clobbered for the same reason. + */ +TRAMP_REAL_BEGIN(scv_entry_flush_fallback) + li r10,0 + mtmsrd r10,1 + lbz r10,PACAIRQHAPPENED(r13) + ori r10,r10,PACA_IRQ_HARD_DIS + stb r10,PACAIRQHAPPENED(r13) + std r11,PACA_EXRFI+EX_R11(r13) + L1D_DISPLACEMENT_FLUSH + ld r11,PACA_EXRFI+EX_R11(r13) + li r10,MSR_RI + mtmsrd r10,1 + blr + TRAMP_REAL_BEGIN(rfi_flush_fallback) SET_SCRATCH0(r13); GET_PACA(r13);
arch/powerpc/kernel/vmlinux.lds.S +15 -17
@@ -145,6 +145,13 @@ SECTIONS __stop___entry_flush_fixup = .; } + . = ALIGN(8); + __scv_entry_flush_fixup : AT(ADDR(__scv_entry_flush_fixup) - LOAD_OFFSET) { + __start___scv_entry_flush_fixup = .; + *(__scv_entry_flush_fixup) + __stop___scv_entry_flush_fixup = .; + } + . = ALIGN(8); __stf_exit_barrier_fixup : AT(ADDR(__stf_exit_barrier_fixup) - LOAD_OFFSET) { __start___stf_exit_barrier_fixup = .;
@@ -187,6 +194,12 @@ SECTIONS .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) { _sinittext = .; INIT_TEXT + + /* + *.init.text might be RO so we must ensure this section ends on + * a page boundary. + */ + . = ALIGN(PAGE_SIZE); _einittext = .; #ifdef CONFIG_PPC64 *(.tramp.ftrace.init);
@@ -200,21 +213,9 @@ SECTIONS EXIT_TEXT } - .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { - INIT_DATA - } - - .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { - INIT_SETUP(16) - } - - .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) { - INIT_CALLS - } + . = ALIGN(PAGE_SIZE); - .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) { - CON_INITCALL - } + INIT_DATA_SECTION(16) . = ALIGN(8); __ftr_fixup : AT(ADDR(__ftr_fixup) - LOAD_OFFSET) {
@@ -242,9 +243,6 @@ SECTIONS __stop___fw_ftr_fixup = .; } #endif - .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { - INIT_RAM_FS - } PERCPU_SECTION(L1_CACHE_BYTES)
arch/powerpc/lib/feature-fixups.c +21 -3
@@ -290,9 +290,6 @@ void do_entry_flush_fixups(enum l1d_flush_type types)long *start, *end;int i; - start =PTRRELOC (&__start___entry_flush_fixup); - end =PTRRELOC (&__stop___entry_flush_fixup); - instrs[0 ] =0x60000000 ;/* nop */ instrs[1 ] =0x60000000 ;/* nop */ instrs[2 ] =0x60000000 ;/* nop */
@@ -312,6 +309,8 @@ void do_entry_flush_fixups(enum l1d_flush_type types)if (types &L1D_FLUSH_MTTRIG ) instrs[i++] =0x7c12dba6 ;/* mtspr TRIG2,r0 (SPR #882) */ + start =PTRRELOC (&__start___entry_flush_fixup); + end =PTRRELOC (&__stop___entry_flush_fixup);for (i =0 ; start < end; start++, i++) { dest = (void *)start + *start;
@@ -328,6 +327,25 @@ void do_entry_flush_fixups(enum l1d_flush_type types)patch_instruction ((struct ppc_inst *)(dest +2 ),ppc_inst (instrs[2 ])); } + start =PTRRELOC (&__start___scv_entry_flush_fixup); + end =PTRRELOC (&__stop___scv_entry_flush_fixup); +for (; start < end; start++, i++) { + dest = (void *)start + *start; + +pr_devel ("patching dest %lx\n" , (unsigned long )dest); + +patch_instruction ((struct ppc_inst *)dest,ppc_inst (instrs[0 ])); + +if (types ==L1D_FLUSH_FALLBACK ) +patch_branch ((struct ppc_inst *)(dest +1 ), (unsigned long )&scv_entry_flush_fallback, +BRANCH_SET_LINK ); +else +patch_instruction ((struct ppc_inst *)(dest +1 ),ppc_inst (instrs[1 ])); + +patch_instruction ((struct ppc_inst *)(dest +2 ),ppc_inst (instrs[2 ])); + } + +printk (KERN_DEBUG "entry-flush: patched %d locations (%s flush)\n" , i, (types ==L1D_FLUSH_NONE ) ?"no" : (types == L1D_FLUSH_FALLBACK) ? "fallback displacement" :
arch/riscv/Kconfig +4 -2
@@ -134,7 +134,7 @@ config PA_BITS config PAGE_OFFSET hex - default 0xC0000000 if 32BIT && MAXPHYSMEM_2GB + default 0xC0000000 if 32BIT && MAXPHYSMEM_1GB default 0x80000000 if 64BIT && !MMU default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
@@ -247,10 +247,12 @@ config MODULE_SECTIONS choice prompt "Maximum Physical Memory" - default MAXPHYSMEM_2GB if 32BIT + default MAXPHYSMEM_1GB if 32BIT default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY + config MAXPHYSMEM_1GB + bool "1GiB" config MAXPHYSMEM_2GB bool "2GiB" config MAXPHYSMEM_128GB
arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts +2 -0
@@ -88,7 +88,9 @@ ð0 { phy-mode = "gmii"; phy-handle = <&phy0>; phy0: ethernet-phy@0 { + compatible = "ethernet-phy-id0007.0771"; reg = <0>; + reset-gpios = <&gpio 12 GPIO_ACTIVE_LOW>; }; };
arch/riscv/configs/defconfig +2 -0
@@ -64,6 +64,8 @@ CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_VIRTIO=y CONFIG_SPI=y CONFIG_SPI_SIFIVE=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SIFIVE=y # CONFIG_PTP_1588_CLOCK is not set CONFIG_POWER_RESET=y CONFIG_DRM=y
arch/riscv/kernel/cacheinfo.c +10 -1
@@ -26,7 +26,16 @@ cache_get_priv_group(struct cacheinfo *this_leaf)static struct cacheinfo *get_cacheinfo (u32 level,enum cache_type type) { -struct cpu_cacheinfo *this_cpu_ci =get_cpu_cacheinfo (smp_processor_id ()); +/* +* Using raw_smp_processor_id() elides a preemptability check, but this +* is really indicative of a larger problem: the cacheinfo UABI assumes +* that cores have a homonogenous view of the cache hierarchy. That +* happens to be the case for the current set of RISC-V systems, but +* likely won't be true in general. Since there's no way to provide +* correct information for these systems via the current UABI we're +* just eliding the check for now. +*/ +struct cpu_cacheinfo *this_cpu_ci =get_cpu_cacheinfo (raw_smp_processor_id ());struct cacheinfo *this_leaf;int index;
arch/riscv/kernel/entry.S +9 -0
@@ -155,6 +155,15 @@ skip_context_tracking: tail do_trap_unknown handle_syscall: +#ifdef CONFIG_RISCV_M_MODE + /* + * When running is M-Mode (no MMU config), MPIE does not get set. + * As a result, we need to force enable interrupts here because + * handle_exception did not do set SR_IE as it always sees SR_PIE + * being cleared. + */ + csrs CSR_STATUS, SR_IE +#endif #if defined(CONFIG_TRACE_IRQFLAGS) || defined(CONFIG_CONTEXT_TRACKING) /* Recover a0 - a7 for system calls */ REG_L a0, PT_A0(sp)
arch/riscv/kernel/time.c +3 -0
@@ -4,6 +4,7 @@* Copyright (C) 2017 SiFive */ +#include <linux/of_clk.h> #include <linux/clocksource.h> #include <linux/delay.h> #include <asm/sbi.h>
@@ -24,6 +25,8 @@ void __init time_init(void) riscv_timebase = prop; lpj_fine = riscv_timebase /HZ ; + +of_clk_init (NULL );timer_probe (); }
arch/riscv/mm/init.c +14 -2
@@ -155,9 +155,10 @@ static void __init setup_initrd(void)void __init setup_bootmem (void ) {phys_addr_t mem_start =0 ; -phys_addr_t start, end =0 ; +phys_addr_t start, dram_end, end =0 ;phys_addr_t vmlinux_end =__pa_symbol (&_end);phys_addr_t vmlinux_start =__pa_symbol (&_start); +phys_addr_t max_mapped_addr =__pa (~(ulong )0 );u64 i;/* Find the memory region containing the kernel */
@@ -179,7 +180,18 @@ void __init setup_bootmem(void)/* Reserve from the start of the kernel to the end of the kernel */ memblock_reserve (vmlinux_start, vmlinux_end - vmlinux_start); - max_pfn =PFN_DOWN (memblock_end_of_DRAM ()); + dram_end =memblock_end_of_DRAM (); + +/* +* memblock allocator is not aware of the fact that last 4K bytes of +* the addressable memory can not be mapped because of IS_ERR_VALUE +* macro. Make sure that last 4k bytes are not usable by memblock +* if end of dram is equal to maximum addressable memory. +*/ +if (max_mapped_addr == (dram_end -1 )) +memblock_set_current_limit (max_mapped_addr -4096 ); + + max_pfn =PFN_DOWN (dram_end); max_low_pfn = max_pfn;set_max_mapnr (max_low_pfn);
arch/sh/Kconfig +0 -1
@@ -30,7 +30,6 @@ config SUPERH select HAVE_ARCH_KGDB select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_TRACEHOOK - select HAVE_COPY_THREAD_TLS select HAVE_DEBUG_BUGVERBOSE select HAVE_DEBUG_KMEMLEAK select HAVE_DYNAMIC_FTRACE
arch/sh/drivers/dma/Kconfig +1 -2
@@ -63,8 +63,7 @@ config PVR2_DMA config G2_DMA tristate "G2 Bus DMA support" - depends on SH_DREAMCAST - select SH_DMA_API + depends on SH_DREAMCAST && SH_DMA_API help This enables support for the DMA controller for the Dreamcast's G2 bus. Drivers that want this will generally enable this on
arch/x86/entry/common.c +7 -3
@@ -73,10 +73,8 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs, unsigned int nr) {if (likely (nr < IA32_NR_syscalls)) { -instrumentation_begin (); nr =array_index_nospec (nr, IA32_NR_syscalls); regs->ax = ia32_sys_call_table[nr](regs); -instrumentation_end (); } }
@@ -91,8 +89,11 @@ __visible noinstr void do_int80_syscall_32(struct pt_regs *regs)* or may not be necessary, but it matches the old asm behavior. */ nr = (unsigned int )syscall_enter_from_user_mode (regs, nr); +instrumentation_begin ();do_syscall_32_irqs_on (regs, nr); + +instrumentation_end ();syscall_exit_to_user_mode (regs); }
@@ -121,11 +122,12 @@ static noinstr bool __do_fast_syscall_32(struct pt_regs *regs) res =get_user (*(u32 *)®s->bp, (u32 __user __force *)(unsigned long )(u32 )regs->sp); } -instrumentation_end ();if (res) {/* User code screwed up. */ regs->ax = -EFAULT ; + +instrumentation_end ();syscall_exit_to_user_mode (regs);return false; }
@@ -135,6 +137,8 @@ static noinstr bool __do_fast_syscall_32(struct pt_regs *regs)/* Now this is just like a normal syscall. */ do_syscall_32_irqs_on (regs, nr); + +instrumentation_end ();syscall_exit_to_user_mode (regs);return true; }
arch/x86/hyperv/hv_init.c +4 -0
@@ -16,6 +16,7 @@#include <asm/hyperv-tlfs.h> #include <asm/mshyperv.h> #include <asm/idtentry.h> +#include <linux/kexec.h> #include <linux/version.h> #include <linux/vmalloc.h> #include <linux/mm.h>
@@ -26,6 +27,8 @@#include <linux/syscore_ops.h> #include <clocksource/hyperv_timer.h> +int hyperv_init_cpuhp; +void *hv_hypercall_pg;EXPORT_SYMBOL_GPL (hv_hypercall_pg);
@@ -424,6 +427,7 @@ void __init hyperv_init(void)register_syscore_ops (&hv_syscore_ops); + hyperv_init_cpuhp = cpuhp;return ; remove_cpuhp_state:
arch/x86/include/asm/fpu/api.h +13 -2
@@ -16,14 +16,25 @@* Use kernel_fpu_begin/end() if you intend to use FPU in kernel context. It * disables preemption so be careful if you intend to use it for long periods * of time. -* If you intend to use the FPU in softirq you need to check first with +* If you intend to use the FPU in irq/softirq you need to check first with * irq_fpu_usable() if it is possible. */ -extern void kernel_fpu_begin (void ); + +/* Kernel FPU states to initialize in kernel_fpu_begin_mask() */ +#define KFPU_387 _BITUL(0)/* 387 state will be initialized */ +#define KFPU_MXCSR _BITUL(1)/* MXCSR will be initialized */ + +extern void kernel_fpu_begin_mask (unsigned int kfpu_mask);extern void kernel_fpu_end (void );extern bool irq_fpu_usable (void );extern void fpregs_mark_activate (void ); +/* Code that is unaware of kernel_fpu_begin_mask() can use this */ +static inline void kernel_fpu_begin (void ) +{ +kernel_fpu_begin_mask (KFPU_387 |KFPU_MXCSR ); +} +/* * Use fpregs_lock() while editing CPU's FPU registers or fpu->state. * A context switch will (and softirq might) save CPU's FPU registers to
arch/x86/include/asm/mshyperv.h +2 -0
@@ -74,6 +74,8 @@ static inline void hv_disable_stimer0_percpu_irq(int irq) {}#if IS_ENABLED (CONFIG_HYPERV ) +extern int hyperv_init_cpuhp; +extern void *hv_hypercall_pg;extern void __percpu **hyperv_pcpu_input_arg;
arch/x86/include/asm/topology.h +2 -2
@@ -110,6 +110,8 @@ extern const struct cpumask *cpu_coregroup_mask(int cpu);#define topology_die_id (cpu) (cpu_data(cpu).cpu_die_id)#define topology_core_id (cpu) (cpu_data(cpu).cpu_core_id) +extern unsigned int __max_die_per_package; +#ifdef CONFIG_SMP #define topology_die_cpumask (cpu) (per_cpu(cpu_die_map, cpu))#define topology_core_cpumask (cpu) (per_cpu(cpu_core_map, cpu))
@@ -118,8 +120,6 @@ extern const struct cpumask *cpu_coregroup_mask(int cpu);extern unsigned int __max_logical_packages;#define topology_max_packages () (__max_logical_packages) -extern unsigned int __max_die_per_package; -static inline int topology_max_die_per_package (void ) {return __max_die_per_package;
arch/x86/kernel/cpu/amd.c +2 -2
@@ -569,12 +569,12 @@ static void bsp_init_amd(struct cpuinfo_x86 *c)u32 ecx; ecx =cpuid_ecx (0x8000001e ); - nodes_per_socket = ((ecx >>8 ) &7 ) +1 ; + __max_die_per_package = nodes_per_socket = ((ecx >>8 ) &7 ) +1 ; }else if (boot_cpu_has (X86_FEATURE_NODEID_MSR )) {u64 value;rdmsrl (MSR_FAM10H_NODE_ID , value); - nodes_per_socket = ((value >>3 ) &7 ) +1 ; + __max_die_per_package = nodes_per_socket = ((value >>3 ) &7 ) +1 ; } if (!boot_cpu_has(X86_FEATURE_AMD_SSBD) &&
arch/x86/kernel/cpu/mshyperv.c +18 -0
@@ -135,14 +135,32 @@ static void hv_machine_shutdown(void) {if (kexec_in_progress && hv_kexec_handler)hv_kexec_handler (); + +/* +* Call hv_cpu_die() on all the CPUs, otherwise later the hypervisor +* corrupts the old VP Assist Pages and can crash the kexec kernel. +*/ +if (kexec_in_progress && hyperv_init_cpuhp >0 ) +cpuhp_remove_state (hyperv_init_cpuhp); + +/* The function calls stop_other_cpus(). */ native_machine_shutdown (); + +/* Disable the hypercall page when there is only 1 active CPU. */ +if (kexec_in_progress) +hyperv_cleanup (); }static void hv_machine_crash_shutdown (struct pt_regs *regs) {if (hv_crash_handler)hv_crash_handler (regs); + +/* The function calls crash_smp_send_stop(). */ native_machine_crash_shutdown (regs); + +/* Disable the hypercall page when there is only 1 active CPU. */ +hyperv_cleanup (); }#endif /* CONFIG_KEXEC_CORE */ #endif /* CONFIG_HYPERV */
arch/x86/kernel/cpu/topology.c +1 -1
@@ -25,10 +25,10 @@#define BITS_SHIFT_NEXT_LEVEL (eax) ((eax) & 0x1f)#define LEVEL_MAX_SIBLINGS (ebx) ((ebx) & 0xffff) -#ifdef CONFIG_SMP unsigned int __max_die_per_package__read_mostly =1 ;EXPORT_SYMBOL (__max_die_per_package); +#ifdef CONFIG_SMP /* * Check if given CPUID extended toplogy "leaf" is implemented */
arch/x86/kernel/fpu/core.c +5 -4
@@ -121,7 +121,7 @@ int copy_fpregs_to_fpstate(struct fpu *fpu) }EXPORT_SYMBOL (copy_fpregs_to_fpstate); -void kernel_fpu_begin (void ) +void kernel_fpu_begin_mask (unsigned int kfpu_mask) {preempt_disable ();
@@ -141,13 +141,14 @@ void kernel_fpu_begin(void) }__cpu_invalidate_fpregs_state (); -if (boot_cpu_has (X86_FEATURE_XMM )) +/* Put sane initial values into the control registers. */ +if (likely (kfpu_mask &KFPU_MXCSR ) &&boot_cpu_has (X86_FEATURE_XMM ))ldmxcsr (MXCSR_DEFAULT ); -if (boot_cpu_has (X86_FEATURE_FPU )) +if (unlikely (kfpu_mask &KFPU_387 ) &&boot_cpu_has (X86_FEATURE_FPU )) asmvolatile ("fninit" ); } -EXPORT_SYMBOL_GPL (kernel_fpu_begin); +EXPORT_SYMBOL_GPL (kernel_fpu_begin_mask);void kernel_fpu_end (void ) {
arch/x86/kernel/setup.c +9 -11
@@ -665,17 +665,6 @@ static void __init trim_platform_memory_ranges(void)static void __init trim_bios_range (void ) { -/* -* A special case is the first 4Kb of memory; -* This is a BIOS owned area, not kernel ram, but generally -* not listed as such in the E820 table. -* -* This typically reserves additional memory (64KiB by default) -* since some BIOSes are known to corrupt low memory. See the -* Kconfig help text for X86_RESERVE_LOW. -*/ -e820__range_update (0 ,PAGE_SIZE ,E820_TYPE_RAM ,E820_TYPE_RESERVED ); -/* * special case: Some BIOSes report the PC BIOS * area (640Kb -> 1Mb) as RAM even though it is not.
@@ -733,6 +722,15 @@ early_param("reservelow", parse_reservelow);static void __init trim_low_memory_range (void ) { +/* +* A special case is the first 4Kb of memory; +* This is a BIOS owned area, not kernel ram, but generally +* not listed as such in the E820 table. +* +* This typically reserves additional memory (64KiB by default) +* since some BIOSes are known to corrupt low memory. See the +* Kconfig help text for X86_RESERVE_LOW. +*/ memblock_reserve (0 ,ALIGN (reserve_low,PAGE_SIZE )); }
arch/x86/kernel/sev-es.c +13 -1
@@ -225,7 +225,7 @@ static inline u64 sev_es_rd_ghcb_msr(void)return __rdmsr (MSR_AMD64_SEV_ES_GHCB ); } -static inline void sev_es_wr_ghcb_msr (u64 val) +static __always_inline void sev_es_wr_ghcb_msr(u64 val) {u32 low, high;
@@ -286,6 +286,12 @@ static enum es_result vc_write_mem(struct es_em_ctxt *ctxt,u16 d2;u8 d1; +/* If instruction ran in kernel mode and the I/O buffer is in kernel space */ +if (!user_mode (ctxt->regs) && !access_ok (target, size)) { +memcpy (dst, buf, size); +return ES_OK ; + } +switch (size) {case 1 :memcpy (&d1, buf,1 );
@@ -335,6 +341,12 @@ static enum es_result vc_read_mem(struct es_em_ctxt *ctxt,u16 d2;u8 d1; +/* If instruction ran in kernel mode and the I/O buffer is in kernel space */ +if (!user_mode (ctxt->regs) && !access_ok (s, size)) { +memcpy (buf, src, size); +return ES_OK ; + } +switch (size) {case 1 :if (get_user (d1, s))
arch/x86/lib/mmx_32.c +15 -5
@@ -26,6 +26,16 @@#include <asm/fpu/api.h> #include <asm/asm.h> +/* +* Use KFPU_387. MMX instructions are not affected by MXCSR, +* but both AMD and Intel documentation states that even integer MMX +* operations will result in #MF if an exception is pending in FCW. +* +* EMMS is not needed afterwards because, after calling kernel_fpu_end(), +* any subsequent user of the 387 stack will reinitialize it using +* KFPU_387. +*/ +void *_mmx_memcpy (void *to,const void *from,size_t len) {void *p;
@@ -37,7 +47,7 @@ void *_mmx_memcpy(void *to, const void *from, size_t len) p = to; i = len >>6 ;/* len/64 */ -kernel_fpu_begin (); +kernel_fpu_begin_mask (KFPU_387 ); __asm__ __volatile__ ( "1: prefetch (%0)\n" /* This set is 28 bytes */
@@ -127,7 +137,7 @@ static void fast_clear_page(void *page) {int i; -kernel_fpu_begin (); +kernel_fpu_begin_mask (KFPU_387 ); __asm__ __volatile__ ( " pxor %%mm0, %%mm0\n" : :
@@ -160,7 +170,7 @@ static void fast_copy_page(void *to, void *from) {int i; -kernel_fpu_begin (); +kernel_fpu_begin_mask (KFPU_387 );/* * maybe the prefetch stuff can go before the expensive fnsave...
@@ -247,7 +257,7 @@ static void fast_clear_page(void *page) {int i; -kernel_fpu_begin (); +kernel_fpu_begin_mask (KFPU_387 ); __asm__ __volatile__ ( " pxor %%mm0, %%mm0\n" : :
@@ -282,7 +292,7 @@ static void fast_copy_page(void *to, void *from) {int i; -kernel_fpu_begin (); +kernel_fpu_begin_mask (KFPU_387 ); __asm__ __volatile__ ( "1: prefetch (%0)\n"
arch/x86/xen/enlighten_hvm.c +10 -1
@@ -188,6 +188,8 @@ static int xen_cpu_dead_hvm(unsigned int cpu)return 0 ; } +static bool no_vector_callback__initdata ; +static void __init xen_hvm_guest_init (void ) {if (xen_pv_domain ())
@@ -207,7 +209,7 @@ static void __init xen_hvm_guest_init(void)xen_panic_handler_init (); -if (xen_feature (XENFEAT_hvm_callback_vector)) +if (!no_vector_callback &&xen_feature (XENFEAT_hvm_callback_vector)) xen_have_vector_callback =1 ;xen_hvm_smp_init ();
@@ -233,6 +235,13 @@ static __init int xen_parse_nopv(char *arg) }early_param ("xen_nopv" , xen_parse_nopv); +static __init int xen_parse_no_vector_callback (char *arg) +{ + no_vector_callback = true; +return 0 ; +} +early_param ("xen_no_vector_callback" , xen_parse_no_vector_callback); +bool __init xen_hvm_need_lapic (void ) {if (xen_pv_domain ())
arch/x86/xen/smp_hvm.c +19 -10
@@ -33,9 +33,11 @@ static void __init xen_hvm_smp_prepare_cpus(unsigned int max_cpus)int cpu;native_smp_prepare_cpus (max_cpus); -WARN_ON (xen_smp_intr_init (0 )); -xen_init_lock_cpu (0 ); +if (xen_have_vector_callback) { +WARN_ON (xen_smp_intr_init (0 )); +xen_init_lock_cpu (0 ); + }for_each_possible_cpu (cpu) {if (cpu ==0 )
@@ -50,9 +52,11 @@ static void __init xen_hvm_smp_prepare_cpus(unsigned int max_cpus)static void xen_hvm_cpu_die (unsigned int cpu) {if (common_cpu_die (cpu) ==0 ) { -xen_smp_intr_free (cpu); -xen_uninit_lock_cpu (cpu); -xen_teardown_timer (cpu); +if (xen_have_vector_callback) { +xen_smp_intr_free (cpu); +xen_uninit_lock_cpu (cpu); +xen_teardown_timer (cpu); + } } }#else
@@ -64,14 +68,19 @@ static void xen_hvm_cpu_die(unsigned int cpu)void __init xen_hvm_smp_init (void ) { -if (!xen_have_vector_callback) + smp_ops.smp_prepare_boot_cpu = xen_hvm_smp_prepare_boot_cpu; + smp_ops.smp_prepare_cpus = xen_hvm_smp_prepare_cpus; + smp_ops.smp_cpus_done = xen_smp_cpus_done; + smp_ops.cpu_die = xen_hvm_cpu_die; + +if (!xen_have_vector_callback) { +#ifdef CONFIG_PARAVIRT_SPINLOCKS + nopvspin = true; +#endif return ; + } - smp_ops.smp_prepare_cpus = xen_hvm_smp_prepare_cpus; smp_ops.smp_send_reschedule = xen_smp_send_reschedule; - smp_ops.cpu_die = xen_hvm_cpu_die; smp_ops.send_call_func_ipi = xen_smp_send_call_function_ipi; smp_ops.send_call_func_single_ipi = xen_smp_send_call_function_single_ipi; - smp_ops.smp_prepare_boot_cpu = xen_hvm_smp_prepare_boot_cpu; - smp_ops.smp_cpus_done = xen_smp_cpus_done; }
crypto/xor.c +2 -0
@@ -107,6 +107,8 @@ do_xor_speed(struct xor_block_template *tmpl, void *b1, void *b2)preempt_enable ();// bytes/ns == GB/s, multiply by 1000 to get MB/s [not MiB/s] +if (!min) + min =1 ; speed = (1000 *REPS *BENCH_SIZE ) / (unsigned int )ktime_to_ns (min); tmpl->speed = speed;
drivers/acpi/scan.c +2 -0
@@ -586,6 +586,8 @@ static int acpi_get_device_data(acpi_handle handle, struct acpi_device **device,if (!device)return -EINVAL ; + *device =NULL ; + status =acpi_get_data_full (handle, acpi_scan_drop_device, (void **)device, callback);if (ACPI_FAILURE (status) || !*device) {
drivers/base/core.c +31 -13
103 lines not on this page · raw message
drivers/base/dd.c +2 -0
@@ -612,6 +612,8 @@ static int really_probe(struct device *dev, struct device_driver *drv)else if (drv->remove) drv->remove (dev); probe_failed: +kfree (dev->dma_range_map); + dev->dma_range_map =NULL ;if (dev->bus)blocking_notifier_call_chain (&dev->bus->p->bus_notifier,BUS_NOTIFY_DRIVER_NOT_BOUND , dev);
drivers/clk/tegra/clk-tegra30.c +2 -0
@@ -1256,6 +1256,8 @@ static struct tegra_clk_init_table init_table[] __initdata = { { TEGRA30_CLK_I2S3_SYNC, TEGRA30_CLK_CLK_MAX, 24000000, 0 }, { TEGRA30_CLK_I2S4_SYNC, TEGRA30_CLK_CLK_MAX, 24000000, 0 }, { TEGRA30_CLK_VIMCLK_SYNC, TEGRA30_CLK_CLK_MAX, 24000000, 0 }, + { TEGRA30_CLK_HDA, TEGRA30_CLK_PLL_P, 102000000, 0 }, + { TEGRA30_CLK_HDA2CODEC_2X, TEGRA30_CLK_PLL_P, 48000000, 0 },/* must be the last entry */ { TEGRA30_CLK_CLK_MAX, TEGRA30_CLK_CLK_MAX, 0, 0 }, };
drivers/counter/ti-eqep.c +0 -35
@@ -235,36 +235,6 @@ static ssize_t ti_eqep_position_ceiling_write(struct counter_device *counter,return len; } -static ssize_t ti_eqep_position_floor_read (struct counter_device *counter, -struct counter_count *count, -void *ext_priv,char *buf) -{ -struct ti_eqep_cnt *priv = counter->priv; -u32 qposinit; - -regmap_read (priv->regmap32,QPOSINIT , &qposinit); - -return sprintf (buf,"%u\n" , qposinit); -} - -static ssize_t ti_eqep_position_floor_write (struct counter_device *counter, -struct counter_count *count, -void *ext_priv,const char *buf, -size_t len) -{ -struct ti_eqep_cnt *priv = counter->priv; -int err; -u32 res; - - err =kstrtouint (buf,0 , &res); -if (err <0 ) -return err; - -regmap_write (priv->regmap32,QPOSINIT , res); - -return len; -} -static ssize_t ti_eqep_position_enable_read (struct counter_device *counter,struct counter_count *count,void *ext_priv,char *buf)
@@ -301,11 +271,6 @@ static struct counter_count_ext ti_eqep_position_ext[] = { .read = ti_eqep_position_ceiling_read, .write = ti_eqep_position_ceiling_write, }, - { - .name = "floor", - .read = ti_eqep_position_floor_read, - .write = ti_eqep_position_floor_write, - }, { .name = "enable", .read = ti_eqep_position_enable_read,
drivers/crypto/Kconfig +1 -0
@@ -366,6 +366,7 @@ if CRYPTO_DEV_OMAP config CRYPTO_DEV_OMAP_SHAM tristate "Support for OMAP MD5/SHA1/SHA2 hw accelerator" depends on ARCH_OMAP2PLUS + select CRYPTO_ENGINE select CRYPTO_SHA1 select CRYPTO_MD5 select CRYPTO_SHA256
drivers/gpio/Kconfig +2 -1
@@ -508,7 +508,8 @@ config GPIO_SAMA5D2_PIOBU config GPIO_SIFIVE bool "SiFive GPIO support" - depends on OF_GPIO && IRQ_DOMAIN_HIERARCHY + depends on OF_GPIO + select IRQ_DOMAIN_HIERARCHY select GPIO_GENERIC select GPIOLIB_IRQCHIP select REGMAP_MMIO
drivers/gpio/gpiolib-cdev.c +73 -72
187 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +0 -1
@@ -80,7 +80,6 @@ MODULE_FIRMWARE("amdgpu/renoir_gpu_info.bin");MODULE_FIRMWARE ("amdgpu/navi10_gpu_info.bin" );MODULE_FIRMWARE ("amdgpu/navi14_gpu_info.bin" );MODULE_FIRMWARE ("amdgpu/navi12_gpu_info.bin" ); -MODULE_FIRMWARE ("amdgpu/green_sardine_gpu_info.bin" );#define AMDGPU_RESUME_MS 2000
drivers/gpu/drm/amd/amdgpu/psp_gfx_if.h +1 -1
@@ -47,7 +47,7 @@ enum psp_gfx_crtl_cmd_idGFX_CTRL_CMD_ID_DISABLE_INT =0x00060000 ,/* disable PSP-to-Gfx interrupt */ GFX_CTRL_CMD_ID_MODE1_RST =0x00070000 ,/* trigger the Mode 1 reset */ GFX_CTRL_CMD_ID_GBR_IH_SET =0x00080000 ,/* set Gbr IH_RB_CNTL registers */ -GFX_CTRL_CMD_ID_CONSUME_CMD =0x000A0000 ,/* send interrupt to psp for updating write pointer of vf */ +GFX_CTRL_CMD_ID_CONSUME_CMD =0x00090000 ,/* send interrupt to psp for updating write pointer of vf */ GFX_CTRL_CMD_ID_DESTROY_GPCOM_RING =0x000C0000 ,/* destroy GPCOM ring */ GFX_CTRL_CMD_ID_MAX = 0x000F0000, /* max command ID */
drivers/gpu/drm/amd/amdkfd/kfd_crat.c +7 -4
@@ -1034,11 +1034,14 @@ static int kfd_create_vcrat_image_cpu(void *pcrat_image, size_t *size) (struct crat_subtype_iolink *)sub_type_hdr);if (ret <0 )return ret; - crat_table->length += (sub_type_hdr->length * entries); - crat_table->total_entries += entries; - sub_type_hdr = (typeof (sub_type_hdr))((char *)sub_type_hdr + - sub_type_hdr->length * entries); +if (entries) { + crat_table->length += (sub_type_hdr->length * entries); + crat_table->total_entries += entries; + + sub_type_hdr = (typeof (sub_type_hdr))((char *)sub_type_hdr + + sub_type_hdr->length * entries); + }#else pr_info ("IO link not available for non x86 platforms\n" );#endif
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c +1 -1
@@ -113,7 +113,7 @@ int amdgpu_dm_crtc_configure_crc_source(struct drm_crtc *crtc,mutex_lock (&adev->dm.dc_lock);/* Enable CRTC CRC generation if necessary. */ -if (dm_is_crc_source_crtc (source)) { +if (dm_is_crc_source_crtc (source) || source ==AMDGPU_DM_PIPE_CRC_SOURCE_NONE ) {if (!dc_stream_configure_crc (stream_state->ctx->dc, stream_state, enable, enable)) { ret = -EINVAL ;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +2 -2
@@ -608,8 +608,8 @@ static const struct dc_debug_options debug_defaults_drv = { .disable_pplib_clock_request = false, .disable_pplib_wm_range = false, .pplib_wm_report_mode = WM_REPORT_DEFAULT, - .pipe_split_policy = MPC_SPLIT_DYNAMIC, - .force_single_disp_pipe_split = true, + .pipe_split_policy = MPC_SPLIT_AVOID, + .force_single_disp_pipe_split = false, .disable_dcc = DCC_ENABLE, .voltage_align_fclk = true, .disable_stereo_support = true,
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +4 -3
@@ -2520,8 +2520,7 @@ struct pipe_ctx *dcn20_find_secondary_pipe(struct dc *dc,* if this primary pipe has a bottom pipe in prev. state * and if the bottom pipe is still available (which it should be), * pick that pipe as secondary -* Same logic applies for ODM pipes. Since mpo is not allowed with odm -* check in else case. +* Same logic applies for ODM pipes */ if (dc->current_state->res_ctx.pipe_ctx[primary_pipe->pipe_idx].bottom_pipe) { preferred_pipe_idx = dc->current_state->res_ctx.pipe_ctx[primary_pipe->pipe_idx].bottom_pipe->pipe_idx;
@@ -2529,7 +2528,9 @@ struct pipe_ctx *dcn20_find_secondary_pipe(struct dc *dc, secondary_pipe = &res_ctx->pipe_ctx[preferred_pipe_idx]; secondary_pipe->pipe_idx = preferred_pipe_idx; } - }else if (dc->current_state->res_ctx.pipe_ctx[primary_pipe->pipe_idx].next_odm_pipe) { + } +if (secondary_pipe ==NULL && + dc->current_state->res_ctx.pipe_ctx[primary_pipe->pipe_idx].next_odm_pipe) { preferred_pipe_idx = dc->current_state->res_ctx.pipe_ctx[primary_pipe->pipe_idx].next_odm_pipe->pipe_idx;if (res_ctx->pipe_ctx[preferred_pipe_idx].stream ==NULL ) { secondary_pipe = &res_ctx->pipe_ctx[preferred_pipe_idx];
drivers/gpu/drm/drm_atomic_helper.c +1 -1
@@ -3007,7 +3007,7 @@ int drm_atomic_helper_set_config(struct drm_mode_set *set, ret =handle_conflicting_encoders (state, true);if (ret) -return ret; + goto fail; ret =drm_atomic_commit (state);
drivers/gpu/drm/drm_syncobj.c +5 -3
@@ -388,19 +388,18 @@ int drm_syncobj_find_fence(struct drm_file *file_private,return -ENOENT ; *fence =drm_syncobj_fence_get (syncobj); -drm_syncobj_put (syncobj);if (*fence) { ret =dma_fence_chain_find_seqno (fence, point);if (!ret) -return 0 ; + goto out;dma_fence_put (*fence); }else { ret = -EINVAL ; }if (!(flags &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT )) -return ret; + goto out;memset (&wait,0 ,sizeof (wait)); wait.task = current;
@@ -432,6 +431,9 @@ int drm_syncobj_find_fence(struct drm_file *file_private,if (wait.node.next)drm_syncobj_remove_wait (syncobj, &wait); +out: +drm_syncobj_put (syncobj); +return ret; }EXPORT_SYMBOL (drm_syncobj_find_fence);
drivers/gpu/drm/i915/display/intel_ddi.c +4 -4
@@ -3387,7 +3387,7 @@ static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,intel_ddi_init_dp_buf_reg (encoder);if (!is_mst) -intel_dp_sink_dpms (intel_dp,DRM_MODE_DPMS_ON ); +intel_dp_set_power (intel_dp,DP_SET_POWER_D0 );intel_dp_sink_set_decompression_state (intel_dp, crtc_state, true);/*
@@ -3469,8 +3469,8 @@ static void hsw_ddi_pre_enable_dp(struct intel_atomic_state *state,intel_ddi_init_dp_buf_reg (encoder);if (!is_mst) -intel_dp_sink_dpms (intel_dp,DRM_MODE_DPMS_ON ); -intel_dp_configure_protocol_converter (intel_dp); +intel_dp_set_power (intel_dp,DP_SET_POWER_D0 ); +intel_dp_configure_protocol_converter (intel_dp, crtc_state);intel_dp_sink_set_decompression_state (intel_dp, crtc_state, true);intel_dp_sink_set_fec_ready (intel_dp, crtc_state);
@@ -3647,7 +3647,7 @@ static void intel_ddi_post_disable_dp(struct intel_atomic_state *state,* Power down sink before disabling the port, otherwise we end * up getting interrupts from the sink on detecting link loss. */ -intel_dp_sink_dpms (intel_dp,DRM_MODE_DPMS_OFF ); +intel_dp_set_power (intel_dp,DP_SET_POWER_D3 );if (INTEL_GEN (dev_priv) >=12 ) {if (is_mst) {
drivers/gpu/drm/i915/display/intel_dp.c +17 -16
@@ -3496,22 +3496,22 @@ void intel_dp_sink_set_decompression_state(struct intel_dp *intel_dp, enable ? "enable" : "disable"); } -/* If the sink supports it, try to set the power state appropriately */ -void intel_dp_sink_dpms (struct intel_dp *intel_dp,int mode) +/* If the device supports it, try to set the power state appropriately */ +void intel_dp_set_power (struct intel_dp *intel_dp,u8 mode) { -struct drm_i915_private *i915 =dp_to_i915 (intel_dp); +struct intel_encoder *encoder = &dp_to_dig_port (intel_dp)->base; +struct drm_i915_private *i915 =to_i915 (encoder->base.dev);int ret, i;/* Should have a valid DPCD by this point */ if (intel_dp->dpcd[DP_DPCD_REV ] <0x11 )return ; -if (mode !=DRM_MODE_DPMS_ON ) { +if (mode !=DP_SET_POWER_D0 ) {if (downstream_hpd_needs_d0 (intel_dp))return ; - ret =drm_dp_dpcd_writeb (&intel_dp->aux,DP_SET_POWER , -DP_SET_POWER_D3 ); + ret =drm_dp_dpcd_writeb (&intel_dp->aux,DP_SET_POWER , mode); }else {struct intel_lspcon *lspcon =dp_to_lspcon (intel_dp);
@@ -3520,8 +3520,7 @@ void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)* time to wake up. */ for (i =0 ; i <3 ; i++) { - ret =drm_dp_dpcd_writeb (&intel_dp->aux,DP_SET_POWER , -DP_SET_POWER_D0 ); + ret =drm_dp_dpcd_writeb (&intel_dp->aux,DP_SET_POWER , mode);if (ret ==1 )break ;msleep (1 );
@@ -3532,8 +3531,9 @@ void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode) }if (ret !=1 ) -drm_dbg_kms (&i915->drm,"failed to %s sink power state\n" , - mode ==DRM_MODE_DPMS_ON ?"enable" :"disable" ); +drm_dbg_kms (&i915->drm,"[ENCODER:%d:%s] Set power to %s failed\n" , + encoder->base.base.id, encoder->base.name, + mode ==DP_SET_POWER_D0 ?"D0" :"D3" ); } static bool cpt_dp_port_selected(struct drm_i915_private *dev_priv,
@@ -3707,7 +3707,7 @@ static void intel_disable_dp(struct intel_atomic_state *state,* ensure that we have vdd while we switch off the panel. */ intel_edp_panel_vdd_on (intel_dp);intel_edp_backlight_off (old_conn_state); -intel_dp_sink_dpms (intel_dp,DRM_MODE_DPMS_OFF ); +intel_dp_set_power (intel_dp,DP_SET_POWER_D3 );intel_edp_panel_off (intel_dp); }
@@ -3856,7 +3856,8 @@ static void intel_dp_enable_port(struct intel_dp *intel_dp,intel_de_posting_read (dev_priv, intel_dp->output_reg); } -void intel_dp_configure_protocol_converter (struct intel_dp *intel_dp) +void intel_dp_configure_protocol_converter (struct intel_dp *intel_dp, +const struct intel_crtc_state *crtc_state) {struct drm_i915_private *i915 =dp_to_i915 (intel_dp);u8 tmp;
@@ -3875,8 +3876,8 @@ void intel_dp_configure_protocol_converter(struct intel_dp *intel_dp)drm_dbg_kms (&i915->drm,"Failed to set protocol converter HDMI mode to %s\n" ,enableddisabled (intel_dp->has_hdmi_sink)); - tmp = intel_dp->dfp.ycbcr_444_to_420 ? -DP_CONVERSION_TO_YCBCR420_ENABLE :0 ; + tmp = crtc_state->output_format ==INTEL_OUTPUT_FORMAT_YCBCR444 && + intel_dp->dfp.ycbcr_444_to_420 ?DP_CONVERSION_TO_YCBCR420_ENABLE :0 ;if (drm_dp_dpcd_writeb (&intel_dp->aux,DP_PROTOCOL_CONVERTER_CONTROL_1 , tmp) !=1 )
@@ -3929,8 +3930,8 @@ static void intel_enable_dp(struct intel_atomic_state *state, lane_mask); } -intel_dp_sink_dpms (intel_dp,DRM_MODE_DPMS_ON ); -intel_dp_configure_protocol_converter (intel_dp); +intel_dp_set_power (intel_dp,DP_SET_POWER_D0 ); +intel_dp_configure_protocol_converter (intel_dp, pipe_config);intel_dp_start_link_train (intel_dp);intel_dp_stop_link_train (intel_dp);
drivers/gpu/drm/i915/display/intel_dp.h +3 -2
@@ -50,8 +50,9 @@ int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp, int link_rate, u8 lane_count);int intel_dp_retrain_link (struct intel_encoder *encoder,struct drm_modeset_acquire_ctx *ctx); -void intel_dp_sink_dpms (struct intel_dp *intel_dp,int mode); -void intel_dp_configure_protocol_converter (struct intel_dp *intel_dp); +void intel_dp_set_power (struct intel_dp *intel_dp,u8 mode); +void intel_dp_configure_protocol_converter (struct intel_dp *intel_dp, +const struct intel_crtc_state *crtc_state);void intel_dp_sink_set_decompression_state (struct intel_dp *intel_dp,const struct intel_crtc_state *crtc_state,bool enable);
drivers/gpu/drm/i915/display/intel_dp_mst.c +1 -1
@@ -488,7 +488,7 @@ static void intel_mst_pre_enable_dp(struct intel_atomic_state *state, intel_dp->active_mst_links);if (first_mst_stream) -intel_dp_sink_dpms (intel_dp,DRM_MODE_DPMS_ON ); +intel_dp_set_power (intel_dp,DP_SET_POWER_D0 );drm_dp_send_power_updown_phy (&intel_dp->mst_mgr, connector->port, true);
drivers/gpu/drm/i915/display/intel_hdcp.c +9 -0
@@ -2187,6 +2187,7 @@ void intel_hdcp_update_pipe(struct intel_atomic_state *state,if (content_protection_type_changed) {mutex_lock (&hdcp->mutex); hdcp->value =DRM_MODE_CONTENT_PROTECTION_DESIRED ; +drm_connector_get (&connector->base);schedule_work (&hdcp->prop_work);mutex_unlock (&hdcp->mutex); }
@@ -2198,6 +2199,14 @@ void intel_hdcp_update_pipe(struct intel_atomic_state *state, desired_and_not_enabled = hdcp->value !=DRM_MODE_CONTENT_PROTECTION_ENABLED ;mutex_unlock (&hdcp->mutex); +/* +* If HDCP already ENABLED and CP property is DESIRED, schedule +* prop_work to update correct CP property to user space. +*/ +if (!desired_and_not_enabled && !content_protection_type_changed) { +drm_connector_get (&connector->base); +schedule_work (&hdcp->prop_work); + } }if (desired_and_not_enabled || content_protection_type_changed)
drivers/gpu/drm/i915/gt/intel_breadcrumbs.c +2 -7
@@ -134,11 +134,6 @@ static bool remove_signaling_context(struct intel_breadcrumbs *b,return true; } -static inline bool __request_completed (const struct i915_request *rq) -{ -return i915_seqno_passed (__hwsp_seqno (rq), rq->fence.seqno); -} -__maybe_unused static bool check_signal_order (struct intel_context *ce,struct i915_request *rq) {
@@ -257,7 +252,7 @@ static void signal_irq_work(struct irq_work *work) list_for_each_entry_rcu(rq, &ce->signals, signal_link) { bool release; - if (!__request_completed(rq)) + if (!__i915_request_is_complete(rq)) break; if (!test_and_clear_bit(I915_FENCE_FLAG_SIGNAL,
@@ -379,7 +374,7 @@ static void insert_breadcrumb(struct i915_request *rq)* straight onto a signaled list, and queue the irq worker for * its signal completion. */ -if (__request_completed (rq)) { +if (__i915_request_is_complete (rq)) {if (__signal_request (rq) &&llist_add (&rq->signal_node, &b->signaled_requests))irq_work_queue (&b->irq_work);
drivers/gpu/drm/i915/gt/intel_lrc.c +3 -0
@@ -3936,6 +3936,9 @@ static int lrc_setup_wa_ctx(struct intel_engine_cs *engine)static void lrc_destroy_wa_ctx (struct intel_engine_cs *engine) {i915_vma_unpin_and_release (&engine->wa_ctx.vma,0 ); + +/* Called on error unwind, clear all flags to prevent further use */ +memset (&engine->wa_ctx,0 ,sizeof (engine->wa_ctx)); }typedef u32 *(*wa_bb_func_t )(struct intel_engine_cs *engine,u32 *batch);
drivers/gpu/drm/i915/gt/intel_timeline.c +4 -6
@@ -126,6 +126,10 @@ static void __rcu_cacheline_free(struct rcu_head *rcu)struct intel_timeline_cacheline *cl =container_of (rcu,typeof (*cl), rcu); +/* Must wait until after all *rq->hwsp are complete before removing */ +i915_gem_object_unpin_map (cl->hwsp->vma->obj); +__idle_hwsp_free (cl->hwsp,ptr_unmask_bits (cl->vaddr,CACHELINE_BITS )); +i915_active_fini (&cl->active);kfree (cl); }
@@ -133,11 +137,6 @@ static void __rcu_cacheline_free(struct rcu_head *rcu)static void __idle_cacheline_free (struct intel_timeline_cacheline *cl) {GEM_BUG_ON (!i915_active_is_idle (&cl->active)); - -i915_gem_object_unpin_map (cl->hwsp->vma->obj); -i915_vma_put (cl->hwsp->vma); -__idle_hwsp_free (cl->hwsp,ptr_unmask_bits (cl->vaddr,CACHELINE_BITS )); -call_rcu (&cl->rcu, __rcu_cacheline_free); }
@@ -179,7 +178,6 @@ cacheline_alloc(struct intel_timeline_hwsp *hwsp, unsigned int cacheline)return ERR_CAST (vaddr); } -i915_vma_get (hwsp->vma); cl->hwsp = hwsp; cl->vaddr =page_pack_bits (vaddr, cacheline);
drivers/gpu/drm/i915/i915_request.h +32 -5
@@ -434,7 +434,7 @@ static inline u32 hwsp_seqno(const struct i915_request *rq)static inline bool __i915_request_has_started (const struct i915_request *rq) { -return i915_seqno_passed (hwsp_seqno (rq), rq->fence.seqno -1 ); +return i915_seqno_passed (__hwsp_seqno (rq), rq->fence.seqno -1 ); }/**
@@ -465,11 +465,19 @@ static inline bool __i915_request_has_started(const struct i915_request *rq)*/ static inline bool i915_request_started (const struct i915_request *rq) { +bool result; +if (i915_request_signaled (rq))return true; -/* Remember: started but may have since been preempted! */ -return __i915_request_has_started (rq); + result = true; +rcu_read_lock ();/* the HWSP may be freed at runtime */ +if (likely (!i915_request_signaled (rq))) +/* Remember: started but may have since been preempted! */ + result =__i915_request_has_started (rq); +rcu_read_unlock (); + +return result; }/**
@@ -482,10 +490,16 @@ static inline bool i915_request_started(const struct i915_request *rq)*/ static inline bool i915_request_is_running (const struct i915_request *rq) { +bool result; +if (!i915_request_is_active (rq))return false; -return __i915_request_has_started (rq); +rcu_read_lock (); + result =__i915_request_has_started (rq) &&i915_request_is_active (rq); +rcu_read_unlock (); + +return result; }/**
@@ -509,12 +523,25 @@ static inline bool i915_request_is_ready(const struct i915_request *rq)return !list_empty (&rq->sched.link); } +static inline bool __i915_request_is_complete (const struct i915_request *rq) +{ +return i915_seqno_passed (__hwsp_seqno (rq), rq->fence.seqno); +} +static inline bool i915_request_completed (const struct i915_request *rq) { +bool result; +if (i915_request_signaled (rq))return true; -return i915_seqno_passed (hwsp_seqno (rq), rq->fence.seqno); + result = true; +rcu_read_lock ();/* the HWSP may be freed at runtime */ +if (likely (!i915_request_signaled (rq))) + result =__i915_request_is_complete (rq); +rcu_read_unlock (); + +return result; }static inline void i915_request_mark_complete (struct i915_request *rq)
drivers/gpu/drm/nouveau/dispnv50/disp.c +2 -2
@@ -221,7 +221,7 @@ nv50_dmac_wait(struct nvif_push *push, u32 size)int nv50_dmac_create (struct nvif_device *device,struct nvif_object *disp, -const s32 *oclass,u8 head,void *data,u32 size,u64 syncbuf, +const s32 *oclass,u8 head,void *data,u32 size,s64 syncbuf,struct nv50_dmac *dmac) {struct nouveau_cli *cli = (void *)device->object.client;
@@ -270,7 +270,7 @@ nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,if (ret)return ret; -if (!syncbuf) +if (syncbuf <0 )return 0 ; ret = nvif_object_ctor(&dmac->base.user, "kmsSyncCtxDma", NV50_DISP_HANDLE_SYNCBUF,
drivers/gpu/drm/nouveau/dispnv50/disp.h +1 -1
@@ -95,7 +95,7 @@ struct nv50_outp_atom {int nv50_dmac_create (struct nvif_device *device,struct nvif_object *disp,const s32 *oclass,u8 head,void *data,u32 size, -u64 syncbuf,struct nv50_dmac *dmac); +s64 syncbuf,struct nv50_dmac *dmac);void nv50_dmac_destroy (struct nv50_dmac *);/*
drivers/gpu/drm/nouveau/dispnv50/wimmc37b.c +1 -1
@@ -76,7 +76,7 @@ wimmc37b_init_(const struct nv50_wimm_func *func, struct nouveau_drm *drm,int ret; ret =nv50_dmac_create (&drm->client.device, &disp->disp->object, - &oclass,0 , &args,sizeof (args),0 , + &oclass,0 , &args,sizeof (args),-1 , &wndw->wimm);if (ret) {NV_ERROR (drm,"wimm%04x allocation failed: %d\n" , oclass, ret);
drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c +1 -1
@@ -75,7 +75,7 @@ shadow_image(struct nvkm_bios *bios, int idx, u32 offset, struct shadow *mthd)nvkm_debug (subdev,"%08x: type %02x, %d bytes\n" , image.base, image.type, image.size); -if (!shadow_fetch (bios, mthd, image.size)) { +if (!shadow_fetch (bios, mthd, image.base + image.size)) {nvkm_debug (subdev,"%08x: fetch failed\n" , image.base);return 0 ; }
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.c +4 -4
@@ -33,7 +33,7 @@ static void gm200_i2c_aux_fini(struct gm200_i2c_aux *aux) {struct nvkm_device *device = aux->base.pad->i2c->subdev.device; -nvkm_mask (device,0x00d954 + (aux->ch *0x50 ),0x00310000 ,0x00000000 ); +nvkm_mask (device,0x00d954 + (aux->ch *0x50 ),0x00710000 ,0x00000000 ); } static int
@@ -54,10 +54,10 @@ gm200_i2c_aux_init(struct gm200_i2c_aux *aux)AUX_ERR (&aux->base,"begin idle timeout %08x" , ctrl);return -EBUSY ; } - }while (ctrl &0x03010000 ); + }while (ctrl &0x07010000 );/* set some magic, and wait up to 1ms for it to appear */ -nvkm_mask (device,0x00d954 + (aux->ch *0x50 ),0x00300000 , ureq); +nvkm_mask (device,0x00d954 + (aux->ch *0x50 ),0x00700000 , ureq); timeout =1000 ; do { ctrl = nvkm_rd32(device, 0x00d954 + (aux->ch * 0x50));
@@ -67,7 +67,7 @@ gm200_i2c_aux_init(struct gm200_i2c_aux *aux)gm200_i2c_aux_fini (aux);return -EBUSY ; } - }while ((ctrl &0x03000000 ) != urep); + }while ((ctrl &0x07000000 ) != urep);return 0 ; }
drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gf100.c +7 -3
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ #include "priv.h" +#include <subdev/timer.h> static void gf100_ibus_intr_hub (struct nvkm_subdev *ibus,int i)
@@ -31,7 +32,6 @@ gf100_ibus_intr_hub(struct nvkm_subdev *ibus, int i)u32 data =nvkm_rd32 (device,0x122124 + (i *0x0400 ));u32 stat =nvkm_rd32 (device,0x122128 + (i *0x0400 ));nvkm_debug (ibus,"HUB%d: %06x %08x (%08x)\n" , i, addr, data, stat); -nvkm_mask (device,0x122128 + (i *0x0400 ),0x00000200 ,0x00000000 ); } static void
@@ -42,7 +42,6 @@ gf100_ibus_intr_rop(struct nvkm_subdev *ibus, int i)u32 data =nvkm_rd32 (device,0x124124 + (i *0x0400 ));u32 stat =nvkm_rd32 (device,0x124128 + (i *0x0400 ));nvkm_debug (ibus,"ROP%d: %06x %08x (%08x)\n" , i, addr, data, stat); -nvkm_mask (device,0x124128 + (i *0x0400 ),0x00000200 ,0x00000000 ); } static void
@@ -53,7 +52,6 @@ gf100_ibus_intr_gpc(struct nvkm_subdev *ibus, int i)u32 data =nvkm_rd32 (device,0x128124 + (i *0x0400 ));u32 stat =nvkm_rd32 (device,0x128128 + (i *0x0400 ));nvkm_debug (ibus,"GPC%d: %06x %08x (%08x)\n" , i, addr, data, stat); -nvkm_mask (device,0x128128 + (i *0x0400 ),0x00000200 ,0x00000000 ); }void
@@ -90,6 +88,12 @@ gf100_ibus_intr(struct nvkm_subdev *ibus) intr1 &= ~stat; } } + +nvkm_mask (device,0x121c4c ,0x0000003f ,0x00000002 ); +nvkm_msec (device,2000 , + if (!(nvkm_rd32(device, 0x121c4c) & 0x0000003f)) + break; + ); } static int
drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c +7 -3
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ #include "priv.h" +#include <subdev/timer.h> static void gk104_ibus_intr_hub (struct nvkm_subdev *ibus,int i)
@@ -31,7 +32,6 @@ gk104_ibus_intr_hub(struct nvkm_subdev *ibus, int i)u32 data =nvkm_rd32 (device,0x122124 + (i *0x0800 ));u32 stat =nvkm_rd32 (device,0x122128 + (i *0x0800 ));nvkm_debug (ibus,"HUB%d: %06x %08x (%08x)\n" , i, addr, data, stat); -nvkm_mask (device,0x122128 + (i *0x0800 ),0x00000200 ,0x00000000 ); } static void
@@ -42,7 +42,6 @@ gk104_ibus_intr_rop(struct nvkm_subdev *ibus, int i)u32 data =nvkm_rd32 (device,0x124124 + (i *0x0800 ));u32 stat =nvkm_rd32 (device,0x124128 + (i *0x0800 ));nvkm_debug (ibus,"ROP%d: %06x %08x (%08x)\n" , i, addr, data, stat); -nvkm_mask (device,0x124128 + (i *0x0800 ),0x00000200 ,0x00000000 ); } static void
@@ -53,7 +52,6 @@ gk104_ibus_intr_gpc(struct nvkm_subdev *ibus, int i)u32 data =nvkm_rd32 (device,0x128124 + (i *0x0800 ));u32 stat =nvkm_rd32 (device,0x128128 + (i *0x0800 ));nvkm_debug (ibus,"GPC%d: %06x %08x (%08x)\n" , i, addr, data, stat); -nvkm_mask (device,0x128128 + (i *0x0800 ),0x00000200 ,0x00000000 ); }void
@@ -90,6 +88,12 @@ gk104_ibus_intr(struct nvkm_subdev *ibus) intr1 &= ~stat; } } + +nvkm_mask (device,0x12004c ,0x0000003f ,0x00000002 ); +nvkm_msec (device,2000 , + if (!(nvkm_rd32(device, 0x12004c) & 0x0000003f)) + break; + ); } static int
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c +3 -3
@@ -316,9 +316,9 @@ nvkm_mmu_vram(struct nvkm_mmu *mmu) {struct nvkm_device *device = mmu->subdev.device;struct nvkm_mm *mm = &device->fb->ram->vram; -const u32 sizeN =nvkm_mm_heap_size (mm,NVKM_RAM_MM_NORMAL ); -const u32 sizeU =nvkm_mm_heap_size (mm,NVKM_RAM_MM_NOMAP ); -const u32 sizeM =nvkm_mm_heap_size (mm,NVKM_RAM_MM_MIXED ); +const u64 sizeN =nvkm_mm_heap_size (mm,NVKM_RAM_MM_NORMAL ); +const u64 sizeU =nvkm_mm_heap_size (mm,NVKM_RAM_MM_NOMAP ); +const u64 sizeM =nvkm_mm_heap_size (mm,NVKM_RAM_MM_MIXED );u8 type =NVKM_MEM_KIND * !!mmu->func->kind;u8 heap =NVKM_MEM_VRAM ;int heapM, heapN, heapU;
drivers/gpu/drm/vc4/vc4_hdmi.c +1 -0
@@ -1268,6 +1268,7 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) card->dai_link = dai_link; card->num_links =1 ; card->name = vc4_hdmi->variant->card_name; + card->driver_name ="vc4-hdmi" ; card->dev = dev; card->owner =THIS_MODULE ;
drivers/hid/Kconfig +1 -0
@@ -899,6 +899,7 @@ config HID_SONY depends on NEW_LEDS depends on LEDS_CLASS select POWER_SUPPLY + select CRC32 help Support for
drivers/hid/hid-ids.h +1 -0
@@ -387,6 +387,7 @@#define USB_DEVICE_ID_TOSHIBA_CLICK_L9W 0x0401#define USB_DEVICE_ID_HP_X2 0x074d#define USB_DEVICE_ID_HP_X2_10_COVER 0x0755 +#define USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN 0x2706#define USB_VENDOR_ID_ELECOM 0x056e#define USB_DEVICE_ID_ELECOM_BM084 0x0061
drivers/hid/hid-input.c +2 -0
@@ -322,6 +322,8 @@ static const struct hid_device_id hid_battery_quirks[] = { {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD ), HID_BATTERY_QUIRK_IGNORE }, + { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN), + HID_BATTERY_QUIRK_IGNORE }, {} };
drivers/hid/hid-logitech-dj.c +4 -0
@@ -1869,6 +1869,10 @@ static const struct hid_device_id logi_dj_receivers[] = { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 0xc531), .driver_data = recvr_type_gaming_hidpp}, + {/* Logitech G602 receiver (0xc537) */ +HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH , + 0xc537), + .driver_data = recvr_type_gaming_hidpp}, { /* Logitech lightspeed receiver (0xc539) */HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH , USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1),
drivers/hid/hid-logitech-hidpp.c +2 -0
@@ -4051,6 +4051,8 @@ static const struct hid_device_id hidpp_devices[] = { {/* MX Master mouse over Bluetooth */ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb012), .driver_data = HIDPP_QUIRK_HI_RES_SCROLL_X2121 }, + { /* MX Ergo trackball over Bluetooth */ + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01d) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01e), .driver_data = HIDPP_QUIRK_HI_RES_SCROLL_X2121 }, { /* MX Master 3 mouse over Bluetooth */
drivers/hid/hid-multitouch.c +4 -0
@@ -2054,6 +2054,10 @@ static const struct hid_device_id mt_devices[] = {HID_DEVICE (BUS_I2C ,HID_GROUP_MULTITOUCH_WIN_8 , USB_VENDOR_ID_SYNAPTICS, 0xce08) }, + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT, +HID_DEVICE (BUS_I2C ,HID_GROUP_MULTITOUCH_WIN_8 , + USB_VENDOR_ID_SYNAPTICS, 0xce09) }, + /* TopSeed panels */ { .driver_data = MT_CLS_TOPSEED, MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
drivers/hv/vmbus_drv.c +0 -2
@@ -2542,7 +2542,6 @@ static void hv_kexec_handler(void)/* Make sure conn_state is set as hv_synic_cleanup checks for it */ mb ();cpuhp_remove_state (hyperv_cpuhp_online); -hyperv_cleanup (); };static void hv_crash_handler (struct pt_regs *regs)
@@ -2558,7 +2557,6 @@ static void hv_crash_handler(struct pt_regs *regs) cpu =smp_processor_id ();hv_stimer_cleanup (cpu);hv_synic_disable_regs (cpu); -hyperv_cleanup (); };static int hv_synic_suspend (void )
drivers/hwtracing/intel_th/pci.c +5 -0
@@ -268,6 +268,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7aa6), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { +/* Alder Lake-P */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x51a6 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, {/* Alder Lake CPU */ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x466f),
drivers/hwtracing/stm/heartbeat.c +4 -2
@@ -64,7 +64,7 @@ static void stm_heartbeat_unlink(struct stm_source_data *data)static int stm_heartbeat_init (void ) { -int i, ret = -ENOMEM ; +int i, ret;if (nr_devs <0 || nr_devs >STM_HEARTBEAT_MAX )return -EINVAL ;
@@ -72,8 +72,10 @@ static int stm_heartbeat_init(void)for (i =0 ; i < nr_devs; i++) { stm_heartbeat[i].data.name =kasprintf (GFP_KERNEL ,"heartbeat.%d" , i); -if (!stm_heartbeat[i].data.name) +if (!stm_heartbeat[i].data.name) { + ret = -ENOMEM ; goto fail_unregister; + } stm_heartbeat[i].data.nr_chans =1 ; stm_heartbeat[i].data.link = stm_heartbeat_link;
drivers/i2c/busses/Kconfig +1 -0
@@ -1012,6 +1012,7 @@ config I2C_SIRF config I2C_SPRD tristate "Spreadtrum I2C interface" depends on I2C=y && (ARCH_SPRD || COMPILE_TEST) + depends on COMMON_CLK help If you say yes to this option, support will be included for the Spreadtrum I2C interface.
drivers/i2c/busses/i2c-octeon-core.c +1 -1
@@ -347,7 +347,7 @@ static int octeon_i2c_read(struct octeon_i2c *i2c, int target,if (result)return result;if (recv_len && i ==0 ) { -if (data[i] >I2C_SMBUS_BLOCK_MAX +1 ) +if (data[i] >I2C_SMBUS_BLOCK_MAX )return -EPROTO ; length += data[i]; }
drivers/i2c/busses/i2c-tegra-bpmp.c +1 -1
@@ -80,7 +80,7 @@ static int tegra_bpmp_xlate_flags(u16 flags, u16 *out) flags &= ~I2C_M_RECV_LEN ; } -return (flags !=0 ) ? -EINVAL :0 ; +return 0 ; }/**
drivers/i2c/busses/i2c-tegra.c +1 -1
@@ -533,7 +533,7 @@ static int tegra_i2c_poll_register(struct tegra_i2c_dev *i2c_dev,void __iomem *addr = i2c_dev->base +tegra_i2c_reg_addr (i2c_dev, reg);u32 val; -if (!i2c_dev->atomic_mode) +if (!i2c_dev->atomic_mode && !in_irq ())return readl_relaxed_poll_timeout (addr, val, !(val & mask), delay_us, timeout_us);
drivers/iio/adc/ti_am335x_adc.c +1 -5
@@ -397,16 +397,12 @@ static int tiadc_iio_buffered_hardware_setup(struct device *dev, ret =devm_request_threaded_irq (dev, irq, pollfunc_th, pollfunc_bh, flags, indio_dev->name, indio_dev);if (ret) - goto error_kfifo_free; +return ret; indio_dev->setup_ops = setup_ops; indio_dev->modes |=INDIO_BUFFER_SOFTWARE ;return 0 ; - -error_kfifo_free: -iio_kfifo_free (indio_dev->buffer); -return ret; }static const char *const chan_name_ain[] = {
drivers/iio/common/st_sensors/st_sensors_trigger.c +17 -14
@@ -23,35 +23,31 @@* @sdata: Sensor data. * * returns: -* 0 - no new samples available -* 1 - new samples available -* negative - error or unknown +* false - no new samples available or read error +* true - new samples available */ -static int st_sensors_new_samples_available (struct iio_dev *indio_dev, -struct st_sensor_data *sdata) +static bool st_sensors_new_samples_available (struct iio_dev *indio_dev, +struct st_sensor_data *sdata) {int ret, status;/* How would I know if I can't check it? */ if (!sdata->sensor_settings->drdy_irq.stat_drdy.addr) -return -EINVAL ; +return true;/* No scan mask, no interrupt */ if (!indio_dev->active_scan_mask) -return 0 ; +return false; ret =regmap_read (sdata->regmap, sdata->sensor_settings->drdy_irq.stat_drdy.addr, &status);if (ret <0 ) {dev_err (sdata->dev,"error checking samples available\n" ); -return ret; +return false; } -if (status & sdata->sensor_settings->drdy_irq.stat_drdy.mask) -return 1 ; - -return 0 ; +return !!(status & sdata->sensor_settings->drdy_irq.stat_drdy.mask); }/**
@@ -180,9 +176,15 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,/* Tell the interrupt handler that we're dealing with edges */ if (irq_trig ==IRQF_TRIGGER_FALLING || - irq_trig ==IRQF_TRIGGER_RISING ) + irq_trig ==IRQF_TRIGGER_RISING ) { +if (!sdata->sensor_settings->drdy_irq.stat_drdy.addr) { +dev_err (&indio_dev->dev, +"edge IRQ not supported w/o stat register.\n" ); + err = -EOPNOTSUPP ; + goto iio_trigger_free; + } sdata->edge_irq = true; -else + }else {/* * If we're not using edges (i.e. level interrupts) we * just mask off the IRQ, handle one interrupt, then
@@ -190,6 +192,7 @@ int st_sensors_allocate_trigger(struct iio_dev *indio_dev,* interrupt handler top half again and start over. */ irq_trig |=IRQF_ONESHOT ; + }/* * If the interrupt pin is Open Drain, by definition this
drivers/iio/dac/ad5504.c +2 -2
@@ -187,9 +187,9 @@ static ssize_t ad5504_write_dac_powerdown(struct iio_dev *indio_dev,return ret;if (pwr_down) - st->pwr_down_mask |= (1 << chan->channel); -else st->pwr_down_mask &= ~(1 << chan->channel); +else + st->pwr_down_mask |= (1 << chan->channel); ret = ad5504_spi_write(st, AD5504_ADDR_CTRL, AD5504_DAC_PWRDWN_MODE(st->pwr_down_mode) |
drivers/iio/temperature/mlx90632.c +6 -0
@@ -248,6 +248,12 @@ static int mlx90632_set_meas_type(struct regmap *regmap, u8 type)if (ret <0 )return ret; +/* +* Give the mlx90632 some time to reset properly before sending a new I2C command +* if this is not done, the following I2C command(s) will not be accepted. +*/ +usleep_range (150 ,200 ); + ret =regmap_write_bits (regmap,MLX90632_REG_CONTROL , (MLX90632_CFG_MTYP_MASK |MLX90632_CFG_PWR_MASK ), (MLX90632_MTYP_STATUS (type) |MLX90632_PWR_STATUS_HALT ));
drivers/infiniband/core/cma_configfs.c +3 -1
@@ -131,8 +131,10 @@ static ssize_t default_roce_mode_store(struct config_item *item,return ret; gid_type =ib_cache_gid_parse_type_str (buf); -if (gid_type <0 ) +if (gid_type <0 ) { +cma_configfs_params_put (cma_dev);return -EINVAL ; + } ret =cma_set_default_gid_type (cma_dev, group->port_num, gid_type);
drivers/infiniband/core/ucma.c +72 -63
260 lines not on this page · raw message
drivers/infiniband/core/umem.c +1 -1
@@ -126,7 +126,7 @@ unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem,*/ if (mask) pgsz_bitmap &=GENMASK (count_trailing_zeros (mask),0 ); -return rounddown_pow_of_two (pgsz_bitmap); +return pgsz_bitmap ?rounddown_pow_of_two (pgsz_bitmap) :0 ; }EXPORT_SYMBOL (ib_umem_find_best_pgsz);
drivers/interconnect/imx/imx8mq.c +2 -0
@@ -7,6 +7,7 @@#include <linux/module.h> #include <linux/platform_device.h> +#include <linux/interconnect-provider.h> #include <dt-bindings/interconnect/imx8mq.h> #include "imx.h"
@@ -94,6 +95,7 @@ static struct platform_driver imx8mq_icc_driver = { .remove = imx8mq_icc_remove, .driver = { .name = "imx8mq-interconnect", + .sync_state = icc_sync_state, }, };
drivers/irqchip/irq-mips-cpu.c +7 -0
@@ -197,6 +197,13 @@ static int mips_cpu_ipi_alloc(struct irq_domain *domain, unsigned int virq,if (ret)return ret; + ret =irq_domain_set_hwirq_and_chip (domain->parent, virq + i, hwirq, + &mips_mt_cpu_irq_controller, +NULL ); + +if (ret) +return ret; + ret =irq_set_irq_type (virq + i,IRQ_TYPE_LEVEL_HIGH );if (ret)return ret;
drivers/lightnvm/core.c +1 -2
@@ -844,11 +844,10 @@ static int nvm_bb_chunk_sense(struct nvm_dev *dev, struct ppa_addr ppa) rqd.ppa_addr =generic_to_dev_addr (dev, ppa); ret =nvm_submit_io_sync_raw (dev, &rqd); +__free_page (page);if (ret)return ret; -__free_page (page); -return rqd.error; }
drivers/md/Kconfig +1 -0
@@ -585,6 +585,7 @@ config DM_INTEGRITY select BLK_DEV_INTEGRITY select DM_BUFIO select CRYPTO + select CRYPTO_SKCIPHER select ASYNC_XOR help This device-mapper target emulates a block device that has
drivers/md/dm-crypt.c +3 -3
@@ -1481,9 +1481,9 @@ static int crypt_alloc_req_skcipher(struct crypt_config *cc,static int crypt_alloc_req_aead (struct crypt_config *cc,struct convert_context *ctx) { -if (!ctx->r.req) { - ctx->r.req =mempool_alloc (&cc->req_pool,in_interrupt () ?GFP_ATOMIC :GFP_NOIO ); -if (!ctx->r.req) +if (!ctx->r.req_aead) { + ctx->r.req_aead =mempool_alloc (&cc->req_pool,in_interrupt () ?GFP_ATOMIC :GFP_NOIO ); +if (!ctx->r.req_aead)return -ENOMEM ; }
drivers/md/dm-integrity.c +30 -2
@@ -257,8 +257,9 @@ struct dm_integrity_c {bool journal_uptodate;bool just_formatted;bool recalculate_flag; -bool fix_padding;bool discard; +bool fix_padding; +bool legacy_recalculate;struct alg_spec internal_hash_alg;struct alg_spec journal_crypt_alg;
@@ -386,6 +387,14 @@ static int dm_integrity_failed(struct dm_integrity_c *ic)return READ_ONCE (ic->failed); } +static bool dm_integrity_disable_recalculate (struct dm_integrity_c *ic) +{ +if ((ic->internal_hash_alg.key || ic->journal_mac_alg.key) && + !ic->legacy_recalculate) +return true; +return false; +} +static commit_id_t dm_integrity_commit_id (struct dm_integrity_c *ic,unsigned i,unsigned j,unsigned char seq) {
@@ -3140,6 +3149,7 @@ static void dm_integrity_status(struct dm_target *ti, status_type_t type, arg_count += !!ic->journal_crypt_alg.alg_string; arg_count += !!ic->journal_mac_alg.alg_string; arg_count += (ic->sb->flags &cpu_to_le32 (SB_FLAG_FIXED_PADDING )) !=0 ; + arg_count += ic->legacy_recalculate;DMEMIT ("%s %llu %u %c %u" , ic->dev->name, ic->start, ic->tag_size, ic->mode, arg_count);if (ic->meta_dev)
@@ -3163,6 +3173,8 @@ static void dm_integrity_status(struct dm_target *ti, status_type_t type, }if ((ic->sb->flags &cpu_to_le32 (SB_FLAG_FIXED_PADDING )) !=0 )DMEMIT (" fix_padding" ); +if (ic->legacy_recalculate) +DMEMIT (" legacy_recalculate" );#define EMIT_ALG (a, n) \ do { \
@@ -3792,7 +3804,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)unsigned extra_args;struct dm_arg_set as;static const struct dm_arg _args[] = { - {0 ,15 ,"Invalid number of feature args" }, + {0 ,16 ,"Invalid number of feature args" }, };unsigned journal_sectors, interleave_sectors, buffer_sectors, journal_watermark, sync_msec;bool should_write_sb;
@@ -3940,6 +3952,8 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) ic->discard = true; }else if (!strcmp (opt_string,"fix_padding" )) { ic->fix_padding = true; + }else if (!strcmp (opt_string,"legacy_recalculate" )) { + ic->legacy_recalculate = true; }else { r = -EINVAL ; ti->error ="Invalid argument" ;
@@ -4235,6 +4249,20 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) r = -ENOMEM ; goto bad; } + }else { +if (ic->sb->flags &cpu_to_le32 (SB_FLAG_RECALCULATING )) { + ti->error ="Recalculate can only be specified with internal_hash" ; + r = -EINVAL ; + goto bad; + } + } + +if (ic->sb->flags &cpu_to_le32 (SB_FLAG_RECALCULATING ) && +le64_to_cpu (ic->sb->recalc_sector) < ic->provided_data_sectors && +dm_integrity_disable_recalculate (ic)) { + ti->error ="Recalculating with HMAC is disabled for security reasons - if you really need it, use the argument \"legacy_recalculate\"" ; + r = -EOPNOTSUPP ; + goto bad; } ic->bufio = dm_bufio_client_create(ic->meta_dev ? ic->meta_dev->bdev : ic->dev->bdev,
drivers/md/dm-table.c +12 -3
@@ -370,14 +370,23 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode, {int r;dev_t dev; +unsigned int major, minor; +char dummy;struct dm_dev_internal *dd;struct dm_table *t = ti->table;BUG_ON (!t); - dev =dm_get_dev_t (path); -if (!dev) -return -ENODEV ; +if (sscanf (path,"%u:%u%c" , &major, &minor, &dummy) ==2 ) { +/* Extract the major/minor numbers */ + dev =MKDEV (major, minor); +if (MAJOR (dev) != major ||MINOR (dev) != minor) +return -EOVERFLOW ; + }else { + dev =dm_get_dev_t (path); +if (!dev) +return -ENODEV ; + } dd =find_device (&t->devices, dev);if (!dd) {
drivers/mmc/core/queue.c +3 -1
@@ -384,8 +384,10 @@ static void mmc_setup_queue(struct mmc_queue *mq, struct mmc_card *card) "merging was advertised but not possible");blk_queue_max_segments (mq->queue,mmc_get_max_segments (host)); -if (mmc_card_mmc (card)) +if (mmc_card_mmc (card) && card->ext_csd.data_sector_size) { block_size = card->ext_csd.data_sector_size; +WARN_ON (block_size !=512 && block_size !=4096 ); + }blk_queue_logical_block_size (mq->queue, block_size);/*
drivers/mmc/host/sdhci-brcmstb.c +1 -5
@@ -314,11 +314,7 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev)static void sdhci_brcmstb_shutdown (struct platform_device *pdev) { -int ret; - - ret =sdhci_pltfm_unregister (pdev); -if (ret) -dev_err (&pdev->dev,"failed to shutdown\n" ); +sdhci_pltfm_suspend (&pdev->dev); }MODULE_DEVICE_TABLE (of, sdhci_brcm_of_match);
drivers/mmc/host/sdhci-of-dwcmshc.c +27 -0
@@ -16,6 +16,8 @@#include "sdhci-pltfm.h" +#define SDHCI_DWCMSHC_ARG2_STUFF GENMASK(31, 16) +/* DWCMSHC specific Mode Select value */ #define DWCMSHC_CTRL_HS400 0x7
@@ -49,6 +51,29 @@ static void dwcmshc_adma_write_desc(struct sdhci_host *host, void **desc,sdhci_adma_write_desc (host, desc, addr, len, cmd); } +static void dwcmshc_check_auto_cmd23 (struct mmc_host *mmc, +struct mmc_request *mrq) +{ +struct sdhci_host *host =mmc_priv (mmc); + +/* +* No matter V4 is enabled or not, ARGUMENT2 register is 32-bit +* block count register which doesn't support stuff bits of +* CMD23 argument on dwcmsch host controller. +*/ +if (mrq->sbc && (mrq->sbc->arg &SDHCI_DWCMSHC_ARG2_STUFF )) + host->flags &= ~SDHCI_AUTO_CMD23 ; +else + host->flags |=SDHCI_AUTO_CMD23 ; +} + +static void dwcmshc_request (struct mmc_host *mmc,struct mmc_request *mrq) +{ +dwcmshc_check_auto_cmd23 (mmc, mrq); + +sdhci_request (mmc, mrq); +} +static void dwcmshc_set_uhs_signaling (struct sdhci_host *host,unsigned int timing) {
@@ -133,6 +158,8 @@ static int dwcmshc_probe(struct platform_device *pdev)sdhci_get_of_property (pdev); + host->mmc_host_ops.request = dwcmshc_request; + err =sdhci_add_host (host);if (err) goto err_clk;
drivers/mmc/host/sdhci-xenon.c +6 -1
@@ -167,7 +167,12 @@ static void xenon_reset_exit(struct sdhci_host *host,/* Disable tuning request and auto-retuning again */ xenon_retune_setup (host); -xenon_set_acg (host, true); +/* +* The ACG should be turned off at the early init time, in order +* to solve a possible issues with the 1.8V regulator stabilization. +* The feature is enabled in later stage. +*/ +xenon_set_acg (host, false);xenon_set_sdclk_off_idle (host, sdhc_id, false);
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c +1 -1
@@ -1613,7 +1613,7 @@ static int gpmi_ecc_read_page_raw(struct nand_chip *chip, uint8_t *buf,/* Extract interleaved payload data and ECC bits */ for (step =0 ; step < nfc_geo->ecc_chunk_count; step++) {if (buf) -nand_extract_bits (buf, step * eccsize, tmp_buf, +nand_extract_bits (buf, step * eccsize *8 , tmp_buf, src_bit_off, eccsize *8 ); src_bit_off += eccsize *8 ;
drivers/mtd/nand/raw/nandsim.c +3 -4
@@ -2211,6 +2211,9 @@ static int ns_attach_chip(struct nand_chip *chip) {unsigned int eccsteps, eccbytes; + chip->ecc.engine_type =NAND_ECC_ENGINE_TYPE_SOFT ; + chip->ecc.algo = bch ?NAND_ECC_ALGO_BCH :NAND_ECC_ALGO_HAMMING ; +if (!bch)return 0 ;
@@ -2234,8 +2237,6 @@ static int ns_attach_chip(struct nand_chip *chip)return -EINVAL ; } - chip->ecc.engine_type =NAND_ECC_ENGINE_TYPE_SOFT ; - chip->ecc.algo =NAND_ECC_ALGO_BCH ; chip->ecc.size =512 ; chip->ecc.strength = bch; chip->ecc.bytes = eccbytes;
@@ -2274,8 +2275,6 @@ static int __init ns_init_module(void) nsmtd =nand_to_mtd (chip);nand_set_controller_data (chip, (void *)ns); - chip->ecc.engine_type =NAND_ECC_ENGINE_TYPE_SOFT ; - chip->ecc.algo =NAND_ECC_ALGO_HAMMING ;/* The NAND_SKIP_BBTSCAN option is necessary for 'overridesize' */ /* and 'badblocks' parameters to work */ chip->options |=NAND_SKIP_BBTSCAN ;
drivers/net/can/dev.c +2 -2
@@ -592,11 +592,11 @@ static void can_restart(struct net_device *dev) cf->can_id |=CAN_ERR_RESTARTED ; -netif_rx_ni (skb); - stats->rx_packets++; stats->rx_bytes += cf->can_dlc; +netif_rx_ni (skb); + restart:netdev_dbg (dev,"restarted\n" ); priv->can_stats.restarts++;
drivers/net/can/usb/peak_usb/pcan_usb_fd.c +4 -4
@@ -512,11 +512,11 @@ static int pcan_usb_fd_decode_canmsg(struct pcan_usb_fd_if *usb_if,else memcpy (cfd->data, rm->d, cfd->len); -peak_usb_netif_rx (skb, &usb_if->time_ref,le32_to_cpu (rm->ts_low)); - netdev->stats.rx_packets++; netdev->stats.rx_bytes += cfd->len; +peak_usb_netif_rx (skb, &usb_if->time_ref,le32_to_cpu (rm->ts_low)); +return 0 ; }
@@ -578,11 +578,11 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if,if (!skb)return -ENOMEM ; -peak_usb_netif_rx (skb, &usb_if->time_ref,le32_to_cpu (sm->ts_low)); - netdev->stats.rx_packets++; netdev->stats.rx_bytes += cf->can_dlc; +peak_usb_netif_rx (skb, &usb_if->time_ref,le32_to_cpu (sm->ts_low)); +return 0 ; }
drivers/net/can/vxcan.c +4 -2
@@ -39,6 +39,7 @@ static netdev_tx_t vxcan_xmit(struct sk_buff *skb, struct net_device *dev)struct net_device *peer;struct canfd_frame *cfd = (struct canfd_frame *)skb->data;struct net_device_stats *peerstats, *srcstats = &dev->stats; +u8 len;if (can_dropped_invalid_skb (dev, skb))return NETDEV_TX_OK ;
@@ -61,12 +62,13 @@ static netdev_tx_t vxcan_xmit(struct sk_buff *skb, struct net_device *dev) skb->dev = peer; skb->ip_summed =CHECKSUM_UNNECESSARY ; + len = cfd->len;if (netif_rx_ni (skb) ==NET_RX_SUCCESS ) { srcstats->tx_packets++; - srcstats->tx_bytes += cfd->len; + srcstats->tx_bytes += len; peerstats = &peer->stats; peerstats->rx_packets++; - peerstats->rx_bytes += cfd->len; + peerstats->rx_bytes += len; } out_unlock:
drivers/net/dsa/b53/b53_common.c +1 -1
@@ -1404,7 +1404,7 @@ int b53_vlan_prepare(struct dsa_switch *ds, int port, !(vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED))return -EINVAL ; -if (vlan->vid_end > dev->num_vlans) +if (vlan->vid_end >= dev->num_vlans)return -ERANGE ;b53_enable_vlan (dev, true, ds->vlan_filtering);
drivers/net/dsa/mv88e6xxx/global1_vtu.c +4 -0
@@ -351,6 +351,10 @@ int mv88e6250_g1_vtu_getnext(struct mv88e6xxx_chip *chip,if (err)return err; + err =mv88e6185_g1_stu_data_read (chip, entry); +if (err) +return err; +/* VTU DBNum[3:0] are located in VTU Operation 3:0 * VTU DBNum[5:4] are located in VTU Operation 9:8 */
drivers/net/ethernet/broadcom/bcmsysport.c +4 -2
@@ -2503,8 +2503,10 @@ static int bcm_sysport_probe(struct platform_device *pdev) priv =netdev_priv (dev); priv->clk =devm_clk_get_optional (&pdev->dev,"sw_sysport" ); -if (IS_ERR (priv->clk)) -return PTR_ERR (priv->clk); +if (IS_ERR (priv->clk)) { + ret =PTR_ERR (priv->clk); + goto err_free_netdev; + }/* Allocate number of TX rings */ priv->tx_rings = devm_kcalloc(&pdev->dev, txq,
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c +6 -0
@@ -454,6 +454,9 @@ int rvu_mbox_handler_cgx_mac_addr_set(struct rvu *rvu,int pf =rvu_get_pf (req->hdr.pcifunc);u8 cgx_id, lmac_id; +if (!is_cgx_config_permitted (rvu, req->hdr.pcifunc)) +return -EPERM ; +rvu_get_cgx_lmac_id (rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id);cgx_lmac_addr_set (cgx_id, lmac_id, req->mac_addr);
@@ -470,6 +473,9 @@ int rvu_mbox_handler_cgx_mac_addr_get(struct rvu *rvu,int rc =0 , i;u64 cfg; +if (!is_cgx_config_permitted (rvu, req->hdr.pcifunc)) +return -EPERM ; +rvu_get_cgx_lmac_id (rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id); rsp->hdr.rc = rc;
drivers/net/ethernet/mscc/ocelot.c +18 -5
@@ -60,14 +60,27 @@ int ocelot_mact_learn(struct ocelot *ocelot, int port,const unsigned char mac[ETH_ALEN ], unsigned int vid, enum macaccess_entry_type type) { + u32 cmd = ANA_TABLES_MACACCESS_VALID | +ANA_TABLES_MACACCESS_DEST_IDX (port) | +ANA_TABLES_MACACCESS_ENTRYTYPE (type) | +ANA_TABLES_MACACCESS_MAC_TABLE_CMD (MACACCESS_CMD_LEARN ); +unsigned int mc_ports; + +/* Set MAC_CPU_COPY if the CPU port is used by a multicast entry */ +if (type == ENTRYTYPE_MACv4) + mc_ports = (mac[1 ] <<8 ) | mac[2 ]; +else if (type == ENTRYTYPE_MACv6) + mc_ports = (mac[0 ] <<8 ) | mac[1 ]; +else + mc_ports =0 ; + +if (mc_ports &BIT (ocelot->num_phys_ports)) + cmd |=ANA_TABLES_MACACCESS_MAC_CPU_COPY ; +ocelot_mact_select (ocelot, mac, vid);/* Issue a write command */ -ocelot_write (ocelot,ANA_TABLES_MACACCESS_VALID | -ANA_TABLES_MACACCESS_DEST_IDX (port) | -ANA_TABLES_MACACCESS_ENTRYTYPE (type) | -ANA_TABLES_MACACCESS_MAC_TABLE_CMD (MACACCESS_CMD_LEARN ), -ANA_TABLES_MACACCESS ); +ocelot_write (ocelot, cmd,ANA_TABLES_MACACCESS );return ocelot_mact_wait_for_completion (ocelot); }
drivers/net/ethernet/mscc/ocelot_net.c +1 -3
@@ -952,10 +952,8 @@ static int ocelot_netdevice_event(struct notifier_block *unused,struct net_device *dev =netdev_notifier_info_to_dev (ptr);int ret =0 ; -if (!ocelot_netdevice_dev_check (dev)) -return 0 ; -if (event ==NETDEV_PRECHANGEUPPER && +ocelot_netdevice_dev_check (dev) &&netif_is_lag_master (info->upper_dev)) {struct netdev_lag_upper_info *lag_upper_info = info->upper_info;struct netlink_ext_ack *extack;
drivers/net/ethernet/renesas/sh_eth.c +2 -2
@@ -2606,10 +2606,10 @@ static int sh_eth_close(struct net_device *ndev)/* Free all the skbuffs in the Rx queue and the DMA buffer. */ sh_eth_ring_free (ndev); -pm_runtime_put_sync (&mdp->pdev->dev); - mdp->is_opened =0 ; +pm_runtime_put (&mdp->pdev->dev); +return 0 ; }
drivers/nvme/host/pci.c +67 -38
174 lines not on this page · raw message
drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c +1 -1
@@ -347,7 +347,7 @@ FUNC_GROUP_DECL(RMII4, F24, E23, E24, E25, C25, C24, B26, B25, B24);#define D22 40SIG_EXPR_LIST_DECL_SESG (D22 ,SD1CLK ,SD1 ,SIG_DESC_SET (SCU414 ,8 )); -SIG_EXPR_LIST_DECL_SEMG (D22 ,PWM8 ,PWM8G0 ,PWM8 ,SIG_DESC_SET (SCU414 ,8 )); +SIG_EXPR_LIST_DECL_SEMG (D22 ,PWM8 ,PWM8G0 ,PWM8 ,SIG_DESC_SET (SCU4B4 ,8 ));PIN_DECL_2 (D22 ,GPIOF0 ,SD1CLK ,PWM8 );GROUP_DECL (PWM8G0 ,D22 );
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c +4 -0
@@ -926,6 +926,10 @@ int mtk_pinconf_adv_pull_set(struct mtk_pinctrl *hw, err = hw->soc->bias_set (hw, desc, pullup);if (err)return err; + }else if (hw->soc->bias_set_combo) { + err = hw->soc->bias_set_combo (hw, desc, pullup, arg); +if (err) +return err; }else {return -ENOTSUPP ; }
drivers/pinctrl/pinctrl-ingenic.c +13 -13
@@ -2052,7 +2052,7 @@ static inline bool ingenic_gpio_get_value(struct ingenic_gpio_chip *jzgc,static void ingenic_gpio_set_value (struct ingenic_gpio_chip *jzgc,u8 offset,int value) { -if (jzgc->jzpc->info->version >=ID_JZ4760 ) +if (jzgc->jzpc->info->version >=ID_JZ4770 )ingenic_gpio_set_bit (jzgc,JZ4760_GPIO_PAT0 , offset, !!value);else ingenic_gpio_set_bit (jzgc,JZ4740_GPIO_DATA , offset, !!value);
@@ -2082,7 +2082,7 @@ static void irq_set_type(struct ingenic_gpio_chip *jzgc,break ; } -if (jzgc->jzpc->info->version >=ID_JZ4760 ) { +if (jzgc->jzpc->info->version >=ID_JZ4770 ) { reg1 =JZ4760_GPIO_PAT1 ; reg2 =JZ4760_GPIO_PAT0 ; }else {
@@ -2122,7 +2122,7 @@ static void ingenic_gpio_irq_enable(struct irq_data *irqd)struct ingenic_gpio_chip *jzgc =gpiochip_get_data (gc);int irq = irqd->hwirq; -if (jzgc->jzpc->info->version >=ID_JZ4760 ) +if (jzgc->jzpc->info->version >=ID_JZ4770 )ingenic_gpio_set_bit (jzgc,JZ4760_GPIO_INT , irq, true);else ingenic_gpio_set_bit (jzgc,JZ4740_GPIO_SELECT , irq, true);
@@ -2138,7 +2138,7 @@ static void ingenic_gpio_irq_disable(struct irq_data *irqd)ingenic_gpio_irq_mask (irqd); -if (jzgc->jzpc->info->version >=ID_JZ4760 ) +if (jzgc->jzpc->info->version >=ID_JZ4770 )ingenic_gpio_set_bit (jzgc,JZ4760_GPIO_INT , irq, false);else ingenic_gpio_set_bit (jzgc,JZ4740_GPIO_SELECT , irq, false);
@@ -2163,7 +2163,7 @@ static void ingenic_gpio_irq_ack(struct irq_data *irqd)irq_set_type (jzgc, irq,IRQ_TYPE_LEVEL_HIGH ); } -if (jzgc->jzpc->info->version >=ID_JZ4760 ) +if (jzgc->jzpc->info->version >=ID_JZ4770 )ingenic_gpio_set_bit (jzgc,JZ4760_GPIO_FLAG , irq, false);else ingenic_gpio_set_bit (jzgc,JZ4740_GPIO_DATA , irq, true);
@@ -2220,7 +2220,7 @@ static void ingenic_gpio_irq_handler(struct irq_desc *desc)chained_irq_enter (irq_chip, desc); -if (jzgc->jzpc->info->version >=ID_JZ4760 ) +if (jzgc->jzpc->info->version >=ID_JZ4770 ) flag =ingenic_gpio_read_reg (jzgc,JZ4760_GPIO_FLAG );else flag =ingenic_gpio_read_reg (jzgc,JZ4740_GPIO_FLAG );
@@ -2302,7 +2302,7 @@ static int ingenic_gpio_get_direction(struct gpio_chip *gc, unsigned int offset)struct ingenic_pinctrl *jzpc = jzgc->jzpc;unsigned int pin = gc->base + offset; -if (jzpc->info->version >=ID_JZ4760 ) { +if (jzpc->info->version >=ID_JZ4770 ) {if (ingenic_get_pin_config (jzpc, pin,JZ4760_GPIO_INT ) ||ingenic_get_pin_config (jzpc, pin,JZ4760_GPIO_PAT1 ))return GPIO_LINE_DIRECTION_IN ;
@@ -2360,7 +2360,7 @@ static int ingenic_pinmux_set_pin_fn(struct ingenic_pinctrl *jzpc,ingenic_shadow_config_pin (jzpc, pin,JZ4760_GPIO_PAT1 , func &0x2 );ingenic_shadow_config_pin (jzpc, pin,JZ4760_GPIO_PAT0 , func &0x1 );
Lines of this file are not shown. View the raw message.
drivers/pinctrl/qcom/pinctrl-msm.c +60 -36
96 lines not on this page · raw message
drivers/platform/x86/i2c-multi-instantiate.c +23 -8
Lines of this file are not shown. View the raw message.
drivers/scsi/megaraid/megaraid_sas_base.c +2 -4
Lines of this file are not shown. View the raw message.
drivers/tty/tty_io.c +27 -24
51 lines not on this page · raw message
drivers/usb/gadget/udc/aspeed-vhub/epn.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/xen/xenbus/xenbus_probe.c +67 -14
81 lines not on this page · raw message
fs/io_uring.c +37 -6
43 lines not on this page · raw message
fs/kernfs/file.c +24 -41
65 lines not on this page · raw message
net/sunrpc/svcsock.c +85 -1
86 lines not on this page · raw message
tools/testing/selftests/net/fib_tests.sh +0 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/powerpc/mm/pkey_exec_prot.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/powerpc/mm/pkey_siginfo.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.