Linux 5.11.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.11.11 kernel.
All users of the 5.11 kernel series must upgrade.
The updated 5.11.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.11.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/virt/kvm/api.rst | 6 Makefile | 5 arch/arm/boot/dts/at91-sam9x60ek.dts | 8 arch/arm/boot/dts/at91-sama5d27_som1.dtsi | 4 arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts | 1 arch/arm/boot/dts/sam9x60.dtsi | 9 arch/arm/mach-omap2/sr_device.c | 75 ++- arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi | 1 arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 1 arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 1 arch/arm64/kernel/crash_dump.c | 2 arch/arm64/kernel/stacktrace.c | 9 arch/ia64/include/asm/syscall.h | 2 arch/ia64/kernel/ptrace.c | 24 - arch/powerpc/include/asm/dcr-native.h | 8 arch/sparc/kernel/traps_64.c | 13 arch/x86/include/asm/kvm_host.h | 14 arch/x86/include/asm/static_call.h | 7 arch/x86/include/asm/xen/page.h | 12 arch/x86/kvm/x86.c | 109 ++--- arch/x86/mm/mem_encrypt.c | 2 arch/x86/net/bpf_jit_comp.c | 27 + arch/x86/xen/p2m.c | 7 arch/x86/xen/setup.c | 16 block/blk-cgroup-rwstat.c | 3 block/blk-merge.c | 8 block/blk-zoned.c | 2 block/genhd.c | 4 drivers/acpi/acpica/nsaccess.c | 3 drivers/acpi/internal.h | 6 drivers/acpi/scan.c | 88 ++-- drivers/acpi/video_detect.c | 1 drivers/atm/eni.c | 3 drivers/atm/idt77105.c | 4 drivers/atm/lanai.c | 5 drivers/atm/uPD98402.c | 2 drivers/base/power/runtime.c | 45 +- drivers/block/umem.c | 5 drivers/block/xen-blkback/blkback.c | 2 drivers/bus/omap_l3_noc.c | 4 drivers/clk/qcom/gcc-sc7180.c | 4 drivers/cpufreq/cpufreq-dt-platdev.c | 2 drivers/gpio/gpiolib-acpi.c | 2 drivers/gpu/drm/Kconfig | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 8 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 drivers/gpu/drm/amd/display/dc/dc.h | 1 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c | 11 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h | 6 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 7 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c | 1 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 6 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_link_encoder.c | 3 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c | 1 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 2 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c | 1 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c | 31 + drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c | 96 ++++ drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h | 2 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 54 ++ drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 74 ++- drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 24 + drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 25 + drivers/gpu/drm/etnaviv/etnaviv_gem.c | 2 drivers/gpu/drm/i915/display/intel_vdsc.c | 10 drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c | 13 drivers/gpu/drm/i915/intel_runtime_pm.c | 29 + drivers/gpu/drm/i915/intel_runtime_pm.h | 5 drivers/gpu/drm/msm/dsi/pll/dsi_pll.c | 2 drivers/gpu/drm/msm/dsi/pll/dsi_pll.h | 6 drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c | 5 drivers/gpu/drm/msm/msm_drv.c | 12 drivers/gpu/drm/nouveau/dispnv50/disp.c | 13 drivers/infiniband/hw/cxgb4/cm.c | 4 drivers/irqchip/irq-ingenic-tcu.c | 1 drivers/irqchip/irq-ingenic.c | 1 drivers/md/dm-ioctl.c | 2 drivers/md/dm-table.c | 33 + drivers/md/dm-verity-target.c | 2 drivers/md/dm-zoned-target.c | 2 drivers/md/dm.c | 5 drivers/mfd/intel_quark_i2c_gpio.c | 6 drivers/misc/habanalabs/common/device.c | 40 + drivers/misc/habanalabs/common/habanalabs_ioctl.c | 12 drivers/net/can/c_can/c_can.c | 24 - drivers/net/can/c_can/c_can_pci.c | 3 drivers/net/can/c_can/c_can_platform.c | 6 drivers/net/can/dev.c | 1 drivers/net/can/flexcan.c | 8 drivers/net/can/kvaser_pciefd.c | 4 drivers/net/can/m_can/m_can.c | 5 drivers/net/dsa/b53/b53_common.c | 14 drivers/net/dsa/bcm_sf2.c | 6 drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c | 2 drivers/net/ethernet/davicom/dm9000.c | 2 drivers/net/ethernet/faraday/ftgmac100.c | 1 drivers/net/ethernet/freescale/enetc/enetc_hw.h | 2 drivers/net/ethernet/freescale/enetc/enetc_pf.c | 6 drivers/net/ethernet/freescale/fec_ptp.c | 7 drivers/net/ethernet/freescale/gianfar.c | 15 drivers/net/ethernet/hisilicon/hns/hns_enet.c | 4 drivers/net/ethernet/intel/e1000e/82571.c | 2 drivers/net/ethernet/intel/e1000e/netdev.c | 6 drivers/net/ethernet/intel/iavf/iavf_main.c | 3 drivers/net/ethernet/intel/ice/ice_base.c | 6 drivers/net/ethernet/intel/ice/ice_xsk.c | 10 drivers/net/ethernet/intel/igb/igb.h | 4 drivers/net/ethernet/intel/igb/igb_main.c | 33 - drivers/net/ethernet/intel/igb/igb_ptp.c | 31 + drivers/net/ethernet/intel/igc/igc.h | 2 drivers/net/ethernet/intel/igc/igc_ethtool.c | 7 drivers/net/ethernet/intel/igc/igc_main.c | 9 drivers/net/ethernet/intel/igc/igc_ptp.c | 72 +-- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 6 drivers/net/ethernet/marvell/octeontx2/af/npc_profile.h | 2 drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 6 drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c | 48 +- drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c | 2 drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 5 drivers/net/ethernet/mellanox/mlx5/core/en.h | 7 drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 11 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 21 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 57 ++ drivers/net/ethernet/netronome/nfp/flower/metadata.c | 24 - drivers/net/ethernet/netronome/nfp/flower/offload.c | 18 drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c | 15 drivers/net/ethernet/pensando/ionic/ionic_txrx.c | 13 drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c | 3 drivers/net/ethernet/realtek/r8169_main.c | 6 drivers/net/ethernet/socionext/netsec.c | 9 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c | 50 +- drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 9 drivers/net/ethernet/stmicro/stmmac/hwif.h | 3 drivers/net/ethernet/stmicro/stmmac/norm_desc.c | 9 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 57 +- drivers/net/ethernet/sun/niu.c | 2 drivers/net/ethernet/tehuti/tehuti.c | 1 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 35 + drivers/net/ipa/ipa_qmi.c | 2 drivers/net/phy/broadcom.c | 147 ++++-- drivers/net/phy/dp83822.c | 3 drivers/net/phy/dp83869.c | 4 drivers/net/phy/lxt.c | 1 drivers/net/phy/marvell.c | 1 drivers/net/phy/marvell10g.c | 2 drivers/net/phy/micrel.c | 14 drivers/net/phy/phy.c | 2 drivers/net/phy/phy_device.c | 9 drivers/net/phy/phylink.c | 2 drivers/net/usb/cdc-phonet.c | 2 drivers/net/usb/r8152.c | 40 - drivers/net/veth.c | 3 drivers/net/wan/fsl_ucc_hdlc.c | 8 drivers/net/wan/hdlc_x25.c | 42 + drivers/net/wireless/mediatek/mt76/dma.c | 15 drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 10 drivers/nvme/host/core.c | 15 drivers/nvme/host/fc.c | 3 drivers/nvme/host/pci.c | 1 drivers/nvme/target/rdma.c | 5 drivers/platform/x86/dell-wmi-sysman/enum-attributes.c | 3 drivers/platform/x86/dell-wmi-sysman/int-attributes.c | 3 drivers/platform/x86/dell-wmi-sysman/passobj-attributes.c | 3 drivers/platform/x86/dell-wmi-sysman/string-attributes.c | 3 drivers/platform/x86/dell-wmi-sysman/sysman.c | 84 +-- drivers/platform/x86/intel-vbtn.c | 12 drivers/platform/x86/intel_pmt_crashlog.c | 13 drivers/regulator/qcom-rpmh-regulator.c | 6 drivers/scsi/mpt3sas/mpt3sas_base.c | 8 drivers/scsi/qedi/qedi_main.c | 1 drivers/scsi/qla2xxx/qla_target.c | 13 drivers/scsi/qla2xxx/tcm_qla2xxx.c | 4 drivers/scsi/ufs/ufs-qcom.c | 10 drivers/soc/ti/omap_prm.c | 8 drivers/staging/rtl8192e/Kconfig | 1 drivers/xen/Kconfig | 4 fs/btrfs/dev-replace.c | 3 fs/btrfs/disk-io.c | 19 fs/btrfs/inode.c | 14 fs/btrfs/qgroup.c | 12 fs/btrfs/volumes.c | 3 fs/cachefiles/rdwr.c | 7 fs/cifs/cifsglob.h | 4 fs/cifs/cifspdu.h | 5 fs/cifs/smb2glob.h | 1 fs/cifs/smb2ops.c | 27 - fs/cifs/smb2pdu.c | 6 fs/cifs/smb2transport.c | 37 + fs/cifs/transport.c | 2 fs/ext4/mballoc.c | 11 fs/ext4/xattr.c | 4 fs/gfs2/log.c | 4 fs/gfs2/trans.c | 2 fs/io_uring.c | 14 fs/nfs/Kconfig | 2 fs/nfs/nfs3xdr.c | 3 fs/nfs/nfs4proc.c | 3 fs/squashfs/export.c | 8 fs/squashfs/id.c | 6 fs/squashfs/squashfs_fs.h | 1 fs/squashfs/xattr_id.c | 6 include/acpi/acpi_bus.h | 1 include/asm-generic/vmlinux.lds.h | 5 include/linux/bpf.h | 33 + include/linux/brcmphy.h | 4 include/linux/device-mapper.h | 15 include/linux/hugetlb_cgroup.h | 15 include/linux/if_macvlan.h | 3 include/linux/memblock.h | 4 include/linux/mm.h | 18 include/linux/mm_types.h | 1 include/linux/mmu_notifier.h | 10 include/linux/mutex.h | 2 include/linux/netfilter/x_tables.h | 7 include/linux/pagemap.h | 1 include/linux/phy.h | 2 include/linux/static_call.h | 43 - include/linux/static_call_types.h | 50 ++ include/linux/u64_stats_sync.h | 7 include/linux/usermode_driver.h | 1 include/net/dst.h | 11 include/net/inet_connection_sock.h | 2 include/net/netfilter/nf_tables.h | 3 include/net/nexthop.h | 24 + include/net/red.h | 10 include/net/rtnetlink.h | 2 include/uapi/linux/psample.h | 5 kernel/bpf/bpf_inode_storage.c | 2 kernel/bpf/bpf_struct_ops.c | 2 kernel/bpf/core.c | 4 kernel/bpf/preload/bpf_preload_kern.c | 19 kernel/bpf/syscall.c | 5 kernel/bpf/trampoline.c | 218 +++++++--- kernel/bpf/verifier.c | 4 kernel/fork.c | 8 kernel/gcov/clang.c | 69 +++ kernel/power/energy_model.c | 2 kernel/static_call.c | 71 ++- kernel/trace/ftrace.c | 43 + kernel/usermode_driver.c | 21 mm/highmem.c | 4 mm/hugetlb.c | 41 + mm/hugetlb_cgroup.c | 10 mm/mmu_notifier.c | 23 + mm/z3fold.c | 16 net/bridge/br_switchdev.c | 2 net/can/isotp.c | 18 net/core/dev.c | 14 net/core/drop_monitor.c | 23 + net/core/dst.c | 59 +- net/core/flow_dissector.c | 2 net/dccp/ipv6.c | 5 net/ipv4/inet_connection_sock.c | 7 net/ipv4/netfilter/arp_tables.c | 16 net/ipv4/netfilter/ip_tables.c | 16 net/ipv4/route.c | 45 -- net/ipv4/tcp_minisocks.c | 7 net/ipv6/ip6_fib.c | 2 net/ipv6/ip6_input.c | 10 net/ipv6/netfilter/ip6_tables.c | 16 net/ipv6/route.c | 36 - net/ipv6/tcp_ipv6.c | 5 net/mac80211/cfg.c | 4 net/mac80211/ibss.c | 2 net/mac80211/mlme.c | 2 net/mac80211/util.c | 2 net/mptcp/options.c | 24 - net/mptcp/subflow.c | 5 net/netfilter/nf_conntrack_netlink.c | 1 net/netfilter/nf_flow_table_core.c | 2 net/netfilter/nf_tables_api.c | 19 net/netfilter/x_tables.c | 49 +- net/qrtr/qrtr.c | 5 net/sched/cls_flower.c | 2 net/sched/sch_choke.c | 7 net/sched/sch_gred.c | 2 net/sched/sch_red.c | 7 net/sched/sch_sfq.c | 2 net/sctp/output.c | 7 net/sctp/outqueue.c | 7 net/tipc/node.c | 11 net/vmw_vsock/af_vsock.c | 1 scripts/dummy-tools/gcc | 5 security/integrity/iint.c | 8 security/selinux/include/security.h | 15 security/selinux/selinuxfs.c | 13 security/selinux/ss/services.c | 63 +- sound/hda/intel-nhlt.c | 5 tools/include/linux/static_call_types.h | 50 ++ tools/lib/bpf/Makefile | 2 tools/lib/bpf/btf_dump.c | 2 tools/lib/bpf/libbpf.c | 3 tools/lib/bpf/netlink.c | 2 tools/objtool/check.c | 17 tools/perf/util/auxtrace.c | 4 tools/perf/util/synthetic-events.c | 9 tools/testing/kunit/configs/broken_on_uml.config | 2 tools/testing/selftests/arm64/fp/sve-ptrace.c | 2 tools/testing/selftests/bpf/prog_tests/fexit_sleep.c | 82 +++ tools/testing/selftests/bpf/progs/fexit_sleep.c | 31 + tools/testing/selftests/bpf/progs/test_tunnel_kern.c | 6 tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh | 2 tools/testing/selftests/net/reuseaddr_ports_exhausted.c | 32 - 309 files changed, 3092 insertions(+), 1105 deletions(-)
Adrian Hunter (1):
perf auxtrace: Fix auxtrace queue conflict
Alaa Hleihel (1):
net/mlx5e: Allow to match on MPLS parameters only for MPLS over UDP
Alex Deucher (2):
drm/amdgpu/display: restore AUX_DPHY_TX_CONTROL for DCN2.x drm/amdgpu: Add additional Sienna Cichlid PCI ID
Alex Elder (1):
net: ipa: terminate message handler arrays
Alex Marginean (1):
net: enetc: set MAC RX FIFO to recommended value
Alexander Lobakin (1):
flow_dissector: fix byteorder of dissected ICMP ID
Alexander Ovechkin (1):
tcp: relookup sock for RST+ACK packets handled by obsolete req sock
Alexei Starovoitov (4):
bpf: Dont allow vmlinux BTF to be used in map_create and prog_load.
ftrace: Fix modify_ftrace_direct.
bpf: Fix fexit trampoline.
selftest/bpf: Add a test to check trampoline freeing logic.
Andre Guedes (1):
igc: Fix igc_ptp_rx_pktstamp()
Andrey Konovalov (1):
kasan: fix per-page tags for non-page_alloc pages
Andy Shevchenko (2):
mfd: intel_quark_i2c_gpio: Revert "Constify static struct resources"
ACPI: scan: Use unique number for instance_no
Angelo Dureghello (1):
can: flexcan: flexcan_chip_freeze(): fix chip freeze for missing bitrate
Arnd Bergmann (1):
ch_ktls: fix enum-conversion warning
Aurelien Aptel (1):
cifs: ask for more credit on async read/write code paths
Aya Levin (2):
net/mlx5e: Set PTP channel pointer explicitly to NULL net/mlx5e: Fix error path for ethtool set-priv-flag
Bart Van Assche (1):
scsi: Revert "qla2xxx: Make sure that aborted commands are freed"
Bob Peterson (1):
gfs2: fix use-after-free in trans_drain
Brian Norris (1):
mac80211: Allow HE operation to be longer than expected.
Carlos Llamas (1):
selftests/net: fix warnings on reuseaddr_ports_exhausted
Chaitanya Kulkarni (1):
nvme-core: check ctrl css before setting up zns
Chris Chiu (1):
ACPI: video: Add missing callback back for Sony VPCEH3U1E
Christian König (1):
drm/radeon: fix AGP dependency
Christoph Hellwig (1):
nvme: fix the nsid value to print in nvme_validate_or_alloc_ns
Claudiu Beznea (1):
ARM: dts: at91-sama5d27_som1: fix phy address to 7
Colin Ian King (1):
octeontx2-af: Fix memory leak of object buf
Corentin Labbe (1):
net: stmmac: dwmac-sun8i: Provide TX and RX fifo sizes
Damien Le Moal (1):
block: Fix REQ_OP_ZONE_RESET_ALL handling
Daniel Borkmann (2):
net: Consolidate common blackhole dst ops
net, bpf: Fix ip6ip6 crash with collect_md populated skbs
Daniel Vetter (1):
drm/etnaviv: Use FOLL_FORCE for userptr
Daniel Wagner (1):
block: Suppress uevent for hidden device when removed
David Brazdil (1):
selinux: vsock: Set SID for socket returned by accept()
David E. Box (1):
platform/x86: intel_pmt_crashlog: Fix incorrect macros
David Gow (1):
kunit: tool: Disable PAGE_POISONING under --alltests
David Jeffery (1):
block: recalculate segment count for multi-segment discards correctly
Davide Caratti (1):
mptcp: fix ADD_ADDR HMAC in case port is specified
Denis Efremov (1):
sun/niu: fix wrong RXMAC_BC_FRM_CNT_COUNT count
Dillon Varone (1):
drm/amd/display: Enabled pipe harvesting in dcn30
Dima Chumak (1):
net/mlx5e: Offload tuple rewrite for non-CT flows
Dinghao Liu (2):
ixgbe: Fix memleak in ixgbe_configure_clsu32
e1000e: Fix error handling in e1000_set_d0_lplu_state_82571
Dmitry Baryshkov (2):
drm/msm/dsi: fix check-before-set in the 7nm dsi_pll code drm/msm: fix shutdown hook in case GPU components failed to bind
Dmitry Monakhov (1):
nvme-pci: add the DISABLE_WRITE_ZEROES quirk for a Samsung PM1725a
Douglas Anderson (1):
clk: qcom: gcc-sc7180: Use floor ops for the correct sdcc1 clk
Dylan Hung (1):
ftgmac100: Restart MAC HW once
Eric Dumazet (4):
macvlan: macvlan_count_rx() needs to be aware of preemption
net: sched: validate stab values
net: qrtr: fix a kernel-infoleak in qrtr_recvmsg()
tipc: better validate user input in tipc_nl_retrieve_key()
Fabio Estevam (1):
drm/msm: Fix suspend/resume on i.MX5
Federico Pellegrin (1):
ARM: dts: at91: sam9x60: fix mux-mask for PA7 so it can be set to A, B and C
Felix Fietkau (2):
mt76: fix tx skb error handling in mt76_dma_tx_queue_skb
mt76: mt7915: only modify tx buffer list after allocating tx token id
Fenghua Yu (1):
mm/fork: clear PASID for new mm
Filipe Manana (2):
btrfs: fix sleep while in non-sleep context during qgroup removal
btrfs: fix subvolume/snapshot deletion not triggered on mount
Florian Fainelli (5):
net: dsa: bcm_sf2: Qualify phydev->dev_flags based on port
net: phy: broadcom: Add power down exit reset state delay
net: phy: broadcom: Avoid forward for bcm54xx_config_clock_delay()
net: phy: broadcom: Fix RGMII delays for BCM50160 and BCM50610M
net: dsa: b53: VLAN filtering is global to all users
Florian Westphal (1):
netfilter: ctnetlink: fix dump of the expect mask attribute
Frank Sorenson (1):
NFS: Correct size calculation for create reply length
Geetha sowjanya (2):
octeontx2-af: Fix irq free in rvu teardown
octeontx2-pf: Clear RSS enable flag on interace down
Georgi Valkov (1):
libbpf: Fix INSTALL flag order
Greg Kroah-Hartman (1):
Linux 5.11.11
Grygorii Strashko (1):
bus: omap_l3_noc: mark l3 irqs as IRQF_NO_THREAD
Hangbin Liu (2):
selftests/bpf: Set gopt opt_class to 0 if get tunnel opt failed
selftests: forwarding: vxlan_bridge_1d: Fix vxlan ecn decapsulate value
Hannes Reinecke (4):
nvme: simplify error logic in nvme_validate_ns()
nvme: add NVME_REQ_CANCELLED flag in nvme_cancel_request()
nvme-fc: set NVME_REQ_CANCELLED in nvme_fc_terminate_exchange()
nvme-fc: return NVME_SC_HOST_ABORTED_CMD when a command has been aborted
Hans de Goede (8):
platform/x86: intel-vbtn: Stop reporting SW_DOCK events
platform/x86: dell-wmi-sysman: Fix crash caused by calling kset_unregister twice
platform/x86: dell-wmi-sysman: Fix possible NULL pointer deref on exit
platform/x86: dell-wmi-sysman: Make it safe to call exit_foo_attributes() multiple times platform/x86: dell-wmi-sysman: Fix release_attributes_data() getting called twice on init_bios_attributes() failure platform/x86: dell-wmi-sysman: Cleanup sysman_init() error-exit handling
platform/x86: dell-wmi-sysman: Make sysman_init() return -ENODEV of the interfaces are not found platform/x86: dell-wmi-sysman: Cleanup create_attributes_level_sysfs_files()
Hariprasad Kelam (1):
octeontx2-af: fix infinite loop in unmapping NPC counter
Hayes Wang (2):
Revert "r8152: adjust the settings about MAC clock speed down for RTL8153"
r8152: limit the RX buffer size of RTL8153A for USB 2.0
Heiko Thiery (1):
net: fec: ptp: avoid register access when ipg clock is disabled
Heiner Kallweit (1):
r8169: fix DMA being used after buffer free if WoL is enabled
Horia Geantă (3):
arm64: dts: ls1046a: mark crypto engine dma coherent
arm64: dts: ls1012a: mark crypto engine dma coherent
arm64: dts: ls1043a: mark crypto engine dma coherent
Huy Nguyen (1):
net/mlx5: Add back multicast stats for uplink representor
Ian Rogers (1):
perf synthetic events: Avoid write of uninitialized memory when generating PERF_RECORD_MMAP* records
Ido Schimmel (2):
psample: Fix user API breakage
drop_monitor: Perform cleanup upon probe registration failure
Imre Deak (1):
drm/i915: Fix the GT fence revocation runtime PM logic
Ira Weiny (1):
mm/highmem: fix CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP
Isaku Yamahata (1):
x86/mem_encrypt: Correct physical address calculation in __set_clr_pte_enc()
J. Bruce Fields (1):
nfs: we don't support removing system.nfs4_acl
Jakub Kicinski (1):
ipv6: weaken the v4mapped source check
Jan Beulich (1):
xen-blkback: don't leak persistent grants from xen_blkbk_map()
Jan Kara (1):
ext4: add reclaim checks to xattr code
Jani Nikula (1):
drm/i915/dsc: fix DSS CTL register usage for ICL DSI transcoders
Jean-Philippe Brucker (1):
libbpf: Fix BTF dump of pointer-to-array-of-struct
JeongHyeon Lee (1):
dm verity: fix DM_VERITY_OPTS_MAX value
Jesse Brandeburg (1):
igb: check timestamp validity
Jia-Ju Bai (6):
net: tehuti: fix error return code in bdx_probe()
net: intel: iavf: fix error return code of iavf_init_get_resources()
net: hisilicon: hns: fix error return code of hns_nic_clear_all_rx_fetch()
net: wan: fix error return code of uhdlc_init()
scsi: qedi: Fix error return code of qedi_alloc_global_queues()
scsi: mpt3sas: Fix error return code of mpt3sas_base_attach()
Jimmy Assarsson (1):
can: kvaser_pciefd: Always disable bus load reporting
Jiri Bohac (1):
net: check all name nodes in __dev_alloc_name
Jiri Slaby (1):
kbuild: dummy-tools: fix inverted tests for gcc
Joakim Zhang (1):
net: stmmac: fix dma physical address of descriptor when display ring
Johan Hovold (1):
net: cdc-phonet: fix data-interface release on probe failure
Johannes Berg (1):
mac80211: fix rate mask reset
Josef Bacik (3):
btrfs: do not initialize dev stats if we have no dev_root
btrfs: do not initialize dev replace for bad dev root
btrfs: initialize device::fs_info always
Josh Poimboeuf (1):
static_call: Allow module use without exposing static_call_key
Julian Braha (1):
staging: rtl8192e: fix kconfig dependency on CRYPTO
Kenneth Feng (1):
drm/amd/pm: workaround for audio noise issue
Kumar Kartikeya Dwivedi (1):
libbpf: Use SOCK_CLOEXEC when opening the netlink socket
Li RongQing (1):
igb: avoid premature Rx buffer reuse
Louis Peens (3):
nfp: flower: fix unsupported pre_tunnel flows
nfp: flower: add ipv6 bit to pre_tunnel control message
nfp: flower: fix pre_tun mask id allocation
Lukasz Luba (1):
PM: EM: postpone creating the debugfs dir till fs_initcall
Lv Yunlong (2):
nvme-rdma: Fix a use after free in nvmet_rdma_write_data_done net/qlcnic: Fix a use after free in qlcnic_83xx_get_minidump_template
Lyude Paul (1):
drm/nouveau/kms/nve4-nv108: Limit cursors to 128x128
Maciej Fijalkowski (1):
veth: Store queue_mapping independently of XDP prog presence
Magnus Karlsson (1):
ice: fix napi work done reporting in xsk path
Maor Dickman (1):
net/mlx5e: Don't match on Geneve options in case option masks are all zero
Marc Kleine-Budde (3):
can: isotp: isotp_setsockopt(): only allow to set low level TX flags for CAN-FD
can: isotp: TX-path: ensure that CAN frame flags are initialized
can: peak_usb: Revert "can: peak_usb: add forgotten supported devices"
Mark Brown (1):
kselftest: arm64: Fix exit code of sve-ptrace
Mark Pearson (1):
ALSA: hda: ignore invalid NHLT table
Mark Rutland (1):
arm64: stacktrace: don't trace arch_stack_walk()
Mark Tomlinson (3):
Revert "netfilter: x_tables: Switch synchronization to RCU"
netfilter: x_tables: Use correct memory barriers. Revert "netfilter: x_tables: Update remaining dereference to RCU"
Markus Theil (1):
mac80211: fix double free in ibss_leave
Martin Willi (1):
can: dev: Move device back to init netns on owning netns delete
Masahiro Yamada (1):
kbuild: add image_name to no-sync-config-targets
Matthew Wilcox (Oracle) (1):
fs/cachefiles: Remove wait_bit_key layout dependency
Maxim Mikityanskiy (2):
net/mlx5e: When changing XDP program without reset, take refs for XSK RQs net/mlx5e: Revert parameters on errors when changing PTP state without reset
Mian Yousaf Kaukab (1):
netsec: restore phy power state after controller reset
Miaohe Lin (1):
hugetlb_cgroup: fix imbalanced css_get and css_put pair for shared mappings
Michael Braun (1):
gianfar: fix jumbo packets+napi+rx overrun crash
Michael Ellerman (1):
powerpc/4xx: Fix build errors from mfdcr()
Michael Walle (1):
net: phy: introduce phydev->port
Mike Rapoport (1):
mm: memblock: fix section mismatch warning again
Mikulas Patocka (2):
dm: don't report "detected capacity change" on device creation dm ioctl: fix out of bounds array access when no devices
Mimi Zohar (1):
integrity: double check iint_cache was initialized
Muhammad Husaini Zulkifli (2):
igc: Fix Pause Frame Advertising
igc: Fix Supported Pause Frame Link Setting
Namhyung Kim (1):
libbpf: Fix error path in bpf_object__elf_init()
Nick Desaulniers (1):
gcov: fix clang-11+ support
Nicolas Ferre (1):
ARM: dts: at91: sam9x60: fix mux-mask to match product's datasheet
Nirmoy Das (1):
drm/amdgpu: fb BO should be ttm_bo_type_device
Nitin Rawat (1):
scsi: ufs: ufs-qcom: Disable interrupt in reset path
Oliver Hartkopp (1):
can: isotp: tx-path: zero initialize outgoing CAN frames
Omar Sandoval (1):
btrfs: fix check_data_csum() error message for direct I/O
Ondrej Mosnacek (2):
selinux: don't log MAC_POLICY_LOAD record on failed policy load
selinux: fix variable scope issue in live sidtab conversion
Ong Boon Leong (1):
net: phylink: Fix phylink_err() function name error in phylink_major_config
Pablo Neira Ayuso (2):
netfilter: nftables: report EOPNOTSUPP on unsupported flowtable flags
netfilter: nftables: allow to update flowtable flags
Parav Pandit (1):
net/mlx5e: E-switch, Fix rate calculation division
Paul Cercueil (2):
net: davicom: Use platform_get_irq_optional() irqchip/ingenic: Add support for the JZ4760
Paulo Alcantara (1):
cifs: change noisy error message to FYI
Pavel Begunkov (2):
io_uring: cancel deferred requests in try_cancel
io_uring: fix provide_buffers sign extension
Pavel Tatashin (1):
arm64: kdump: update ppos when reading elfcorehdr
Peter Zijlstra (4):
u64_stats,lockdep: Fix u64_stats_init() vs lockdep
static_call: Pull some static_call declarations to the type headers
static_call: Fix the module key fixup
static_call: Fix static_call_set_init()
Phillip Lougher (1):
squashfs: fix xattr id and id lookup sanity checks
Potnuri Bharat Teja (1):
RDMA/cxgb4: Fix adapter LE hash errors while destroying ipv6 listening server
Prike Liang (1):
drm/amdgpu: fix the hibernation suspend with s0ix
Qingqing Zhuo (1):
drm/amd/display: Enable pflip interrupt upon pipe enable
Rafael J. Wysocki (2):
PM: runtime: Defer suspending suppliers
ACPI: scan: Rearrange memory allocation in acpi_device_add()
Rakesh Babu (1):
octeontx2-af: Formatting debugfs entry rsrc_alloc.
Rob Gardner (1):
sparc64: Fix opcode filtering in handling of no fault loads
Robert Hancock (2):
net: axienet: Fix probe error cleanup
net: phy: broadcom: Set proper 1000BaseX/SGMII interface mode for BCM54616S
Roger Pau Monne (2):
xen/x86: make XEN_BALLOON_MEMORY_HOTPLUG_LIMIT depend on MEMORY_HOTPLUG Revert "xen: fix p2m size in dom0 for disabled memory hotplug case"
Sabyrzhan Tasbolatov (1):
fs/ext4: fix integer overflow in s_log_groups_per_flex
Sasha Levin (1):
bpf: Don't do bpf_cgroup_storage_set() for kuprobe/tp programs
Sasha Neftin (1):
igc: reinit_locked() should be called with rtnl_lock
Sean Christopherson (2):
KVM: x86: Protect userspace MSR filter with SRCU, and set atomically-ish mm/mmu_notifiers: ensure range_end() is paired with range_start()
Sean Nyekjaer (1):
squashfs: fix inode lookup sanity checks
Sergei Trofimovich (2):
ia64: fix ia64_syscall_get_set_arguments() for break-based syscalls
ia64: fix ptrace(PTRACE_SYSCALL_INFO_EXIT) sign
Shannon Nelson (1):
ionic: linearize tso skb with too many frags
Shin'ichiro Kawasaki (1):
dm table: Fix zoned model check and zone sectors check
Shyam Prasad N (1):
cifs: Adjust key sizes and key generation routines for AES256 encryption
Stanislav Fomichev (1):
bpf: Use NOP_ATOMIC5 instead of emit_nops(&prog, 5) for BPF_TRAMP_F_CALL_ORIG
Stephane Grosjean (1):
can: peak_usb: add forgotten supported devices
Steve French (1):
smb3: fix cached file size problems in duplicate extents (reflink)
Subbaraya Sundeep (1):
octeontx2-af: Remove TOS field from MKEX TX
Sudeep Holla (1):
cpufreq: blacklist Arm Vexpress platforms in cpufreq-dt-platdev
Sung Lee (1):
drm/amd/display: Revert dram_clock_change_latency for DCN2.1
Tal Lossos (1):
bpf: Change inode_storage's lookup_elem return value from NULL to -EBADF
Tariq Toukan (1):
net/mlx5e: RX, Mind the MPWQE gaps when calculating offsets
Thomas Gleixner (1):
locking/mutex: Fix non debug version of mutex_lock_io_nested()
Thomas Hebb (1):
z3fold: prevent reclaim/free race for headless pages
Timo Rothenpieler (1):
nfs: fix PNFS_FLEXFILE_LAYOUT Kconfig default
Tomer Tayar (2):
habanalabs: Call put_pid() when releasing control device
habanalabs: Disable file operations after device is removed
Tong Zhang (6):
atm: eni: dont release is never initialized
atm: lanai: dont run lanai_dev_close if not open
atm: uPD98402: fix incorrect allocation
atm: idt77252: fix null-ptr-dereference
can: c_can_pci: c_can_pci_remove(): fix use-after-free
can: c_can: move runtime PM enable/disable to c_can_platform
Tony Lindgren (3):
soc: ti: omap-prm: Fix reboot issue with invalid pcie reset map for dra7
ARM: OMAP2+: Fix smartreflex init regression after dropping legacy data
soc: ti: omap-prm: Fix occasional abort on reset deassert for dra7 iva
Torin Cooper-Bennun (2):
can: m_can: m_can_do_rx_poll(): fix extraneous msg loss warning
can: m_can: m_can_rx_peripheral(): fix RX being blocked by errors
Vegard Nossum (1):
ACPICA: Always create namespace nodes using acpi_ns_create_node()
Vitaly Lifshits (1):
e1000e: add rtnl_lock() to e1000_reset_task
Vladimir Oltean (1):
net: bridge: don't notify switchdev for local FDB addresses
Wei Wang (1):
ipv6: fix suspecious RCU usage warning
Wei Yongjun (1):
umem: fix error return code in mm_pci_probe()
Xie He (1):
net: hdlc_x25: Prevent racing between "x25_close" and "x25_xmit"/"x25_rx"
Xin Long (1):
sctp: move sk_route_caps check and set into sctp_outq_flush_transports
Xunlei Pang (1):
blk-cgroup: Fix the recursive blkg rwstat
Yang Li (1):
gpiolib: acpi: Add missing IRQF_ONESHOT
Yinjun Zhang (1):
netfilter: flowtable: Make sure GC works periodically in idle system
Zhan Liu (1):
drm/amdgpu/display: Use wm_table.entries for dcn301 calculate_wm
Zqiang (1):
bpf: Fix umd memory leak in copy_process()
dillon min (1):
ARM: dts: imx6ull: fix ubi filesystem mount failed
satya priya (2):
regulator: qcom-rpmh: Correct the pmic5_hfsmps515 buck
regulator: qcom-rpmh: Use correct buck for S1C regulator
wenxu (1):
net/sched: cls_flower: fix only mask bit check in the validate_ct_state
Greg Kroah-Hartman
maintainerDocumentation/virt/kvm/api.rst +4 -2
@@ -4831,8 +4831,10 @@ If an MSR access is not permitted through the filtering, it generates a allows user space to deflect and potentially handle various MSR accesses into user space. -If a vCPU is in running state while this ioctl is invoked, the vCPU may -experience inconsistent filtering behavior on MSR accesses. +Note, invoking this ioctl with a vCPU is running is inherently racy. However, +KVM does guarantee that vCPUs will see either the previous filter or the new +filter, e.g. MSRs with identical settings in both the old and new filter will +have deterministic behavior. 5. The kvm_run structure
Makefile +3 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 11 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = 💕 Valentine's Day Edition 💕
@@ -265,7 +265,8 @@ no-dot-config-targets := $(clean-targets) \ $(version_h) headers headers_% archheaders archscripts \ %asm-generic kernelversion %src-pkg dt_binding_check \ outputmakefile -no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease +no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \ + image_name single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ config-build :=
arch/arm/boot/dts/at91-sam9x60ek.dts +0 -8
@@ -334,14 +334,6 @@ ethernet-phy@0 { }; &pinctrl { - atmel,mux-mask = < - /* A B C */ - 0xFFFFFE7F 0xC0E0397F 0xEF00019D /* pioA */ - 0x03FFFFFF 0x02FC7E68 0x00780000 /* pioB */ - 0xffffffff 0xF83FFFFF 0xB800F3FC /* pioC */ - 0x003FFFFF 0x003F8000 0x00000000 /* pioD */ - >; - adc { pinctrl_adc_default: adc_default { atmel,pins = <AT91_PIOB 15 AT91_PERIPH_A AT91_PINCTRL_NONE>;
arch/arm/boot/dts/at91-sama5d27_som1.dtsi +2 -2
@@ -84,8 +84,8 @@ macb0: ethernet@f8008000 { pinctrl-0 = <&pinctrl_macb0_default>; phy-mode = "rmii"; - ethernet-phy@0 { - reg = <0x0>; + ethernet-phy@7 { + reg = <0x7>; interrupt-parent = <&pioA>; interrupts = <PIN_PD31 IRQ_TYPE_LEVEL_LOW>; pinctrl-names = "default";
arch/arm/boot/dts/imx6ull-myir-mys-6ulx-eval.dts +1 -0
@@ -14,5 +14,6 @@ / { }; &gpmi { + fsl,use-minimum-ecc; status = "okay"; };
arch/arm/boot/dts/sam9x60.dtsi +9 -0
@@ -606,6 +606,15 @@ pinctrl: pinctrl@fffff400 { compatible = "microchip,sam9x60-pinctrl", "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; ranges = <0xfffff400 0xfffff400 0x800>; + /* mux-mask corresponding to sam9x60 SoC in TFBGA228L package */ + atmel,mux-mask = < + /* A B C */ + 0xffffffff 0xffe03fff 0xef00019d /* pioA */ + 0x03ffffff 0x02fc7e7f 0x00780000 /* pioB */ + 0xffffffff 0xffffffff 0xf83fffff /* pioC */ + 0x003fffff 0x003f8000 0x00000000 /* pioD */ + >; + pioA: gpio@fffff400 { compatible = "microchip,sam9x60-gpio", "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; reg = <0xfffff400 0x200>;
arch/arm/mach-omap2/sr_device.c +58 -17
115 lines not on this page · raw message
arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi +1 -0
@@ -192,6 +192,7 @@ crypto: crypto@1700000 { ranges = <0x0 0x00 0x1700000 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; + dma-coherent; sec_jr0: jr@10000 { compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi +1 -0
@@ -322,6 +322,7 @@ crypto: crypto@1700000 { ranges = <0x0 0x00 0x1700000 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>; interrupts = <0 75 0x4>; + dma-coherent; sec_jr0: jr@10000 { compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi +1 -0
@@ -325,6 +325,7 @@ crypto: crypto@1700000 { ranges = <0x0 0x00 0x1700000 0x100000>; reg = <0x00 0x1700000 0x0 0x100000>; interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; + dma-coherent; sec_jr0: jr@10000 { compatible = "fsl,sec-v5.4-job-ring",
arch/arm64/kernel/crash_dump.c +2 -0
@@ -64,5 +64,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,ssize_t elfcorehdr_read (char *buf,size_t count,u64 *ppos) {memcpy (buf,phys_to_virt ((phys_addr_t)*ppos), count); + *ppos += count; +return count; }
arch/arm64/kernel/stacktrace.c +5 -4
@@ -199,8 +199,9 @@ void show_stack(struct task_struct *tsk, unsigned long *sp, const char *loglvl)#ifdef CONFIG_STACKTRACE -void arch_stack_walk (stack_trace_consume_fn consume_entry,void *cookie, -struct task_struct *task,struct pt_regs *regs) +noinline void arch_stack_walk(stack_trace_consume_fn consume_entry, +void *cookie,struct task_struct *task, +struct pt_regs *regs) {struct stackframe frame;
@@ -208,8 +209,8 @@ void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,start_backtrace (&frame, regs->regs[29 ], regs->pc); else if (task == current) start_backtrace(&frame, - (unsigned long)__builtin_frame_address(0), - (unsigned long)arch_stack_walk); + (unsigned long)__builtin_frame_address(1), + (unsigned long)__builtin_return_address(0)); else start_backtrace(&frame, thread_saved_fp(task),thread_saved_pc (task ));
arch/ia64/include/asm/syscall.h +1 -1
@@ -32,7 +32,7 @@ static inline void syscall_rollback(struct task_struct *task,static inline long syscall_get_error (struct task_struct *task,struct pt_regs *regs) { -return regs->r10 ==-1 ? regs->r8:0 ; +return regs->r10 ==-1 ? -regs->r8:0 ; } static inline long syscall_get_return_value(struct task_struct *task,
arch/ia64/kernel/ptrace.c +18 -6
@@ -2013,27 +2013,39 @@ static void syscall_get_set_args_cb(struct unw_frame_info *info, void *data) {struct syscall_get_set_args *args = data;struct pt_regs *pt = args->regs; -unsigned long *krbs, cfm, ndirty; +unsigned long *krbs, cfm, ndirty, nlocals, nouts;int i, count;if (unw_unwind_to_user (info) <0 )return ; +/* +* We get here via a few paths: +* - break instruction: cfm is shared with caller. +* syscall args are in out= regs, locals are non-empty. +* - epsinstruction: cfm is set by br.call +* locals don't exist. +* +* For both cases argguments are reachable in cfm.sof - cfm.sol. +* CFM: [ ... | sor: 17..14 | sol : 13..7 | sof : 6..0 ] +*/ cfm = pt->cr_ifs; + nlocals = (cfm >>7 ) &0x7f ;/* aka sol */ + nouts = (cfm &0x7f ) - nlocals;/* aka sof - sol */ krbs = (unsigned long *)info->task +IA64_RBS_OFFSET /8 ; ndirty =ia64_rse_num_regs (krbs, krbs + (pt->loadrs >>19 )); count =0 ;if (in_syscall (pt)) - count =min_t (int, args->n, cfm &0x7f ); + count =min_t (int, args->n, nouts); +/* Iterate over outs. */ for (i =0 ; i < count; i++) { +int j = ndirty + nlocals + i + args->i;if (args->rw) - *ia64_rse_skip_regs (krbs, ndirty + i + args->i) = - args->args[i]; + *ia64_rse_skip_regs (krbs, j) = args->args[i];else - args->args[i] = *ia64_rse_skip_regs (krbs, - ndirty + i + args->i); + args->args[i] = *ia64_rse_skip_regs (krbs, j); }if (!args->rw) {
arch/powerpc/include/asm/dcr-native.h +4 -4
@@ -53,8 +53,8 @@ static inline void mtdcrx(unsigned int reg, unsigned int val)#define mfdcr (rn) \ ({unsigned int rval; \ if (__builtin_constant_p(rn) && rn < 1024) \ - asm volatile("mfdcr %0," __stringify(rn) \ - : "=r" (rval)); \ + asm volatile("mfdcr %0, %1" : "=r" (rval) \ + : "n" (rn)); \ else if (likely(cpu_has_feature(CPU_FTR_INDEXED_DCR))) \ rval = mfdcrx(rn); \ else \
@@ -64,8 +64,8 @@ static inline void mtdcrx(unsigned int reg, unsigned int val)#define mtdcr (rn, v) \ do { \ if (__builtin_constant_p(rn) && rn < 1024) \ - asm volatile("mtdcr " __stringify(rn) ",%0" \ - : : "r" (v)); \ + asm volatile("mtdcr %0, %1" \ + : : "n" (rn), "r" (v)); \ else if (likely(cpu_has_feature(CPU_FTR_INDEXED_DCR))) \ mtdcrx(rn, v); \ else \
arch/sparc/kernel/traps_64.c +6 -7
@@ -275,14 +275,13 @@ bool is_no_fault_exception(struct pt_regs *regs) asi = (regs->tstate >>24 );/* saved %asi */ else asi = (insn >>5 );/* immediate asi */ -if ((asi &0xf2 ) ==ASI_PNF ) { -if (insn &0x1000000 ) {/* op3[5:4]=3 */ -handle_ldf_stq (insn, regs); -return true; - }else if (insn &0x200000 ) {/* op3[2], stores */ +if ((asi &0xf6 ) ==ASI_PNF ) { +if (insn &0x200000 )/* op3[2], stores */ return false; - } -handle_ld_nf (insn, regs); +if (insn &0x1000000 )/* op3[5:4]=3 (fp) */ +handle_ldf_stq (insn, regs); +else +handle_ld_nf (insn, regs);return true; } }
arch/x86/include/asm/kvm_host.h +9 -5
@@ -894,6 +894,12 @@ enum kvm_irqchip_mode { KVM_IRQCHIP_SPLIT, /* created with KVM_CAP_SPLIT_IRQCHIP */ }; +struct kvm_x86_msr_filter { +u8 count; +bool default_allow:1 ; +struct msr_bitmap_range ranges[16 ]; +}; +#define APICV_INHIBIT_REASON_DISABLE 0#define APICV_INHIBIT_REASON_HYPERV 1#define APICV_INHIBIT_REASON_NESTED 2
@@ -989,14 +995,12 @@ struct kvm_arch {bool guest_can_read_msr_platform_info;bool exception_payload_enabled; +bool bus_lock_detection_enabled; +/* Deflect RDMSR and WRMSR to user space when they trigger a #GP */ u32 user_space_msr_mask; -struct { -u8 count; -bool default_allow:1 ; -struct msr_bitmap_range ranges[16 ]; - } msr_filter; +struct kvm_x86_msr_filter __rcu *msr_filter;struct kvm_pmu_event_filter *pmu_event_filter;struct task_struct *nx_lpage_recovery_thread;
arch/x86/include/asm/static_call.h +7 -0
@@ -37,4 +37,11 @@#define ARCH_DEFINE_STATIC_CALL_NULL_TRAMP (name) \ __ARCH_DEFINE_STATIC_CALL_TRAMP(name, "ret; nop; nop; nop; nop") + +#define ARCH_ADD_TRAMP_KEY (name) \ + asm(".pushsection .static_call_tramp_key, \"a\" \n" \ + ".long " STATIC_CALL_TRAMP_STR(name) " - . \n" \ + ".long " STATIC_CALL_KEY_STR(name) " - . \n" \ + ".popsection \n") +#endif /* _ASM_STATIC_CALL_H */
arch/x86/include/asm/xen/page.h +0 -12
@@ -86,18 +86,6 @@ clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops, }#endif -/* -* The maximum amount of extra memory compared to the base size. The -* main scaling factor is the size of struct page. At extreme ratios -* of base:extra, all the base memory can be filled with page -* structures for the extra memory, leaving no space for anything -* else. -* -* 10x seems like a reasonable balance between scaling flexibility and -* leaving a practically usable system. -*/ -#define XEN_EXTRA_MEM_RATIO (10) -/* * Helper functions to write or read unsigned long values to/from * memory, when the access may fault.
arch/x86/kvm/x86.c +65 -44
187 lines not on this page · raw message
arch/x86/mm/mem_encrypt.c +1 -1
@@ -262,7 +262,7 @@ static void __init __set_clr_pte_enc(pte_t *kpte, int level, bool enc)if (pgprot_val (old_prot) ==pgprot_val (new_prot))return ; - pa = pfn <<page_level_shift (level); + pa = pfn <<PAGE_SHIFT ; size =page_level_size (level);/*
arch/x86/net/bpf_jit_comp.c +23 -4
@@ -1735,7 +1735,7 @@ static int invoke_bpf_mod_ret(const struct btf_func_model *m, u8 **pprog,* add rsp, 8 // skip eth_type_trans's frame * ret // return to its caller */ -int arch_prepare_bpf_trampoline (void *image,void *image_end, +int arch_prepare_bpf_trampoline (struct bpf_tramp_image *im,void *image,void *image_end,const struct btf_func_model *m,u32 flags,struct bpf_tramp_progs *tprogs,void *orig_call)
@@ -1774,6 +1774,15 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end,save_regs (m, &prog, nr_args, stack_size); +if (flags &BPF_TRAMP_F_CALL_ORIG ) { +/* arg1: mov rdi, im */ +emit_mov_imm64 (&prog,BPF_REG_1 , (long ) im >>32 , (u32 ) (long ) im); +if (emit_call (&prog, __bpf_tramp_enter, prog)) { + ret = -EINVAL ; + goto cleanup; + } + } +if (fentry->nr_progs)if (invoke_bpf (m, &prog, fentry, stack_size))return -EINVAL ;
@@ -1792,8 +1801,7 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end, }if (flags &BPF_TRAMP_F_CALL_ORIG ) { -if (fentry->nr_progs || fmod_ret->nr_progs) -restore_regs (m, &prog, nr_args, stack_size); +restore_regs (m, &prog, nr_args, stack_size);/* call original function */ if (emit_call (&prog, orig_call, prog)) {
@@ -1802,6 +1810,9 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end, }/* remember return value in a stack for bpf prog to access */ emit_stx (&prog,BPF_DW ,BPF_REG_FP ,BPF_REG_0 ,-8 ); + im->ip_after_call = prog; +memcpy (prog, ideal_nops[NOP_ATOMIC5 ],X86_PATCH_SIZE ); + prog +=X86_PATCH_SIZE ; }if (fmod_ret->nr_progs) {
@@ -1832,9 +1843,17 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end,* the return value is only updated on the stack and still needs to be * restored to R0. */ -if (flags &BPF_TRAMP_F_CALL_ORIG ) +if (flags &BPF_TRAMP_F_CALL_ORIG ) { + im->ip_epilogue = prog; +/* arg1: mov rdi, im */ +emit_mov_imm64 (&prog,BPF_REG_1 , (long ) im >>32 , (u32 ) (long ) im); +if (emit_call (&prog, __bpf_tramp_exit, prog)) { + ret = -EINVAL ; + goto cleanup; + }/* restore original return value back into RAX */ emit_ldx (&prog,BPF_DW ,BPF_REG_0 ,BPF_REG_FP ,-8 ); + }EMIT1 (0x5B );/* pop rbx */ EMIT1 (0xC9 );/* leave */
arch/x86/xen/p2m.c +2 -5
@@ -98,8 +98,8 @@ EXPORT_SYMBOL_GPL(xen_p2m_size);unsigned long xen_max_p2m_pfn__read_mostly ;EXPORT_SYMBOL_GPL (xen_max_p2m_pfn); -#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT -#define P2M_LIMIT CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT +#ifdef CONFIG_XEN_MEMORY_HOTPLUG_LIMIT +#define P2M_LIMIT CONFIG_XEN_MEMORY_HOTPLUG_LIMIT#else #define P2M_LIMIT 0#endif
@@ -416,9 +416,6 @@ void __init xen_vmalloc_p2m_tree(void) xen_p2m_last_pfn = xen_max_p2m_pfn; p2m_limit = (phys_addr_t )P2M_LIMIT *1024 *1024 *1024 /PAGE_SIZE ; -if (!p2m_limit &&IS_ENABLED (CONFIG_XEN_UNPOPULATED_ALLOC )) - p2m_limit = xen_start_info->nr_pages *XEN_EXTRA_MEM_RATIO ; - vm.flags =VM_ALLOC ; vm.size =ALIGN (sizeof (unsigned long ) *max (xen_max_p2m_pfn, p2m_limit),PMD_SIZE *PMDS_PER_MID_PAGE );
arch/x86/xen/setup.c +14 -2
@@ -59,6 +59,18 @@ static struct { } xen_remap_buf__initdata __aligned(PAGE_SIZE) ;static unsigned long xen_remap_mfn__initdata =INVALID_P2M_ENTRY ; +/* +* The maximum amount of extra memory compared to the base size. The +* main scaling factor is the size of struct page. At extreme ratios +* of base:extra, all the base memory can be filled with page +* structures for the extra memory, leaving no space for anything +* else. +* +* 10x seems like a reasonable balance between scaling flexibility and +* leaving a practically usable system. +*/ +#define EXTRA_MEM_RATIO (10) +static bool xen_512gb_limit__initdata =IS_ENABLED (CONFIG_XEN_512GB );static void __init xen_parse_512gb (void )
@@ -778,13 +790,13 @@ char * __init xen_memory_setup(void) extra_pages += max_pages - max_pfn;/* -* Clamp the amount of extra memory to a XEN_EXTRA_MEM_RATIO +* Clamp the amount of extra memory to a EXTRA_MEM_RATIO * factor the base size. * * Make sure we have no memory above max_pages, as this area * isn't handled by the p2m management. */ - extra_pages =min3 (XEN_EXTRA_MEM_RATIO *min (max_pfn,PFN_DOWN (MAXMEM )), + extra_pages =min3 (EXTRA_MEM_RATIO *min (max_pfn,PFN_DOWN (MAXMEM )), extra_pages, max_pages - max_pfn); i =0 ; addr = xen_e820_table.entries[0 ].addr;
block/blk-cgroup-rwstat.c +2 -1
@@ -109,6 +109,7 @@ void blkg_rwstat_recursive_sum(struct blkcg_gq *blkg, struct blkcg_policy *pol,lockdep_assert_held (&blkg->q->queue_lock); +memset (sum,0 ,sizeof (*sum));rcu_read_lock ();blkg_for_each_descendant_pre (pos_blkg, pos_css, blkg) {struct blkg_rwstat *rwstat;
@@ -122,7 +123,7 @@ void blkg_rwstat_recursive_sum(struct blkcg_gq *blkg, struct blkcg_policy *pol, rwstat = (void *)pos_blkg + off;for (i =0 ; i <BLKG_RWSTAT_NR ; i++) - sum->cnt[i] =blkg_rwstat_read_counter (rwstat, i); + sum->cnt[i] +=blkg_rwstat_read_counter (rwstat, i); }rcu_read_unlock (); }
block/blk-merge.c +8 -0
@@ -383,6 +383,14 @@ unsigned int blk_recalc_rq_segments(struct request *rq)switch (bio_op (rq->bio)) {case REQ_OP_DISCARD :case REQ_OP_SECURE_ERASE : +if (queue_max_discard_segments (rq->q) >1 ) { +struct bio *bio = rq->bio; + +for_each_bio (bio) + nr_phys_segs++; +return nr_phys_segs; + } +return 1 ;case REQ_OP_WRITE_ZEROES :return 0 ;case REQ_OP_WRITE_SAME :
block/blk-zoned.c +1 -1
@@ -240,7 +240,7 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,*/ if (op ==REQ_OP_ZONE_RESET &&blkdev_allow_reset_all_zones (bdev, sector, nr_sectors)) { - bio->bi_opf =REQ_OP_ZONE_RESET_ALL ; + bio->bi_opf =REQ_OP_ZONE_RESET_ALL |REQ_SYNC ;break ; }
block/genhd.c +1 -3
@@ -658,10 +658,8 @@ static void register_disk(struct device *parent, struct gendisk *disk,kobject_create_and_add ("holders" , &ddev->kobj); disk->slave_dir =kobject_create_and_add ("slaves" , &ddev->kobj); -if (disk->flags &GENHD_FL_HIDDEN ) { -dev_set_uevent_suppress (ddev,0 ); +if (disk->flags &GENHD_FL_HIDDEN )return ; - }disk_scan_partitions (disk);
drivers/acpi/acpica/nsaccess.c +1 -2
@@ -99,13 +99,12 @@ acpi_status acpi_ns_root_initialize(void)* just create and link the new node(s) here. */ new_node = -ACPI_ALLOCATE_ZEROED (sizeof (struct acpi_namespace_node )); +acpi_ns_create_node (*ACPI_CAST_PTR (u32, init_val->name));if (!new_node) { status =AE_NO_MEMORY ; goto unlock_and_exit; } -ACPI_COPY_NAMESEG (new_node->name.ascii, init_val->name); new_node->descriptor_type =ACPI_DESC_TYPE_NAMED ; new_node->type = init_val->type;
drivers/acpi/internal.h +5 -1
@@ -9,6 +9,8 @@#ifndef _ACPI_INTERNAL_H_#define _ACPI_INTERNAL_H_ +#include <linux/idr.h> +#define PREFIX "ACPI: "int early_acpi_osi_init (void );
@@ -96,9 +98,11 @@ void acpi_scan_table_handler(u32 event, void *table, void *context);extern struct list_head acpi_bus_id_list; +#define ACPI_MAX_DEVICE_INSTANCES 4096 +struct acpi_device_bus_id {const char *bus_id; -unsigned int instance_no; +struct ida instance_ida;struct list_head node; };
drivers/acpi/scan.c +53 -35
128 lines not on this page · raw message
drivers/acpi/video_detect.c +1 -0
@@ -147,6 +147,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { }, }, { + .callback = video_detect_force_vendor, .ident = "Sony VPCEH3U1E", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
drivers/atm/eni.c +2 -1
@@ -2260,7 +2260,8 @@ static int eni_init_one(struct pci_dev *pci_dev,return rc; err_eni_release: -eni_do_release (dev); + dev->phy =NULL ; +iounmap (ENI_DEV (dev)->ioaddr); err_unregister:atm_dev_deregister (dev); err_free_consistent:
drivers/atm/idt77105.c +2 -2
@@ -262,7 +262,7 @@ static int idt77105_start(struct atm_dev *dev) {unsigned long flags; -if (!(dev->dev_data =kmalloc (sizeof (struct idt77105_priv ),GFP_KERNEL ))) +if (!(dev->phy_data =kmalloc (sizeof (struct idt77105_priv ),GFP_KERNEL )))return -ENOMEM ;PRIV (dev)->dev = dev;spin_lock_irqsave (&idt77105_priv_lock, flags);
@@ -337,7 +337,7 @@ static int idt77105_stop(struct atm_dev *dev)else idt77105_all = walk->next; dev->phy =NULL ; - dev->dev_data =NULL ; + dev->phy_data =NULL ;kfree (walk);break ; }
drivers/atm/lanai.c +4 -1
@@ -2233,6 +2233,7 @@ static int lanai_dev_open(struct atm_dev *atmdev)conf1_write (lanai);#endif iounmap (lanai->base); + lanai->base =NULL ; error_pci:pci_disable_device (lanai->pci); error:
@@ -2245,6 +2246,8 @@ static int lanai_dev_open(struct atm_dev *atmdev)static void lanai_dev_close (struct atm_dev *atmdev) {struct lanai_dev *lanai = (struct lanai_dev *) atmdev->dev_data; +if (lanai->base==NULL ) +return ; printk(KERN_INFO DEV_LABEL "(itf %d): shutting down interface\n", lanai->number);lanai_timed_poll_stop (lanai);
@@ -2552,7 +2555,7 @@ static int lanai_init_one(struct pci_dev *pci,struct atm_dev *atmdev;int result; - lanai =kmalloc (sizeof (*lanai),GFP_KERNEL ); + lanai =kzalloc (sizeof (*lanai),GFP_KERNEL );if (lanai ==NULL ) { printk(KERN_ERR DEV_LABEL ": couldn't allocate dev_data structure!\n");
drivers/atm/uPD98402.c +1 -1
@@ -211,7 +211,7 @@ static void uPD98402_int(struct atm_dev *dev)static int uPD98402_start (struct atm_dev *dev) {DPRINTK ("phy_start\n" ); -if (!(dev->dev_data =kmalloc (sizeof (struct uPD98402_priv ),GFP_KERNEL ))) +if (!(dev->phy_data =kmalloc (sizeof (struct uPD98402_priv ),GFP_KERNEL )))return -ENOMEM ;spin_lock_init (&PRIV (dev)->lock);memset (&PRIV (dev)->sonet_stats,0 ,sizeof (struct k_sonet_stats ));
drivers/base/power/runtime.c +39 -6
87 lines not on this page · raw message
drivers/block/umem.c +4 -1
@@ -877,6 +877,7 @@ static int mm_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)if (card->mm_pages[0 ].desc ==NULL || card->mm_pages[1 ].desc ==NULL ) {dev_printk (KERN_ERR , &card->dev->dev,"alloc failed\n" ); + ret = -ENOMEM ; goto failed_alloc; }reset_page (&card->mm_pages[0 ]);
@@ -888,8 +889,10 @@ static int mm_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)spin_lock_init (&card->lock); card->queue =blk_alloc_queue (NUMA_NO_NODE ); -if (!card->queue) +if (!card->queue) { + ret = -ENOMEM ; goto failed_alloc; + }tasklet_init (&card->tasklet, process_page, (unsigned long )card);
drivers/block/xen-blkback/blkback.c +1 -1
@@ -891,7 +891,7 @@ static int xen_blkbk_map(struct xen_blkif_ring *ring, out:for (i = last_map; i < num; i++) {/* Don't zap current batch's valid persistent grants. */ -if (i >= last_map + segs_to_map) +if (i >= map_until) pages[i]->persistent_gnt =NULL ; pages[i]->handle =BLKBACK_INVALID_HANDLE ; }
drivers/bus/omap_l3_noc.c +2 -2
@@ -285,7 +285,7 @@ static int omap_l3_probe(struct platform_device *pdev)*/ l3->debug_irq =platform_get_irq (pdev,0 ); ret =devm_request_irq (l3->dev, l3->debug_irq, l3_interrupt_handler, -0x0 ,"l3-dbg-irq" , l3); +IRQF_NO_THREAD ,"l3-dbg-irq" , l3);if (ret) {dev_err (l3->dev,"request_irq failed for %d\n" , l3->debug_irq);
@@ -294,7 +294,7 @@ static int omap_l3_probe(struct platform_device *pdev) l3->app_irq =platform_get_irq (pdev,1 ); ret =devm_request_irq (l3->dev, l3->app_irq, l3_interrupt_handler, -0x0 ,"l3-app-irq" , l3); +IRQF_NO_THREAD ,"l3-app-irq" , l3);if (ret)dev_err (l3->dev,"request_irq failed for %d\n" , l3->app_irq);
drivers/clk/qcom/gcc-sc7180.c +2 -2
@@ -620,7 +620,7 @@ static struct clk_rcg2 gcc_sdcc1_apps_clk_src = { .name = "gcc_sdcc1_apps_clk_src", .parent_data = gcc_parent_data_1, .num_parents = 5, - .ops = &clk_rcg2_ops, + .ops = &clk_rcg2_floor_ops, }, };
@@ -642,7 +642,7 @@ static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = { .name = "gcc_sdcc1_ice_core_clk_src", .parent_data = gcc_parent_data_0, .num_parents = 4, - .ops = &clk_rcg2_floor_ops, + .ops = &clk_rcg2_ops, }, };
drivers/cpufreq/cpufreq-dt-platdev.c +2 -0
@@ -103,6 +103,8 @@ static const struct of_device_id whitelist[] __initconst = {static const struct of_device_id blacklist[]__initconst = { { .compatible ="allwinner,sun50i-h6" , }, + { .compatible ="arm,vexpress" , }, + { .compatible ="calxeda,highbank" , }, { .compatible ="calxeda,ecx-2000" , },
drivers/gpio/gpiolib-acpi.c +1 -1
@@ -174,7 +174,7 @@ static void acpi_gpiochip_request_irq(struct acpi_gpio_chip *acpi_gpio,int ret, value; ret =request_threaded_irq (event->irq,NULL , event->handler, - event->irqflags,"ACPI:Event" , event); + event->irqflags |IRQF_ONESHOT ,"ACPI:Event" , event);if (ret) { dev_err(acpi_gpio->chip->parent, "Failed to setup interrupt handler for %d\n",
drivers/gpu/drm/Kconfig +1 -0
@@ -232,6 +232,7 @@ source "drivers/gpu/drm/arm/Kconfig" config DRM_RADEON tristate "ATI Radeon" depends on DRM && PCI && MMU + depends on AGP || !AGP select FW_LOADER select DRM_KMS_HELPER select DRM_TTM
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +6 -2
@@ -2666,7 +2666,7 @@ static int amdgpu_device_ip_suspend_phase1(struct amdgpu_device *adev) {int i, r; -if (adev->in_poweroff_reboot_com || +if (adev->in_poweroff_reboot_com || adev->in_hibernate || !amdgpu_acpi_is_s0ix_supported (adev) ||amdgpu_in_reset (adev)) {amdgpu_device_set_pg_state (adev,AMD_PG_STATE_UNGATE );amdgpu_device_set_cg_state (adev,AMD_CG_STATE_UNGATE );
@@ -3727,7 +3727,11 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon)amdgpu_fence_driver_suspend (adev); -if (adev->in_poweroff_reboot_com || +/* +* TODO: Need figure out the each GNB IP idle off dependency and then +* improve the AMDGPU suspend/resume sequence for system-wide Sx entry/exit. +*/ +if (adev->in_poweroff_reboot_com || adev->in_hibernate || !amdgpu_acpi_is_s0ix_supported (adev) ||amdgpu_in_reset (adev)) r =amdgpu_device_ip_suspend_phase2 (adev);else
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -0
@@ -1102,6 +1102,7 @@ static const struct pci_device_id pciidlist[] = { {0x1002, 0x73A3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, {0x1002, 0x73AB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, {0x1002, 0x73AE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, + {0x1002, 0x73AF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, {0x1002, 0x73BF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_SIENNA_CICHLID}, /* Van Gogh */
drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +1 -1
@@ -146,7 +146,7 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, size = mode_cmd->pitches[0 ] * height; aligned_size =ALIGN (size,PAGE_SIZE ); ret =amdgpu_gem_object_create (adev, aligned_size,0 , domain, flags, - ttm_bo_type_kernel,NULL , &gobj); + ttm_bo_type_device,NULL , &gobj);if (ret) {pr_err ("failed to allocate framebuffer (%d)\n" , aligned_size);return -ENOMEM ;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 -0
@@ -4616,6 +4616,7 @@ static int fill_dc_plane_attributes(struct amdgpu_device *adev, dc_plane_state->global_alpha_value = plane_info.global_alpha_value; dc_plane_state->dcc = plane_info.dcc; dc_plane_state->layer_index = plane_info.layer_index;// Always returns 0 + dc_plane_state->flip_int_enabled = true;/* * Always set input transfer function, since plane state is refreshed
drivers/gpu/drm/amd/display/dc/dc.h +1 -0
@@ -889,6 +889,7 @@ struct dc_plane_state {int layer_index;union surface_update_flags update_flags; +bool flip_int_enabled;/* private to DC core */ struct dc_plane_status status;struct dc_context *ctx;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c +11 -0
@@ -1257,6 +1257,16 @@ void hubp1_soft_reset(struct hubp *hubp, bool reset)REG_UPDATE (DCHUBP_CNTL ,HUBP_DISABLE , reset ?1 :0 ); } +void hubp1_set_flip_int (struct hubp *hubp) +{ +struct dcn10_hubp *hubp1 =TO_DCN10_HUBP (hubp); + +REG_UPDATE (DCSURF_SURFACE_FLIP_INTERRUPT , +SURFACE_FLIP_INT_MASK ,1 ); + +return ; +} +void hubp1_init (struct hubp *hubp) {//do nothing
@@ -1290,6 +1300,7 @@ static const struct hubp_funcs dcn10_hubp_funcs = { .dmdata_load = NULL, .hubp_soft_reset = hubp1_soft_reset, .hubp_in_blank = hubp1_in_blank, + .hubp_set_flip_int = hubp1_set_flip_int, };/*****************************************/
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h +6 -0
@@ -74,6 +74,7 @@SRI (DCSURF_SURFACE_EARLIEST_INUSE_C ,HUBPREQ , id),\SRI (DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C ,HUBPREQ , id),\SRI (DCSURF_SURFACE_CONTROL ,HUBPREQ , id),\ +SRI (DCSURF_SURFACE_FLIP_INTERRUPT ,HUBPREQ , id),\SRI (HUBPRET_CONTROL ,HUBPRET , id),\SRI (DCN_EXPANSION_MODE ,HUBPREQ , id),\ SRI(DCHUBP_REQ_SIZE_CONFIG, HUBP, id),\
@@ -183,6 +184,7 @@uint32_t DCSURF_SURFACE_EARLIEST_INUSE_C ; \uint32_t DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C ; \uint32_t DCSURF_SURFACE_CONTROL ; \ +uint32_t DCSURF_SURFACE_FLIP_INTERRUPT ; \uint32_t HUBPRET_CONTROL ; \uint32_t DCN_EXPANSION_MODE ; \uint32_t DCHUBP_REQ_SIZE_CONFIG ; \
@@ -332,6 +334,7 @@HUBP_SF (HUBPREQ0_DCSURF_SURFACE_CONTROL ,SECONDARY_META_SURFACE_TMZ_C , mask_sh),\HUBP_SF (HUBPREQ0_DCSURF_SURFACE_CONTROL ,SECONDARY_SURFACE_DCC_EN , mask_sh),\HUBP_SF (HUBPREQ0_DCSURF_SURFACE_CONTROL ,SECONDARY_SURFACE_DCC_IND_64B_BLK , mask_sh),\ +HUBP_SF (HUBPREQ0_DCSURF_SURFACE_FLIP_INTERRUPT ,SURFACE_FLIP_INT_MASK , mask_sh),\HUBP_SF (HUBPRET0_HUBPRET_CONTROL ,DET_BUF_PLANE1_BASE_ADDRESS , mask_sh),\HUBP_SF (HUBPRET0_HUBPRET_CONTROL ,CROSSBAR_SRC_CB_B , mask_sh),\ HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
@@ -531,6 +534,7 @@type PRIMARY_SURFACE_DCC_IND_64B_BLK ;\type SECONDARY_SURFACE_DCC_EN ;\type SECONDARY_SURFACE_DCC_IND_64B_BLK ;\ +type SURFACE_FLIP_INT_MASK ;\type DET_BUF_PLANE1_BASE_ADDRESS ;\type CROSSBAR_SRC_CB_B ;\type CROSSBAR_SRC_CR_R ;\
@@ -777,4 +781,6 @@ void hubp1_read_state_common(struct hubp *hubp);bool hubp1_in_blank (struct hubp *hubp);void hubp1_soft_reset (struct hubp *hubp,bool reset); +void hubp1_set_flip_int (struct hubp *hubp); +#endif
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +7 -0
@@ -2195,6 +2195,13 @@ static void dcn10_enable_plane(if (dc->debug.sanity_checks) { hws->funcs.verify_allow_pstate_change_high (dc); } + +if (!pipe_ctx->top_pipe + && pipe_ctx->plane_state + && pipe_ctx->plane_state->flip_int_enabled + && pipe_ctx->plane_res.hubp->funcs->hubp_set_flip_int) + pipe_ctx->plane_res.hubp->funcs->hubp_set_flip_int (pipe_ctx->plane_res.hubp); + }void dcn10_program_gamut_remap (struct pipe_ctx *pipe_ctx)
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c +1 -0
@@ -1597,6 +1597,7 @@ static struct hubp_funcs dcn20_hubp_funcs = { .validate_dml_output = hubp2_validate_dml_output, .hubp_in_blank = hubp1_in_blank, .hubp_soft_reset = hubp1_soft_reset, + .hubp_set_flip_int = hubp1_set_flip_int, };
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +6 -0
@@ -1146,6 +1146,12 @@ void dcn20_enable_plane( pipe_ctx->plane_res.hubp->funcs->hubp_set_vm_system_aperture_settings (pipe_ctx->plane_res.hubp, &apt); } +if (!pipe_ctx->top_pipe + && pipe_ctx->plane_state + && pipe_ctx->plane_state->flip_int_enabled + && pipe_ctx->plane_res.hubp->funcs->hubp_set_flip_int) + pipe_ctx->plane_res.hubp->funcs->hubp_set_flip_int (pipe_ctx->plane_res.hubp); +// if (dc->debug.sanity_checks) { // dcn10_verify_allow_pstate_change_high(dc); // }
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_link_encoder.c +1 -2
@@ -341,8 +341,7 @@ void enc2_hw_init(struct link_encoder *enc) }else {AUX_REG_WRITE (AUX_DPHY_RX_CONTROL0 ,0x103d1110 ); -AUX_REG_WRITE (AUX_DPHY_TX_CONTROL ,0x21c4d ); - +AUX_REG_WRITE (AUX_DPHY_TX_CONTROL ,0x21c7a ); }//AUX_DPHY_TX_REF_CONTROL'AUX_TX_REF_DIV HW default is 0x32;
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c +1 -0
@@ -838,6 +838,7 @@ static struct hubp_funcs dcn21_hubp_funcs = { .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl, .hubp_init = hubp21_init, .validate_dml_output = hubp21_validate_dml_output, + .hubp_set_flip_int = hubp1_set_flip_int, }; bool hubp21_construct(
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +1 -1
@@ -296,7 +296,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn2_1_soc = { .num_banks = 8, .num_chans = 4, .vmm_page_size_bytes = 4096, - .dram_clock_change_latency_us = 11.72, + .dram_clock_change_latency_us = 23.84, .return_bus_width_bytes = 64, .dispclk_dppclk_vco_speed_mhz = 3600, .xfc_bus_transport_time_us = 4,
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c +1 -0
@@ -511,6 +511,7 @@ static struct hubp_funcs dcn30_hubp_funcs = { .hubp_init = hubp3_init, .hubp_in_blank = hubp1_in_blank, .hubp_soft_reset = hubp1_soft_reset, + .hubp_set_flip_int = hubp1_set_flip_int, }; bool hubp3_construct(
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c +31 -0
@@ -2601,6 +2601,19 @@ static const struct resource_funcs dcn30_res_pool_funcs = { .patch_unknown_plane_state = dcn20_patch_unknown_plane_state, }; +#define CTX ctx + +#define REG (reg_name) \ + (DCN_BASE.instance[0].segment[mm ## reg_name ## _BASE_IDX] + mm ## reg_name) + +static uint32_t read_pipe_fuses (struct dc_context *ctx) +{ +uint32_t value =REG_READ (CC_DC_PIPE_DIS ); +/* Support for max 6 pipes */ + value = value &0x3f ; +return value; +} + static bool dcn30_resource_construct( uint8_t num_virtual_links, struct dc *dc,
@@ -2610,6 +2623,15 @@ static bool dcn30_resource_construct(struct dc_context *ctx = dc->ctx;struct irq_service_init_data init_data;struct ddc_service_init_data ddc_init_data; +uint32_t pipe_fuses =read_pipe_fuses (ctx); +uint32_t num_pipes =0 ; + +if (!(pipe_fuses ==0 || pipe_fuses ==0x3e )) { +BREAK_TO_DEBUGGER (); +dm_error ("DC: Unexpected fuse recipe for navi2x !\n" ); +/* fault to single pipe */ + pipe_fuses =0x3e ; + }DC_FP_START ();
@@ -2739,6 +2761,15 @@ static bool dcn30_resource_construct(/* PP Lib and SMU interfaces */ init_soc_bounding_box (dc, pool); + num_pipes = dcn3_0_ip.max_num_dpp; + +for (i =0 ; i < dcn3_0_ip.max_num_dpp; i++) +if (pipe_fuses &1 << i) + num_pipes--; + + dcn3_0_ip.max_num_dpp = num_pipes; + dcn3_0_ip.max_num_otg = num_pipes; +dml_init_instance (&dc->dml, &dcn3_0_soc, &dcn3_0_ip,DML_PROJECT_DCN30 );/* IRQ */
drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c +95 -1
107 lines not on this page · raw message
drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h +2 -0
@@ -191,6 +191,8 @@ struct hubp_funcs {bool (*hubp_in_blank)(struct hubp *hubp);void (*hubp_soft_reset)(struct hubp *hubp,bool reset); + void (*hubp_set_flip_int)(struct hubp *hubp); + };#endif
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c +54 -0
72 lines not on this page · raw message
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c +63 -11
118 lines not on this page · raw message
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c +24 -0
@@ -133,6 +133,7 @@ static void vega12_set_default_registry_data(struct pp_hwmgr *hwmgr) data->registry_data.auto_wattman_debug =0 ; data->registry_data.auto_wattman_sample_period =100 ; data->registry_data.auto_wattman_threshold =50 ; + data->registry_data.pcie_dpm_key_disabled = !(hwmgr->feature_mask &PP_PCIE_DPM_MASK ); }static int vega12_set_features_platform_caps (struct pp_hwmgr *hwmgr)
@@ -539,6 +540,29 @@ static int vega12_override_pcie_parameters(struct pp_hwmgr *hwmgr) pp_table->PcieLaneCount[i] = pcie_width_arg; } +/* override to the highest if it's disabled from ppfeaturmask */ +if (data->registry_data.pcie_dpm_key_disabled) { +for (i =0 ; i <NUM_LINK_LEVELS ; i++) { + smu_pcie_arg = (i <<16 ) | (pcie_gen <<8 ) | pcie_width; + ret =smum_send_msg_to_smc_with_parameter (hwmgr, + PPSMC_MSG_OverridePcieParameters, smu_pcie_arg, +NULL ); +PP_ASSERT_WITH_CODE (!ret, +"[OverridePcieParameters] Attempt to override pcie params failed!" , + return ret); + + pp_table->PcieGenSpeed[i] = pcie_gen; + pp_table->PcieLaneCount[i] = pcie_width; + } + ret =vega12_enable_smc_features (hwmgr, + false, + data->smu_features[GNLD_DPM_LINK ].smu_feature_bitmap); +PP_ASSERT_WITH_CODE (!ret, +"Attempt to Disable DPM LINK Failed!" , + return ret); + data->smu_features[GNLD_DPM_LINK ].enabled = false; + data->smu_features[GNLD_DPM_LINK ].supported = false; + }return 0 ; }
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c +25 -0
@@ -171,6 +171,7 @@ static void vega20_set_default_registry_data(struct pp_hwmgr *hwmgr) data->registry_data.gfxoff_controlled_by_driver =1 ; data->gfxoff_allowed = false; data->counter_gfxoff =0 ; + data->registry_data.pcie_dpm_key_disabled = !(hwmgr->feature_mask &PP_PCIE_DPM_MASK ); }static int vega20_set_features_platform_caps (struct pp_hwmgr *hwmgr)
@@ -885,6 +886,30 @@ static int vega20_override_pcie_parameters(struct pp_hwmgr *hwmgr) pp_table->PcieLaneCount[i] = pcie_width_arg; } +/* override to the highest if it's disabled from ppfeaturmask */ +if (data->registry_data.pcie_dpm_key_disabled) { +for (i =0 ; i <NUM_LINK_LEVELS ; i++) { + smu_pcie_arg = (i <<16 ) | (pcie_gen <<8 ) | pcie_width; + ret =smum_send_msg_to_smc_with_parameter (hwmgr, + PPSMC_MSG_OverridePcieParameters, smu_pcie_arg, +NULL ); +PP_ASSERT_WITH_CODE (!ret, +"[OverridePcieParameters] Attempt to override pcie params failed!" , + return ret); + + pp_table->PcieGenSpeed[i] = pcie_gen; + pp_table->PcieLaneCount[i] = pcie_width; + } + ret =vega20_enable_smc_features (hwmgr, + false, + data->smu_features[GNLD_DPM_LINK ].smu_feature_bitmap); +PP_ASSERT_WITH_CODE (!ret, +"Attempt to Disable DPM LINK Failed!" , + return ret); + data->smu_features[GNLD_DPM_LINK ].enabled = false; + data->smu_features[GNLD_DPM_LINK ].supported = false; + } +return 0 ; }
drivers/gpu/drm/etnaviv/etnaviv_gem.c +1 -1
@@ -689,7 +689,7 @@ static int etnaviv_gem_userptr_get_pages(struct etnaviv_gem_object *etnaviv_obj)struct page **pages = pvec + pinned; ret =pin_user_pages_fast (ptr, num_pages, - !userptr->ro ?FOLL_WRITE :0 , pages); +FOLL_WRITE |FOLL_FORCE , pages);if (ret <0 ) {unpin_user_pages (pvec, pinned);kvfree (pvec);
drivers/gpu/drm/i915/display/intel_vdsc.c +2 -8
@@ -1016,20 +1016,14 @@ static i915_reg_t dss_ctl1_reg(const struct intel_crtc_state *crtc_state) {enum pipe pipe =to_intel_crtc (crtc_state->uapi.crtc)->pipe; -if (crtc_state->cpu_transcoder ==TRANSCODER_EDP ) -return DSS_CTL1 ; - -return ICL_PIPE_DSS_CTL1 (pipe); +return is_pipe_dsc (crtc_state) ?ICL_PIPE_DSS_CTL1 (pipe) :DSS_CTL1 ; }static i915_reg_t dss_ctl2_reg (const struct intel_crtc_state *crtc_state) {enum pipe pipe =to_intel_crtc (crtc_state->uapi.crtc)->pipe; -if (crtc_state->cpu_transcoder ==TRANSCODER_EDP ) -return DSS_CTL2 ; - -return ICL_PIPE_DSS_CTL2 (pipe); +return is_pipe_dsc (crtc_state) ?ICL_PIPE_DSS_CTL2 (pipe) :DSS_CTL2 ; } void intel_dsc_enable(struct intel_encoder *encoder,
drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c +12 -1
@@ -316,7 +316,18 @@ void i915_vma_revoke_fence(struct i915_vma *vma)WRITE_ONCE (fence->vma,NULL ); vma->fence =NULL ; - with_intel_runtime_pm_if_in_use(fence_to_uncore(fence)->rpm, wakeref) +/* +* Skip the write to HW if and only if the device is currently +* suspended. +* +* If the driver does not currently hold a wakeref (if_in_use == 0), +* the device may currently be runtime suspended, or it may be woken +* up before the suspend takes place. If the device is not suspended +* (powered down) and we skip clearing the fence register, the HW is +* left in an undefined state where we may end up with multiple +* registers overlapping. +*/ + with_intel_runtime_pm_if_active(fence_to_uncore(fence)->rpm, wakeref)fence_write (fence); }
drivers/gpu/drm/i915/intel_runtime_pm.c +24 -5
@@ -412,12 +412,20 @@ intel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm) }/** -* intel_runtime_pm_get_if_in_use - grab a runtime pm reference if device in use +* __intel_runtime_pm_get_if_active - grab a runtime pm reference if device is active * @rpm: the intel_runtime_pm structure +* @ignore_usecount: get a ref even if dev->power.usage_count is 0 * * This function grabs a device-level runtime pm reference if the device is -* already in use and ensures that it is powered up. It is illegal to try -* and access the HW should intel_runtime_pm_get_if_in_use() report failure. +* already active and ensures that it is powered up. It is illegal to try +* and access the HW should intel_runtime_pm_get_if_active() report failure. +* +* If @ignore_usecount=true, a reference will be acquired even if there is no +* user requiring the device to be powered up (dev->power.usage_count == 0). +* If the function returns false in this case then it's guaranteed that the +* device's runtime suspend hook has been called already or that it will be +* called (and hence it's also guaranteed that the device's runtime resume +* hook will be called eventually). * * Any runtime pm reference obtained by this function must have a symmetric * call to intel_runtime_pm_put() to release the reference again.
@@ -425,7 +433,8 @@ intel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm)* Returns: the wakeref cookie to pass to intel_runtime_pm_put(), evaluates * as True if the wakeref was acquired, or False otherwise. */ -intel_wakeref_t intel_runtime_pm_get_if_in_use (struct intel_runtime_pm *rpm) +static intel_wakeref_t __intel_runtime_pm_get_if_active (struct intel_runtime_pm *rpm, +bool ignore_usecount) {if (IS_ENABLED (CONFIG_PM )) {/*
@@ -434,7 +443,7 @@ intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm)* function, since the power state is undefined. This applies * atm to the late/early system suspend/resume handlers. */ -if (pm_runtime_get_if_in_use (rpm->kdev) <=0 ) +if (pm_runtime_get_if_active (rpm->kdev, ignore_usecount) <=0 )return 0 ; }
@@ -443,6 +452,16 @@ intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm)return track_intel_runtime_pm_wakeref (rpm); } +intel_wakeref_t intel_runtime_pm_get_if_in_use (struct intel_runtime_pm *rpm) +{ +return __intel_runtime_pm_get_if_active (rpm, false); +} + +intel_wakeref_t intel_runtime_pm_get_if_active (struct intel_runtime_pm *rpm) +{ +return __intel_runtime_pm_get_if_active (rpm, true); +} +/** * intel_runtime_pm_get_noresume - grab a runtime pm reference * @rpm: the intel_runtime_pm structure
drivers/gpu/drm/i915/intel_runtime_pm.h +5 -0
@@ -177,6 +177,7 @@ void intel_runtime_pm_driver_release(struct intel_runtime_pm *rpm);intel_wakeref_t intel_runtime_pm_get (struct intel_runtime_pm *rpm);intel_wakeref_t intel_runtime_pm_get_if_in_use (struct intel_runtime_pm *rpm); +intel_wakeref_t intel_runtime_pm_get_if_active (struct intel_runtime_pm *rpm);intel_wakeref_t intel_runtime_pm_get_noresume (struct intel_runtime_pm *rpm);intel_wakeref_t intel_runtime_pm_get_raw (struct intel_runtime_pm *rpm);
@@ -188,6 +189,10 @@ intel_wakeref_t intel_runtime_pm_get_raw(struct intel_runtime_pm *rpm);for ((wf) =intel_runtime_pm_get_if_in_use (rpm); (wf); \ intel_runtime_pm_put((rpm), (wf)), (wf) = 0) +#define with_intel_runtime_pm_if_active (rpm, wf) \ + for ((wf) = intel_runtime_pm_get_if_active(rpm); (wf); \ + intel_runtime_pm_put((rpm), (wf)), (wf) = 0) +void intel_runtime_pm_put_unchecked (struct intel_runtime_pm *rpm);#if IS_ENABLED (CONFIG_DRM_I915_DEBUG_RUNTIME_PM )void intel_runtime_pm_put (struct intel_runtime_pm *rpm,intel_wakeref_t wref);
drivers/gpu/drm/msm/dsi/pll/dsi_pll.c +1 -1
@@ -163,7 +163,7 @@ struct msm_dsi_pll *msm_dsi_pll_init(struct platform_device *pdev,break ;case MSM_DSI_PHY_7NM :case MSM_DSI_PHY_7NM_V4_1 : - pll =msm_dsi_pll_7nm_init (pdev, id); + pll =msm_dsi_pll_7nm_init (pdev, type, id);break ;default : pll =ERR_PTR (-ENXIO );
drivers/gpu/drm/msm/dsi/pll/dsi_pll.h +4 -2
@@ -117,10 +117,12 @@ msm_dsi_pll_10nm_init(struct platform_device *pdev, int id) }#endif #ifdef CONFIG_DRM_MSM_DSI_7NM_PHY -struct msm_dsi_pll *msm_dsi_pll_7nm_init (struct platform_device *pdev,int id); +struct msm_dsi_pll *msm_dsi_pll_7nm_init (struct platform_device *pdev, +enum msm_dsi_phy_type type,int id);#else static inline struct msm_dsi_pll * -msm_dsi_pll_7nm_init (struct platform_device *pdev,int id) +msm_dsi_pll_7nm_init (struct platform_device *pdev, +enum msm_dsi_phy_type type,int id) {return ERR_PTR (-ENODEV ); }
drivers/gpu/drm/msm/dsi/pll/dsi_pll_7nm.c +3 -2
@@ -852,7 +852,8 @@ static int pll_7nm_register(struct dsi_pll_7nm *pll_7nm)return ret; } -struct msm_dsi_pll *msm_dsi_pll_7nm_init (struct platform_device *pdev,int id) +struct msm_dsi_pll *msm_dsi_pll_7nm_init (struct platform_device *pdev, +enum msm_dsi_phy_type type,int id) {struct dsi_pll_7nm *pll_7nm;struct msm_dsi_pll *pll;
@@ -885,7 +886,7 @@ struct msm_dsi_pll *msm_dsi_pll_7nm_init(struct platform_device *pdev, int id) pll = &pll_7nm->base; pll->min_rate =1000000000UL ; pll->max_rate =3500000000UL ; -if (pll->type ==MSM_DSI_PHY_7NM_V4_1 ) { +if (type ==MSM_DSI_PHY_7NM_V4_1 ) { pll->min_rate =600000000UL ; pll->max_rate = (unsigned long )5000000000ULL ;/* workaround for max rate overflowing on 32-bit builds: */
drivers/gpu/drm/msm/msm_drv.c +12 -0
@@ -1072,6 +1072,10 @@ static int __maybe_unused msm_pm_resume(struct device *dev)static int __maybe_unused msm_pm_prepare (struct device *dev) {struct drm_device *ddev =dev_get_drvdata (dev); +struct msm_drm_private *priv = ddev ? ddev->dev_private :NULL ; + +if (!priv || !priv->kms) +return 0 ;return drm_mode_config_helper_suspend (ddev); }
@@ -1079,6 +1083,10 @@ static int __maybe_unused msm_pm_prepare(struct device *dev)static void __maybe_unused msm_pm_complete (struct device *dev) {struct drm_device *ddev =dev_get_drvdata (dev); +struct msm_drm_private *priv = ddev ? ddev->dev_private :NULL ; + +if (!priv || !priv->kms) +return ;drm_mode_config_helper_resume (ddev); }
@@ -1311,6 +1319,10 @@ static int msm_pdev_remove(struct platform_device *pdev)static void msm_pdev_shutdown (struct platform_device *pdev) {struct drm_device *drm =platform_get_drvdata (pdev); +struct msm_drm_private *priv = drm ? drm->dev_private :NULL ; + +if (!priv || !priv->kms) +return ;drm_atomic_helper_shutdown (drm); }
drivers/gpu/drm/nouveau/dispnv50/disp.c +12 -1
@@ -2663,9 +2663,20 @@ nv50_display_create(struct drm_device *dev)else nouveau_display (dev)->format_modifiers = disp50xx_modifiers; -if (disp->disp->object.oclass >=GK104_DISP ) { +/* FIXME: 256x256 cursors are supported on Kepler, however unlike Maxwell and later +* generations Kepler requires that we use small pages (4K) for cursor scanout surfaces. The +* proper fix for this is to teach nouveau to migrate fbs being used for the cursor plane to +* small page allocations in prepare_fb(). When this is implemented, we should also force +* large pages (128K) for ovly fbs in order to fix Kepler ovlys. +* But until then, just limit cursors to 128x128 - which is small enough to avoid ever using +* large pages. +*/ +if (disp->disp->object.oclass >=GM107_DISP ) { dev->mode_config.cursor_width =256 ; dev->mode_config.cursor_height =256 ; + }else if (disp->disp->object.oclass >=GK104_DISP ) { + dev->mode_config.cursor_width =128 ; + dev->mode_config.cursor_height =128 ; }else { dev->mode_config.cursor_width =64 ; dev->mode_config.cursor_height =64 ;
drivers/infiniband/hw/cxgb4/cm.c +2 -2
@@ -3610,13 +3610,13 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id) ep->com.local_addr.ss_family == AF_INET) { err = cxgb4_remove_server_filter( ep->com.dev->rdev.lldi.ports[0], ep->stid, - ep->com.dev->rdev.lldi.rxq_ids[0], 0); + ep->com.dev->rdev.lldi.rxq_ids[0], false); } else {struct sockaddr_in6 *sin6;c4iw_init_wr_wait (ep->com.wr_waitp); err =cxgb4_remove_server ( ep->com.dev->rdev.lldi.ports[0 ], ep->stid, - ep->com.dev->rdev.lldi.rxq_ids[0 ],0 ); + ep->com.dev->rdev.lldi.rxq_ids[0 ], true);if (err) goto done; err = c4iw_wait_for_reply(&ep->com.dev->rdev, ep->com.wr_waitp,
drivers/irqchip/irq-ingenic-tcu.c +1 -0
@@ -179,5 +179,6 @@ static int __init ingenic_tcu_irq_init(struct device_node *np, }IRQCHIP_DECLARE (jz4740_tcu_irq,"ingenic,jz4740-tcu" , ingenic_tcu_irq_init);IRQCHIP_DECLARE (jz4725b_tcu_irq,"ingenic,jz4725b-tcu" , ingenic_tcu_irq_init); +IRQCHIP_DECLARE (jz4760_tcu_irq,"ingenic,jz4760-tcu" , ingenic_tcu_irq_init);IRQCHIP_DECLARE (jz4770_tcu_irq,"ingenic,jz4770-tcu" , ingenic_tcu_irq_init);IRQCHIP_DECLARE (x1000_tcu_irq,"ingenic,x1000-tcu" , ingenic_tcu_irq_init);
drivers/irqchip/irq-ingenic.c +1 -0
@@ -155,6 +155,7 @@ static int __init intc_2chip_of_init(struct device_node *node, {return ingenic_intc_of_init (node,2 ); } +IRQCHIP_DECLARE (jz4760_intc,"ingenic,jz4760-intc" , intc_2chip_of_init);IRQCHIP_DECLARE (jz4770_intc,"ingenic,jz4770-intc" , intc_2chip_of_init);IRQCHIP_DECLARE (jz4775_intc,"ingenic,jz4775-intc" , intc_2chip_of_init);IRQCHIP_DECLARE (jz4780_intc,"ingenic,jz4780-intc" , intc_2chip_of_init);
drivers/md/dm-ioctl.c +1 -1
@@ -529,7 +529,7 @@ static int list_devices(struct file *filp, struct dm_ioctl *param, size_t param_* Grab our output buffer. */ nl = orig_nl =get_result_buffer (param, param_size, &len); -if (len < needed) { +if (len < needed || len <sizeof (nl->dev)) { param->flags |=DM_BUFFER_FULL_FLAG ; goto out; }
drivers/md/dm-table.c +25 -8
@@ -1380,6 +1380,13 @@ static int device_not_zoned_model(struct dm_target *ti, struct dm_dev *dev,return !q ||blk_queue_zoned_model (q) != *zoned_model; } +/* +* Check the device zoned model based on the target feature flag. If the target +* has the DM_TARGET_ZONED_HM feature flag set, host-managed zoned devices are +* also accepted but all devices must have the same zoned model. If the target +* has the DM_TARGET_MIXED_ZONED_MODEL feature set, the devices can have any +* zoned model with all zoned devices having the same zone size. +*/ static bool dm_table_supports_zoned_model (struct dm_table *t,enum blk_zoned_model zoned_model) {
@@ -1389,13 +1396,15 @@ static bool dm_table_supports_zoned_model(struct dm_table *t,for (i =0 ; i <dm_table_get_num_targets (t); i++) { ti =dm_table_get_target (t, i); -if (zoned_model ==BLK_ZONED_HM && - !dm_target_supports_zoned_hm (ti->type)) -return false; - -if (!ti->type->iterate_devices || - ti->type->iterate_devices (ti, device_not_zoned_model, &zoned_model)) -return false; +if (dm_target_supports_zoned_hm (ti->type)) { +if (!ti->type->iterate_devices || + ti->type->iterate_devices (ti, device_not_zoned_model, + &zoned_model)) +return false; + }else if (!dm_target_supports_mixed_zoned_model (ti->type)) { +if (zoned_model ==BLK_ZONED_HM ) +return false; + } }return true;
@@ -1407,9 +1416,17 @@ static int device_not_matches_zone_sectors(struct dm_target *ti, struct dm_dev *struct request_queue *q =bdev_get_queue (dev->bdev);unsigned int *zone_sectors = data; +if (!blk_queue_is_zoned (q)) +return 0 ; +return !q ||blk_queue_zone_sectors (q) != *zone_sectors; } +/* +* Check consistency of zoned model and zone sectors across all targets. For +* zone sectors, if the destination device is a zoned block device, it shall +* have the specified zone_sectors. +*/ static int validate_hardware_zoned_model (struct dm_table *table,enum blk_zoned_model zoned_model,unsigned int zone_sectors)
@@ -1428,7 +1445,7 @@ static int validate_hardware_zoned_model(struct dm_table *table,return -EINVAL ;if (dm_table_any_dev_attr (table, device_not_matches_zone_sectors, &zone_sectors)) { -DMERR ("%s: zone sectors is not consistent across all devices" , +DMERR ("%s: zone sectors is not consistent across all zoned devices" ,dm_device_name (table->md));return -EINVAL ; }
drivers/md/dm-verity-target.c +1 -1
@@ -34,7 +34,7 @@#define DM_VERITY_OPT_IGN_ZEROES "ignore_zero_blocks"#define DM_VERITY_OPT_AT_MOST_ONCE "check_at_most_once" -#define DM_VERITY_OPTS_MAX (2 + DM_VERITY_OPTS_FEC + \ +#define DM_VERITY_OPTS_MAX (3 + DM_VERITY_OPTS_FEC + \ DM_VERITY_ROOT_HASH_VERIFICATION_OPTS)static unsigned dm_verity_prefetch_cluster =DM_VERITY_DEFAULT_PREFETCH_SIZE ;
drivers/md/dm-zoned-target.c +1 -1
@@ -1143,7 +1143,7 @@ static int dmz_message(struct dm_target *ti, unsigned int argc, char **argv,static struct target_type dmz_type = { .name ="zoned" , .version = {2 ,0 ,0 }, - .features =DM_TARGET_SINGLETON |DM_TARGET_ZONED_HM , + .features =DM_TARGET_SINGLETON |DM_TARGET_MIXED_ZONED_MODEL , .module =THIS_MODULE , .ctr = dmz_ctr, .dtr = dmz_dtr,
drivers/md/dm.c +4 -1
@@ -2016,7 +2016,10 @@ static struct dm_table *__bind(struct mapped_device *md, struct dm_table *t,if (size !=dm_get_size (md))memset (&md->geometry,0 ,sizeof (md->geometry)); -set_capacity_and_notify (md->disk, size); +if (!get_capacity (md->disk)) +set_capacity (md->disk, size); +else +set_capacity_and_notify (md->disk, size);dm_table_event_callback (t, event_callback, md);
drivers/mfd/intel_quark_i2c_gpio.c +4 -2
@@ -72,7 +72,8 @@ static const struct dmi_system_id dmi_platform_info[] = { {} }; -static const struct resource intel_quark_i2c_res[] = { +/* This is used as a place holder and will be modified at run-time */ +static struct resource intel_quark_i2c_res[] = { [INTEL_QUARK_IORES_MEM ] = { .flags =IORESOURCE_MEM , },
@@ -85,7 +86,8 @@ static struct mfd_cell_acpi_match intel_quark_acpi_match_i2c = { .adr = MFD_ACPI_MATCH_I2C, }; -static const struct resource intel_quark_gpio_res[] = { +/* This is used as a place holder and will be modified at run-time */ +static struct resource intel_quark_gpio_res[] = { [INTEL_QUARK_IORES_MEM ] = { .flags =IORESOURCE_MEM , },
drivers/misc/habanalabs/common/device.c +35 -5
@@ -93,12 +93,19 @@ void hl_hpriv_put(struct hl_fpriv *hpriv)static int hl_device_release (struct inode *inode,struct file *filp) {struct hl_fpriv *hpriv = filp->private_data; +struct hl_device *hdev = hpriv->hdev; + + filp->private_data =NULL ; + +if (!hdev) { +pr_crit ("Closing FD after device was removed. Memory leak will occur and it is advised to reboot.\n" ); +put_pid (hpriv->taskpid); +return 0 ; + }hl_cb_mgr_fini (hpriv->hdev, &hpriv->cb_mgr);hl_ctx_mgr_fini (hpriv->hdev, &hpriv->ctx_mgr); - filp->private_data =NULL ; -hl_hpriv_put (hpriv);return 0 ;
@@ -107,15 +114,20 @@ static int hl_device_release(struct inode *inode, struct file *filp)static int hl_device_release_ctrl (struct inode *inode,struct file *filp) {struct hl_fpriv *hpriv = filp->private_data; -struct hl_device *hdev; +struct hl_device *hdev = hpriv->hdev; filp->private_data =NULL ; - hdev = hpriv->hdev; +if (!hdev) { +pr_err ("Closing FD after device was removed\n" ); + goto out; + }mutex_lock (&hdev->fpriv_list_lock);list_del (&hpriv->dev_node);mutex_unlock (&hdev->fpriv_list_lock); +out: +put_pid (hpriv->taskpid);kfree (hpriv);
@@ -134,8 +146,14 @@ static int hl_device_release_ctrl(struct inode *inode, struct file *filp)static int hl_mmap (struct file *filp,struct vm_area_struct *vma) {struct hl_fpriv *hpriv = filp->private_data; +struct hl_device *hdev = hpriv->hdev;unsigned long vm_pgoff; +if (!hdev) { +pr_err_ratelimited ("Trying to mmap after device was removed! Please close FD\n" ); +return -ENODEV ; + } + vm_pgoff = vma->vm_pgoff; vma->vm_pgoff =HL_MMAP_OFFSET_VALUE_GET (vm_pgoff);
@@ -882,6 +900,16 @@ static int device_kill_open_processes(struct hl_device *hdev, u32 timeout)return -EBUSY ; } +static void device_disable_open_processes (struct hl_device *hdev) +{ +struct hl_fpriv *hpriv; + +mutex_lock (&hdev->fpriv_list_lock); +list_for_each_entry (hpriv, &hdev->fpriv_list, dev_node) + hpriv->hdev =NULL ; +mutex_unlock (&hdev->fpriv_list_lock); +} +/* * hl_device_reset - reset the device *
@@ -1536,8 +1564,10 @@ void hl_device_fini(struct hl_device *hdev) HL_PENDING_RESET_LONG_SEC); rc =device_kill_open_processes (hdev,HL_PENDING_RESET_LONG_SEC ); -if (rc) +if (rc) {dev_crit (hdev->dev,"Failed to kill all open processes\n" ); +device_disable_open_processes (hdev); + }hl_cb_pool_fini (hdev);
drivers/misc/habanalabs/common/habanalabs_ioctl.c +12 -0
@@ -5,6 +5,8 @@* All Rights Reserved. */ +#define pr_fmt (fmt) "habanalabs: " fmt +#include <uapi/misc/habanalabs.h> #include "habanalabs.h"
@@ -667,6 +669,11 @@ long hl_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)const struct hl_ioctl_desc *ioctl =NULL ;unsigned int nr =_IOC_NR (cmd); +if (!hdev) { +pr_err_ratelimited ("Sending ioctl after device was removed! Please close FD\n" ); +return -ENODEV ; + } +if ((nr >=HL_COMMAND_START ) && (nr <HL_COMMAND_END )) { ioctl = &hl_ioctls[nr]; }else {
@@ -685,6 +692,11 @@ long hl_ioctl_control(struct file *filep, unsigned int cmd, unsigned long arg)const struct hl_ioctl_desc *ioctl =NULL ;unsigned int nr =_IOC_NR (cmd); +if (!hdev) { +pr_err_ratelimited ("Sending ioctl after device was removed! Please close FD\n" ); +return -ENODEV ; + } +if (nr ==_IOC_NR (HL_IOCTL_INFO )) { ioctl = &hl_ioctls_control[nr]; }else {
drivers/net/can/c_can/c_can.c +1 -23
@@ -212,18 +212,6 @@ static const struct can_bittiming_const c_can_bittiming_const = { .brp_inc = 1, }; -static inline void c_can_pm_runtime_enable (const struct c_can_priv *priv) -{ -if (priv->device) -pm_runtime_enable (priv->device); -} - -static inline void c_can_pm_runtime_disable (const struct c_can_priv *priv) -{ -if (priv->device) -pm_runtime_disable (priv->device); -} -static inline void c_can_pm_runtime_get_sync (const struct c_can_priv *priv) {if (priv->device)
@@ -1335,7 +1323,6 @@ static const struct net_device_ops c_can_netdev_ops = {int register_c_can_dev (struct net_device *dev) { -struct c_can_priv *priv =netdev_priv (dev);int err;/* Deactivate pins to prevent DRA7 DCAN IP from being
@@ -1345,28 +1332,19 @@ int register_c_can_dev(struct net_device *dev)*/ pinctrl_pm_select_sleep_state (dev->dev.parent); -c_can_pm_runtime_enable (priv); - dev->flags |=IFF_ECHO ;/* we support local echo */ dev->netdev_ops = &c_can_netdev_ops; err =register_candev (dev); -if (err) -c_can_pm_runtime_disable (priv); -else +if (!err)devm_can_led_init (dev); -return err; }EXPORT_SYMBOL_GPL (register_c_can_dev);void unregister_c_can_dev (struct net_device *dev) { -struct c_can_priv *priv =netdev_priv (dev); -unregister_candev (dev); - -c_can_pm_runtime_disable (priv); }EXPORT_SYMBOL_GPL (unregister_c_can_dev);
drivers/net/can/c_can/c_can_pci.c +2 -1
@@ -239,12 +239,13 @@ static void c_can_pci_remove(struct pci_dev *pdev) {struct net_device *dev =pci_get_drvdata (pdev);struct c_can_priv *priv =netdev_priv (dev); +void __iomem *addr = priv->base;unregister_c_can_dev (dev);free_c_can_dev (dev); -pci_iounmap (pdev, priv->base); +pci_iounmap (pdev, addr);pci_disable_msi (pdev);pci_clear_master (pdev);pci_release_regions (pdev);
drivers/net/can/c_can/c_can_platform.c +5 -1
@@ -29,6 +29,7 @@#include <linux/list.h> #include <linux/io.h> #include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/clk.h> #include <linux/of.h> #include <linux/of_device.h>
@@ -386,6 +387,7 @@ static int c_can_plat_probe(struct platform_device *pdev)platform_set_drvdata (pdev, dev);SET_NETDEV_DEV (dev, &pdev->dev); +pm_runtime_enable (priv->device); ret =register_c_can_dev (dev);if (ret) { dev_err(&pdev->dev, "registering %s failed (err=%d)\n",
@@ -398,6 +400,7 @@ static int c_can_plat_probe(struct platform_device *pdev)return 0 ; exit_free_device: +pm_runtime_disable (priv->device);free_c_can_dev (dev); exit:dev_err (&pdev->dev,"probe failed\n" );
@@ -408,9 +411,10 @@ static int c_can_plat_probe(struct platform_device *pdev)static int c_can_plat_remove (struct platform_device *pdev) {struct net_device *dev =platform_get_drvdata (pdev); +struct c_can_priv *priv =netdev_priv (dev);unregister_c_can_dev (dev); - +pm_runtime_disable (priv->device);free_c_can_dev (dev);return 0 ;
drivers/net/can/dev.c +1 -0
@@ -1255,6 +1255,7 @@ static void can_dellink(struct net_device *dev, struct list_head *head)static struct rtnl_link_ops can_link_ops__read_mostly = { .kind ="can" , + .netns_refund = true, .maxtype =IFLA_CAN_MAX , .policy = can_policy, .setup = can_setup,
drivers/net/can/flexcan.c +7 -1
@@ -697,9 +697,15 @@ static int flexcan_chip_disable(struct flexcan_priv *priv)static int flexcan_chip_freeze (struct flexcan_priv *priv) {struct flexcan_regs __iomem *regs = priv->regs; -unsigned int timeout =1000 *1000 *10 / priv->can.bittiming.bitrate; +unsigned int timeout; +u32 bitrate = priv->can.bittiming.bitrate;u32 reg; +if (bitrate) + timeout =1000 *1000 *10 / bitrate; +else + timeout =FLEXCAN_TIMEOUT_US /10 ; + reg = priv->read (®s->mcr); reg |=FLEXCAN_MCR_FRZ |FLEXCAN_MCR_HALT ; priv->write (reg, ®s->mcr);
drivers/net/can/kvaser_pciefd.c +4 -0
@@ -57,6 +57,7 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");#define KVASER_PCIEFD_KCAN_STAT_REG 0x418#define KVASER_PCIEFD_KCAN_MODE_REG 0x41c#define KVASER_PCIEFD_KCAN_BTRN_REG 0x420 +#define KVASER_PCIEFD_KCAN_BUS_LOAD_REG 0x424#define KVASER_PCIEFD_KCAN_BTRD_REG 0x428#define KVASER_PCIEFD_KCAN_PWM_REG 0x430/* Loopback control register */
@@ -949,6 +950,9 @@ static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie)timer_setup (&can->bec_poll_timer, kvaser_pciefd_bec_poll_timer,0 ); +/* Disable Bus load reporting */ +iowrite32 (0 , can->reg_base +KVASER_PCIEFD_KCAN_BUS_LOAD_REG ); + tx_npackets =ioread32 (can->reg_base +KVASER_PCIEFD_KCAN_TX_NPACKETS_REG ); if (((tx_npackets >> KVASER_PCIEFD_KCAN_TX_NPACKETS_MAX_SHIFT) &
drivers/net/can/m_can/m_can.c +1 -4
@@ -501,9 +501,6 @@ static int m_can_do_rx_poll(struct net_device *dev, int quota) }while ((rxfs &RXFS_FFL_MASK ) && (quota >0 )) { -if (rxfs &RXFS_RFL ) -netdev_warn (dev,"Rx FIFO 0 Message Lost\n" ); -m_can_read_fifo (dev, rxfs); quota--;
@@ -876,7 +873,7 @@ static int m_can_rx_peripheral(struct net_device *dev) {struct m_can_classdev *cdev =netdev_priv (dev); -m_can_rx_handler (dev,1 ); +m_can_rx_handler (dev,M_CAN_NAPI_WEIGHT );m_can_enable_all_interrupts (cdev);
drivers/net/dsa/b53/b53_common.c +7 -7
@@ -1070,13 +1070,6 @@ static int b53_setup(struct dsa_switch *ds)b53_disable_port (ds, port); } -/* Let DSA handle the case were multiple bridges span the same switch -* device and different VLAN awareness settings are requested, which -* would be breaking filtering semantics for any of the other bridge -* devices. (not hardware supported) -*/ - ds->vlan_filtering_is_global = true; -return b53_setup_devlink_resources (ds); }
@@ -2627,6 +2620,13 @@ struct b53_device *b53_switch_alloc(struct device *base, ds->configure_vlan_while_not_filtering = true; ds->untag_bridge_pvid = true; dev->vlan_enabled = ds->configure_vlan_while_not_filtering; +/* Let DSA handle the case were multiple bridges span the same switch +* device and different VLAN awareness settings are requested, which +* would be breaking filtering semantics for any of the other bridge +* devices. (not hardware supported) +*/ + ds->vlan_filtering_is_global = true; +mutex_init (&dev->reg_mutex);mutex_init (&dev->stats_mutex);
drivers/net/dsa/bcm_sf2.c +4 -2
@@ -584,8 +584,10 @@ static u32 bcm_sf2_sw_get_phy_flags(struct dsa_switch *ds, int port)* in bits 15:8 and the patch level in bits 7:0 which is exactly what * the REG_PHY_REVISION register layout is. */ - -return priv->hw_params.gphy_rev; +if (priv->int_phy_mask &BIT (port)) +return priv->hw_params.gphy_rev; +else +return 0 ; } static void bcm_sf2_sw_validate(struct dsa_switch *ds, int port,
drivers/net/ethernet/chelsio/inline_crypto/ch_ktls/chcr_ktls.c +1 -1
@@ -727,7 +727,7 @@ static int chcr_ktls_cpl_set_tcb_rpl(struct adapter *adap, unsigned char *input)kvfree (tx_info);return 0 ; } - tx_info->open_state = false; + tx_info->open_state =CH_KTLS_OPEN_SUCCESS ;spin_unlock (&tx_info->lock);complete (&tx_info->completion);
drivers/net/ethernet/davicom/dm9000.c +1 -1
@@ -1507,7 +1507,7 @@ dm9000_probe(struct platform_device *pdev) goto out; } - db->irq_wake =platform_get_irq (pdev,1 ); + db->irq_wake =platform_get_irq_optional (pdev,1 );if (db->irq_wake >=0 ) {dev_dbg (db->dev,"wakeup irq %d\n" , db->irq_wake);
drivers/net/ethernet/faraday/ftgmac100.c +1 -0
@@ -1337,6 +1337,7 @@ static int ftgmac100_poll(struct napi_struct *napi, int budget)*/ if (unlikely (priv->need_mac_restart)) {ftgmac100_start_hw (priv); + priv->need_mac_restart = false;/* Re-enable "bad" interrupts */ iowrite32(FTGMAC100_INT_BAD,
drivers/net/ethernet/freescale/enetc/enetc_hw.h +2 -0
@@ -234,6 +234,8 @@ enum enetc_bdr_type {TX, RX};#define ENETC_PM0_MAXFRM 0x8014#define ENETC_SET_TX_MTU (val) ((val) << 16)#define ENETC_SET_MAXFRM (val) ((val) & 0xffff) +#define ENETC_PM0_RX_FIFO 0x801c +#define ENETC_PM0_RX_FIFO_VAL 1#define ENETC_PM_IMDIO_BASE 0x8030
drivers/net/ethernet/freescale/enetc/enetc_pf.c +6 -0
@@ -490,6 +490,12 @@ static void enetc_configure_port_mac(struct enetc_hw *hw)enetc_port_wr (hw,ENETC_PM1_CMD_CFG ,ENETC_PM0_CMD_PHY_TX_EN |ENETC_PM0_CMD_TXP |ENETC_PM0_PROMISC ); + +/* On LS1028A, the MAC RX FIFO defaults to 2, which is too high +* and may lead to RX lock-up under traffic. Set it to 1 instead, +* as recommended by the hardware team. +*/ +enetc_port_wr (hw,ENETC_PM0_RX_FIFO ,ENETC_PM0_RX_FIFO_VAL ); }static void enetc_mac_config (struct enetc_hw *hw,phy_interface_t phy_mode)
drivers/net/ethernet/freescale/fec_ptp.c +7 -0
@@ -377,9 +377,16 @@ static int fec_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)u64 ns;unsigned long flags; +mutex_lock (&adapter->ptp_clk_mutex); +/* Check the ptp clock */ +if (!adapter->ptp_clk_on) { +mutex_unlock (&adapter->ptp_clk_mutex); +return -EINVAL ; + }spin_lock_irqsave (&adapter->tmreg_lock, flags); ns =timecounter_read (&adapter->tc);spin_unlock_irqrestore (&adapter->tmreg_lock, flags); +mutex_unlock (&adapter->ptp_clk_mutex); *ts =ns_to_timespec64 (ns);
drivers/net/ethernet/freescale/gianfar.c +15 -0
@@ -2391,6 +2391,10 @@ static bool gfar_add_rx_frag(struct gfar_rx_buff *rxb, u32 lstatus,if (lstatus &BD_LFLAG (RXBD_LAST )) size -= skb->len; +WARN (size <0 ,"gianfar: rx fragment size underflow" ); +if (size <0 ) +return false; +skb_add_rx_frag (skb,skb_shinfo (skb)->nr_frags, page, rxb->page_offset +RXBUF_ALIGNMENT , size,GFAR_RXB_TRUESIZE );
@@ -2553,6 +2557,17 @@ static int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue,if (lstatus &BD_LFLAG (RXBD_EMPTY ))break ; +/* lost RXBD_LAST descriptor due to overrun */ +if (skb && + (lstatus &BD_LFLAG (RXBD_FIRST ))) { +/* discard faulty buffer */ +dev_kfree_skb (skb); + skb =NULL ; + rx_queue->stats.rx_dropped++; + +/* can continue normally */ + } +/* order rx buffer descriptor reads */ rmb ();
drivers/net/ethernet/hisilicon/hns/hns_enet.c +3 -1
@@ -1663,8 +1663,10 @@ static int hns_nic_clear_all_rx_fetch(struct net_device *ndev)for (j =0 ; j < fetch_num; j++) {/* alloc one skb and init */ skb =hns_assemble_skb (ndev); -if (!skb) +if (!skb) { + ret = -ENOMEM ; goto out; + } rd = &tx_ring_data (priv, skb->queue_mapping);hns_nic_net_xmit_hw (ndev, skb, rd);
drivers/net/ethernet/intel/e1000e/82571.c +2 -0
@@ -899,6 +899,8 @@ static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active) }else { data &= ~IGP02E1000_PM_D0_LPLU ; ret_val =e1e_wphy (hw,IGP02E1000_PHY_POWER_MGMT , data); +if (ret_val) +return ret_val;/* LPLU and SmartSpeed are mutually exclusive. LPLU is used * during Dx states where the power conservation is most * important. During driver activity we should enable
drivers/net/ethernet/intel/e1000e/netdev.c +5 -1
@@ -5974,15 +5974,19 @@ static void e1000_reset_task(struct work_struct *work)struct e1000_adapter *adapter; adapter = container_of(work, struct e1000_adapter, reset_task); +rtnl_lock ();/* don't run the task if already down */ -if (test_bit (__E1000_DOWN, &adapter->state)) +if (test_bit (__E1000_DOWN, &adapter->state)) { +rtnl_unlock ();return ; + }if (!(adapter->flags &FLAG_RESTART_NOW )) {e1000e_dump (adapter);e_err ("Reset adapter unexpectedly\n" ); }e1000e_reinit_locked (adapter); +rtnl_unlock (); }/**
drivers/net/ethernet/intel/iavf/iavf_main.c +2 -1
@@ -1776,7 +1776,8 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter) goto err_alloc; } -if (iavf_process_config (adapter)) + err =iavf_process_config (adapter); +if (err) goto err_alloc; adapter->current_op =VIRTCHNL_OP_UNKNOWN ;
drivers/net/ethernet/intel/ice/ice_base.c +4 -2
@@ -418,6 +418,8 @@ int ice_setup_rx_ctx(struct ice_ring *ring)writel (0 , ring->tail);if (ring->xsk_pool) { +bool ok; +if (!xsk_buff_can_alloc (ring->xsk_pool, num_bufs)) {dev_warn (dev,"XSK buffer pool does not provide enough addresses to fill %d buffers on Rx ring %d\n" , num_bufs, ring->q_index);
@@ -426,8 +428,8 @@ int ice_setup_rx_ctx(struct ice_ring *ring)return 0 ; } - err =ice_alloc_rx_bufs_zc (ring, num_bufs); -if (err) + ok =ice_alloc_rx_bufs_zc (ring, num_bufs); +if (!ok)dev_info (dev,"Failed to allocate some buffers on XSK buffer pool enabled Rx ring %d (pf_q %d)\n" , ring->q_index, pf_q);return 0 ;
drivers/net/ethernet/intel/ice/ice_xsk.c +5 -5
@@ -408,18 +408,18 @@ int ice_xsk_pool_setup(struct ice_vsi *vsi, struct xsk_buff_pool *pool, u16 qid)* This function allocates a number of Rx buffers from the fill ring * or the internal recycle mechanism and places them on the Rx ring. * -* Returns false if all allocations were successful, true if any fail. +* Returns true if all allocations were successful, false if any fail. */ bool ice_alloc_rx_bufs_zc (struct ice_ring *rx_ring,u16 count) {union ice_32b_rx_flex_desc *rx_desc;u16 ntu = rx_ring->next_to_use;struct ice_rx_buf *rx_buf; -bool ret = false; +bool ok = true;dma_addr_t dma;if (!count) -return false; +return true; rx_desc =ICE_RX_DESC (rx_ring, ntu); rx_buf = &rx_ring->rx_buf[ntu];
@@ -427,7 +427,7 @@ bool ice_alloc_rx_bufs_zc(struct ice_ring *rx_ring, u16 count) do { rx_buf->xdp = xsk_buff_alloc(rx_ring->xsk_pool); if (!rx_buf->xdp) { - ret = true; + ok = false; break; }
@@ -452,7 +452,7 @@ bool ice_alloc_rx_bufs_zc(struct ice_ring *rx_ring, u16 count)ice_release_rx_desc (rx_ring, ntu); } -return ret; +return ok; }/**
drivers/net/ethernet/intel/igb/igb.h +2 -2
@@ -748,8 +748,8 @@ void igb_ptp_suspend(struct igb_adapter *adapter);void igb_ptp_rx_hang (struct igb_adapter *adapter);void igb_ptp_tx_hang (struct igb_adapter *adapter);void igb_ptp_rx_rgtstamp (struct igb_q_vector *q_vector,struct sk_buff *skb); -void igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, -struct sk_buff *skb); +int igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, +struct sk_buff *skb);int igb_ptp_set_ts_config (struct net_device *netdev,struct ifreq *ifr);int igb_ptp_get_ts_config (struct net_device *netdev,struct ifreq *ifr);void igb_set_flag_queue_pairs (struct igb_adapter *,const u32 );
drivers/net/ethernet/intel/igb/igb_main.c +21 -12
@@ -8232,7 +8232,8 @@ static inline bool igb_page_is_reserved(struct page *page)return (page_to_nid (page) !=numa_mem_id ()) ||page_is_pfmemalloc (page); } -static bool igb_can_reuse_rx_page (struct igb_rx_buffer *rx_buffer) +static bool igb_can_reuse_rx_page (struct igb_rx_buffer *rx_buffer, +int rx_buf_pgcnt) {unsigned int pagecnt_bias = rx_buffer->pagecnt_bias;struct page *page = rx_buffer->page;
@@ -8243,7 +8244,7 @@ static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer)#if (PAGE_SIZE <8192 )/* if we are only owner of page we can reuse it */ -if (unlikely ((page_ref_count (page) - pagecnt_bias) >1 )) +if (unlikely ((rx_buf_pgcnt - pagecnt_bias) >1 ))return false;#else #define IGB_LAST_OFFSET \
@@ -8319,9 +8320,10 @@ static struct sk_buff *igb_construct_skb(struct igb_ring *rx_ring,return NULL ;if (unlikely (igb_test_staterr (rx_desc,E1000_RXDADV_STAT_TSIP ))) { -igb_ptp_rx_pktstamp (rx_ring->q_vector, xdp->data, skb); - xdp->data +=IGB_TS_HDR_LEN ; - size -=IGB_TS_HDR_LEN ; +if (!igb_ptp_rx_pktstamp (rx_ring->q_vector, xdp->data, skb)) { + xdp->data +=IGB_TS_HDR_LEN ; + size -=IGB_TS_HDR_LEN ; + } }/* Determine available headroom for copy */
@@ -8382,8 +8384,8 @@ static struct sk_buff *igb_build_skb(struct igb_ring *rx_ring,/* pull timestamp out of packet data */ if (igb_test_staterr (rx_desc,E1000_RXDADV_STAT_TSIP )) { -igb_ptp_rx_pktstamp (rx_ring->q_vector, skb->data, skb); -__skb_pull (skb,IGB_TS_HDR_LEN ); +if (!igb_ptp_rx_pktstamp (rx_ring->q_vector, skb->data, skb)) +__skb_pull (skb,IGB_TS_HDR_LEN ); }/* update buffer offset */
@@ -8632,11 +8634,17 @@ static unsigned int igb_rx_offset(struct igb_ring *rx_ring) }static struct igb_rx_buffer *igb_get_rx_buffer (struct igb_ring *rx_ring, -const unsigned int size) +const unsigned int size,int *rx_buf_pgcnt) {struct igb_rx_buffer *rx_buffer; rx_buffer = &rx_ring->rx_buffer_info[rx_ring->next_to_clean]; + *rx_buf_pgcnt = +#if (PAGE_SIZE <8192 ) +page_count (rx_buffer->page); +#else +0 ; +#endif prefetchw (rx_buffer->page);/* we are reusing so sync this buffer for CPU use */
@@ -8652,9 +8660,9 @@ static struct igb_rx_buffer *igb_get_rx_buffer(struct igb_ring *rx_ring, }static void igb_put_rx_buffer (struct igb_ring *rx_ring, -struct igb_rx_buffer *rx_buffer) +struct igb_rx_buffer *rx_buffer,int rx_buf_pgcnt) { -if (igb_can_reuse_rx_page (rx_buffer)) { +if (igb_can_reuse_rx_page (rx_buffer, rx_buf_pgcnt)) {/* hand second half of page back to the ring */ igb_reuse_rx_page (rx_ring, rx_buffer); }else {
@@ -8681,6 +8689,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)u16 cleaned_count =igb_desc_unused (rx_ring);unsigned int xdp_xmit =0 ;struct xdp_buff xdp; +int rx_buf_pgcnt; xdp.rxq = &rx_ring->xdp_rxq;
@@ -8711,7 +8720,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)*/ dma_rmb (); - rx_buffer =igb_get_rx_buffer (rx_ring, size); + rx_buffer =igb_get_rx_buffer (rx_ring, size, &rx_buf_pgcnt);/* retrieve a buffer from the ring */ if (!skb) {
@@ -8754,7 +8763,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)break ; } -igb_put_rx_buffer (rx_ring, rx_buffer); +igb_put_rx_buffer (rx_ring, rx_buffer, rx_buf_pgcnt); cleaned_count++;/* fetch next buffer in frame if non-eop */
drivers/net/ethernet/intel/igb/igb_ptp.c +24 -7
@@ -856,6 +856,9 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)dev_kfree_skb_any (skb); } +#define IGB_RET_PTP_DISABLED 1 +#define IGB_RET_PTP_INVALID 2 +/** * igb_ptp_rx_pktstamp - retrieve Rx per packet timestamp * @q_vector: Pointer to interrupt specific structure
@@ -864,19 +867,29 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter)* * This function is meant to retrieve a timestamp from the first buffer of an * incoming frame. The value is stored in little endian format starting on -* byte 8. +* byte 8 +* +* Returns: 0 if success, nonzero if failure **/ -void igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, -struct sk_buff *skb) +int igb_ptp_rx_pktstamp (struct igb_q_vector *q_vector,void *va, +struct sk_buff *skb) { -__le64 *regval = (__le64 *)va;struct igb_adapter *adapter = q_vector->adapter; +__le64 *regval = (__le64 *)va;int adjust =0 ; +if (!(adapter->ptp_flags &IGB_PTP_ENABLED )) +return IGB_RET_PTP_DISABLED ; +/* The timestamp is recorded in little endian format. * DWORD: 0 1 2 3 * Field: Reserved Reserved SYSTIML SYSTIMH */ + +/* check reserved dwords are zero, be/le doesn't matter for zero */ +if (regval[0 ]) +return IGB_RET_PTP_INVALID ; +igb_ptp_systim_to_hwtstamp (adapter,skb_hwtstamps (skb),le64_to_cpu (regval[1 ]));
@@ -896,6 +909,8 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va, }skb_hwtstamps (skb)->hwtstamp =ktime_sub_ns (skb_hwtstamps (skb)->hwtstamp, adjust); + +return 0 ; }/**
@@ -906,13 +921,15 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, void *va,* This function is meant to retrieve a timestamp from the internal registers * of the adapter and store it in the skb. **/ -void igb_ptp_rx_rgtstamp (struct igb_q_vector *q_vector, -struct sk_buff *skb) +void igb_ptp_rx_rgtstamp (struct igb_q_vector *q_vector,struct sk_buff *skb) {struct igb_adapter *adapter = q_vector->adapter;struct e1000_hw *hw = &adapter->hw; -u64 regval;int adjust =0 ; +u64 regval; + +if (!(adapter->ptp_flags &IGB_PTP_ENABLED )) +return ;/* If this bit is set, then the RX registers contain the time stamp. No * other packet will be time stamped until we read these registers, so
drivers/net/ethernet/intel/igc/igc.h +1 -1
@@ -545,7 +545,7 @@ void igc_ptp_init(struct igc_adapter *adapter);void igc_ptp_reset (struct igc_adapter *adapter);void igc_ptp_suspend (struct igc_adapter *adapter);void igc_ptp_stop (struct igc_adapter *adapter); -void igc_ptp_rx_pktstamp (struct igc_q_vector *q_vector,void *va, +void igc_ptp_rx_pktstamp (struct igc_q_vector *q_vector,__le32 *va,struct sk_buff *skb);int igc_ptp_set_ts_config (struct net_device *netdev,struct ifreq *ifr);int igc_ptp_get_ts_config (struct net_device *netdev,struct ifreq *ifr);
drivers/net/ethernet/intel/igc/igc_ethtool.c +4 -3
@@ -1695,6 +1695,9 @@ static int igc_ethtool_get_link_ksettings(struct net_device *netdev, Autoneg); } +/* Set pause flow control settings */ +ethtool_link_ksettings_add_link_mode (cmd, supported, Pause); +switch (hw->fc.requested_mode) {case igc_fc_full:ethtool_link_ksettings_add_link_mode (cmd, advertising, Pause);
@@ -1709,9 +1712,7 @@ static int igc_ethtool_get_link_ksettings(struct net_device *netdev, Asym_Pause);break ;default : -ethtool_link_ksettings_add_link_mode (cmd, advertising, Pause); -ethtool_link_ksettings_add_link_mode (cmd, advertising, - Asym_Pause); +break ; } status = pm_runtime_suspended(&adapter->pdev->dev) ?
drivers/net/ethernet/intel/igc/igc_main.c +9 -0
@@ -3847,10 +3847,19 @@ static void igc_reset_task(struct work_struct *work) adapter = container_of(work, struct igc_adapter, reset_task); +rtnl_lock (); +/* If we're already down or resetting, just bail */ +if (test_bit (__IGC_DOWN, &adapter->state) || +test_bit (__IGC_RESETTING, &adapter->state)) { +rtnl_unlock (); +return ; + } +igc_rings_dump (adapter);igc_regs_dump (adapter);netdev_err (adapter->netdev,"Reset adapter\n" );igc_reinit_locked (adapter); +rtnl_unlock (); }/**
drivers/net/ethernet/intel/igc/igc_ptp.c +40 -32
86 lines not on this page · raw message
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +4 -2
@@ -9582,8 +9582,10 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,ixgbe_atr_compute_perfect_hash_82599 (&input->filter, mask); err =ixgbe_fdir_write_perfect_filter_82599 (hw, &input->filter, input->sw_idx, queue); -if (!err) -ixgbe_update_ethtool_fdir_entry (adapter, input, input->sw_idx); +if (err) + goto err_out_w_lock; + +ixgbe_update_ethtool_fdir_entry (adapter, input, input->sw_idx);spin_unlock (&adapter->fdir_perfect_lock);if ((uhtid !=0x800 ) && (adapter->jump_tables[uhtid]))
drivers/net/ethernet/marvell/octeontx2/af/npc_profile.h +0 -2
@@ -13499,8 +13499,6 @@ static struct npc_mcam_kex npc_mkex_default = { [NPC_LT_LC_IP] = { /* SIP+DIP: 8 bytes, KW2[63:0] */ KEX_LD_CFG(0x07, 0xc, 0x1, 0x0, 0x10), -/* TOS: 1 byte, KW1[63:56] */ - KEX_LD_CFG(0x0, 0x1, 0x1, 0x0, 0xf), }, /* Layer C: IPv6 */ [NPC_LT_LC_IP6] = {
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +4 -2
@@ -2358,8 +2358,10 @@ static void rvu_unregister_interrupts(struct rvu *rvu) INTR_MASK(rvu->hw->total_pfs) & ~1ULL);for (irq =0 ; irq < rvu->num_vec; irq++) { -if (rvu->irq_allocated[irq]) +if (rvu->irq_allocated[irq]) {free_irq (pci_irq_vector (rvu->pdev, irq), rvu); + rvu->irq_allocated[irq] = false; + } }pci_free_irq_vectors (rvu->pdev);
@@ -2873,8 +2875,8 @@ static void rvu_remove(struct pci_dev *pdev)struct rvu *rvu =pci_get_drvdata (pdev);rvu_dbg_exit (rvu); -rvu_unregister_interrupts (rvu);rvu_unregister_dl (rvu); +rvu_unregister_interrupts (rvu);rvu_flr_wq_destroy (rvu);rvu_cgx_exit (rvu);rvu_fwdata_exit (rvu);
drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +31 -17
76 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en.h +4 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_geneve.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +10 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +16 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +45 -12
57 lines not on this page · raw message
drivers/net/ethernet/netronome/nfp/flower/metadata.c +17 -7
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/netronome/nfp/flower/offload.c +18 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c +13 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/pensando/ionic/ionic_txrx.c +7 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/realtek/r8169_main.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/socionext/netsec.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c +42 -8
50 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/enh_desc.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/hwif.h +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/norm_desc.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +38 -19
57 lines not on this page · raw message
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +24 -11
Lines of this file are not shown. View the raw message.
drivers/net/phy/broadcom.c +108 -39
147 lines not on this page · raw message
drivers/net/wan/hdlc_x25.c +41 -1
42 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/dma.c +6 -9
Lines of this file are not shown. View the raw message.
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +5 -5
Lines of this file are not shown. View the raw message.
drivers/platform/x86/dell-wmi-sysman/enum-attributes.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/platform/x86/dell-wmi-sysman/int-attributes.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/platform/x86/dell-wmi-sysman/passobj-attributes.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/platform/x86/dell-wmi-sysman/string-attributes.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/platform/x86/dell-wmi-sysman/sysman.c +32 -52
84 lines not on this page · raw message
drivers/platform/x86/intel_pmt_crashlog.c +6 -7
Lines of this file are not shown. View the raw message.
drivers/regulator/qcom-rpmh-regulator.c +3 -3
Lines of this file are not shown. View the raw message.
include/linux/static_call.h +20 -23
43 lines not on this page · raw message
include/linux/static_call_types.h +50 -0
50 lines not on this page · raw message
kernel/bpf/trampoline.c +168 -50
218 lines not on this page · raw message
kernel/gcov/clang.c +69 -0
69 lines not on this page · raw message
kernel/static_call.c +63 -8
71 lines not on this page · raw message
kernel/trace/ftrace.c +38 -5
43 lines not on this page · raw message
mm/hugetlb.c +37 -4
41 lines not on this page · raw message
net/core/dst.c +42 -17
59 lines not on this page · raw message
net/ipv4/route.c +8 -37
45 lines not on this page · raw message
net/netfilter/x_tables.c +34 -15
49 lines not on this page · raw message
security/selinux/ss/services.c +39 -24
63 lines not on this page · raw message
tools/include/linux/static_call_types.h +50 -0
50 lines not on this page · raw message
tools/testing/kunit/configs/broken_on_uml.config +2 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/arm64/fp/sve-ptrace.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/fexit_sleep.c new file +82 -0
82 lines not on this page · raw message
tools/testing/selftests/bpf/progs/fexit_sleep.c new file +31 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/test_tunnel_kern.c +2 -4
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/reuseaddr_ports_exhausted.c +16 -16
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.