Linux 6.6.5
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.5 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
------------
Documentation/ABI/testing/sysfs-class-led | 9 Makefile | 2 arch/parisc/include/asm/alternative.h | 9 arch/parisc/include/asm/assembly.h | 1 arch/parisc/include/asm/bug.h | 30 + arch/parisc/include/asm/jump_label.h | 8 arch/parisc/include/asm/ldcw.h | 2 arch/parisc/include/asm/uaccess.h | 1 arch/parisc/include/uapi/asm/errno.h | 2 arch/parisc/kernel/vmlinux.lds.S | 1 arch/powerpc/kernel/fpu.S | 13 arch/powerpc/kernel/process.c | 6 arch/powerpc/kernel/vector.S | 2 arch/powerpc/platforms/pseries/iommu.c | 8 arch/s390/mm/page-states.c | 6 arch/x86/xen/enlighten.c | 6 arch/x86/xen/xen-ops.h | 2 drivers/acpi/acpi_video.c | 14 drivers/acpi/scan.c | 7 drivers/ata/libata-scsi.c | 9 drivers/cpufreq/amd-pstate.c | 71 +++- drivers/cpufreq/imx6q-cpufreq.c | 2 drivers/dma-buf/dma-resv.c | 2 drivers/firewire/core-device.c | 11 drivers/firewire/sbp2.c | 6 drivers/firmware/efi/unaccepted_memory.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 9 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c | 6 drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 10 drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 4 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 4 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 drivers/gpu/drm/amd/display/dc/core/dc.c | 21 + drivers/gpu/drm/amd/display/dc/dc.h | 5 drivers/gpu/drm/amd/display/dc/dc_stream.h | 1 drivers/gpu/drm/amd/display/dc/dc_types.h | 4 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 2 drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c | 3 drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c | 2 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c | 6 drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c | 15 drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c | 3 drivers/gpu/drm/amd/display/dc/inc/link.h | 1 drivers/gpu/drm/amd/display/dc/link/link_detection.c | 8 drivers/gpu/drm/amd/display/dc/link/link_dpms.c | 11 drivers/gpu/drm/amd/display/dc/link/link_factory.c | 1 drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c | 14 drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c | 3 drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c | 6 drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c | 62 ++- drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h | 4 drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c | 1 drivers/gpu/drm/amd/include/asic_reg/gc/gc_11_0_0_offset.h | 2 drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 5 drivers/gpu/drm/i915/display/intel_dp.c | 28 + drivers/gpu/drm/i915/gt/intel_engine_user.c | 39 +- drivers/gpu/drm/nouveau/nouveau_bo.c | 5 drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c | 1 drivers/gpu/drm/panel/panel-novatek-nt36523.c | 4 drivers/iommu/intel/dmar.c | 18 + drivers/iommu/intel/iommu.c | 9 drivers/iommu/intel/svm.c | 26 + drivers/iommu/iommu.c | 20 - drivers/iommu/of_iommu.c | 14 drivers/leds/led-class.c | 14 drivers/md/bcache/btree.c | 2 drivers/md/dm-verity-fec.c | 3 drivers/md/dm-verity-target.c | 7 drivers/md/dm-verity.h | 6 drivers/mmc/core/block.c | 2 drivers/mmc/core/core.c | 9 drivers/mmc/host/cqhci-core.c | 44 +- drivers/mmc/host/sdhci-pci-gli.c | 54 +-- drivers/mmc/host/sdhci-sprd.c | 25 + drivers/net/dsa/mv88e6xxx/chip.c | 26 + drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 16 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 2 drivers/net/ethernet/intel/ice/ice_lag.c | 122 ++++--- drivers/net/ethernet/intel/ice/ice_lag.h | 1 drivers/net/ethernet/intel/ice/ice_vf_lib.c | 20 + drivers/net/ethernet/intel/ice/ice_virtchnl.c | 25 + drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 4 drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c | 3 drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h | 2 drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 9 drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 120 +++++-- drivers/net/ethernet/realtek/r8169_main.c | 9 drivers/net/ethernet/renesas/ravb_main.c | 69 ++-- drivers/net/ethernet/renesas/rswitch.c | 22 - drivers/net/ethernet/stmicro/stmmac/mmc_core.c | 4 drivers/net/ethernet/wangxun/libwx/wx_lib.c | 2 drivers/net/netdevsim/bpf.c | 4 drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c | 4 drivers/nvme/host/core.c | 9 drivers/pinctrl/core.c | 6 drivers/pinctrl/stm32/pinctrl-stm32.c | 13 drivers/powercap/dtpm_cpu.c | 6 drivers/powercap/dtpm_devfreq.c | 11 drivers/scsi/sd.c | 9 drivers/ufs/core/ufshcd.c | 13 drivers/vfio/pci/pds/pci_drv.c | 4 drivers/vfio/pci/pds/vfio_dev.c | 30 + drivers/vfio/pci/pds/vfio_dev.h | 2 fs/btrfs/disk-io.c | 1 fs/btrfs/extent_io.c | 11 fs/btrfs/ioctl.c | 1 fs/btrfs/ref-verify.c | 2 fs/btrfs/send.c | 2 fs/btrfs/super.c | 5 fs/btrfs/volumes.c | 9 fs/ext2/file.c | 1 fs/smb/client/inode.c | 4 fs/smb/client/smb2ops.c | 13 fs/smb/server/smb2pdu.c | 47 +- fs/smb/server/smbacl.c | 7 fs/smb/server/smbacl.h | 2 fs/smb/server/vfs.c | 68 ++-- fs/smb/server/vfs.h | 10 include/linux/amd-pstate.h | 4 include/linux/dma-fence.h | 15 include/linux/io_uring_types.h | 3 include/linux/iommu.h | 1 include/linux/skmsg.h | 1 include/linux/vfio.h | 8 include/net/af_unix.h | 1 include/net/neighbour.h | 2 include/scsi/scsi_device.h | 12 include/uapi/linux/stddef.h | 2 include/uapi/linux/v4l2-subdev.h | 2 io_uring/io_uring.c | 59 +-- io_uring/io_uring.h | 3 io_uring/kbuf.c | 169 ++++++++-- io_uring/kbuf.h | 5 kernel/bpf/memalloc.c | 2 lib/errname.c | 6 net/core/skmsg.c | 2 net/ethtool/netlink.c | 1 net/ipv4/igmp.c | 6 net/mac80211/driver-ops.h | 9 net/unix/af_unix.c | 2 net/unix/unix_bpf.c | 5 net/wireless/core.h | 1 net/wireless/nl80211.c | 50 +- sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_realtek.c | 12 tools/arch/parisc/include/uapi/asm/errno.h | 2 tools/testing/selftests/net/af_unix/diag_uid.c | 1 tools/testing/selftests/net/cmsg_sender.c | 2 tools/testing/selftests/net/ipsec.c | 4 tools/testing/selftests/net/mptcp/mptcp_connect.c | 11 tools/testing/selftests/net/mptcp/mptcp_inq.c | 11 153 files changed, 1332 insertions(+), 623 deletions(-)
Abdul Halim, Mohd Syazwan (1):
iommu/vt-d: Add MTL to quirk list to skip TE disabling
Adrian Hunter (6):
mmc: cqhci: Increase recovery halt timeout
mmc: cqhci: Warn of halt or task clear failure
mmc: cqhci: Fix task clearing in CQE error recovery
mmc: block: Retry commands in CQE error recovery
mmc: block: Do not lose cache flush during CQE error recovery
mmc: block: Be sure to wait while busy in CQE error recovery
Agustin Gutierrez (1):
drm/amd/display: Remove power sequencing check
Alex Sierra (1):
drm/amdgpu: Force order between a read and write to the same address
Alvin Lee (2):
drm/amd/display: Include udelay when waiting for INBOX0 ACK drm/amd/display: Use DRAM speed from validation for dummy p-state
Antonio Borneo (1):
pinctrl: stm32: fix array read out of bound
Ayush Jain (1):
cpufreq/amd-pstate: Only print supported EPP values for performance governor
Bragatheswaran Manickavel (1):
btrfs: ref-verify: fix memory leaks in btrfs_ref_tree_mod()
Brett Creeley (2):
vfio/pds: Fix mutex lock->magic != lock warning vfio/pds: Fix possible sleep while in atomic context
Camille Cho (1):
drm/amd/display: Simplify brightness initialization
Candice Li (1):
drm/amdgpu: Update EEPROM I2C address for smu v13_0_0
Chen Ni (1):
pinctrl: stm32: Add check for devm_kcalloc
Christian König (1):
dma-buf: fix check in dma_resv_add_fence
Christoph Niedermaier (1):
cpufreq: imx6q: Don't disable 792 Mhz OPP unnecessarily
Claudiu Beznea (6):
net: ravb: Check return value of reset_control_deassert()
net: ravb: Use pm_runtime_resume_and_get()
net: ravb: Make write access to CXR35 first before accessing other EMAC registers
net: ravb: Start TX queues after HW initialization succeeded
net: ravb: Stop DMA in case of failures on ravb_open()
net: ravb: Keep reverse order of operations in ravb_remove()
Damien Le Moal (2):
scsi: Change SCSI device boolean fields to single bit flags
scsi: sd: Fix system start for ATA devices
Dan Carpenter (2):
media: v4l2-subdev: Fix a 64bit bug
wifi: iwlwifi: mvm: fix an error code in iwl_mvm_mld_add_sta()
Daniel Mentz (1):
iommu: Fix printk arg in of_iommu_get_resv_regions()
Dave Airlie (1):
nouveau: find the smallest page allocation to cover a buffer alloc.
Dave Ertman (1):
ice: Fix VF Reset paths when interface in a failed over aggregate
David Howells (2):
cifs: Fix FALLOC_FL_ZERO_RANGE by setting i_size if EOF moved
cifs: Fix FALLOC_FL_INSERT_RANGE by setting i_size after EOF moved
David Sterba (1):
btrfs: fix 64bit compat send ioctl arguments not initializing version member
Dinghao Liu (1):
drm/amd/pm: fix a memleak in aldebaran_tables_init
Dmitry Antipov (1):
uapi: propagate __struct_group() attributes to the container union
Elena Salomatkina (1):
octeontx2-af: Fix possible buffer overflow
Ewan D. Milne (1):
nvme: check for valid nvme_identify_ns() before using it
Filipe Manana (2):
btrfs: fix off-by-one when checking chunk map includes logical address
btrfs: make error messages more clear when getting a chunk map
Furong Xu (1):
net: stmmac: xgmac: Disable FPE MMC interrupts
Gaurav Batra (1):
powerpc/pseries/iommu: enable_ddw incorrectly returns direct mapping for SR-IOV device
Gautham R. Shenoy (1):
cpufreq/amd-pstate: Fix the return value of amd_pstate_fast_switch()
Geetha sowjanya (1):
octeontx2-pf: Fix adding mbox work queue entry when num_vfs > 64
Greg Kroah-Hartman (1):
Linux 6.6.5
Greg Ungerer (2):
net: dsa: mv88e6xxx: fix marvell 6350 switch probing
net: dsa: mv88e6xxx: fix marvell 6350 probe crash
Gustavo A. R. Silva (1):
neighbour: Fix __randomize_layout crash in struct neighbour
Hamza Mahfooz (1):
drm/amd/display: fix ABM disablement
Hans de Goede (1):
ACPI: video: Use acpi_video_device for cooling-dev driver data
Heiko Carstens (1):
s390/cmma: fix handling of swapper_pg_dir and invalid_pg_dir
Heiner Kallweit (2):
r8169: fix deadlock on RTL8125 in jumbo mtu mode
r8169: prevent potential deadlock in rtl8169_close
Helge Deller (8):
parisc: Mark ex_table entries 32-bit aligned in assembly.h
parisc: Mark ex_table entries 32-bit aligned in uaccess.h
parisc: Use natural CPU alignment for bug_table
parisc: Mark lock_aligned variables 16-byte aligned on SMP
parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes
parisc: Mark jump_table naturally aligned
parisc: Ensure 32-bit alignment on parisc unwind section
parisc: Mark altinstructions read-only and 32-bit aligned
Hou Tao (1):
bpf: Add missed allocation hint for bpf_mem_cache_alloc_flags()
Ian Chen (1):
drm/amd/display: Refactor edp power control
Ilya Bakoulin (1):
drm/amd/display: Fix MPCC 1DLUT programming
Ioana Ciornei (2):
dpaa2-eth: increase the needed headroom to account for alignment
dpaa2-eth: recycle the RX buffer only after all processing done
Jakub Kicinski (1):
ethtool: don't propagate EOPNOTSUPP from dumps
Jann Horn (1):
btrfs: send: ensure send_fd is writable
Jens Axboe (6):
io_uring: don't allow discontig pages for IORING_SETUP_NO_MMAP
io_uring: free io_buffer_list entries via RCU
io_uring: don't guard IORING_OFF_PBUF_RING with SETUP_NO_MMAP
io_uring: enable io_mem_alloc/free to be used in other parts io_uring/kbuf: defer release of mapped buffer rings io_uring/kbuf: recycle freed mapped buffer ring entries
Jiawen Wu (1):
net: libwx: fix memory leak on msix entry
Johannes Berg (1):
wifi: cfg80211: fix CQM for non-range use
John Fastabend (1):
bpf, sockmap: af_unix stream sockets need to hold ref for pair sock
Juergen Gross (1):
x86/xen: fix percpu vcpu_info allocation
Kailang Yang (2):
ALSA: hda/realtek: Headset Mic VREF to 100%
ALSA: hda/realtek: Add supported ALC257 for ChromeOS
Kornel Dulęba (1):
mmc: sdhci-pci-gli: Disable LPM during initialization
Lu Baolu (4):
iommu/vt-d: Fix incorrect cache invalidation for mm notification iommu/vt-d: Omit devTLB invalidation requests when TES=0 iommu/vt-d: Disable PCI ATS in legacy passthrough mode iommu/vt-d: Make context clearing consistent with context mapping
Lukasz Luba (1):
powercap: DTPM: Fix unneeded conversions to micro-Watts
Maria Yu (1):
pinctrl: avoid reload of p state in list iteration
Mario Limonciello (1):
drm/amd: Enable PCIe PME from D3
Markus Weippert (1):
bcache: revert replacing IS_ERR_OR_NULL with IS_ERR
Michael Roth (1):
efi/unaccepted: Fix off-by-one when checking for overlapping ranges
Mikulas Patocka (1):
dm-verity: align struct dm_verity_fec_io properly
Namjae Jeon (1):
ksmbd: fix possible deadlock in smb2_open
Nicholas Kazlauskas (2):
drm/amd/display: Remove min_dst_y_next_start check for Z8 drm/amd/display: Update min Z8 residency time to 2100 for DCN314
Nicholas Piggin (1):
KVM: PPC: Book3S HV: Fix KVM_RUN clobbering FP/VEC user registers
Oldřich Jedlička (1):
wifi: mac80211: do not pass AP_VLAN vif pointer to drivers during flush
Paulo Alcantara (2):
smb: client: fix missing mode bits for SMB symlinks
smb: client: report correct st_size for SMB and NFS symlinks
Peter Wang (1):
scsi: ufs: core: Clear cmd if abort succeeds in MCQ mode
Prike Liang (1):
drm/amdgpu: correct the amdgpu runtime dereference usage count
Qu Wenruo (2):
btrfs: add dmesg output for first mount and last unmount of a filesystem
btrfs: free the allocated memory if btrfs_alloc_page_array() fails
Ritesh Harjani (IBM) (1):
ext2: Fix ki_pos update for DIO buffered-io fallback case
Robin Murphy (1):
iommu: Avoid more races around device probe
Sean Christopherson (1):
vfio: Drop vfio_file_iommu_group() stub to fudge around a KVM wart
Sherry Wang (1):
drm/amd/display: refactor ILR to make it work
Stanislav Fomichev (1):
netdevsim: Don't accept device bound programs
Subbaraya Sundeep (1):
octeontx2-pf: Restore TC ingress police rules when interface is up
Swapnil Patel (1):
drm/amd/display: Reduce default backlight min from 5 nits to 1 nits
Takashi Iwai (2):
leds: class: Don't expose color sysfs entry
ALSA: hda: Disable power-save on KONTRON SinglePC
Tim Huang (1):
drm/amdgpu: fix memory overflow in the IB test
Timothy Pearson (1):
powerpc: Don't clobber f0/vs0 during fp|altivec register save
Tvrtko Ursulin (1):
drm/i915/gsc: Mark internal GSC engine with reserved uabi class
Ville Syrjälä (1):
drm/i915: Also check for VGA converter in eDP probe
Wenchao Chen (1):
mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled
Willem de Bruijn (4):
selftests/net: ipsec: fix constant out of range selftests/net: fix a char signedness issue selftests/net: unix: fix unused variable compiler warning selftests/net: mptcp: fix uninitialized variable warnings
Wu Bo (2):
dm verity: initialize fec io before freeing it dm verity: don't perform FEC for failed readahead IO
Wyes Karny (1):
cpufreq/amd-pstate: Fix scaling_min_freq and scaling_max_freq update
Yang Yingliang (2):
firewire: core: fix possible memory leak in create_units() drm/panel: nt36523: fix return value check in nt36523_probe()
Yoshihiro Shimoda (4):
net: rswitch: Fix type of ret in rswitch_start_xmit()
net: rswitch: Fix return value in rswitch_start_xmit()
net: rswitch: Fix missing dev_kfree_skb_any() in error path
ravb: Fix races between ravb_tx_timeout_work() and net related ops
Zhengchao Shao (1):
ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet
Zhongwei (1):
drm/amd/display: force toggle rate wa for first link training for a retimer
xiazhengqiao (1):
drm/panel: starry-2081101qfh032011-53g: Fine tune the panel power sequence
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-class-led +0 -9
@@ -59,15 +59,6 @@ Description: brightness. Reading this file when no hw brightness change event has happened will return an ENODATA error. -What: /sys/class/leds/<led>/color -Date: June 2023 -KernelVersion: 6.5 -Description: - Color of the LED. - - This is a read-only file. Reading this file returns the color - of the LED as a string (e.g: "red", "green", "multicolor"). - What: /sys/class/leds/<led>/trigger Date: March 2006 KernelVersion: 2.6.17
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 4 +SUBLEVEL = 5 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/parisc/include/asm/alternative.h +6 -3
@@ -34,7 +34,8 @@ void apply_alternatives(struct alt_instr *start, struct alt_instr *end,/* Alternative SMP implementation. */ #define ALTERNATIVE (cond, replacement) "!0:" \ - ".section .altinstructions, \"aw\" !" \ + ".section .altinstructions, \"a\" !" \ + ".align 4 !" \ ".word (0b-4-.) !" \ ".hword 1, " __stringify(cond) " !" \ ".word " __stringify(replacement) " !" \
@@ -44,7 +45,8 @@ void apply_alternatives(struct alt_instr *start, struct alt_instr *end,/* to replace one single instructions by a new instruction */ #define ALTERNATIVE (from, to, cond, replacement)\ - .section .altinstructions, "aw" ! \ + .section .altinstructions, "a" ! \ + .align 4 ! \ .word (from - .) ! \ .hword (to - from)/4, cond ! \ .word replacement ! \
@@ -52,7 +54,8 @@ void apply_alternatives(struct alt_instr *start, struct alt_instr *end,/* to replace multiple instructions by new code */ #define ALTERNATIVE_CODE (from, num_instructions, cond, new_instr_ptr)\ - .section .altinstructions, "aw" ! \ + .section .altinstructions, "a" ! \ + .align 4 ! \ .word (from - .) ! \ .hword -num_instructions, cond ! \ .word (new_instr_ptr - .) ! \
arch/parisc/include/asm/assembly.h +1 -0
@@ -574,6 +574,7 @@*/ #define ASM_EXCEPTIONTABLE_ENTRY (fault_addr, except_addr) \ .section __ex_table,"aw" ! \ + .align 4 ! \ .word (fault_addr - .), (except_addr - .) ! \ .previous
arch/parisc/include/asm/bug.h +18 -12
@@ -28,13 +28,15 @@do { \ asmvolatile ("\n" \"1:\t" PARISC_BUG_BREAK_ASM "\n" \ -"\t.pushsection __bug_table,\"aw\"\n" \ +"\t.pushsection __bug_table,\"a\"\n" \ +"\t.align %4\n" \"2:\t" ASM_WORD_INSN "1b, %c0\n" \ -"\t.short %c1, %c2\n" \ -"\t.org 2b+%c3\n" \ +"\t.short %1, %2\n" \ +"\t.blockz %3-2*%4-2*2\n" \"\t.popsection" \ : :"i" (__FILE__),"i" (__LINE__), \ -"i" (0 ),"i" (sizeof (struct bug_entry )) ); \ +"i" (0 ),"i" (sizeof (struct bug_entry )), \ +"i" (sizeof (long )) ); \unreachable (); \ }while (0 )
@@ -51,27 +53,31 @@do { \ asmvolatile ("\n" \"1:\t" PARISC_BUG_BREAK_ASM "\n" \ -"\t.pushsection __bug_table,\"aw\"\n" \ +"\t.pushsection __bug_table,\"a\"\n" \ +"\t.align %4\n" \"2:\t" ASM_WORD_INSN "1b, %c0\n" \ -"\t.short %c1, %c2\n" \ -"\t.org 2b+%c3\n" \ +"\t.short %1, %2\n" \ +"\t.blockz %3-2*%4-2*2\n" \"\t.popsection" \ : :"i" (__FILE__),"i" (__LINE__), \"i" (BUGFLAG_WARNING |(flags)), \ -"i" (sizeof (struct bug_entry )) ); \ +"i" (sizeof (struct bug_entry )), \ +"i" (sizeof (long )) ); \ } while(0)#else #define __WARN_FLAGS (flags) \ do { \ asm volatile("\n" \ "1:\t" PARISC_BUG_BREAK_ASM "\n" \ - "\t.pushsection __bug_table,\"aw\"\n" \ + "\t.pushsection __bug_table,\"a\"\n" \ + "\t.align %2\n" \ "2:\t" ASM_WORD_INSN "1b\n" \ - "\t.short %c0\n" \ - "\t.org 2b+%c1\n" \ + "\t.short %0\n" \ + "\t.blockz %1-%2-2\n" \ "\t.popsection" \ : : "i" (BUGFLAG_WARNING|(flags)), \ - "i" (sizeof(struct bug_entry)) ); \ + "i" (sizeof(struct bug_entry)), \ + "i" (sizeof(long)) ); \ } while(0)#endif
arch/parisc/include/asm/jump_label.h +6 -2
@@ -15,10 +15,12 @@ static __always_inline bool arch_static_branch(struct static_key *key, bool bran asm_volatile_goto("1:\n\t" "nop\n\t" ".pushsection __jump_table, \"aw\"\n\t" + ".align %1\n\t" ".word 1b - ., %l[l_yes] - .\n\t" __stringify(ASM_ULONG_INSN) " %c0 - .\n\t" ".popsection\n\t" - : : "i" (&((char *)key)[branch]) : : l_yes); + : : "i" (&((char *)key)[branch]), "i" (sizeof(long)) + : : l_yes);return false; l_yes:
@@ -30,10 +32,12 @@ static __always_inline bool arch_static_branch_jump(struct static_key *key, bool asm_volatile_goto("1:\n\t" "b,n %l[l_yes]\n\t" ".pushsection __jump_table, \"aw\"\n\t" + ".align %1\n\t" ".word 1b - ., %l[l_yes] - .\n\t" __stringify(ASM_ULONG_INSN) " %c0 - .\n\t" ".popsection\n\t" - : : "i" (&((char *)key)[branch]) : : l_yes); + : : "i" (&((char *)key)[branch]), "i" (sizeof(long)) + : : l_yes);return false; l_yes:
arch/parisc/include/asm/ldcw.h +1 -1
@@ -55,7 +55,7 @@ })#ifdef CONFIG_SMP -# define __lock_aligned __section(".data..lock_aligned") +# define __lock_aligned __section(".data..lock_aligned") __aligned(16)#endif #endif /* __PARISC_LDCW_H */
arch/parisc/include/asm/uaccess.h +1 -0
@@ -41,6 +41,7 @@ struct exception_table_entry {#define ASM_EXCEPTIONTABLE_ENTRY ( fault_addr, except_addr )\ ".section __ex_table,\"aw\"\n" \ + ".align 4\n" \ ".word (" #fault_addr " - .), (" #except_addr " - .)\n\t" \ ".previous\n"
arch/parisc/include/uapi/asm/errno.h +0 -2
@@ -75,7 +75,6 @@/* We now return you to your regularly scheduled HPUX. */ -#define ENOSYM 215/* symbol does not exist in executable */ #define ENOTSOCK 216/* Socket operation on non-socket */ #define EDESTADDRREQ 217/* Destination address required */ #define EMSGSIZE 218/* Message too long */
@@ -101,7 +100,6 @@#define ETIMEDOUT 238/* Connection timed out */ #define ECONNREFUSED 239/* Connection refused */ #define EREFUSED ECONNREFUSED/* for HP's NFS apparently */ -#define EREMOTERELEASE 240/* Remote peer released connection */ #define EHOSTDOWN 241/* Host is down */ #define EHOSTUNREACH 242/* No route to host */
arch/parisc/kernel/vmlinux.lds.S +1 -0
@@ -130,6 +130,7 @@ SECTIONS RO_DATA(8) /* unwind info */ + . = ALIGN(4); .PARISC.unwind : { __start___unwind = .; *(.PARISC.unwind)
arch/powerpc/kernel/fpu.S +13 -0
@@ -23,6 +23,15 @@ #include <asm/feature-fixups.h> #ifdef CONFIG_VSX +#define __REST_1FPVSR(n,c,base) \ +BEGIN_FTR_SECTION \ + b 2f; \ +END_FTR_SECTION_IFSET(CPU_FTR_VSX); \ + REST_FPR(n,base); \ + b 3f; \ +2: REST_VSR(n,c,base); \ +3: + #define __REST_32FPVSRS(n,c,base) \ BEGIN_FTR_SECTION \ b 2f; \
@@ -41,9 +50,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX); \ 2: SAVE_32VSRS(n,c,base); \ 3: #else +#define __REST_1FPVSR(n,b,base) REST_FPR(n, base) #define __REST_32FPVSRS(n,b,base) REST_32FPRS(n, base) #define __SAVE_32FPVSRS(n,b,base) SAVE_32FPRS(n, base) #endif +#define REST_1FPVSR(n,c,base) __REST_1FPVSR(n,__REG_##c,__REG_##base) #define REST_32FPVSRS(n,c,base) __REST_32FPVSRS(n,__REG_##c,__REG_##base) #define SAVE_32FPVSRS(n,c,base) __SAVE_32FPVSRS(n,__REG_##c,__REG_##base)
@@ -67,6 +78,7 @@ _GLOBAL(store_fp_state) SAVE_32FPVSRS(0, R4, R3) mffs fr0 stfd fr0,FPSTATE_FPSCR(r3) + REST_1FPVSR(0, R4, R3) blr EXPORT_SYMBOL(store_fp_state)
@@ -138,4 +150,5 @@ _GLOBAL(save_fpu) 2: SAVE_32FPVSRS(0, R4, R6) mffs fr0 stfd fr0,FPSTATE_FPSCR(r6) + REST_1FPVSR(0, R4, R6) blr
arch/powerpc/kernel/process.c +3 -3
@@ -1198,11 +1198,11 @@ void kvmppc_save_user_regs(void) usermsr = current->thread.regs->msr; +/* Caller has enabled FP/VEC/VSX/TM in MSR */ if (usermsr &MSR_FP ) -save_fpu (current); - +__giveup_fpu (current);if (usermsr &MSR_VEC ) -save_altivec (current); +__giveup_altivec (current);#ifdef CONFIG_PPC_TRANSACTIONAL_MEM if (usermsr &MSR_TM ) {
arch/powerpc/kernel/vector.S +2 -0
@@ -33,6 +33,7 @@ _GLOBAL(store_vr_state) mfvscr v0 li r4, VRSTATE_VSCR stvx v0, r4, r3 + lvx v0, 0, r3 blr EXPORT_SYMBOL(store_vr_state)
@@ -109,6 +110,7 @@ _GLOBAL(save_altivec) mfvscr v0 li r4,VRSTATE_VSCR stvx v0,r4,r7 + lvx v0,0,r7 blr #ifdef CONFIG_VSX
arch/powerpc/platforms/pseries/iommu.c +4 -4
@@ -914,7 +914,8 @@ static int remove_ddw(struct device_node *np, bool remove_prop, const char *win_return 0 ; } -static bool find_existing_ddw (struct device_node *pdn,u64 *dma_addr,int *window_shift) +static bool find_existing_ddw (struct device_node *pdn,u64 *dma_addr,int *window_shift, +bool *direct_mapping) {struct dma_win *window;const struct dynamic_dma_window_prop *dma64;
@@ -927,6 +928,7 @@ static bool find_existing_ddw(struct device_node *pdn, u64 *dma_addr, int *windo dma64 = window->prop; *dma_addr =be64_to_cpu (dma64->dma_base); *window_shift =be32_to_cpu (dma64->window_shift); + *direct_mapping = window->direct; found = true;break ; }
@@ -1270,10 +1272,8 @@ static bool enable_ddw(struct pci_dev *dev, struct device_node *pdn)mutex_lock (&dma_win_init_mutex); -if (find_existing_ddw (pdn, &dev->dev.archdata.dma_offset, &len)) { - direct_mapping = (len >= max_ram_len); +if (find_existing_ddw (pdn, &dev->dev.archdata.dma_offset, &len, &direct_mapping)) goto out_unlock; - }/* * If we already went through this for a previous function of
arch/s390/mm/page-states.c +6 -0
@@ -181,6 +181,12 @@ void __init cmma_init_nodat(void)return ;/* Mark pages used in kernel page tables */ mark_kernel_pgd (); + page =virt_to_page (&swapper_pg_dir); +for (i =0 ; i <4 ; i++) +set_bit (PG_arch_1, &page[i].flags); + page =virt_to_page (&invalid_pg_dir); +for (i =0 ; i <4 ; i++) +set_bit (PG_arch_1, &page[i].flags);/* Set all kernel pages not used for page tables to stable/no-dat */ for_each_mem_pfn_range (i,MAX_NUMNODES , &start, &end,NULL ) {
arch/x86/xen/enlighten.c +5 -1
@@ -33,9 +33,12 @@ EXPORT_SYMBOL_GPL(hypercall_page);* and xen_vcpu_setup for details. By default it points to share_info->vcpu_info * but during boot it is switched to point to xen_vcpu_info. * The pointer is used in xen_evtchn_do_upcall to acknowledge pending events. +* Make sure that xen_vcpu_info doesn't cross a page boundary by making it +* cache-line aligned (the struct is guaranteed to have a size of 64 bytes, +* which matches the cache line size of 64-bit x86 processors). */ DEFINE_PER_CPU(struct vcpu_info *, xen_vcpu); -DEFINE_PER_CPU(struct vcpu_info, xen_vcpu_info); +DEFINE_PER_CPU_ALIGNED(struct vcpu_info, xen_vcpu_info);/* Linux <-> Xen vCPU id mapping */ DEFINE_PER_CPU (uint32_t, xen_vcpu_id);
@@ -160,6 +163,7 @@ void xen_vcpu_setup(int cpu)int err;struct vcpu_info *vcpup; +BUILD_BUG_ON (sizeof (*vcpup) >SMP_CACHE_BYTES );BUG_ON (HYPERVISOR_shared_info == &xen_dummy_shared_info);/*
arch/x86/xen/xen-ops.h +1 -1
@@ -21,7 +21,7 @@ extern void *xen_initial_gdt;struct trap_info ;void xen_copy_trap_info (struct trap_info *traps); -DECLARE_PER_CPU(struct vcpu_info, xen_vcpu_info); +DECLARE_PER_CPU_ALIGNED(struct vcpu_info, xen_vcpu_info); DECLARE_PER_CPU(unsigned long, xen_cr3); DECLARE_PER_CPU(unsigned long, xen_current_cr3);
drivers/acpi/acpi_video.c +5 -9
@@ -253,8 +253,7 @@ static const struct backlight_ops acpi_backlight_ops = {static int video_get_max_state (struct thermal_cooling_device *cooling_dev,unsigned long *state) { -struct acpi_device *device = cooling_dev->devdata; -struct acpi_video_device *video =acpi_driver_data (device); +struct acpi_video_device *video = cooling_dev->devdata; *state = video->brightness->count -ACPI_VIDEO_FIRST_LEVEL -1 ;return 0 ;
@@ -263,8 +262,7 @@ static int video_get_max_state(struct thermal_cooling_device *cooling_dev,static int video_get_cur_state (struct thermal_cooling_device *cooling_dev,unsigned long *state) { -struct acpi_device *device = cooling_dev->devdata; -struct acpi_video_device *video =acpi_driver_data (device); +struct acpi_video_device *video = cooling_dev->devdata;unsigned long long level;int offset;
@@ -283,8 +281,7 @@ static int video_get_cur_state(struct thermal_cooling_device *cooling_dev,static int video_set_cur_state (struct thermal_cooling_device *cooling_dev,unsigned long state) { -struct acpi_device *device = cooling_dev->devdata; -struct acpi_video_device *video =acpi_driver_data (device); +struct acpi_video_device *video = cooling_dev->devdata;int level;if (state >= video->brightness->count -ACPI_VIDEO_FIRST_LEVEL )
@@ -1125,7 +1122,6 @@ static int acpi_video_bus_get_one_device(struct acpi_device *device, void *arg)strcpy (acpi_device_name (device),ACPI_VIDEO_DEVICE_NAME );strcpy (acpi_device_class (device),ACPI_VIDEO_CLASS ); - device->driver_data = data; data->device_id = device_id; data->video = video;
@@ -1747,8 +1743,8 @@ static void acpi_video_dev_register_backlight(struct acpi_video_device *device) device->backlight->props.brightness =acpi_video_get_brightness (device->backlight); - device->cooling_dev =thermal_cooling_device_register ("LCD" , - device->dev, &video_cooling_ops); + device->cooling_dev =thermal_cooling_device_register ("LCD" , device, + &video_cooling_ops);if (IS_ERR (device->cooling_dev)) {/* * Set cooling_dev to NULL so we don't crash trying to free it.
drivers/acpi/scan.c +6 -1
@@ -1568,17 +1568,22 @@ static const struct iommu_ops *acpi_iommu_configure_id(struct device *dev,int err;const struct iommu_ops *ops; +/* Serialise to make dev->iommu stable under our potential fwspec */ +mutex_lock (&iommu_probe_device_lock);/* * If we already translated the fwspec there is nothing left to do, * return the iommu_ops. */ ops =acpi_iommu_fwspec_ops (dev); -if (ops) +if (ops) { +mutex_unlock (&iommu_probe_device_lock);return ops; + } err =iort_iommu_configure_id (dev, id_in);if (err && err != -EPROBE_DEFER ) err =viot_iommu_configure (dev); +mutex_unlock (&iommu_probe_device_lock);/* * If we have reason to believe the IOMMU driver missed the initial
drivers/ata/libata-scsi.c +7 -2
@@ -1055,9 +1055,14 @@ int ata_scsi_dev_config(struct scsi_device *sdev, struct ata_device *dev)* Ask the sd driver to issue START STOP UNIT on runtime suspend * and resume and shutdown only. For system level suspend/resume, * devices power state is handled directly by libata EH. +* Given that disks are always spun up on system resume, also +* make sure that the sd driver forces runtime suspended disks +* to be resumed to correctly reflect the power state of the +* device. */ - sdev->manage_runtime_start_stop = true; - sdev->manage_shutdown = true; + sdev->manage_runtime_start_stop =1 ; + sdev->manage_shutdown =1 ; + sdev->force_runtime_start_on_system_start =1 ; }/*
drivers/cpufreq/amd-pstate.c +56 -15
173 lines not on this page · raw message
drivers/cpufreq/imx6q-cpufreq.c +1 -1
@@ -327,7 +327,7 @@ static int imx6ul_opp_check_speed_grading(struct device *dev)imx6x_disable_freq_in_opp (dev,696000000 );if (of_machine_is_compatible ("fsl,imx6ull" )) { -if (val !=OCOTP_CFG3_6ULL_SPEED_792MHZ ) +if (val <OCOTP_CFG3_6ULL_SPEED_792MHZ )imx6x_disable_freq_in_opp (dev,792000000 );if (val !=OCOTP_CFG3_6ULL_SPEED_900MHZ )
drivers/dma-buf/dma-resv.c +1 -1
@@ -301,7 +301,7 @@ void dma_resv_add_fence(struct dma_resv *obj, struct dma_fence *fence,dma_resv_list_entry (fobj, i, obj, &old, &old_usage);if ((old->context == fence->context && old_usage >= usage && -dma_fence_is_later (fence, old)) || +dma_fence_is_later_or_same (fence, old)) ||dma_fence_is_signaled (old)) {dma_resv_list_set (fobj, i, fence, usage);dma_fence_put (old);
drivers/firewire/core-device.c +4 -7
@@ -717,14 +717,11 @@ static void create_units(struct fw_device *device) fw_unit_attributes, &unit->attribute_group); -if (device_register (&unit->device) <0 ) - goto skip_unit; -fw_device_get (device); -continue ; - - skip_unit: -kfree (unit); +if (device_register (&unit->device) <0 ) { +put_device (&unit->device); +continue ; + } } }
drivers/firewire/sbp2.c +3 -3
@@ -1519,9 +1519,9 @@ static int sbp2_scsi_slave_configure(struct scsi_device *sdev) sdev->use_10_for_rw =1 ;if (sbp2_param_exclusive_login) { - sdev->manage_system_start_stop = true; - sdev->manage_runtime_start_stop = true; - sdev->manage_shutdown = true; + sdev->manage_system_start_stop =1 ; + sdev->manage_runtime_start_stop =1 ; + sdev->manage_shutdown =1 ; }if (sdev->type ==TYPE_ROM )
drivers/firmware/efi/unaccepted_memory.c +1 -1
@@ -100,7 +100,7 @@ void accept_memory(phys_addr_t start, phys_addr_t end)* overlap on physical address level. */ list_for_each_entry (entry, &accepting_list, list) { -if (entry->end < range.start) +if (entry->end <= range.start)continue ;if (entry->start >= range.end)continue ;
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +3 -6
@@ -340,14 +340,11 @@ int amdgpu_display_crtc_set_config(struct drm_mode_set *set, adev->have_disp_power_ref = true;return ret; } -/* if we have no active crtcs, then drop the power ref -* we got before +/* if we have no active crtcs, then go to +* drop the power ref we got before */ -if (!active && adev->have_disp_power_ref) { -pm_runtime_put_autosuspend (dev->dev); +if (!active && adev->have_disp_power_ref) adev->have_disp_power_ref = false; - } - out:/* drop the power reference we got coming in here */ pm_runtime_put_autosuspend (dev->dev);
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +2 -0
@@ -2195,6 +2195,8 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,pm_runtime_mark_last_busy (ddev->dev);pm_runtime_put_autosuspend (ddev->dev); +pci_wake_from_d3 (pdev, TRUE); +/* * For runpm implemented via BACO, PMFW will handle the * timing for BACO in and out:
drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c +6 -0
@@ -214,6 +214,12 @@ static bool __get_eeprom_i2c_addr(struct amdgpu_device *adev, control->i2c_address =EEPROM_I2C_MADDR_0 ;return true;case IP_VERSION (13 ,0 ,0 ): +if (strnstr (atom_ctx->vbios_pn,"D707" , +sizeof (atom_ctx->vbios_pn))) + control->i2c_address =EEPROM_I2C_MADDR_0 ; +else + control->i2c_address =EEPROM_I2C_MADDR_4 ; +return true;case IP_VERSION (13 ,0 ,6 ):case IP_VERSION (13 ,0 ,10 ): control->i2c_address =EEPROM_I2C_MADDR_4 ;
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c +9 -1
@@ -83,6 +83,10 @@ MODULE_FIRMWARE("amdgpu/gc_11_0_4_me.bin");MODULE_FIRMWARE ("amdgpu/gc_11_0_4_mec.bin" );MODULE_FIRMWARE ("amdgpu/gc_11_0_4_rlc.bin" ); +static const struct soc15_reg_golden golden_settings_gc_11_0[] = { +SOC15_REG_GOLDEN_VALUE (GC ,0 , regTCP_CNTL,0x20000000 ,0x20000000 ) +}; +static const struct soc15_reg_golden golden_settings_gc_11_0_1[] = {SOC15_REG_GOLDEN_VALUE (GC ,0 , regCGTT_GS_NGG_CLK_CTRL,0x9fff8fff ,0x00000010 ),
@@ -275,6 +279,10 @@ static void gfx_v11_0_init_golden_registers(struct amdgpu_device *adev)default :break ; } +soc15_program_register_sequence (adev, + golden_settings_gc_11_0, + (const u32 )ARRAY_SIZE (golden_settings_gc_11_0)); + } static void gfx_v11_0_write_data_to_reg(struct amdgpu_ring *ring, int eng_sel,
@@ -390,7 +398,7 @@ static int gfx_v11_0_ring_test_ib(struct amdgpu_ring *ring, long timeout) adev->wb.wb[index] =cpu_to_le32 (0xCAFEDEAD ); cpu_ptr = &adev->wb.wb[index]; - r =amdgpu_ib_get (adev,NULL ,16 ,AMDGPU_IB_POOL_DIRECT , &ib); + r =amdgpu_ib_get (adev,NULL ,20 ,AMDGPU_IB_POOL_DIRECT , &ib);if (r) {DRM_ERROR ("amdgpu: failed to get ib (%ld).\n" , r); goto err1;
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +2 -2
@@ -883,8 +883,8 @@ static int gfx_v8_0_ring_test_ib(struct amdgpu_ring *ring, long timeout) gpu_addr = adev->wb.gpu_addr + (index *4 ); adev->wb.wb[index] =cpu_to_le32 (0xCAFEDEAD );memset (&ib,0 ,sizeof (ib)); - r =amdgpu_ib_get (adev,NULL ,16 , -AMDGPU_IB_POOL_DIRECT , &ib); + + r =amdgpu_ib_get (adev,NULL ,20 ,AMDGPU_IB_POOL_DIRECT , &ib);if (r) goto err1;
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +2 -2
@@ -1039,8 +1039,8 @@ static int gfx_v9_0_ring_test_ib(struct amdgpu_ring *ring, long timeout) gpu_addr = adev->wb.gpu_addr + (index *4 ); adev->wb.wb[index] =cpu_to_le32 (0xCAFEDEAD );memset (&ib,0 ,sizeof (ib)); - r =amdgpu_ib_get (adev,NULL ,16 , -AMDGPU_IB_POOL_DIRECT , &ib); + + r =amdgpu_ib_get (adev,NULL ,20 ,AMDGPU_IB_POOL_DIRECT , &ib);if (r) goto err1;
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c +2 -2
@@ -296,8 +296,8 @@ static int gfx_v9_4_3_ring_test_ib(struct amdgpu_ring *ring, long timeout) gpu_addr = adev->wb.gpu_addr + (index *4 ); adev->wb.wb[index] =cpu_to_le32 (0xCAFEDEAD );memset (&ib,0 ,sizeof (ib)); - r =amdgpu_ib_get (adev,NULL ,16 , -AMDGPU_IB_POOL_DIRECT , &ib); + + r =amdgpu_ib_get (adev,NULL ,20 ,AMDGPU_IB_POOL_DIRECT , &ib);if (r) goto err1;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +5 -3
@@ -6236,7 +6236,7 @@ int amdgpu_dm_connector_atomic_set_property(struct drm_connector *connector, dm_new_state->underscan_enable = val; ret =0 ; }else if (property == adev->mode_info.abm_level_property) { - dm_new_state->abm_level = val; + dm_new_state->abm_level = val ?:ABM_LEVEL_IMMEDIATE_DISABLE ; ret =0 ; }
@@ -6281,7 +6281,8 @@ int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector, *val = dm_state->underscan_enable; ret =0 ; }else if (property == adev->mode_info.abm_level_property) { - *val = dm_state->abm_level; + *val = (dm_state->abm_level !=ABM_LEVEL_IMMEDIATE_DISABLE ) ? + dm_state->abm_level :0 ; ret =0 ; }
@@ -6354,7 +6355,8 @@ void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector) state->pbn =0 ;if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) - state->abm_level = amdgpu_dm_abm_level; + state->abm_level = amdgpu_dm_abm_level ?: +ABM_LEVEL_IMMEDIATE_DISABLE ;__drm_atomic_helper_connector_reset (connector, &state->base); }
drivers/gpu/drm/amd/display/dc/core/dc.c +21 -0
@@ -5254,3 +5254,24 @@ void dc_query_current_properties(struct dc *dc, struct dc_current_properties *pr properties->cursor_size_limit = subvp_in_use ?64 : dc->caps.max_cursor_size; } +/** +***************************************************************************** +* dc_set_edp_power() - DM controls eDP power to be ON/OFF +* +* Called when DM wants to power on/off eDP. +* Only work on links with flag skip_implict_edp_power_control is set. +* +***************************************************************************** +*/ +void dc_set_edp_power (const struct dc *dc,struct dc_link *edp_link, +bool powerOn) +{ +if (edp_link->connector_signal !=SIGNAL_TYPE_EDP ) +return ; + +if (edp_link->skip_implict_edp_power_control == false) +return ; + + edp_link->dc->link_srv->edp_set_panel_power (edp_link, powerOn); +} +
drivers/gpu/drm/amd/display/dc/dc.h +4 -1
@@ -1538,7 +1538,6 @@ struct dc_link {enum edp_revision edp_revision;union dpcd_sink_ext_caps dpcd_sink_ext_caps; -struct backlight_settings backlight_settings;struct psr_settings psr_settings;struct replay_settings replay_settings;
@@ -1578,6 +1577,7 @@ struct dc_link {struct phy_state phy_state;// BW ALLOCATON USB4 ONLY struct dc_dpia_bw_alloc dpia_bw_alloc_config; +bool skip_implict_edp_power_control; };/* Return an enumerated dc_link.
@@ -1597,6 +1597,9 @@ void dc_get_edp_links(const struct dc *dc,struct dc_link **edp_links, int *edp_num); +void dc_set_edp_power (const struct dc *dc,struct dc_link *edp_link, +bool powerOn); +/* The function initiates detection handshake over the given link. It first * determines if there are display connections over the link. If so it initiates * detection protocols supported by the connected receiver device. The function
drivers/gpu/drm/amd/display/dc/dc_stream.h +0 -1
@@ -302,7 +302,6 @@ struct dc_stream_state {bool vblank_synchronized;bool fpo_in_use;struct mall_stream_config mall_stream_config; -bool skip_edp_power_down; };#define ABM_LEVEL_IMMEDIATE_DISABLE 255
drivers/gpu/drm/amd/display/dc/dc_types.h +0 -4
@@ -1003,10 +1003,6 @@ struct link_mst_stream_allocation_table {struct link_mst_stream_allocation stream_allocations[MAX_CONTROLLER_NUM ]; }; -struct backlight_settings { -uint32_t backlight_millinits; -}; -/* PSR feature flags */ struct psr_settings {bool psr_feature_enabled;// PSR is supported by sink
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +1 -1
@@ -1226,7 +1226,7 @@ void dce110_blank_stream(struct pipe_ctx *pipe_ctx)struct dce_hwseq *hws = link->dc->hwseq;if (link->local_sink && link->local_sink->sink_signal ==SIGNAL_TYPE_EDP ) { -if (!stream->skip_edp_power_down) +if (!link->skip_implict_edp_power_control) hws->funcs.edp_backlight_control (link, false); link->dc->hwss.set_abm_immediate_disable (pipe_ctx); }
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c +2 -1
@@ -476,7 +476,8 @@ void dcn314_disable_link_output(struct dc_link *link,struct dmcu *dmcu = dc->res_pool->dmcu;if (signal ==SIGNAL_TYPE_EDP && - link->dc->hwss.edp_backlight_control) + link->dc->hwss.edp_backlight_control && + !link->skip_implict_edp_power_control) link->dc->hwss.edp_backlight_control (link, false);else if (dmcu !=NULL && dmcu->funcs->lock_phy) dmcu->funcs->lock_phy (dmcu);
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c +1 -1
@@ -869,7 +869,7 @@ static const struct dc_plane_cap plane_cap = {static const struct dc_debug_options debug_defaults_drv = { .disable_z10 = false, .enable_z9_disable_interface = true, - .minimum_z8_residency_time =2000 , + .minimum_z8_residency_time =2100 , .psr_skip_crtc_disable = true, .replay_skip_crtc_disabled = true, .disable_dmcu = true,
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c +2 -4
@@ -486,8 +486,7 @@ bool dcn32_set_mcm_luts(if (plane_state->blend_tf->type ==TF_TYPE_HWPWL ) lut_params = &plane_state->blend_tf->pwl;else if (plane_state->blend_tf->type ==TF_TYPE_DISTRIBUTED_POINTS ) { -cm_helper_translate_curve_to_hw_format (plane_state->ctx, - plane_state->blend_tf, +cm3_helper_translate_curve_to_hw_format (plane_state->blend_tf, &dpp_base->regamma_params, false); lut_params = &dpp_base->regamma_params; }
@@ -501,8 +500,7 @@ bool dcn32_set_mcm_luts(else if (plane_state->in_shaper_func->type ==TF_TYPE_DISTRIBUTED_POINTS ) {// TODO: dpp_base replace ASSERT (false); -cm_helper_translate_curve_to_hw_format (plane_state->ctx, - plane_state->in_shaper_func, +cm3_helper_translate_curve_to_hw_format (plane_state->in_shaper_func, &dpp_base->shaper_params, true); lut_params = &dpp_base->shaper_params; }
drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c +1 -14
@@ -948,10 +948,8 @@ static enum dcn_zstate_support_state decide_zstate_support(struct dc *dc, struc {int plane_count;int i; -unsigned int min_dst_y_next_start_us; plane_count =0 ; - min_dst_y_next_start_us =0 ;for (i =0 ; i < dc->res_pool->pipe_count; i++) {if (context->res_ctx.pipe_ctx[i].plane_state) plane_count++;
@@ -973,26 +971,15 @@ static enum dcn_zstate_support_state decide_zstate_support(struct dc *dc, strucelse if (context->stream_count ==1 && context->streams[0 ]->signal ==SIGNAL_TYPE_EDP ) {struct dc_link *link = context->streams[0 ]->sink->link;struct dc_stream_status *stream_status = &context->stream_status[0 ]; -struct dc_stream_state *current_stream = context->streams[0 ];int minmum_z8_residency = dc->debug.minimum_z8_residency_time >0 ? dc->debug.minimum_z8_residency_time :1000 ;bool allow_z8 = context->bw_ctx.dml.vba.StutterPeriod > (double )minmum_z8_residency;bool is_pwrseq0 = link->link_index ==0 ; -bool isFreesyncVideo; - - isFreesyncVideo = current_stream->adjust.v_total_min == current_stream->adjust.v_total_max; - isFreesyncVideo = isFreesyncVideo && current_stream->timing.v_total < current_stream->adjust.v_total_min; -for (i =0 ; i < dc->res_pool->pipe_count; i++) { -if (context->res_ctx.pipe_ctx[i].stream == current_stream && isFreesyncVideo) { - min_dst_y_next_start_us = context->res_ctx.pipe_ctx[i].dlg_regs.min_dst_y_next_start_us; -break ; - } - }/* Don't support multi-plane configurations */ if (stream_status->plane_count >1 )return DCN_ZSTATE_SUPPORT_DISALLOW ; -if (is_pwrseq0 && (context->bw_ctx.dml.vba.StutterPeriod >5000.0 || min_dst_y_next_start_us >5000 )) +if (is_pwrseq0 && context->bw_ctx.dml.vba.StutterPeriod >5000.0 )return DCN_ZSTATE_SUPPORT_ALLOW ;else if (is_pwrseq0 && link->psr_settings.psr_version ==DC_PSR_VERSION_1 && !link->panel_config.psr.disable_psr)return allow_z8 ?DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY :DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY ;
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c +2 -1
@@ -1964,6 +1964,7 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context,int i, pipe_idx, vlevel_temp =0 ;double dcfclk = dcn3_2_soc.clock_limits[0 ].dcfclk_mhz;double dcfclk_from_validation = context->bw_ctx.dml.vba.DCFCLKState[vlevel][context->bw_ctx.dml.vba.maxMpcComb]; +double dram_speed_from_validation = context->bw_ctx.dml.vba.DRAMSpeed;double dcfclk_from_fw_based_mclk_switching = dcfclk_from_validation;bool pstate_en = context->bw_ctx.dml.vba.DRAMClockChangeSupport[vlevel][context->bw_ctx.dml.vba.maxMpcComb] != dm_dram_clock_change_unsupported;
@@ -2151,7 +2152,7 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context, }if (dc->clk_mgr->bw_params->wm_table.nv_entries[WM_C ].valid) { - min_dram_speed_mts = context->bw_ctx.dml.vba.DRAMSpeed; + min_dram_speed_mts = dram_speed_from_validation; min_dram_speed_mts_margin =160 ; context->bw_ctx.dml.soc.dram_clock_change_latency_us =
drivers/gpu/drm/amd/display/dc/inc/link.h +1 -0
@@ -295,6 +295,7 @@ struct link_service {bool (*edp_receiver_ready_T9)(struct dc_link *link);bool (*edp_receiver_ready_T7)(struct dc_link *link);bool (*edp_power_alpm_dpcd_enable)(struct dc_link *link,bool enable); +void (*edp_set_panel_power)(struct dc_link *link,bool powerOn);/*************************** DP CTS ************************************/
drivers/gpu/drm/amd/display/dc/link/link_detection.c +7 -1
@@ -876,7 +876,7 @@ static bool detect_link_and_local_sink(struct dc_link *link, (link->dpcd_sink_ext_caps.bits.oled == 1)) {dpcd_set_source_specific_data (link);msleep (post_oui_delay); -set_cached_brightness_aux (link); +set_default_brightness_aux (link); }return true;
@@ -1166,6 +1166,12 @@ static bool detect_link_and_local_sink(struct dc_link *link,dm_helpers_init_panel_settings (dc_ctx, &link->panel_config, sink);// Override dc_panel_config if system has specific settings dm_helpers_override_panel_settings (dc_ctx, &link->panel_config); + +//sink only can use supported link rate table, we are foreced to enable it +if (link->reported_link_cap.link_rate ==LINK_RATE_UNKNOWN ) + link->panel_config.ilr.optimize_edp_link_rate = true; +if (edp_is_ilr_optimization_enabled (link)) + link->reported_link_cap.link_rate =get_max_link_rate_from_ilr_table (link); } }else {
drivers/gpu/drm/amd/display/dc/link/link_dpms.c +4 -7
@@ -1930,7 +1930,7 @@ static void disable_link_dp(struct dc_link *link,dp_disable_link_phy (link, link_res, signal);if (link->connector_signal ==SIGNAL_TYPE_EDP ) { -if (!link->dc->config.edp_no_power_sequencing) +if (!link->skip_implict_edp_power_control) link->dc->hwss.edp_power_control (link, false); }
@@ -2140,8 +2140,7 @@ static enum dc_status enable_link_dp(struct dc_state *state,if (link->dpcd_sink_ext_caps.bits.oled ==1 || link->dpcd_sink_ext_caps.bits.sdr_aux_backlight_control ==1 || link->dpcd_sink_ext_caps.bits.hdr_aux_backlight_control ==1 ) { -set_cached_brightness_aux (link); - +set_default_brightness_aux (link);if (link->dpcd_sink_ext_caps.bits.oled ==1 )msleep (bl_oled_enable_delay);edp_backlight_enable_aux (link, true);
@@ -2219,7 +2218,7 @@ static enum dc_status enable_link(* link settings. Need to call disable first before enabling at * new link settings. */ -if (link->link_status.link_active && !stream->skip_edp_power_down) +if (link->link_status.link_active)disable_link (link, &pipe_ctx->link_res, pipe_ctx->stream->signal);switch (pipe_ctx->stream->signal) {
@@ -2338,9 +2337,7 @@ void link_set_dpms_off(struct pipe_ctx *pipe_ctx) dc->hwss.disable_stream (pipe_ctx); }else { dc->hwss.disable_stream (pipe_ctx); -if (!pipe_ctx->stream->skip_edp_power_down) { -disable_link (pipe_ctx->stream->link, &pipe_ctx->link_res, pipe_ctx->stream->signal); - } +disable_link (pipe_ctx->stream->link, &pipe_ctx->link_res, pipe_ctx->stream->signal); }if (pipe_ctx->stream->timing.flags.DSC) {
drivers/gpu/drm/amd/display/dc/link/link_factory.c +1 -0
@@ -223,6 +223,7 @@ static void construct_link_service_edp_panel_control(struct link_service *link_s link_srv->edp_receiver_ready_T9 = edp_receiver_ready_T9; link_srv->edp_receiver_ready_T7 = edp_receiver_ready_T7; link_srv->edp_power_alpm_dpcd_enable = edp_power_alpm_dpcd_enable; + link_srv->edp_set_panel_power = edp_set_panel_power; }/* link dp cts implements dp compliance test automation protocols and manual
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c +4 -10
@@ -707,8 +707,7 @@ bool edp_decide_link_settings(struct dc_link *link,* edp_supported_link_rates_count is only valid for eDP v1.4 or higher. * Per VESA eDP spec, "The DPCD revision for eDP v1.4 is 13h" */ -if (link->dpcd_caps.dpcd_rev.raw <DPCD_REV_13 || - link->dpcd_caps.edp_supported_link_rates_count ==0 ) { +if (!edp_is_ilr_optimization_enabled (link)) { *link_setting = link->verified_link_cap;return true; }
@@ -772,8 +771,7 @@ bool decide_edp_link_settings_with_dsc(struct dc_link *link,* edp_supported_link_rates_count is only valid for eDP v1.4 or higher. * Per VESA eDP spec, "The DPCD revision for eDP v1.4 is 13h" */ -if ((link->dpcd_caps.dpcd_rev.raw <DPCD_REV_13 || - link->dpcd_caps.edp_supported_link_rates_count ==0 )) { +if (!edp_is_ilr_optimization_enabled (link)) {/* for DSC enabled case, we search for minimum lane count */ memset (&initial_link_setting,0 ,sizeof (initial_link_setting)); initial_link_setting.lane_count =LANE_COUNT_ONE ;
@@ -1938,9 +1936,7 @@ void detect_edp_sink_caps(struct dc_link *link)* edp_supported_link_rates_count is only valid for eDP v1.4 or higher. * Per VESA eDP spec, "The DPCD revision for eDP v1.4 is 13h" */ -if (link->dpcd_caps.dpcd_rev.raw >=DPCD_REV_13 && - (link->panel_config.ilr.optimize_edp_link_rate || - link->reported_link_cap.link_rate ==LINK_RATE_UNKNOWN )) { +if (link->dpcd_caps.dpcd_rev.raw >=DPCD_REV_13 ) {// Read DPCD 00010h - 0001Fh 16 bytes at one shot core_link_read_dpcd (link,DP_SUPPORTED_LINK_RATES , supported_link_rates,sizeof (supported_link_rates));
@@ -1958,12 +1954,10 @@ void detect_edp_sink_caps(struct dc_link *link) link_rate =linkRateInKHzToLinkRateMultiplier (link_rate_in_khz); link->dpcd_caps.edp_supported_link_rates[link->dpcd_caps.edp_supported_link_rates_count] = link_rate; link->dpcd_caps.edp_supported_link_rates_count++; - -if (link->reported_link_cap.link_rate < link_rate) - link->reported_link_cap.link_rate = link_rate; } } } +core_link_read_dpcd (link,DP_EDP_BACKLIGHT_ADJUSTMENT_CAP , &backlight_adj_cap,sizeof (backlight_adj_cap));
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c +2 -1
@@ -73,7 +73,8 @@ void dp_disable_link_phy(struct dc_link *link, {struct dc *dc = link->ctx->dc; -if (!link->wa_flags.dp_keep_receiver_powered) +if (!link->wa_flags.dp_keep_receiver_powered && + !link->skip_implict_edp_power_control)dpcd_write_rx_power_ctrl (link, false); dc->hwss.disable_link_output (link, link_res, signal);
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c +3 -3
@@ -115,7 +115,7 @@ static enum link_training_result perform_fixed_vs_pe_nontransparent_training_seq lt_settings->cr_pattern_time =16000 ;/* Fixed VS/PE specific: Toggle link rate */ - apply_toggle_rate_wa = (link->vendor_specific_lttpr_link_rate_wa == target_rate); + apply_toggle_rate_wa = ((link->vendor_specific_lttpr_link_rate_wa == target_rate) || (link->vendor_specific_lttpr_link_rate_wa ==0 )); target_rate =get_dpcd_link_rate (<_settings->link_settings); toggle_rate = (target_rate ==0x6 ) ?0xA :0x6 ;
@@ -271,7 +271,7 @@ enum link_training_result dp_perform_fixed_vs_pe_training_sequence_legacy(/* Vendor specific: Toggle link rate */ toggle_rate = (rate ==0x6 ) ?0xA :0x6 ; -if (link->vendor_specific_lttpr_link_rate_wa == rate) { +if (link->vendor_specific_lttpr_link_rate_wa == rate || link->vendor_specific_lttpr_link_rate_wa ==0 ) { core_link_write_dpcd( link, DP_LINK_BW_SET,
@@ -617,7 +617,7 @@ enum link_training_result dp_perform_fixed_vs_pe_training_sequence(/* Vendor specific: Toggle link rate */ toggle_rate = (rate ==0x6 ) ?0xA :0x6 ; -if (link->vendor_specific_lttpr_link_rate_wa == rate) { +if (link->vendor_specific_lttpr_link_rate_wa == rate || link->vendor_specific_lttpr_link_rate_wa ==0 ) { core_link_write_dpcd( link, DP_LINK_BW_SET,
drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c +49 -13
99 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.h +3 -1
@@ -30,7 +30,6 @@enum dp_panel_mode dp_get_panel_mode (struct dc_link *link);void dp_set_panel_mode (struct dc_link *link,enum dp_panel_mode panel_mode);bool set_default_brightness_aux (struct dc_link *link); -bool set_cached_brightness_aux (struct dc_link *link);void edp_panel_backlight_power_on (struct dc_link *link,bool wait_for_hpd);int edp_get_backlight_level (const struct dc_link *link); bool edp_get_backlight_level_nits(struct dc_link *link,
@@ -64,9 +63,12 @@ bool edp_get_replay_state(const struct dc_link *link, uint64_t *state);bool edp_wait_for_t12 (struct dc_link *link);bool edp_is_ilr_optimization_required (struct dc_link *link,struct dc_crtc_timing *crtc_timing); +bool edp_is_ilr_optimization_enabled (struct dc_link *link); +enum dc_link_rate get_max_link_rate_from_ilr_table (struct dc_link *link);bool edp_backlight_enable_aux (struct dc_link *link,bool enable);void edp_add_delay_for_T9 (struct dc_link *link);bool edp_receiver_ready_T9 (struct dc_link *link);bool edp_receiver_ready_T7 (struct dc_link *link);bool edp_power_alpm_dpcd_enable (struct dc_link *link,bool enable); +void edp_set_panel_power (struct dc_link *link,bool powerOn);#endif /* __DC_LINK_EDP_POWER_CONTROL_H__ */
drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c +1 -0
@@ -997,6 +997,7 @@ enum dmub_status dmub_srv_wait_for_inbox0_ack(struct dmub_srv *dmub, uint32_t ti ack = dmub->hw_funcs.read_inbox0_ack_register (dmub);if (ack)return DMUB_STATUS_OK ; +udelay (1 ); }return DMUB_STATUS_TIMEOUT ; }
drivers/gpu/drm/amd/include/asic_reg/gc/gc_11_0_0_offset.h +2 -0
@@ -6369,6 +6369,8 @@#define regTCP_INVALIDATE_BASE_IDX 1#define regTCP_STATUS 0x19a1#define regTCP_STATUS_BASE_IDX 1 +#define regTCP_CNTL 0x19a2 +#define regTCP_CNTL_BASE_IDX 1#define regTCP_CNTL2 0x19a3#define regTCP_CNTL2_BASE_IDX 1#define regTCP_DEBUG_INDEX 0x19a5
drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c +4 -1
@@ -257,8 +257,11 @@ static int aldebaran_tables_init(struct smu_context *smu) } smu_table->ecc_table =kzalloc (tables[SMU_TABLE_ECCINFO ].size,GFP_KERNEL ); -if (!smu_table->ecc_table) +if (!smu_table->ecc_table) { +kfree (smu_table->metrics_table); +kfree (smu_table->gpu_metrics_table);return -ENOMEM ; + }return 0 ; }
drivers/gpu/drm/i915/display/intel_dp.c +22 -6
@@ -5517,8 +5517,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,* (eg. Acer Chromebook C710), so we'll check it only if multiple * ports are attempting to use the same AUX CH, according to VBT. */ -if (intel_bios_dp_has_shared_aux_ch (encoder->devdata) && - !intel_digital_port_connected (encoder)) { +if (intel_bios_dp_has_shared_aux_ch (encoder->devdata)) {/* * If this fails, presume the DPCD answer came * from some other port using the same AUX CH.
@@ -5526,10 +5525,27 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,* FIXME maybe cleaner to check this before the * DPCD read? Would need sort out the VDD handling... */ -drm_info (&dev_priv->drm, -"[ENCODER:%d:%s] HPD is down, disabling eDP\n" , - encoder->base.base.id, encoder->base.name); - goto out_vdd_off; +if (!intel_digital_port_connected (encoder)) { +drm_info (&dev_priv->drm, +"[ENCODER:%d:%s] HPD is down, disabling eDP\n" , + encoder->base.base.id, encoder->base.name); + goto out_vdd_off; + } + +/* +* Unfortunately even the HPD based detection fails on +* eg. Asus B360M-A (CFL+CNP), so as a last resort fall +* back to checking for a VGA branch device. Only do this +* on known affected platforms to minimize false positives. +*/ +if (DISPLAY_VER (dev_priv) ==9 &&drm_dp_is_branch (intel_dp->dpcd) && + (intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT ] &DP_DWN_STRM_PORT_TYPE_MASK ) == +DP_DWN_STRM_PORT_TYPE_ANALOG ) { +drm_info (&dev_priv->drm, +"[ENCODER:%d:%s] VGA converter detected, disabling eDP\n" , + encoder->base.base.id, encoder->base.name); + goto out_vdd_off; + } }mutex_lock (&dev_priv->drm.mode_config.mutex);
drivers/gpu/drm/i915/gt/intel_engine_user.c +22 -17
@@ -42,12 +42,15 @@ void intel_engine_add_user(struct intel_engine_cs *engine) (struct llist_head *)&engine->i915->uabi_engines); } -static const u8 uabi_classes[] = { +#define I915_NO_UABI_CLASS ((u16)(-1)) + +static const u16 uabi_classes[] = { [RENDER_CLASS ] =I915_ENGINE_CLASS_RENDER , [COPY_ENGINE_CLASS ] =I915_ENGINE_CLASS_COPY , [VIDEO_DECODE_CLASS ] =I915_ENGINE_CLASS_VIDEO , [VIDEO_ENHANCEMENT_CLASS ] =I915_ENGINE_CLASS_VIDEO_ENHANCE , [COMPUTE_CLASS ] =I915_ENGINE_CLASS_COMPUTE , + [OTHER_CLASS ] =I915_NO_UABI_CLASS ,/* Not exposed to users, no uabi class. */ }; static int engine_cmp(void *priv, const struct list_head *A,
@@ -202,6 +205,7 @@ static void engine_rename(struct intel_engine_cs *engine, const char *name, u16void intel_engines_driver_register (struct drm_i915_private *i915) { +u16 name_instance, other_instance =0 ;struct legacy_ring ring = {};struct list_head *it, *next;struct rb_node **p, *prev;
@@ -219,27 +223,28 @@ void intel_engines_driver_register(struct drm_i915_private *i915)if (intel_gt_has_unrecoverable_error (engine->gt))continue ;/* ignore incomplete engines */ -/* -* We don't want to expose the GSC engine to the users, but we -* still rename it so it is easier to identify in the debug logs -*/ -if (engine->id ==GSC0 ) { -engine_rename (engine,"gsc" ,0 ); -continue ; - } -GEM_BUG_ON (engine->class >=ARRAY_SIZE (uabi_classes)); engine->uabi_class = uabi_classes[engine->class]; +if (engine->uabi_class ==I915_NO_UABI_CLASS ) { + name_instance = other_instance++; + }else { +GEM_BUG_ON (engine->uabi_class >= +ARRAY_SIZE (i915->engine_uabi_class_count)); + name_instance = + i915->engine_uabi_class_count[engine->uabi_class]++; + } + engine->uabi_instance = name_instance; -GEM_BUG_ON (engine->uabi_class >= -ARRAY_SIZE (i915->engine_uabi_class_count)); - engine->uabi_instance = - i915->engine_uabi_class_count[engine->uabi_class]++; - -/* Replace the internal name with the final user facing name */ +/* +* Replace the internal name with the final user and log facing +* name. +*/ engine_rename (engine,intel_engine_class_repr (engine->class), - engine->uabi_instance); + name_instance); + +if (engine->uabi_class ==I915_NO_UABI_CLASS ) +continue ;rb_link_node (&engine->uabi_node, prev, p);rb_insert_color (&engine->uabi_node, &i915->uabi_engines);
drivers/gpu/drm/nouveau/nouveau_bo.c +3 -2
@@ -318,8 +318,9 @@ nouveau_bo_alloc(struct nouveau_cli *cli, u64 *size, int *align, u32 domain, (!vmm->page[i].host || vmm->page[i].shift > PAGE_SHIFT)) continue; -if (pi <0 ) - pi = i; +/* pick the last one as it will be smallest. */ + pi = i; +/* Stop once the buffer is larger than the current page size. */ if (*size >=1ULL << vmm->page[i].shift)break ;
drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c +1 -0
@@ -2104,6 +2104,7 @@ static const struct panel_desc starry_qfh032011_53g_desc = { .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_LPM, .init_cmds = starry_qfh032011_53g_init_cmd, + .lp11_before_reset = true, };static const struct drm_display_mode starry_himax83102_j02_default_mode = {
drivers/gpu/drm/panel/panel-novatek-nt36523.c +2 -2
@@ -1266,9 +1266,9 @@ static int nt36523_probe(struct mipi_dsi_device *dsi)return dev_err_probe (dev, -EPROBE_DEFER ,"cannot get secondary DSI host\n" ); pinfo->dsi[1 ] =mipi_dsi_device_register_full (dsi1_host, info); -if (!pinfo->dsi[1 ]) { +if (IS_ERR (pinfo->dsi[1 ])) {dev_err (dev,"cannot get secondary DSI device\n" ); -return -ENODEV ; +return PTR_ERR (pinfo->dsi[1 ]); } }
drivers/iommu/intel/dmar.c +18 -0
@@ -1522,6 +1522,15 @@ void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 pfsid, {struct qi_desc desc; +/* +* VT-d spec, section 4.3: +* +* Software is recommended to not submit any Device-TLB invalidation +* requests while address remapping hardware is disabled. +*/ +if (!(iommu->gcmd &DMA_GCMD_TE )) +return ; +if (mask) { addr |= (1ULL << (VTD_PAGE_SHIFT + mask -1 )) -1 ; desc.qw1 =QI_DEV_IOTLB_ADDR (addr) |QI_DEV_IOTLB_SIZE ;
@@ -1587,6 +1596,15 @@ void qi_flush_dev_iotlb_pasid(struct intel_iommu *iommu, u16 sid, u16 pfsid,unsigned long mask =1UL << (VTD_PAGE_SHIFT + size_order -1 );struct qi_desc desc = {.qw1 =0 , .qw2 =0 , .qw3 =0 }; +/* +* VT-d spec, section 4.3: +* +* Software is recommended to not submit any Device-TLB invalidation +* requests while address remapping hardware is disabled. +*/ +if (!(iommu->gcmd &DMA_GCMD_TE )) +return ; + desc.qw0 =QI_DEV_EIOTLB_PASID (pasid) |QI_DEV_EIOTLB_SID (sid) |QI_DEV_EIOTLB_QDEP (qdep) |QI_DEIOTLB_TYPE |QI_DEV_IOTLB_PFSID (pfsid);
drivers/iommu/intel/iommu.c +5 -4
@@ -2487,7 +2487,8 @@ static int dmar_domain_attach_device(struct dmar_domain *domain,return ret; } -iommu_enable_pci_caps (info); +if (sm_supported (info->iommu) || !domain_type_is_si (info->domain)) +iommu_enable_pci_caps (info);return 0 ; }
@@ -3922,8 +3923,8 @@ static int domain_context_clear_one_cb(struct pci_dev *pdev, u16 alias, void *op*/ static void domain_context_clear (struct device_domain_info *info) { -if (!info->iommu || !info->dev || !dev_is_pci (info->dev)) -return ; +if (!dev_is_pci (info->dev)) +domain_context_clear_one (info, info->bus, info->devfn);pci_for_each_dma_alias (to_pci_dev (info->dev), &domain_context_clear_one_cb, info);
@@ -4928,7 +4929,7 @@ static void quirk_igfx_skip_te_disable(struct pci_dev *dev) ver = (dev->device >>8 ) &0xff ;if (ver !=0x45 && ver !=0x46 && ver !=0x4c && ver !=0x4e && ver !=0x8a && ver !=0x98 && - ver !=0x9a && ver !=0xa7 ) + ver !=0x9a && ver !=0xa7 && ver !=0x7d )return ;if (risky_device (dev))
drivers/iommu/intel/svm.c +26 -0
@@ -216,6 +216,27 @@ static void intel_flush_svm_range(struct intel_svm *svm, unsigned long address,rcu_read_unlock (); } +static void intel_flush_svm_all (struct intel_svm *svm) +{ +struct device_domain_info *info; +struct intel_svm_dev *sdev; + +rcu_read_lock (); +list_for_each_entry_rcu (sdev, &svm->devs, list) { + info =dev_iommu_priv_get (sdev->dev); + +qi_flush_piotlb (sdev->iommu, sdev->did, svm->pasid,0 ,-1UL ,0 ); +if (info->ats_enabled) { +qi_flush_dev_iotlb_pasid (sdev->iommu, sdev->sid, info->pfsid, + svm->pasid, sdev->qdep, +0 ,64 -VTD_PAGE_SHIFT ); +quirk_extra_dev_tlb_flush (info,0 ,64 -VTD_PAGE_SHIFT , + svm->pasid, sdev->qdep); + } + } +rcu_read_unlock (); +} +/* Pages have been freed at this point */ static void intel_arch_invalidate_secondary_tlbs(struct mmu_notifier *mn, struct mm_struct *mm,
@@ -223,6 +244,11 @@ static void intel_arch_invalidate_secondary_tlbs(struct mmu_notifier *mn, { struct intel_svm *svm = container_of(mn, struct intel_svm, notifier); +if (start ==0 && end ==-1UL ) { +intel_flush_svm_all (svm); +return ; + } +intel_flush_svm_range (svm, start, (end - start +PAGE_SIZE -1 ) >>VTD_PAGE_SHIFT ,0 ); }
drivers/iommu/iommu.c +10 -10
@@ -479,11 +479,12 @@ static void iommu_deinit_device(struct device *dev)dev_iommu_free (dev); } +DEFINE_MUTEX (iommu_probe_device_lock); +static int __iommu_probe_device (struct device *dev,struct list_head *group_list) {const struct iommu_ops *ops = dev->bus->iommu_ops;struct iommu_group *group; -static DEFINE_MUTEX (iommu_probe_device_lock);struct group_device *gdev;int ret;
@@ -496,17 +497,15 @@ static int __iommu_probe_device(struct device *dev, struct list_head *group_list* probably be able to use device_lock() here to minimise the scope, * but for now enforcing a simple global ordering is fine. */ -mutex_lock (&iommu_probe_device_lock); +lockdep_assert_held (&iommu_probe_device_lock);/* Device is probed already if in a group */ -if (dev->iommu_group) { - ret =0 ; - goto out_unlock; - } +if (dev->iommu_group) +return 0 ; ret =iommu_init_device (dev, ops);if (ret) - goto out_unlock; +return ret; group = dev->iommu_group; gdev =iommu_group_alloc_device (group, dev);
@@ -542,7 +541,6 @@ static int __iommu_probe_device(struct device *dev, struct list_head *group_listlist_add_tail (&group->entry, group_list); }mutex_unlock (&group->mutex); -mutex_unlock (&iommu_probe_device_lock);if (dev_is_pci (dev))iommu_dma_set_pci_32bit_workaround (dev);
@@ -556,8 +554,6 @@ static int __iommu_probe_device(struct device *dev, struct list_head *group_listiommu_deinit_device (dev);mutex_unlock (&group->mutex);iommu_group_put (group); -out_unlock: -mutex_unlock (&iommu_probe_device_lock);return ret; }
@@ -567,7 +563,9 @@ int iommu_probe_device(struct device *dev)const struct iommu_ops *ops;int ret; +mutex_lock (&iommu_probe_device_lock); ret =__iommu_probe_device (dev,NULL ); +mutex_unlock (&iommu_probe_device_lock);if (ret)return ret;
@@ -1783,7 +1781,9 @@ static int probe_iommu_group(struct device *dev, void *data)struct list_head *group_list = data;int ret; +mutex_lock (&iommu_probe_device_lock); ret =__iommu_probe_device (dev, group_list); +mutex_unlock (&iommu_probe_device_lock);if (ret == -ENODEV ) ret =0 ;
drivers/iommu/of_iommu.c +10 -4
@@ -112,16 +112,20 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, const u32 *id) {const struct iommu_ops *ops =NULL ; -struct iommu_fwspec *fwspec =dev_iommu_fwspec_get (dev); +struct iommu_fwspec *fwspec;int err =NO_IOMMU ;if (!master_np)return NULL ; +/* Serialise to make dev->iommu stable under our potential fwspec */ +mutex_lock (&iommu_probe_device_lock); + fwspec =dev_iommu_fwspec_get (dev);if (fwspec) { -if (fwspec->ops) +if (fwspec->ops) { +mutex_unlock (&iommu_probe_device_lock);return fwspec->ops; - + }/* In the deferred case, start again from scratch */ iommu_fwspec_free (dev); }
@@ -155,6 +159,8 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, fwspec =dev_iommu_fwspec_get (dev); ops = fwspec->ops; } +mutex_unlock (&iommu_probe_device_lock); +/* * If we have reason to believe the IOMMU driver missed the initial * probe for dev, replay it to get things in order.
@@ -191,7 +197,7 @@ iommu_resv_region_get_type(struct device *dev,if (start == phys->start && end == phys->end)return IOMMU_RESV_DIRECT ; -dev_warn (dev,"treating non-direct mapping [%pr] -> [%pap-%pap] as reservation\n" , &phys, +dev_warn (dev,"treating non-direct mapping [%pr] -> [%pap-%pap] as reservation\n" , phys, &start, &end);return IOMMU_RESV_RESERVED ; }
drivers/leds/led-class.c +0 -14
@@ -75,19 +75,6 @@ static ssize_t max_brightness_show(struct device *dev, }static DEVICE_ATTR_RO (max_brightness); -static ssize_t color_show (struct device *dev, -struct device_attribute *attr,char *buf) -{ -const char *color_text ="invalid" ; -struct led_classdev *led_cdev =dev_get_drvdata (dev); - -if (led_cdev->color <LED_COLOR_ID_MAX ) - color_text = led_colors[led_cdev->color]; - -return sysfs_emit (buf,"%s\n" , color_text); -} -static DEVICE_ATTR_RO (color); -#ifdef CONFIG_LEDS_TRIGGERS static BIN_ATTR(trigger, 0644, led_trigger_read, led_trigger_write, 0); static struct bin_attribute *led_trigger_bin_attrs[] = {
@@ -102,7 +89,6 @@ static const struct attribute_group led_trigger_group = {static struct attribute *led_class_attrs[] = { &dev_attr_brightness.attr, &dev_attr_max_brightness.attr, - &dev_attr_color.attr,NULL , };
drivers/md/bcache/btree.c +1 -1
@@ -1510,7 +1510,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,bch_keylist_free (&keylist);for (i =0 ; i < nodes; i++) -if (!IS_ERR (new_nodes[i])) { +if (!IS_ERR_OR_NULL (new_nodes[i])) {btree_node_free (new_nodes[i]);rw_unlock (true, new_nodes[i]); }
drivers/md/dm-verity-fec.c +2 -1
@@ -24,7 +24,8 @@ bool verity_fec_is_enabled(struct dm_verity *v)*/ static inline struct dm_verity_fec_io *fec_io (struct dm_verity_io *io) { -return (struct dm_verity_fec_io *)verity_io_digest_end (io->v, io); +return (struct dm_verity_fec_io *) + ((char *)io + io->v->ti->per_io_data_size -sizeof (struct dm_verity_fec_io )); }/*
drivers/md/dm-verity-target.c +5 -2
@@ -642,7 +642,6 @@ static void verity_work(struct work_struct *w) io->in_tasklet = false; -verity_fec_init_io (io);verity_finish_io (io,errno_to_blk_status (verity_verify_io (io))); }
@@ -668,7 +667,9 @@ static void verity_end_io(struct bio *bio)struct dm_verity_io *io = bio->bi_private;if (bio->bi_status && - (!verity_fec_is_enabled (io->v) ||verity_is_system_shutting_down ())) { + (!verity_fec_is_enabled (io->v) || +verity_is_system_shutting_down () || + (bio->bi_opf &REQ_RAHEAD ))) {verity_finish_io (io, bio->bi_status);return ; }
@@ -792,6 +793,8 @@ static int verity_map(struct dm_target *ti, struct bio *bio) bio->bi_private = io; io->iter = bio->bi_iter; +verity_fec_init_io (io); +verity_submit_prefetch (v, io);submit_bio_noacct (bio);
drivers/md/dm-verity.h +0 -6
@@ -115,12 +115,6 @@ static inline u8 *verity_io_want_digest(struct dm_verity *v,return (u8 *)(io +1 ) + v->ahash_reqsize + v->digest_size; } -static inline u8 *verity_io_digest_end (struct dm_verity *v, -struct dm_verity_io *io) -{ -return verity_io_want_digest (v, io) + v->digest_size; -} - extern int verity_for_bv_block(struct dm_verity *v, struct dm_verity_io *io, struct bvec_iter *iter, int (*process)(struct dm_verity *v,
drivers/mmc/core/block.c +2 -0
@@ -1482,6 +1482,8 @@ static void mmc_blk_cqe_complete_rq(struct mmc_queue *mq, struct request *req)blk_mq_requeue_request (req, true); else__blk_mq_end_request (req ,BLK_STS_OK ); + }else if (mq->in_recovery) { +blk_mq_requeue_request (req, true); }else {blk_mq_end_request (req,BLK_STS_OK ); }
drivers/mmc/core/core.c +7 -2
@@ -551,7 +551,9 @@ int mmc_cqe_recovery(struct mmc_host *host) cmd.flags =MMC_RSP_R1B |MMC_CMD_AC ; cmd.flags &= ~MMC_RSP_CRC ;/* Ignore CRC */ cmd.busy_timeout =MMC_CQE_RECOVERY_TIMEOUT ; -mmc_wait_for_cmd (host, &cmd,0 ); +mmc_wait_for_cmd (host, &cmd,MMC_CMD_RETRIES ); + +mmc_poll_for_busy (host->card,MMC_CQE_RECOVERY_TIMEOUT , true,MMC_BUSY_IO );memset (&cmd,0 ,sizeof (cmd)); cmd.opcode =MMC_CMDQ_TASK_MGMT ;
@@ -559,10 +561,13 @@ int mmc_cqe_recovery(struct mmc_host *host) cmd.flags =MMC_RSP_R1B |MMC_CMD_AC ; cmd.flags &= ~MMC_RSP_CRC ;/* Ignore CRC */ cmd.busy_timeout =MMC_CQE_RECOVERY_TIMEOUT ; - err =mmc_wait_for_cmd (host, &cmd,0 ); + err =mmc_wait_for_cmd (host, &cmd,MMC_CMD_RETRIES ); host->cqe_ops->cqe_recovery_finish (host); +if (err) + err =mmc_wait_for_cmd (host, &cmd,MMC_CMD_RETRIES ); +mmc_retune_release (host);return err;
drivers/mmc/host/cqhci-core.c +22 -22
75 lines not on this page · raw message
drivers/mmc/host/sdhci-pci-gli.c +29 -25
72 lines not on this page · raw message
drivers/mmc/host/sdhci-sprd.c +25 -0
@@ -416,12 +416,33 @@ static void sdhci_sprd_request_done(struct sdhci_host *host,mmc_request_done (host->mmc, mrq); } +static void sdhci_sprd_set_power (struct sdhci_host *host,unsigned char mode, +unsigned short vdd) +{ +struct mmc_host *mmc = host->mmc; + +switch (mode) { +case MMC_POWER_OFF : +mmc_regulator_set_ocr (host->mmc, mmc->supply.vmmc,0 ); + +mmc_regulator_disable_vqmmc (mmc); +break ; +case MMC_POWER_ON : +mmc_regulator_enable_vqmmc (mmc); +break ; +case MMC_POWER_UP : +mmc_regulator_set_ocr (host->mmc, mmc->supply.vmmc, vdd); +break ; + } +} +static struct sdhci_ops sdhci_sprd_ops = { .read_l = sdhci_sprd_readl, .write_l = sdhci_sprd_writel, .write_w = sdhci_sprd_writew, .write_b = sdhci_sprd_writeb, .set_clock = sdhci_sprd_set_clock, + .set_power = sdhci_sprd_set_power, .get_max_clock = sdhci_sprd_get_max_clock, .get_min_clock = sdhci_sprd_get_min_clock, .set_bus_width = sdhci_set_bus_width,
@@ -823,6 +844,10 @@ static int sdhci_sprd_probe(struct platform_device *pdev) host->caps1 &= ~(SDHCI_SUPPORT_SDR50 |SDHCI_SUPPORT_SDR104 |SDHCI_SUPPORT_DDR50 ); + ret =mmc_regulator_get_supply (host->mmc); +if (ret) + goto pm_runtime_disable; + ret =sdhci_setup_host (host);if (ret) goto pm_runtime_disable;
drivers/net/dsa/mv88e6xxx/chip.c +20 -6
@@ -577,6 +577,18 @@ static void mv88e6250_phylink_get_caps(struct mv88e6xxx_chip *chip, int port, config->mac_capabilities =MAC_SYM_PAUSE |MAC_10 |MAC_100 ; } +static void mv88e6351_phylink_get_caps (struct mv88e6xxx_chip *chip,int port, +struct phylink_config *config) +{ +unsigned long *supported = config->supported_interfaces; + +/* Translate the default cmode */ +mv88e6xxx_translate_cmode (chip->ports[port].cmode, supported); + + config->mac_capabilities =MAC_SYM_PAUSE |MAC_10 |MAC_100 | +MAC_1000FD ; +} +static int mv88e6352_get_port4_serdes_cmode (struct mv88e6xxx_chip *chip) {u16 reg, val;
@@ -3880,7 +3892,8 @@ static int mv88e6xxx_port_setup(struct dsa_switch *ds, int port)struct mv88e6xxx_chip *chip = ds->priv;int err; -if (chip->info->ops->pcs_ops->pcs_init) { +if (chip->info->ops->pcs_ops && + chip->info->ops->pcs_ops->pcs_init) { err = chip->info->ops->pcs_ops->pcs_init (chip, port);if (err)return err;
@@ -3895,7 +3908,8 @@ static void mv88e6xxx_port_teardown(struct dsa_switch *ds, int port)mv88e6xxx_teardown_devlink_regions_port (ds, port); -if (chip->info->ops->pcs_ops->pcs_teardown) +if (chip->info->ops->pcs_ops && + chip->info->ops->pcs_ops->pcs_teardown) chip->info->ops->pcs_ops->pcs_teardown (chip, port); }
@@ -4340,7 +4354,7 @@ static const struct mv88e6xxx_ops mv88e6171_ops = { .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, .stu_getnext = mv88e6352_g1_stu_getnext, .stu_loadpurge = mv88e6352_g1_stu_loadpurge, - .phylink_get_caps = mv88e6185_phylink_get_caps, + .phylink_get_caps = mv88e6351_phylink_get_caps, };static const struct mv88e6xxx_ops mv88e6172_ops = {
@@ -4440,7 +4454,7 @@ static const struct mv88e6xxx_ops mv88e6175_ops = { .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, .stu_getnext = mv88e6352_g1_stu_getnext, .stu_loadpurge = mv88e6352_g1_stu_loadpurge, - .phylink_get_caps = mv88e6185_phylink_get_caps, + .phylink_get_caps = mv88e6351_phylink_get_caps, };static const struct mv88e6xxx_ops mv88e6176_ops = {
@@ -5069,7 +5083,7 @@ static const struct mv88e6xxx_ops mv88e6350_ops = { .vtu_loadpurge = mv88e6352_g1_vtu_loadpurge, .stu_getnext = mv88e6352_g1_stu_getnext, .stu_loadpurge = mv88e6352_g1_stu_loadpurge, - .phylink_get_caps = mv88e6185_phylink_get_caps, + .phylink_get_caps = mv88e6351_phylink_get_caps, };static const struct mv88e6xxx_ops mv88e6351_ops = {
@@ -5117,7 +5131,7 @@ static const struct mv88e6xxx_ops mv88e6351_ops = { .stu_loadpurge = mv88e6352_g1_stu_loadpurge, .avb_ops = &mv88e6352_avb_ops, .ptp_ops = &mv88e6352_ptp_ops, - .phylink_get_caps = mv88e6185_phylink_get_caps, + .phylink_get_caps = mv88e6351_phylink_get_caps, };static const struct mv88e6xxx_ops mv88e6352_ops = {
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +10 -6
@@ -516,8 +516,6 @@ struct sk_buff *dpaa2_eth_alloc_skb(struct dpaa2_eth_priv *priv,memcpy (skb->data, fd_vaddr + fd_offset, fd_length); -dpaa2_eth_recycle_buf (priv, ch,dpaa2_fd_get_addr (fd)); -return skb; }
@@ -589,6 +587,7 @@ void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,struct rtnl_link_stats64 *percpu_stats;struct dpaa2_eth_drv_stats *percpu_extras;struct device *dev = priv->net_dev->dev.parent; +bool recycle_rx_buf = false;void *buf_data;u32 xdp_act;
@@ -618,6 +617,8 @@ void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,dma_unmap_page (dev, addr, priv->rx_buf_size,DMA_BIDIRECTIONAL ); skb =dpaa2_eth_build_linear_skb (ch, fd, vaddr); + }else { + recycle_rx_buf = true; } }else if (fd_format == dpaa2_fd_sg) {WARN_ON (priv->xdp_prog);
@@ -637,6 +638,9 @@ void dpaa2_eth_rx(struct dpaa2_eth_priv *priv, goto err_build_skb;dpaa2_eth_receive_skb (priv, ch, fd, vaddr, fq, percpu_stats, skb); + +if (recycle_rx_buf) +dpaa2_eth_recycle_buf (priv, ch,dpaa2_fd_get_addr (fd));return ; err_build_skb:
@@ -1073,14 +1077,12 @@ static int dpaa2_eth_build_single_fd(struct dpaa2_eth_priv *priv,dma_addr_t addr; buffer_start = skb->data -dpaa2_eth_needed_headroom (skb); - -/* If there's enough room to align the FD address, do it. -* It will help hardware optimize accesses. -*/ aligned_start =PTR_ALIGN (buffer_start -DPAA2_ETH_TX_BUF_ALIGN ,DPAA2_ETH_TX_BUF_ALIGN );if (aligned_start >= skb->head) buffer_start = aligned_start; +else +return -ENOMEM ;/* Store a backpointer to the skb at the beginning of the buffer * (in the private data area) such that we can release it
@@ -4967,6 +4969,8 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev)if (err) goto err_dl_port_add; + net_dev->needed_headroom =DPAA2_ETH_SWA_SIZE +DPAA2_ETH_TX_BUF_ALIGN ; + err =register_netdev (net_dev);if (err <0 ) {dev_err (dev,"register_netdev() failed\n" );
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h +1 -1
@@ -740,7 +740,7 @@ static inline bool dpaa2_eth_rx_pause_enabled(u64 link_options)static inline unsigned int dpaa2_eth_needed_headroom (struct sk_buff *skb) { -unsigned int headroom =DPAA2_ETH_SWA_SIZE ; +unsigned int headroom =DPAA2_ETH_SWA_SIZE +DPAA2_ETH_TX_BUF_ALIGN ;/* If we don't have an skb (e.g. XDP buffer), we only need space for * the software annotation area
drivers/net/ethernet/intel/ice/ice_lag.c +72 -50
170 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_lag.h +1 -0
@@ -63,4 +63,5 @@ int ice_init_lag(struct ice_pf *pf);void ice_deinit_lag (struct ice_pf *pf);void ice_lag_rebuild (struct ice_pf *pf);bool ice_lag_is_switchdev_running (struct ice_pf *pf); +void ice_lag_move_vf_nodes_cfg (struct ice_lag *lag,u8 src_prt,u8 dst_prt);#endif /* _ICE_LAG_H_ */
drivers/net/ethernet/intel/ice/ice_vf_lib.c +20 -0
@@ -827,12 +827,16 @@ static void ice_notify_vf_reset(struct ice_vf *vf)int ice_reset_vf (struct ice_vf *vf,u32 flags) {struct ice_pf *pf = vf->pf; +struct ice_lag *lag;struct ice_vsi *vsi; +u8 act_prt, pri_prt;struct device *dev;int err =0 ;bool rsd; dev =ice_pf_to_dev (pf); + act_prt =ICE_LAG_INVALID_PORT ; + pri_prt = pf->hw.port_info->lport;if (flags &ICE_VF_RESET_NOTIFY )ice_notify_vf_reset (vf);
@@ -843,6 +847,17 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)return 0 ; } + lag = pf->lag; +mutex_lock (&pf->lag_mutex); +if (lag && lag->bonded && lag->primary) { + act_prt = lag->active_port; +if (act_prt != pri_prt && act_prt !=ICE_LAG_INVALID_PORT && + lag->upper_netdev) +ice_lag_move_vf_nodes_cfg (lag, act_prt, pri_prt); +else + act_prt =ICE_LAG_INVALID_PORT ; + } +if (flags &ICE_VF_RESET_LOCK )mutex_lock (&vf->cfg_lock);else
@@ -935,6 +950,11 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)if (flags &ICE_VF_RESET_LOCK )mutex_unlock (&vf->cfg_lock); +if (lag && lag->bonded && lag->primary && + act_prt !=ICE_LAG_INVALID_PORT ) +ice_lag_move_vf_nodes_cfg (lag, pri_prt, act_prt); +mutex_unlock (&pf->lag_mutex); +return err; }
drivers/net/ethernet/intel/ice/ice_virtchnl.c +25 -0
@@ -1600,9 +1600,24 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg) (struct virtchnl_vsi_queue_config_info *)msg;struct virtchnl_queue_pair_info *qpi;struct ice_pf *pf = vf->pf; +struct ice_lag *lag;struct ice_vsi *vsi; +u8 act_prt, pri_prt;int i =-1 , q_idx; + lag = pf->lag; +mutex_lock (&pf->lag_mutex); + act_prt =ICE_LAG_INVALID_PORT ; + pri_prt = pf->hw.port_info->lport; +if (lag && lag->bonded && lag->primary) { + act_prt = lag->active_port; +if (act_prt != pri_prt && act_prt !=ICE_LAG_INVALID_PORT && + lag->upper_netdev) +ice_lag_move_vf_nodes_cfg (lag, act_prt, pri_prt); +else + act_prt =ICE_LAG_INVALID_PORT ; + } +if (!test_bit (ICE_VF_STATE_ACTIVE , vf->vf_states)) goto error_param;
@@ -1710,6 +1725,11 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg) } } +if (lag && lag->bonded && lag->primary && + act_prt !=ICE_LAG_INVALID_PORT ) +ice_lag_move_vf_nodes_cfg (lag, pri_prt, act_prt); +mutex_unlock (&pf->lag_mutex); +/* send the response to the VF */ return ice_vc_send_msg_to_vf (vf,VIRTCHNL_OP_CONFIG_VSI_QUEUES ,VIRTCHNL_STATUS_SUCCESS ,NULL ,0 );
@@ -1724,6 +1744,11 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg) vf->vf_id, i); } +if (lag && lag->bonded && lag->primary && + act_prt !=ICE_LAG_INVALID_PORT ) +ice_lag_move_vf_nodes_cfg (lag, pri_prt, act_prt); +mutex_unlock (&pf->lag_mutex); +ice_lag_move_new_vf_nodes (vf);/* send the response to the VF */
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +2 -2
@@ -5505,6 +5505,8 @@ int rvu_mbox_handler_nix_bandprof_free(struct rvu *rvu, ipolicer = &nix_hw->ipolicer[layer];for (idx =0 ; idx < req->prof_count[layer]; idx++) { +if (idx ==MAX_BANDPROF_PER_PFFUNC ) +break ; prof_idx = req->prof_idx[layer][idx];if (prof_idx >= ipolicer->band_prof.max || ipolicer->pfvf_map[prof_idx] != pcifunc)
@@ -5518,8 +5520,6 @@ int rvu_mbox_handler_nix_bandprof_free(struct rvu *rvu, ipolicer->pfvf_map[prof_idx] =0x00 ; ipolicer->match_id[prof_idx] =0 ;rvu_free_rsrc (&ipolicer->band_prof, prof_idx); -if (idx ==MAX_BANDPROF_PER_PFFUNC ) -break ; } }mutex_unlock (&rvu->rsrc_lock);
drivers/net/ethernet/marvell/octeontx2/nic/cn10k.c +3 -0
@@ -450,6 +450,9 @@ int cn10k_set_ipolicer_rate(struct otx2_nic *pfvf, u16 profile, aq->prof.pebs_mantissa =0 ; aq->prof_mask.pebs_mantissa =0xFF ; + aq->prof.hl_en =0 ; + aq->prof_mask.hl_en =1 ; +/* Fill AQ info */ aq->qidx = profile; aq->ctype =NIX_AQ_CTYPE_BANDPROF ;
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h +2 -0
@@ -1070,6 +1070,8 @@ int otx2_init_tc(struct otx2_nic *nic);void otx2_shutdown_tc (struct otx2_nic *nic);int otx2_setup_tc (struct net_device *netdev,enum tc_setup_type type,void *type_data); +void otx2_tc_apply_ingress_police_rules (struct otx2_nic *nic); +/* CGX/RPM DMAC filters support */ int otx2_dmacflt_get_max_cnt (struct otx2_nic *pf);int otx2_dmacflt_add (struct otx2_nic *pf,const u8 *mac,u32 bit_pos);
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +7 -2
@@ -566,7 +566,9 @@ static irqreturn_t otx2_pfvf_mbox_intr_handler(int irq, void *pf_irq)otx2_write64 (pf,RVU_PF_VFPF_MBOX_INTX (1 ), intr);otx2_queue_work (mbox, pf->mbox_pfvf_wq,64 , vfs, intr,TYPE_PFVF ); - vfs -=64 ; +if (intr) +trace_otx2_msg_interrupt (mbox->mbox.pdev,"VF(s) to PF" , intr); + vfs =64 ; } intr =otx2_read64 (pf,RVU_PF_VFPF_MBOX_INTX (0 ));
@@ -574,7 +576,8 @@ static irqreturn_t otx2_pfvf_mbox_intr_handler(int irq, void *pf_irq)otx2_queue_work (mbox, pf->mbox_pfvf_wq,0 , vfs, intr,TYPE_PFVF ); -trace_otx2_msg_interrupt (mbox->mbox.pdev,"VF(s) to PF" , intr); +if (intr) +trace_otx2_msg_interrupt (mbox->mbox.pdev,"VF(s) to PF" , intr);return IRQ_HANDLED ; }
@@ -1870,6 +1873,8 @@ int otx2_open(struct net_device *netdev)if (pf->flags &OTX2_FLAG_DMACFLTR_SUPPORT )otx2_dmacflt_reinstall_flows (pf); +otx2_tc_apply_ingress_police_rules (pf); + err =otx2_rxtx_enable (pf, true);/* If a mbox communication error happens at this point then interface * will end up in a state such that it is in down state but hardware
drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c +95 -25
177 lines not on this page · raw message
drivers/net/ethernet/realtek/r8169_main.c +7 -2
@@ -579,6 +579,7 @@ struct rtl8169_tc_offsets {enum rtl_flag {RTL_FLAG_TASK_ENABLED =0 ,RTL_FLAG_TASK_RESET_PENDING , +RTL_FLAG_TASK_RESET_NO_QUEUE_WAKE ,RTL_FLAG_TASK_TX_TIMEOUT ,RTL_FLAG_MAX };
@@ -4582,6 +4583,8 @@ static void rtl_task(struct work_struct *work) reset:rtl_reset_work (tp);netif_wake_queue (tp->dev); + }else if (test_and_clear_bit (RTL_FLAG_TASK_RESET_NO_QUEUE_WAKE , tp->wk.flags)) { +rtl_reset_work (tp); } out_unlock:rtnl_unlock ();
@@ -4615,7 +4618,7 @@ static void r8169_phylink_handler(struct net_device *ndev) }else {/* In few cases rx is broken after link-down otherwise */ if (rtl_is_8125 (tp)) -rtl_reset_work (tp); +rtl_schedule_task (tp,RTL_FLAG_TASK_RESET_NO_QUEUE_WAKE );pm_runtime_idle (d); }
@@ -4691,7 +4694,7 @@ static int rtl8169_close(struct net_device *dev)rtl8169_down (tp);rtl8169_rx_clear (tp); -cancel_work_sync (&tp->wk.work); +cancel_work (&tp->wk.work);free_irq (tp->irq, tp);
@@ -4925,6 +4928,8 @@ static void rtl_remove_one(struct pci_dev *pdev)if (pci_dev_run_wake (pdev))pm_runtime_get_noresume (&pdev->dev); +cancel_work_sync (&tp->wk.work); +unregister_netdev (tp->dev);if (tp->dash_type !=RTL_DASH_NONE )
drivers/net/ethernet/renesas/ravb_main.c +45 -24
145 lines not on this page · raw message
drivers/net/ethernet/renesas/rswitch.c +13 -9
@@ -1501,8 +1501,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd {struct rswitch_device *rdev =netdev_priv (ndev);struct rswitch_gwca_queue *gq = rdev->tx_queue; +netdev_tx_t ret =NETDEV_TX_OK ;struct rswitch_ext_desc *desc; -int ret =NETDEV_TX_OK ;dma_addr_t dma_addr;if (rswitch_get_num_cur_queues (gq) >= gq->ring_size -1 ) {
@@ -1514,10 +1514,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *ndreturn ret; dma_addr =dma_map_single (ndev->dev.parent, skb->data, skb->len,DMA_TO_DEVICE ); -if (dma_mapping_error (ndev->dev.parent, dma_addr)) { -dev_kfree_skb_any (skb); -return ret; - } +if (dma_mapping_error (ndev->dev.parent, dma_addr)) + goto err_kfree; gq->skbs[gq->cur] = skb; desc = &gq->tx_ring[gq->cur];
@@ -1530,10 +1528,8 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *ndstruct rswitch_gwca_ts_info *ts_info; ts_info =kzalloc (sizeof (*ts_info),GFP_ATOMIC ); -if (!ts_info) { -dma_unmap_single (ndev->dev.parent, dma_addr, skb->len,DMA_TO_DEVICE ); -return -ENOMEM ; - } +if (!ts_info) + goto err_unmap;skb_shinfo (skb)->tx_flags |=SKBTX_IN_PROGRESS ; rdev->ts_tag++;
@@ -1555,6 +1551,14 @@ static netdev_tx_t rswitch_start_xmit(struct sk_buff *skb, struct net_device *nd gq->cur =rswitch_next_queue_index (gq, true,1 );rswitch_modify (rdev->addr,GWTRC (gq->index),0 ,BIT (gq->index %32 )); +return ret; + +err_unmap: +dma_unmap_single (ndev->dev.parent, dma_addr, skb->len,DMA_TO_DEVICE ); + +err_kfree: +dev_kfree_skb_any (skb); +return ret; }
drivers/net/ethernet/stmicro/stmmac/mmc_core.c +4 -0
@@ -177,8 +177,10 @@#define MMC_XGMAC_RX_DISCARD_OCT_GB 0x1b4#define MMC_XGMAC_RX_ALIGN_ERR_PKT 0x1bc +#define MMC_XGMAC_TX_FPE_INTR_MASK 0x204#define MMC_XGMAC_TX_FPE_FRAG 0x208#define MMC_XGMAC_TX_HOLD_REQ 0x20c +#define MMC_XGMAC_RX_FPE_INTR_MASK 0x224#define MMC_XGMAC_RX_PKT_ASSEMBLY_ERR 0x228#define MMC_XGMAC_RX_PKT_SMD_ERR 0x22c#define MMC_XGMAC_RX_PKT_ASSEMBLY_OK 0x230
@@ -352,6 +354,8 @@ static void dwxgmac_mmc_intr_all_mask(void __iomem *mmcaddr) {writel (0x0 , mmcaddr +MMC_RX_INTR_MASK );writel (0x0 , mmcaddr +MMC_TX_INTR_MASK ); +writel (MMC_DEFAULT_MASK , mmcaddr +MMC_XGMAC_TX_FPE_INTR_MASK ); +writel (MMC_DEFAULT_MASK , mmcaddr +MMC_XGMAC_RX_FPE_INTR_MASK );writel (MMC_DEFAULT_MASK , mmcaddr +MMC_XGMAC_RX_IPC_INTR_MASK ); }
drivers/net/ethernet/wangxun/libwx/wx_lib.c +1 -1
@@ -1965,11 +1965,11 @@ void wx_reset_interrupt_capability(struct wx *wx)if (!pdev->msi_enabled && !pdev->msix_enabled)return ; -pci_free_irq_vectors (wx->pdev);if (pdev->msix_enabled) {kfree (wx->msix_entries); wx->msix_entries =NULL ; } +pci_free_irq_vectors (wx->pdev); }EXPORT_SYMBOL (wx_reset_interrupt_capability);
drivers/net/netdevsim/bpf.c +2 -2
@@ -93,7 +93,7 @@ static void nsim_prog_set_loaded(struct bpf_prog *prog, bool loaded) {struct nsim_bpf_bound_prog *state; -if (!prog || !prog->aux->offload) +if (!prog || !bpf_prog_is_offloaded (prog->aux))return ; state = prog->aux->offload->dev_priv;
@@ -311,7 +311,7 @@ nsim_setup_prog_hw_checks(struct netdevsim *ns, struct netdev_bpf *bpf)if (!bpf->prog)return 0 ; -if (!bpf->prog->aux->offload) { +if (!bpf_prog_is_offloaded (bpf->prog->aux)) {NSIM_EA (bpf->extack,"xdpoffload of non-bound program" );return -EINVAL ; }
drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c +3 -1
@@ -705,8 +705,10 @@ int iwl_mvm_mld_add_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif,rcu_dereference_protected (mvm_sta->link[link_id],lockdep_is_held (&mvm->mutex)); -if (WARN_ON (!link_conf || !mvm_link_sta)) +if (WARN_ON (!link_conf || !mvm_link_sta)) { + ret = -EINVAL ; goto err; + } ret =iwl_mvm_mld_cfg_sta (mvm, sta, vif, link_sta, link_conf, mvm_link_sta);
drivers/nvme/host/core.c +9 -0
@@ -2026,6 +2026,13 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,if (ret)return ret; +if (id->ncap ==0 ) { +/* namespace not allocated or attached */ + info->is_removed = true; + ret = -ENODEV ; + goto error; + } +blk_mq_freeze_queue (ns->disk->queue); lbaf =nvme_lbaf_index (id->flbas); ns->lba_shift = id->lbaf[lbaf].ds;
@@ -2083,6 +2090,8 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,set_bit (NVME_NS_READY , &ns->flags); ret =0 ; } + +error:kfree (id);return ret; }
drivers/pinctrl/core.c +3 -3
@@ -1253,17 +1253,17 @@ static void pinctrl_link_add(struct pinctrl_dev *pctldev,static int pinctrl_commit_state (struct pinctrl *p,struct pinctrl_state *state) {struct pinctrl_setting *setting, *setting2; -struct pinctrl_state *old_state = p->state; +struct pinctrl_state *old_state =READ_ONCE (p->state);int ret; -if (p->state) { +if (old_state) {/* * For each pinmux setting in the old state, forget SW's record * of mux owner for that pingroup. Any pingroups which are * still owned by the new state will be re-acquired by the call * to pinmux_enable_setting() in the loop below. */ -list_for_each_entry (setting, &p->state->settings, node) { +list_for_each_entry (setting, &old_state->settings, node) {if (setting->type !=PIN_MAP_TYPE_MUX_GROUP )continue ;pinmux_disable_setting (setting);
drivers/pinctrl/stm32/pinctrl-stm32.c +10 -3
@@ -1283,9 +1283,11 @@ static struct stm32_desc_pin *stm32_pctrl_get_desc_pin_from_gpio(struct stm32_piint i;/* With few exceptions (e.g. bank 'Z'), pin number matches with pin index in array */ - pin_desc = pctl->pins + stm32_pin_nb; -if (pin_desc->pin.number == stm32_pin_nb) -return pin_desc; +if (stm32_pin_nb < pctl->npins) { + pin_desc = pctl->pins + stm32_pin_nb; +if (pin_desc->pin.number == stm32_pin_nb) +return pin_desc; + }/* Otherwise, loop all array to find the pin with the right number */ for (i =0 ; i < pctl->npins; i++) {
@@ -1378,6 +1380,11 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode } names =devm_kcalloc (dev, npins,sizeof (char *),GFP_KERNEL ); +if (!names) { + err = -ENOMEM ; + goto err_clk; + } +for (i =0 ; i < npins; i++) { stm32_pin =stm32_pctrl_get_desc_pin_from_gpio (pctl, bank, i);if (stm32_pin && stm32_pin->pin.name)
drivers/powercap/dtpm_cpu.c +1 -5
@@ -24,7 +24,6 @@#include <linux/of.h> #include <linux/pm_qos.h> #include <linux/slab.h> -#include <linux/units.h> struct dtpm_cpu {struct dtpm dtpm;
@@ -104,8 +103,7 @@ static u64 get_pd_power_uw(struct dtpm *dtpm)if (pd->table[i].frequency < freq)continue ; -return scale_pd_power_uw (pd_mask, pd->table[i].power * -MICROWATT_PER_MILLIWATT ); +return scale_pd_power_uw (pd_mask, pd->table[i].power); }return 0 ;
@@ -122,11 +120,9 @@ static int update_pd_power_uw(struct dtpm *dtpm) nr_cpus =cpumask_weight (&cpus); dtpm->power_min = em->table[0 ].power; - dtpm->power_min *=MICROWATT_PER_MILLIWATT ; dtpm->power_min *= nr_cpus; dtpm->power_max = em->table[em->nr_perf_states -1 ].power; - dtpm->power_max *=MICROWATT_PER_MILLIWATT ; dtpm->power_max *= nr_cpus;return 0 ;
drivers/powercap/dtpm_devfreq.c +3 -8
@@ -39,10 +39,8 @@ static int update_pd_power_uw(struct dtpm *dtpm)struct em_perf_domain *pd =em_pd_get (dev); dtpm->power_min = pd->table[0 ].power; - dtpm->power_min *=MICROWATT_PER_MILLIWATT ; dtpm->power_max = pd->table[pd->nr_perf_states -1 ].power; - dtpm->power_max *=MICROWATT_PER_MILLIWATT ;return 0 ; }
@@ -54,13 +52,10 @@ static u64 set_pd_power_limit(struct dtpm *dtpm, u64 power_limit)struct device *dev = devfreq->dev.parent;struct em_perf_domain *pd =em_pd_get (dev);unsigned long freq; -u64 power;int i;for (i =0 ; i < pd->nr_perf_states; i++) { - - power = pd->table[i].power *MICROWATT_PER_MILLIWATT ; -if (power > power_limit) +if (pd->table[i].power > power_limit)break ; }
@@ -68,7 +63,7 @@ static u64 set_pd_power_limit(struct dtpm *dtpm, u64 power_limit)dev_pm_qos_update_request (&dtpm_devfreq->qos_req, freq); - power_limit = pd->table[i -1 ].power *MICROWATT_PER_MILLIWATT ; + power_limit = pd->table[i -1 ].power;return power_limit; }
@@ -110,7 +105,7 @@ static u64 get_pd_power_uw(struct dtpm *dtpm)if (pd->table[i].frequency < freq)continue ; - power = pd->table[i].power *MICROWATT_PER_MILLIWATT ; + power = pd->table[i].power; power *= status.busy_time; power >>=10 ;
drivers/scsi/sd.c +8 -1
@@ -3953,8 +3953,15 @@ static int sd_resume(struct device *dev, bool runtime)static int sd_resume_system (struct device *dev) { -if (pm_runtime_suspended (dev)) +if (pm_runtime_suspended (dev)) { +struct scsi_disk *sdkp =dev_get_drvdata (dev); +struct scsi_device *sdp = sdkp ? sdkp->device :NULL ; + +if (sdp && sdp->force_runtime_start_on_system_start) +pm_request_resume (dev); +return 0 ; + }return sd_resume (dev, false); }
drivers/ufs/core/ufshcd.c +13 -0
@@ -6347,11 +6347,24 @@ static bool ufshcd_abort_one(struct request *rq, void *priv)struct scsi_device *sdev = cmd->device;struct Scsi_Host *shost = sdev->host;struct ufs_hba *hba =shost_priv (shost); +struct ufshcd_lrb *lrbp = &hba->lrb[tag]; +struct ufs_hw_queue *hwq; +unsigned long flags; *ret =ufshcd_try_to_abort_task (hba, tag);dev_err (hba->dev,"Aborting tag %d / CDB %#02x %s\n" , tag, hba->lrb[tag].cmd ? hba->lrb[tag].cmd->cmnd[0 ] :-1 , *ret ?"failed" :"succeeded" ); + +/* Release cmd in MCQ mode if abort succeeds */ +if (is_mcq_enabled (hba) && (*ret ==0 )) { + hwq =ufshcd_mcq_req_to_hwq (hba,scsi_cmd_to_rq (lrbp->cmd)); +spin_lock_irqsave (&hwq->cq_lock, flags); +if (ufshcd_cmd_inflight (lrbp->cmd)) +ufshcd_release_scsi_cmd (hba, lrbp); +spin_unlock_irqrestore (&hwq->cq_lock, flags); + } +return *ret ==0 ; }
drivers/vfio/pci/pds/pci_drv.c +2 -2
@@ -55,10 +55,10 @@ static void pds_vfio_recovery(struct pds_vfio_pci_device *pds_vfio)* VFIO_DEVICE_STATE_RUNNING. */ if (deferred_reset_needed) { -spin_lock (&pds_vfio->reset_lock); +mutex_lock (&pds_vfio->reset_mutex); pds_vfio->deferred_reset = true; pds_vfio->deferred_reset_state =VFIO_DEVICE_STATE_ERROR ; -spin_unlock (&pds_vfio->reset_lock); +mutex_unlock (&pds_vfio->reset_mutex); } }
drivers/vfio/pci/pds/vfio_dev.c +21 -9
@@ -29,7 +29,7 @@ struct pds_vfio_pci_device *pds_vfio_pci_drvdata(struct pci_dev *pdev)void pds_vfio_state_mutex_unlock (struct pds_vfio_pci_device *pds_vfio) { again: -spin_lock (&pds_vfio->reset_lock); +mutex_lock (&pds_vfio->reset_mutex);if (pds_vfio->deferred_reset) { pds_vfio->deferred_reset = false;if (pds_vfio->state ==VFIO_DEVICE_STATE_ERROR ) {
@@ -39,23 +39,23 @@ void pds_vfio_state_mutex_unlock(struct pds_vfio_pci_device *pds_vfio) } pds_vfio->state = pds_vfio->deferred_reset_state; pds_vfio->deferred_reset_state =VFIO_DEVICE_STATE_RUNNING ; -spin_unlock (&pds_vfio->reset_lock); +mutex_unlock (&pds_vfio->reset_mutex); goto again; }mutex_unlock (&pds_vfio->state_mutex); -spin_unlock (&pds_vfio->reset_lock); +mutex_unlock (&pds_vfio->reset_mutex); }void pds_vfio_reset (struct pds_vfio_pci_device *pds_vfio) { -spin_lock (&pds_vfio->reset_lock); +mutex_lock (&pds_vfio->reset_mutex); pds_vfio->deferred_reset = true; pds_vfio->deferred_reset_state =VFIO_DEVICE_STATE_RUNNING ;if (!mutex_trylock (&pds_vfio->state_mutex)) { -spin_unlock (&pds_vfio->reset_lock); +mutex_unlock (&pds_vfio->reset_mutex);return ; } -spin_unlock (&pds_vfio->reset_lock); +mutex_unlock (&pds_vfio->reset_mutex);pds_vfio_state_mutex_unlock (pds_vfio); }
@@ -155,6 +155,9 @@ static int pds_vfio_init_device(struct vfio_device *vdev) pds_vfio->vf_id = vf_id; +mutex_init (&pds_vfio->state_mutex); +mutex_init (&pds_vfio->reset_mutex); + vdev->migration_flags =VFIO_MIGRATION_STOP_COPY |VFIO_MIGRATION_P2P ; vdev->mig_ops = &pds_vfio_lm_ops; vdev->log_ops = &pds_vfio_log_ops;
@@ -168,6 +171,17 @@ static int pds_vfio_init_device(struct vfio_device *vdev)return 0 ; } +static void pds_vfio_release_device (struct vfio_device *vdev) +{ +struct pds_vfio_pci_device *pds_vfio = + container_of(vdev, struct pds_vfio_pci_device, + vfio_coredev.vdev); + +mutex_destroy (&pds_vfio->state_mutex); +mutex_destroy (&pds_vfio->reset_mutex); +vfio_pci_core_release_dev (vdev); +} +static int pds_vfio_open_device (struct vfio_device *vdev) { struct pds_vfio_pci_device *pds_vfio =
@@ -179,7 +193,6 @@ static int pds_vfio_open_device(struct vfio_device *vdev)if (err)return err; -mutex_init (&pds_vfio->state_mutex);
Lines of this file are not shown. View the raw message.
fs/smb/server/smb2pdu.c +22 -25
47 lines not on this page · raw message
fs/smb/server/vfs.c +41 -27
68 lines not on this page · raw message
io_uring/io_uring.c +33 -26
59 lines not on this page · raw message
io_uring/kbuf.c +148 -21
169 lines not on this page · raw message
net/wireless/nl80211.c +31 -19
50 lines not on this page · raw message
tools/arch/parisc/include/uapi/asm/errno.h +0 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/af_unix/diag_uid.c +0 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/cmsg_sender.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_connect.c +4 -7
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_inq.c +4 -7
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.