Linux 5.9.7
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.9.7 kernel.
All users of the 5.9 kernel series must upgrade.
The updated 5.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.9.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/kernel/stacktrace.c | 7 arch/arm/boot/dts/mmp3.dtsi | 2 arch/arm/boot/dts/sun4i-a10.dtsi | 2 arch/arm64/boot/dts/amlogic/meson-axg.dtsi | 2 arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 6 arch/arm64/boot/dts/amlogic/meson-gx.dtsi | 3 arch/arm64/kernel/smp.c | 1 arch/powerpc/kernel/head_40x.S | 8 arch/powerpc/kernel/head_8xx.S | 14 arch/s390/include/asm/pgtable.h | 52 +- arch/s390/pci/pci_event.c | 4 arch/x86/kernel/kexec-bzimage64.c | 3 arch/x86/lib/memcpy_64.S | 4 arch/x86/lib/memmove_64.S | 4 arch/x86/lib/memset_64.S | 4 block/blk-cgroup.c | 15 drivers/acpi/nfit/core.c | 2 drivers/base/core.c | 6 drivers/base/dd.c | 9 drivers/base/power/runtime.c | 57 +-- drivers/crypto/chelsio/chtls/chtls_cm.c | 2 drivers/crypto/chelsio/chtls/chtls_hw.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 1 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 4 drivers/gpu/drm/amd/amdgpu/nv.c | 14 drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c | 3 drivers/gpu/drm/amd/display/dc/gpio/dcn30/hw_factory_dcn30.c | 12 drivers/gpu/drm/i915/Kconfig.debug | 1 drivers/gpu/drm/i915/display/intel_ddi.c | 2 drivers/gpu/drm/i915/display/intel_display.c | 12 drivers/gpu/drm/i915/display/intel_psr.c | 2 drivers/gpu/drm/i915/gem/i915_gem_context.c | 48 -- drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 7 drivers/gpu/drm/i915/gem/i915_gem_pages.c | 30 + drivers/gpu/drm/i915/gem/i915_gem_stolen.c | 6 drivers/gpu/drm/i915/gem/i915_gem_stolen.h | 2 drivers/gpu/drm/i915/gt/intel_engine.h | 9 drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c | 106 +++-- drivers/gpu/drm/i915/gt/intel_lrc.c | 35 + drivers/gpu/drm/i915/gt/intel_mocs.c | 16 drivers/gpu/drm/i915/gt/intel_timeline.c | 18 - drivers/gpu/drm/i915/gt/intel_timeline_types.h | 2 drivers/gpu/drm/i915/gt/selftest_reset.c | 196 +++++++++++ drivers/gpu/drm/i915/i915_cmd_parser.c | 10 drivers/gpu/drm/i915/i915_drv.h | 4 drivers/gpu/drm/i915/i915_gpu_error.c | 6 drivers/gpu/drm/i915/i915_pci.c | 1 drivers/gpu/drm/i915/i915_request.c | 5 drivers/gpu/drm/i915/intel_uncore.c | 27 + drivers/gpu/drm/nouveau/dispnv50/core.h | 2 drivers/gpu/drm/nouveau/dispnv50/core507d.c | 41 ++ drivers/gpu/drm/nouveau/dispnv50/core907d.c | 36 +- drivers/gpu/drm/nouveau/dispnv50/core917d.c | 2 drivers/gpu/drm/nouveau/include/nvhw/class/cl507d.h | 5 drivers/gpu/drm/nouveau/include/nvhw/class/cl907d.h | 4 drivers/gpu/drm/nouveau/nouveau_connector.c | 36 -- drivers/gpu/drm/nouveau/nouveau_dp.c | 21 - drivers/gpu/drm/nouveau/nouveau_gem.c | 3 drivers/gpu/drm/nouveau/nouveau_svm.c | 14 drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | 39 +- drivers/gpu/drm/panfrost/panfrost_gem.c | 4 drivers/gpu/drm/panfrost/panfrost_gem.h | 2 drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 14 drivers/gpu/drm/sun4i/sun4i_frontend.c | 36 -- drivers/gpu/drm/sun4i/sun4i_frontend.h | 6 drivers/gpu/drm/v3d/v3d_gem.c | 1 drivers/gpu/drm/vc4/vc4_drv.c | 1 drivers/iommu/intel/iommu.c | 3 drivers/mtd/spi-nor/core.c | 5 drivers/net/dsa/qca8k.c | 4 drivers/net/ethernet/cadence/macb_main.c | 3 drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 28 + drivers/net/ethernet/freescale/fec.h | 6 drivers/net/ethernet/freescale/fec_main.c | 29 - drivers/net/ethernet/freescale/gianfar.c | 14 drivers/net/ethernet/ibm/ibmvnic.c | 36 +- drivers/net/ethernet/pensando/ionic/ionic_ethtool.c | 5 drivers/net/ethernet/realtek/r8169_main.c | 14 drivers/net/ethernet/ti/cpsw_ethtool.c | 1 drivers/net/ethernet/ti/cpsw_priv.c | 5 drivers/net/phy/sfp.c | 3 drivers/net/usb/qmi_wwan.c | 1 drivers/nvme/host/rdma.c | 8 drivers/nvme/target/core.c | 4 drivers/nvme/target/trace.h | 21 - drivers/of/of_reserved_mem.c | 13 drivers/regulator/core.c | 2 drivers/s390/crypto/pkey_api.c | 30 - drivers/scsi/ibmvscsi/ibmvscsi.c | 36 +- drivers/scsi/scsi_scan.c | 7 drivers/spi/spi-bcm2835.c | 12 drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c | 19 - drivers/tty/serial/8250/8250_mtk.c | 2 drivers/tty/serial/Kconfig | 1 drivers/tty/serial/serial_txx9.c | 3 drivers/tty/tty_io.c | 6 drivers/tty/vt/vt.c | 24 - drivers/usb/cdns3/gadget.h | 2 drivers/usb/core/quirks.c | 3 drivers/usb/dwc3/ep0.c | 3 drivers/usb/mtu3/mtu3_gadget.c | 1 drivers/usb/serial/cyberjack.c | 7 drivers/usb/serial/option.c | 10 drivers/video/fbdev/hyperv_fb.c | 9 fs/btrfs/backref.c | 13 fs/btrfs/disk-io.c | 139 +++++-- fs/btrfs/disk-io.h | 3 fs/btrfs/qgroup.c | 18 + fs/gfs2/glock.c | 3 fs/gfs2/inode.c | 3 fs/io_uring.c | 26 + include/linux/mm.h | 9 include/linux/pgtable.h | 4 include/linux/pm_runtime.h | 6 kernel/entry/common.c | 4 kernel/events/core.c | 12 kernel/fork.c | 10 kernel/futex.c | 16 kernel/kthread.c | 3 kernel/signal.c | 19 - kernel/trace/ring_buffer.c | 58 ++- kernel/trace/trace.c | 2 kernel/trace/trace.h | 26 + kernel/trace/trace_selftest.c | 9 lib/crc32test.c | 4 lib/fonts/font_10x18.c | 2 lib/fonts/font_6x10.c | 2 lib/fonts/font_6x11.c | 2 lib/fonts/font_7x14.c | 2 lib/fonts/font_8x16.c | 2 lib/fonts/font_8x8.c | 2 lib/fonts/font_acorn_8x8.c | 2 lib/fonts/font_mini_4x6.c | 2 lib/fonts/font_pearl_8x8.c | 2 lib/fonts/font_sun12x22.c | 2 lib/fonts/font_sun8x16.c | 2 lib/fonts/font_ter16x32.c | 2 mm/hugetlb.c | 20 - mm/mempolicy.c | 6 net/core/dev.c | 2 net/ipv4/ip_tunnel.c | 3 net/ipv6/ip6_tunnel.c | 4 net/mac80211/tx.c | 7 net/mptcp/token.c | 2 net/openvswitch/datapath.c | 14 net/openvswitch/flow_table.c | 2 net/sctp/sm_sideeffect.c | 4 net/tipc/core.c | 5 net/vmw_vsock/af_vsock.c | 2 sound/pci/hda/patch_realtek.c | 67 +++ sound/usb/pcm.c | 6 sound/usb/quirks.c | 1 tools/perf/ui/browsers/hists.c | 2 155 files changed, 1360 insertions(+), 637 deletions(-)
Alan Stern (1):
USB: Add NO_LPM quirk for Kingston flash drive
Alexander Aring (1):
gfs2: Wake up when sd_glock_disposal becomes zero
Alexander Ovechkin (1):
ip6_tunnel: set inner ipproto before ip6_tnl_encap
Alexander Sverdlin (1):
mtd: spi-nor: Don't copy self-pointing struct around
Anand Moon (1):
arm64: dts: amlogic: add missing ethernet reset ID
Andreas Gruenbacher (1):
gfs2: Don't call cancel_delayed_work_sync from within delete work function
Artem Lapkin (1):
ALSA: usb-audio: add usb vendor id as DSD-capable for Khadas devices
Ayaz A Siddiqui (1):
drm/i915/gt: Initialize reserved and unspecified MOCS indices
Boris Brezillon (1):
drm/panfrost: Fix a deadlock between the shrinker and madvise path
Camelia Groza (2):
dpaa_eth: update the buffer layout for non-A050385 erratum scenarios
dpaa_eth: fix the RX headroom size alignment
Chaitanya Kulkarni (1):
nvmet: fix a NULL pointer dereference when tracing the flush command
Chris Wilson (13):
drm/i915/gem: Avoid implicit vmap for highmem on x86-32 drm/i915/gem: Prevent using pgprot_writecombine() if PAT is not supported drm/i915/gem: Always test execution status on closing the context drm/i915/gt: Always send a pulse down the engine after disabling heartbeat drm/i915: Break up error capture compression loops with cond_resched() drm/i915: Cancel outstanding work after disabling heartbeats on an engine drm/i915: Avoid mixing integer types during batch copies drm/i915/gt: Undo forced context restores after trivial preemptions drm/i915/gt: Delay execlist processing for tgl
drm/i915: Drop runtime-pm assert from vgpu io accessors drm/i915: Exclude low pages (128KiB) of stolen from use drm/i915: Use the active reference on the vma while capturing drm/i915/gt: Use the local HWSP offset during submission
Christophe Leroy (2):
powerpc/8xx: Always fault when _PAGE_ACCESSED is not set powerpc/40x: Always fault when _PAGE_ACCESSED is not set
Claire Chang (1):
serial: 8250_mtk: Fix uart_get_baud_rate warning
Claudiu Manoil (2):
gianfar: Replace skb_realloc_headroom with skb_cow_head for PTP
gianfar: Account for Tx PTP timestamp in the skb headroom
Clément Péron (1):
ARM: dts: sun4i-a10: fix cpu_alert temperature
Dan Carpenter (1):
drm/v3d: Fix double free in v3d_submit_cl_ioctl()
Daniel Vetter (1):
vt: Disable KD_FONT_OP_COPY
Daniele Palmas (3):
net: usb: qmi_wwan: add Telit LE910Cx 0x1230 composition
USB: serial: option: add LE910Cx compositions 0x1203, 0x1230, 0x1231
USB: serial: option: add Telit FN980 composition 0x1055David Galiffi (1):
drm/amd/display: Fixed panic during seamless boot.
Davide Caratti (1):
mptcp: token: fix unititialized variable
Eddy Wu (1):
fork: fix copy_process(CLONE_PARENT) race with the exiting ->real_parent
Eelco Chaudron (1):
net: openvswitch: silence suspicious RCU usage warning
Fangrui Song (1):
x86/lib: Change .weak to SYM_FUNC_START_WEAK for arch/x86/lib/mem*_64.S
Gabriel Krisman Bertazi (2):
blk-cgroup: Fix memleak on error path
blk-cgroup: Pre-allocate tree node on blkg_conf_prep
Geoffrey D. Bennett (2):
ALSA: usb-audio: Add implicit feedback quirk for Qu-16
ALSA: usb-audio: Add implicit feedback quirk for MODX
Gerald Schaefer (1):
s390/mm: make pmd/pud_deref() large page aware
Greg Kroah-Hartman (1):
Linux 5.9.7
Greg Ungerer (1):
net: fec: fix MDIO probing for some FEC hardware blocks
Grygorii Strashko (1):
net: ethernet: ti: cpsw: disable PTPv1 hw timestamping advertisement
Harald Freudenberger (1):
s390/pkey: fix paes selftest failure with paes and pkey static build
Heiner Kallweit (1):
r8169: work around short packet hw bug on RTL8125
Hoang Huu Le (1):
tipc: fix use-after-free in tipc_bcast_get_mode
Hoegeun Kwon (1):
drm/vc4: drv: Add error handding for bind
Imre Deak (1):
drm/i915: Fix encoder lookup during PSR atomic check
Jason Gunthorpe (1):
mm: always have io_remap_pfn_range() set pgprot_decrypted()
Jeff Vander Stoep (1):
vsock: use ns_capable_noaudit() on socket create
Johan Hovold (1):
USB: serial: cyberjack: fix write-URB completion race
John Clements (1):
drm/amdgpu: resolved ASD loading issue on sienna
Jonathan McDowell (1):
net: dsa: qca8k: Fix port MTU setting
Josef Bacik (2):
btrfs: drop the path before adding qgroup items when enabling qgroups
btrfs: add a helper to read the tree_root commit root for backref lookup
Kailang Yang (2):
ALSA: hda/realtek - Fixed HP headset Mic can't be detected
ALSA: hda/realtek - Enable headphone for ASUS TM420
Kairui Song (2):
x86/kexec: Use up-to-dated screen_info copy to fill boot params
hyperv_fb: Update screen_info after removing old framebuffer
Karol Herbst (2):
drm/nouveau/device: fix changing endianess code to work on older GPUs drm/nouveau/gem: fix "refcount_t: underflow; use-after-free"
Keith Winstein (1):
ALSA: usb-audio: Add implicit feedback quirk for Zoom UAC-2
Lee Jones (1):
Fonts: Replace discarded const qualifier
Likun Gao (1):
drm/amdgpu: update golden setting for sienna_cichlid
Lu Baolu (1):
iommu/vt-d: Fix kernel NULL pointer dereference in find_domain()
Lubomir Rintel (1):
ARM: dts: mmp3: Add power domain for the camera
Lucas Stach (1):
tty: serial: imx: enable earlycon by default if IMX_SERIAL_CONSOLE is enabled
Lyude Paul (3):
drm/nouveau/kms/nv50-: Program notifier offset before requesting disp caps drm/nouveau/kms/nv50-: Get rid of bogus nouveau_conn_mode_valid() drm/nouveau/kms/nv50-: Fix clock checking algorithm in nv50_dp_mode_valid()
Macpaul Lin (1):
usb: mtu3: fix panic in mtu3_gadget_stop()
Mark Deneen (1):
cadence: force nonlinear buffers to be cloned
Martin Blumenstingl (1):
arm64: dts: amlogic: meson-g12: use the G12A specific dwmac compatible
Martin Hundebøll (1):
spi: bcm2835: fix gpio cs level inversion
Martin Leung (1):
drm/amd/display: adding ddc_gpio_vga_reg_list to ddc reg def'ns
Mathy Vanhoef (1):
mac80211: fix regression where EAPOL frames were sent in plaintext
Matthias Reichl (1):
tty: fix crash in release_tty if tty->port is not set
Maxime Ripard (3):
drm/sun4i: frontend: Rework a bit the phase data drm/sun4i: frontend: Reuse the ch0 phase for RGB formats drm/sun4i: frontend: Fix the scaler phase on A33
Michał Mirosław (1):
regulator: defer probe when trying to get voltage from unresolved supply
Mike Galbraith (1):
futex: Handle transient "ownerless" rtmutex state correctly
Mike Kravetz (1):
hugetlb_cgroup: fix reservation accounting
Ming Lei (1):
scsi: core: Don't start concurrent async scan on same host
Niklas Schnelle (1):
s390/pci: fix hot-plug of PCI function missing bus
Oleg Nesterov (1):
ptrace: fix task_join_group_stop() for the case when current is traced
Pavel Begunkov (2):
io_uring: don't miss setting IO_WQ_WORK_CONCURRENT
io_uring: fix link lookup racing with link timeout
Peter Chen (1):
usb: cdns3: gadget: suspicious implicit sign extension
Petr Malat (1):
sctp: Fix COMM_LOST/CANT_STR_ASSOC err reporting on big-endian platforms
Qian Cai (1):
arm64/smp: Move rcu_cpu_starting() earlier
Qinglang Miao (1):
serial: txx9: add missing platform_driver_unregister() on error in serial_txx9_init
Qiujun Huang (1):
tracing: Fix out of bounds write in get_trace_buf
Rafael J. Wysocki (3):
PM: runtime: Drop runtime PM references to supplier on link removal
PM: runtime: Drop pm_runtime_clean_up_links()
PM: runtime: Resume the device earlier in __device_release_driver()
Ralph Campbell (1):
drm/nouveau/nouveau: fix the start/end range for migration
Scott K Logan (1):
arm64: dts: meson: add missing g12 rng clock
Seung-Woo Kim (1):
staging: mmal-vchiq: Fix memory leak for vchiq_instance
Shannon Nelson (1):
ionic: check port ptr before use
Shijie Luo (1):
mm: mempolicy: fix potential pte_unmap_unlock pte error
Song Liu (1):
perf hists browser: Increase size of 'buf' in perf_evsel__hists_browse()
Steven Rostedt (VMware) (3):
ring-buffer: Fix recursion protection transitions between interrupt context
ftrace: Fix recursion check for NMI test
ftrace: Handle tracing when switching between context
Sukadev Bhattiprolu (1):
powerpc/vnic: Extend "failover pending" window
Taehee Yoo (1):
net: core: use list_del_init() instead of list_del() in netdev_run_todo()
Thinh Nguyen (1):
usb: dwc3: ep0: Fix delay status handling
Thomas Gleixner (1):
entry: Fix the incorrect ordering of lockdep and RCU check
Tianci.Yin (2):
drm/amdgpu: disable DCN and VCN for navi10 blockchain SKU(v3) drm/amdgpu: add DID for navi10 blockchain SKU
Tyrel Datwyler (1):
scsi: ibmvscsi: Fix potential race after loss of transport
Vasily Gorbik (1):
lib/crc32test: remove extra local_irq_disable/enable
Ville Syrjälä (4):
drm/i915: Fix TGL DKL PHY DP vswing handling
drm/i915: Mark ininitial fb obj as WT on eLLC machines to avoid rcu lockup during fbdev init drm/i915: Reject 90/270 degree rotated initial fbs
drm/i915: Restore ILK-M RPS support
Vinay Kumar Yadav (2):
chelsio/chtls: fix memory leaks caused by a race chelsio/chtls: fix always leaking ctrl_skb
Vincent Whitchurch (1):
of: Fix reserved-memory overlap detection
Vineet Gupta (1):
ARC: stack unwinding: avoid indefinite looping
YueHaibing (1):
sfp: Fix error handing in sfp_probe()
Zhang Qilong (1):
ACPI: NFIT: Fix comparison to '-ENXIO'
Ziyi Cao (1):
USB: serial: option: add Quectel EC200T module support
Zqiang (1):
kthread_worker: prevent queuing delayed work from timer_fn when it is being canceled
kiyin(尹亮) (1):
perf/core: Fix a memory leak in perf_event_parse_addr_filter()
wenxu (1):
ip_tunnel: fix over-mtu packet send fail without TUNNEL_DONT_FRAGMENT flags
zhenwei pi (1):
nvme-rdma: handle unexpected nvme completion data length
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 9 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arc/kernel/stacktrace.c +6 -1
@@ -112,7 +112,7 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs, int (*consumer_fn) (unsigned int, void *), void *arg) { #ifdef CONFIG_ARC_DW2_UNWIND - int ret = 0; + int ret = 0, cnt = 0;unsigned int address;struct unwind_frame_info frame_info;
@@ -132,6 +132,11 @@ arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,break ; frame_info.regs.r63 = frame_info.regs.r31; + +if (cnt++ >128 ) { +printk ("unwinder looping too long, aborting !\n" ); +return 0 ; + } }return address;/* return the last address it saw */
arch/arm/boot/dts/mmp3.dtsi +2 -0
@@ -296,6 +296,7 @@ camera0: camera@d420a000 { interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>; clocks = <&soc_clocks MMP2_CLK_CCIC0>; clock-names = "axi"; + power-domains = <&soc_clocks MMP3_POWER_DOMAIN_CAMERA>; #clock-cells = <0>; clock-output-names = "mclk"; status = "disabled";
@@ -307,6 +308,7 @@ camera1: camera@d420a800 { interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>; clocks = <&soc_clocks MMP2_CLK_CCIC1>; clock-names = "axi"; + power-domains = <&soc_clocks MMP3_POWER_DOMAIN_CAMERA>; #clock-cells = <0>; clock-output-names = "mclk"; status = "disabled";
arch/arm/boot/dts/sun4i-a10.dtsi +1 -1
@@ -143,7 +143,7 @@ map0 { trips { cpu_alert0: cpu-alert0 { /* milliCelsius */ - temperature = <850000>; + temperature = <85000>; hysteresis = <2000>; type = "passive"; };
arch/arm64/boot/dts/amlogic/meson-axg.dtsi +2 -0
@@ -187,6 +187,8 @@ ethmac: ethernet@ff3f0000 { "timing-adjustment"; rx-fifo-depth = <4096>; tx-fifo-depth = <2048>; + resets = <&reset RESET_ETHERNET>; + reset-names = "stmmaceth"; status = "disabled"; };
arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi +5 -1
@@ -209,7 +209,7 @@ map { }; ethmac: ethernet@ff3f0000 { - compatible = "amlogic,meson-axg-dwmac", + compatible = "amlogic,meson-g12a-dwmac", "snps,dwmac-3.70a", "snps,dwmac"; reg = <0x0 0xff3f0000 0x0 0x10000>,
@@ -224,6 +224,8 @@ ethmac: ethernet@ff3f0000 { "timing-adjustment"; rx-fifo-depth = <4096>; tx-fifo-depth = <2048>; + resets = <&reset RESET_ETHERNET>; + reset-names = "stmmaceth"; status = "disabled"; mdio0: mdio {
@@ -282,6 +284,8 @@ apb_efuse: bus@30000 { hwrng: rng@218 { compatible = "amlogic,meson-rng"; reg = <0x0 0x218 0x0 0x4>; + clocks = <&clkc CLKID_RNG0>; + clock-names = "core"; }; };
arch/arm64/boot/dts/amlogic/meson-gx.dtsi +3 -0
@@ -13,6 +13,7 @@ #include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/power/meson-gxbb-power.h> +#include <dt-bindings/reset/amlogic,meson-gxbb-reset.h> #include <dt-bindings/thermal/thermal.h> / {
@@ -575,6 +576,8 @@ ethmac: ethernet@c9410000 { interrupt-names = "macirq"; rx-fifo-depth = <4096>; tx-fifo-depth = <2048>; + resets = <&reset RESET_ETHERNET>; + reset-names = "stmmaceth"; power-domains = <&pwrc PWRC_GXBB_ETHERNET_MEM_ID>; status = "disabled"; };
arch/arm64/kernel/smp.c +1 -0
@@ -213,6 +213,7 @@ asmlinkage notrace void secondary_start_kernel(void)if (system_uses_irq_prio_masking ())init_gic_priority_masking (); +rcu_cpu_starting (cpu);preempt_disable ();trace_hardirqs_off ();
arch/powerpc/kernel/head_40x.S +0 -8
@@ -285,11 +285,7 @@ _ENTRY(saved_ksp_limit) rlwimi r11, r10, 22, 20, 29 /* Compute PTE address */ lwz r11, 0(r11) /* Get Linux PTE */ -#ifdef CONFIG_SWAP li r9, _PAGE_PRESENT | _PAGE_ACCESSED -#else - li r9, _PAGE_PRESENT -#endif andc. r9, r9, r11 /* Check permission */ bne 5f
@@ -370,11 +366,7 @@ _ENTRY(saved_ksp_limit) rlwimi r11, r10, 22, 20, 29 /* Compute PTE address */ lwz r11, 0(r11) /* Get Linux PTE */ -#ifdef CONFIG_SWAP li r9, _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC -#else - li r9, _PAGE_PRESENT | _PAGE_EXEC -#endif andc. r9, r9, r11 /* Check permission */ bne 5f
arch/powerpc/kernel/head_8xx.S +2 -12
@@ -202,9 +202,7 @@ SystemCall: InstructionTLBMiss: mtspr SPRN_SPRG_SCRATCH0, r10 -#if defined(ITLB_MISS_KERNEL) || defined(CONFIG_SWAP) || defined(CONFIG_HUGETLBFS) mtspr SPRN_SPRG_SCRATCH1, r11 -#endif /* If we are faulting a kernel address, we have to use the * kernel page tables.
@@ -238,11 +236,9 @@ InstructionTLBMiss: rlwimi r11, r10, 32 - 9, _PMD_PAGE_512K mtspr SPRN_MI_TWC, r11 #endif -#ifdef CONFIG_SWAP - rlwinm r11, r10, 32-5, _PAGE_PRESENT + rlwinm r11, r10, 32-7, _PAGE_PRESENT and r11, r11, r10 rlwimi r10, r11, 0, _PAGE_PRESENT -#endif /* The Linux PTE won't go exactly into the MMU TLB. * Software indicator bits 20 and 23 must be clear. * Software indicator bits 22, 24, 25, 26, and 27 must be
@@ -256,9 +252,7 @@ InstructionTLBMiss: /* Restore registers */ 0: mfspr r10, SPRN_SPRG_SCRATCH0 -#if defined(ITLB_MISS_KERNEL) || defined(CONFIG_SWAP) || defined(CONFIG_HUGETLBFS) mfspr r11, SPRN_SPRG_SCRATCH1 -#endif rfi patch_site 0b, patch__itlbmiss_exit_1
@@ -268,9 +262,7 @@ InstructionTLBMiss: addi r10, r10, 1 stw r10, (itlb_miss_counter - PAGE_OFFSET)@l(0) mfspr r10, SPRN_SPRG_SCRATCH0 -#if defined(ITLB_MISS_KERNEL) || defined(CONFIG_SWAP) mfspr r11, SPRN_SPRG_SCRATCH1 -#endif rfi #endif
@@ -316,11 +308,9 @@ DataStoreTLBMiss: * r11 = ((r10 & PRESENT) & ((r10 & ACCESSED) >> 5)); * r10 = (r10 & ~PRESENT) | r11; */ -#ifdef CONFIG_SWAP - rlwinm r11, r10, 32-5, _PAGE_PRESENT + rlwinm r11, r10, 32-7, _PAGE_PRESENT and r11, r11, r10 rlwimi r10, r11, 0, _PAGE_PRESENT -#endif /* The Linux PTE won't go exactly into the MMU TLB. * Software indicator bits 24, 25, 26, and 27 must be * set. All other Linux PTE bits control the behavior
arch/s390/include/asm/pgtable.h +30 -22
73 lines not on this page · raw message
arch/s390/pci/pci_event.c +4 -0
@@ -101,6 +101,10 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)if (ret)break ; +/* the PCI function will be scanned once function 0 appears */ +if (!zdev->zbus->bus) +break ; + pdev =pci_scan_single_device (zdev->zbus->bus, zdev->devfn);if (!pdev)break ;
arch/x86/kernel/kexec-bzimage64.c +1 -2
@@ -200,8 +200,7 @@ setup_boot_parameters(struct kimage *image, struct boot_params *params, params->hdr.hardware_subarch = boot_params.hdr.hardware_subarch;/* Copying screen_info will do? */ -memcpy (¶ms->screen_info, &boot_params.screen_info, -sizeof (struct screen_info )); +memcpy (¶ms->screen_info, &screen_info,sizeof (struct screen_info ));/* Fill in memsize later */ params->screen_info.ext_mem_k =0 ;
arch/x86/lib/memcpy_64.S +1 -3
@@ -16,8 +16,6 @@ * to a jmp to memcpy_erms which does the REP; MOVSB mem copy. */ -.weak memcpy - /* * memcpy - Copy a memory block. *
@@ -30,7 +28,7 @@ * rax original destination */ SYM_FUNC_START_ALIAS(__memcpy) -SYM_FUNC_START_LOCAL(memcpy) +SYM_FUNC_START_WEAK(memcpy) ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \ "jmp memcpy_erms", X86_FEATURE_ERMS
arch/x86/lib/memmove_64.S +1 -3
@@ -24,9 +24,7 @@ * Output: * rax: dest */ -.weak memmove - -SYM_FUNC_START_ALIAS(memmove) +SYM_FUNC_START_WEAK(memmove) SYM_FUNC_START(__memmove) mov %rdi, %rax
arch/x86/lib/memset_64.S +1 -3
@@ -6,8 +6,6 @@ #include <asm/alternative-asm.h> #include <asm/export.h> -.weak memset - /* * ISO C memset - set a memory block to a byte value. This function uses fast * string to get better performance than the original function. The code is
@@ -19,7 +17,7 @@ * * rax original destination */ -SYM_FUNC_START_ALIAS(memset) +SYM_FUNC_START_WEAK(memset) SYM_FUNC_START(__memset) /* * Some CPUs support enhanced REP MOVSB/STOSB feature. It is recommended
block/blk-cgroup.c +13 -2
@@ -648,13 +648,20 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol, goto fail; } +if (radix_tree_preload (GFP_KERNEL )) { +blkg_free (new_blkg); + ret = -ENOMEM ; + goto fail; + } +rcu_read_lock ();spin_lock_irq (&q->queue_lock); blkg =blkg_lookup_check (pos, pol, q);if (IS_ERR (blkg)) { ret =PTR_ERR (blkg); - goto fail_unlock; +blkg_free (new_blkg); + goto fail_preloaded; }if (blkg) {
@@ -663,10 +670,12 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol, blkg =blkg_create (pos, q, new_blkg);if (IS_ERR (blkg)) { ret =PTR_ERR (blkg); - goto fail_unlock; + goto fail_preloaded; } } +radix_tree_preload_end (); +if (pos == blkcg) goto success; }
@@ -676,6 +685,8 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol, ctx->body = input;return 0 ; +fail_preloaded: +radix_tree_preload_end (); fail_unlock:spin_unlock_irq (&q->queue_lock);rcu_read_unlock ();
drivers/acpi/nfit/core.c +1 -1
@@ -1564,7 +1564,7 @@ static ssize_t format1_show(struct device *dev, le16_to_cpu(nfit_dcr->dcr->code));break ; } -if (rc !=ENXIO ) +if (rc != -ENXIO )break ; }mutex_unlock (&acpi_desc->init_mutex);
drivers/base/core.c +2 -4
@@ -763,8 +763,7 @@ static void __device_link_del(struct kref *kref)dev_dbg (link->consumer,"Dropping the link to %s\n" ,dev_name (link->supplier)); -if (link->flags &DL_FLAG_PM_RUNTIME ) -pm_runtime_drop_link (link->consumer); +pm_runtime_drop_link (link);list_del_rcu (&link->s_node);list_del_rcu (&link->c_node);
@@ -778,8 +777,7 @@ static void __device_link_del(struct kref *kref)dev_info (link->consumer,"Dropping the link to %s\n" ,dev_name (link->supplier)); -if (link->flags &DL_FLAG_PM_RUNTIME ) -pm_runtime_drop_link (link->consumer); +pm_runtime_drop_link (link);list_del (&link->s_node);list_del (&link->c_node);
drivers/base/dd.c +5 -4
@@ -1117,6 +1117,8 @@ static void __device_release_driver(struct device *dev, struct device *parent) drv = dev->driver;if (drv) { +pm_runtime_get_sync (dev); +while (device_links_busy (dev)) {__device_driver_unlock (dev, parent);
@@ -1128,13 +1130,12 @@ static void __device_release_driver(struct device *dev, struct device *parent)* have released the driver successfully while this one * was waiting, so check for that. */ -if (dev->driver != drv) +if (dev->driver != drv) { +pm_runtime_put (dev);return ; + } } -pm_runtime_get_sync (dev); -pm_runtime_clean_up_links (dev); -driver_sysfs_remove (dev);if (dev->bus)
drivers/base/power/runtime.c +20 -37
75 lines not on this page · raw message
drivers/crypto/chelsio/chtls/chtls_cm.c +1 -1
@@ -212,7 +212,7 @@ static struct sk_buff *alloc_ctrl_skb(struct sk_buff *skb, int len) {if (likely (skb && !skb_shared (skb) && !skb_cloned (skb))) {__skb_trim (skb,0 ); -refcount_add (2 , &skb->users); +refcount_inc (&skb->users); }else { skb =alloc_skb (len,GFP_KERNEL | __GFP_NOFAIL); }
drivers/crypto/chelsio/chtls/chtls_hw.c +3 -0
@@ -383,6 +383,9 @@ int chtls_setkey(struct chtls_sock *csk, u32 keylen,if (ret) goto out_notcb; +if (unlikely (csk_flag (sk,CSK_ABORT_SHUTDOWN ))) + goto out_notcb; +set_wr_txq (skb,CPL_PRIORITY_DATA , csk->tlshws.txqid); csk->wr_credits -=DIV_ROUND_UP (len,16 ); csk->wr_unacked +=DIV_ROUND_UP (len,16 );
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -0
@@ -1033,6 +1033,7 @@ static const struct pci_device_id pciidlist[] = { {0x1002, 0x7319, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10}, {0x1002, 0x731A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10}, {0x1002, 0x731B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10}, + {0x1002, 0x731E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10}, {0x1002, 0x731F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},/* Navi14 */ {0x1002, 0x7340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14},
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +1 -0
@@ -2322,6 +2322,7 @@ int parse_ta_bin_descriptor(struct psp_context *psp, psp->asd_feature_version =le32_to_cpu (desc->fw_version); psp->asd_ucode_size =le32_to_cpu (desc->size_bytes); psp->asd_start_addr = ucode_start_addr; + psp->asd_fw = psp->ta_fw;break ;case TA_FW_TYPE_PSP_XGMI : psp->ta_xgmi_ucode_version =le32_to_cpu (desc->fw_version);
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +4 -0
@@ -128,6 +128,9 @@#define PA_SC_ENHANCE_3__FORCE_PBB_WORKLOAD_MODE_TO_ZERO__SHIFT 0x3#define PA_SC_ENHANCE_3__FORCE_PBB_WORKLOAD_MODE_TO_ZERO_MASK 0x00000008L +#define mmCGTT_SPI_CS_CLK_CTRL 0x507c +#define mmCGTT_SPI_CS_CLK_CTRL_BASE_IDX 1 +MODULE_FIRMWARE ("amdgpu/navi10_ce.bin" );MODULE_FIRMWARE ("amdgpu/navi10_pfp.bin" );MODULE_FIRMWARE ("amdgpu/navi10_me.bin" );
@@ -3094,6 +3097,7 @@ static const struct soc15_reg_golden golden_settings_gc_rlc_spm_10_1_2_nv12[] =static const struct soc15_reg_golden golden_settings_gc_10_3[] = { +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCGTT_SPI_CS_CLK_CTRL,0x78000000 ,0x78000100 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCGTT_SPI_PS_CLK_CTRL,0xff7f0fff ,0x78000100 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCGTT_SPI_RA0_CLK_CTRL,0xff7f0fff ,0x30000100 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmCGTT_SPI_RA1_CLK_CTRL,0xff7f0fff ,0x7e000100 ),
drivers/gpu/drm/amd/amdgpu/nv.c +12 -2
@@ -488,6 +488,14 @@ void nv_set_virt_ops(struct amdgpu_device *adev) adev->virt.ops = &xgpu_nv_virt_ops; } +static bool nv_is_blockchain_sku (struct pci_dev *pdev) +{ +if (pdev->device ==0x731E && + (pdev->revision ==0xC6 || pdev->revision ==0xC7 )) +return true; +return false; +} +int nv_set_ip_blocks (struct amdgpu_device *adev) {int r;
@@ -516,7 +524,8 @@ int nv_set_ip_blocks(struct amdgpu_device *adev)if (adev->enable_virtual_display ||amdgpu_sriov_vf (adev))amdgpu_device_ip_block_add (adev, &dce_virtual_ip_block);#if defined(CONFIG_DRM_AMD_DC ) - else if (amdgpu_device_has_dc_support(adev)) + else if (amdgpu_device_has_dc_support(adev) && + !nv_is_blockchain_sku(adev->pdev)) amdgpu_device_ip_block_add(adev, &dm_ip_block);#endif amdgpu_device_ip_block_add (adev, &gfx_v10_0_ip_block);
@@ -524,7 +533,8 @@ int nv_set_ip_blocks(struct amdgpu_device *adev)if (adev->firmware.load_type ==AMDGPU_FW_LOAD_DIRECT && !amdgpu_sriov_vf (adev))amdgpu_device_ip_block_add (adev, &smu_v11_0_ip_block); -amdgpu_device_ip_block_add (adev, &vcn_v2_0_ip_block); +if (!nv_is_blockchain_sku (adev->pdev)) +amdgpu_device_ip_block_add (adev, &vcn_v2_0_ip_block);amdgpu_device_ip_block_add (adev, &jpeg_v2_0_ip_block);if (adev->enable_mes)amdgpu_device_ip_block_add (adev, &mes_v10_1_ip_block);
drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c +2 -1
@@ -1149,7 +1149,8 @@ static uint32_t dcn3_get_pix_clk_dividers(static const struct clock_source_funcs dcn3_clk_src_funcs = { .cs_power_down = dce110_clock_source_power_down, .program_pix_clk = dcn3_program_pix_clk, - .get_pix_clk_dividers = dcn3_get_pix_clk_dividers + .get_pix_clk_dividers = dcn3_get_pix_clk_dividers, + .get_pixel_clk_frequency_100hz = get_pixel_clk_frequency_100hz };#endif /*****************************************/
drivers/gpu/drm/amd/display/dc/gpio/dcn30/hw_factory_dcn30.c +12 -0
@@ -117,6 +117,12 @@ static const struct ddc_registers ddc_data_regs_dcn[] = {ddc_data_regs_dcn2 (4 ),ddc_data_regs_dcn2 (5 ),ddc_data_regs_dcn2 (6 ), + { +DDC_GPIO_VGA_REG_LIST (DATA ), + .ddc_setup = 0, + .phy_aux_cntl = 0, + .dc_gpio_aux_ctrl_5 = 0 + } }; static const struct ddc_registers ddc_clk_regs_dcn[] = {
@@ -126,6 +132,12 @@ static const struct ddc_registers ddc_clk_regs_dcn[] = {ddc_clk_regs_dcn2 (4 ),ddc_clk_regs_dcn2 (5 ),ddc_clk_regs_dcn2 (6 ), + { +DDC_GPIO_VGA_REG_LIST (CLK ), + .ddc_setup = 0, + .phy_aux_cntl = 0, + .dc_gpio_aux_ctrl_5 = 0 + } }; static const struct ddc_sh_mask ddc_shift[] = {
drivers/gpu/drm/i915/Kconfig.debug +1 -0
@@ -153,6 +153,7 @@ config DRM_I915_SELFTEST select DRM_EXPORT_FOR_TESTS if m select FAULT_INJECTION select PRIME_NUMBERS + select CRC32 help Choose this option to allow the driver to perform selftests upon loading; also requires the i915.selftest=1 module parameter. To
drivers/gpu/drm/i915/display/intel_ddi.c +1 -1
@@ -2655,7 +2655,7 @@ tgl_dkl_phy_ddi_vswing_sequence(struct intel_encoder *encoder, int link_clock,u32 n_entries, val, ln, dpcnt_mask, dpcnt_val;int rate =0 ; -if (type ==INTEL_OUTPUT_HDMI ) { +if (type !=INTEL_OUTPUT_HDMI ) {struct intel_dp *intel_dp =enc_to_intel_dp (encoder); rate = intel_dp->link_rate;
drivers/gpu/drm/i915/display/intel_display.c +12 -0
@@ -3432,6 +3432,14 @@ initial_plane_vma(struct drm_i915_private *i915,if (IS_ERR (obj))return NULL ; +/* +* Mark it WT ahead of time to avoid changing the +* cache_level during fbdev initialization. The +* unbind there would get stuck waiting for rcu. +*/ +i915_gem_object_set_cache_coherency (obj,HAS_WT (i915) ? +I915_CACHE_WT :I915_CACHE_NONE ); +switch (plane_config->tiling) {case I915_TILING_NONE :break ;
@@ -10581,6 +10589,10 @@ skl_get_initial_plane_config(struct intel_crtc *crtc, val & PLANE_CTL_FLIP_HORIZONTAL) plane_config->rotation |=DRM_MODE_REFLECT_X ; +/* 90/270 degree rotation would require extra work */ +if (drm_rotation_90_or_270 (plane_config->rotation)) + goto error; + base =intel_de_read (dev_priv,PLANE_SURF (pipe, plane_id)) &0xfffff000 ; plane_config->base = base;
drivers/gpu/drm/i915/display/intel_psr.c +1 -1
@@ -1672,7 +1672,7 @@ void intel_psr_atomic_check(struct drm_connector *connector,return ; intel_connector =to_intel_connector (connector); - dig_port =enc_to_dig_port (intel_attached_encoder (intel_connector)); + dig_port =enc_to_dig_port (to_intel_encoder (new_state->best_encoder));if (dev_priv->psr.dp != &dig_port->dp)return ;
drivers/gpu/drm/i915/gem/i915_gem_context.c +10 -38
109 lines not on this page · raw message
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +5 -2
@@ -1962,8 +1962,8 @@ struct eb_parse_work {struct i915_vma *batch;struct i915_vma *shadow;struct i915_vma *trampoline; -unsigned int batch_offset; -unsigned int batch_length; +unsigned long batch_offset; +unsigned long batch_length; };static int __eb_parse (struct dma_fence_work *work)
@@ -2033,6 +2033,9 @@ static int eb_parse_pipeline(struct i915_execbuffer *eb,struct eb_parse_work *pw;int err; +GEM_BUG_ON (overflows_type (eb->batch_start_offset, pw->batch_offset)); +GEM_BUG_ON (overflows_type (eb->batch_len, pw->batch_length)); + pw =kzalloc (sizeof (*pw),GFP_KERNEL );if (!pw)return -ENOMEM ;
drivers/gpu/drm/i915/gem/i915_gem_pages.c +28 -2
@@ -254,9 +254,35 @@ static void *i915_gem_object_map(struct drm_i915_gem_object *obj,if (!i915_gem_object_has_struct_page (obj) && type !=I915_MAP_WC )return NULL ; +if (GEM_WARN_ON (type ==I915_MAP_WC && + !static_cpu_has (X86_FEATURE_PAT ))) +return NULL ; +/* A single page can always be kmapped */ -if (n_pte ==1 && type ==I915_MAP_WB ) -return kmap (sg_page (sgt->sgl)); +if (n_pte ==1 && type ==I915_MAP_WB ) { +struct page *page =sg_page (sgt->sgl); + +/* +* On 32b, highmem using a finite set of indirect PTE (i.e. +* vmap) to provide virtual mappings of the high pages. +* As these are finite, map_new_virtual() must wait for some +* other kmap() to finish when it runs out. If we map a large +* number of objects, there is no method for it to tell us +* to release the mappings, and we deadlock. +* +* However, if we make an explicit vmap of the page, that +* uses a larger vmalloc arena, and also has the ability +* to tell us to release unwanted mappings. Most importantly, +* it will fail and propagate an error instead of waiting +* forever. +* +* So if the page is beyond the 32b boundary, make an explicit +* vmap. On 64b, this check will be optimised away as we can +* directly kmap any page on the system. +*/ +if (!PageHighMem (page)) +return kmap (page); + } mem = stack;if (n_pte >ARRAY_SIZE (stack)) {
drivers/gpu/drm/i915/gem/i915_gem_stolen.c +4 -2
@@ -53,8 +53,10 @@ int i915_gem_stolen_insert_node(struct drm_i915_private *i915, struct drm_mm_node *node, u64 size, unsigned alignment) { - return i915_gem_stolen_insert_node_in_range(i915, node, size, - alignment, 0, U64_MAX); + return i915_gem_stolen_insert_node_in_range(i915, node, +size ,alignment , +I915_GEM_STOLEN_BIAS , +U64_MAX ); } void i915_gem_stolen_remove_node(struct drm_i915_private *i915,
drivers/gpu/drm/i915/gem/i915_gem_stolen.h +2 -0
@@ -30,4 +30,6 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_privresource_size_t stolen_offset, resource_size_t size); +#define I915_GEM_STOLEN_BIAS SZ_128K +#endif /* __I915_GEM_STOLEN_H__ */
drivers/gpu/drm/i915/gt/intel_engine.h +9 -0
@@ -357,4 +357,13 @@ intel_engine_has_preempt_reset(const struct intel_engine_cs *engine) return intel_engine_has_preemption(engine); } +static inline bool +intel_engine_has_heartbeat (const struct intel_engine_cs *engine) +{ +if (!IS_ACTIVE (CONFIG_DRM_I915_HEARTBEAT_INTERVAL )) +return false; + +return READ_ONCE (engine->props.heartbeat_interval_ms); +} +#endif /* _INTEL_RINGBUFFER_H_ */
drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c +67 -39
133 lines not on this page · raw message
drivers/gpu/drm/i915/gt/intel_lrc.c +24 -11
@@ -1139,9 +1139,8 @@ __unwind_incomplete_requests(struct intel_engine_cs *engine)/* Check in case we rollback so far we wrap [size/2] */ if (intel_ring_direction (rq->ring, -intel_ring_wrap (rq->ring, - rq->tail), - rq->ring->tail) >0 ) + rq->tail, + rq->ring->tail +8 ) >0 ) rq->context->lrc.desc |=CTX_DESC_FORCE_RESTORE ; active = rq;
@@ -2662,6 +2661,9 @@ static void process_csb(struct intel_engine_cs *engine)smp_wmb ();/* complete the seqlock */ WRITE_ONCE (execlists->active, execlists->inflight); +/* XXX Magic delay for tgl */ +ENGINE_POSTING_READ (engine,RING_CONTEXT_STATUS_PTR ); +WRITE_ONCE (execlists->pending[0 ],NULL ); }else {if (GEM_WARN_ON (!*execlists->active)) {
@@ -3537,6 +3539,19 @@ static const struct intel_context_ops execlists_context_ops = { .destroy = execlists_context_destroy, }; +static u32 hwsp_offset (const struct i915_request *rq) +{ +const struct intel_timeline_cacheline *cl; + +/* Before the request is executed, the timeline/cachline is fixed */ + + cl =rcu_dereference_protected (rq->hwsp_cacheline,1 ); +if (cl) +return cl->ggtt_offset; + +return rcu_dereference_protected (rq->timeline,1 )->hwsp_offset; +} +static int gen8_emit_init_breadcrumb (struct i915_request *rq) {u32 *cs;
@@ -3559,7 +3574,7 @@ static int gen8_emit_init_breadcrumb(struct i915_request *rq) *cs++ =MI_NOOP ; *cs++ =MI_STORE_DWORD_IMM_GEN4 |MI_USE_GGTT ; - *cs++ =i915_request_timeline (rq)->hwsp_offset; + *cs++ =hwsp_offset (rq); *cs++ =0 ; *cs++ = rq->fence.seqno -1 ;
@@ -4863,11 +4878,9 @@ gen8_emit_fini_breadcrumb_tail(struct i915_request *request, u32 *cs)return gen8_emit_wa_tail (request, cs); } -static u32 *emit_xcs_breadcrumb (struct i915_request *request,u32 *cs) +static u32 *emit_xcs_breadcrumb (struct i915_request *rq,u32 *cs) { -u32 addr =i915_request_active_timeline (request)->hwsp_offset; - -return gen8_emit_ggtt_write (cs, request->fence.seqno, addr,0 ); +return gen8_emit_ggtt_write (cs, rq->fence.seqno,hwsp_offset (rq),0 ); }static u32 *gen8_emit_fini_breadcrumb (struct i915_request *rq,u32 *cs)
@@ -4886,7 +4899,7 @@ static u32 *gen8_emit_fini_breadcrumb_rcs(struct i915_request *request, u32 *cs)/* XXX flush+write+CS_STALL all in one upsets gem_concurrent_blt:kbl */ cs =gen8_emit_ggtt_write_rcs (cs, request->fence.seqno, -i915_request_active_timeline (request)->hwsp_offset, +hwsp_offset (request),PIPE_CONTROL_FLUSH_ENABLE |PIPE_CONTROL_CS_STALL );
@@ -4898,7 +4911,7 @@ gen11_emit_fini_breadcrumb_rcs(struct i915_request *request, u32 *cs) { cs = gen8_emit_ggtt_write_rcs(cs, request->fence.seqno, - i915_request_active_timeline(request)->hwsp_offset, + hwsp_offset(request), PIPE_CONTROL_CS_STALL | PIPE_CONTROL_TILE_CACHE_FLUSH | PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH |
@@ -4968,7 +4981,7 @@ gen12_emit_fini_breadcrumb_rcs(struct i915_request *request, u32 *cs) { cs = gen12_emit_ggtt_write_rcs(cs, request->fence.seqno, - i915_request_active_timeline(request)->hwsp_offset, + hwsp_offset(request), PIPE_CONTROL0_HDC_PIPELINE_FLUSH, PIPE_CONTROL_CS_STALL | PIPE_CONTROL_TILE_CACHE_FLUSH |
drivers/gpu/drm/i915/gt/intel_mocs.c +11 -5
@@ -234,11 +234,17 @@ static const struct drm_i915_mocs_entry broxton_mocs_table[] = { L3_1_UC) static const struct drm_i915_mocs_entry tgl_mocs_table[] = { -/* Base - Error (Reserved for Non-Use) */ -MOCS_ENTRY (0 ,0x0 ,0x0 ), -/* Base - Reserved */ -MOCS_ENTRY (1 ,0x0 ,0x0 ), - +/* +* NOTE: +* Reserved and unspecified MOCS indices have been set to (L3 + LCC). +* These reserved entries should never be used, they may be changed +* to low performant variants with better coherency in the future if +* more entries are needed. We are programming index I915_MOCS_PTE(1) +* only, __init_mocs_table() take care to program unused index with +* this entry. +*/ +MOCS_ENTRY (1 ,LE_3_WB |LE_TC_1_LLC |LE_LRUM (3 ), +L3_3_WB ),GEN11_MOCS_ENTRIES ,/* Implicitly enable L1 - HDC:L1 + L3 + LLC */
drivers/gpu/drm/i915/gt/intel_timeline.c +10 -8
@@ -188,10 +188,14 @@ cacheline_alloc(struct intel_timeline_hwsp *hwsp, unsigned int cacheline)return cl; } -static void cacheline_acquire (struct intel_timeline_cacheline *cl) +static void cacheline_acquire (struct intel_timeline_cacheline *cl, +u32 ggtt_offset) { -if (cl) -i915_active_acquire (&cl->active); +if (!cl) +return ; + + cl->ggtt_offset = ggtt_offset; +i915_active_acquire (&cl->active); }static void cacheline_release (struct intel_timeline_cacheline *cl)
@@ -332,7 +336,7 @@ int intel_timeline_pin(struct intel_timeline *tl)GT_TRACE (tl->gt,"timeline:%llx using HWSP offset:%x\n" , tl->fence_context, tl->hwsp_offset); -cacheline_acquire (tl->hwsp_cacheline); +cacheline_acquire (tl->hwsp_cacheline, tl->hwsp_offset);if (atomic_fetch_inc (&tl->pin_count)) {cacheline_release (tl->hwsp_cacheline);__i915_vma_unpin (tl->hwsp_ggtt);
@@ -505,7 +509,7 @@ __intel_timeline_get_seqno(struct intel_timeline *tl,GT_TRACE (tl->gt,"timeline:%llx using HWSP offset:%x\n" , tl->fence_context, tl->hwsp_offset); -cacheline_acquire (cl); +cacheline_acquire (cl, tl->hwsp_offset); tl->hwsp_cacheline = cl; *seqno =timeline_advance (tl);
@@ -563,9 +567,7 @@ int intel_timeline_read_hwsp(struct i915_request *from,if (err) goto out; - *hwsp =i915_ggtt_offset (cl->hwsp->vma) + -ptr_unmask_bits (cl->vaddr,CACHELINE_BITS ) *CACHELINE_BYTES ; - + *hwsp = cl->ggtt_offset; out:i915_active_release (&cl->active);return err;
drivers/gpu/drm/i915/gt/intel_timeline_types.h +2 -0
@@ -94,6 +94,8 @@ struct intel_timeline_cacheline {struct intel_timeline_hwsp *hwsp;void *vaddr; +u32 ggtt_offset; +struct rcu_head rcu; };
drivers/gpu/drm/i915/gt/selftest_reset.c +196 -0
211 lines not on this page · raw message
drivers/gpu/drm/i915/i915_cmd_parser.c +5 -5
@@ -1136,7 +1136,7 @@ find_reg(const struct intel_engine_cs *engine, u32 addr)/* Returns a vmap'd pointer to dst_obj, which the caller must unmap */ static u32 *copy_batch (struct drm_i915_gem_object *dst_obj,struct drm_i915_gem_object *src_obj, -u32 offset,u32 length) +unsigned long offset,unsigned long length) {bool needs_clflush;void *dst, *src;
@@ -1166,8 +1166,8 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj, } }if (IS_ERR (src)) { +unsigned long x, n;void *ptr; -int x, n;/* * We can avoid clflushing partial cachelines before the write
@@ -1184,7 +1184,7 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj, ptr = dst; x =offset_in_page (offset);for (n = offset >>PAGE_SHIFT ; length; n++) { -int len =min_t (int, length,PAGE_SIZE - x); +int len =min (length,PAGE_SIZE - x); src =kmap_atomic (i915_gem_object_get_page (src_obj, n));if (needs_clflush)
@@ -1414,8 +1414,8 @@ static bool shadow_needs_clflush(struct drm_i915_gem_object *obj)*/ int intel_engine_cmd_parser (struct intel_engine_cs *engine,struct i915_vma *batch, -u32 batch_offset, -u32 batch_length, +unsigned long batch_offset, +unsigned long batch_length,struct i915_vma *shadow,bool trampoline) {
drivers/gpu/drm/i915/i915_drv.h +2 -2
@@ -1903,8 +1903,8 @@ void intel_engine_init_cmd_parser(struct intel_engine_cs *engine);void intel_engine_cleanup_cmd_parser (struct intel_engine_cs *engine);int intel_engine_cmd_parser (struct intel_engine_cs *engine,struct i915_vma *batch, -u32 batch_offset, -u32 batch_length, +unsigned long batch_offset, +unsigned long batch_length,struct i915_vma *shadow,bool trampoline);#define I915_CMD_PARSER_TRAMPOLINE_SIZE 8
drivers/gpu/drm/i915/i915_gpu_error.c +4 -2
@@ -311,6 +311,8 @@ static int compress_page(struct i915_vma_compress *c,if (zlib_deflate (zstream,Z_NO_FLUSH ) !=Z_OK )return -EIO ; + +cond_resched (); }while (zstream->avail_in);/* Fallback to uncompressed if we increase size? */
@@ -397,6 +399,7 @@ static int compress_page(struct i915_vma_compress *c,if (!(wc &&i915_memcpy_from_wc (ptr, src,PAGE_SIZE )))memcpy (ptr, src,PAGE_SIZE ); dst->pages[dst->page_count++] = ptr; +cond_resched ();return 0 ; }
@@ -1309,7 +1312,7 @@ capture_vma(struct intel_engine_capture_vma *next, }strcpy (c->name, name); - c->vma =i915_vma_get (vma); + c->vma = vma;/* reference held while active */ c->next = next;return c;
@@ -1399,7 +1402,6 @@ intel_engine_coredump_add_vma(struct intel_engine_coredump *ee, compress));i915_active_release (&vma->active); -i915_vma_put (vma); capture = this->next;kfree (this);
drivers/gpu/drm/i915/i915_pci.c +1 -0
@@ -389,6 +389,7 @@ static const struct intel_device_info ilk_m_info = {GEN5_FEATURES ,PLATFORM (INTEL_IRONLAKE ), .is_mobile = 1, + .has_rps = true, .display.has_fbc = 1, };
drivers/gpu/drm/i915/i915_request.c +5 -0
@@ -549,8 +549,13 @@ bool __i915_request_submit(struct i915_request *request)if (i915_request_completed (request)) goto xfer; +if (unlikely (intel_context_is_closed (request->context) && + !intel_engine_has_heartbeat (engine))) +intel_context_set_banned (request->context); +if (unlikely (intel_context_is_banned (request->context)))i915_request_set_error_once (request, -EIO ); +if (unlikely (fatal_error (request->fence.error)))__i915_request_skip (request);
drivers/gpu/drm/i915/intel_uncore.c +26 -1
@@ -1209,6 +1209,18 @@ unclaimed_reg_debug(struct intel_uncore *uncore,spin_unlock (&uncore->debug->lock); } +#define __vgpu_read (x) \ +static u##x \ +vgpu_read##x(struct intel_uncore *uncore, i915_reg_t reg, bool trace) { \ + u##x val = __raw_uncore_read##x(uncore, reg); \ + trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \ + return val; \ +} +__vgpu_read(8) +__vgpu_read(16) +__vgpu_read(32) +__vgpu_read(64) +#define GEN2_READ_HEADER (x) \ u##x val = 0; \ assert_rpm_wakelock_held(uncore->rpm);
@@ -1414,6 +1426,16 @@ __gen_reg_write_funcs(gen8);#undef GEN6_WRITE_FOOTER#undef GEN6_WRITE_HEADER +#define __vgpu_write (x) \ +static void \ +vgpu_write##x(struct intel_uncore *uncore, i915_reg_t reg, u##x val, bool trace) { \ + trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \ + __raw_uncore_write##x(uncore, reg, val); \ +} +__vgpu_write(8) +__vgpu_write(16) +__vgpu_write(32) +#define ASSIGN_RAW_WRITE_MMIO_VFUNCS (uncore, x) \ do { \ (uncore)->funcs.mmio_writeb = x##_write8; \
@@ -1735,7 +1757,10 @@ static void uncore_raw_init(struct intel_uncore *uncore) {GEM_BUG_ON (intel_uncore_has_forcewake (uncore)); -if (IS_GEN (uncore->i915,5 )) { +if (intel_vgpu_active (uncore->i915)) { +ASSIGN_RAW_WRITE_MMIO_VFUNCS (uncore, vgpu); +ASSIGN_RAW_READ_MMIO_VFUNCS (uncore, vgpu); + }else if (IS_GEN (uncore->i915,5 )) {ASSIGN_RAW_WRITE_MMIO_VFUNCS (uncore, gen5);ASSIGN_RAW_READ_MMIO_VFUNCS (uncore, gen5); }else {
drivers/gpu/drm/nouveau/dispnv50/core.h +2 -0
@@ -44,6 +44,7 @@ int core507d_new_(const struct nv50_core_func *, struct nouveau_drm *, s32, struct nv50_core **); int core507d_init(struct nv50_core *);void core507d_ntfy_init (struct nouveau_bo *,u32 ); +int core507d_read_caps (struct nv50_disp *disp);int core507d_caps_init (struct nouveau_drm *,struct nv50_disp *);int core507d_ntfy_wait_done (struct nouveau_bo *,u32 ,struct nvif_device *);int core507d_update (struct nv50_core *,u32 *,bool );
@@ -55,6 +56,7 @@ extern const struct nv50_outp_func pior507d;int core827d_new (struct nouveau_drm *,s32 ,struct nv50_core **);int core907d_new (struct nouveau_drm *,s32 ,struct nv50_core **); +int core907d_caps_init (struct nouveau_drm *drm,struct nv50_disp *disp);extern const struct nv50_outp_func dac907d;extern const struct nv50_outp_func sor907d;
drivers/gpu/drm/nouveau/dispnv50/core507d.c +39 -2
57 lines not on this page · raw message
drivers/gpu/drm/nouveau/dispnv50/core907d.c +35 -1
@@ -22,11 +22,45 @@#include "core.h" #include "head.h" +#include <nvif/push507c.h> +#include <nvif/timer.h> + +#include <nvhw/class/cl907d.h> + +#include "nouveau_bo.h" + +int +core907d_caps_init (struct nouveau_drm *drm,struct nv50_disp *disp) +{ +struct nv50_core *core = disp->core; +struct nouveau_bo *bo = disp->sync; +s64 time; +int ret; + +NVBO_WR32 (bo,NV50_DISP_CORE_NTFY ,NV907D_CORE_NOTIFIER_3 ,CAPABILITIES_4 , +NVDEF (NV907D_CORE_NOTIFIER_3 ,CAPABILITIES_4 ,DONE , FALSE)); + + ret =core507d_read_caps (disp); +if (ret <0 ) +return ret; + + time =nvif_msec (core->chan.base.device,2000ULL , + if (NVBO_TD32(bo, NV50_DISP_CORE_NTFY, + NV907D_CORE_NOTIFIER_3, CAPABILITIES_4, DONE, ==, TRUE)) + break; + usleep_range(1, 2); + ); +if (time <0 ) +NV_ERROR (drm,"core caps notifier timeout\n" ); + +return 0 ; +} +static const struct nv50_core_func core907d = { .init = core507d_init, .ntfy_init = core507d_ntfy_init, - .caps_init = core507d_caps_init, + .caps_init = core907d_caps_init, .ntfy_wait_done = core507d_ntfy_wait_done, .update = core507d_update, .head = &head907d,
drivers/gpu/drm/nouveau/dispnv50/core917d.c +1 -1
@@ -26,7 +26,7 @@ static const struct nv50_core_func core917d = { .init = core507d_init, .ntfy_init = core507d_ntfy_init, - .caps_init = core507d_caps_init, + .caps_init = core907d_caps_init, .ntfy_wait_done = core507d_ntfy_wait_done, .update = core507d_update, .head = &head917d,
drivers/gpu/drm/nouveau/include/nvhw/class/cl507d.h +4 -1
@@ -32,7 +32,10 @@#define NV_DISP_CORE_NOTIFIER_1_COMPLETION_0_DONE_TRUE 0x00000001#define NV_DISP_CORE_NOTIFIER_1_COMPLETION_0_R0 15:1#define NV_DISP_CORE_NOTIFIER_1_COMPLETION_0_TIMESTAMP 29:16 - +#define NV_DISP_CORE_NOTIFIER_1_CAPABILITIES_1 0x00000001 +#define NV_DISP_CORE_NOTIFIER_1_CAPABILITIES_1_DONE 0:0 +#define NV_DISP_CORE_NOTIFIER_1_CAPABILITIES_1_DONE_FALSE 0x00000000 +#define NV_DISP_CORE_NOTIFIER_1_CAPABILITIES_1_DONE_TRUE 0x00000001// class methods #define NV507D_UPDATE (0x00000080)
drivers/gpu/drm/nouveau/include/nvhw/class/cl907d.h +4 -0
@@ -24,6 +24,10 @@#ifndef _cl907d_h_#define _cl907d_h_ +#define NV907D_CORE_NOTIFIER_3_CAPABILITIES_4 0x00000004 +#define NV907D_CORE_NOTIFIER_3_CAPABILITIES_4_DONE 0:0 +#define NV907D_CORE_NOTIFIER_3_CAPABILITIES_4_DONE_FALSE 0x00000000 +#define NV907D_CORE_NOTIFIER_3_CAPABILITIES_4_DONE_TRUE 0x00000001#define NV907D_CORE_NOTIFIER_3_CAPABILITIES_CAP_SOR0_20 0x00000014#define NV907D_CORE_NOTIFIER_3_CAPABILITIES_CAP_SOR0_20_SINGLE_LVDS18 0:0#define NV907D_CORE_NOTIFIER_3_CAPABILITIES_CAP_SOR0_20_SINGLE_LVDS18_FALSE 0x00000000
drivers/gpu/drm/nouveau/nouveau_connector.c +10 -26
@@ -1035,29 +1035,6 @@ get_tmds_link_bandwidth(struct drm_connector *connector)return 112000 * duallink_scale; } -enum drm_mode_status -nouveau_conn_mode_clock_valid (const struct drm_display_mode *mode, -const unsigned min_clock, -const unsigned max_clock, -unsigned int *clock_out) -{ -unsigned int clock = mode->clock; - -if ((mode->flags &DRM_MODE_FLAG_3D_MASK ) == -DRM_MODE_FLAG_3D_FRAME_PACKING ) - clock *=2 ; - -if (clock < min_clock) -return MODE_CLOCK_LOW ; -if (clock > max_clock) -return MODE_CLOCK_HIGH ; - -if (clock_out) - *clock_out = clock; - -return MODE_OK ; -} -static enum drm_mode_status nouveau_connector_mode_valid (struct drm_connector *connector,struct drm_display_mode *mode)
@@ -1065,7 +1042,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector,struct nouveau_connector *nv_connector =nouveau_connector (connector);struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder;struct drm_encoder *encoder =to_drm_encoder (nv_encoder); -unsigned min_clock =25000 , max_clock = min_clock; +unsigned int min_clock =25000 , max_clock = min_clock, clock = mode->clock;switch (nv_encoder->dcb->type) {case DCB_OUTPUT_LVDS :
@@ -1094,8 +1071,15 @@ nouveau_connector_mode_valid(struct drm_connector *connector,return MODE_BAD ; } -return nouveau_conn_mode_clock_valid (mode, min_clock, max_clock, -NULL ); +if ((mode->flags &DRM_MODE_FLAG_3D_MASK ) ==DRM_MODE_FLAG_3D_FRAME_PACKING ) + clock *=2 ; + +if (clock < min_clock) +return MODE_CLOCK_LOW ; +if (clock > max_clock) +return MODE_CLOCK_HIGH ; + +return MODE_OK ; } static struct drm_encoder *
drivers/gpu/drm/nouveau/nouveau_dp.c +14 -7
@@ -114,18 +114,25 @@ nv50_dp_mode_valid(struct drm_connector *connector, unsigned *out_clock) {const unsigned min_clock =25000 ; -unsigned max_clock, clock; -enum drm_mode_status ret; +unsigned int max_rate, mode_rate, clock = mode->clock; +const u8 bpp = connector->display_info.bpc *3 ;if (mode->flags &DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace)return MODE_NO_INTERLACE ; - max_clock = outp->dp.link_nr * outp->dp.link_bw; - clock = mode->clock * (connector->display_info.bpc *3 ) /10 ; +if ((mode->flags &DRM_MODE_FLAG_3D_MASK ) ==DRM_MODE_FLAG_3D_FRAME_PACKING ) + clock *=2 ; + + max_rate = outp->dp.link_nr * outp->dp.link_bw; + mode_rate =DIV_ROUND_UP (clock * bpp,8 ); +if (mode_rate > max_rate) +return MODE_CLOCK_HIGH ; + +if (clock < min_clock) +return MODE_CLOCK_LOW ; - ret =nouveau_conn_mode_clock_valid (mode, min_clock, max_clock, - &clock);if (out_clock) *out_clock = clock; -return ret; + +return MODE_OK ; }
drivers/gpu/drm/nouveau/nouveau_gem.c +2 -1
@@ -198,7 +198,8 @@ nouveau_gem_new(struct nouveau_cli *cli, u64 size, int align, uint32_t domain,* to the caller, instead of a normal nouveau_bo ttm reference. */ ret =drm_gem_object_init (drm->dev, &nvbo->bo.base, size);if (ret) { -nouveau_bo_ref (NULL , &nvbo); +drm_gem_object_release (&nvbo->bo.base); +kfree (nvbo);return ret; }
drivers/gpu/drm/nouveau/nouveau_svm.c +3 -11
@@ -105,11 +105,11 @@ nouveau_svmm_bind(struct drm_device *dev, void *data,struct nouveau_cli *cli =nouveau_cli (file_priv);struct drm_nouveau_svm_bind *args = data;unsigned target, cmd, priority; -unsigned long addr, end, size; +unsigned long addr, end;struct mm_struct *mm; args->va_start &=PAGE_MASK ; - args->va_end &=PAGE_MASK ; + args->va_end =ALIGN (args->va_end,PAGE_SIZE );/* Sanity check arguments */ if (args->reserved0 || args->reserved1)
@@ -118,8 +118,6 @@ nouveau_svmm_bind(struct drm_device *dev, void *data,return -EINVAL ;if (args->va_start >= args->va_end)return -EINVAL ; -if (!args->npages) -return -EINVAL ; cmd = args->header >>NOUVEAU_SVM_BIND_COMMAND_SHIFT ; cmd &=NOUVEAU_SVM_BIND_COMMAND_MASK ;
@@ -151,12 +149,6 @@ nouveau_svmm_bind(struct drm_device *dev, void *data,if (args->stride)return -EINVAL ; - size = ((unsigned long )args->npages) <<PAGE_SHIFT ; -if ((args->va_start + size) <= args->va_start) -return -EINVAL ; -if ((args->va_start + size) > args->va_end) -return -EINVAL ; -/* * Ok we are ask to do something sane, for now we only support migrate * commands but we will add things like memory policy (what to do on
@@ -171,7 +163,7 @@ nouveau_svmm_bind(struct drm_device *dev, void *data,return -EINVAL ; } -for (addr = args->va_start, end = args->va_start + size; addr < end;) { +for (addr = args->va_start, end = args->va_end; addr < end;) {struct vm_area_struct *vma;unsigned long next;
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +26 -13
@@ -2924,17 +2924,34 @@ nvkm_device_del(struct nvkm_device **pdevice) } } +/* returns true if the GPU is in the CPU native byte order */ static inline bool nvkm_device_endianness (struct nvkm_device *device) { -u32 boot1 =nvkm_rd32 (device,0x000004 ) &0x01000001 ;#ifdef __BIG_ENDIAN -if (!boot1) -return false; +const bool big_endian = true;#else -if (boot1) -return false; +const bool big_endian = false;#endif + +/* Read NV_PMC_BOOT_1, and assume non-functional endian switch if it +* doesn't contain the expected values. +*/ +u32 pmc_boot_1 =nvkm_rd32 (device,0x000004 ); +if (pmc_boot_1 && pmc_boot_1 !=0x01000001 ) +return !big_endian;/* Assume GPU is LE in this case. */ + +/* 0 means LE and 0x01000001 means BE GPU. Condition is true when +* GPU/CPU endianness don't match. +*/ +if (big_endian == !pmc_boot_1) { +nvkm_wr32 (device,0x000004 ,0x01000001 ); +nvkm_rd32 (device,0x000000 ); +if (nvkm_rd32 (device,0x000004 ) != (big_endian ?0x01000001 :0x00000000 )) +return !big_endian;/* Assume GPU is LE on any unexpected read-back. */ + } + +/* CPU/GPU endianness should (hopefully) match. */ return true; }
@@ -2987,14 +3004,10 @@ nvkm_device_ctor(const struct nvkm_device_func *func,if (detect) {/* switch mmio to cpu's native endianness */ if (!nvkm_device_endianness (device)) { -nvkm_wr32 (device,0x000004 ,0x01000001 ); -nvkm_rd32 (device,0x000000 ); -if (!nvkm_device_endianness (device)) { -nvdev_error (device, -"GPU not supported on big-endian\n" ); - ret = -ENOSYS ; - goto done; - } +nvdev_error (device, +"Couldn't switch GPU to CPUs endianess\n" ); + ret = -ENOSYS ; + goto done; } boot0 =nvkm_rd32 (device,0x000000 );
drivers/gpu/drm/panfrost/panfrost_gem.c +1 -3
@@ -105,14 +105,12 @@ void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping)kref_put (&mapping->refcount, panfrost_gem_mapping_release); } -void panfrost_gem_teardown_mappings (struct panfrost_gem_object *bo) +void panfrost_gem_teardown_mappings_locked (struct panfrost_gem_object *bo) {struct panfrost_gem_mapping *mapping; -mutex_lock (&bo->mappings.lock);list_for_each_entry (mapping, &bo->mappings.list, node)panfrost_gem_teardown_mapping (mapping); -mutex_unlock (&bo->mappings.lock); }int panfrost_gem_open (struct drm_gem_object *obj,struct drm_file *file_priv)
drivers/gpu/drm/panfrost/panfrost_gem.h +1 -1
@@ -82,7 +82,7 @@ struct panfrost_gem_mapping * panfrost_gem_mapping_get(struct panfrost_gem_object *bo, struct panfrost_file_priv *priv);void panfrost_gem_mapping_put (struct panfrost_gem_mapping *mapping); -void panfrost_gem_teardown_mappings (struct panfrost_gem_object *bo); +void panfrost_gem_teardown_mappings_locked (struct panfrost_gem_object *bo);void panfrost_gem_shrinker_init (struct drm_device *dev);void panfrost_gem_shrinker_cleanup (struct drm_device *dev);
drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +11 -3
@@ -40,18 +40,26 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj) {struct drm_gem_shmem_object *shmem =to_drm_gem_shmem_obj (obj);struct panfrost_gem_object *bo =to_panfrost_bo (obj); +bool ret = false;if (atomic_read (&bo->gpu_usecount))return false; -if (!mutex_trylock (&shmem->pages_lock)) +if (!mutex_trylock (&bo->mappings.lock))return false; -panfrost_gem_teardown_mappings (bo); +if (!mutex_trylock (&shmem->pages_lock)) + goto unlock_mappings; + +panfrost_gem_teardown_mappings_locked (bo);drm_gem_shmem_purge_locked (obj); + ret = true;mutex_unlock (&shmem->pages_lock); -return true; + +unlock_mappings: +mutex_unlock (&bo->mappings.lock); +return ret; } static unsigned long
drivers/gpu/drm/sun4i/sun4i_frontend.c +10 -26
@@ -407,6 +407,7 @@ int sun4i_frontend_update_formats(struct sun4i_frontend *frontend,struct drm_framebuffer *fb = state->fb;const struct drm_format_info *format = fb->format;uint64_t modifier = fb->modifier; +unsigned int ch1_phase_idx;u32 out_fmt_val;u32 in_fmt_val, in_mod_val, in_ps_val;unsigned int i;
@@ -442,18 +443,19 @@ int sun4i_frontend_update_formats(struct sun4i_frontend *frontend,* I have no idea what this does exactly, but it seems to be * related to the scaler FIR filter phase parameters. */ + ch1_phase_idx = (format->num_planes >1 ) ?1 :0 ;regmap_write (frontend->regs,SUN4I_FRONTEND_CH0_HORZPHASE_REG , - frontend->data->ch_phase[0 ].horzphase); + frontend->data->ch_phase[0 ]);regmap_write (frontend->regs,SUN4I_FRONTEND_CH1_HORZPHASE_REG , - frontend->data->ch_phase[1 ].horzphase); + frontend->data->ch_phase[ch1_phase_idx]);regmap_write (frontend->regs,SUN4I_FRONTEND_CH0_VERTPHASE0_REG , - frontend->data->ch_phase[0 ].vertphase[0 ]); + frontend->data->ch_phase[0 ]);regmap_write (frontend->regs,SUN4I_FRONTEND_CH1_VERTPHASE0_REG , - frontend->data->ch_phase[1 ].vertphase[0 ]); + frontend->data->ch_phase[ch1_phase_idx]);regmap_write (frontend->regs,SUN4I_FRONTEND_CH0_VERTPHASE1_REG , - frontend->data->ch_phase[0 ].vertphase[1 ]); + frontend->data->ch_phase[0 ]);regmap_write (frontend->regs,SUN4I_FRONTEND_CH1_VERTPHASE1_REG , - frontend->data->ch_phase[1 ].vertphase[1 ]); + frontend->data->ch_phase[ch1_phase_idx]);/* * Checking the input format is sufficient since we currently only
@@ -687,30 +689,12 @@ static const struct dev_pm_ops sun4i_frontend_pm_ops = { };static const struct sun4i_frontend_data sun4i_a10_frontend = { - .ch_phase = { - { - .horzphase =0 , - .vertphase = {0 ,0 }, - }, - { - .horzphase =0xfc000 , - .vertphase = {0xfc000 ,0xfc000 }, - }, - }, + .ch_phase = {0x000 ,0xfc000 }, .has_coef_rdy = true, };static const struct sun4i_frontend_data sun8i_a33_frontend = { - .ch_phase = { - { - .horzphase =0x400 , - .vertphase = {0x400 ,0x400 }, - }, - { - .horzphase =0x400 , - .vertphase = {0x400 ,0x400 }, - }, - }, + .ch_phase = {0x400 ,0xfc400 }, .has_coef_access_ctrl = true, };
drivers/gpu/drm/sun4i/sun4i_frontend.h +1 -5
@@ -115,11 +115,7 @@ struct reset_control;struct sun4i_frontend_data {bool has_coef_access_ctrl;bool has_coef_rdy; - -struct { -u32 horzphase; -u32 vertphase[2 ]; - } ch_phase[2 ]; +u32 ch_phase[2 ]; };struct sun4i_frontend {
drivers/gpu/drm/v3d/v3d_gem.c +0 -1
@@ -568,7 +568,6 @@ v3d_submit_cl_ioctl(struct drm_device *dev, void *data, ret =v3d_job_init (v3d, file_priv, &bin->base, v3d_job_free, args->in_sync_bcl);if (ret) { -kfree (bin);v3d_job_put (&render->base);kfree (bin);return ret;
drivers/gpu/drm/vc4/vc4_drv.c +1 -0
@@ -310,6 +310,7 @@ static int vc4_drm_bind(struct device *dev)component_unbind_all (dev, drm); gem_destroy:vc4_gem_destroy (drm); +drm_mode_config_cleanup (drm);vc4_bo_cache_destroy (drm); dev_put:drm_dev_put (drm);
drivers/iommu/intel/iommu.c +3 -0
@@ -2490,6 +2490,9 @@ struct dmar_domain *find_domain(struct device *dev) {struct device_domain_info *info; +if (unlikely (!dev || !dev->iommu)) +return NULL ; +if (unlikely (attach_deferred (dev)))return NULL ;
drivers/mtd/spi-nor/core.c +2 -3
@@ -2701,11 +2701,10 @@ static void spi_nor_sfdp_init_params(struct spi_nor *nor)memcpy (&sfdp_params, nor->params,sizeof (sfdp_params)); -if (spi_nor_parse_sfdp (nor, &sfdp_params)) { +if (spi_nor_parse_sfdp (nor, nor->params)) { +memcpy (nor->params, &sfdp_params,sizeof (*nor->params)); nor->addr_width =0 ; nor->flags &= ~SNOR_F_4B_OPCODES ; - }else { -memcpy (nor->params, &sfdp_params,sizeof (*nor->params)); } }
drivers/net/dsa/qca8k.c +2 -2
@@ -1219,8 +1219,8 @@ qca8k_port_change_mtu(struct dsa_switch *ds, int port, int new_mtu) priv->port_mtu[port] = new_mtu;for (i =0 ; i <QCA8K_NUM_PORTS ; i++) -if (priv->port_mtu[port] > mtu) - mtu = priv->port_mtu[port]; +if (priv->port_mtu[i] > mtu) + mtu = priv->port_mtu[i];/* Include L2 header / FCS length */ qca8k_write (priv,QCA8K_MAX_FRAME_SIZE , mtu +ETH_HLEN +ETH_FCS_LEN );
drivers/net/ethernet/cadence/macb_main.c +2 -1
@@ -1930,7 +1930,8 @@ static inline int macb_clear_csum(struct sk_buff *skb)static int macb_pad_and_fcs (struct sk_buff **skb,struct net_device *ndev) { -bool cloned =skb_cloned (*skb) ||skb_header_cloned (*skb); +bool cloned =skb_cloned (*skb) ||skb_header_cloned (*skb) || +skb_is_nonlinear (*skb);int padlen =ETH_ZLEN - (*skb)->len;int headroom =skb_headroom (*skb);int tailroom =skb_tailroom (*skb);
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +18 -10
@@ -174,12 +174,17 @@ MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms");#define DPAA_PARSE_RESULTS_SIZE sizeof(struct fman_prs_result)#define DPAA_TIME_STAMP_SIZE 8#define DPAA_HASH_RESULTS_SIZE 8 +#define DPAA_HWA_SIZE (DPAA_PARSE_RESULTS_SIZE + DPAA_TIME_STAMP_SIZE \ + + DPAA_HASH_RESULTS_SIZE) +#define DPAA_RX_PRIV_DATA_DEFAULT_SIZE (DPAA_TX_PRIV_DATA_SIZE + \ + dpaa_rx_extra_headroom)#ifdef CONFIG_DPAA_ERRATUM_A050385 -#define DPAA_RX_PRIV_DATA_SIZE (DPAA_A050385_ALIGN - (DPAA_PARSE_RESULTS_SIZE\ - + DPAA_TIME_STAMP_SIZE + DPAA_HASH_RESULTS_SIZE)) +#define DPAA_RX_PRIV_DATA_A050385_SIZE (DPAA_A050385_ALIGN - DPAA_HWA_SIZE) +#define DPAA_RX_PRIV_DATA_SIZE (fman_has_errata_a050385() ? \ + DPAA_RX_PRIV_DATA_A050385_SIZE : \ + DPAA_RX_PRIV_DATA_DEFAULT_SIZE)#else -#define DPAA_RX_PRIV_DATA_SIZE (u16)(DPAA_TX_PRIV_DATA_SIZE + \ - dpaa_rx_extra_headroom) +#define DPAA_RX_PRIV_DATA_SIZE DPAA_RX_PRIV_DATA_DEFAULT_SIZE#endif #define DPAA_ETH_PCD_RXQ_NUM 128
@@ -2840,7 +2845,8 @@ static int dpaa_ingress_cgr_init(struct dpaa_priv *priv)return err; } -static inline u16 dpaa_get_headroom (struct dpaa_buffer_layout *bl) +static u16 dpaa_get_headroom (struct dpaa_buffer_layout *bl, +enum port_type port) {u16 headroom;
@@ -2854,10 +2860,12 @@ static inline u16 dpaa_get_headroom(struct dpaa_buffer_layout *bl)* * Also make sure the headroom is a multiple of data_align bytes */ - headroom = (u16)(bl->priv_data_size +DPAA_PARSE_RESULTS_SIZE + -DPAA_TIME_STAMP_SIZE +DPAA_HASH_RESULTS_SIZE ); + headroom = (u16)(bl[port].priv_data_size +DPAA_HWA_SIZE ); -return ALIGN (headroom,DPAA_FD_DATA_ALIGNMENT ); +if (port ==RX ) +return ALIGN (headroom,DPAA_FD_RX_DATA_ALIGNMENT ); +else +return ALIGN (headroom,DPAA_FD_DATA_ALIGNMENT ); }static int dpaa_eth_probe (struct platform_device *pdev)
@@ -3025,8 +3033,8 @@ static int dpaa_eth_probe(struct platform_device *pdev) goto free_dpaa_fqs; } - priv->tx_headroom =dpaa_get_headroom (&priv->buf_layout[TX ]); - priv->rx_headroom =dpaa_get_headroom (&priv->buf_layout[RX ]); + priv->tx_headroom =dpaa_get_headroom (priv->buf_layout,TX ); + priv->rx_headroom =dpaa_get_headroom (priv->buf_layout,RX );/* All real interfaces need their ports initialized */ err = dpaa_eth_init_ports(mac_dev, dpaa_bp, &port_fqs,
drivers/net/ethernet/freescale/fec.h +6 -0
@@ -456,6 +456,12 @@ struct bufdesc_ex {*/ #define FEC_QUIRK_HAS_FRREG (1 << 16) +/* Some FEC hardware blocks need the MMFR cleared at setup time to avoid +* the generation of an MII event. This must be avoided in the older +* FEC blocks where it will stop MII events being generated. +*/ +#define FEC_QUIRK_CLEAR_SETUP_MII (1 << 17) +struct bufdesc_prop {int qid;/* Address of Rx and Tx buffers */
drivers/net/ethernet/freescale/fec_main.c +16 -13
@@ -100,14 +100,14 @@ static const struct fec_devinfo fec_imx27_info = {static const struct fec_devinfo fec_imx28_info = { .quirks =FEC_QUIRK_ENET_MAC |FEC_QUIRK_SWAP_FRAME |FEC_QUIRK_SINGLE_MDIO |FEC_QUIRK_HAS_RACC | -FEC_QUIRK_HAS_FRREG , +FEC_QUIRK_HAS_FRREG |FEC_QUIRK_CLEAR_SETUP_MII , };static const struct fec_devinfo fec_imx6q_info = { .quirks =FEC_QUIRK_ENET_MAC |FEC_QUIRK_HAS_GBIT |FEC_QUIRK_HAS_BUFDESC_EX |FEC_QUIRK_HAS_CSUM |FEC_QUIRK_HAS_VLAN |FEC_QUIRK_ERR006358 | -FEC_QUIRK_HAS_RACC , +FEC_QUIRK_HAS_RACC |FEC_QUIRK_CLEAR_SETUP_MII , };static const struct fec_devinfo fec_mvf600_info = {
@@ -119,7 +119,8 @@ static const struct fec_devinfo fec_imx6x_info = {FEC_QUIRK_HAS_BUFDESC_EX |FEC_QUIRK_HAS_CSUM |FEC_QUIRK_HAS_VLAN |FEC_QUIRK_HAS_AVB |FEC_QUIRK_ERR007885 |FEC_QUIRK_BUG_CAPTURE | - FEC_QUIRK_HAS_RACC | FEC_QUIRK_HAS_COALESCE, +FEC_QUIRK_HAS_RACC |FEC_QUIRK_HAS_COALESCE | + FEC_QUIRK_CLEAR_SETUP_MII, }; static const struct fec_devinfo fec_imx6ul_info = {
@@ -127,7 +128,7 @@ static const struct fec_devinfo fec_imx6ul_info = {FEC_QUIRK_HAS_BUFDESC_EX |FEC_QUIRK_HAS_CSUM |FEC_QUIRK_HAS_VLAN |FEC_QUIRK_ERR007885 |FEC_QUIRK_BUG_CAPTURE |FEC_QUIRK_HAS_RACC | - FEC_QUIRK_HAS_COALESCE, + FEC_QUIRK_HAS_COALESCE | FEC_QUIRK_CLEAR_SETUP_MII, }; static struct platform_device_id fec_devtype[] = {
@@ -2135,15 +2136,17 @@ static int fec_enet_mii_init(struct platform_device *pdev)if (suppress_preamble) fep->phy_speed |=BIT (7 ); -/* Clear MMFR to avoid to generate MII event by writing MSCR. -* MII event generation condition: -* - writing MSCR: -* - mmfr[31:0]_not_zero & mscr[7:0]_is_zero & -* mscr_reg_data_in[7:0] != 0 -* - writing MMFR: -* - mscr[7:0]_not_zero -*/ -writel (0 , fep->hwp +FEC_MII_DATA ); +if (fep->quirks &FEC_QUIRK_CLEAR_SETUP_MII ) { +/* Clear MMFR to avoid to generate MII event by writing MSCR. +* MII event generation condition: +* - writing MSCR: +* - mmfr[31:0]_not_zero & mscr[7:0]_is_zero & +* mscr_reg_data_in[7:0] != 0 +* - writing MMFR: +* - mscr[7:0]_not_zero +*/ +writel (0 , fep->hwp +FEC_MII_DATA ); + }writel (fep->phy_speed, fep->hwp +FEC_MII_SPEED );
drivers/net/ethernet/freescale/gianfar.c +3 -11
@@ -1829,20 +1829,12 @@ static netdev_tx_t gfar_start_xmit(struct sk_buff *skb, struct net_device *dev) fcb_len =GMAC_FCB_LEN +GMAC_TXPAL_LEN ;/* make space for additional header when fcb is needed */ -if (fcb_len &&unlikely (skb_headroom (skb) < fcb_len)) { -struct sk_buff *skb_new; - - skb_new =skb_realloc_headroom (skb, fcb_len); -if (!skb_new) { +if (fcb_len) { +if (unlikely (skb_cow_head (skb, fcb_len))) { dev->stats.tx_errors++;dev_kfree_skb_any (skb);return NETDEV_TX_OK ; } - -if (skb->sk) -skb_set_owner_w (skb_new, skb->sk); -dev_consume_skb_any (skb); - skb = skb_new; }/* total number of fragments in the SKB */
@@ -3380,7 +3372,7 @@ static int gfar_probe(struct platform_device *ofdev)if (dev->features &NETIF_F_IP_CSUM || priv->device_flags &FSL_GIANFAR_DEV_HAS_TIMER ) - dev->needed_headroom =GMAC_FCB_LEN ; + dev->needed_headroom =GMAC_FCB_LEN +GMAC_TXPAL_LEN ;/* Initializing some of the rx/tx queue level parameters */ for (i =0 ; i < priv->num_tx_queues; i++) {
drivers/net/ethernet/ibm/ibmvnic.c +32 -4
@@ -1197,18 +1197,27 @@ static int ibmvnic_open(struct net_device *netdev)if (adapter->state !=VNIC_CLOSED ) { rc =ibmvnic_login (netdev);if (rc) -return rc; + goto out; rc =init_resources (adapter);if (rc) {netdev_err (netdev,"failed to initialize resources\n" );release_resources (adapter); -return rc; + goto out; } } rc =__ibmvnic_open (netdev); +out: +/* +* If open fails due to a pending failover, set device state and +* return. Device operation will be handled by reset routine. +*/ +if (rc && adapter->failover_pending) { + adapter->state =VNIC_OPEN ; + rc =0 ; + }return rc; }
@@ -1935,6 +1944,13 @@ static int do_reset(struct ibmvnic_adapter *adapter, rwi->reset_reason);rtnl_lock (); +/* +* Now that we have the rtnl lock, clear any pending failover. +* This will ensure ibmvnic_open() has either completed or will +* block until failover is complete. +*/ +if (rwi->reset_reason ==VNIC_RESET_FAILOVER ) + adapter->failover_pending = false;netif_carrier_off (netdev); adapter->reset_reason = rwi->reset_reason;
@@ -2215,6 +2231,13 @@ static void __ibmvnic_reset(struct work_struct *work)/* CHANGE_PARAM requestor holds rtnl_lock */ rc =do_change_param_reset (adapter, rwi, reset_state); }else if (adapter->force_reset_recovery) { +/* +* Since we are doing a hard reset now, clear the +* failover_pending flag so we don't ignore any +* future MOBILITY or other resets. +*/ + adapter->failover_pending = false; +/* Transport event occurred during previous reset */ if (adapter->wait_for_reset) {/* Previous was CHANGE_PARAM; caller locked */
@@ -2279,9 +2302,15 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,unsigned long flags;int ret; +/* +* If failover is pending don't schedule any other reset. +* Instead let the failover complete. If there is already a +* a failover reset scheduled, we will detect and drop the +* duplicate reset when walking the ->rwi_list below. +*/ if (adapter->state ==VNIC_REMOVING || adapter->state ==VNIC_REMOVED || - adapter->failover_pending) { + (adapter->failover_pending && reason !=VNIC_RESET_FAILOVER )) { ret =EBUSY ;netdev_dbg (netdev,"Adapter removing or pending failover, skipping reset\n" ); goto err;
@@ -4665,7 +4694,6 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,case IBMVNIC_CRQ_INIT :dev_info (dev,"Partner initialized\n" ); adapter->from_passive_init = true; - adapter->failover_pending = false;if (!completion_done (&adapter->init_done)) {complete (&adapter->init_done); adapter->init_done_rc = -EIO ;
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c +5 -0
@@ -126,6 +126,11 @@ static int ionic_get_link_ksettings(struct net_device *netdev,ethtool_link_ksettings_zero_link_mode (ks, supported); +if (!idev->port_info) { +netdev_err (netdev,"port_info not initialized\n" ); +return -EOPNOTSUPP ; + } +/* The port_info data is found in a DMA space that the NIC keeps * up-to-date, so there's no need to request the data from the * NIC, we already have it in our memory space.
drivers/net/ethernet/realtek/r8169_main.c +11 -3
@@ -4062,9 +4062,17 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,return -EIO ; } -static bool rtl_test_hw_pad_bug (struct rtl8169_private *tp,struct sk_buff *skb) +static bool rtl_test_hw_pad_bug (struct rtl8169_private *tp) { -return skb->len <ETH_ZLEN && tp->mac_version ==RTL_GIGA_MAC_VER_34 ; +switch (tp->mac_version) { +case RTL_GIGA_MAC_VER_34 : +case RTL_GIGA_MAC_VER_60 : +case RTL_GIGA_MAC_VER_61 : +case RTL_GIGA_MAC_VER_63 : +return true; +default : +return false; + } }static void rtl8169_tso_csum_v1 (struct sk_buff *skb,u32 *opts)
@@ -4136,7 +4144,7 @@ static bool rtl8169_tso_csum_v2(struct rtl8169_private *tp, opts[1 ] |= transport_offset <<TCPHO_SHIFT ; }else { -if (unlikely (rtl_test_hw_pad_bug (tp, skb))) +if (unlikely (skb->len <ETH_ZLEN &&rtl_test_hw_pad_bug (tp)))return !eth_skb_pad (skb); }
drivers/net/ethernet/ti/cpsw_ethtool.c +0 -1
@@ -727,7 +727,6 @@ int cpsw_get_ts_info(struct net_device *ndev, struct ethtool_ts_info *info) (1 <<HWTSTAMP_TX_ON ); info->rx_filters = (1 <<HWTSTAMP_FILTER_NONE ) | - (1 <<HWTSTAMP_FILTER_PTP_V1_L4_EVENT ) | (1 <<HWTSTAMP_FILTER_PTP_V2_EVENT );return 0 ; }
drivers/net/ethernet/ti/cpsw_priv.c +1 -4
@@ -639,13 +639,10 @@ static int cpsw_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)break ;case HWTSTAMP_FILTER_ALL :case HWTSTAMP_FILTER_NTP_ALL : -return -ERANGE ;case HWTSTAMP_FILTER_PTP_V1_L4_EVENT :case HWTSTAMP_FILTER_PTP_V1_L4_SYNC :case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ : - priv->rx_ts_enabled =HWTSTAMP_FILTER_PTP_V1_L4_EVENT ; - cfg.rx_filter =HWTSTAMP_FILTER_PTP_V1_L4_EVENT ; -break ; +return -ERANGE ;case HWTSTAMP_FILTER_PTP_V2_L4_EVENT :case HWTSTAMP_FILTER_PTP_V2_L4_SYNC :case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ :
drivers/net/phy/sfp.c +2 -1
@@ -2389,7 +2389,8 @@ static int sfp_probe(struct platform_device *pdev)continue ; sfp->gpio_irq[i] =gpiod_to_irq (sfp->gpio[i]); -if (!sfp->gpio_irq[i]) { +if (sfp->gpio_irq[i] <0 ) { + sfp->gpio_irq[i] =0 ; sfp->need_poll = true;continue ; }
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1331,6 +1331,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */ {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1201, 2)}, /* Telit LE920, LE920A4 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1230, 2)}, /* Telit LE910Cx */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1260, 2)}, /* Telit LE910Cx */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1261, 2)}, /* Telit LE910Cx */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1900, 1)}, /* Telit LN940 series */
drivers/nvme/host/rdma.c +8 -0
@@ -1767,6 +1767,14 @@ static void nvme_rdma_recv_done(struct ib_cq *cq, struct ib_wc *wc)return ; } +/* sanity checking for received data length */ +if (unlikely (wc->byte_len < len)) { +dev_err (queue->ctrl->ctrl.device, +"Unexpected nvme completion length(%d)\n" , wc->byte_len); +nvme_rdma_error_recovery (queue->ctrl); +return ; + } +ib_dma_sync_single_for_cpu (ibdev, qe->dma, len,DMA_FROM_DEVICE );/* * AEN requests are special as they don't time out and can
drivers/nvme/target/core.c +2 -2
@@ -907,8 +907,6 @@ bool nvmet_req_init(struct nvmet_req *req, struct nvmet_cq *cq, req->error_loc =NVMET_NO_ERROR_LOC ; req->error_slba =0 ; -trace_nvmet_req_init (req, req->cmd); -/* no support for fused commands yet */ if (unlikely (flags & (NVME_CMD_FUSE_FIRST |NVME_CMD_FUSE_SECOND ))) { req->error_loc = offsetof(struct nvme_common_command , flags);
@@ -938,6 +936,8 @@ bool nvmet_req_init(struct nvmet_req *req, struct nvmet_cq *cq,if (status) goto fail; +trace_nvmet_req_init (req, req->cmd); +if (unlikely (!percpu_ref_tryget_live (&sq->ref))) { status =NVME_SC_INVALID_FIELD |NVME_SC_DNR ; goto fail;
drivers/nvme/target/trace.h +7 -14
@@ -46,19 +46,12 @@ static inline struct nvmet_ctrl *nvmet_req_to_ctrl(struct nvmet_req *req) return req->sq->ctrl; } -static inline void __assign_disk_name (char *name,struct nvmet_req *req, -bool init) +static inline void __assign_req_name (char *name,struct nvmet_req *req) { -struct nvmet_ctrl *ctrl =nvmet_req_to_ctrl (req); -struct nvmet_ns *ns; - -if ((init && req->sq->qid) || (!init && req->cq->qid)) { - ns =nvmet_find_namespace (ctrl, req->cmd->rw.nsid); -strncpy (name, ns->device_path,DISK_NAME_LEN ); -return ; - } - -memset (name,0 ,DISK_NAME_LEN ); +if (req->ns) +strncpy (name, req->ns->device_path,DISK_NAME_LEN ); +else +memset (name,0 ,DISK_NAME_LEN ); }#endif
@@ -81,7 +74,7 @@ TRACE_EVENT(nvmet_req_init,TP_fast_assign ( __entry->cmd = cmd; __entry->ctrl =nvmet_req_to_ctrl (req); -__assign_disk_name (__entry->disk, req, true); +__assign_req_name (__entry->disk, req); __entry->qid = req->sq->qid; __entry->cid = cmd->common.command_id; __entry->opcode = cmd->common.opcode;
@@ -121,7 +114,7 @@ TRACE_EVENT(nvmet_req_complete, __entry->cid = req->cqe->command_id; __entry->result =le64_to_cpu (req->cqe->result.u64); __entry->status =le16_to_cpu (req->cqe->status) >>1 ; -__assign_disk_name (__entry->disk, req, false); +__assign_req_name (__entry->disk, req); ), TP_printk("nvmet%s: %sqid=%d, cmdid=%u, res=%#llx, status=%#x", __print_ctrl_name(__entry->ctrl),
drivers/of/of_reserved_mem.c +11 -2
@@ -200,6 +200,16 @@ static int __init __rmem_cmp(const void *a, const void *b)if (ra->base > rb->base)return 1 ; +/* +* Put the dynamic allocations (address == 0, size == 0) before static +* allocations at address 0x0 so that overlap detection works +* correctly. +*/ +if (ra->size < rb->size) +return -1 ; +if (ra->size > rb->size) +return 1 ; +return 0 ; }
@@ -217,8 +227,7 @@ static void __init __rmem_check_for_overlap(void) this = &reserved_mem[i]; next = &reserved_mem[i +1 ]; -if (!(this->base && next->base)) -continue ; +if (this->base + this->size > next->base) {phys_addr_t this_end, next_end;
drivers/regulator/core.c +2 -0
@@ -4128,6 +4128,8 @@ int regulator_get_voltage_rdev(struct regulator_dev *rdev) ret = rdev->desc->fixed_uV; }else if (rdev->supply) { ret =regulator_get_voltage_rdev (rdev->supply->rdev); + }else if (rdev->supply_name) { +return -EPROBE_DEFER ; }else {return -EINVAL ; }
drivers/s390/crypto/pkey_api.c +16 -14
@@ -34,9 +34,6 @@ MODULE_DESCRIPTION("s390 protected key interface");#define KEYBLOBBUFSIZE 8192/* key buffer size used for internal processing */ #define MAXAPQNSINLIST 64/* max 64 apqns within a apqn list */ -/* mask of available pckmo subfunctions, fetched once at module init */ -static cpacf_mask_t pckmo_functions; -/* * debug feature data and functions */
@@ -90,6 +87,9 @@ static int pkey_clr2protkey(u32 keytype,const struct pkey_clrkey *clrkey, struct pkey_protkey *protkey) { + /* mask of available pckmo subfunctions */ + static cpacf_mask_t pckmo_functions; +long fc;int keysize;u8 paramblock[64 ];
@@ -113,11 +113,13 @@ static int pkey_clr2protkey(u32 keytype,return -EINVAL ; } -/* -* Check if the needed pckmo subfunction is available. -* These subfunctions can be enabled/disabled by customers -* in the LPAR profile or may even change on the fly. -*/ +/* Did we already check for PCKMO ? */ +if (!pckmo_functions.bytes[0 ]) { +/* no, so check now */ +if (!cpacf_query (CPACF_PCKMO , &pckmo_functions)) +return -ENODEV ; + } +/* check for the pckmo subfunction we need now */ if (!cpacf_test_func (&pckmo_functions, fc)) {DEBUG_ERR ("%s pckmo functions not available\n" , __func__);return -ENODEV ;
@@ -1838,7 +1840,7 @@ static struct miscdevice pkey_dev = {*/ static int __init pkey_init (void ) { -cpacf_mask_t kmc_functions; +cpacf_mask_t func_mask;/* * The pckmo instruction should be available - even if we don't
@@ -1846,15 +1848,15 @@ static int __init pkey_init(void)* is also the minimum level for the kmc instructions which * are able to work with protected keys. */ -if (!cpacf_query (CPACF_PCKMO , &pckmo_functions)) +if (!cpacf_query (CPACF_PCKMO , &func_mask))return -ENODEV ;/* check for kmc instructions available */ -if (!cpacf_query (CPACF_KMC , &kmc_functions)) +if (!cpacf_query (CPACF_KMC , &func_mask))return -ENODEV ; -if (!cpacf_test_func (&kmc_functions,CPACF_KMC_PAES_128 ) || - !cpacf_test_func (&kmc_functions,CPACF_KMC_PAES_192 ) || - !cpacf_test_func (&kmc_functions,CPACF_KMC_PAES_256 )) +if (!cpacf_test_func (&func_mask,CPACF_KMC_PAES_128 ) || + !cpacf_test_func (&func_mask,CPACF_KMC_PAES_192 ) || + !cpacf_test_func (&func_mask,CPACF_KMC_PAES_256 ))return -ENODEV ;pkey_debug_init ();
drivers/scsi/ibmvscsi/ibmvscsi.c +26 -10
@@ -806,6 +806,22 @@ static void purge_requests(struct ibmvscsi_host_data *hostdata, int error_code)spin_unlock_irqrestore (hostdata->host->host_lock, flags); } +/** +* ibmvscsi_set_request_limit - Set the adapter request_limit in response to +* an adapter failure, reset, or SRP Login. Done under host lock to prevent +* race with SCSI command submission. +* @hostdata: adapter to adjust +* @limit: new request limit +*/ +static void ibmvscsi_set_request_limit (struct ibmvscsi_host_data *hostdata,int limit) +{ +unsigned long flags; + +spin_lock_irqsave (hostdata->host->host_lock, flags); +atomic_set (&hostdata->request_limit, limit); +spin_unlock_irqrestore (hostdata->host->host_lock, flags); +} +/** * ibmvscsi_reset_host - Reset the connection to the server * @hostdata: struct ibmvscsi_host_data to reset
@@ -813,7 +829,7 @@ static void purge_requests(struct ibmvscsi_host_data *hostdata, int error_code)static void ibmvscsi_reset_host (struct ibmvscsi_host_data *hostdata) {scsi_block_requests (hostdata->host); -atomic_set (&hostdata->request_limit,0 ); +ibmvscsi_set_request_limit (hostdata,0 );purge_requests (hostdata,DID_ERROR ); hostdata->action =IBMVSCSI_HOST_ACTION_RESET ;
@@ -1146,13 +1162,13 @@ static void login_rsp(struct srp_event_struct *evt_struct)dev_info (hostdata->dev,"SRP_LOGIN_REJ reason %u\n" , evt_struct->xfer_iu->srp.login_rej.reason);/* Login failed. */ -atomic_set (&hostdata->request_limit,-1 ); +ibmvscsi_set_request_limit (hostdata,-1 );return ;default :dev_err (hostdata->dev,"Invalid login response typecode 0x%02x!\n" , evt_struct->xfer_iu->srp.login_rsp.opcode);/* Login failed. */ -atomic_set (&hostdata->request_limit,-1 ); +ibmvscsi_set_request_limit (hostdata,-1 );return ; }
@@ -1163,7 +1179,7 @@ static void login_rsp(struct srp_event_struct *evt_struct)* This value is set rather than added to request_limit because * request_limit could have been set to -1 by this client. */ -atomic_set (&hostdata->request_limit, +ibmvscsi_set_request_limit (hostdata,be32_to_cpu (evt_struct->xfer_iu->srp.login_rsp.req_lim_delta));/* If we had any pending I/Os, kick them */
@@ -1195,13 +1211,13 @@ static int send_srp_login(struct ibmvscsi_host_data *hostdata) login->req_buf_fmt =cpu_to_be16 (SRP_BUF_FORMAT_DIRECT |SRP_BUF_FORMAT_INDIRECT ); -spin_lock_irqsave (hostdata->host->host_lock, flags);/* Start out with a request limit of 0, since this is negotiated in * the login request we are just sending and login requests always * get sent by the driver regardless of request_limit. */ -atomic_set (&hostdata->request_limit,0 ); +ibmvscsi_set_request_limit (hostdata,0 ); +spin_lock_irqsave (hostdata->host->host_lock, flags); rc =ibmvscsi_send_srp_event (evt_struct, hostdata, login_timeout *2 );spin_unlock_irqrestore (hostdata->host->host_lock, flags);dev_info (hostdata->dev,"sent SRP login\n" );
@@ -1781,7 +1797,7 @@ static void ibmvscsi_handle_crq(struct viosrp_crq *crq,return ;case VIOSRP_CRQ_XPORT_EVENT :/* Hypervisor telling us the connection is closed */ scsi_block_requests (hostdata->host); -atomic_set (&hostdata->request_limit,0 ); +ibmvscsi_set_request_limit (hostdata,0 );if (crq->format ==0x06 ) {/* We need to re-setup the interpartition connection */ dev_info (hostdata->dev,"Re-enabling adapter!\n" );
@@ -2137,12 +2153,12 @@ static void ibmvscsi_do_work(struct ibmvscsi_host_data *hostdata) } hostdata->action =IBMVSCSI_HOST_ACTION_NONE ; +spin_unlock_irqrestore (hostdata->host->host_lock, flags);if (rc) { -atomic_set (&hostdata->request_limit,-1 ); +ibmvscsi_set_request_limit (hostdata,-1 );dev_err (hostdata->dev,"error after %s\n" , action); } -spin_unlock_irqrestore (hostdata->host->host_lock, flags);scsi_unblock_requests (hostdata->host); }
@@ -2226,7 +2242,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)init_waitqueue_head (&hostdata->work_wait_q); hostdata->host = host; hostdata->dev = dev; -atomic_set (&hostdata->request_limit,-1 ); +ibmvscsi_set_request_limit (hostdata,-1 ); hostdata->host->max_sectors =IBMVSCSI_MAX_SECTORS_DEFAULT ;if (map_persist_bufs (hostdata)) {
drivers/scsi/scsi_scan.c +4 -3
@@ -1714,15 +1714,16 @@ static void scsi_sysfs_add_devices(struct Scsi_Host *shost)*/ static struct async_scan_data *scsi_prep_async_scan (struct Scsi_Host *shost) { -struct async_scan_data *data; +struct async_scan_data *data =NULL ;unsigned long flags;if (strncmp (scsi_scan_type,"sync" ,4 ) ==0 )return NULL ; +mutex_lock (&shost->scan_mutex);if (shost->async_scan) {shost_printk (KERN_DEBUG , shost,"%s called twice\n" , __func__); -return NULL ; + goto err; } data =kmalloc (sizeof (*data),GFP_KERNEL );
@@ -1733,7 +1734,6 @@ static struct async_scan_data *scsi_prep_async_scan(struct Scsi_Host *shost) goto err;init_completion (&data->prev_finished); -mutex_lock (&shost->scan_mutex);spin_lock_irqsave (shost->host_lock, flags); shost->async_scan =1 ;spin_unlock_irqrestore (shost->host_lock, flags);
@@ -1748,6 +1748,7 @@ static struct async_scan_data *scsi_prep_async_scan(struct Scsi_Host *shost)return data; err: +mutex_unlock (&shost->scan_mutex);kfree (data);return NULL ; }
drivers/spi/spi-bcm2835.c +0 -12
@@ -1259,18 +1259,6 @@ static int bcm2835_spi_setup(struct spi_device *spi)if (!chip)return 0 ; -/* -* Retrieve the corresponding GPIO line used for CS. -* The inversion semantics will be handled by the GPIO core -* code, so we pass GPIOD_OUT_LOW for "unasserted" and -* the correct flag for inversion semantics. The SPI_CS_HIGH -* on spi->mode cannot be checked for polarity in this case -* as the flag use_gpio_descriptors enforces SPI_CS_HIGH. -*/ -if (of_property_read_bool (spi->dev.of_node,"spi-cs-high" )) - lflags =GPIO_ACTIVE_HIGH ; -else - lflags =GPIO_ACTIVE_LOW ; spi->cs_gpiod = gpiochip_request_own_desc(chip, 8 - spi->chip_select, DRV_NAME, lflags,
drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c +15 -4
@@ -179,6 +179,9 @@ struct vchiq_mmal_instance {/* ordered workqueue to process all bulk operations */ struct workqueue_struct *bulk_wq; + +/* handle for a vchiq instance */ +struct vchiq_instance *vchiq_instance; }; static struct mmal_msg_context *
@@ -1840,6 +1843,7 @@ int vchiq_mmal_finalise(struct vchiq_mmal_instance *instance)mutex_unlock (&instance->vchiq_mutex); +vchiq_shutdown (instance->vchiq_instance);flush_workqueue (instance->bulk_wq);destroy_workqueue (instance->bulk_wq);
@@ -1856,6 +1860,7 @@ EXPORT_SYMBOL_GPL(vchiq_mmal_finalise);int vchiq_mmal_init (struct vchiq_mmal_instance **out_instance) {int status; +int err = -ENODEV ;struct vchiq_mmal_instance *instance;static struct vchiq_instance *vchiq_instance;struct vchiq_service_params params = {
@@ -1890,17 +1895,21 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance) status =vchiq_connect (vchiq_instance);if (status) {pr_err ("Failed to connect VCHI instance (status=%d)\n" , status); -return -EIO ; + err = -EIO ; + goto err_shutdown_vchiq; } instance =kzalloc (sizeof (*instance),GFP_KERNEL ); -if (!instance) -return -ENOMEM ; +if (!instance) { + err = -ENOMEM ; + goto err_shutdown_vchiq; + }mutex_init (&instance->vchiq_mutex); instance->bulk_scratch =vmalloc (PAGE_SIZE ); + instance->vchiq_instance = vchiq_instance;mutex_init (&instance->context_map_lock);idr_init_base (&instance->context_map,1 );
@@ -1932,7 +1941,9 @@ int vchiq_mmal_init(struct vchiq_mmal_instance **out_instance) err_free:vfree (instance->bulk_scratch);kfree (instance); -return -ENODEV ; +err_shutdown_vchiq: +vchiq_shutdown (vchiq_instance); +return err; }EXPORT_SYMBOL_GPL (vchiq_mmal_init);
drivers/tty/serial/8250/8250_mtk.c +1 -1
@@ -317,7 +317,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios,*/ baud =tty_termios_baud_rate (termios); -serial8250_do_set_termios (port, termios, old); +serial8250_do_set_termios (port, termios,NULL );tty_termios_encode_baud_rate (termios, baud, baud);
drivers/tty/serial/Kconfig +1 -0
@@ -522,6 +522,7 @@ config SERIAL_IMX_EARLYCON depends on OF select SERIAL_EARLYCON select SERIAL_CORE_CONSOLE + default y if SERIAL_IMX_CONSOLE help If you have enabled the earlycon on the Freescale IMX CPU you can make it the earlycon by answering Y to this option.
drivers/tty/serial/serial_txx9.c +3 -0
@@ -1280,6 +1280,9 @@ static int __init serial_txx9_init(void)#ifdef ENABLE_SERIAL_TXX9_PCI ret =pci_register_driver (&serial_txx9_pci_driver); +if (ret) { +platform_driver_unregister (&serial_txx9_plat_driver); + }#endif if (ret ==0 ) goto out;
drivers/tty/tty_io.c +4 -2
@@ -1514,10 +1514,12 @@ static void release_tty(struct tty_struct *tty, int idx) tty->ops->shutdown (tty);tty_save_termios (tty);tty_driver_remove_tty (tty->driver, tty); - tty->port->itty =NULL ; +if (tty->port) + tty->port->itty =NULL ;if (tty->link) tty->link->port->itty =NULL ; -tty_buffer_cancel_work (tty->port); +if (tty->port) +tty_buffer_cancel_work (tty->port);if (tty->link)tty_buffer_cancel_work (tty->link->port);
drivers/tty/vt/vt.c +2 -22
@@ -4700,27 +4700,6 @@ static int con_font_default(struct vc_data *vc, struct console_font_op *op)return rc; } -static int con_font_copy (struct vc_data *vc,struct console_font_op *op) -{ -int con = op->height; -int rc; - - -console_lock (); -if (vc->vc_mode !=KD_TEXT ) - rc = -EINVAL ; -else if (!vc->vc_sw->con_font_copy) - rc = -ENOSYS ; -else if (con <0 || !vc_cons_allocated (con)) - rc = -ENOTTY ; -else if (con == vc->vc_num)/* nothing to do */ - rc =0 ; -else - rc = vc->vc_sw->con_font_copy (vc, con); -console_unlock (); -return rc; -} -int con_font_op (struct vc_data *vc,struct console_font_op *op) {switch (op->op) {
@@ -4731,7 +4710,8 @@ int con_font_op(struct vc_data *vc, struct console_font_op *op)case KD_FONT_OP_SET_DEFAULT :return con_font_default (vc, op);case KD_FONT_OP_COPY : -return con_font_copy (vc, op); +/* was buggy and never really used */ +return -EINVAL ; }return -ENOSYS ; }
drivers/usb/cdns3/gadget.h +1 -1
@@ -1067,7 +1067,7 @@ struct cdns3_trb {#define TRB_TDL_SS_SIZE_GET (p) (((p) & GENMASK(23, 17)) >> 17)/* transfer_len bitmasks - bits 31:24 */ -#define TRB_BURST_LEN (p) (((p) << 24) & GENMASK(31, 24)) +#define TRB_BURST_LEN (p) ((unsigned int)((p) << 24) & GENMASK(31, 24))#define TRB_BURST_LEN_GET (p) (((p) & GENMASK(31, 24)) >> 24)/* Data buffer pointer bitmasks*/
drivers/usb/core/quirks.c +3 -0
@@ -378,6 +378,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x0926, 0x3333), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, + /* Kingston DataTraveler 3.0 */ + { USB_DEVICE(0x0951, 0x1666), .driver_info = USB_QUIRK_NO_LPM }, + /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF },
drivers/usb/dwc3/ep0.c +2 -1
@@ -1058,10 +1058,11 @@ void dwc3_ep0_send_delayed_status(struct dwc3 *dwc) {unsigned int direction = !dwc->ep0_expect_in; + dwc->delayed_status = false; +if (dwc->ep0state !=EP0_STATUS_PHASE )return ; - dwc->delayed_status = false;__dwc3_ep0_do_control_status (dwc, dwc->eps[direction]); }
drivers/usb/mtu3/mtu3_gadget.c +1 -0
@@ -564,6 +564,7 @@ static int mtu3_gadget_stop(struct usb_gadget *g)spin_unlock_irqrestore (&mtu->lock, flags); +synchronize_irq (mtu->irq);return 0 ; }
drivers/usb/serial/cyberjack.c +6 -1
@@ -357,11 +357,12 @@ static void cyberjack_write_bulk_callback(struct urb *urb)struct device *dev = &port->dev;int status = urb->status;unsigned long flags; +bool resubmitted = false; -set_bit (0 , &port->write_urbs_free);if (status) {dev_dbg (dev,"%s - nonzero write bulk status received: %d\n" , __func__, status); +set_bit (0 , &port->write_urbs_free);return ; }
@@ -394,6 +395,8 @@ static void cyberjack_write_bulk_callback(struct urb *urb) goto exit; } + resubmitted = true; +dev_dbg (dev,"%s - priv->wrsent=%d\n" , __func__, priv->wrsent);dev_dbg (dev,"%s - priv->wrfilled=%d\n" , __func__, priv->wrfilled);
@@ -410,6 +413,8 @@ static void cyberjack_write_bulk_callback(struct urb *urb) exit:spin_unlock_irqrestore (&priv->lock, flags); +if (!resubmitted) +set_bit (0 , &port->write_urbs_free);usb_serial_port_softint (port); }
drivers/usb/serial/option.c +10 -0
@@ -250,6 +250,7 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_PRODUCT_EP06 0x0306#define QUECTEL_PRODUCT_EM12 0x0512#define QUECTEL_PRODUCT_RM500Q 0x0800 +#define QUECTEL_PRODUCT_EC200T 0x6026#define CMOTECH_VENDOR_ID 0x16d8#define CMOTECH_PRODUCT_6001 0x6001
@@ -1117,6 +1118,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10), .driver_info = ZLP }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) }, { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
@@ -1189,6 +1191,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1054, 0xff), /* Telit FT980-KS */ .driver_info = NCTRL(2) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1055, 0xff), /* Telit FN980 (PCIe) */ + .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910), .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
@@ -1201,6 +1205,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(0) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910), .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff), /* Telit LE910Cx (RNDIS) */ + .driver_info = NCTRL(2) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4), .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
@@ -1215,6 +1221,10 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214), .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1230, 0xff), /* Telit LE910Cx (rmnet) */ + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1231, 0xff), /* Telit LE910Cx (RNDIS) */ + .driver_info = NCTRL(2) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, 0x1260), .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, { USB_DEVICE(TELIT_VENDOR_ID, 0x1261),
drivers/video/fbdev/hyperv_fb.c +8 -1
@@ -1114,8 +1114,15 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) getmem_done:remove_conflicting_framebuffers (info->apertures,KBUILD_MODNAME , false); -if (!gen2vm) + +if (gen2vm) { +/* framebuffer is reallocated, clear screen_info to avoid misuse from kexec */ + screen_info.lfb_size =0 ; + screen_info.lfb_base =0 ; + screen_info.orig_video_isVGA =0 ; + }else {pci_dev_put (pdev); + }kfree (info->apertures);return 0 ;
fs/btrfs/backref.c +12 -1
@@ -544,7 +544,18 @@ static int resolve_indirect_ref(struct btrfs_fs_info *fs_info,int level = ref->level;struct btrfs_key search_key = ref->key_for_search; - root =btrfs_get_fs_root (fs_info, ref->root_id, false); +/* +* If we're search_commit_root we could possibly be holding locks on +* other tree nodes. This happens when qgroups does backref walks when +* adding new delayed refs. To deal with this we need to look in cache +* for the root, and if we don't find it then we need to search the +* tree_root's commit root, thus the btrfs_get_fs_root_commit_root usage +* here. +*/ +if (path->search_commit_root) + root =btrfs_get_fs_root_commit_root (fs_info, path, ref->root_id); +else + root =btrfs_get_fs_root (fs_info, ref->root_id, false);if (IS_ERR (root)) { ret =PTR_ERR (root); goto out_free;
fs/btrfs/disk-io.c +99 -40
110 lines not on this page · raw message
kernel/trace/ring_buffer.c +46 -12
58 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +56 -11
67 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.