Linux 6.1.55
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.55 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/admin-guide/cgroup-v1/memory.rst | 2 Documentation/arm64/silicon-errata.rst | 3 Makefile | 2 arch/arm/kernel/hw_breakpoint.c | 8 arch/arm/kernel/machine_kexec.c | 14 arch/arm64/boot/dts/qcom/sm6125-sony-xperia-seine-pdx201.dts | 2 arch/arm64/boot/dts/qcom/sm6350.dtsi | 2 arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi | 2 arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi | 2 arch/arm64/kernel/hw_breakpoint.c | 4 arch/mips/Makefile | 2 arch/mips/vdso/Makefile | 2 arch/powerpc/platforms/pseries/ibmebus.c | 1 arch/riscv/kernel/elf_kexec.c | 8 arch/x86/boot/compressed/ident_map_64.c | 8 arch/x86/include/asm/boot.h | 45 arch/x86/include/asm/linkage.h | 8 arch/x86/purgatory/Makefile | 4 block/bio-integrity.c | 7 block/bio.c | 12 crypto/lrw.c | 6 crypto/xts.c | 6 drivers/acpi/acpica/psopcode.c | 2 drivers/acpi/arm64/iort.c | 5 drivers/acpi/video_detect.c | 9 drivers/acpi/x86/s2idle.c | 6 drivers/ata/ahci.c | 9 drivers/ata/libahci.c | 35 drivers/ata/libata-sata.c | 19 drivers/bus/ti-sysc.c | 2 drivers/char/tpm/tpm_tis_core.c | 13 drivers/dma-buf/dma-buf.c | 53 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 18 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c | 3 drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c | 4 drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c | 4 drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c | 7 drivers/gpu/drm/bridge/tc358762.c | 2 drivers/gpu/drm/drm_edid.c | 1 drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 drivers/gpu/drm/mediatek/mtk_dp.c | 6 drivers/gpu/drm/tiny/gm12u320.c | 10 drivers/i2c/busses/i2c-aspeed.c | 7 drivers/interconnect/core.c | 18 drivers/md/dm.c | 23 drivers/md/md.c | 2 drivers/md/raid1.c | 3 drivers/media/pci/cx23885/cx23885-video.c | 2 drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 2 drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c | 2 drivers/media/tuners/qt1010.c | 11 drivers/media/usb/dvb-usb-v2/af9035.c | 14 drivers/media/usb/dvb-usb-v2/anysee.c | 2 drivers/media/usb/dvb-usb-v2/az6007.c | 8 drivers/media/usb/dvb-usb-v2/gl861.c | 2 drivers/media/usb/dvb-usb/af9005.c | 5 drivers/media/usb/dvb-usb/dw2102.c | 24 drivers/misc/Kconfig | 1 drivers/misc/fastrpc.c | 12 drivers/mmc/host/sdhci-esdhc-imx.c | 7 drivers/net/can/Kconfig | 4 drivers/net/can/sun4i_can.c | 22 drivers/net/ethernet/atheros/alx/ethtool.c | 5 drivers/net/ethernet/intel/ice/ice_eswitch.c | 3 drivers/net/wireless/ath/ath9k/ahb.c | 4 drivers/net/wireless/ath/ath9k/mac.h | 6 drivers/net/wireless/ath/ath9k/pci.c | 4 drivers/net/wireless/ath/ath9k/xmit.c | 4 drivers/net/wireless/ath/wil6210/txrx.c | 2 drivers/net/wireless/ath/wil6210/txrx.h | 6 drivers/net/wireless/ath/wil6210/txrx_edma.c | 2 drivers/net/wireless/ath/wil6210/txrx_edma.h | 6 drivers/net/wireless/mac80211_hwsim.c | 7 drivers/net/wireless/marvell/mwifiex/tdls.c | 9 drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 4 drivers/nvme/host/core.c | 54 drivers/nvme/target/io-cmd-file.c | 10 drivers/nvme/target/tcp.c | 5 drivers/pci/controller/dwc/pci-imx6.c | 1 drivers/pci/controller/dwc/pcie-fu740.c | 1 drivers/pci/controller/vmd.c | 19 drivers/perf/arm_smmuv3_pmu.c | 46 drivers/perf/fsl_imx8_ddr_perf.c | 21 drivers/scsi/lpfc/lpfc.h | 1 drivers/scsi/lpfc/lpfc_debugfs.c | 14 drivers/scsi/lpfc/lpfc_els.c | 25 drivers/scsi/lpfc/lpfc_init.c | 20 drivers/scsi/lpfc/lpfc_sli.c | 8 drivers/scsi/megaraid/megaraid_sas.h | 2 drivers/scsi/megaraid/megaraid_sas_base.c | 21 drivers/scsi/pm8001/pm8001_init.c | 51 drivers/scsi/qla2xxx/qla_dfs.c | 6 drivers/target/iscsi/iscsi_target_configfs.c | 54 drivers/target/target_core_transport.c | 1 drivers/tty/serial/cpm_uart/cpm_uart_core.c | 13 drivers/usb/cdns3/cdns3-plat.c | 3 drivers/usb/cdns3/cdnsp-pci.c | 3 drivers/usb/cdns3/core.c | 15 drivers/usb/cdns3/core.h | 7 drivers/usb/chipidea/ci.h | 1 drivers/usb/chipidea/ci_hdrc_imx.c | 4 drivers/usb/chipidea/core.c | 2 drivers/usb/chipidea/host.c | 1 drivers/usb/gadget/udc/fsl_qe_udc.c | 6 drivers/usb/host/ehci-hcd.c | 8 drivers/usb/host/ehci-hub.c | 10 drivers/usb/host/ehci.h | 10 fs/attr.c | 20 fs/autofs/waitq.c | 3 fs/btrfs/delayed-inode.c | 19 fs/btrfs/disk-io.c | 22 fs/btrfs/extent-tree.c | 5 fs/btrfs/ioctl.c | 8 fs/btrfs/ordered-data.c | 2 fs/btrfs/volumes.c | 8 fs/btrfs/volumes.h | 1 fs/ext2/xattr.c | 4 fs/ext4/namei.c | 26 fs/jfs/jfs_dmap.c | 1 fs/jfs/jfs_imap.c | 1 fs/locks.c | 2 fs/nfsd/nfs4proc.c | 4 fs/overlayfs/copy_up.c | 3 fs/overlayfs/file.c | 9 fs/tracefs/inode.c | 3 include/linux/acpi_iort.h | 1 include/linux/bvec.h | 15 include/linux/dma-buf.h | 6 include/linux/instruction_pointer.h | 5 include/linux/libata.h | 4 include/linux/perf_event.h | 22 include/linux/sched/task.h | 28 include/linux/usb/chipidea.h | 1 include/uapi/linux/netfilter_bridge/ebtables.h | 14 io_uring/net.c | 5 kernel/fork.c | 8 kernel/panic.c | 1 kernel/printk/printk.c | 80 - kernel/printk/printk_safe.c | 9 kernel/rcu/rcuscale.c | 2 kernel/scftorture.c | 6 kernel/trace/trace.c | 68 kernel/trace/trace.h | 2 kernel/trace/trace_events.c | 6 kernel/trace/trace_events_inject.c | 3 lib/kobject.c | 5 lib/mpi/mpi-cmp.c | 8 mm/memcontrol.c | 10 net/bluetooth/hci_core.c | 4 net/bridge/netfilter/ebtables.c | 3 net/core/sock.c | 6 net/devlink/leftover.c | 4 net/ipv4/ip_output.c | 2 net/mac80211/cfg.c | 15 net/mac80211/rx.c | 4 net/netlink/af_netlink.c | 90 - net/netlink/af_netlink.h | 22 net/netlink/diag.c | 10 net/sched/Kconfig | 28 net/sched/Makefile | 2 net/sched/cls_rsvp.c | 24 net/sched/cls_rsvp.h | 764 ---------- net/sched/cls_rsvp6.c | 24 net/sunrpc/clnt.c | 2 net/wireless/mlme.c | 13 net/wireless/ocb.c | 3 samples/hw_breakpoint/data_breakpoint.c | 4 security/selinux/hooks.c | 10 sound/hda/intel-dsp-config.c | 8 sound/soc/intel/boards/sof_sdw.c | 4 sound/soc/sof/topology.c | 5 tools/iio/iio_generic_buffer.c | 17 tools/lib/bpf/libbpf.c | 1 tools/testing/selftests/ftrace/ftracetest | 8 tools/testing/selftests/nolibc/nolibc-test.c | 33 tools/testing/selftests/tc-testing/tc-tests/filters/rsvp.json | 203 -- 179 files changed, 1238 insertions(+), 1610 deletions(-)
Abhishek Mainkar (1):
ACPICA: Add AML_NO_OPERAND_RESOLVE flag to Timer
Alexander Steffen (1):
tpm_tis: Resend command to recover from data transfer errors
Amir Goldstein (2):
ovl: fix failed copyup of fileattr on a symlink
ovl: fix incorrect fdput() on aio completion
Anand Jain (2):
btrfs: add a helper to read the superblock metadata_uuid
btrfs: compare the correct fsid/metadata_uuid in btrfs_validate_super
Andrew Kanner (1):
fs/jfs: prevent double-free in dbUnmount() after failed jfs_remount()
AngeloGioacchino Del Regno (1):
drm/mediatek: dp: Change logging to dev for mtk_dp_aux_transfer()
Arnd Bergmann (1):
samples/hw_breakpoint: fix building without module unloading
Austin Zheng (1):
drm/amd/display: Use DTBCLK as refclk instead of DPREFCLK
Azeem Shaikh (1):
crypto: lrw,xts - Replace strlcpy with strscpy
Baoquan He (1):
misc: open-dice: make OPEN_DICE depend on HAS_IOMEM
Chenyuan Mi (1):
tools: iio: iio_generic_buffer: Fix some integer type and calculation
Christian Brauner (1):
attr: block mode changes of symlinks
Christian König (1):
drm/amdgpu: fix amdgpu_cs_p1_user_fence
Christoph Hellwig (2):
block: factor out a bvec_set_page helper
nvmet: use bvec_set_page to initialize bvecs
Christophe Leroy (1):
serial: cpm_uart: Avoid suspicious locking
Damien Le Moal (1):
scsi: pm8001: Setup IRQs on resume
David Disseldorp (1):
scsi: target: core: Fix target_cmd_counter leak
Dmitry Antipov (3):
wifi: ath9k: fix fortify warnings
wifi: mwifiex: fix fortify warning
wifi: wil6210: fix fortify warnings
Dmitry Osipenko (2):
dma-buf: Add unlocked variant of attachment-mapping functions
misc: fastrpc: Prepare to dynamic dma-buf locking specification
Dongliang Mu (1):
wifi: ath9k: fix printk specifier
Ekansh Gupta (1):
misc: fastrpc: Fix incorrect DMA mapping unmap request
Eric Dumazet (1):
netlink: convert nlk->flags to atomic flags
Fedor Pchelkin (1):
autofs: fix memory leak of waitqueues in autofs_catatonic_mode
Filipe Manana (2):
btrfs: fix lockdep splat and potential deadlock after failure running delayed items
btrfs: release path before inode lookup during the ino lookup ioctl
GONG, Ruiqi (2):
alx: fix OOB-read compiler warning
netfilter: ebtables: fix fortify warnings in size_entry_mwt()
Georg Ottinger (1):
ext2: fix datatype of block number in ext2_xattr_set2()
Giulio Benetti (1):
mmc: sdhci-esdhc-imx: improve ESDHC_FLAG_ERR010450
Greg Kroah-Hartman (2):
Revert "memcg: drop kmem.limit_in_bytes"
Linux 6.1.55
Hamza Mahfooz (1):
Revert "drm/amd: Disable S/G for APUs when 64GB or more host memory"
Hans Verkuil (2):
media: tuners: qt1010: replace BUG_ON with a regular error
media: pci: cx23885: replace BUG with error return
Hao Luo (1):
libbpf: Free btf_vmlinux when closing bpf_object
Jamal Hadi Salim (1):
net/sched: Retire rsvp classifier
Jeff Layton (1):
nfsd: fix change_info in NFSv4 RENAME replies
Jens Axboe (1):
dm: don't attempt to queue IO under RCU protection
Jinjie Ruan (3):
drm: gm12u320: Fix the timeout usage for usb_bulk_msg()
scsi: qla2xxx: Fix NULL vs IS_ERR() bug for debugfs_create_dir()
scsi: lpfc: Fix the NULL vs IS_ERR() bug for debugfs_create_file()
Jiri Pirko (1):
devlink: remove reload failed checks in params get/set callbacks
Jiri Slaby (SUSE) (1):
ACPI: video: Add backlight=native DMI quirk for Lenovo Ideapad Z470
Johannes Berg (5):
wifi: mac80211: check S1G action frame size
wifi: cfg80211: reject auth/assoc to AP with our address
wifi: cfg80211: ocb: don't leave if not joined
wifi: mac80211: check for station first in client probe
wifi: mac80211_hwsim: drop short frames
John Ogness (2):
printk: Keep non-panic-CPUs out of console lock
printk: Consolidate console deferred printing
John Watts (2):
can: sun4i_can: Add acceptance register quirk
can: sun4i_can: Add support for the Allwinner D1
Josef Bacik (1):
btrfs: check for BTRFS_FS_ERROR in pending ordered assert
Junxiao Bi (1):
scsi: megaraid_sas: Fix deadlock on firmware crashdump
Justin Tee (1):
scsi: lpfc: Abort outstanding ELS cmds when mailbox timeout error is detected
Keith Busch (1):
nvme: avoid bogus CRTO values
Kirill A. Shutemov (1):
x86/boot/compressed: Reserve more memory for page tables
Konstantin Shelekhin (1):
scsi: target: iscsi: Fix buffer overflow in lio_target_nacl_info_show()
Krzysztof Kozlowski (4):
arm64: dts: qcom: sm6125-pdx201: correct ramoops pmsg-size
arm64: dts: qcom: sm6350: correct ramoops pmsg-size
arm64: dts: qcom: sm8150-kumano: correct ramoops pmsg-size
arm64: dts: qcom: sm8250-edo: correct ramoops pmsg-size
Kuniyuki Iwashima (1):
net: Use sockaddr_storage for getsockopt(SO_PEERNAME).
Leo Chen (2):
drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN31 drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN314
Leo Ma (1):
drm/amd/display: Fix underflow issue on 175hz timing
Liu Shixin via Jfs-discussion (1):
jfs: fix invalid free of JFS_IP(ipimap)->i_imap in diUnmount
Lu Hongfei (1):
media: mdp3: Fix resource leaks in of_find_device_by_node
Lukas Wunner (1):
panic: Reenable preemption in WARN slowpath
Ma Ke (1):
usb: gadget: fsl_qe_udc: validate endpoint index for ch9 udc
Marek Vasut (1):
drm/bridge: tc358762: Instruct DSI host to generate HSE packets
Mario Limonciello (1):
ACPI: x86: s2idle: Catch multiple ACPI_TYPE_PACKAGE objects
Mariusz Tkaczyk (1):
md: Put the right device in md_seq_next
Mark Brown (1):
PCI: dwc: Provide deinit callback for i.MX
Mark O'Donovan (1):
crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui()
Masami Hiramatsu (Google) (1):
selftests: tracing: Fix to unmount tracefs for recovering environment
Matt Whitlock (1):
mt76: mt7921: don't assume adequate headroom for SDIO headers
Mårten Lindahl (1):
ARM: 9317/1: kexec: Make smp stop calls asynchronous
Nigel Croxon (1):
md/raid1: fix error: ISO C90 forbids mixed declarations
Niklas Cassel (1):
ata: libata: disallow dev-initiated LPM transitions to unsupported states
Nirmal Patel (1):
PCI: vmd: Disable bridge window for domain reset
Ondrej Mosnacek (1):
selinux: fix handling of empty opts in selinux_fs_context_submount()
Paul E. McKenney (1):
scftorture: Forgive memory-allocation failure if KASAN
Pavel Begunkov (1):
io_uring/net: fix iter retargeting for selected buf
Peter Zijlstra (1):
x86/ibt: Suppress spurious ENDBR
Pierre-Louis Bossart (2):
ASoC: SOF: topology: simplify code to prevent static analysis warnings
ALSA: hda: intel-dsp-cfg: add LunarLake support
Qu Wenruo (2):
btrfs: output extra debug info if we failed to find an inline backref
btrfs: fix a compilation error if DEBUG is defined in btree_dirty_folio
Ralph Campbell (1):
drm/edid: Add quirk for OSVR HDK 2.0
Rob Clark (2):
interconnect: Fix locking for runpm vs reclaim
interconnect: Teach lockdep about icc_bw_lock order
Rong Tao (1):
samples/hw_breakpoint: Fix kernel BUG 'invalid opcode: 0000'
Sakari Ailus (1):
media: pci: ipu3-cio2: Initialise timing struct to avoid a compiler warning
Shida Zhang (1):
ext4: fix rec_len verify error
Song Liu (1):
x86/purgatory: Remove LTO flags
Song Shuai (1):
riscv: kexec: Align the kexeced kernel entry
Steven Rostedt (Google) (6):
tracing: Have tracing_max_latency inc the trace array ref count
tracing: Have event inject files inc the trace array ref count
tracing: Increase trace array ref count on enable and filter files
tracing: Have current_trace inc the trace array ref count
tracing: Have option files inc the trace array ref count
tracefs: Add missing lockdown check to tracefs_create_dir()
Szuying Chen (1):
ata: libahci: clear pending interrupt status
Tiezhu Yang (1):
MIPS: Use "grep -E" instead of "egrep"
Tomislav Novak (1):
hw_breakpoint: fix single-stepping when using bpf_overflow_handler
Tommy Huang (1):
i2c: aspeed: Reset the i2c controller when timeout occurs
Tony Lindgren (1):
bus: ti-sysc: Configure uart quirks for k3 SoC
Trond Myklebust (1):
Revert "SUNRPC: Fail faster on bad verifier"
Tuo Li (1):
drm/exynos: fix a possible null-pointer dereference due to data race in exynos_drm_crtc_atomic_disable()
Uday M Bhat (1):
ASoC: Intel: sof_sdw: Update BT offload config for soundwire config
Varun Prakash (1):
nvmet-tcp: pass iov_len instead of sg->length to bvec_set_page()
Wander Lairson Costa (1):
kernel/fork: beware of __put_task_struct() calling context
Will Shiu (1):
locks: fix KASAN: use-after-free in trace_event_raw_event_filelock_lock
Wojciech Drewek (1):
ice: Don't tx before switchdev is fully configured
Xiaolei Wang (1):
usb: cdns3: Put the cdns set active part outside the spin lock
Xu Yang (3):
perf/imx_ddr: speed up overflow frequency of cycle
usb: ehci: add workaround for chipidea PORTSC.PEC bug
usb: chipidea: add workaround for chipidea PEC bug
Yicong Yang (1):
perf/smmuv3: Enable HiSilicon Erratum 162001900 quirk for HIP08/09
Yifan Zhang (1):
drm/amd/display: fix the white screen issue when >= 64GB DRAM
Ying Hsu (1):
Bluetooth: Fix hci_suspend_sync crash
Yong-Xuan Wang (1):
PCI: fu740: Set the number of MSI vectors
Zhang Shurong (7):
md: raid1: fix potential OOB in raid1_remove_disk()
media: dvb-usb-v2: af9035: Fix null-ptr-deref in af9035_i2c_master_xfer
media: dw2102: Fix null-ptr-deref in dw2102_i2c_transfer()
media: af9005: Fix null-ptr-deref in af9005_i2c_xfer
media: anysee: fix null-ptr-deref in anysee_master_xfer
media: az6007: Fix null-ptr-deref in az6007_i2c_xfer()
media: dvb-usb-v2: gl861: Fix null-ptr-deref in gl861_i2c_master_xferZhangjin Wu (1):
selftests/nolibc: fix up kernel parameters support
Zhen Lei (1):
kobject: Add sanity check for kset->kobj.ktype in kset_register()
Zqiang (1):
rcuscale: Move rcu_scale_writer() schedule_timeout_uninterruptible() to _idle()
ruanjinjie (1):
powerpc/pseries: fix possible memory leak in ibmebus_bus_init()
xu xin (1):
net/ipv4: return the real errno instead of -EINVAL
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/cgroup-v1/memory.rst +2 -0
@@ -91,6 +91,8 @@ Brief summary of control files. memory.oom_control set/show oom controls. memory.numa_stat show the number of memory usage per numa node + memory.kmem.limit_in_bytes This knob is deprecated and writing to + it will return -ENOTSUPP. memory.kmem.usage_in_bytes show current kernel memory allocation memory.kmem.failcnt show the number of kernel memory usage hits limits
Documentation/arm64/silicon-errata.rst +3 -0
@@ -193,6 +193,9 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | Hisilicon | Hip08 SMMU PMCG | #162001800 | N/A | +----------------+-----------------+-----------------+-----------------------------+ +| Hisilicon | Hip08 SMMU PMCG | #162001900 | N/A | +| | Hip09 SMMU PMCG | | | ++----------------+-----------------+-----------------+-----------------------------+ +----------------+-----------------+-----------------+-----------------------------+ | Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | +----------------+-----------------+-----------------+-----------------------------+
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 54 +SUBLEVEL = 55 EXTRAVERSION = NAME = Curry Ramen
arch/arm/kernel/hw_breakpoint.c +4 -4
@@ -626,7 +626,7 @@ int hw_breakpoint_arch_parse(struct perf_event *bp, hw->address &= ~alignment_mask; hw->ctrl.len <<= offset; -if (is_default_overflow_handler (bp)) { +if (uses_default_overflow_handler (bp)) {/* * Mismatch breakpoints are required for single-stepping * breakpoints.
@@ -798,7 +798,7 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr,* Otherwise, insert a temporary mismatch breakpoint so that * we can single-step over the watchpoint trigger. */ -if (!is_default_overflow_handler (wp)) +if (!uses_default_overflow_handler (wp))continue ; step:enable_single_step (wp,instruction_pointer (regs));
@@ -811,7 +811,7 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr, info->trigger = addr;pr_debug ("watchpoint fired: address = 0x%x\n" , info->trigger);perf_bp_event (wp, regs); -if (is_default_overflow_handler (wp)) +if (uses_default_overflow_handler (wp))enable_single_step (wp,instruction_pointer (regs)); }
@@ -886,7 +886,7 @@ static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs) info->trigger = addr;pr_debug ("breakpoint fired: address = 0x%x\n" , addr);perf_bp_event (bp, regs); -if (is_default_overflow_handler (bp)) +if (uses_default_overflow_handler (bp))enable_single_step (bp, addr); goto unlock; }
arch/arm/kernel/machine_kexec.c +13 -1
@@ -92,16 +92,28 @@ void machine_crash_nonpanic_core(void *unused) } } +static DEFINE_PER_CPU(call_single_data_t, cpu_stop_csd) = +CSD_INIT (machine_crash_nonpanic_core, NULL); +void crash_smp_send_stop (void ) {static int cpus_stopped;unsigned long msecs; +call_single_data_t *csd; +int cpu, this_cpu =raw_smp_processor_id ();if (cpus_stopped)return ;atomic_set (&waiting_for_crash_ipi,num_online_cpus () -1 ); -smp_call_function (machine_crash_nonpanic_core,NULL , false); +for_each_online_cpu (cpu) { +if (cpu == this_cpu) +continue ; + + csd = &per_cpu (cpu_stop_csd, cpu); +smp_call_function_single_async (cpu, csd); + } + msecs =1000 ;/* Wait at most a second for the other cpus to stop */ while ((atomic_read (&waiting_for_crash_ipi) >0 ) && msecs) {mdelay (1 );
arch/arm64/boot/dts/qcom/sm6125-sony-xperia-seine-pdx201.dts +1 -1
@@ -73,7 +73,7 @@ pstore_mem: ramoops@ffc00000 { reg = <0x0 0xffc40000 0x0 0xc0000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; }; cmdline_mem: memory@ffd00000 {
arch/arm64/boot/dts/qcom/sm6350.dtsi +1 -1
@@ -346,7 +346,7 @@ ramoops: ramoops@ffc00000 { reg = <0 0xffc00000 0 0x100000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; ecc-size = <16>; no-map; };
arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi +1 -1
@@ -127,7 +127,7 @@ ramoops@ffc00000 { reg = <0x0 0xffc00000 0x0 0x100000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; ecc-size = <16>; no-map; };
arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi +1 -1
@@ -126,7 +126,7 @@ ramoops@ffc00000 { reg = <0x0 0xffc00000 0x0 0x100000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; ecc-size = <16>; no-map; };
arch/arm64/kernel/hw_breakpoint.c +2 -2
@@ -654,7 +654,7 @@ static int breakpoint_handler(unsigned long unused, unsigned long esr,perf_bp_event (bp, regs);/* Do we need to handle the stepping? */ -if (is_default_overflow_handler (bp)) +if (uses_default_overflow_handler (bp)) step =1 ; unlock:rcu_read_unlock ();
@@ -733,7 +733,7 @@ static u64 get_distance_from_watchpoint(unsigned long addr, u64 val,static int watchpoint_report (struct perf_event *wp,unsigned long addr,struct pt_regs *regs) { -int step =is_default_overflow_handler (wp); +int step =uses_default_overflow_handler (wp);struct arch_hw_breakpoint *info =counter_arch_bp (wp); info->trigger = addr;
arch/mips/Makefile +1 -1
@@ -352,7 +352,7 @@ KBUILD_LDFLAGS += -m $(ld-emul) ifdef need-compiler CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ - egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ + grep -E -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g') endif
arch/mips/vdso/Makefile +1 -1
@@ -71,7 +71,7 @@ KCOV_INSTRUMENT := n # Check that we don't have PIC 'jalr t9' calls left quiet_cmd_vdso_mips_check = VDSOCHK $@ - cmd_vdso_mips_check = if $(OBJDUMP) --disassemble $@ | egrep -h "jalr.*t9" > /dev/null; \ + cmd_vdso_mips_check = if $(OBJDUMP) --disassemble $@ | grep -E -h "jalr.*t9" > /dev/null; \ then (echo >&2 "$@: PIC 'jalr t9' calls are not supported"; \ rm -f $@; /bin/false); fi
arch/powerpc/platforms/pseries/ibmebus.c +1 -0
@@ -455,6 +455,7 @@ static int __init ibmebus_bus_init(void)if (err) {printk (KERN_WARNING "%s: device_register returned %i\n" , __func__, err); +put_device (&ibmebus_bus_device);bus_unregister (&ibmebus_bus_type);return err;
arch/riscv/kernel/elf_kexec.c +7 -1
@@ -98,7 +98,13 @@ static int elf_find_pbase(struct kimage *image, unsigned long kernel_len, kbuf.image = image; kbuf.buf_min = lowest_paddr; kbuf.buf_max =ULONG_MAX ; - kbuf.buf_align =PAGE_SIZE ; + +/* +* Current riscv boot protocol requires 2MB alignment for +* RV64 and 4MB alignment for RV32 +* +*/ + kbuf.buf_align =PMD_SIZE ; kbuf.mem =KEXEC_BUF_MEM_UNKNOWN ; kbuf.memsz =ALIGN (kernel_len,PAGE_SIZE ); kbuf.top_down = false;
arch/x86/boot/compressed/ident_map_64.c +8 -0
@@ -67,6 +67,14 @@ static void *alloc_pgt_page(void *context)return NULL ; } +/* Consumed more tables than expected? */ +if (pages->pgt_buf_offset ==BOOT_PGT_SIZE_WARN ) { +debug_putstr ("pgt_buf running low in " __FILE__"\n" ); +debug_putstr ("Need to raise BOOT_PGT_SIZE?\n" ); +debug_putaddr (pages->pgt_buf_offset); +debug_putaddr (pages->pgt_buf_size); + } + entry = pages->pgt_buf + pages->pgt_buf_offset; pages->pgt_buf_offset +=PAGE_SIZE ;
arch/x86/include/asm/boot.h +31 -14
54 lines not on this page · raw message
arch/x86/include/asm/linkage.h +8 -0
@@ -8,6 +8,14 @@#undef notrace#define notrace __attribute__((no_instrument_function)) +#ifdef CONFIG_64BIT +/* +* The generic version tends to create spurious ENDBR instructions under +* certain conditions. +*/ +#define _THIS_IP_ ({ unsigned long __here; asm ("lea 0(%%rip), %0" : "=r" (__here)); __here; }) +#endif +#ifdef CONFIG_X86_32 #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))#endif /* CONFIG_X86_32 */
arch/x86/purgatory/Makefile +4 -0
@@ -19,6 +19,10 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS # optimization flags. KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS)) +# When LTO is enabled, llvm emits many text sections, which is not supported +# by kexec. Remove -flto=* flags. +KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO),$(KBUILD_CFLAGS)) + # When linking purgatory.ro with -r unresolved symbols are not checked, # also link a purgatory.chk binary without -r to check for unresolved symbols. PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
block/bio-integrity.c +1 -6
@@ -124,23 +124,18 @@ int bio_integrity_add_page(struct bio *bio, struct page *page, unsigned int len, unsigned int offset) {struct bio_integrity_payload *bip =bio_integrity (bio); -struct bio_vec *iv;if (bip->bip_vcnt >= bip->bip_max_vcnt) {printk (KERN_ERR "%s: bip_vec full\n" , __func__);return 0 ; } - iv = bip->bip_vec + bip->bip_vcnt; -if (bip->bip_vcnt &&bvec_gap_to_prev (&bdev_get_queue (bio->bi_bdev)->limits, &bip->bip_vec[bip->bip_vcnt -1 ], offset))return 0 ; - iv->bv_page = page; - iv->bv_len = len; - iv->bv_offset = offset; +bvec_set_page (&bip->bip_vec[bip->bip_vcnt], page, len, offset); bip->bip_vcnt++;return len;
block/bio.c +2 -10
@@ -976,10 +976,7 @@ int bio_add_hw_page(struct request_queue *q, struct bio *bio,if (bio->bi_vcnt >=queue_max_segments (q))return 0 ; - bvec = &bio->bi_io_vec[bio->bi_vcnt]; - bvec->bv_page = page; - bvec->bv_len = len; - bvec->bv_offset = offset; +bvec_set_page (&bio->bi_io_vec[bio->bi_vcnt], page, len, offset); bio->bi_vcnt++; bio->bi_iter.bi_size += len;return len;
@@ -1055,15 +1052,10 @@ EXPORT_SYMBOL_GPL(bio_add_zone_append_page);void __bio_add_page (struct bio *bio,struct page *page,unsigned int len,unsigned int off) { -struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt]; -WARN_ON_ONCE (bio_flagged (bio,BIO_CLONED ));WARN_ON_ONCE (bio_full (bio, len)); - bv->bv_page = page; - bv->bv_offset = off; - bv->bv_len = len; - +bvec_set_page (&bio->bi_io_vec[bio->bi_vcnt], page, len, off); bio->bi_iter.bi_size += len; bio->bi_vcnt++; }
crypto/lrw.c +3 -3
@@ -357,10 +357,10 @@ static int lrw_create(struct crypto_template *tmpl, struct rtattr **tb)* cipher name. */ if (!strncmp (cipher_name,"ecb(" ,4 )) { -unsigned len; +int len; - len =strlcpy (ecb_name, cipher_name +4 ,sizeof (ecb_name)); -if (len <2 || len >=sizeof (ecb_name)) + len =strscpy (ecb_name, cipher_name +4 ,sizeof (ecb_name)); +if (len <2 ) goto err_free_inst;if (ecb_name[len -1 ] !=')' )
crypto/xts.c +3 -3
@@ -396,10 +396,10 @@ static int xts_create(struct crypto_template *tmpl, struct rtattr **tb)* cipher name. */ if (!strncmp (cipher_name,"ecb(" ,4 )) { -unsigned len; +int len; - len =strlcpy (ctx->name, cipher_name +4 ,sizeof (ctx->name)); -if (len <2 || len >=sizeof (ctx->name)) + len =strscpy (ctx->name, cipher_name +4 ,sizeof (ctx->name)); +if (len <2 ) goto err_free_inst;if (ctx->name[len -1 ] !=')' )
drivers/acpi/acpica/psopcode.c +1 -1
@@ -603,7 +603,7 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {/* 7E */ ACPI_OP ("Timer" ,ARGP_TIMER_OP ,ARGI_TIMER_OP ,ACPI_TYPE_ANY ,AML_CLASS_EXECUTE ,AML_TYPE_EXEC_0A_0T_1R , - AML_FLAGS_EXEC_0A_0T_1R), + AML_FLAGS_EXEC_0A_0T_1R | AML_NO_OPERAND_RESOLVE),/* ACPI 5.0 opcodes */
drivers/acpi/arm64/iort.c +4 -1
@@ -1699,7 +1699,10 @@ static void __init arm_smmu_v3_pmcg_init_resources(struct resource *res,static struct acpi_platform_list pmcg_plat_info[]__initdata = {/* HiSilicon Hip08 Platform */ {"HISI " ,"HIP08 " ,0 ,ACPI_SIG_IORT , greater_than_or_equal, -"Erratum #162001800" ,IORT_SMMU_V3_PMCG_HISI_HIP08 }, +"Erratum #162001800, Erratum #162001900" ,IORT_SMMU_V3_PMCG_HISI_HIP08 }, +/* HiSilicon Hip09 Platform */ + {"HISI " ,"HIP09 " ,0 ,ACPI_SIG_IORT , greater_than_or_equal, +"Erratum #162001900" ,IORT_SMMU_V3_PMCG_HISI_HIP09 }, { } };
drivers/acpi/video_detect.c +9 -0
@@ -443,6 +443,15 @@ static const struct dmi_system_id video_detect_dmi_table[] = { DMI_MATCH(DMI_BOARD_NAME, "Lenovo IdeaPad S405"), }, }, + { +/* https://bugzilla.suse.com/show_bug.cgi?id=1208724 */ + .callback = video_detect_force_native, +/* Lenovo Ideapad Z470 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), + DMI_MATCH(DMI_PRODUCT_VERSION, "IdeaPad Z470"), + }, + }, {/* https://bugzilla.redhat.com/show_bug.cgi?id=1187004 */ .callback = video_detect_force_native,
drivers/acpi/x86/s2idle.c +6 -0
@@ -112,6 +112,12 @@ static void lpi_device_get_constraints_amd(void)union acpi_object *package = &out_obj->package.elements[i];if (package->type ==ACPI_TYPE_PACKAGE ) { +if (lpi_constraints_table) { +acpi_handle_err (lps0_device_handle, +"Duplicate constraints list\n" ); + goto free_acpi_buffer; + } + lpi_constraints_table =kcalloc (package->package.count,sizeof (*lpi_constraints_table),GFP_KERNEL );
drivers/ata/ahci.c +9 -0
@@ -1884,6 +1884,15 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)else dev_info (&pdev->dev,"SSS flag set, parallel bus scan disabled\n" ); +if (!(hpriv->cap &HOST_CAP_PART )) + host->flags |=ATA_HOST_NO_PART ; + +if (!(hpriv->cap &HOST_CAP_SSC )) + host->flags |=ATA_HOST_NO_SSC ; + +if (!(hpriv->cap2 &HOST_CAP2_SDS )) + host->flags |=ATA_HOST_NO_DEVSLP ; +if (pi.flags &ATA_FLAG_EM )ahci_reset_em (host);
drivers/ata/libahci.c +23 -12
@@ -1255,6 +1255,26 @@ static ssize_t ahci_activity_show(struct ata_device *dev, char *buf)return sprintf (buf,"%d\n" , emp->blink_policy); } +static void ahci_port_clear_pending_irq (struct ata_port *ap) +{ +struct ahci_host_priv *hpriv = ap->host->private_data; +void __iomem *port_mmio =ahci_port_base (ap); +u32 tmp; + +/* clear SError */ + tmp =readl (port_mmio +PORT_SCR_ERR ); +dev_dbg (ap->host->dev,"PORT_SCR_ERR 0x%x\n" , tmp); +writel (tmp, port_mmio +PORT_SCR_ERR ); + +/* clear port IRQ */ + tmp =readl (port_mmio +PORT_IRQ_STAT ); +dev_dbg (ap->host->dev,"PORT_IRQ_STAT 0x%x\n" , tmp); +if (tmp) +writel (tmp, port_mmio +PORT_IRQ_STAT ); + +writel (1 << ap->port_no, hpriv->mmio +HOST_IRQ_STAT ); +} +static void ahci_port_init (struct device *dev,struct ata_port *ap,int port_no,void __iomem *mmio,void __iomem *port_mmio)
@@ -1269,18 +1289,7 @@ static void ahci_port_init(struct device *dev, struct ata_port *ap,if (rc)dev_warn (dev,"%s (%d)\n" , emsg, rc); -/* clear SError */ - tmp =readl (port_mmio +PORT_SCR_ERR ); -dev_dbg (dev,"PORT_SCR_ERR 0x%x\n" , tmp); -writel (tmp, port_mmio +PORT_SCR_ERR ); - -/* clear port IRQ */ - tmp =readl (port_mmio +PORT_IRQ_STAT ); -dev_dbg (dev,"PORT_IRQ_STAT 0x%x\n" , tmp); -if (tmp) -writel (tmp, port_mmio +PORT_IRQ_STAT ); - -writel (1 << port_no, mmio +HOST_IRQ_STAT ); +ahci_port_clear_pending_irq (ap);/* mark esata ports */ tmp =readl (port_mmio +PORT_CMD );
@@ -1601,6 +1610,8 @@ int ahci_do_hardreset(struct ata_link *link, unsigned int *class, tf.status =ATA_BUSY ;ata_tf_to_fis (&tf,0 ,0 , d2h_fis); +ahci_port_clear_pending_irq (ap); + rc =sata_link_hardreset (link, timing, deadline, online, ahci_check_ready);
drivers/ata/libata-sata.c +16 -3
@@ -394,10 +394,23 @@ int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,case ATA_LPM_MED_POWER_WITH_DIPM :case ATA_LPM_MIN_POWER_WITH_PARTIAL :case ATA_LPM_MIN_POWER : -if (ata_link_nr_enabled (link) >0 ) -/* no restrictions on LPM transitions */ +if (ata_link_nr_enabled (link) >0 ) { +/* assume no restrictions on LPM transitions */ scontrol &= ~(0x7 <<8 ); -else { + +/* +* If the controller does not support partial, slumber, +* or devsleep, then disallow these transitions. +*/ +if (link->ap->host->flags &ATA_HOST_NO_PART ) + scontrol |= (0x1 <<8 ); + +if (link->ap->host->flags &ATA_HOST_NO_SSC ) + scontrol |= (0x2 <<8 ); + +if (link->ap->host->flags &ATA_HOST_NO_DEVSLP ) + scontrol |= (0x4 <<8 ); + }else {/* empty port, power off */ scontrol &= ~0xf ; scontrol |= (0x1 <<2 );
drivers/bus/ti-sysc.c +2 -0
@@ -1548,6 +1548,8 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE),SYSC_QUIRK ("uart" ,0 ,0x50 ,0x54 ,0x58 ,0x47422e03 ,0xffffffff ,SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_LEGACY_IDLE ), +SYSC_QUIRK ("uart" ,0 ,0x50 ,0x54 ,0x58 ,0x47424e03 ,0xffffffff , +SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_LEGACY_IDLE ),/* Quirks that need to be set based on the module address */ SYSC_QUIRK("mcpdm", 0x40132000, 0, 0x10, -ENODEV, 0x50000800, 0xffffffff,
drivers/char/tpm/tpm_tis_core.c +10 -3
@@ -498,10 +498,17 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len)int rc;u32 ordinal;unsigned long dur; +unsigned int try; - rc =tpm_tis_send_data (chip, buf, len); -if (rc <0 ) -return rc; +for (try =0 ; try <TPM_RETRY ; try++) { + rc =tpm_tis_send_data (chip, buf, len); +if (rc >=0 ) +/* Data transfer done successfully */ +break ; +else if (rc != -EIO ) +/* Data transfer failed, not recoverable */ +return rc; + } rc =tpm_tis_verify_crc (priv, len, buf);if (rc <0 ) {
drivers/dma-buf/dma-buf.c +53 -0
65 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu.h +0 -1
@@ -1266,7 +1266,6 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,void amdgpu_device_pci_config_reset (struct amdgpu_device *adev);int amdgpu_device_pci_reset (struct amdgpu_device *adev);bool amdgpu_device_need_post (struct amdgpu_device *adev); -bool amdgpu_sg_display_supported (struct amdgpu_device *adev);bool amdgpu_device_pcie_dynamic_switching_supported (void );bool amdgpu_device_should_use_aspm (struct amdgpu_device *adev);bool amdgpu_device_aspm_support_quirk (void );
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +4 -14
@@ -120,7 +120,6 @@ static int amdgpu_cs_p1_user_fence(struct amdgpu_cs_parser *p,struct drm_gem_object *gobj;struct amdgpu_bo *bo;unsigned long size; -int r; gobj =drm_gem_object_lookup (p->filp, data->handle);if (gobj ==NULL )
@@ -132,23 +131,14 @@ static int amdgpu_cs_p1_user_fence(struct amdgpu_cs_parser *p,drm_gem_object_put (gobj); size =amdgpu_bo_size (bo); -if (size !=PAGE_SIZE || (data->offset +8 ) > size) { - r = -EINVAL ; - goto error_unref; - } +if (size !=PAGE_SIZE || data->offset > (size -8 )) +return -EINVAL ; -if (amdgpu_ttm_tt_get_usermm (bo->tbo.ttm)) { - r = -EINVAL ; - goto error_unref; - } +if (amdgpu_ttm_tt_get_usermm (bo->tbo.ttm)) +return -EINVAL ; *offset = data->offset; -return 0 ; - -error_unref: -amdgpu_bo_unref (&bo); -return r; } static int amdgpu_cs_p1_bo_handles(struct amdgpu_cs_parser *p,
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +0 -26
@@ -1336,32 +1336,6 @@ bool amdgpu_device_need_post(struct amdgpu_device *adev)return true; } -/* -* On APUs with >= 64GB white flickering has been observed w/ SG enabled. -* Disable S/G on such systems until we have a proper fix. -* https://gitlab.freedesktop.org/drm/amd/-/issues/2354 -* https://gitlab.freedesktop.org/drm/amd/-/issues/2735 -*/ -bool amdgpu_sg_display_supported (struct amdgpu_device *adev) -{ -switch (amdgpu_sg_display) { -case -1 : -break ; -case 0 : -return false; -case 1 : -return true; -default : -return false; - } -if ((totalram_pages () << (PAGE_SHIFT -10 )) + - (adev->gmc.real_vram_size /1024 ) >=64000000 ) { -DRM_WARN ("Disabling S/G due to >=64GB RAM\n" ); -return false; - } -return true; -} -/* * Intel hosts such as Raptor Lake and Sapphire Rapids don't support dynamic * speed switching. Until we have confirmation from Intel that a specific host
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +12 -7
@@ -1265,11 +1265,15 @@ static void mmhub_read_system_context(struct amdgpu_device *adev, struct dc_phy_ pt_base =amdgpu_gmc_pd_addr (adev->gart.bo); - page_table_start.high_part = (u32)(adev->gmc.gart_start >>44 ) &0xF ; - page_table_start.low_part = (u32)(adev->gmc.gart_start >>12 ); - page_table_end.high_part = (u32)(adev->gmc.gart_end >>44 ) &0xF ; - page_table_end.low_part = (u32)(adev->gmc.gart_end >>12 ); - page_table_base.high_part =upper_32_bits (pt_base) &0xF ; + page_table_start.high_part =upper_32_bits (adev->gmc.gart_start >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_start.low_part =lower_32_bits (adev->gmc.gart_start >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_end.high_part =upper_32_bits (adev->gmc.gart_end >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_end.low_part =lower_32_bits (adev->gmc.gart_end >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_base.high_part =upper_32_bits (pt_base); page_table_base.low_part =lower_32_bits (pt_base); pa_config->system_aperture.start_addr = (uint64_t )logical_addr_low <<18 ;
@@ -1634,8 +1638,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) }break ; } -if (init_data.flags.gpu_vm_support) - init_data.flags.gpu_vm_support =amdgpu_sg_display_supported (adev); +if (init_data.flags.gpu_vm_support && + (amdgpu_sg_display ==0 )) + init_data.flags.gpu_vm_support = false;if (init_data.flags.gpu_vm_support) adev->mode_info.gpu_vm_support = true;
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c +2 -1
@@ -290,7 +290,8 @@ static void dccg32_set_dpstreamclk(struct dcn_dccg *dccg_dcn =TO_DCN_DCCG (dccg);/* set the dtbclk_p source */ -dccg32_set_dtbclk_p_src (dccg, src, otg_inst); +/* always program refclk as DTBCLK. No use-case expected to require DPREFCLK as refclk */ +dccg32_set_dtbclk_p_src (dccg,DTBCLK0 , otg_inst);/* enabled to select one of the DTBCLKs for pipe */ switch (dp_hpo_inst) {
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c +3 -1
@@ -4133,7 +4133,9 @@ void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l }if (v->OutputFormat[k] == dm_420 && v->HActive[k] >DCN31_MAX_FMT_420_BUFFER_WIDTH && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) { -if (v->HActive[k] /2 >DCN31_MAX_FMT_420_BUFFER_WIDTH ) { +if (v->Output[k] == dm_hdmi) { + FMTBufferExceeded = true; + }else if (v->HActive[k] /2 >DCN31_MAX_FMT_420_BUFFER_WIDTH ) { v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1; v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine4To1;
drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c +3 -1
@@ -4225,7 +4225,9 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_ }if (v->OutputFormat[k] == dm_420 && v->HActive[k] >DCN314_MAX_FMT_420_BUFFER_WIDTH && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) { -if (v->HActive[k] /2 >DCN314_MAX_FMT_420_BUFFER_WIDTH ) { +if (v->Output[k] == dm_hdmi) { + FMTBufferExceeded = true; + }else if (v->HActive[k] /2 >DCN314_MAX_FMT_420_BUFFER_WIDTH ) { v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1; v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine4To1;
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c +6 -1
@@ -3454,6 +3454,7 @@ bool dml32_CalculatePrefetchSchedule(double TimeForFetchingMetaPTE =0 ;double TimeForFetchingRowInVBlank =0 ;double LinesToRequestPrefetchPixelData =0 ; +double LinesForPrefetchBandwidth =0 ;unsigned int HostVMDynamicLevelsTrips;double trip_to_mem;double Tvm_trips;
@@ -3883,11 +3884,15 @@ bool dml32_CalculatePrefetchSchedule( TimeForFetchingMetaPTE = Tvm_oto; TimeForFetchingRowInVBlank = Tr0_oto; *PrefetchBandwidth = prefetch_bw_oto; +/* Clamp to oto for bandwidth calculation */ + LinesForPrefetchBandwidth = dst_y_prefetch_oto; }else { *DestinationLinesForPrefetch = dst_y_prefetch_equ; TimeForFetchingMetaPTE = Tvm_equ; TimeForFetchingRowInVBlank = Tr0_equ; *PrefetchBandwidth = prefetch_bw_equ; +/* Clamp to equ for bandwidth calculation */ + LinesForPrefetchBandwidth = dst_y_prefetch_equ; } *DestinationLinesToRequestVMInVBlank =dml_ceil (4.0 * TimeForFetchingMetaPTE / LineTime,1.0 ) /4.0 ;
@@ -3895,7 +3900,7 @@ bool dml32_CalculatePrefetchSchedule( *DestinationLinesToRequestRowInVBlank =dml_ceil (4.0 * TimeForFetchingRowInVBlank / LineTime,1.0 ) /4.0 ; - LinesToRequestPrefetchPixelData = *DestinationLinesForPrefetch - + LinesToRequestPrefetchPixelData = LinesForPrefetchBandwidth - *DestinationLinesToRequestVMInVBlank -2 * *DestinationLinesToRequestRowInVBlank;#ifdef __DML_VBA_DEBUG__
drivers/gpu/drm/bridge/tc358762.c +1 -1
@@ -216,7 +216,7 @@ static int tc358762_probe(struct mipi_dsi_device *dsi) dsi->lanes =1 ; dsi->format =MIPI_DSI_FMT_RGB888 ; dsi->mode_flags =MIPI_DSI_MODE_VIDEO |MIPI_DSI_MODE_VIDEO_SYNC_PULSE | -MIPI_DSI_MODE_LPM ; +MIPI_DSI_MODE_LPM |MIPI_DSI_MODE_VIDEO_HSE ; ret =tc358762_parse_dt (ctx);if (ret <0 )
drivers/gpu/drm/drm_edid.c +1 -0
@@ -231,6 +231,7 @@ static const struct edid_quirk {/* OSVR HDK and HDK2 VR Headsets */ EDID_QUIRK ('S' ,'V' ,'R' ,0x1019 ,EDID_QUIRK_NON_DESKTOP ), + EDID_QUIRK('A', 'U', 'O', 0x1111, EDID_QUIRK_NON_DESKTOP), };/*
drivers/gpu/drm/exynos/exynos_drm_crtc.c +2 -3
@@ -39,13 +39,12 @@ static void exynos_drm_crtc_atomic_disable(struct drm_crtc *crtc,if (exynos_crtc->ops->atomic_disable) exynos_crtc->ops->atomic_disable (exynos_crtc); +spin_lock_irq (&crtc->dev->event_lock);if (crtc->state->event && !crtc->state->active) { -spin_lock_irq (&crtc->dev->event_lock);drm_crtc_send_vblank_event (crtc, crtc->state->event); -spin_unlock_irq (&crtc->dev->event_lock); - crtc->state->event =NULL ; } +spin_unlock_irq (&crtc->dev->event_lock); } static int exynos_crtc_atomic_check(struct drm_crtc *crtc,
drivers/gpu/drm/mediatek/mtk_dp.c +3 -3
@@ -847,7 +847,7 @@ static int mtk_dp_aux_do_transfer(struct mtk_dp *mtk_dp, bool is_read, u8 cmd,u32 phy_status =mtk_dp_read (mtk_dp,MTK_DP_AUX_P0_3628 ) &AUX_RX_PHY_STATE_AUX_TX_P0_MASK ;if (phy_status !=AUX_RX_PHY_STATE_AUX_TX_P0_RX_IDLE ) { -drm_err (mtk_dp->drm_dev, +dev_err (mtk_dp->dev,"AUX Rx Aux hang, need SW reset\n" );return -EIO ; }
@@ -2062,7 +2062,7 @@ static ssize_t mtk_dp_aux_transfer(struct drm_dp_aux *mtk_aux, is_read = true;break ;default : -drm_err (mtk_aux->drm_dev,"invalid aux cmd = %d\n" , +dev_err (mtk_dp->dev,"invalid aux cmd = %d\n" , msg->request); ret = -EINVAL ; goto err;
@@ -2078,7 +2078,7 @@ static ssize_t mtk_dp_aux_transfer(struct drm_dp_aux *mtk_aux, to_access, &msg->reply);if (ret) { -drm_info (mtk_dp->drm_dev, +dev_info (mtk_dp->dev,"Failed to do AUX transfer: %d\n" , ret); goto err; }
drivers/gpu/drm/tiny/gm12u320.c +5 -5
@@ -69,10 +69,10 @@ MODULE_PARM_DESC(eco_mode, "Turn on Eco mode (less bright, more silent)");#define READ_STATUS_SIZE 13#define MISC_VALUE_SIZE 4 -#define CMD_TIMEOUT msecs_to_jiffies(200) -#define DATA_TIMEOUT msecs_to_jiffies(1000) -#define IDLE_TIMEOUT msecs_to_jiffies(2000) -#define FIRST_FRAME_TIMEOUT msecs_to_jiffies(2000) +#define CMD_TIMEOUT 200 +#define DATA_TIMEOUT 1000 +#define IDLE_TIMEOUT 2000 +#define FIRST_FRAME_TIMEOUT 2000#define MISC_REQ_GET_SET_ECO_A 0xff#define MISC_REQ_GET_SET_ECO_B 0x35
@@ -388,7 +388,7 @@ static void gm12u320_fb_update_work(struct work_struct *work)* switches back to showing its logo. */ queue_delayed_work (system_long_wq, &gm12u320->fb_update.work, -IDLE_TIMEOUT ); +msecs_to_jiffies (IDLE_TIMEOUT ));return ; err:
drivers/i2c/busses/i2c-aspeed.c +5 -2
@@ -698,13 +698,16 @@ static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,if (time_left ==0 ) {/* -* If timed out and bus is still busy in a multi master -* environment, attempt recovery at here. +* In a multi-master setup, if a timeout occurs, attempt +* recovery. But if the bus is idle, we still need to reset the +* i2c controller to clear the remaining interrupts. */ if (bus->multi_master && (readl (bus->base +ASPEED_I2C_CMD_REG ) &ASPEED_I2CD_BUS_BUSY_STS ))aspeed_i2c_recover_bus (bus); +else +aspeed_i2c_reset (bus);/* * If timed out and the state is still pending, drop the pending
drivers/interconnect/core.c +15 -3
@@ -29,6 +29,7 @@ static LIST_HEAD(icc_providers);static int providers_count;static bool synced_state;static DEFINE_MUTEX (icc_lock); +static DEFINE_MUTEX (icc_bw_lock);static struct dentry *icc_debugfs_dir;static void icc_summary_show_one (struct seq_file *s,struct icc_node *n)
@@ -632,7 +633,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)if (WARN_ON (IS_ERR (path) || !path->num_nodes))return -EINVAL ; -mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); old_avg = path->reqs[0 ].avg_bw; old_peak = path->reqs[0 ].peak_bw;
@@ -664,7 +665,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)apply_constraints (path); } -mutex_unlock (&icc_lock); +mutex_unlock (&icc_bw_lock);trace_icc_set_bw_end (path, ret);
@@ -967,6 +968,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)return ;mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); node->provider = provider;list_add_tail (&node->node_list, &provider->nodes);
@@ -992,6 +994,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider) node->avg_bw =0 ; node->peak_bw =0 ; +mutex_unlock (&icc_bw_lock);mutex_unlock (&icc_lock); }EXPORT_SYMBOL_GPL (icc_node_add);
@@ -1129,6 +1132,7 @@ void icc_sync_state(struct device *dev)return ;mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); synced_state = true;list_for_each_entry (p, &icc_providers, provider_list) {dev_dbg (p->dev,"interconnect provider is in synced state\n" );
@@ -1141,13 +1145,21 @@ void icc_sync_state(struct device *dev) } } } +mutex_unlock (&icc_bw_lock);mutex_unlock (&icc_lock); }EXPORT_SYMBOL_GPL (icc_sync_state);static int __init icc_init (void ) { -struct device_node *root =of_find_node_by_path ("/" ); +struct device_node *root; + +/* Teach lockdep about lock ordering wrt. shrinker: */ +fs_reclaim_acquire (GFP_KERNEL ); +might_lock (&icc_bw_lock); +fs_reclaim_release (GFP_KERNEL ); + + root =of_find_node_by_path ("/" ); providers_count =of_count_icc_providers (root);of_node_put (root);
drivers/md/dm.c +2 -21
@@ -707,24 +707,6 @@ static void dm_put_live_table_fast(struct mapped_device *md) __releases(RCU)rcu_read_unlock (); } -static inline struct dm_table *dm_get_live_table_bio (struct mapped_device *md, -int *srcu_idx,blk_opf_t bio_opf) -{ -if (bio_opf &REQ_NOWAIT ) -return dm_get_live_table_fast (md); -else -return dm_get_live_table (md, srcu_idx); -} - -static inline void dm_put_live_table_bio (struct mapped_device *md,int srcu_idx, -blk_opf_t bio_opf) -{ -if (bio_opf &REQ_NOWAIT ) -dm_put_live_table_fast (md); -else -dm_put_live_table (md, srcu_idx); -} -static char *_dm_claim_ptr ="I belong to device-mapper" ;/*
@@ -1805,9 +1787,8 @@ static void dm_submit_bio(struct bio *bio)struct mapped_device *md = bio->bi_bdev->bd_disk->private_data;int srcu_idx;struct dm_table *map; -blk_opf_t bio_opf = bio->bi_opf; - map =dm_get_live_table_bio (md, &srcu_idx, bio_opf); + map =dm_get_live_table (md, &srcu_idx);/* If suspended, or map not yet available, queue this IO for later */ if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags)) ||
@@ -1823,7 +1804,7 @@ static void dm_submit_bio(struct bio *bio)dm_split_and_process_bio (md, map, bio); out: -dm_put_live_table_bio (md, srcu_idx, bio_opf); +dm_put_live_table (md, srcu_idx); } static bool dm_poll_dm_io(struct dm_io *io, struct io_comp_batch *iob,
drivers/md/md.c +1 -1
@@ -8228,7 +8228,7 @@ static void *md_seq_next(struct seq_file *seq, void *v, loff_t *pos)spin_unlock (&all_mddevs_lock);if (to_put) -mddev_put (mddev); +mddev_put (to_put);return next_mddev; }
drivers/md/raid1.c +3 -0
@@ -1828,6 +1828,9 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)int number = rdev->raid_disk;struct raid1_info *p = conf->mirrors + number; +if (unlikely (number >= conf->raid_disks)) + goto abort; +if (rdev != p->rdev) p = conf->mirrors + conf->raid_disks + number;
drivers/media/pci/cx23885/cx23885-video.c +1 -1
@@ -413,7 +413,7 @@ static int buffer_prepare(struct vb2_buffer *vb) dev->height >> 1);break ;default : -BUG (); +return -EINVAL ;/* should not happen */ } dprintk(2, "[%p/%d] buffer_init - %dx%d %dbpp 0x%08x - dma=0x%08lx\n", buf, buf->vb.vb2_buf.index,
drivers/media/pci/intel/ipu3/ipu3-cio2-main.c +1 -1
@@ -354,7 +354,7 @@ static int cio2_hw_init(struct cio2_device *cio2, struct cio2_queue *q)void __iomem *const base = cio2->base;u8 lanes, csi2bus = q->csi2.port;u8 sensor_vc =SENSOR_VIR_CH_DFLT ; -struct cio2_csi2_timing timing; +struct cio2_csi2_timing timing = {0 };int i, r; fmt =cio2_find_format (NULL , &q->subdev_fmt.code);
drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c +2 -0
@@ -775,11 +775,13 @@ static int mdp_get_subsys_id(struct device *dev, struct device_node *node, ret =cmdq_dev_get_client_reg (&comp_pdev->dev, &cmdq_reg, index);if (ret !=0 ) {dev_err (&comp_pdev->dev,"cmdq_dev_get_subsys fail!\n" ); +put_device (&comp_pdev->dev);return -EINVAL ; } comp->subsys_id = cmdq_reg.subsys;dev_dbg (&comp_pdev->dev,"subsys id=%d\n" , cmdq_reg.subsys); +put_device (&comp_pdev->dev);return 0 ; }
drivers/media/tuners/qt1010.c +6 -5
@@ -345,11 +345,12 @@ static int qt1010_init(struct dvb_frontend *fe)else valptr = &tmpval; -BUG_ON (i >=ARRAY_SIZE (i2c_data) -1 ); - - err =qt1010_init_meas1 (priv, i2c_data[i+1 ].reg, - i2c_data[i].reg, - i2c_data[i].val, valptr); +if (i >=ARRAY_SIZE (i2c_data) -1 ) + err = -EIO ; +else + err =qt1010_init_meas1 (priv, i2c_data[i +1 ].reg, + i2c_data[i].reg, + i2c_data[i].val, valptr); i++;break ; }
drivers/media/usb/dvb-usb-v2/af9035.c +8 -6
@@ -270,6 +270,7 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,struct dvb_usb_device *d =i2c_get_adapdata (adap);struct state *state =d_to_priv (d);int ret; +u32 reg;if (mutex_lock_interruptible (&d->i2c_mutex) <0 )return -EAGAIN ;
@@ -322,8 +323,10 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, ret = -EOPNOTSUPP ; }else if ((msg[0 ].addr == state->af9033_i2c_addr[0 ]) || (msg[0 ].addr == state->af9033_i2c_addr[1 ])) { +if (msg[0 ].len <3 || msg[1 ].len <1 ) +return -EOPNOTSUPP ;/* demod access via firmware interface */ -u32 reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | + reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | msg[0 ].buf[2 ];if (msg[0 ].addr == state->af9033_i2c_addr[1 ])
@@ -381,17 +384,16 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, ret = -EOPNOTSUPP ; }else if ((msg[0 ].addr == state->af9033_i2c_addr[0 ]) || (msg[0 ].addr == state->af9033_i2c_addr[1 ])) { +if (msg[0 ].len <3 ) +return -EOPNOTSUPP ;/* demod access via firmware interface */ -u32 reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | + reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | msg[0 ].buf[2 ];if (msg[0 ].addr == state->af9033_i2c_addr[1 ]) reg |=0x100000 ; - ret = (msg[0 ].len >=3 ) ?af9035_wr_regs (d, reg, - &msg[0 ].buf[3 ], - msg[0 ].len -3 ) - : -EOPNOTSUPP ; + ret =af9035_wr_regs (d, reg, &msg[0 ].buf[3 ], msg[0 ].len -3 ); }else {/* I2C write */ u8 buf[MAX_XFER_SIZE ];
drivers/media/usb/dvb-usb-v2/anysee.c +1 -1
@@ -202,7 +202,7 @@ static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,while (i < num) {if (num > i +1 && (msg[i+1 ].flags &I2C_M_RD )) { -if (msg[i].len >2 || msg[i+1 ].len >60 ) { +if (msg[i].len !=2 || msg[i +1 ].len >60 ) { ret = -EOPNOTSUPP ;break ; }
drivers/media/usb/dvb-usb-v2/az6007.c +8 -0
@@ -788,6 +788,10 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],if (az6007_xfer_debug)printk (KERN_DEBUG "az6007: I2C W addr=0x%x len=%d\n" , addr, msgs[i].len); +if (msgs[i].len <1 ) { + ret = -EIO ; + goto err; + } req =AZ6007_I2C_WR ; index = msgs[i].buf[0 ]; value = addr | (1 <<8 );
@@ -802,6 +806,10 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],if (az6007_xfer_debug)printk (KERN_DEBUG "az6007: I2C R addr=0x%x len=%d\n" , addr, msgs[i].len); +if (msgs[i].len <1 ) { + ret = -EIO ; + goto err; + } req =AZ6007_I2C_RD ; index = msgs[i].buf[0 ]; value = addr;
drivers/media/usb/dvb-usb-v2/gl861.c +1 -1
@@ -120,7 +120,7 @@ static int gl861_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], }else if (num ==2 && !(msg[0 ].flags &I2C_M_RD ) && (msg[1 ].flags &I2C_M_RD )) {/* I2C write + read */ -if (msg[0 ].len >1 || msg[1 ].len >sizeof (ctx->buf)) { +if (msg[0 ].len !=1 || msg[1 ].len >sizeof (ctx->buf)) { ret = -EOPNOTSUPP ; goto err; }
drivers/media/usb/dvb-usb/af9005.c +5 -0
@@ -422,6 +422,10 @@ static int af9005_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],if (ret ==0 ) ret =2 ; }else { +if (msg[0 ].len <2 ) { + ret = -EOPNOTSUPP ; + goto unlock; + }/* write one or more registers */ reg = msg[0 ].buf[0 ]; addr = msg[0 ].addr;
@@ -431,6 +435,7 @@ static int af9005_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], ret =1 ; } +unlock:mutex_unlock (&d->i2c_mutex);return ret; }
drivers/media/usb/dvb-usb/dw2102.c +24 -0
@@ -128,6 +128,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],switch (num) {case 2 : +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + }/* read stv0299 register */ value = msg[0 ].buf[0 ];/* register */ for (i =0 ; i < msg[1 ].len; i++) {
@@ -139,6 +143,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],case 1 :switch (msg[0 ].addr) {case 0x68 : +if (msg[0 ].len <2 ) { + num = -EOPNOTSUPP ; +break ; + }/* write to stv0299 register */ buf6[0 ] =0x2a ; buf6[1 ] = msg[0 ].buf[0 ];
@@ -148,6 +156,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],break ;case 0x60 :if (msg[0 ].flags ==0 ) { +if (msg[0 ].len <4 ) { + num = -EOPNOTSUPP ; +break ; + }/* write to tuner pll */ buf6[0 ] =0x2c ; buf6[1 ] =5 ;
@@ -159,6 +171,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],dw210x_op_rw (d->udev,0xb2 ,0 ,0 , buf6,7 ,DW210X_WRITE_MSG ); }else { +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + }/* read from tuner */ dw210x_op_rw (d->udev,0xb5 ,0 ,0 , buf6,1 ,DW210X_READ_MSG );
@@ -166,12 +182,20 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], }break ;case (DW2102_RC_QUERY ): +if (msg[0 ].len <2 ) { + num = -EOPNOTSUPP ; +break ; + }dw210x_op_rw (d->udev,0xb8 ,0 ,0 , buf6,2 ,DW210X_READ_MSG ); msg[0 ].buf[0 ] = buf6[0 ]; msg[0 ].buf[1 ] = buf6[1 ];break ;case (DW2102_VOLTAGE_CTRL ): +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + } buf6[0 ] =0x30 ; buf6[1 ] = msg[0 ].buf[0 ]; dw210x_op_rw(d->udev, 0xb2, 0, 0,
drivers/misc/Kconfig +1 -0
@@ -474,6 +474,7 @@ config HISI_HIKEY_USB config OPEN_DICE tristate "Open Profile for DICE driver" depends on OF_RESERVED_MEM + depends on HAS_IOMEM help This driver exposes a DICE reserved memory region to userspace via a character device. The memory region contains Compound Device
drivers/misc/fastrpc.c +7 -5
@@ -310,8 +310,8 @@ static void fastrpc_free_map(struct kref *ref)return ; } } -dma_buf_unmap_attachment (map->attach, map->table, -DMA_BIDIRECTIONAL ); +dma_buf_unmap_attachment_unlocked (map->attach, map->table, +DMA_BIDIRECTIONAL );dma_buf_detach (map->buf, map->attach);dma_buf_put (map->buf); }
@@ -711,6 +711,7 @@ static int fastrpc_map_create(struct fastrpc_user *fl, int fd, {struct fastrpc_session_ctx *sess = fl->sctx;struct fastrpc_map *map =NULL ; +struct sg_table *table;int err =0 ;if (!fastrpc_map_lookup (fl, fd, ppmap, true))
@@ -736,11 +737,12 @@ static int fastrpc_map_create(struct fastrpc_user *fl, int fd, goto attach_err; } - map->table =dma_buf_map_attachment (map->attach,DMA_BIDIRECTIONAL ); -if (IS_ERR (map->table)) { - err =PTR_ERR (map->table); + table =dma_buf_map_attachment_unlocked (map->attach,DMA_BIDIRECTIONAL ); +if (IS_ERR (table)) { + err =PTR_ERR (table); goto map_err; } + map->table = table; map->phys =sg_dma_address (map->table->sgl); map->phys += ((u64 )fl->sctx->sid <<32 );
drivers/mmc/host/sdhci-esdhc-imx.c +4 -3
@@ -171,8 +171,8 @@#define ESDHC_FLAG_HS400 BIT(9)/* * The IP has errata ERR010450 -* uSDHC: Due to the I/O timing limit, for SDR mode, SD card clock can't -* exceed 150MHz, for DDR mode, SD card clock can't exceed 45MHz. +* uSDHC: At 1.8V due to the I/O timing limit, for SDR mode, SD card +* clock can't exceed 150MHz, for DDR mode, SD card clock can't exceed 45MHz. */ #define ESDHC_FLAG_ERR010450 BIT(10)/* The IP supports HS400ES mode */
@@ -932,7 +932,8 @@ static inline void esdhc_pltfm_set_clock(struct sdhci_host *host, | ESDHC_CLOCK_MASK);sdhci_writel (host, temp,ESDHC_SYSTEM_CONTROL ); -if (imx_data->socdata->flags &ESDHC_FLAG_ERR010450 ) { +if ((imx_data->socdata->flags &ESDHC_FLAG_ERR010450 ) && + (!(host->quirks2 &SDHCI_QUIRK2_NO_1_8_V ))) {unsigned int max_clock; max_clock = imx_data->is_ddr ?45000000 :150000000 ;
drivers/net/can/Kconfig +2 -2
@@ -174,10 +174,10 @@ config CAN_SLCAN config CAN_SUN4I tristate "Allwinner A10 CAN controller" - depends on MACH_SUN4I || MACH_SUN7I || COMPILE_TEST + depends on MACH_SUN4I || MACH_SUN7I || RISCV || COMPILE_TEST help Say Y here if you want to use CAN controller found on Allwinner - A10/A20 SoCs. + A10/A20/D1 SoCs. To compile this driver as a module, choose M here: the module will be called sun4i_can.
drivers/net/can/sun4i_can.c +19 -3
@@ -91,6 +91,8 @@#define SUN4I_REG_BUF12_ADDR 0x0070/* CAN Tx/Rx Buffer 12 */ #define SUN4I_REG_ACPC_ADDR 0x0040/* CAN Acceptance Code 0 */ #define SUN4I_REG_ACPM_ADDR 0x0044/* CAN Acceptance Mask 0 */ +#define SUN4I_REG_ACPC_ADDR_D1 0x0028/* CAN Acceptance Code 0 on the D1 */ +#define SUN4I_REG_ACPM_ADDR_D1 0x002C/* CAN Acceptance Mask 0 on the D1 */ #define SUN4I_REG_RBUF_RBACK_START_ADDR 0x0180/* CAN transmit buffer start */ #define SUN4I_REG_RBUF_RBACK_END_ADDR 0x01b0/* CAN transmit buffer end */
@@ -205,9 +207,11 @@* struct sun4ican_quirks - Differences between SoC variants. * * @has_reset: SoC needs reset deasserted. +* @acp_offset: Offset of ACPC and ACPM registers */ struct sun4ican_quirks {bool has_reset; +int acp_offset; };struct sun4ican_priv {
@@ -216,6 +220,7 @@ struct sun4ican_priv {struct clk *clk;struct reset_control *reset;spinlock_t cmdreg_lock;/* lock for concurrent cmd register writes */ +int acp_offset; };static const struct can_bittiming_const sun4ican_bittiming_const = {
@@ -338,8 +343,8 @@ static int sun4i_can_start(struct net_device *dev) }/* set filters - we accept all */ -writel (0x00000000 , priv->base +SUN4I_REG_ACPC_ADDR ); -writel (0xFFFFFFFF , priv->base +SUN4I_REG_ACPM_ADDR ); +writel (0x00000000 , priv->base +SUN4I_REG_ACPC_ADDR + priv->acp_offset); +writel (0xFFFFFFFF , priv->base +SUN4I_REG_ACPM_ADDR + priv->acp_offset);/* clear error counters and error code capture */ writel (0 , priv->base +SUN4I_REG_ERRC_ADDR );
@@ -768,10 +773,17 @@ static const struct ethtool_ops sun4ican_ethtool_ops = {static const struct sun4ican_quirks sun4ican_quirks_a10 = { .has_reset = false, + .acp_offset =0 , };static const struct sun4ican_quirks sun4ican_quirks_r40 = { .has_reset = true, + .acp_offset =0 , +}; + +static const struct sun4ican_quirks sun4ican_quirks_d1 = { + .has_reset = true, + .acp_offset = (SUN4I_REG_ACPC_ADDR_D1 -SUN4I_REG_ACPC_ADDR ), };static const struct of_device_id sun4ican_of_match[] = {
@@ -784,6 +796,9 @@ static const struct of_device_id sun4ican_of_match[] = { }, { .compatible = "allwinner,sun8i-r40-can", .data = &sun4ican_quirks_r40 + }, { + .compatible = "allwinner,sun20i-d1-can", + .data = &sun4ican_quirks_d1 }, {/* sentinel */ },
@@ -872,6 +887,7 @@ static int sun4ican_probe(struct platform_device *pdev) priv->base = addr; priv->clk = clk; priv->reset = reset; + priv->acp_offset = quirks->acp_offset;spin_lock_init (&priv->cmdreg_lock);platform_set_drvdata (pdev, dev);
@@ -909,4 +925,4 @@ module_platform_driver(sun4i_can_driver);MODULE_AUTHOR ("Peter Chen <[email protected]>" );MODULE_AUTHOR ("Gerhard Bertelsmann <[email protected]>" );MODULE_LICENSE ("Dual BSD/GPL" ); -MODULE_DESCRIPTION ("CAN driver for Allwinner SoCs (A10/A20)" ); +MODULE_DESCRIPTION ("CAN driver for Allwinner SoCs (A10/A20/D1)" );
drivers/net/ethernet/atheros/alx/ethtool.c +2 -3
@@ -292,9 +292,8 @@ static void alx_get_ethtool_stats(struct net_device *netdev,spin_lock (&alx->stats_lock);alx_update_hw_stats (hw); -BUILD_BUG_ON (sizeof (hw->stats) - offsetof(struct alx_hw_stats , rx_ok) < -ALX_NUM_STATS *sizeof (u64)); -memcpy (data, &hw->stats.rx_ok,ALX_NUM_STATS *sizeof (u64)); +BUILD_BUG_ON (sizeof (hw->stats) !=ALX_NUM_STATS *sizeof (u64)); +memcpy (data, &hw->stats,sizeof (hw->stats));spin_unlock (&alx->stats_lock); }
drivers/net/ethernet/intel/ice/ice_eswitch.c +3 -0
@@ -361,6 +361,9 @@ ice_eswitch_port_start_xmit(struct sk_buff *skb, struct net_device *netdev) np =netdev_priv (netdev); vsi = np->vsi; +if (!vsi || !ice_is_switchdev_running (vsi->back)) +return NETDEV_TX_BUSY ; +if (ice_is_reset_in_progress (vsi->back->state) ||test_bit (ICE_VF_DIS , vsi->back->state))return NETDEV_TX_BUSY ;
drivers/net/wireless/ath/ath9k/ahb.c +2 -2
@@ -132,8 +132,8 @@ static int ath_ahb_probe(struct platform_device *pdev) ah = sc->sc_ah;ath9k_hw_name (ah, hw_name,sizeof (hw_name)); -wiphy_info (hw->wiphy,"%s mem=0x%lx, irq=%d\n" , - hw_name, (unsigned long )mem, irq); +wiphy_info (hw->wiphy,"%s mem=0x%p, irq=%d\n" , + hw_name, mem, irq);return 0 ;
drivers/net/wireless/ath/ath9k/mac.h +4 -2
@@ -115,8 +115,10 @@ struct ath_tx_status {u8 qid;u16 desc_id;u8 tid; -u32 ba_low; -u32 ba_high; +struct_group (ba, + u32 ba_low; + u32 ba_high; + );u32 evm0;u32 evm1;u32 evm2;
drivers/net/wireless/ath/ath9k/pci.c +2 -2
@@ -988,8 +988,8 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) sc->sc_ah->msi_reg =0 ;ath9k_hw_name (sc->sc_ah, hw_name,sizeof (hw_name)); -wiphy_info (hw->wiphy,"%s mem=0x%lx, irq=%d\n" , - hw_name, (unsigned long )sc->mem, pdev->irq); +wiphy_info (hw->wiphy,"%s mem=0x%p, irq=%d\n" , + hw_name, sc->mem, pdev->irq);return 0 ;
drivers/net/wireless/ath/ath9k/xmit.c +2 -2
@@ -462,7 +462,7 @@ static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf, isaggr =bf_isaggr (bf);if (isaggr) { seq_st = ts->ts_seqnum; -memcpy (ba, &ts->ba_low,WME_BA_BMP_SIZE >>3 ); +memcpy (ba, &ts->ba,WME_BA_BMP_SIZE >>3 ); }while (bf) {
@@ -545,7 +545,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,if (isaggr && txok) {if (ts->ts_flags &ATH9K_TX_BA ) { seq_st = ts->ts_seqnum; -memcpy (ba, &ts->ba_low,WME_BA_BMP_SIZE >>3 ); +memcpy (ba, &ts->ba,WME_BA_BMP_SIZE >>3 ); }else {/* * AR5416 can become deaf/mute when BA
drivers/net/wireless/ath/wil6210/txrx.c +1 -1
@@ -666,7 +666,7 @@ static int wil_rx_crypto_check(struct wil6210_priv *wil, struct sk_buff *skb)struct wil_tid_crypto_rx *c = mc ? &s->group_crypto_rx : &s->tid_crypto_rx[tid];struct wil_tid_crypto_rx_single *cc = &c->key_id[key_id]; -const u8 *pn = (u8 *)&d->mac.pn_15_0; +const u8 *pn = (u8 *)&d->mac.pn;if (!cc->key_set) { wil_err_ratelimited(wil,
drivers/net/wireless/ath/wil6210/txrx.h +4 -2
@@ -343,8 +343,10 @@ struct vring_rx_mac {u32 d0;u32 d1;u16 w4; -u16 pn_15_0; -u32 pn_47_16; +struct_group_attr (pn, __packed, + u16 pn_15_0; + u32 pn_47_16; + ); } __packed;/* Rx descriptor - DMA part
drivers/net/wireless/ath/wil6210/txrx_edma.c +1 -1
@@ -548,7 +548,7 @@ static int wil_rx_crypto_check_edma(struct wil6210_priv *wil, s = &wil->sta[cid]; c = mc ? &s->group_crypto_rx : &s->tid_crypto_rx[tid]; cc = &c->key_id[key_id]; - pn = (u8 *)&st->ext.pn_15_0; + pn = (u8 *)&st->ext.pn;if (!cc->key_set) { wil_err_ratelimited(wil,
drivers/net/wireless/ath/wil6210/txrx_edma.h +4 -2
@@ -330,8 +330,10 @@ struct wil_rx_status_extension {u32 d0;u32 d1;__le16 seq_num;/* only lower 12 bits */ -u16 pn_15_0; -u32 pn_47_16; +struct_group_attr (pn, __packed, + u16 pn_15_0; + u32 pn_47_16; + ); } __packed;struct wil_rx_status_extended {
drivers/net/wireless/mac80211_hwsim.c +4 -3
@@ -4906,14 +4906,15 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2, frame_data_len =nla_len (info->attrs[HWSIM_ATTR_FRAME ]); frame_data = (void *)nla_data (info->attrs[HWSIM_ATTR_FRAME ]); +if (frame_data_len <sizeof (struct ieee80211_hdr_3addr ) || + frame_data_len >IEEE80211_MAX_DATA_LEN ) + goto err; +/* Allocate new skb here */ skb =alloc_skb (frame_data_len,GFP_KERNEL );if (skb ==NULL ) goto err; -if (frame_data_len >IEEE80211_MAX_DATA_LEN ) - goto err; -/* Copy the data */ skb_put_data (skb, frame_data, frame_data_len);
drivers/net/wireless/marvell/mwifiex/tdls.c +6 -3
@@ -735,6 +735,7 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv,int ret;u16 capab;struct ieee80211_ht_cap *ht_cap; +unsigned int extra;u8 radio, *pos; capab = priv->curr_bss_params.bss_descriptor.cap_info_bitmap;
@@ -753,7 +754,10 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv,switch (action_code) {case WLAN_PUB_ACTION_TDLS_DISCOVER_RES : -skb_put (skb,sizeof (mgmt->u.action.u.tdls_discover_resp) +1 ); +/* See the layout of 'struct ieee80211_mgmt'. */ + extra =sizeof (mgmt->u.action.u.tdls_discover_resp) + +sizeof (mgmt->u.action.category); +skb_put (skb, extra); mgmt->u.action.category =WLAN_CATEGORY_PUBLIC ; mgmt->u.action.u.tdls_discover_resp.action_code =WLAN_PUB_ACTION_TDLS_DISCOVER_RES ;
@@ -762,8 +766,7 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv, mgmt->u.action.u.tdls_discover_resp.capability =cpu_to_le16 (capab);/* move back for addr4 */ -memmove (pos +ETH_ALEN , &mgmt->u.action.category, -sizeof (mgmt->u.action.u.tdls_discover_resp)); +memmove (pos +ETH_ALEN , &mgmt->u.action, extra);/* init address 4 */ eth_broadcast_addr (pos);
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +4 -0
@@ -1167,6 +1167,10 @@ int mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,if (unlikely (tx_info->skb->len <=ETH_HLEN ))return -EINVAL ; + err =skb_cow_head (skb,MT_SDIO_TXD_SIZE +MT_SDIO_HDR_SIZE ); +if (err) +return err; +if (!wcid) wcid = &dev->mt76.global_wcid;
drivers/nvme/host/core.c +35 -19
66 lines not on this page · raw message
drivers/nvme/target/io-cmd-file.c +2 -8
@@ -73,13 +73,6 @@ int nvmet_file_ns_enable(struct nvmet_ns *ns)return ret; } -static void nvmet_file_init_bvec (struct bio_vec *bv,struct scatterlist *sg) -{ - bv->bv_page =sg_page (sg); - bv->bv_offset = sg->offset; - bv->bv_len = sg->length; -} -static ssize_t nvmet_file_submit_bvec (struct nvmet_req *req,loff_t pos,unsigned long nr_segs,size_t count,int ki_flags) {
@@ -146,7 +139,8 @@ static bool nvmet_file_execute_io(struct nvmet_req *req, int ki_flags)memset (&req->f.iocb,0 ,sizeof (struct kiocb ));for_each_sg (req->sg, sg, req->sg_cnt, i) { -nvmet_file_init_bvec (&req->f.bvec[bv_cnt], sg); +bvec_set_page (&req->f.bvec[bv_cnt],sg_page (sg), sg->length, + sg->offset); len += req->f.bvec[bv_cnt].bv_len; total_len += req->f.bvec[bv_cnt].bv_len; bv_cnt++;
drivers/nvme/target/tcp.c +2 -3
@@ -321,9 +321,8 @@ static void nvmet_tcp_build_pdu_iovec(struct nvmet_tcp_cmd *cmd)while (length) {u32 iov_len =min_t (u32, length, sg->length - sg_offset); - iov->bv_page =sg_page (sg); - iov->bv_len = sg->length; - iov->bv_offset = sg->offset + sg_offset; +bvec_set_page (iov,sg_page (sg), iov_len, + sg->offset + sg_offset); length -= iov_len; sg =sg_next (sg);
drivers/pci/controller/dwc/pci-imx6.c +1 -0
@@ -999,6 +999,7 @@ static void imx6_pcie_host_exit(struct dw_pcie_rp *pp)static const struct dw_pcie_host_ops imx6_pcie_host_ops = { .host_init = imx6_pcie_host_init, + .host_deinit = imx6_pcie_host_exit, };static const struct dw_pcie_ops dw_pcie_ops = {
drivers/pci/controller/dwc/pcie-fu740.c +1 -0
@@ -299,6 +299,7 @@ static int fu740_pcie_probe(struct platform_device *pdev) pci->dev = dev; pci->ops = &dw_pcie_ops; pci->pp.ops = &fu740_pcie_host_ops; + pci->pp.num_vectors =MAX_MSI_IRQS ;/* SiFive specific region: mgmt */ afp->mgmt_base =devm_platform_ioremap_resource_byname (pdev,"mgmt" );
drivers/pci/controller/vmd.c +17 -2
@@ -526,8 +526,23 @@ static void vmd_domain_reset(struct vmd_dev *vmd) PCI_CLASS_BRIDGE_PCI))continue ; -memset_io (base +PCI_IO_BASE ,0 , -PCI_ROM_ADDRESS1 -PCI_IO_BASE ); +/* +* Temporarily disable the I/O range before updating +* PCI_IO_BASE. +*/ +writel (0x0000ffff , base +PCI_IO_BASE_UPPER16 ); +/* Update lower 16 bits of I/O base/limit */ +writew (0x00f0 , base +PCI_IO_BASE ); +/* Update upper 16 bits of I/O base/limit */ +writel (0 , base +PCI_IO_BASE_UPPER16 ); + +/* MMIO Base/Limit */ +writel (0x0000fff0 , base +PCI_MEMORY_BASE ); + +/* Prefetchable MMIO Base/Limit */ +writel (0 , base +PCI_PREF_LIMIT_UPPER32 ); +writel (0x0000fff0 , base +PCI_PREF_MEMORY_BASE ); +writel (0xffffffff , base +PCI_PREF_BASE_UPPER32 ); } } }
drivers/perf/arm_smmuv3_pmu.c +45 -1
76 lines not on this page · raw message
drivers/perf/fsl_imx8_ddr_perf.c +21 -0
@@ -28,6 +28,8 @@#define CNTL_CLEAR_MASK 0xFFFFFFFD#define CNTL_OVER_MASK 0xFFFFFFFE +#define CNTL_CP_SHIFT 16 +#define CNTL_CP_MASK (0xFF << CNTL_CP_SHIFT)#define CNTL_CSV_SHIFT 24#define CNTL_CSV_MASK (0xFFU << CNTL_CSV_SHIFT)
@@ -35,6 +37,8 @@#define EVENT_CYCLES_COUNTER 0#define NUM_COUNTERS 4 +/* For removing bias if cycle counter CNTL.CP is set to 0xf0 */ +#define CYCLES_COUNTER_MASK 0x0FFFFFFF#define AXI_MASKING_REVERT 0xffff0000/* AXI_MASKING(MSB 16bits) + AXI_ID(LSB 16bits) */ #define to_ddr_pmu (p) container_of(p, struct ddr_pmu, pmu)
@@ -429,6 +433,17 @@ static void ddr_perf_counter_enable(struct ddr_pmu *pmu, int config,writel (0 , pmu->base + reg); val =CNTL_EN |CNTL_CLEAR ; val |=FIELD_PREP (CNTL_CSV_MASK , config); + +/* +* On i.MX8MP we need to bias the cycle counter to overflow more often. +* We do this by initializing bits [23:16] of the counter value via the +* COUNTER_CTRL Counter Parameter (CP) field. +*/ +if (pmu->devtype_data->quirks &DDR_CAP_AXI_ID_FILTER_ENHANCED ) { +if (counter ==EVENT_CYCLES_COUNTER ) + val |=FIELD_PREP (CNTL_CP_MASK ,0xf0 ); + } +writel (val, pmu->base + reg); }else {/* Disable counter */
@@ -468,6 +483,12 @@ static void ddr_perf_event_update(struct perf_event *event)int ret; new_raw_count =ddr_perf_read_counter (pmu, counter); +/* Remove the bias applied in ddr_perf_counter_enable(). */ +if (pmu->devtype_data->quirks &DDR_CAP_AXI_ID_FILTER_ENHANCED ) { +if (counter ==EVENT_CYCLES_COUNTER ) + new_raw_count &=CYCLES_COUNTER_MASK ; + } +local64_add (new_raw_count, &event->count);/*
drivers/scsi/lpfc/lpfc.h +1 -0
@@ -895,6 +895,7 @@ enum lpfc_irq_chann_mode {enum lpfc_hba_bit_flags {FABRIC_COMANDS_BLOCKED ,HBA_PCI_ERR , +MBX_TMO_ERR , };struct lpfc_hba {
drivers/scsi/lpfc/lpfc_debugfs.c +7 -7
@@ -6069,7 +6069,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport) phba->hba_debugfs_root, phba, &lpfc_debugfs_op_multixripools); -if (!phba->debug_multixri_pools) { +if (IS_ERR (phba->debug_multixri_pools)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"0527 Cannot create debugfs multixripools\n" ); goto debug_failed;
@@ -6081,7 +6081,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_cgn_buffer_op); -if (!phba->debug_cgn_buffer) { +if (IS_ERR (phba->debug_cgn_buffer)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6527 Cannot create debugfs " "cgn_buffer\n" );
@@ -6094,7 +6094,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_rx_monitor_op); -if (!phba->debug_rx_monitor) { +if (IS_ERR (phba->debug_rx_monitor)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6528 Cannot create debugfs " "rx_monitor\n" );
@@ -6107,7 +6107,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , phba->hba_debugfs_root, phba, &lpfc_debugfs_ras_log); -if (!phba->debug_ras_log) { +if (IS_ERR (phba->debug_ras_log)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6148 Cannot create debugfs" " ras_log\n" );
@@ -6128,7 +6128,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_debugfs_op_lockstat); -if (!phba->debug_lockstat) { +if (IS_ERR (phba->debug_lockstat)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"4610 Can't create debugfs lockstat\n" ); goto debug_failed;
@@ -6354,7 +6354,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , vport->vport_debugfs_root, vport, &lpfc_debugfs_op_scsistat); -if (!vport->debug_scsistat) { +if (IS_ERR (vport->debug_scsistat)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"4611 Cannot create debugfs scsistat\n" ); goto debug_failed;
@@ -6365,7 +6365,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , vport->vport_debugfs_root, vport, &lpfc_debugfs_op_ioktime); -if (!vport->debug_ioktime) { +if (IS_ERR (vport->debug_ioktime)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"0815 Cannot create debugfs ioktime\n" ); goto debug_failed;
drivers/scsi/lpfc/lpfc_els.c +18 -7
@@ -9410,11 +9410,13 @@ void lpfc_els_flush_cmd(struct lpfc_vport *vport) {LIST_HEAD (abort_list); +LIST_HEAD (cancel_list);struct lpfc_hba *phba = vport->phba;struct lpfc_sli_ring *pring;struct lpfc_iocbq *tmp_iocb, *piocb;u32 ulp_command;unsigned long iflags =0 ; +bool mbx_tmo_err;lpfc_fabric_abort_vport (vport);
@@ -9436,15 +9438,16 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)if (phba->sli_rev ==LPFC_SLI_REV4 )spin_lock (&pring->ring_lock); + mbx_tmo_err =test_bit (MBX_TMO_ERR , &phba->bit_flags);/* First we need to issue aborts to outstanding cmds on txcmpl */ list_for_each_entry_safe (piocb, tmp_iocb, &pring->txcmplq, list) { -if (piocb->cmd_flag &LPFC_IO_LIBDFC ) +if (piocb->cmd_flag &LPFC_IO_LIBDFC && !mbx_tmo_err)continue ;if (piocb->vport != vport)continue ; -if (piocb->cmd_flag &LPFC_DRIVER_ABORTED ) +if (piocb->cmd_flag &LPFC_DRIVER_ABORTED && !mbx_tmo_err)continue ;/* On the ELS ring we can have ELS_REQUESTs or
@@ -9463,8 +9466,8 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)*/ if (phba->link_state ==LPFC_LINK_DOWN ) piocb->cmd_cmpl = lpfc_cmpl_els_link_down; - } -if (ulp_command ==CMD_GEN_REQUEST64_CR ) + }else if (ulp_command ==CMD_GEN_REQUEST64_CR || + mbx_tmo_err)list_add_tail (&piocb->dlist, &abort_list); }
@@ -9476,11 +9479,19 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)list_for_each_entry_safe (piocb, tmp_iocb, &abort_list, dlist) {spin_lock_irqsave (&phba->hbalock, iflags);list_del_init (&piocb->dlist); -lpfc_sli_issue_abort_iotag (phba, pring, piocb,NULL ); +if (mbx_tmo_err) +list_move_tail (&piocb->list, &cancel_list); +else +lpfc_sli_issue_abort_iotag (phba, pring, piocb,NULL ); +spin_unlock_irqrestore (&phba->hbalock, iflags); } -/* Make sure HBA is alive */ -lpfc_issue_hb_tmo (phba); +if (!list_empty (&cancel_list)) +lpfc_sli_cancel_iocbs (phba, &cancel_list,IOSTAT_LOCAL_REJECT , +IOERR_SLI_ABORTED ); +else +/* Make sure HBA is alive */ +lpfc_issue_hb_tmo (phba);if (!list_empty (&abort_list)) lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
drivers/scsi/lpfc/lpfc_init.c +17 -3
@@ -7563,6 +7563,8 @@ lpfc_disable_pci_dev(struct lpfc_hba *phba)void lpfc_reset_hba (struct lpfc_hba *phba) { +int rc =0 ; +/* If resets are disabled then set error state and return. */ if (!phba->cfg_enable_hba_reset) { phba->link_state =LPFC_HBA_ERROR ;
@@ -7573,13 +7575,25 @@ lpfc_reset_hba(struct lpfc_hba *phba)if (phba->sli.sli_flag &LPFC_SLI_ACTIVE ) {lpfc_offline_prep (phba,LPFC_MBX_WAIT ); }else { +if (test_bit (MBX_TMO_ERR , &phba->bit_flags)) { +/* Perform a PCI function reset to start from clean */ + rc =lpfc_pci_function_reset (phba); +lpfc_els_flush_all_cmd (phba); + }lpfc_offline_prep (phba,LPFC_MBX_NO_WAIT );lpfc_sli_flush_io_rings (phba); }lpfc_offline (phba); -lpfc_sli_brdrestart (phba); -lpfc_online (phba); -lpfc_unblock_mgmt_io (phba); +clear_bit (MBX_TMO_ERR , &phba->bit_flags); +if (unlikely (rc)) { +lpfc_printf_log (phba,KERN_ERR ,LOG_SLI , +"8888 PCI function reset failed rc %x\n" , + rc); + }else { +lpfc_sli_brdrestart (phba); +lpfc_online (phba); +lpfc_unblock_mgmt_io (phba); + } }/**
drivers/scsi/lpfc/lpfc_sli.c +7 -1
@@ -3919,6 +3919,8 @@ void lpfc_poll_eratt(struct timer_list *t)uint64_t sli_intr, cnt; phba =from_timer (phba, t, eratt_poll); +if (!(phba->hba_flag &HBA_SETUP )) +return ;/* Here we will also keep track of interrupts per sec of the hba */ sli_intr = phba->sli.slistat.sli_intr;
@@ -7712,7 +7714,9 @@ lpfc_sli4_repost_sgl_list(struct lpfc_hba *phba,spin_unlock_irq (&phba->hbalock); }else {lpfc_printf_log (phba,KERN_ERR ,LOG_TRACE_EVENT , -"3161 Failure to post sgl to port.\n" ); +"3161 Failure to post sgl to port,status %x " +"blkcnt %d totalcnt %d postcnt %d\n" , + status, block_cnt, total_cnt, post_cnt);return -EIO ; }
@@ -8495,6 +8499,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)spin_unlock_irq (&phba->hbalock); } } + phba->hba_flag &= ~HBA_SETUP ;lpfc_sli4_dip (phba);
@@ -9317,6 +9322,7 @@ lpfc_mbox_timeout_handler(struct lpfc_hba *phba)* would get IOCB_ERROR from lpfc_sli_issue_iocb, allowing * it to fail all outstanding SCSI IO. */ +set_bit (MBX_TMO_ERR , &phba->bit_flags);spin_lock_irq (&phba->pport->work_port_lock); phba->pport->work_port_events &= ~WORKER_MBOX_TMO ;spin_unlock_irq (&phba->pport->work_port_lock);
drivers/scsi/megaraid/megaraid_sas.h +1 -1
@@ -2332,7 +2332,7 @@ struct megasas_instance {u32 support_morethan256jbod;/* FW support for more than 256 PD/JBOD */ bool use_seqnum_jbod_fp;/* Added for PD sequence */ bool smp_affinity_enable; -spinlock_t crashdump_lock; +struct mutex crashdump_lock;struct megasas_register_set __iomem *reg_set;u32 __iomem *reply_post_host_index_addr[MR_MAX_MSIX_REG_ARRAY ];
drivers/scsi/megaraid/megaraid_sas_base.c +9 -12
@@ -3272,14 +3272,13 @@ fw_crash_buffer_store(struct device *cdev,struct megasas_instance *instance = (struct megasas_instance *) shost->hostdata;int val =0 ; -unsigned long flags;if (kstrtoint (buf,0 , &val) !=0 )return -EINVAL ; -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock); instance->fw_crash_buffer_offset = val; -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return strlen (buf); }
@@ -3294,24 +3293,23 @@ fw_crash_buffer_show(struct device *cdev,unsigned long dmachunk =CRASH_DMA_BUF_SIZE ;unsigned long chunk_left_bytes;unsigned long src_addr; -unsigned long flags;u32 buff_offset; -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock); buff_offset = instance->fw_crash_buffer_offset;if (!instance->crash_dump_buf || !((instance->fw_crash_state ==AVAILABLE ) || (instance->fw_crash_state ==COPYING ))) {dev_err (&instance->pdev->dev,"Firmware crash dump is not available\n" ); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return -EINVAL ; }if (buff_offset > (instance->fw_crash_buffer_size * dmachunk)) {dev_err (&instance->pdev->dev,"Firmware crash dump offset is out of range\n" ); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return 0 ; }
@@ -3323,7 +3321,7 @@ fw_crash_buffer_show(struct device *cdev, src_addr = (unsigned long )instance->crash_buf[buff_offset / dmachunk] + (buff_offset % dmachunk);memcpy (buf, (void *)src_addr, size); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return size; }
@@ -3348,7 +3346,6 @@ fw_crash_state_store(struct device *cdev,struct megasas_instance *instance = (struct megasas_instance *) shost->hostdata;int val =0 ; -unsigned long flags;if (kstrtoint (buf,0 , &val) !=0 )return -EINVAL ;
@@ -3362,9 +3359,9 @@ fw_crash_state_store(struct device *cdev, instance->fw_crash_state = val;if ((val ==COPIED ) || (val ==COPY_ERROR )) { -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock);megasas_free_host_crash_buffer (instance); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);if (val ==COPY_ERROR )dev_info (&instance->pdev->dev,"application failed to " "copy Firmware crash dump\n" );
@@ -7423,7 +7420,7 @@ static inline void megasas_init_ctrl_params(struct megasas_instance *instance)init_waitqueue_head (&instance->int_cmd_wait_q);init_waitqueue_head (&instance->abort_cmd_wait_q); -spin_lock_init (&instance->crashdump_lock); +mutex_init (&instance->crashdump_lock);spin_lock_init (&instance->mfi_pool_lock);spin_lock_init (&instance->hba_lock);spin_lock_init (&instance->stream_lock);
drivers/scsi/pm8001/pm8001_init.c +17 -34
84 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_dfs.c +3 -3
@@ -116,7 +116,7 @@ qla2x00_dfs_create_rport(scsi_qla_host_t *vha, struct fc_port *fp)sprintf (wwn,"pn-%016llx" ,wwn_to_u64 (fp->port_name)); fp->dfs_rport_dir =debugfs_create_dir (wwn, vha->dfs_rport_root); -if (!fp->dfs_rport_dir) +if (IS_ERR (fp->dfs_rport_dir))return ;if (NVME_TARGET (vha->hw, fp)) debugfs_create_file("dev_loss_tmo", 0600, fp->dfs_rport_dir,
@@ -708,14 +708,14 @@ qla2x00_dfs_setup(scsi_qla_host_t *vha)if (IS_QLA27XX (ha) ||IS_QLA83XX (ha) ||IS_QLA28XX (ha)) { ha->tgt.dfs_naqp =debugfs_create_file ("naqp" ,0400 , ha->dfs_dir, vha, &dfs_naqp_ops); -if (!ha->tgt.dfs_naqp) { +if (IS_ERR (ha->tgt.dfs_naqp)) {ql_log (ql_log_warn, vha,0xd011 ,"Unable to create debugFS naqp node.\n" ); goto out; } } vha->dfs_rport_root =debugfs_create_dir ("rports" , ha->dfs_dir); -if (!vha->dfs_rport_root) { +if (IS_ERR (vha->dfs_rport_root)) {ql_log (ql_log_warn, vha,0xd012 ,"Unable to create debugFS rports node.\n" ); goto out;
drivers/target/iscsi/iscsi_target_configfs.c +27 -27
129 lines not on this page · raw message
drivers/target/target_core_transport.c +1 -0
@@ -264,6 +264,7 @@ void target_free_cmd_counter(struct target_cmd_counter *cmd_cnt)percpu_ref_put (&cmd_cnt->refcnt);percpu_ref_exit (&cmd_cnt->refcnt); +kfree (cmd_cnt); }EXPORT_SYMBOL_GPL (target_free_cmd_counter);
drivers/tty/serial/cpm_uart/cpm_uart_core.c +4 -9
@@ -1257,19 +1257,14 @@ static void cpm_uart_console_write(struct console *co, const char *s, {struct uart_cpm_port *pinfo = &cpm_uart_ports[co->index];unsigned long flags; -int nolock = oops_in_progress; -if (unlikely (nolock)) { +if (unlikely (oops_in_progress)) {local_irq_save (flags); - }else { -spin_lock_irqsave (&pinfo->port.lock, flags); - } - -cpm_uart_early_write (pinfo, s, count, true); - -if (unlikely (nolock)) { +cpm_uart_early_write (pinfo, s, count, true);local_irq_restore (flags); }else { +spin_lock_irqsave (&pinfo->port.lock, flags); +cpm_uart_early_write (pinfo, s, count, true);spin_unlock_irqrestore (&pinfo->port.lock, flags); } }
drivers/usb/cdns3/cdns3-plat.c +2 -1
@@ -256,9 +256,10 @@ static int cdns3_controller_resume(struct device *dev, pm_message_t msg)cdns3_set_platform_suspend (cdns->dev, false, false);spin_lock_irqsave (&cdns->lock, flags); -cdns_resume (cdns, !PMSG_IS_AUTO (msg)); +cdns_resume (cdns); cdns->in_lpm = false;spin_unlock_irqrestore (&cdns->lock, flags); +cdns_set_active (cdns, !PMSG_IS_AUTO (msg));if (cdns->wakeup_pending) { cdns->wakeup_pending = false;enable_irq (cdns->wakeup_irq);
drivers/usb/cdns3/cdnsp-pci.c +2 -1
@@ -210,8 +210,9 @@ static int __maybe_unused cdnsp_pci_resume(struct device *dev)int ret;spin_lock_irqsave (&cdns->lock, flags); - ret =cdns_resume (cdns,1 ); + ret =cdns_resume (cdns);spin_unlock_irqrestore (&cdns->lock, flags); +cdns_set_active (cdns,1 );return ret; }
drivers/usb/cdns3/core.c +11 -4
@@ -522,9 +522,8 @@ int cdns_suspend(struct cdns *cdns) }EXPORT_SYMBOL_GPL (cdns_suspend); -int cdns_resume (struct cdns *cdns,u8 set_active) +int cdns_resume (struct cdns *cdns) { -struct device *dev = cdns->dev;enum usb_role real_role;bool role_changed = false;int ret =0 ;
@@ -556,15 +555,23 @@ int cdns_resume(struct cdns *cdns, u8 set_active)if (cdns->roles[cdns->role]->resume) cdns->roles[cdns->role]->resume (cdns,cdns_power_is_lost (cdns)); + return 0; +} +EXPORT_SYMBOL_GPL (cdns_resume); + +void cdns_set_active (struct cdns *cdns,u8 set_active) +{ +struct device *dev = cdns->dev; +if (set_active) {pm_runtime_disable (dev);pm_runtime_set_active (dev);pm_runtime_enable (dev); } - return 0; +return ; } -EXPORT_SYMBOL_GPL (cdns_resume); +EXPORT_SYMBOL_GPL (cdns_set_active);#endif /* CONFIG_PM_SLEEP */ MODULE_AUTHOR ("Peter Chen <[email protected]>" );
drivers/usb/cdns3/core.h +5 -2
@@ -125,10 +125,13 @@ int cdns_init(struct cdns *cdns);int cdns_remove (struct cdns *cdns);#ifdef CONFIG_PM_SLEEP -int cdns_resume (struct cdns *cdns,u8 set_active); +int cdns_resume (struct cdns *cdns);int cdns_suspend (struct cdns *cdns); +void cdns_set_active (struct cdns *cdns,u8 set_active);#else /* CONFIG_PM_SLEEP */ -static inline int cdns_resume (struct cdns *cdns,u8 set_active) +static inline int cdns_resume (struct cdns *cdns) +{return 0 ; } +static inline int cdns_set_active (struct cdns *cdns,u8 set_active) {return 0 ; }static inline int cdns_suspend (struct cdns *cdns) {return 0 ; }
drivers/usb/chipidea/ci.h +1 -0
@@ -253,6 +253,7 @@ struct ci_hdrc {bool id_event;bool b_sess_valid_event;bool imx28_write_fix; +bool has_portsc_pec_bug;bool supports_runtime_pm;bool in_lpm;bool wakeup_int;
drivers/usb/chipidea/ci_hdrc_imx.c +3 -1
@@ -67,11 +67,13 @@ static const struct ci_hdrc_imx_platform_flag imx7d_usb_data = {static const struct ci_hdrc_imx_platform_flag imx7ulp_usb_data = { .flags =CI_HDRC_SUPPORTS_RUNTIME_PM | +CI_HDRC_HAS_PORTSC_PEC_MISSED |CI_HDRC_PMQOS , };static const struct ci_hdrc_imx_platform_flag imx8ulp_usb_data = { - .flags =CI_HDRC_SUPPORTS_RUNTIME_PM , + .flags =CI_HDRC_SUPPORTS_RUNTIME_PM | +CI_HDRC_HAS_PORTSC_PEC_MISSED , };static const struct of_device_id ci_hdrc_imx_dt_ids[] = {
drivers/usb/chipidea/core.c +2 -0
@@ -1038,6 +1038,8 @@ static int ci_hdrc_probe(struct platform_device *pdev) CI_HDRC_IMX28_WRITE_FIX); ci->supports_runtime_pm = !!(ci->platdata->flags &CI_HDRC_SUPPORTS_RUNTIME_PM ); + ci->has_portsc_pec_bug = !!(ci->platdata->flags & +CI_HDRC_HAS_PORTSC_PEC_MISSED );platform_set_drvdata (pdev, ci); ret =hw_device_init (ci, base);
drivers/usb/chipidea/host.c +1 -0
@@ -151,6 +151,7 @@ static int host_start(struct ci_hdrc *ci) ehci->has_hostpc = ci->hw_bank.lpm; ehci->has_tdi_phy_lpm = ci->hw_bank.lpm; ehci->imx28_write_fix = ci->imx28_write_fix; + ehci->has_ci_pec_bug = ci->has_portsc_pec_bug; priv = (struct ehci_ci_priv *)ehci->priv; priv->reg_vbus =NULL ;
drivers/usb/gadget/udc/fsl_qe_udc.c +5 -1
@@ -1959,9 +1959,13 @@ static void ch9getstatus(struct qe_udc *udc, u8 request_type, u16 value, }else if ((request_type &USB_RECIP_MASK ) ==USB_RECIP_ENDPOINT ) {/* Get endpoint status */ int pipe = index &USB_ENDPOINT_NUMBER_MASK ; -struct qe_ep *target_ep = &udc->eps[pipe]; +struct qe_ep *target_ep;u16 usep; +if (pipe >=USB_MAX_ENDPOINTS ) + goto stall; + target_ep = &udc->eps[pipe]; +/* stall if endpoint doesn't exist */ if (!target_ep->ep.desc) goto stall;
drivers/usb/host/ehci-hcd.c +6 -2
@@ -755,10 +755,14 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)/* normal [4.15.1.2] or error [4.15.1.1] completion */ if (likely ((status & (STS_INT |STS_ERR )) !=0 )) { -if (likely ((status &STS_ERR ) ==0 )) +if (likely ((status &STS_ERR ) ==0 )) {INCR (ehci->stats.normal); -else + }else { +/* Force to check port status */ +if (ehci->has_ci_pec_bug) + status |=STS_PCD ;INCR (ehci->stats.error); + } bh =1 ; }
drivers/usb/host/ehci-hub.c +9 -1
@@ -674,7 +674,8 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)if ((temp & mask) !=0 ||test_bit (i, &ehci->port_c_suspend) || (ehci->reset_done[i] &&time_after_eq ( - jiffies, ehci->reset_done[i]))) { + jiffies, ehci->reset_done[i])) + ||ehci_has_ci_pec_bug (ehci, temp)) {if (i <7 ) buf [0 ] |=1 << (i +1 );else
@@ -875,6 +876,13 @@ int ehci_hub_control(if (temp &PORT_PEC ) status |=USB_PORT_STAT_C_ENABLE <<16 ; +if (ehci_has_ci_pec_bug (ehci, temp)) { + status |=USB_PORT_STAT_C_ENABLE <<16 ; +ehci_info (ehci, +"PE is cleared by HW port:%d PORTSC:%08x\n" , + wIndex +1 , temp); + } +if ((temp &PORT_OCC ) && (!ignore_oc && !ehci->spurious_oc)){ status |=USB_PORT_STAT_C_OVERCURRENT <<16 ;
drivers/usb/host/ehci.h +10 -0
@@ -207,6 +207,7 @@ struct ehci_hcd { /* one per controller */ unsigned has_fsl_port_bug:1; /* FreeScale */ unsigned has_fsl_hs_errata:1; /* Freescale HS quirk */ unsigned has_fsl_susp_errata:1; /* NXP SUSP quirk */ + unsigned has_ci_pec_bug:1; /* ChipIdea PEC bug */ unsigned big_endian_mmio:1; unsigned big_endian_desc:1; unsigned big_endian_capbase:1;
@@ -707,6 +708,15 @@ ehci_port_speed(struct ehci_hcd *ehci, unsigned int portsc)*/ #define ehci_has_fsl_susp_errata (e) ((e)->has_fsl_susp_errata) +/* +* Some Freescale/NXP processors using ChipIdea IP have a bug in which +* disabling the port (PE is cleared) does not cause PEC to be asserted +* when frame babble is detected. +*/ +#define ehci_has_ci_pec_bug (e, portsc) \ + ((e)->has_ci_pec_bug && ((e)->command & CMD_PSE) \ + && !(portsc & PORT_PEC) && !(portsc & PORT_PE)) +/* * While most USB host controllers implement their registers in * little-endian format, a minority (celleb companion chip) implement
fs/attr.c +18 -2
@@ -394,9 +394,25 @@ int notify_change(struct user_namespace *mnt_userns, struct dentry *dentry,return error;if ((ia_valid &ATTR_MODE )) { -umode_t amode = attr->ia_mode; +/* +* Don't allow changing the mode of symlinks: +* +* (1) The vfs doesn't take the mode of symlinks into account +* during permission checking. +* (2) This has never worked correctly. Most major filesystems +* did return EOPNOTSUPP due to interactions with POSIX ACLs +* but did still updated the mode of the symlink. +* This inconsistency led system call wrapper providers such +* as libc to block changing the mode of symlinks with +* EOPNOTSUPP already. +* (3) To even do this in the first place one would have to use +* specific file descriptors and quite some effort. +*/ +if (S_ISLNK (inode->i_mode)) +return -EOPNOTSUPP ; +/* Flag setting protected by i_mutex */ -if (is_sxid (amode)) +if (is_sxid (attr->ia_mode)) inode->i_flags &= ~S_NOSEC ; }
fs/autofs/waitq.c +2 -1
@@ -32,8 +32,9 @@ void autofs_catatonic_mode(struct autofs_sb_info *sbi) wq->status = -ENOENT ;/* Magic is gone - report failure */ kfree (wq->name.name - wq->offset); wq->name.name =NULL ; - wq->wait_ctr--;wake_up_interruptible (&wq->queue); +if (!--wq->wait_ctr) +kfree (wq); wq = nwq; }fput (sbi->pipe);/* Close the pipe */
fs/btrfs/delayed-inode.c +16 -3
@@ -1148,20 +1148,33 @@ static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans, int nr) ret =__btrfs_commit_inode_delayed_items (trans, path, curr_node);if (ret) { -btrfs_release_delayed_node (curr_node); - curr_node =NULL ;btrfs_abort_transaction (trans, ret);break ; } prev_node = curr_node; curr_node =btrfs_next_delayed_node (curr_node); +/* +* See the comment below about releasing path before releasing +* node. If the commit of delayed items was successful the path +* should always be released, but in case of an error, it may +* point to locked extent buffers (a leaf at the very least). +*/ +ASSERT (path->nodes[0 ] ==NULL );btrfs_release_delayed_node (prev_node); } +/* +* Release the path to avoid a potential deadlock and lockdep splat when +* releasing the delayed node, as that requires taking the delayed node's +* mutex. If another task starts running delayed items before we take +* the mutex, it will first lock the mutex and then it may try to lock +* the same btree path (leaf). +*/ +btrfs_free_path (path); +if (curr_node)btrfs_release_delayed_node (curr_node); -btrfs_free_path (path); trans->block_rsv = block_rsv;return ret;
fs/btrfs/disk-io.c +11 -11
@@ -859,6 +859,7 @@ static bool btree_dirty_folio(struct address_space *mapping, struct folio *folio) {struct btrfs_fs_info *fs_info =btrfs_sb (mapping->host->i_sb); +struct btrfs_subpage_info *spi = fs_info->subpage_info;struct btrfs_subpage *subpage;struct extent_buffer *eb;int cur_bit =0 ;
@@ -872,18 +873,19 @@ static bool btree_dirty_folio(struct address_space *mapping,btrfs_assert_tree_write_locked (eb);return filemap_dirty_folio (mapping, folio); } + +ASSERT (spi); subpage =folio_get_private (folio); -ASSERT (subpage->dirty_bitmap); -while (cur_bit <BTRFS_SUBPAGE_BITMAP_SIZE ) { +for (cur_bit = spi->dirty_offset; + cur_bit < spi->dirty_offset + spi->bitmap_nr_bits; + cur_bit++) {unsigned long flags;u64 cur; -u16 tmp = (1 << cur_bit);spin_lock_irqsave (&subpage->lock, flags); -if (!(tmp & subpage->dirty_bitmap)) { +if (!test_bit (cur_bit, subpage->bitmaps)) {spin_unlock_irqrestore (&subpage->lock, flags); - cur_bit++;continue ; }spin_unlock_irqrestore (&subpage->lock, flags);
@@ -896,7 +898,7 @@ static bool btree_dirty_folio(struct address_space *mapping,btrfs_assert_tree_write_locked (eb);free_extent_buffer (eb); - cur_bit += (fs_info->nodesize >> fs_info->sectorsize_bits); + cur_bit += (fs_info->nodesize >> fs_info->sectorsize_bits) -1 ; }return filemap_dirty_folio (mapping, folio); }
@@ -2728,13 +2730,11 @@ int btrfs_validate_super(struct btrfs_fs_info *fs_info, ret = -EINVAL ; } -if (btrfs_fs_incompat (fs_info,METADATA_UUID ) && -memcmp (fs_info->fs_devices->metadata_uuid, - fs_info->super_copy->metadata_uuid,BTRFS_FSID_SIZE )) { +if (memcmp (fs_info->fs_devices->metadata_uuid,btrfs_sb_fsid_ptr (sb), +BTRFS_FSID_SIZE ) !=0 ) {btrfs_err (fs_info,"superblock metadata_uuid doesn't match metadata uuid of fs_devices: %pU != %pU" , - fs_info->super_copy->metadata_uuid, - fs_info->fs_devices->metadata_uuid); +btrfs_sb_fsid_ptr (sb), fs_info->fs_devices->metadata_uuid); ret = -EINVAL ; }
fs/btrfs/extent-tree.c +5 -0
@@ -863,6 +863,11 @@ int lookup_inline_extent_backref(struct btrfs_trans_handle *trans, err = -ENOENT ; goto out; }else if (WARN_ON (ret)) { +btrfs_print_leaf (path->nodes[0 ]); +btrfs_err (fs_info, +"extent item not found for insert, bytenr %llu num_bytes %llu parent %llu root_objectid %llu owner %llu offset %llu" , + bytenr, num_bytes, parent, root_objectid, owner, + offset); err = -EIO ; goto out; }
fs/btrfs/ioctl.c +7 -1
@@ -2850,6 +2850,13 @@ static int btrfs_search_path_in_tree_user(struct user_namespace *mnt_userns, goto out_put; } +/* +* We don't need the path anymore, so release it and +* avoid deadlocks and lockdep warnings in case +* btrfs_iget() needs to lookup the inode from its root +* btree and lock the same leaf. +*/ +btrfs_release_path (path); temp_inode =btrfs_iget (sb, key2.objectid, root);if (IS_ERR (temp_inode)) { ret =PTR_ERR (temp_inode);
@@ -2870,7 +2877,6 @@ static int btrfs_search_path_in_tree_user(struct user_namespace *mnt_userns, goto out_put; } -btrfs_release_path (path); key.objectid = key.offset; key.offset = (u64)-1 ; dirid = key.objectid;
fs/btrfs/ordered-data.c +1 -1
@@ -580,7 +580,7 @@ void btrfs_remove_ordered_extent(struct btrfs_inode *btrfs_inode,refcount_inc (&trans->use_count);spin_unlock (&fs_info->trans_lock); -ASSERT (trans); +ASSERT (trans ||BTRFS_FS_ERROR (fs_info));if (trans) {if (atomic_dec_and_test (&trans->pending_ordered))wake_up (&trans->pending_wait);
fs/btrfs/volumes.c +8 -0
@@ -663,6 +663,14 @@ static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices,return -EINVAL ; } +u8 *btrfs_sb_fsid_ptr (struct btrfs_super_block *sb) +{ +bool has_metadata_uuid = (btrfs_super_incompat_flags (sb) & +BTRFS_FEATURE_INCOMPAT_METADATA_UUID ); + +return has_metadata_uuid ? sb->metadata_uuid : sb->fsid; +} +/* * Handle scanned device having its CHANGING_FSID_V2 flag set and the fs_devices * being created with a disk that has already completed its fsid change. Such
fs/btrfs/volumes.h +1 -0
@@ -757,5 +757,6 @@ int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info);bool btrfs_repair_one_zone (struct btrfs_fs_info *fs_info,u64 logical);bool btrfs_pinned_by_swapfile (struct btrfs_fs_info *fs_info,void *ptr); +u8 *btrfs_sb_fsid_ptr (struct btrfs_super_block *sb);#endif
fs/ext2/xattr.c +2 -2
@@ -744,10 +744,10 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,/* We need to allocate a new block */ ext2_fsblk_t goal =ext2_group_first_block_no (sb,EXT2_I (inode)->i_block_group); -int block =ext2_new_block (inode, goal, &error); +ext2_fsblk_t block =ext2_new_block (inode, goal, &error);if (error) goto cleanup; -ea_idebug (inode,"creating block %d" , block); +ea_idebug (inode,"creating block %lu" , block); new_bh =sb_getblk (sb, block);if (unlikely (!new_bh)) {
fs/ext4/namei.c +15 -11
@@ -343,17 +343,17 @@ static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode, struct buffer_head *bh) {struct ext4_dir_entry_tail *t; +int blocksize =EXT4_BLOCK_SIZE (inode->i_sb);#ifdef PARANOID struct ext4_dir_entry *d, *top; d = (struct ext4_dir_entry *)bh->b_data; top = (struct ext4_dir_entry *)(bh->b_data + - (EXT4_BLOCK_SIZE (inode->i_sb) - -sizeof (struct ext4_dir_entry_tail ))); -while (d < top && d->rec_len) + (blocksize -sizeof (struct ext4_dir_entry_tail ))); +while (d < top &&ext4_rec_len_from_disk (d->rec_len, blocksize)) d = (struct ext4_dir_entry *)(((void *)d) + -le16_to_cpu (d->rec_len)); +ext4_rec_len_from_disk (d->rec_len, blocksize));if (d != top)return NULL ;
@@ -364,7 +364,8 @@ static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode,#endif if (t->det_reserved_zero1 || -le16_to_cpu (t->det_rec_len) !=sizeof (struct ext4_dir_entry_tail ) || + (ext4_rec_len_from_disk (t->det_rec_len, blocksize) != +sizeof (struct ext4_dir_entry_tail )) || t->det_reserved_zero2 || t->det_reserved_ft !=EXT4_FT_DIR_CSUM )return NULL ;
@@ -445,13 +446,14 @@ static struct dx_countlimit *get_dx_countlimit(struct inode *inode,struct ext4_dir_entry *dp;struct dx_root_info *root;int count_offset; +int blocksize =EXT4_BLOCK_SIZE (inode->i_sb); +unsigned int rlen =ext4_rec_len_from_disk (dirent->rec_len, blocksize); -if (le16_to_cpu (dirent->rec_len) ==EXT4_BLOCK_SIZE (inode->i_sb)) +if (rlen == blocksize) count_offset =8 ; -else if (le16_to_cpu (dirent->rec_len) ==12 ) { +else if (rlen ==12 ) { dp = (struct ext4_dir_entry *)(((void *)dirent) +12 ); -if (le16_to_cpu (dp->rec_len) != -EXT4_BLOCK_SIZE (inode->i_sb) -12 ) +if (ext4_rec_len_from_disk (dp->rec_len, blocksize) != blocksize -12 )return NULL ; root = (struct dx_root_info *)(((void *)dp +12 )); if (root->reserved_zero ||
@@ -1315,6 +1317,7 @@ static int dx_make_map(struct inode *dir, struct buffer_head *bh,unsigned int buflen = bh->b_size;char *base = bh->b_data;struct dx_hash_info h = *hinfo; +int blocksize =EXT4_BLOCK_SIZE (dir->i_sb);if (ext4_has_metadata_csum (dir->i_sb)) buflen -=sizeof (struct ext4_dir_entry_tail );
@@ -1335,11 +1338,12 @@ static int dx_make_map(struct inode *dir, struct buffer_head *bh, map_tail--; map_tail->hash = h.hash; map_tail->offs = ((char *) de - base)>>2 ; - map_tail->size =le16_to_cpu (de->rec_len); + map_tail->size =ext4_rec_len_from_disk (de->rec_len, + blocksize); count++;cond_resched (); } - de =ext4_next_entry (de, dir->i_sb->s_blocksize); + de =ext4_next_entry (de, blocksize); }return count; }
fs/jfs/jfs_dmap.c +1 -0
@@ -269,6 +269,7 @@ int dbUnmount(struct inode *ipbmap, int mounterror)/* free the memory for the in-memory bmap. */ kfree (bmp); +JFS_SBI (ipbmap->i_sb)->bmap =NULL ;return (0 ); }
fs/jfs/jfs_imap.c +1 -0
@@ -193,6 +193,7 @@ int diUnmount(struct inode *ipimap, int mounterror)* free in-memory control structure */ kfree (imap); +JFS_IP (ipimap)->i_imap =NULL ;return (0 ); }
fs/locks.c +1 -1
@@ -1300,6 +1300,7 @@ static int posix_lock_inode(struct inode *inode, struct file_lock *request, out:spin_unlock (&ctx->flc_lock);percpu_up_read (&file_rwsem); +trace_posix_lock_inode (inode, request, error);/* * Free any unused locks. */
@@ -1308,7 +1309,6 @@ static int posix_lock_inode(struct inode *inode, struct file_lock *request,if (new_fl2)locks_free_lock (new_fl2);locks_dispose_list (&dispose); -trace_posix_lock_inode (inode, request, error);return error; }
fs/nfsd/nfs4proc.c +2 -2
@@ -1029,8 +1029,8 @@ nfsd4_rename(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, rename->rn_tname, rename->rn_tnamelen);if (status)return status; -set_change_info (&rename->rn_sinfo, &cstate->current_fh); -set_change_info (&rename->rn_tinfo, &cstate->save_fh); +set_change_info (&rename->rn_sinfo, &cstate->save_fh); +set_change_info (&rename->rn_tinfo, &cstate->current_fh);return nfs_ok; }
fs/overlayfs/copy_up.c +2 -1
@@ -580,7 +580,8 @@ static int ovl_copy_up_metadata(struct ovl_copy_up_ctx *c, struct dentry *temp)if (err)return err; -if (inode->i_flags &OVL_COPY_I_FLAGS_MASK ) { +if (inode->i_flags &OVL_COPY_I_FLAGS_MASK && + (S_ISREG (c->stat.mode) ||S_ISDIR (c->stat.mode))) {/* * Copy the fileattr inode flags that are the source of already * copied i_flags
fs/overlayfs/file.c +3 -6
@@ -19,7 +19,6 @@ struct ovl_aio_req {struct kiocb iocb;refcount_t ref;struct kiocb *orig_iocb; -struct fd fd; };static struct kmem_cache *ovl_aio_request_cachep;
@@ -260,7 +259,7 @@ static rwf_t ovl_iocb_to_rwf(int ifl)static inline void ovl_aio_put (struct ovl_aio_req *aio_req) {if (refcount_dec_and_test (&aio_req->ref)) { -fdput (aio_req->fd); +fput (aio_req->iocb.ki_filp);kmem_cache_free (ovl_aio_request_cachep, aio_req); } }
@@ -325,10 +324,9 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter)if (!aio_req) goto out; - aio_req->fd = real; real.flags =0 ; aio_req->orig_iocb = iocb; -kiocb_clone (&aio_req->iocb, iocb, real.file); +kiocb_clone (&aio_req->iocb, iocb,get_file (real.file)); aio_req->iocb.ki_complete = ovl_aio_rw_complete;refcount_set (&aio_req->ref,2 ); ret =vfs_iocb_iter_read (real.file, &aio_req->iocb, iter);
@@ -396,10 +394,9 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter)/* Pacify lockdep, same trick as done in aio_write() */ __sb_writers_release (file_inode (real.file)->i_sb,SB_FREEZE_WRITE ); - aio_req->fd = real; real.flags =0 ; aio_req->orig_iocb = iocb; -kiocb_clone (&aio_req->iocb, iocb, real.file); +kiocb_clone (&aio_req->iocb, iocb,get_file (real.file)); aio_req->iocb.ki_flags = ifl; aio_req->iocb.ki_complete = ovl_aio_rw_complete;refcount_set (&aio_req->ref,2 );
fs/tracefs/inode.c +3 -0
@@ -556,6 +556,9 @@ static struct dentry *__create_dir(const char *name, struct dentry *parent,*/ struct dentry *tracefs_create_dir (const char *name,struct dentry *parent) { +if (security_locked_down (LOCKDOWN_TRACEFS )) +return NULL ; +return __create_dir (name, parent, &simple_dir_inode_operations); }
include/linux/acpi_iort.h +1 -0
@@ -21,6 +21,7 @@*/ #define IORT_SMMU_V3_PMCG_GENERIC 0x00000000/* Generic SMMUv3 PMCG */ #define IORT_SMMU_V3_PMCG_HISI_HIP08 0x00000001/* HiSilicon HIP08 PMCG */ +#define IORT_SMMU_V3_PMCG_HISI_HIP09 0x00000002/* HiSilicon HIP09 PMCG */ int iort_register_domain_token (int trans_id,phys_addr_t base,struct fwnode_handle *fw_node);
include/linux/bvec.h +15 -0
@@ -35,6 +35,21 @@ struct bio_vec {unsigned int bv_offset; }; +/** +* bvec_set_page - initialize a bvec based off a struct page +* @bv: bvec to initialize +* @page: page the bvec should point to +* @len: length of the bvec +* @offset: offset into the page +*/ +static inline void bvec_set_page (struct bio_vec *bv,struct page *page, +unsigned int len,unsigned int offset) +{ + bv->bv_page = page; + bv->bv_len = len; + bv->bv_offset = offset; +} +struct bvec_iter {sector_t bi_sector;/* device address in 512 byte sectors */
include/linux/dma-buf.h +6 -0
@@ -627,6 +627,12 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf, enum dma_data_direction dir);int dma_buf_end_cpu_access (struct dma_buf *dma_buf,enum dma_data_direction dir); +struct sg_table * +dma_buf_map_attachment_unlocked (struct dma_buf_attachment *attach, +enum dma_data_direction direction); +void dma_buf_unmap_attachment_unlocked (struct dma_buf_attachment *attach, +struct sg_table *sg_table, +enum dma_data_direction direction);int dma_buf_mmap (struct dma_buf *,struct vm_area_struct *,unsigned long );
include/linux/instruction_pointer.h +5 -0
@@ -2,7 +2,12 @@#ifndef _LINUX_INSTRUCTION_POINTER_H#define _LINUX_INSTRUCTION_POINTER_H +#include <asm/linkage.h> +#define _RET_IP_ (unsigned long)__builtin_return_address(0) + +#ifndef _THIS_IP_#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) +#endif #endif /* _LINUX_INSTRUCTION_POINTER_H */
include/linux/libata.h +4 -0
@@ -216,6 +216,10 @@ enum {ATA_HOST_PARALLEL_SCAN = (1 <<2 ),/* Ports on this host can be scanned in parallel */ ATA_HOST_IGNORE_ATA = (1 <<3 ),/* Ignore ATA devices on this host. */ +ATA_HOST_NO_PART = (1 <<4 ),/* Host does not support partial */ +ATA_HOST_NO_SSC = (1 <<5 ),/* Host does not support slumber */ +ATA_HOST_NO_DEVSLP = (1 <<6 ),/* Host does not support devslp */ +/* bits 24:31 of host->flags are reserved for LLD specific flags */ /* various lengths of time */
include/linux/perf_event.h +19 -3
@@ -1139,15 +1139,31 @@ extern int perf_event_output(struct perf_event *event, struct pt_regs *regs);static inline bool -is_default_overflow_handler (struct perf_event *event) +__is_default_overflow_handler (perf_overflow_handler_t overflow_handler) { -if (likely (event->overflow_handler == perf_event_output_forward)) +if (likely (overflow_handler == perf_event_output_forward))return true; -if (unlikely (event->overflow_handler == perf_event_output_backward)) +if (unlikely (overflow_handler == perf_event_output_backward))return true;return false; } +#define is_default_overflow_handler (event) \ + __is_default_overflow_handler((event)->overflow_handler) + +#ifdef CONFIG_BPF_SYSCALL +static inline bool uses_default_overflow_handler (struct perf_event *event) +{ +if (likely (is_default_overflow_handler (event))) +return true; + +return __is_default_overflow_handler (event->orig_overflow_handler); +} +#else +#define uses_default_overflow_handler (event) \ + is_default_overflow_handler(event) +#endif + extern void perf_event_header__init_id(struct perf_event_header *header, struct perf_sample_data *data,
include/linux/sched/task.h +27 -1
@@ -112,10 +112,36 @@ static inline struct task_struct *get_task_struct(struct task_struct *t) }extern void __put_task_struct (struct task_struct *t); +extern void __put_task_struct_rcu_cb (struct rcu_head *rhp);static inline void put_task_struct (struct task_struct *t) { -if (refcount_dec_and_test (&t->usage)) +if (!refcount_dec_and_test (&t->usage)) +return ; + +/* +* under PREEMPT_RT, we can't call put_task_struct +* in atomic context because it will indirectly +* acquire sleeping locks. +* +* call_rcu() will schedule delayed_put_task_struct_rcu() +* to be called in process context. +* +* __put_task_struct() is called when +* refcount_dec_and_test(&t->usage) succeeds. +* +* This means that it can't "conflict" with +* put_task_struct_rcu_user() which abuses ->rcu the same +* way; rcu_users has a reference so task->usage can't be +* zero after rcu_users 1 -> 0 transition. +* +* delayed_free_task() also uses ->rcu, but it is only called +* when it fails to fork a process. Therefore, there is no +* way it can conflict with put_task_struct(). +*/ +if (IS_ENABLED (CONFIG_PREEMPT_RT ) && !preemptible ()) +call_rcu (&t->rcu, __put_task_struct_rcu_cb); +else __put_task_struct (t); }
include/linux/usb/chipidea.h +1 -0
@@ -63,6 +63,7 @@ struct ci_hdrc_platform_data {#define CI_HDRC_IMX_IS_HSIC BIT(14)#define CI_HDRC_PMQOS BIT(15)#define CI_HDRC_PHY_VBUS_CONTROL BIT(16) +#define CI_HDRC_HAS_PORTSC_PEC_MISSED BIT(17)enum usb_dr_mode dr_mode;#define CI_HDRC_CONTROLLER_RESET_EVENT 0#define CI_HDRC_CONTROLLER_STOPPED_EVENT 1
include/uapi/linux/netfilter_bridge/ebtables.h +8 -6
@@ -182,12 +182,14 @@ struct ebt_entry {unsigned char sourcemsk[ETH_ALEN ];unsigned char destmac[ETH_ALEN ];unsigned char destmsk[ETH_ALEN ]; -/* sizeof ebt_entry + matches */ -unsigned int watchers_offset; -/* sizeof ebt_entry + matches + watchers */ -unsigned int target_offset; -/* sizeof ebt_entry + matches + watchers + target */ -unsigned int next_offset; + __struct_group(/* no tag */, offsets, /* no attrs */, +/* sizeof ebt_entry + matches */ + unsigned int watchers_offset; +/* sizeof ebt_entry + matches + watchers */ +unsigned int target_offset; +/* sizeof ebt_entry + matches + watchers + target */ +unsigned int next_offset; + ); unsigned char elems[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); };
io_uring/net.c +5 -0
@@ -170,6 +170,10 @@ static int io_setup_async_msg(struct io_kiocb *req,memcpy (async_msg, kmsg,sizeof (*kmsg));if (async_msg->msg.msg_name) async_msg->msg.msg_name = &async_msg->addr; + +if ((req->flags &REQ_F_BUFFER_SELECT ) && !async_msg->msg.msg_iter.nr_segs) +return -EAGAIN ; +/* if were using fast_iov, set it to the new one */ if (!kmsg->free_iov) {size_t fast_idx = kmsg->msg.msg_iter.iov - kmsg->fast_iov;
@@ -529,6 +533,7 @@ static int io_recvmsg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg) { iomsg->msg.msg_name = &iomsg->addr; + iomsg->msg.msg_iter.nr_segs =0 ;#ifdef CONFIG_COMPAT if (req->ctx->compat)
kernel/fork.c +8 -0
@@ -852,6 +852,14 @@ void __put_task_struct(struct task_struct *tsk) }EXPORT_SYMBOL_GPL (__put_task_struct); +void __put_task_struct_rcu_cb (struct rcu_head *rhp) +{ + struct task_struct *task = container_of(rhp, struct task_struct, rcu); + +__put_task_struct (task); +} +EXPORT_SYMBOL_GPL (__put_task_struct_rcu_cb); +void __init __weak arch_task_cache_init (void ) { }/*
kernel/panic.c +1 -0
@@ -695,6 +695,7 @@ void warn_slowpath_fmt(const char *file, int line, unsigned taint,if (!fmt) { __warn(file, line, __builtin_return_address(0), taint,
Lines of this file are not shown. View the raw message.
kernel/printk/printk.c +54 -26
80 lines not on this page · raw message
kernel/trace/trace.c +61 -7
68 lines not on this page · raw message
net/netlink/af_netlink.c +30 -60
90 lines not on this page · raw message
net/sched/cls_rsvp.h deleted +0 -764
764 lines not on this page · raw message
samples/hw_breakpoint/data_breakpoint.c +3 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ftrace/ftracetest +8 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/nolibc/nolibc-test.c +31 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/tc-testing/tc-tests/filters/rsvp.json deleted +0 -203
203 lines not on this page · 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.