Linux 6.6.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.11 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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
------------
Makefile | 2 arch/arm/mach-sunxi/mc_smp.c | 4 arch/powerpc/platforms/pseries/vas.c | 51 +- arch/powerpc/platforms/pseries/vas.h | 2 arch/riscv/kernel/cpufeature.c | 4 arch/riscv/kvm/aia_imsic.c | 13 arch/s390/kvm/vsie.c | 4 arch/x86/events/intel/core.c | 7 arch/x86/kernel/kprobes/core.c | 3 crypto/xts.c | 23 drivers/accel/qaic/mhi_controller.c | 15 drivers/accel/qaic/qaic_data.c | 6 drivers/acpi/thermal.c | 4 drivers/clk/clk-si521xx.c | 4 drivers/clk/rockchip/clk-rk3128.c | 22 drivers/crypto/hisilicon/qm.c | 105 +--- drivers/crypto/intel/qat/qat_common/adf_aer.c | 3 drivers/cxl/core/hdm.c | 9 drivers/cxl/core/mbox.c | 2 drivers/cxl/core/memdev.c | 31 + drivers/cxl/core/pmu.c | 2 drivers/cxl/core/port.c | 7 drivers/cxl/core/region.c | 5 drivers/cxl/cxl.h | 1 drivers/dma/fsl-edma-main.c | 12 drivers/dma/idxd/submit.c | 14 drivers/dma/ti/k3-psil-am62.c | 12 drivers/dma/ti/k3-psil-am62a.c | 12 drivers/firewire/ohci.c | 51 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 11 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 11 drivers/gpu/drm/amd/display/dc/dml/Makefile | 4 drivers/gpu/drm/amd/display/dc/dml/dc_features.h | 2 drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c | 110 ++++ drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c | 13 drivers/gpu/drm/bridge/parade-ps8640.c | 7 drivers/gpu/drm/bridge/ti-sn65dsi86.c | 4 drivers/gpu/drm/i915/display/intel_display.c | 3 drivers/gpu/drm/i915/display/intel_dp.c | 2 drivers/gpu/drm/i915/i915_perf.c | 39 + drivers/gpu/drm/mgag200/mgag200_drv.h | 5 drivers/gpu/drm/mgag200/mgag200_g200er.c | 5 drivers/gpu/drm/mgag200/mgag200_g200ev.c | 5 drivers/gpu/drm/mgag200/mgag200_g200se.c | 5 drivers/gpu/drm/mgag200/mgag200_mode.c | 10 drivers/i2c/i2c-core.h | 4 drivers/iio/imu/adis16475.c | 4 drivers/infiniband/hw/mlx5/mr.c | 2 drivers/iommu/intel/iommu.c | 5 drivers/iommu/intel/iommu.h | 3 drivers/media/platform/qcom/camss/camss-csid-gen2.c | 14 drivers/media/platform/qcom/camss/camss.c | 45 + drivers/mmc/core/block.c | 7 drivers/mmc/core/host.c | 1 drivers/mmc/host/meson-mx-sdhc-mmc.c | 26 - drivers/mmc/host/sdhci-sprd.c | 10 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 drivers/net/ethernet/intel/i40e/i40e_main.c | 11 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 34 + drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h | 3 drivers/net/ethernet/intel/ice/ice_main.c | 12 drivers/net/ethernet/intel/igc/igc.h | 1 drivers/net/ethernet/intel/igc/igc_ethtool.c | 42 + drivers/net/ethernet/intel/igc/igc_tsn.c | 2 drivers/net/ethernet/marvell/octeontx2/af/npc.h | 4 drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 1 drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 17 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 118 ---- drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c | 9 drivers/net/ethernet/qlogic/qla3xxx.c | 2 drivers/net/ethernet/realtek/r8169_main.c | 2 drivers/net/ethernet/renesas/ravb_main.c | 65 +- drivers/net/ethernet/sfc/rx_common.c | 4 drivers/net/ethernet/wangxun/libwx/wx_lib.c | 82 --- drivers/net/ethernet/wangxun/libwx/wx_type.h | 1 drivers/net/usb/ax88172a.c | 4 drivers/net/virtio_net.c | 90 +-- drivers/net/wireless/intel/iwlwifi/pcie/internal.h | 4 drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 8 drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 17 drivers/pci/pci.c | 6 drivers/pci/pci.h | 2 drivers/pci/pcie/aspm.c | 19 drivers/phy/mediatek/phy-mtk-mipi-dsi-mt8183.c | 2 drivers/phy/sunplus/phy-sunplus-usb2.c | 2 drivers/phy/ti/phy-gmii-sel.c | 5 fs/dax.c | 24 - fs/smb/client/cifsglob.h | 1 fs/smb/client/connect.c | 7 fs/smb/client/smb2ops.c | 34 - include/linux/dax.h | 10 include/linux/hisi_acc_qm.h | 1 include/net/netfilter/nf_tables_ipv4.h | 2 include/net/sock.h | 4 include/net/tcp.h | 2 include/net/xdp_sock.h | 2 kernel/rcu/rcu.h | 2 kernel/rcu/tasks.h | 32 + kernel/rcu/tree.c | 43 + kernel/resource.c | 4 mm/memory-failure.c | 52 +- mm/memory.c | 4 mm/vmscan.c | 13 net/core/skbuff.c | 3 net/core/sock.c | 12 net/dns_resolver/dns_key.c | 19 net/ipv4/tcp.c | 3 net/ipv4/tcp_output.c | 16 net/mptcp/subflow.c | 13 net/netfilter/nf_nat_ovs.c | 3 net/netfilter/nf_tables_core.c | 2 net/netfilter/nft_immediate.c | 2 net/nfc/llcp_core.c | 39 + net/sched/em_text.c | 4 net/smc/smc_diag.c | 3 net/socket.c | 2 net/xdp/xsk.c | 2 net/xdp/xsk_buff_pool.c | 3 samples/vfio-mdev/mtty.c | 239 ++++++--- security/apparmor/apparmorfs.c | 1 security/apparmor/mount.c | 4 sound/pci/hda/patch_realtek.c | 3 sound/pci/hda/tas2781_hda_i2c.c | 240 +++++----- sound/soc/codecs/tas2781-comlib.c | 4 sound/soc/codecs/tas2781-i2c.c | 2 sound/soc/fsl/fsl_rpmsg.c | 10 sound/soc/mediatek/mt8186/mt8186-dai-adda.c | 2 sound/soc/meson/g12a-toacodec.c | 5 sound/soc/meson/g12a-tohdmitx.c | 8 tools/bpf/bpftool/gen.c | 15 tools/testing/cxl/Kbuild | 1 tools/testing/cxl/cxl_core_exports.c | 7 tools/testing/cxl/test/cxl.c | 5 tools/testing/selftests/drivers/net/bonding/bond-arp-interval-causes-panic.sh | 6 135 files changed, 1442 insertions(+), 837 deletions(-)
Aabish Malik (1):
ALSA: hda/realtek: enable SND_PCI_QUIRK for hp pavilion 14-ec1xxx series
Adrian Cinal (1):
net: bcmgenet: Fix FCS generation for fragmented skbuffs
Alex Bee (1):
clk: rockchip: rk3128: Fix SCLK_SDMMC's clock name
Alex Deucher (3):
drm/amd/display: Increase frame warning limit with KASAN or KCSAN in dml drm/amdgpu: skip gpu_info fw loading on navi12 drm/amd/display: add nv12 bounding box
Alex Williamson (1):
vfio/mtty: Overhaul mtty interrupt handling
Alison Schofield (3):
cxl/core: Always hold region_rwsem while reading poison lists kernel/resource: Increment by align value in get_free_mem_region() cxl/memdev: Hold region_rwsem during inject and clear poison ops
Alvin Lee (1):
drm/amd/display: Increase num voltage states to 40
Andrew Davis (1):
phy: ti: gmii-sel: Fix register offset when parent is not a syscon node
Andrii Staikov (1):
i40e: Restore VF MSI-X state during PCI reset
Andy Chi (1):
ALSA: hda/realtek: fix mute/micmute LEDs for a HP ZBook
Benjamin Bara (1):
i2c: core: Fix atomic xfer check for non-preempt config
Bjorn Helgaas (1):
Revert "PCI/ASPM: Remove pcie_aspm_pm_state_change()"
Brad Cowie (1):
netfilter: nf_nat: fix action not being set for all ct states
Bryan O'Donoghue (3):
media: qcom: camss: Fix V4L2 async notifier error path
media: qcom: camss: Fix genpd cleanup
media: qcom: camss: Comment CSID dt_id field
Chancel Liu (1):
ASoC: fsl_rpmsg: Fix error handler with pm_runtime_enable
Chen Ni (1):
asix: Add check for usbnet_get_endpoints
Claudio Imbrenda (1):
KVM: s390: vsie: fix wrong VIR 37 when MSO is used
Claudiu Beznea (1):
net: ravb: Wait for operating mode to be applied
Dan Carpenter (1):
ACPI: thermal: Fix acpi_thermal_unregister_thermal_zone() cleanup
Dave Jiang (3):
cxl: Add cxl_decoders_committed() helper
cxl: Add cxl_num_decoders_committed() usage to cxl_test cxl/hdm: Fix a benign lockdep splat
David Thompson (1):
mlxbf_gige: fix receive packet race condition
Denys Zagorui (1):
bpftool: Fix -Wcast-qual warning
Dinghao Liu (1):
net/qla3xxx: fix potential memleak in ql_alloc_buffer_queues
Douglas Anderson (3):
drm/bridge: parade-ps8640: Never store more than msg->size bytes in AUX xfer
drm/bridge: ti-sn65dsi86: Never store more than msg->size bytes in AUX xfer
drm/bridge: ps8640: Fix size mismatch warning w/ lenEdward Adam Davis (1):
keys, dns: Fix missing size check of V1 server-list header
Eric Biggers (1):
crypto: xts - use 'spawn' for underlying single-block cipher
Eric Dumazet (4):
virtio_net: avoid data-races on dev->stats fields
tcp: derive delack_max from rto_min
net: prevent mss overflow in skb_segment()
net: constify sk_dst_get() and __sk_dst_get() argument
Eugen Hristev (1):
ASoC: mediatek: mt8186: fix AUD_PAD_TOP register and offset
Finley Xiao (1):
clk: rockchip: rk3128: Fix aclk_peri_src's parent
Frederic Weisbecker (3):
rcu: Introduce rcu_cpu_online() rcu/tasks: Handle new PF_IDLE semantics rcu/tasks-trace: Handle new PF_IDLE semantics
Geert Uytterhoeven (1):
mmc: core: Cancel delayed work before releasing host
Gergo Koteles (3):
ALSA: hda/tas2781: do not use regcache
ALSA: hda/tas2781: move set_drv_data outside tasdevice_init
ALSA: hda/tas2781: remove sound controls in unbind
Greg Kroah-Hartman (1):
Linux 6.6.11
Guanjun (1):
dmaengine: idxd: Protect int_handle field in hw descriptor
Hangbin Liu (1):
selftests: bonding: do not set port down when adding to bond
Hangyu Hua (1):
net: sched: em_text: fix possible memory leak in em_text_destroy()
Haren Myneni (1):
powerpc/pseries/vas: Migration suspend waits for no in-progress open windows
Ian Rogers (1):
bpftool: Align output skeleton ELF code
Ira Weiny (1):
cxl/pmu: Ensure put_device on pmu devices
Jai Luthra (1):
dmaengine: ti: k3-psil-am62a: Fix SPI PDMA data
Jeffrey Hugo (1):
accel/qaic: Implement quirk for SOC_HW_VERSION
Jiajun Xie (1):
mm: fix unmap_mapping_range high bits shift bug
Jinghao Jia (1):
x86/kprobes: fix incorrect return address calculation in kprobe_emulate_call_indirect
Jisheng Zhang (1):
riscv: don't probe unaligned access speed if already done
Jocelyn Falempe (1):
drm/mgag200: Fix gamma lut not initialized for G200ER, G200EV, G200SE
Johannes Berg (1):
wifi: iwlwifi: pcie: don't synchronize IRQs from IRQ
John Johansen (1):
apparmor: Fix move_mount mediation by detecting if source is detached
Jorge Ramirez-Ortiz (1):
mmc: rpmb: fixes pause retune on all RPMB partitions.
Joshua Ashton (1):
drm/amd/display: Fix sending VSC (+ colorimetry) packets for DP/eDP displays without PSR
Jörn-Thorben Hinz (1):
net: Implement missing getsockopt(SO_TIMESTAMPING_NEW)
Kai-Heng Feng (1):
r8169: Fix PCI error on system resume
Katarzyna Wieczerzycka (1):
ice: Fix link_down_on_close message
Ke Xiao (1):
i40e: fix use-after-free in i40e_aqc_add_filters()
Khaled Almahallawy (1):
drm/i915/dp: Fix passing the correct DPCD_REV for drm_dp_set_phy_test_pattern
Kurt Kanzenbach (3):
igc: Report VLAN EtherType matching back to user
igc: Check VLAN TCI mask
igc: Check VLAN EtherType mask
Longfang Liu (1):
crypto: hisilicon/qm - fix EQ/AEQ interrupt issue
Lu Baolu (1):
iommu/vt-d: Support enforce_cache_coherency only for empty domains
Marc Dionne (1):
net: Save and restore msg_namelen in sock_sendmsg
Marek Vasut (1):
clk: si521xx: Increase stack based print buffer size in probe
Mark Brown (4):
ASoC: meson: g12a-toacodec: Validate written enum values
ASoC: meson: g12a-tohdmitx: Validate written enum values
ASoC: meson: g12a-toacodec: Fix event generation
ASoC: meson: g12a-tohdmitx: Fix event generation for S/PDIF mux
Matthew Wilcox (Oracle) (2):
mm: convert DAX lock/unlock page to lock/unlock folio mm/memory-failure: pass the folio and the page to collect_procs()
Michael Chan (1):
bnxt_en: Remove mis-applied code from bnxt_cfg_ntp_filters()
Michael Walle (1):
phy: mediatek: mipi: mt8183: fix minimal supported frequency
Moshe Shemesh (1):
RDMA/mlx5: Fix mkey cache WQ flush
Naveen Mamindlapalli (2):
octeontx2-af: Always configure NIX TX link credits based on max frame size
octeontx2-af: Re-enable MAC TX in otx2_stop processing
Ngai-Mint Kwan (1):
ice: Shut down VSI with "link-down-on-close" enabled
Nuno Sa (1):
iio: imu: adis16475: use bit numbers in assign_bit()
Pablo Neira Ayuso (2):
netfilter: nf_tables: set transport offset from mac header for netdev/egress
netfilter: nft_immediate: drop chain reference counter on error
Paolo Abeni (1):
mptcp: prevent tcp diag from closing listener subflows
Paolo Bonzini (1):
KVM: x86/pmu: fix masking logic for MSR_CORE_PERF_GLOBAL_CTRL
Peter Zijlstra (1):
rcu: Break rcu_node_0 --> &rq->__lock order
Pranjal Ramajor Asha Kanojiya (1):
accel/qaic: Fix GEM import path code
Rodrigo Cataldo (1):
igc: Fix hicredit calculation
Ronald Wahl (1):
dmaengine: ti: k3-psil-am62: Fix SPI PDMA data
Shyam Prasad N (2):
cifs: cifs_chan_is_iface_active should be called with chan_lock held
cifs: do not depend on release_iface for maintaining iface_list
Siddh Raman Pant (1):
nfc: llcp_core: Hold a ref to llcp_local->dev when holding a ref to llcp_local
Siddhesh Dharme (1):
ALSA: hda/realtek: Fix mute and mic-mute LEDs for HP ProBook 440 G6
Stefan Wahren (1):
ARM: sun9i: smp: Fix array-index-out-of-bounds read in sunxi_mc_smp_init
Su Hui (1):
phy: sunplus: return negative error code in sp_usb_phy_probe
Sudheer Mogilappagari (1):
i40e: Fix filter input checks to prevent config with invalid values
Suman Ghosh (1):
octeontx2-af: Fix marking couple of structure as __packed
Svyatoslav Pankratov (1):
crypto: qat - fix double free during reset
Takashi Sakamoto (1):
firewire: ohci: suppress unexpected system reboot in AMD Ryzen machines and ASM108x/VT630x PCIe cards
Thomas Lange (1):
net: Implement missing SO_TIMESTAMPING_NEW cmsg support
Tirthendu Sarkar (1):
xsk: add multi-buffer support for sockets sharing umem
Umesh Nerlige Ramappa (1):
drm/i915/perf: Update handling of MMIO triggered reports
Ville Syrjälä (1):
drm/i915: Call intel_pre_plane_updates() also for pipes getting enabled
Wayne Lin (1):
drm/amd/display: pbn_div need be updated for hotplug event
Wen Gu (1):
net/smc: fix invalid link access in dumping SMC-R connections
Wenchao Chen (1):
mmc: sdhci-sprd: Fix eMMC init failure after hw reset
Xiaolei Wang (2):
dmaengine: fsl-edma: Do not suspend and resume the masked dma channel when the system is sleeping
dmaengine: fsl-edma: Add judgment on enabling round robin arbitration
Xuan Zhuo (1):
virtio_net: fix missing dma unmap for resize
Yang Yingliang (1):
dmaengine: fsl-edma: fix wrong pointer check in fsl_edma3_attach_pd()
Yong-Xuan Wang (1):
RISCV: KVM: update external interrupt atomically for IMSIC swfile
Yu Zhao (1):
mm/mglru: skip special VMAs in lru_gen_look_around()
Zhipeng Lu (1):
sfc: fix a double-free bug in efx_probe_filters
Ziyang Huang (1):
mmc: meson-mx-sdhc: Fix initialization frozen issue
duanqiangwen (1):
net: libwx: fix memory leak on free page
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm/mach-sunxi/mc_smp.c +2 -2
@@ -807,12 +807,12 @@ static int __init sunxi_mc_smp_init(void)break ; } - is_a83t = sunxi_mc_smp_data[i].is_a83t; -of_node_put (node);if (ret)return -ENODEV ; + is_a83t = sunxi_mc_smp_data[i].is_a83t; +if (!sunxi_mc_smp_cpu_table_init ())return -EINVAL ;
arch/powerpc/platforms/pseries/vas.c +44 -7
112 lines not on this page · raw message
arch/powerpc/platforms/pseries/vas.h +2 -0
@@ -91,6 +91,8 @@ struct vas_cop_feat_caps {struct vas_caps {struct vas_cop_feat_caps caps;struct list_head list;/* List of open windows */ +int nr_open_wins_progress;/* Number of open windows in */ +/* progress. Used in migration */ int nr_close_wins;/* closed windows in the hypervisor for DLPAR */ int nr_open_windows;/* Number of successful open windows */ u8 feat;/* Feature type */
arch/riscv/kernel/cpufeature.c +4 -0
@@ -568,6 +568,10 @@ void check_unaligned_access(int cpu)void *src;long speed =RISCV_HWPROBE_MISALIGNED_SLOW ; +/* We are already set since the last check */ +if (per_cpu (misaligned_access_speed, cpu) !=RISCV_HWPROBE_MISALIGNED_UNKNOWN ) +return ; + page =alloc_pages (GFP_NOWAIT ,get_order (MISALIGNED_BUFFER_SIZE ));if (!page) {pr_warn ("Can't alloc pages to measure memcpy performance" );
arch/riscv/kvm/aia_imsic.c +13 -0
@@ -55,6 +55,7 @@ struct imsic {/* IMSIC SW-file */ struct imsic_mrif *swfile;phys_addr_t swfile_pa; +spinlock_t swfile_extirq_lock; };#define imsic_vs_csr_read (__c) \
@@ -613,12 +614,23 @@ static void imsic_swfile_extirq_update(struct kvm_vcpu *vcpu) {struct imsic *imsic = vcpu->arch.aia_context.imsic_state;struct imsic_mrif *mrif = imsic->swfile; +unsigned long flags; + +/* +* The critical section is necessary during external interrupt +* updates to avoid the risk of losing interrupts due to potential +* interruptions between reading topei and updating pending status. +*/ + +spin_lock_irqsave (&imsic->swfile_extirq_lock, flags);if (imsic_mrif_atomic_read (mrif, &mrif->eidelivery) &&imsic_mrif_topei (mrif, imsic->nr_eix, imsic->nr_msis))kvm_riscv_vcpu_set_interrupt (vcpu,IRQ_VS_EXT );else kvm_riscv_vcpu_unset_interrupt (vcpu,IRQ_VS_EXT ); + +spin_unlock_irqrestore (&imsic->swfile_extirq_lock, flags); } static void imsic_swfile_read(struct kvm_vcpu *vcpu, bool clear,
@@ -1039,6 +1051,7 @@ int kvm_riscv_vcpu_aia_imsic_init(struct kvm_vcpu *vcpu) } imsic->swfile =page_to_virt (swfile_page); imsic->swfile_pa =page_to_phys (swfile_page); +spin_lock_init (&imsic->swfile_extirq_lock);/* Setup IO device */ kvm_iodevice_init (&imsic->iodev, &imsic_iodoev_ops);
arch/s390/kvm/vsie.c +0 -4
@@ -587,10 +587,6 @@ void kvm_s390_vsie_gmap_notifier(struct gmap *gmap, unsigned long start,if (!gmap_is_shadow (gmap))return ; -if (start >=1UL <<31 ) -/* We are only interested in prefix pages */ -return ; -/* * Only new shadow blocks are added to the list during runtime, * therefore we can safely reference them all the time.
arch/x86/events/intel/core.c +6 -1
@@ -4062,12 +4062,17 @@ static struct perf_guest_switch_msr *intel_guest_get_msrs(int *nr, void *data)u64 pebs_mask = cpuc->pebs_enabled & x86_pmu.pebs_capable;int global_ctrl, pebs_enable; +/* +* In addition to obeying exclude_guest/exclude_host, remove bits being +* used for PEBS when running a guest, because PEBS writes to virtual +* addresses (not physical addresses). +*/ *nr =0 ; global_ctrl = (*nr)++; arr[global_ctrl] = (struct perf_guest_switch_msr ){ .msr =MSR_CORE_PERF_GLOBAL_CTRL , .host = intel_ctrl & ~cpuc->intel_ctrl_guest_mask, - .guest = intel_ctrl & (~cpuc->intel_ctrl_host_mask | ~pebs_mask), + .guest = intel_ctrl & ~cpuc->intel_ctrl_host_mask & ~pebs_mask, };if (!x86_pmu.pebs)
arch/x86/kernel/kprobes/core.c +2 -1
@@ -576,7 +576,8 @@ static void kprobe_emulate_call_indirect(struct kprobe *p, struct pt_regs *regs) {unsigned long offs = addrmode_regoffs[p->ainsn.indirect.reg]; -int3_emulate_call (regs,regs_get_register (regs, offs)); +int3_emulate_push (regs, regs->ip -INT3_INSN_SIZE + p->ainsn.size); +int3_emulate_jmp (regs,regs_get_register (regs, offs)); }NOKPROBE_SYMBOL (kprobe_emulate_call_indirect);
crypto/xts.c +15 -8
@@ -28,7 +28,7 @@ struct xts_tfm_ctx {struct xts_instance_ctx {struct crypto_skcipher_spawn spawn; -char name[CRYPTO_MAX_ALG_NAME ]; +struct crypto_cipher_spawn tweak_spawn; };struct xts_request_ctx {
@@ -306,7 +306,7 @@ static int xts_init_tfm(struct crypto_skcipher *tfm) ctx->child = child; - tweak =crypto_alloc_cipher (ictx->name,0 ,0 ); + tweak =crypto_spawn_cipher (&ictx->tweak_spawn);if (IS_ERR (tweak)) {crypto_free_skcipher (ctx->child);return PTR_ERR (tweak);
@@ -333,11 +333,13 @@ static void xts_free_instance(struct skcipher_instance *inst)struct xts_instance_ctx *ictx =skcipher_instance_ctx (inst);crypto_drop_skcipher (&ictx->spawn); +crypto_drop_cipher (&ictx->tweak_spawn);kfree (inst); }static int xts_create (struct crypto_template *tmpl,struct rtattr **tb) { +char name[CRYPTO_MAX_ALG_NAME ];struct skcipher_instance *inst;struct xts_instance_ctx *ctx;struct skcipher_alg *alg;
@@ -363,13 +365,13 @@ static int xts_create(struct crypto_template *tmpl, struct rtattr **tb) cipher_name, 0, mask);if (err == -ENOENT ) { err = -ENAMETOOLONG ; -if (snprintf (ctx->name,CRYPTO_MAX_ALG_NAME ,"ecb(%s)" , +if (snprintf (name,CRYPTO_MAX_ALG_NAME ,"ecb(%s)" , cipher_name) >=CRYPTO_MAX_ALG_NAME ) goto err_free_inst; err =crypto_grab_skcipher (&ctx->spawn,skcipher_crypto_instance (inst), - ctx->name,0 , mask); + name,0 , mask); }if (err)
@@ -398,23 +400,28 @@ static int xts_create(struct crypto_template *tmpl, struct rtattr **tb)if (!strncmp (cipher_name,"ecb(" ,4 )) {int len; - len =strscpy (ctx->name, cipher_name +4 ,sizeof (ctx->name)); + len =strscpy (name, cipher_name +4 ,sizeof (name));if (len <2 ) goto err_free_inst; -if (ctx->name[len -1 ] !=')' ) +if (name[len -1 ] !=')' ) goto err_free_inst; - ctx->name[len -1 ] =0 ; + name[len -1 ] =0 ;if (snprintf (inst->alg.base.cra_name,CRYPTO_MAX_ALG_NAME , -"xts(%s)" , ctx->name) >=CRYPTO_MAX_ALG_NAME ) { +"xts(%s)" , name) >=CRYPTO_MAX_ALG_NAME ) { err = -ENAMETOOLONG ; goto err_free_inst; } }else goto err_free_inst; + err =crypto_grab_cipher (&ctx->tweak_spawn, +skcipher_crypto_instance (inst), name,0 , mask); +if (err) + goto err_free_inst; + inst->alg.base.cra_priority = alg->base.cra_priority; inst->alg.base.cra_blocksize =XTS_BLOCK_SIZE ; inst->alg.base.cra_alignmask = alg->base.cra_alignmask |
drivers/accel/qaic/mhi_controller.c +14 -1
@@ -404,8 +404,21 @@ static struct mhi_controller_config aic100_config = {static int mhi_read_reg (struct mhi_controller *mhi_cntrl,void __iomem *addr,u32 *out) { -u32 tmp =readl_relaxed (addr); +u32 tmp; +/* +* SOC_HW_VERSION quirk +* The SOC_HW_VERSION register (offset 0x224) is not reliable and +* may contain uninitialized values, including 0xFFFFFFFF. This could +* cause a false positive link down error. Instead, intercept any +* reads and provide the correct value of the register. +*/ +if (addr - mhi_cntrl->regs ==0x224 ) { + *out =0x60110200 ; +return 0 ; + } + + tmp =readl_relaxed (addr);if (tmp ==U32_MAX )return -EIO ;
drivers/accel/qaic/qaic_data.c +2 -4
@@ -766,7 +766,6 @@ struct drm_gem_object *qaic_gem_prime_import(struct drm_device *dev, struct dma_struct dma_buf_attachment *attach;struct drm_gem_object *obj;struct qaic_bo *bo; -size_t size;int ret; bo =qaic_alloc_init_bo ();
@@ -784,13 +783,12 @@ struct drm_gem_object *qaic_gem_prime_import(struct drm_device *dev, struct dma_ goto attach_fail; } - size =PAGE_ALIGN (attach->dmabuf->size); -if (size ==0 ) { +if (!attach->dmabuf->size) { ret = -EINVAL ; goto size_align_fail; } -drm_gem_private_object_init (dev, obj, size); +drm_gem_private_object_init (dev, obj, attach->dmabuf->size);/* * skipping dma_buf_map_attachment() as we do not know the direction * just yet. Once the direction is known in the subsequent IOCTL to
drivers/acpi/thermal.c +2 -2
@@ -778,9 +778,9 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)static void acpi_thermal_unregister_thermal_zone (struct acpi_thermal *tz) { +thermal_zone_device_disable (tz->thermal_zone);acpi_thermal_zone_sysfs_remove (tz);thermal_zone_device_unregister (tz->thermal_zone); -kfree (tz->trip_table); tz->thermal_zone =NULL ; }
@@ -985,7 +985,7 @@ static void acpi_thermal_remove(struct acpi_device *device)flush_workqueue (acpi_thermal_pm_queue);acpi_thermal_unregister_thermal_zone (tz); - +kfree (tz->trip_table);kfree (tz); }
drivers/clk/clk-si521xx.c +2 -2
@@ -282,7 +282,7 @@ static int si521xx_probe(struct i2c_client *client)const u16 chip_info = (u16 )(uintptr_t )device_get_match_data (&client->dev);const struct clk_parent_data clk_parent_data = { .index =0 };const u8 data[3 ] = {SI521XX_REG_BC ,1 ,1 }; -unsigned char name[6 ] ="DIFF0" ; +unsigned char name[16 ] ="DIFF0" ;struct clk_init_data init = {};struct si521xx *si;int i, ret;
@@ -316,7 +316,7 @@ static int si521xx_probe(struct i2c_client *client)/* Register clock */ for (i =0 ; i <hweight16 (chip_info); i++) {memset (&init,0 ,sizeof (init)); -snprintf (name,6 ,"DIFF%d" , i); +snprintf (name,sizeof (name),"DIFF%d" , i); init.name = name; init.ops = &si521xx_diff_clk_ops; init.parent_data = &clk_parent_data;
drivers/clk/rockchip/clk-rk3128.c +8 -14
@@ -138,7 +138,7 @@ PNAME(mux_pll_src_5plls_p) = { "cpll", "gpll", "gpll_div2", "gpll_div3", "usb480PNAME (mux_pll_src_4plls_p) = {"cpll" ,"gpll" ,"gpll_div2" ,"usb480m" };PNAME (mux_pll_src_3plls_p) = {"cpll" ,"gpll" ,"gpll_div2" }; -PNAME (mux_aclk_peri_src_p) = {"gpll_peri" ,"cpll_peri" ,"gpll_div2_peri" ,"gpll_div3_peri" }; +PNAME (mux_clk_peri_src_p) = {"gpll" ,"cpll" ,"gpll_div2" ,"gpll_div3" };PNAME (mux_mmc_src_p) = {"cpll" ,"gpll" ,"gpll_div2" ,"xin24m" };PNAME (mux_clk_cif_out_src_p) = {"clk_cif_src" ,"xin24m" };PNAME (mux_sclk_vop_src_p) = {"cpll" ,"gpll" ,"gpll_div2" ,"gpll_div3" };
@@ -275,23 +275,17 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = { RK2928_CLKGATE_CON(0), 11, GFLAGS),/* PD_PERI */ -GATE (0 ,"gpll_peri" ,"gpll" ,CLK_IGNORE_UNUSED , +COMPOSITE (0 ,"clk_peri_src" , mux_clk_peri_src_p,0 , +RK2928_CLKSEL_CON (10 ),14 ,2 ,MFLAGS ,0 ,5 ,DFLAGS ,RK2928_CLKGATE_CON (2 ),0 ,GFLAGS ), -GATE (0 ,"cpll_peri" ,"cpll" ,CLK_IGNORE_UNUSED , -RK2928_CLKGATE_CON (2 ),0 ,GFLAGS ), -GATE (0 ,"gpll_div2_peri" ,"gpll_div2" ,CLK_IGNORE_UNUSED , -RK2928_CLKGATE_CON (2 ),0 ,GFLAGS ), -GATE (0 ,"gpll_div3_peri" ,"gpll_div3" ,CLK_IGNORE_UNUSED , -RK2928_CLKGATE_CON (2 ),0 ,GFLAGS ), -COMPOSITE_NOGATE (0 ,"aclk_peri_src" , mux_aclk_peri_src_p,0 , -RK2928_CLKSEL_CON (10 ),14 ,2 ,MFLAGS ,0 ,5 ,DFLAGS ), -COMPOSITE_NOMUX (PCLK_PERI ,"pclk_peri" ,"aclk_peri_src" ,0 , + +COMPOSITE_NOMUX (PCLK_PERI ,"pclk_peri" ,"clk_peri_src" ,0 ,RK2928_CLKSEL_CON (10 ),12 ,2 ,DFLAGS |CLK_DIVIDER_POWER_OF_TWO ,RK2928_CLKGATE_CON (2 ),3 ,GFLAGS ), -COMPOSITE_NOMUX (HCLK_PERI ,"hclk_peri" ,"aclk_peri_src" ,0 , +COMPOSITE_NOMUX (HCLK_PERI ,"hclk_peri" ,"clk_peri_src" ,0 ,RK2928_CLKSEL_CON (10 ),8 ,2 ,DFLAGS |CLK_DIVIDER_POWER_OF_TWO ,RK2928_CLKGATE_CON (2 ),2 ,GFLAGS ), -GATE (ACLK_PERI ,"aclk_peri" ,"aclk_peri_src" ,0 , +GATE (ACLK_PERI ,"aclk_peri" ,"clk_peri_src" ,0 ,RK2928_CLKGATE_CON (2 ),1 ,GFLAGS ), GATE(SCLK_TIMER0, "sclk_timer0", "xin24m", 0,
@@ -316,7 +310,7 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = {GATE (SCLK_MIPI_24M ,"clk_mipi_24m" ,"xin24m" ,CLK_IGNORE_UNUSED ,RK2928_CLKGATE_CON (2 ),15 ,GFLAGS ), -COMPOSITE (SCLK_SDMMC ,"sclk_sdmmc0" , mux_mmc_src_p,0 , +COMPOSITE (SCLK_SDMMC ,"sclk_sdmmc" , mux_mmc_src_p,0 ,RK2928_CLKSEL_CON (11 ),6 ,2 ,MFLAGS ,0 ,6 ,DFLAGS , RK2928_CLKGATE_CON(2), 11, GFLAGS),
drivers/crypto/hisilicon/qm.c +40 -65
157 lines not on this page · raw message
drivers/crypto/intel/qat/qat_common/adf_aer.c +2 -1
@@ -92,7 +92,8 @@ static void adf_device_reset_worker(struct work_struct *work)if (adf_dev_restart (accel_dev)) {/* The device hanged and we can't restart it so stop here */ dev_err (&GET_DEV (accel_dev),"Restart device failed\n" ); -kfree (reset_data); +if (reset_data->mode ==ADF_DEV_RESET_ASYNC ) +kfree (reset_data);WARN (1 ,"QAT: device restart failed. Device is unusable\n" );return ; }
drivers/cxl/core/hdm.c +6 -3
@@ -634,10 +634,11 @@ static int cxl_decoder_commit(struct cxl_decoder *cxld)if (cxld->flags &CXL_DECODER_F_ENABLE )return 0 ; -if (port->commit_end +1 != id) { +if (cxl_num_decoders_committed (port) != id) {dev_dbg (&port->dev,"%s: out of order commit, expected decoder%d.%d\n" , -dev_name (&cxld->dev), port->id, port->commit_end +1 ); +dev_name (&cxld->dev), port->id, +cxl_num_decoders_committed (port));return -EBUSY ; }
@@ -847,7 +848,9 @@ static int init_hdm_decoder(struct cxl_port *port, struct cxl_decoder *cxld, cxld->target_type =CXL_DECODER_HOSTONLYMEM ; else cxld->target_type = CXL_DECODER_DEVMEM; -if (cxld->id != port->commit_end +1 ) { + +guard (rwsem_write)(&cxl_region_rwsem); +if (cxld->id !=cxl_num_decoders_committed (port)) {dev_warn (&port->dev,"decoder%d.%d: Committed out of order\n" , port->id, cxld->id);
drivers/cxl/core/mbox.c +1 -1
@@ -1200,7 +1200,7 @@ int cxl_mem_sanitize(struct cxl_memdev *cxlmd, u16 cmd)* Require an endpoint to be safe otherwise the driver can not * be sure that the device is unmapped. */ -if (endpoint && endpoint->commit_end ==-1 ) +if (endpoint &&cxl_num_decoders_committed (endpoint) ==0 ) rc =__cxl_mem_sanitize (mds, cmd);else rc = -EBUSY ;
drivers/cxl/core/memdev.c +26 -5
@@ -227,11 +227,17 @@ int cxl_trigger_poison_list(struct cxl_memdev *cxlmd)if (!port || !is_cxl_endpoint (port))return -EINVAL ; - rc =down_read_interruptible (&cxl_dpa_rwsem); + rc =down_read_interruptible (&cxl_region_rwsem);if (rc)return rc; -if (port->commit_end ==-1 ) { + rc =down_read_interruptible (&cxl_dpa_rwsem); +if (rc) { +up_read (&cxl_region_rwsem); +return rc; + } + +if (cxl_num_decoders_committed (port) ==0 ) {/* No regions mapped to this memdev */ rc =cxl_get_poison_by_memdev (cxlmd); }else {
@@ -239,6 +245,7 @@ int cxl_trigger_poison_list(struct cxl_memdev *cxlmd) rc =cxl_get_poison_by_endpoint (port); }up_read (&cxl_dpa_rwsem); +up_read (&cxl_region_rwsem);return rc; }
@@ -282,7 +289,7 @@ static struct cxl_region *cxl_dpa_to_region(struct cxl_memdev *cxlmd, u64 dpa) .dpa = dpa, }; port = cxlmd->endpoint; -if (port &&is_cxl_endpoint (port) && port->commit_end !=-1 ) +if (port &&is_cxl_endpoint (port) &&cxl_num_decoders_committed (port))device_for_each_child (&port->dev, &ctx, __cxl_dpa_to_region);return ctx.cxlr;
@@ -324,10 +331,16 @@ int cxl_inject_poison(struct cxl_memdev *cxlmd, u64 dpa)if (!IS_ENABLED (CONFIG_DEBUG_FS ))return 0 ; - rc =down_read_interruptible (&cxl_dpa_rwsem); + rc =down_read_interruptible (&cxl_region_rwsem);if (rc)return rc; + rc =down_read_interruptible (&cxl_dpa_rwsem); +if (rc) { +up_read (&cxl_region_rwsem); +return rc; + } + rc =cxl_validate_poison_dpa (cxlmd, dpa);if (rc) goto out;
@@ -355,6 +368,7 @@ int cxl_inject_poison(struct cxl_memdev *cxlmd, u64 dpa)trace_cxl_poison (cxlmd, cxlr, &record,0 ,0 ,CXL_POISON_TRACE_INJECT ); out:up_read (&cxl_dpa_rwsem); +up_read (&cxl_region_rwsem);return rc; }
@@ -372,10 +386,16 @@ int cxl_clear_poison(struct cxl_memdev *cxlmd, u64 dpa)if (!IS_ENABLED (CONFIG_DEBUG_FS ))return 0 ; - rc =down_read_interruptible (&cxl_dpa_rwsem); + rc =down_read_interruptible (&cxl_region_rwsem);if (rc)return rc; + rc =down_read_interruptible (&cxl_dpa_rwsem); +if (rc) { +up_read (&cxl_region_rwsem); +return rc; + } + rc =cxl_validate_poison_dpa (cxlmd, dpa);if (rc) goto out;
@@ -412,6 +432,7 @@ int cxl_clear_poison(struct cxl_memdev *cxlmd, u64 dpa)trace_cxl_poison (cxlmd, cxlr, &record,0 ,0 ,CXL_POISON_TRACE_CLEAR ); out:up_read (&cxl_dpa_rwsem); +up_read (&cxl_region_rwsem);return rc; }
drivers/cxl/core/pmu.c +1 -1
@@ -23,7 +23,7 @@ const struct device_type cxl_pmu_type = {static void remove_dev (void *dev) { -device_del (dev); +device_unregister (dev); } int devm_cxl_pmu_add(struct device *parent, struct cxl_pmu_regs *regs,
drivers/cxl/core/port.c +7 -0
@@ -37,6 +37,13 @@ DECLARE_RWSEM(cxl_region_rwsem);static DEFINE_IDA (cxl_port_ida);static DEFINE_XARRAY (cxl_root_buses); +int cxl_num_decoders_committed (struct cxl_port *port) +{ +lockdep_assert_held (&cxl_region_rwsem); + +return port->commit_end +1 ; +} +static ssize_t devtype_show (struct device *dev,struct device_attribute *attr,char *buf) {
drivers/cxl/core/region.c +0 -5
@@ -2467,10 +2467,6 @@ int cxl_get_poison_by_endpoint(struct cxl_port *port)struct cxl_poison_context ctx;int rc =0 ; - rc =down_read_interruptible (&cxl_region_rwsem); -if (rc) -return rc; - ctx = (struct cxl_poison_context ) { .port = port };
@@ -2480,7 +2476,6 @@ int cxl_get_poison_by_endpoint(struct cxl_port *port) rc =cxl_get_poison_unmapped (to_cxl_memdev (port->uport_dev), &ctx); -up_read (&cxl_region_rwsem);return rc; }
drivers/cxl/cxl.h +1 -0
@@ -679,6 +679,7 @@ static inline bool is_cxl_root(struct cxl_port *port)return port->uport_dev == port->dev.parent; } +int cxl_num_decoders_committed (struct cxl_port *port);bool is_cxl_port (const struct device *dev);struct cxl_port *to_cxl_port (const struct device *dev);struct pci_bus ;
drivers/dma/fsl-edma-main.c +8 -4
@@ -400,9 +400,8 @@ static int fsl_edma3_attach_pd(struct platform_device *pdev, struct fsl_edma_eng link =device_link_add (dev, pd_chan,DL_FLAG_STATELESS |DL_FLAG_PM_RUNTIME |DL_FLAG_RPM_ACTIVE ); -if (IS_ERR (link)) { -dev_err (dev,"Failed to add device_link to %d: %ld\n" , i, -PTR_ERR (link)); +if (!link) { +dev_err (dev,"Failed to add device_link to %d\n" , i);return -EINVAL ; }
@@ -640,6 +639,8 @@ static int fsl_edma_suspend_late(struct device *dev)for (i =0 ; i < fsl_edma->n_chans; i++) { fsl_chan = &fsl_edma->chans[i]; +if (fsl_edma->chan_masked &BIT (i)) +continue ;spin_lock_irqsave (&fsl_chan->vchan.lock, flags);/* Make sure chan is idle or will force disable. */ if (unlikely (!fsl_chan->idle)) {
@@ -664,13 +665,16 @@ static int fsl_edma_resume_early(struct device *dev)for (i =0 ; i < fsl_edma->n_chans; i++) { fsl_chan = &fsl_edma->chans[i]; +if (fsl_edma->chan_masked &BIT (i)) +continue ; fsl_chan->pm_state =RUNNING ;edma_write_tcdreg (fsl_chan,0 , csr);if (fsl_chan->slave_id !=0 )fsl_edma_chan_mux (fsl_chan, fsl_chan->slave_id, true); } -edma_writel (fsl_edma,EDMA_CR_ERGA |EDMA_CR_ERCA , regs->cr); +if (!(fsl_edma->drvdata->flags &FSL_EDMA_DRV_SPLIT_REG )) +edma_writel (fsl_edma,EDMA_CR_ERGA |EDMA_CR_ERCA , regs->cr);return 0 ; }
drivers/dma/idxd/submit.c +7 -7
@@ -182,13 +182,6 @@ int idxd_submit_desc(struct idxd_wq *wq, struct idxd_desc *desc) portal =idxd_wq_portal_addr (wq); -/* -* The wmb() flushes writes to coherent DMA data before -* possibly triggering a DMA read. The wmb() is necessary -* even on UP because the recipient is a device. -*/ -wmb (); -/* * Pending the descriptor to the lockless list for the irq_entry * that we designated the descriptor to.
@@ -199,6 +192,13 @@ int idxd_submit_desc(struct idxd_wq *wq, struct idxd_desc *desc)llist_add (&desc->llnode, &ie->pending_llist); } +/* +* The wmb() flushes writes to coherent DMA data before +* possibly triggering a DMA read. The wmb() is necessary +* even on UP because the recipient is a device. +*/ +wmb (); +if (wq_dedicated (wq)) {iosubmit_cmds512 (portal, desc->hw,1 ); }else {
drivers/dma/ti/k3-psil-am62.c +6 -6
@@ -74,7 +74,9 @@ static struct psil_ep am62_src_ep_map[] = {PSIL_SAUL (0x7505 ,21 ,35 ,8 ,36 ,0 ),PSIL_SAUL (0x7506 ,22 ,43 ,8 ,43 ,0 ),PSIL_SAUL (0x7507 ,23 ,43 ,8 ,44 ,0 ), -/* PDMA_MAIN0 - SPI0-3 */ +/* PDMA_MAIN0 - SPI0-2 */ +PSIL_PDMA_XY_PKT (0x4300 ), +PSIL_PDMA_XY_PKT (0x4301 ),PSIL_PDMA_XY_PKT (0x4302 ),PSIL_PDMA_XY_PKT (0x4303 ), PSIL_PDMA_XY_PKT(0x4304),
@@ -85,8 +87,6 @@ static struct psil_ep am62_src_ep_map[] = {PSIL_PDMA_XY_PKT (0x4309 ),PSIL_PDMA_XY_PKT (0x430a ),PSIL_PDMA_XY_PKT (0x430b ), -PSIL_PDMA_XY_PKT (0x430c ), -PSIL_PDMA_XY_PKT (0x430d ),/* PDMA_MAIN1 - UART0-6 */ PSIL_PDMA_XY_PKT (0x4400 ), PSIL_PDMA_XY_PKT(0x4401),
@@ -141,7 +141,9 @@ static struct psil_ep am62_dst_ep_map[] = {/* SAUL */ PSIL_SAUL (0xf500 ,27 ,83 ,8 ,83 ,1 ),PSIL_SAUL (0xf501 ,28 ,91 ,8 ,91 ,1 ), -/* PDMA_MAIN0 - SPI0-3 */ +/* PDMA_MAIN0 - SPI0-2 */ +PSIL_PDMA_XY_PKT (0xc300 ), +PSIL_PDMA_XY_PKT (0xc301 ),PSIL_PDMA_XY_PKT (0xc302 ),PSIL_PDMA_XY_PKT (0xc303 ), PSIL_PDMA_XY_PKT(0xc304),
@@ -152,8 +154,6 @@ static struct psil_ep am62_dst_ep_map[] = {PSIL_PDMA_XY_PKT (0xc309 ),PSIL_PDMA_XY_PKT (0xc30a ),PSIL_PDMA_XY_PKT (0xc30b ), -PSIL_PDMA_XY_PKT (0xc30c ), -PSIL_PDMA_XY_PKT (0xc30d ),/* PDMA_MAIN1 - UART0-6 */ PSIL_PDMA_XY_PKT (0xc400 ), PSIL_PDMA_XY_PKT(0xc401),
drivers/dma/ti/k3-psil-am62a.c +6 -6
@@ -84,7 +84,9 @@ static struct psil_ep am62a_src_ep_map[] = {PSIL_SAUL (0x7505 ,21 ,35 ,8 ,36 ,0 ),PSIL_SAUL (0x7506 ,22 ,43 ,8 ,43 ,0 ),PSIL_SAUL (0x7507 ,23 ,43 ,8 ,44 ,0 ), -/* PDMA_MAIN0 - SPI0-3 */ +/* PDMA_MAIN0 - SPI0-2 */ +PSIL_PDMA_XY_PKT (0x4300 ), +PSIL_PDMA_XY_PKT (0x4301 ),PSIL_PDMA_XY_PKT (0x4302 ),PSIL_PDMA_XY_PKT (0x4303 ), PSIL_PDMA_XY_PKT(0x4304),
@@ -95,8 +97,6 @@ static struct psil_ep am62a_src_ep_map[] = {PSIL_PDMA_XY_PKT (0x4309 ),PSIL_PDMA_XY_PKT (0x430a ),PSIL_PDMA_XY_PKT (0x430b ), -PSIL_PDMA_XY_PKT (0x430c ), -PSIL_PDMA_XY_PKT (0x430d ),/* PDMA_MAIN1 - UART0-6 */ PSIL_PDMA_XY_PKT (0x4400 ), PSIL_PDMA_XY_PKT(0x4401),
@@ -151,7 +151,9 @@ static struct psil_ep am62a_dst_ep_map[] = {/* SAUL */ PSIL_SAUL (0xf500 ,27 ,83 ,8 ,83 ,1 ),PSIL_SAUL (0xf501 ,28 ,91 ,8 ,91 ,1 ), -/* PDMA_MAIN0 - SPI0-3 */ +/* PDMA_MAIN0 - SPI0-2 */ +PSIL_PDMA_XY_PKT (0xc300 ), +PSIL_PDMA_XY_PKT (0xc301 ),PSIL_PDMA_XY_PKT (0xc302 ),PSIL_PDMA_XY_PKT (0xc303 ), PSIL_PDMA_XY_PKT(0xc304),
@@ -162,8 +164,6 @@ static struct psil_ep am62a_dst_ep_map[] = {PSIL_PDMA_XY_PKT (0xc309 ),PSIL_PDMA_XY_PKT (0xc30a ),PSIL_PDMA_XY_PKT (0xc30b ), -PSIL_PDMA_XY_PKT (0xc30c ), -PSIL_PDMA_XY_PKT (0xc30d ),/* PDMA_MAIN1 - UART0-6 */ PSIL_PDMA_XY_PKT (0xc400 ), PSIL_PDMA_XY_PKT(0xc401),
drivers/firewire/ohci.c +51 -0
69 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +2 -9
@@ -1896,15 +1896,8 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) adev->firmware.gpu_info_fw =NULL ; -if (adev->mman.discovery_bin) { -/* -* FIXME: The bounding box is still needed by Navi12, so -* temporarily read it from gpu_info firmware. Should be dropped -* when DAL no longer needs it. -*/ -if (adev->asic_type !=CHIP_NAVI12 ) -return 0 ; - } +if (adev->mman.discovery_bin) +return 0 ;switch (adev->asic_type) {default :
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +6 -5
@@ -6139,8 +6139,9 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,if (stream->signal ==SIGNAL_TYPE_HDMI_TYPE_A )mod_build_hf_vsif_infopacket (stream, &stream->vsp_infopacket); - -if (stream->link->psr_settings.psr_feature_enabled || stream->link->replay_settings.replay_feature_enabled) { +else if (stream->signal ==SIGNAL_TYPE_DISPLAY_PORT || + stream->signal ==SIGNAL_TYPE_DISPLAY_PORT_MST || + stream->signal ==SIGNAL_TYPE_EDP ) {// // should decide stream support vsc sdp colorimetry capability // before building vsc info packet
@@ -6156,8 +6157,9 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,if (stream->out_transfer_func->tf ==TRANSFER_FUNCTION_GAMMA22 ) tf =TRANSFER_FUNC_GAMMA_22 ;mod_build_vsc_infopacket (stream, &stream->vsc_infopacket, stream->output_color_space, tf); - aconnector->psr_skip_count =AMDGPU_DM_PSR_ENTRY_DELAY ; +if (stream->link->psr_settings.psr_feature_enabled) + aconnector->psr_skip_count =AMDGPU_DM_PSR_ENTRY_DELAY ; } finish:dc_sink_release (sink);
@@ -6868,8 +6870,7 @@ static int dm_encoder_helper_atomic_check(struct drm_encoder *encoder,if (IS_ERR (mst_state))return PTR_ERR (mst_state); -if (!mst_state->pbn_div) - mst_state->pbn_div =dm_mst_get_pbn_divider (aconnector->mst_root->dc_link); + mst_state->pbn_div =dm_mst_get_pbn_divider (aconnector->mst_root->dc_link);if (!state->duplicated) {int max_bpc = conn_state->max_requested_bpc;
drivers/gpu/drm/amd/display/dc/dml/Makefile +4 -0
@@ -61,8 +61,12 @@ endif endif ifneq ($(CONFIG_FRAME_WARN),0) +ifeq ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) +frame_warn_flag := -Wframe-larger-than=3072 +else frame_warn_flag := -Wframe-larger-than=2048 endif +endif CFLAGS_$(AMDDALPATH)/dc/dml/display_mode_lib.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/display_mode_vba.o := $(dml_ccflags)
drivers/gpu/drm/amd/display/dc/dml/dc_features.h +1 -1
@@ -36,7 +36,7 @@* Define the maximum amount of states supported by the ASIC. Every ASIC has a * specific number of states; this macro defines the maximum number of states. */ -#define DC__VOLTAGE_STATES 20 +#define DC__VOLTAGE_STATES 40#define DC__NUM_DPP__4 1#define DC__NUM_DPP__0_PRESENT 1#define DC__NUM_DPP__1_PRESENT 1
drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c +109 -1
116 lines not on this page · raw message
drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c +8 -5
@@ -147,12 +147,15 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream, }/* VSC packet set to 4 for PSR-SU, or 2 for PSR1 */ -if (stream->link->psr_settings.psr_version ==DC_PSR_VERSION_SU_1 ) - vsc_packet_revision = vsc_packet_rev4; -else if (stream->link->replay_settings.config.replay_supported) +if (stream->link->psr_settings.psr_feature_enabled) { +if (stream->link->psr_settings.psr_version ==DC_PSR_VERSION_SU_1 ) + vsc_packet_revision = vsc_packet_rev4; +else if (stream->link->psr_settings.psr_version ==DC_PSR_VERSION_1 ) + vsc_packet_revision = vsc_packet_rev2; + } + +if (stream->link->replay_settings.config.replay_supported) vsc_packet_revision = vsc_packet_rev4; -else if (stream->link->psr_settings.psr_version ==DC_PSR_VERSION_1 ) - vsc_packet_revision = vsc_packet_rev2;/* Update to revision 5 for extended colorimetry support */ if (stream->use_vsc_sdp_for_colorimetry)
drivers/gpu/drm/bridge/parade-ps8640.c +4 -3
@@ -210,7 +210,7 @@ static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,struct ps8640 *ps_bridge =aux_to_ps8640 (aux);struct regmap *map = ps_bridge->regmap[PAGE0_DP_CNTL ];struct device *dev = &ps_bridge->page[PAGE0_DP_CNTL ]->dev; -unsigned int len = msg->size; +size_t len = msg->size;unsigned int data;unsigned int base;int ret;
@@ -330,11 +330,12 @@ static ssize_t ps8640_aux_transfer_msg(struct drm_dp_aux *aux,return ret; } - buf[i] = data; +if (i < msg->size) + buf[i] = data; } } -return len; +return min (len, msg->size); } static ssize_t ps8640_aux_transfer(struct drm_dp_aux *aux,
drivers/gpu/drm/bridge/ti-sn65dsi86.c +3 -1
@@ -527,6 +527,7 @@ static ssize_t ti_sn_aux_transfer(struct drm_dp_aux *aux,u32 request_val =AUX_CMD_REQ (msg->request);u8 *buf = msg->buffer;unsigned int len = msg->size; +unsigned int short_len;unsigned int val;int ret;u8 addr_len[SN_AUX_LENGTH_REG +1 -SN_AUX_ADDR_19_16_REG ];
@@ -600,7 +601,8 @@ static ssize_t ti_sn_aux_transfer(struct drm_dp_aux *aux, }if (val &AUX_IRQ_STATUS_AUX_SHORT ) { - ret =regmap_read (pdata->regmap,SN_AUX_LENGTH_REG , &len); + ret =regmap_read (pdata->regmap,SN_AUX_LENGTH_REG , &short_len); + len =min (len, short_len);if (ret) goto exit; }else if (val &AUX_IRQ_STATUS_NAT_I2C_FAIL ) {
drivers/gpu/drm/i915/display/intel_display.c +2 -1
@@ -6670,10 +6670,11 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state)if (!intel_crtc_needs_modeset (new_crtc_state))continue ; +intel_pre_plane_update (state, crtc); +if (!old_crtc_state->hw.active)continue ; -intel_pre_plane_update (state, crtc);intel_crtc_disable_planes (state, crtc); }
drivers/gpu/drm/i915/display/intel_dp.c +1 -1
@@ -3987,7 +3987,7 @@ static void intel_dp_process_phy_request(struct intel_dp *intel_dp, intel_dp->train_set, crtc_state->lane_count);drm_dp_set_phy_test_pattern (&intel_dp->aux, data, - link_status[DP_DPCD_REV ]); + intel_dp->dpcd[DP_DPCD_REV ]); }static u8 intel_dp_autotest_phy_pattern (struct intel_dp *intel_dp)
drivers/gpu/drm/i915/i915_perf.c +34 -5
@@ -785,10 +785,6 @@ static int gen8_append_oa_reports(struct i915_perf_stream *stream,* The reason field includes flags identifying what * triggered this specific report (mostly timer * triggered or e.g. due to a context switch). -* -* In MMIO triggered reports, some platforms do not set the -* reason bit in this field and it is valid to have a reason -* field of zero. */ reason =oa_report_reason (stream, report); ctx_id =oa_context_id (stream, report32);
@@ -800,8 +796,41 @@ static int gen8_append_oa_reports(struct i915_perf_stream *stream,* * Note: that we don't clear the valid_ctx_bit so userspace can * understand that the ID has been squashed by the kernel. +* +* Update: +* +* On XEHP platforms the behavior of context id valid bit has +* changed compared to prior platforms. To describe this, we +* define a few terms: +* +* context-switch-report: This is a report with the reason type +* being context-switch. It is generated when a context switches +* out. +* +* context-valid-bit: A bit that is set in the report ID field +* to indicate that a valid context has been loaded. +* +* gpu-idle: A condition characterized by a +* context-switch-report with context-valid-bit set to 0. +* +* On prior platforms, context-id-valid bit is set to 0 only +* when GPU goes idle. In all other reports, it is set to 1. +* +* On XEHP platforms, context-valid-bit is set to 1 in a context +* switch report if a new context switched in. For all other +* reports it is set to 0. +* +* This change in behavior causes an issue with MMIO triggered +* reports. MMIO triggered reports have the markers in the +* context ID field and the context-valid-bit is 0. The logic +* below to squash the context ID would render the report +* useless since the user will not be able to find it in the OA +* buffer. Since MMIO triggered reports exist only on XEHP, +* we should avoid squashing these for XEHP platforms. */ -if (oa_report_ctx_invalid (stream, report)) { + +if (oa_report_ctx_invalid (stream, report) && +GRAPHICS_VER_FULL (stream->engine->i915) <IP_VER (12 ,50 )) { ctx_id =INVALID_CTX_ID ;oa_context_id_squash (stream, report32); }
drivers/gpu/drm/mgag200/mgag200_drv.h +5 -0
@@ -392,6 +392,11 @@ void mgag200_primary_plane_helper_atomic_disable(struct drm_plane *plane, .destroy = drm_plane_cleanup, \ DRM_GEM_SHADOW_PLANE_FUNCS +void mgag200_crtc_set_gamma_linear (struct mga_device *mdev,const struct drm_format_info *format); +void mgag200_crtc_set_gamma (struct mga_device *mdev, +const struct drm_format_info *format, +struct drm_color_lut *lut); +enum drm_mode_status mgag200_crtc_helper_mode_valid (struct drm_crtc *crtc,const struct drm_display_mode *mode);int mgag200_crtc_helper_atomic_check (struct drm_crtc *crtc,struct drm_atomic_state *new_state);
drivers/gpu/drm/mgag200/mgag200_g200er.c +5 -0
@@ -202,6 +202,11 @@ static void mgag200_g200er_crtc_helper_atomic_enable(struct drm_crtc *crtc,mgag200_g200er_reset_tagfifo (mdev); +if (crtc_state->gamma_lut) +mgag200_crtc_set_gamma (mdev, format, crtc_state->gamma_lut->data); +else +mgag200_crtc_set_gamma_linear (mdev, format); +mgag200_enable_display (mdev);if (funcs->enable_vidrst)
drivers/gpu/drm/mgag200/mgag200_g200ev.c +5 -0
@@ -203,6 +203,11 @@ static void mgag200_g200ev_crtc_helper_atomic_enable(struct drm_crtc *crtc,mgag200_g200ev_set_hiprilvl (mdev); +if (crtc_state->gamma_lut) +mgag200_crtc_set_gamma (mdev, format, crtc_state->gamma_lut->data); +else +mgag200_crtc_set_gamma_linear (mdev, format); +mgag200_enable_display (mdev);if (funcs->enable_vidrst)
drivers/gpu/drm/mgag200/mgag200_g200se.c +5 -0
@@ -334,6 +334,11 @@ static void mgag200_g200se_crtc_helper_atomic_enable(struct drm_crtc *crtc,mgag200_g200se_set_hiprilvl (mdev, adjusted_mode, format); +if (crtc_state->gamma_lut) +mgag200_crtc_set_gamma (mdev, format, crtc_state->gamma_lut->data); +else +mgag200_crtc_set_gamma_linear (mdev, format); +mgag200_enable_display (mdev);if (funcs->enable_vidrst)
drivers/gpu/drm/mgag200/mgag200_mode.c +5 -5
@@ -28,8 +28,8 @@* This file contains setup code for the CRTC. */ -static void mgag200_crtc_set_gamma_linear (struct mga_device *mdev, -const struct drm_format_info *format) +void mgag200_crtc_set_gamma_linear (struct mga_device *mdev, +const struct drm_format_info *format) {int i;
@@ -65,9 +65,9 @@ static void mgag200_crtc_set_gamma_linear(struct mga_device *mdev, } } -static void mgag200_crtc_set_gamma (struct mga_device *mdev, -const struct drm_format_info *format, -struct drm_color_lut *lut) +void mgag200_crtc_set_gamma (struct mga_device *mdev, +const struct drm_format_info *format, +struct drm_color_lut *lut) {int i;
drivers/i2c/i2c-core.h +3 -1
@@ -3,6 +3,7 @@* i2c-core.h - interfaces internal to the I2C framework */ +#include <linux/kconfig.h> #include <linux/rwsem.h> struct i2c_devinfo {
@@ -29,7 +30,8 @@ int i2c_dev_irq_from_resources(const struct resource *resources,*/ static inline bool i2c_in_atomic_xfer_mode (void ) { -return system_state >SYSTEM_RUNNING && !preemptible (); +return system_state >SYSTEM_RUNNING && + (IS_ENABLED (CONFIG_PREEMPT_COUNT ) ? !preemptible () :irqs_disabled ()); }static inline int __i2c_lock_bus_helper (struct i2c_adapter *adap)
drivers/iio/imu/adis16475.c +2 -2
@@ -63,8 +63,8 @@#define ADIS16475_MAX_SCAN_DATA 20/* spi max speed in brust mode */ #define ADIS16475_BURST_MAX_SPEED 1000000 -#define ADIS16475_LSB_DEC_MASK BIT(0) -#define ADIS16475_LSB_FIR_MASK BIT(1) +#define ADIS16475_LSB_DEC_MASK 0 +#define ADIS16475_LSB_FIR_MASK 1enum {ADIS16475_SYNC_DIRECT =1 ,
drivers/infiniband/hw/mlx5/mr.c +2 -0
@@ -1026,11 +1026,13 @@ void mlx5_mkey_cache_cleanup(struct mlx5_ib_dev *dev)return ;mutex_lock (&dev->cache.rb_lock); +cancel_delayed_work (&dev->cache.remove_ent_dwork);for (node =rb_first (root); node; node =rb_next (node)) { ent = rb_entry(node, struct mlx5_cache_ent, node);xa_lock_irq (&ent->mkeys); ent->disabled = true;xa_unlock_irq (&ent->mkeys); +cancel_delayed_work (&ent->dwork); }mutex_unlock (&dev->cache.rb_lock);
drivers/iommu/intel/iommu.c +4 -1
@@ -2204,6 +2204,8 @@ __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn, attr |=DMA_FL_PTE_DIRTY ; } + domain->has_mappings = true; + pteval = ((phys_addr_t )phys_pfn <<VTD_PAGE_SHIFT ) | attr;while (nr_pages >0 ) {
@@ -4309,7 +4311,8 @@ static bool intel_iommu_enforce_cache_coherency(struct iommu_domain *domain)return true;spin_lock_irqsave (&dmar_domain->lock, flags); -if (!domain_support_force_snooping (dmar_domain)) { +if (!domain_support_force_snooping (dmar_domain) || + (!dmar_domain->use_first_level && dmar_domain->has_mappings)) {spin_unlock_irqrestore (&dmar_domain->lock, flags);return false; }
drivers/iommu/intel/iommu.h +3 -0
@@ -592,6 +592,9 @@ struct dmar_domain {* otherwise, goes through the second * level. */ + u8 has_mappings:1; /* Has mappings configured through +* iommu_map() interface. +*/ spinlock_t lock;/* Protect device tracking lists */ struct list_head devices;/* all devices' list */
drivers/media/platform/qcom/camss/camss-csid-gen2.c +13 -1
@@ -352,7 +352,19 @@ static void __csid_configure_stream(struct csid_device *csid, u8 enable, u8 vc) phy_sel = csid->phy.csiphy_id;if (enable) { -u8 dt_id = vc; +/* +* DT_ID is a two bit bitfield that is concatenated with +* the four least significant bits of the five bit VC +* bitfield to generate an internal CID value. +* +* CSID_RDI_CFG0(vc) +* DT_ID : 28:27 +* VC : 26:22 +* DT : 21:16 +* +* CID : VC 3:0 << 2 | DT_ID 1:0 +*/ +u8 dt_id = vc &0x03 ;if (tg->enabled) {/* configure one DT, infinite frames */
drivers/media/platform/qcom/camss/camss.c +26 -19
109 lines not on this page · raw message
drivers/mmc/core/block.c +4 -3
@@ -851,9 +851,10 @@ static const struct block_device_operations mmc_bdops = {static int mmc_blk_part_switch_pre (struct mmc_card *card,unsigned int part_type) { +const unsigned int mask =EXT_CSD_PART_CONFIG_ACC_RPMB ;int ret =0 ; -if (part_type ==EXT_CSD_PART_CONFIG_ACC_RPMB ) { +if ((part_type & mask) == mask) {if (card->ext_csd.cmdq_en) { ret =mmc_cmdq_disable (card);if (ret)
@@ -868,9 +869,10 @@ static int mmc_blk_part_switch_pre(struct mmc_card *card,static int mmc_blk_part_switch_post (struct mmc_card *card,unsigned int part_type) { +const unsigned int mask =EXT_CSD_PART_CONFIG_ACC_RPMB ;int ret =0 ; -if (part_type ==EXT_CSD_PART_CONFIG_ACC_RPMB ) { +if ((part_type & mask) == mask) {mmc_retune_unpause (card->host);if (card->reenable_cmdq && !card->ext_csd.cmdq_en) ret =mmc_cmdq_enable (card);
@@ -3145,4 +3147,3 @@ module_exit(mmc_blk_exit);MODULE_LICENSE ("GPL" );MODULE_DESCRIPTION ("Multimedia Card (MMC) block device driver" ); -
drivers/mmc/core/host.c +1 -0
@@ -692,6 +692,7 @@ EXPORT_SYMBOL(mmc_remove_host);*/ void mmc_free_host (struct mmc_host *host) { +cancel_delayed_work_sync (&host->detect);mmc_pwrseq_free (host);put_device (&host->class_dev); }
drivers/mmc/host/meson-mx-sdhc-mmc.c +5 -21
@@ -269,7 +269,7 @@ static int meson_mx_sdhc_enable_clks(struct mmc_host *mmc)static int meson_mx_sdhc_set_clk (struct mmc_host *mmc,struct mmc_ios *ios) {struct meson_mx_sdhc_host *host =mmc_priv (mmc); -u32 rx_clk_phase; +u32 val, rx_clk_phase;int ret;meson_mx_sdhc_disable_clks (mmc);
@@ -290,27 +290,11 @@ static int meson_mx_sdhc_set_clk(struct mmc_host *mmc, struct mmc_ios *ios) mmc->actual_clock =clk_get_rate (host->sd_clk);/* -* according to Amlogic the following latching points are -* selected with empirical values, there is no (known) formula -* to calculate these. +* Phase 90 should work in most cases. For data transmission, +* meson_mx_sdhc_execute_tuning() will find a accurate value */ -if (mmc->actual_clock >100000000 ) { - rx_clk_phase =1 ; - }else if (mmc->actual_clock >45000000 ) { -if (ios->signal_voltage ==MMC_SIGNAL_VOLTAGE_330 ) - rx_clk_phase =15 ; -else - rx_clk_phase =11 ; - }else if (mmc->actual_clock >=25000000 ) { - rx_clk_phase =15 ; - }else if (mmc->actual_clock >5000000 ) { - rx_clk_phase =23 ; - }else if (mmc->actual_clock >1000000 ) { - rx_clk_phase =55 ; - }else { - rx_clk_phase =1061 ; - } - +regmap_read (host->regmap,MESON_SDHC_CLKC , &val); + rx_clk_phase =FIELD_GET (MESON_SDHC_CLKC_CLK_DIV , val) /4 ; regmap_update_bits(host->regmap, MESON_SDHC_CLK2, MESON_SDHC_CLK2_RX_CLK_PHASE, FIELD_PREP(MESON_SDHC_CLK2_RX_CLK_PHASE,
drivers/mmc/host/sdhci-sprd.c +7 -3
@@ -239,15 +239,19 @@ static inline void _sdhci_sprd_set_clock(struct sdhci_host *host, div = ((div &0x300 ) >>2 ) | ((div &0xFF ) <<8 );sdhci_enable_clk (host, div); + val =sdhci_readl (host,SDHCI_SPRD_REG_32_BUSY_POSI ); + mask =SDHCI_SPRD_BIT_OUTR_CLK_AUTO_EN |SDHCI_SPRD_BIT_INNR_CLK_AUTO_EN ;/* Enable CLK_AUTO when the clock is greater than 400K. */ if (clk >400000 ) { - val =sdhci_readl (host,SDHCI_SPRD_REG_32_BUSY_POSI ); - mask =SDHCI_SPRD_BIT_OUTR_CLK_AUTO_EN | -SDHCI_SPRD_BIT_INNR_CLK_AUTO_EN ;if (mask != (val & mask)) { val |= mask;sdhci_writel (host, val,SDHCI_SPRD_REG_32_BUSY_POSI ); } + }else { +if (val & mask) { + val &= ~mask; +sdhci_writel (host, val,SDHCI_SPRD_REG_32_BUSY_POSI ); + } } }
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -2
@@ -12073,6 +12073,8 @@ static void bnxt_sp_task(struct work_struct *work)bnxt_cfg_ntp_filters (bp);if (test_and_clear_bit (BNXT_HWRM_EXEC_FWD_REQ_SP_EVENT , &bp->sp_event))bnxt_hwrm_exec_fwd_req (bp); +if (test_and_clear_bit (BNXT_HWRM_PF_UNLOAD_SP_EVENT , &bp->sp_event)) +netdev_info (bp->dev,"Receive PF driver unload event!\n" );if (test_and_clear_bit (BNXT_PERIODIC_STATS_SP_EVENT , &bp->sp_event)) {bnxt_hwrm_port_qstats (bp,0 );bnxt_hwrm_port_qstats_ext (bp,0 );
@@ -13052,8 +13054,6 @@ static void bnxt_cfg_ntp_filters(struct bnxt *bp) } } } -if (test_and_clear_bit (BNXT_HWRM_PF_UNLOAD_SP_EVENT , &bp->sp_event)) -netdev_info (bp->dev,"Receive PF driver unload event!\n" ); }#else
drivers/net/ethernet/broadcom/genet/bcmgenet.c +3 -1
@@ -2132,8 +2132,10 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)/* Note: if we ever change from DMA_TX_APPEND_CRC below we * will need to restore software padding of "runt" packets */ + len_stat |=DMA_TX_APPEND_CRC ; +if (!i) { - len_stat |=DMA_TX_APPEND_CRC |DMA_SOP ; + len_stat |=DMA_SOP ;if (skb->ip_summed ==CHECKSUM_PARTIAL ) len_stat |=DMA_TX_DO_CSUM ; }
drivers/net/ethernet/intel/i40e/i40e_main.c +10 -1
@@ -104,12 +104,18 @@ static struct workqueue_struct *i40e_wq;static void netdev_hw_addr_refcnt (struct i40e_mac_filter *f,struct net_device *netdev,int delta) { +struct netdev_hw_addr_list *ha_list;struct netdev_hw_addr *ha;if (!f || !netdev)return ; -netdev_for_each_mc_addr (ha, netdev) { +if (is_unicast_ether_addr (f->macaddr) ||is_link_local_ether_addr (f->macaddr)) + ha_list = &netdev->uc; +else + ha_list = &netdev->mc; + +netdev_hw_addr_list_for_each (ha, ha_list) {if (ether_addr_equal (ha->addr, f->macaddr)) { ha->refcount += delta;if (ha->refcount <=0 )
@@ -16479,6 +16485,9 @@ static void i40e_pci_error_reset_done(struct pci_dev *pdev)return ;i40e_reset_and_rebuild (pf, false, false); +#ifdef CONFIG_PCI_IOV +i40e_restore_all_vfs_msi_state (pdev); +#endif /* CONFIG_PCI_IOV */ }/**
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +30 -4
@@ -152,6 +152,32 @@ void i40e_vc_notify_reset(struct i40e_pf *pf) (u8 *)&pfe, sizeof(struct virtchnl_pf_event)); } +#ifdef CONFIG_PCI_IOV +void i40e_restore_all_vfs_msi_state (struct pci_dev *pdev) +{ +u16 vf_id; +u16 pos; + +/* Continue only if this is a PF */ +if (!pdev->is_physfn) +return ; + +if (!pci_num_vf (pdev)) +return ; + + pos =pci_find_ext_capability (pdev,PCI_EXT_CAP_ID_SRIOV ); +if (pos) { +struct pci_dev *vf_dev =NULL ; + +pci_read_config_word (pdev, pos +PCI_SRIOV_VF_DID , &vf_id); +while ((vf_dev =pci_get_device (pdev->vendor, vf_id, vf_dev))) { +if (vf_dev->is_virtfn && vf_dev->physfn == pdev) +pci_restore_msi_state (vf_dev); + } + } +} +#endif /* CONFIG_PCI_IOV */ +/** * i40e_vc_notify_vf_reset * @vf: pointer to the VF structure
@@ -3519,16 +3545,16 @@ static int i40e_validate_cloud_filter(struct i40e_vf *vf,bool found = false;int bkt; -if (!tc_filter->action) { +if (tc_filter->action !=VIRTCHNL_ACTION_TC_REDIRECT ) {dev_info (&pf->pdev->dev, -"VF %d: Currently ADq doesn't support Drop Action\n" , - vf->vf_id); +"VF %d: ADQ doesn't support this action (%d)\n" , + vf->vf_id, tc_filter->action); goto err; }/* action_meta is TC number here to which the filter is applied */ if (!tc_filter->action_meta || - tc_filter->action_meta >I40E_MAX_VF_VSI ) { + tc_filter->action_meta > vf->num_tc) {dev_info (&pf->pdev->dev,"VF %d: Invalid TC number %u\n" , vf->vf_id, tc_filter->action_meta); goto err;
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h +3 -0
@@ -135,6 +135,9 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable);void i40e_vc_notify_link_state (struct i40e_pf *pf);void i40e_vc_notify_reset (struct i40e_pf *pf); +#ifdef CONFIG_PCI_IOV +void i40e_restore_all_vfs_msi_state (struct pci_dev *pdev); +#endif /* CONFIG_PCI_IOV */ int i40e_get_vf_stats (struct net_device *netdev,int vf_id,struct ifla_vf_stats *vf_stats);
drivers/net/ethernet/intel/ice/ice_main.c +9 -3
@@ -2146,7 +2146,7 @@ static int ice_configure_phy(struct ice_vsi *vsi)/* Ensure we have media as we cannot configure a medialess port */ if (!(phy->link_info.link_info &ICE_AQ_MEDIA_AVAILABLE )) -return -EPERM ; +return -ENOMEDIUM ;ice_print_topo_conflict (vsi);
@@ -9173,8 +9173,14 @@ int ice_stop(struct net_device *netdev)int link_err =ice_force_phys_link_state (vsi, false);if (link_err) { -netdev_err (vsi->netdev,"Failed to set physical link down, VSI %d error %d\n" , - vsi->vsi_num, link_err); +if (link_err == -ENOMEDIUM ) +netdev_info (vsi->netdev,"Skipping link reconfig - no media attached, VSI %d\n" , + vsi->vsi_num); +else +netdev_err (vsi->netdev,"Failed to set physical link down, VSI %d error %d\n" , + vsi->vsi_num, link_err); + +ice_vsi_close (vsi);return -EIO ; } }
drivers/net/ethernet/intel/igc/igc.h +1 -0
@@ -568,6 +568,7 @@ struct igc_nfc_filter {u16 etype;__be16 vlan_etype;u16 vlan_tci; +u16 vlan_tci_mask;u8 src_addr[ETH_ALEN ];u8 dst_addr[ETH_ALEN ];u8 user_data[8 ];
drivers/net/ethernet/intel/igc/igc_ethtool.c +39 -3
78 lines not on this page · raw message
drivers/net/ethernet/intel/igc/igc_tsn.c +1 -1
@@ -227,7 +227,7 @@ static int igc_tsn_enable_offload(struct igc_adapter *adapter)wr32 (IGC_TQAVCC (i), tqavcc);wr32 (IGC_TQAVHC (i), -0x80000000 + ring->hicredit *0x7735 ); +0x80000000 + ring->hicredit *0x7736 ); }else {/* Disable any CBS for the queue */ txqctl &= ~(IGC_TXQCTL_QAV_SEL_MASK );
drivers/net/ethernet/marvell/octeontx2/af/npc.h +2 -2
@@ -520,7 +520,7 @@ struct npc_lt_def {u8 ltype_mask;u8 ltype_match;u8 lid; -}; +} __packed;struct npc_lt_def_ipsec {u8 ltype_mask;
@@ -528,7 +528,7 @@ struct npc_lt_def_ipsec {u8 lid;u8 spi_offset;u8 spi_nz; -}; +} __packed;struct npc_lt_def_apad {u8 ltype_mask;
drivers/net/ethernet/marvell/octeontx2/af/rvu.h +1 -0
@@ -905,6 +905,7 @@ u32 rvu_cgx_get_fifolen(struct rvu *rvu);void *rvu_first_cgx_pdata (struct rvu *rvu);int cgxlmac_to_pf (struct rvu *rvu,int cgx_id,int lmac_id);int rvu_cgx_config_tx (void *cgxd,int lmac_id,bool enable); +int rvu_cgx_tx_enable (struct rvu *rvu,u16 pcifunc,bool enable);int rvu_cgx_prio_flow_ctrl_cfg (struct rvu *rvu,u16 pcifunc,u8 tx_pause,u8 rx_pause,u16 pfc_en);int rvu_cgx_cfg_pause_frm (struct rvu *rvu,u16 pcifunc,u8 tx_pause,u8 rx_pause);
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c +17 -0
@@ -465,6 +465,23 @@ int rvu_cgx_config_rxtx(struct rvu *rvu, u16 pcifunc, bool start)return mac_ops->mac_rx_tx_enable (cgxd, lmac_id, start); } +int rvu_cgx_tx_enable (struct rvu *rvu,u16 pcifunc,bool enable) +{ +int pf =rvu_get_pf (pcifunc); +struct mac_ops *mac_ops; +u8 cgx_id, lmac_id; +void *cgxd; + +if (!is_cgx_config_permitted (rvu, pcifunc)) +return LMAC_AF_ERR_PERM_DENIED ; + +rvu_get_cgx_lmac_id (rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id); + cgxd =rvu_cgx_pdata (cgx_id, rvu); + mac_ops =get_mac_ops (cgxd); + +return mac_ops->mac_tx_enable (cgxd, lmac_id, enable); +} +int rvu_cgx_config_tx (void *cgxd,int lmac_id,bool enable) {struct mac_ops *mac_ops;
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +10 -108
158 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_rx.c +7 -2
@@ -267,6 +267,13 @@ static bool mlxbf_gige_rx_packet(struct mlxbf_gige *priv, int *rx_pkts) priv->stats.rx_truncate_errors++; } +/* Read receive consumer index before replenish so that this routine +* returns accurate return value even if packet is received into +* just-replenished buffer prior to exiting this routine. +*/ + rx_ci =readq (priv->base +MLXBF_GIGE_RX_CQE_PACKET_CI ); + rx_ci_rem = rx_ci % priv->rx_q_entries; +/* Let hardware know we've replenished one buffer */ rx_pi++;
@@ -279,8 +286,6 @@ static bool mlxbf_gige_rx_packet(struct mlxbf_gige *priv, int *rx_pkts) rx_pi_rem = rx_pi % priv->rx_q_entries;if (rx_pi_rem ==0 ) priv->valid_polarity ^=1 ; - rx_ci =readq (priv->base +MLXBF_GIGE_RX_CQE_PACKET_CI ); - rx_ci_rem = rx_ci % priv->rx_q_entries;if (skb)netif_receive_skb (skb);
drivers/net/ethernet/qlogic/qla3xxx.c +2 -0
@@ -2591,6 +2591,7 @@ static int ql_alloc_buffer_queues(struct ql3_adapter *qdev)if (qdev->lrg_buf_q_alloc_virt_addr ==NULL ) {netdev_err (qdev->ndev,"lBufQ failed\n" ); +kfree (qdev->lrg_buf);return -ENOMEM ; } qdev->lrg_buf_q_virt_addr = qdev->lrg_buf_q_alloc_virt_addr;
@@ -2615,6 +2616,7 @@ static int ql_alloc_buffer_queues(struct ql3_adapter *qdev) qdev->lrg_buf_q_alloc_size, qdev->lrg_buf_q_alloc_virt_addr, qdev->lrg_buf_q_alloc_phy_addr); +kfree (qdev->lrg_buf);return -ENOMEM ; }
drivers/net/ethernet/realtek/r8169_main.c +1 -1
@@ -1211,7 +1211,7 @@ static void rtl8168ep_driver_start(struct rtl8169_private *tp) {r8168ep_ocp_write (tp,0x01 ,0x180 ,OOB_CMD_DRIVER_START );r8168ep_ocp_write (tp,0x01 ,0x30 ,r8168ep_ocp_read (tp,0x30 ) |0x01 ); -rtl_loop_wait_high (tp, &rtl_ep_ocp_read_cond,10000 ,10 ); +rtl_loop_wait_high (tp, &rtl_ep_ocp_read_cond,10000 ,30 ); }static void rtl8168_driver_start (struct rtl8169_private *tp)
drivers/net/ethernet/renesas/ravb_main.c +42 -23
132 lines not on this page · raw message
drivers/net/ethernet/sfc/rx_common.c +3 -1
@@ -823,8 +823,10 @@ int efx_probe_filters(struct efx_nic *efx) }if (!success) { -efx_for_each_channel (channel, efx) +efx_for_each_channel (channel, efx) {kfree (channel->rps_flow_id); + channel->rps_flow_id =NULL ; + } efx->type->filter_table_remove (efx); rc = -ENOMEM ; goto out_unlock;
drivers/net/ethernet/wangxun/libwx/wx_lib.c +6 -76
127 lines not on this page · raw message
drivers/net/ethernet/wangxun/libwx/wx_type.h +0 -1
@@ -759,7 +759,6 @@ struct wx_rx_buffer {dma_addr_t page_dma;struct page *page;unsigned int page_offset; -u16 pagecnt_bias; };struct wx_queue_stats {
drivers/net/usb/ax88172a.c +3 -1
@@ -161,7 +161,9 @@ static int ax88172a_bind(struct usbnet *dev, struct usb_interface *intf)u8 buf[ETH_ALEN ];struct ax88172a_private *priv; -usbnet_get_endpoints (dev, intf); + ret =usbnet_get_endpoints (dev, intf); +if (ret) +return ret; priv =kzalloc (sizeof (*priv),GFP_KERNEL );if (!priv)
drivers/net/virtio_net.c +45 -45
203 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/pcie/internal.h +2 -2
@@ -749,7 +749,7 @@ static inline void iwl_enable_rfkill_int(struct iwl_trans *trans) } } -void iwl_pcie_handle_rfkill_irq (struct iwl_trans *trans); +void iwl_pcie_handle_rfkill_irq (struct iwl_trans *trans,bool from_irq);static inline bool iwl_is_rfkill_set (struct iwl_trans *trans) {
@@ -796,7 +796,7 @@ static inline bool iwl_pcie_dbg_on(struct iwl_trans *trans)return (trans->dbg.dest_tlv ||iwl_trans_dbg_ini_valid (trans)); } -void iwl_trans_pcie_rf_kill (struct iwl_trans *trans,bool state); +void iwl_trans_pcie_rf_kill (struct iwl_trans *trans,bool state,bool from_irq);void iwl_trans_pcie_dump_regs (struct iwl_trans *trans);#ifdef CONFIG_IWLWIFI_DEBUGFS
drivers/net/wireless/intel/iwlwifi/pcie/rx.c +4 -4
@@ -1785,7 +1785,7 @@ static u32 iwl_pcie_int_cause_ict(struct iwl_trans *trans)return inta; } -void iwl_pcie_handle_rfkill_irq (struct iwl_trans *trans) +void iwl_pcie_handle_rfkill_irq (struct iwl_trans *trans,bool from_irq) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);struct isr_statistics *isr_stats = &trans_pcie->isr_stats;
@@ -1809,7 +1809,7 @@ void iwl_pcie_handle_rfkill_irq(struct iwl_trans *trans) isr_stats->rfkill++;if (prev != report) -iwl_trans_pcie_rf_kill (trans, report); +iwl_trans_pcie_rf_kill (trans, report, from_irq);mutex_unlock (&trans_pcie->mutex);if (hw_rfkill) {
@@ -1949,7 +1949,7 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)/* HW RF KILL switch toggled */ if (inta &CSR_INT_BIT_RF_KILL ) { -iwl_pcie_handle_rfkill_irq (trans); +iwl_pcie_handle_rfkill_irq (trans, true); handled |=CSR_INT_BIT_RF_KILL ; }
@@ -2366,7 +2366,7 @@ irqreturn_t iwl_pcie_irq_msix_handler(int irq, void *dev_id)/* HW RF KILL switch toggled */ if (inta_hw &MSIX_HW_INT_CAUSES_REG_RF_KILL ) -iwl_pcie_handle_rfkill_irq (trans); +iwl_pcie_handle_rfkill_irq (trans, true);if (inta_hw &MSIX_HW_INT_CAUSES_REG_HW_ERR ) { IWL_ERR(trans,
drivers/net/wireless/intel/iwlwifi/pcie/trans.c +9 -8
@@ -1082,7 +1082,7 @@ bool iwl_pcie_check_hw_rf_kill(struct iwl_trans *trans) report =test_bit (STATUS_RFKILL_OPMODE , &trans->status);if (prev != report) -iwl_trans_pcie_rf_kill (trans, report); +iwl_trans_pcie_rf_kill (trans, report, false);return hw_rfkill; }
@@ -1236,7 +1236,7 @@ static void iwl_pcie_init_msix(struct iwl_trans_pcie *trans_pcie) trans_pcie->hw_mask = trans_pcie->hw_init_mask; } -static void _iwl_trans_pcie_stop_device (struct iwl_trans *trans) +static void _iwl_trans_pcie_stop_device (struct iwl_trans *trans,bool from_irq) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);
@@ -1263,7 +1263,8 @@ static void _iwl_trans_pcie_stop_device(struct iwl_trans *trans)if (test_and_clear_bit (STATUS_DEVICE_ENABLED , &trans->status)) {IWL_DEBUG_INFO (trans,"DEVICE_ENABLED bit was set and is now cleared\n" ); -iwl_pcie_synchronize_irqs (trans); +if (!from_irq) +iwl_pcie_synchronize_irqs (trans);iwl_pcie_rx_napi_sync (trans);iwl_pcie_tx_stop (trans);iwl_pcie_rx_stop (trans);
@@ -1453,7 +1454,7 @@ void iwl_trans_pcie_handle_stop_rfkill(struct iwl_trans *trans,clear_bit (STATUS_RFKILL_OPMODE , &trans->status); }if (hw_rfkill != was_in_rfkill) -iwl_trans_pcie_rf_kill (trans, hw_rfkill); +iwl_trans_pcie_rf_kill (trans, hw_rfkill, false); }static void iwl_trans_pcie_stop_device (struct iwl_trans *trans)
@@ -1468,12 +1469,12 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)mutex_lock (&trans_pcie->mutex); trans_pcie->opmode_down = true; was_in_rfkill =test_bit (STATUS_RFKILL_OPMODE , &trans->status); -_iwl_trans_pcie_stop_device (trans); +_iwl_trans_pcie_stop_device (trans, false);iwl_trans_pcie_handle_stop_rfkill (trans, was_in_rfkill);mutex_unlock (&trans_pcie->mutex); } -void iwl_trans_pcie_rf_kill (struct iwl_trans *trans,bool state) +void iwl_trans_pcie_rf_kill (struct iwl_trans *trans,bool state,bool from_irq) {struct iwl_trans_pcie __maybe_unused *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);
@@ -1486,7 +1487,7 @@ void iwl_trans_pcie_rf_kill(struct iwl_trans *trans, bool state)if (trans->trans_cfg->gen2)_iwl_trans_pcie_gen2_stop_device (trans);else -_iwl_trans_pcie_stop_device (trans); +_iwl_trans_pcie_stop_device (trans, from_irq); } }
@@ -2869,7 +2870,7 @@ static ssize_t iwl_dbgfs_rfkill_write(struct file *file,IWL_WARN (trans,"changing debug rfkill %d->%d\n" , trans_pcie->debug_rfkill, new_value); trans_pcie->debug_rfkill = new_value; -iwl_pcie_handle_rfkill_irq (trans); +iwl_pcie_handle_rfkill_irq (trans, false);return count; }
drivers/pci/pci.c +6 -0
@@ -1335,6 +1335,9 @@ static int pci_set_full_power_state(struct pci_dev *dev)pci_restore_bars (dev); } +if (dev->bus->self) +pcie_aspm_pm_state_change (dev->bus->self); +return 0 ; }
@@ -1429,6 +1432,9 @@ static int pci_set_low_power_state(struct pci_dev *dev, pci_power_t state)pci_power_name (dev->current_state), pci_power_name(state)); +if (dev->bus->self) +pcie_aspm_pm_state_change (dev->bus->self); +return 0 ; }
drivers/pci/pci.h +2 -0
@@ -566,10 +566,12 @@ int pcie_retrain_link(struct pci_dev *pdev, bool use_lt);#ifdef CONFIG_PCIEASPM void pcie_aspm_init_link_state (struct pci_dev *pdev);void pcie_aspm_exit_link_state (struct pci_dev *pdev); +void pcie_aspm_pm_state_change (struct pci_dev *pdev);void pcie_aspm_powersave_config_link (struct pci_dev *pdev);#else static inline void pcie_aspm_init_link_state (struct pci_dev *pdev) { }static inline void pcie_aspm_exit_link_state (struct pci_dev *pdev) { } +static inline void pcie_aspm_pm_state_change (struct pci_dev *pdev) { }static inline void pcie_aspm_powersave_config_link (struct pci_dev *pdev) { }#endif
drivers/pci/pcie/aspm.c +19 -0
@@ -1001,6 +1001,25 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev)up_read (&pci_bus_sem); } +/* @pdev: the root port or switch downstream port */ +void pcie_aspm_pm_state_change (struct pci_dev *pdev) +{ +struct pcie_link_state *link = pdev->link_state; + +if (aspm_disabled || !link) +return ; +/* +* Devices changed PM state, we should recheck if latency +* meets all functions' requirement +*/ +down_read (&pci_bus_sem); +mutex_lock (&aspm_lock); +pcie_update_aspm_capable (link->root); +pcie_config_aspm_path (link); +mutex_unlock (&aspm_lock); +up_read (&pci_bus_sem); +} +void pcie_aspm_powersave_config_link (struct pci_dev *pdev) {struct pcie_link_state *link = pdev->link_state;
drivers/phy/mediatek/phy-mtk-mipi-dsi-mt8183.c +1 -1
@@ -100,7 +100,7 @@ static void mtk_mipi_tx_pll_disable(struct clk_hw *hw)static long mtk_mipi_tx_pll_round_rate (struct clk_hw *hw,unsigned long rate,unsigned long *prate) { -return clamp_val (rate,50000000 ,1600000000 ); +return clamp_val (rate,125000000 ,1600000000 ); }static const struct clk_ops mtk_mipi_tx_pll_ops = {
drivers/phy/sunplus/phy-sunplus-usb2.c +1 -1
@@ -275,7 +275,7 @@ static int sp_usb_phy_probe(struct platform_device *pdev) phy =devm_phy_create (&pdev->dev,NULL , &sp_uphy_ops);if (IS_ERR (phy)) { - ret = -PTR_ERR (phy); + ret =PTR_ERR (phy);return ret; }
drivers/phy/ti/phy-gmii-sel.c +4 -1
@@ -64,6 +64,7 @@ struct phy_gmii_sel_priv {u32 num_ports;u32 reg_offset;u32 qsgmii_main_ports; +bool no_offset; };static int phy_gmii_sel_mode (struct phy *phy,enum phy_mode mode,int submode)
@@ -402,7 +403,8 @@ static int phy_gmii_sel_init_ports(struct phy_gmii_sel_priv *priv) priv->num_ports = size /sizeof (u32);if (!priv->num_ports)return -EINVAL ; - priv->reg_offset =__be32_to_cpu (*offset); +if (!priv->no_offset) + priv->reg_offset =__be32_to_cpu (*offset); } if_phys = devm_kcalloc(dev, priv->num_ports,
@@ -471,6 +473,7 @@ static int phy_gmii_sel_probe(struct platform_device *pdev)dev_err (dev,"Failed to get syscon %d\n" , ret);return ret; } + priv->no_offset = true; } ret =phy_gmii_sel_init_ports (priv);
fs/dax.c +12 -12
@@ -412,23 +412,23 @@ static struct page *dax_busy_page(void *entry)return NULL ; } -/* -* dax_lock_page - Lock the DAX entry corresponding to a page -* @page: The page whose entry we want to lock +/** +* dax_lock_folio - Lock the DAX entry corresponding to a folio +* @folio: The folio whose entry we want to lock * * Context: Process context. -* Return: A cookie to pass to dax_unlock_page() or 0 if the entry could +* Return: A cookie to pass to dax_unlock_folio() or 0 if the entry could * not be locked. */ -dax_entry_t dax_lock_page (struct page *page) +dax_entry_t dax_lock_folio (struct folio *folio) {XA_STATE (xas,NULL ,0 );void *entry; -/* Ensure page->mapping isn't freed while we look at it */ +/* Ensure folio->mapping isn't freed while we look at it */ rcu_read_lock ();for (;;) { -struct address_space *mapping =READ_ONCE (page->mapping); +struct address_space *mapping =READ_ONCE (folio->mapping); entry =NULL ;if (!mapping || !dax_mapping (mapping))
@@ -447,11 +447,11 @@ dax_entry_t dax_lock_page(struct page *page) xas.xa = &mapping->i_pages;xas_lock_irq (&xas); -if (mapping != page->mapping) { +if (mapping != folio->mapping) {xas_unlock_irq (&xas);continue ; } -xas_set (&xas, page->index); +xas_set (&xas, folio->index); entry =xas_load (&xas);if (dax_is_locked (entry)) {rcu_read_unlock ();
@@ -467,10 +467,10 @@ dax_entry_t dax_lock_page(struct page *page)return (dax_entry_t )entry; } -void dax_unlock_page (struct page *page,dax_entry_t cookie) +void dax_unlock_folio (struct folio *folio,dax_entry_t cookie) { -struct address_space *mapping = page->mapping; -XA_STATE (xas, &mapping->i_pages, page->index); +struct address_space *mapping = folio->mapping; +XA_STATE (xas, &mapping->i_pages, folio->index);if (S_ISCHR (mapping->host->i_mode))return ;
fs/smb/client/cifsglob.h +0 -1
@@ -993,7 +993,6 @@ release_iface(struct kref *ref)struct cifs_server_iface *iface =container_of (ref, struct cifs_server_iface, refcount); -list_del_init (&iface->iface_head);kfree (iface); }
fs/smb/client/connect.c +5 -2
@@ -209,10 +209,13 @@ cifs_mark_tcp_ses_conns_for_reconnect(struct TCP_Server_Info *server,spin_lock (&cifs_tcp_ses_lock);list_for_each_entry_safe (ses, nses, &pserver->smb_ses_list, smb_ses_list) {/* check if iface is still active */ -if (!cifs_chan_is_iface_active (ses, server)) +spin_lock (&ses->chan_lock); +if (!cifs_chan_is_iface_active (ses, server)) { +spin_unlock (&ses->chan_lock);cifs_chan_update_iface (ses, server); +spin_lock (&ses->chan_lock); + } -spin_lock (&ses->chan_lock);if (!mark_smb_session &&cifs_chan_needs_reconnect (ses, server)) {spin_unlock (&ses->chan_lock);continue ;
fs/smb/client/smb2ops.c +23 -11
@@ -593,16 +593,12 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf, }/* -* Go through iface_list and do kref_put to remove -* any unused ifaces. ifaces in use will be removed -* when the last user calls a kref_put on it +* Go through iface_list and mark them as inactive */ list_for_each_entry_safe (iface, niface, &ses->iface_list, - iface_head) { + iface_head) iface->is_active =0 ; -kref_put (&iface->refcount, release_iface); - ses->iface_count--; - } +spin_unlock (&ses->iface_lock);/*
@@ -676,10 +672,7 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf, iface_head) { ret =iface_cmp (iface, &tmp_iface);if (!ret) { -/* just get a ref so that it doesn't get picked/freed */ iface->is_active =1 ; -kref_get (&iface->refcount); - ses->iface_count++;spin_unlock (&ses->iface_lock); goto next_iface; }else if (ret <0 ) {
@@ -746,6 +739,20 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf, } out: +/* +* Go through the list again and put the inactive entries +*/ +spin_lock (&ses->iface_lock); +list_for_each_entry_safe (iface, niface, &ses->iface_list, + iface_head) { +if (!iface->is_active) { +list_del (&iface->iface_head); +kref_put (&iface->refcount, release_iface); + ses->iface_count--; + } + } +spin_unlock (&ses->iface_lock); +return rc; }
@@ -782,9 +789,14 @@ SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon, bool in_ goto out;/* check if iface is still active */ +spin_lock (&ses->chan_lock); pserver = ses->chans[0 ].server; -if (pserver && !cifs_chan_is_iface_active (ses, pserver)) +if (pserver && !cifs_chan_is_iface_active (ses, pserver)) { +spin_unlock (&ses->chan_lock);cifs_chan_update_iface (ses, pserver); +spin_lock (&ses->chan_lock); + } +spin_unlock (&ses->chan_lock); out:kfree (out_buf);
include/linux/dax.h +5 -5
@@ -159,8 +159,8 @@ int dax_writeback_mapping_range(struct address_space *mapping,struct page *dax_layout_busy_page (struct address_space *mapping);struct page *dax_layout_busy_page_range (struct address_space *mapping,loff_t start,loff_t end); -dax_entry_t dax_lock_page (struct page *page); -void dax_unlock_page (struct page *page,dax_entry_t cookie); +dax_entry_t dax_lock_folio (struct folio *folio); +void dax_unlock_folio (struct folio *folio,dax_entry_t cookie);dax_entry_t dax_lock_mapping_entry (struct address_space *mapping,unsigned long index,struct page **page); void dax_unlock_mapping_entry(struct address_space *mapping,
@@ -182,14 +182,14 @@ static inline int dax_writeback_mapping_range(struct address_space *mapping,return -EOPNOTSUPP ; } -static inline dax_entry_t dax_lock_page (struct page *page) +static inline dax_entry_t dax_lock_folio (struct folio *folio) { -if (IS_DAX (page->mapping->host)) +if (IS_DAX (folio->mapping->host))return ~0UL ;return 0 ; } -static inline void dax_unlock_page (struct page *page,dax_entry_t cookie) +static inline void dax_unlock_folio (struct folio *folio,dax_entry_t cookie) { }
include/linux/hisi_acc_qm.h +1 -0
@@ -276,6 +276,7 @@ struct hisi_qm_poll_data {struct hisi_qm *qm;struct work_struct work;u16 *qp_finish_id; +u16 eqe_num; };/**
include/net/netfilter/nf_tables_ipv4.h +1 -1
@@ -30,7 +30,7 @@ static inline int __nft_set_pktinfo_ipv4_validate(struct nft_pktinfo *pkt)return -1 ; len =iph_totlen (pkt->skb, iph); - thoff = iph->ihl *4 ; + thoff =skb_network_offset (pkt->skb) + (iph->ihl *4 );if (pkt->skb->len < len)return -1 ;else if (len < thoff)
include/net/sock.h +2 -2
@@ -2152,14 +2152,14 @@ static inline bool sk_rethink_txhash(struct sock *sk) }static inline struct dst_entry * -__sk_dst_get (struct sock *sk) +__sk_dst_get (const struct sock *sk) {return rcu_dereference_check (sk->sk_dst_cache,lockdep_sock_is_held (sk)); }static inline struct dst_entry * -sk_dst_get (struct sock *sk) +sk_dst_get (const struct sock *sk) {struct dst_entry *dst;
include/net/tcp.h +2 -0
@@ -723,6 +723,8 @@ static inline void tcp_fast_path_check(struct sock *sk)tcp_fast_path_on (tp); } +u32 tcp_delack_max (const struct sock *sk); +/* Compute the actual rto_min value */
Lines of this file are not shown. View the raw message.
kernel/rcu/tree.c +32 -11
43 lines not on this page · raw message
mm/memory-failure.c +27 -25
52 lines not on this page · raw message
samples/vfio-mdev/mtty.c +166 -73
239 lines not on this page · raw message
sound/pci/hda/tas2781_hda_i2c.c +132 -108
240 lines not on this page · raw message
sound/soc/mediatek/mt8186/mt8186-dai-adda.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/cxl/cxl_core_exports.c new file +7 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/bonding/bond-arp-interval-causes-panic.sh +3 -3
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.