Linux 5.15.71
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.71 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/arm64/boot/dts/rockchip/px30-engicam-px30-core.dtsi | 4 arch/arm64/boot/dts/rockchip/rk3399-gru-bob.dts | 5 arch/arm64/boot/dts/rockchip/rk3399-gru-chromebook.dtsi | 9 arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 1 arch/arm64/kernel/topology.c | 2 arch/mips/lantiq/clk.c | 1 arch/mips/loongson32/common/platform.c | 16 arch/riscv/kernel/signal.c | 2 arch/um/kernel/um_arch.c | 2 arch/x86/kvm/emulate.c | 3 arch/x86/kvm/mmu/mmu.c | 40 arch/x86/kvm/x86.c | 1 drivers/dax/hmem/device.c | 1 drivers/dma/ti/k3-udma-private.c | 6 drivers/firmware/arm_scmi/reset.c | 10 drivers/firmware/efi/libstub/secureboot.c | 8 drivers/firmware/efi/libstub/x86-stub.c | 7 drivers/gpio/gpio-mockup.c | 6 drivers/gpio/gpiolib-cdev.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 18 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 13 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 42 - drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 1 drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c | 3 drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c | 420 ++-------- drivers/gpu/drm/amd/display/modules/color/color_gamma.c | 4 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 11 drivers/gpu/drm/gma500/gma_display.c | 11 drivers/gpu/drm/hisilicon/hibmc/Kconfig | 3 drivers/gpu/drm/mediatek/mtk_dsi.c | 24 drivers/gpu/drm/panel/panel-simple.c | 2 drivers/gpu/drm/rockchip/cdn-dp-core.c | 5 drivers/hv/vmbus_drv.c | 10 drivers/i2c/busses/i2c-imx.c | 2 drivers/i2c/busses/i2c-mlxbf.c | 68 - drivers/iommu/intel/iommu.c | 2 drivers/media/usb/b2c2/flexcop-usb.c | 2 drivers/net/bonding/bond_3ad.c | 5 drivers/net/bonding/bond_main.c | 72 + drivers/net/can/flexcan.c | 10 drivers/net/can/usb/gs_usb.c | 4 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 10 drivers/net/ethernet/freescale/enetc/Makefile | 1 drivers/net/ethernet/freescale/enetc/enetc.c | 53 - drivers/net/ethernet/freescale/enetc/enetc.h | 12 drivers/net/ethernet/freescale/enetc/enetc_pf.c | 32 drivers/net/ethernet/freescale/enetc/enetc_qos.c | 23 drivers/net/ethernet/freescale/enetc/enetc_vf.c | 17 drivers/net/ethernet/intel/i40e/i40e_main.c | 32 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 20 drivers/net/ethernet/intel/iavf/iavf_txrx.c | 9 drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 7 drivers/net/ethernet/intel/ice/ice_main.c | 2 drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_mdio.c | 6 drivers/net/ethernet/microsoft/mana/gdma_main.c | 10 drivers/net/ethernet/renesas/ravb_main.c | 2 drivers/net/ethernet/renesas/sh_eth.c | 2 drivers/net/ethernet/sfc/efx_channels.c | 2 drivers/net/ethernet/sfc/tx.c | 2 drivers/net/ethernet/sun/sunhme.c | 4 drivers/net/ipa/ipa_qmi.c | 8 drivers/net/ipa/ipa_qmi_msg.c | 8 drivers/net/ipa/ipa_qmi_msg.h | 37 drivers/net/ipa/ipa_table.c | 2 drivers/net/ipa/ipa_table.h | 3 drivers/net/ipvlan/ipvlan_core.c | 6 drivers/net/mdio/of_mdio.c | 1 drivers/net/phy/aquantia_main.c | 53 + drivers/net/team/team.c | 24 drivers/net/wireguard/netlink.c | 13 drivers/net/wireguard/selftest/ratelimiter.c | 25 drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 2 drivers/s390/block/dasd_alias.c | 9 drivers/scsi/mpt3sas/mpt3sas_base.c | 2 drivers/scsi/qla2xxx/qla_target.c | 4 drivers/staging/r8188eu/os_dep/usb_intf.c | 2 drivers/thunderbolt/icm.c | 1 drivers/thunderbolt/nhi.h | 1 drivers/tty/serial/fsl_lpuart.c | 9 drivers/tty/serial/serial-tegra.c | 5 drivers/tty/serial/tegra-tcu.c | 2 drivers/usb/core/hub.c | 2 drivers/usb/dwc3/core.c | 17 drivers/usb/dwc3/core.h | 4 drivers/usb/dwc3/gadget.c | 81 + drivers/usb/serial/option.c | 6 fs/btrfs/disk-io.c | 42 - fs/dax.c | 3 fs/ext4/extents.c | 4 fs/ext4/ialloc.c | 2 fs/ext4/mballoc.c | 69 - fs/nfs/delegation.c | 10 fs/xfs/libxfs/xfs_inode_buf.c | 35 fs/xfs/xfs_inode.c | 22 include/asm-generic/vmlinux.lds.h | 3 include/linux/cpumask.h | 5 include/linux/serial_core.h | 17 include/net/bond_3ad.h | 2 include/net/bonding.h | 3 kernel/workqueue.c | 6 mm/slub.c | 18 net/bridge/netfilter/ebtables.c | 4 net/core/flow_dissector.c | 5 net/netfilter/nf_conntrack_irc.c | 34 net/netfilter/nf_conntrack_sip.c | 4 net/netfilter/nf_tables_api.c | 8 net/netfilter/nfnetlink_osf.c | 4 net/sched/cls_api.c | 1 net/sched/sch_taprio.c | 18 net/smc/smc_core.c | 5 sound/core/init.c | 10 sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_hdmi.c | 1 sound/pci/hda/patch_realtek.c | 32 sound/usb/endpoint.c | 23 sound/usb/endpoint.h | 6 sound/usb/pcm.c | 14 tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 2 tools/perf/util/genelf.c | 14 tools/perf/util/genelf.h | 4 tools/perf/util/symbol-elf.c | 7 tools/perf/util/synthetic-events.c | 17 tools/testing/selftests/net/forwarding/sch_red.sh | 1 124 files changed, 1049 insertions(+), 844 deletions(-)
Adrian Hunter (1):
perf kcore_copy: Do not check /proc/modules is unchanged
Al Viro (1):
riscv: fix a nasty sigreturn bug...
Alan Stern (1):
USB: core: Fix RST error in hub.c
Alex Deucher (2):
drm/amdgpu: make sure to init common IP before gmc drm/amdgpu: don't register a dirty callback for non-atomic
Alex Elder (1):
net: ipa: properly limit modem routing table use
Andy Shevchenko (1):
gpio: mockup: Fix potential resource leakage when register a chip
AngeloGioacchino Del Regno (1):
drm/mediatek: dsi: Add atomic {destroy,duplicate}_state, reset callbacks
Ard Biesheuvel (2):
efi: x86: Wipe setup_data on pure EFI boot
efi: libstub: check Shim mode using MokSBStateRT
Asmaa Mnebhi (3):
i2c: mlxbf: incorrect base address passed during io write
i2c: mlxbf: prevent stack overflow in mlxbf_i2c_smbus_start_transaction()
i2c: mlxbf: Fix frequency calculation
Bartosz Golaszewski (1):
gpio: mockup: fix NULL pointer dereference when removing debugfs
Benjamin Poirier (3):
net: bonding: Share lacpdu_mcast_addr definition
net: bonding: Unsync device addresses on ndo_stop
net: team: Unsync device addresses on ndo_stop
Brett Creeley (1):
iavf: Fix cached head and tail value for iavf_get_tx_pending
Brian Foster (1):
xfs: fix xfs_ifree() error handling to not leak perag ref
Brian Norris (1):
arm64: dts: rockchip: Pull up wlan wake# on Gru-Bob
Callum Osmotherly (2):
ALSA: hda/realtek: Enable 4-speaker output Dell Precision 5570 laptop
ALSA: hda/realtek: Enable 4-speaker output Dell Precision 5530 laptop
Candy Febriyanto (1):
staging: r8188eu: Remove support for devices with 8188FU chipset (0bda:f179)
Carl Yin(殷张成) (1):
USB: serial: option: add Quectel BG95 0x0203 composition
Chao Yu (1):
mm/slub: fix to return errno if kmalloc() fails
Christian Lamparter (1):
um: fix default console kernel parameter
Cristian Marussi (2):
firmware: arm_scmi: Harden accesses to the reset domains
firmware: arm_scmi: Fix the asynchronous reset requests
Dan Williams (1):
devdax: Fix soft-reservation memory description
Dave Chinner (2):
xfs: reorder iunlink remove operation in xfs_ifree
xfs: validate inode fork size against fork format
Dave Ertman (1):
ice: Don't double unplug aux on peer initiated reset
David Leadbeater (1):
netfilter: nf_conntrack_irc: Tighten matching on DCC message
David Matlack (1):
KVM: x86/mmu: Fold rmap_recycle into rmap_add
David Thompson (1):
mlxbf_gige: clear MDIO gateway lock after read
Fabio Estevam (1):
arm64: dts: rockchip: Remove 'enable-active-low' from rk3399-puma
Felix Fietkau (1):
wifi: mt76: fix reading current per-tid starting sequence number for aggregation
Filipe Manana (2):
btrfs: fix hang during unmount when stopping block group reclaim worker
btrfs: fix hang during unmount when stopping a space reclaim worker
Florian Westphal (1):
netfilter: ebtables: fix memory leak when blob is malformed
Geert Uytterhoeven (2):
net: ravb: Fix PHY state warning splat during system resume
net: sh_eth: Fix PHY state warning splat during system resume
Gil Fine (1):
thunderbolt: Add support for Intel Maple Ridge single port controller
Greg Kroah-Hartman (3):
Revert "usb: add quirks for Lenovo OneLink+ Dock" Revert "usb: gadget: udc-xilinx: replace memcpy with memcpy_toio" Linux 5.15.71
Guchun Chen (1):
drm/amd/pm: disable BACO entry/exit completely on several sienna cichlid cards
Haiyang Zhang (1):
net: mana: Add rmb after checking owner bits
Hamza Mahfooz (1):
drm/amdgpu: use dirty framebuffer helper
Hangbin Liu (1):
selftests: forwarding: add shebang for sch_red.sh
Hangyu Hua (1):
net: sched: fix possible refcount leak in tc_new_tfilter()
Hans de Goede (1):
drm/gma500: Fix BUG: sleeping function called from invalid context errors
Heiko Schocher (1):
drm/panel: simple: Fix innolux_g121i1_l01 bus_format
Igor Ryzhov (1):
netfilter: nf_conntrack_sip: fix ct_sip_walk_headers
Ilpo Järvinen (3):
serial: Create uart_xmit_advance()
serial: tegra: Use uart_xmit_advance(), fixes icount.tx accounting
serial: tegra-tcu: Use uart_xmit_advance(), fixes icount.tx accounting
Ioana Ciornei (1):
net: phy: aquantia: wait for the suspend/resume operations to finish
Jagan Teki (1):
arm64: dts: rockchip: Fix typo in lisense text for PX30.Core
Jakub Kicinski (1):
bnxt: prevent skb UAF after handing over to PTP worker
Jan Kara (4):
ext4: make directory inode spreading reflect flexbg size
ext4: make mballoc try target group first even with mb_optimize_scan
ext4: avoid unnecessary spreading of allocations among groups
ext4: use locality group preallocation for small closed files
Jason A. Donenfeld (2):
wireguard: ratelimiter: disable timings test by default
wireguard: netlink: avoid variable-sized memcpy on sockaddr
Javier Martinez Canillas (1):
drm/hisilicon/hibmc: Allow to be built if COMPILE_TEST is enabled
Jean-Francois Le Fillatre (1):
usb: add quirks for Lenovo OneLink+ Dock
Jingwen Chen (1):
drm/amd/amdgpu: fixing read wrong pf2vf data in SRIOV
Johan Hovold (1):
media: flexcop-usb: fix endpoint type check
Jonathan Toppins (1):
bonding: fix NULL deref in bond_rr_gen_slave_id
Kai Vehmanen (1):
ALSA: hda: add Intel 5 Series / 3400 PCI DID
Larry Finger (1):
staging: r8188eu: Add Rosewill USB-N150 Nano to device tables
Li Jinlin (1):
fsdax: Fix infinite loop in dax_iomap_rw()
Liang He (2):
dmaengine: ti: k3-udma-private: Fix refcount leak bug in of_xudma_dev_get()
of: mdio: Add of_node_put() when breaking out of for_each_xx
Lieven Hey (1):
perf jit: Include program header in ELF files
Lu Wei (1):
ipvlan: Fix out-of-bound bugs caused by unset skb->mac_header
Ludovic Cintrat (1):
net: core: fix flow symmetric hash
Lukas Wunner (1):
serial: fsl_lpuart: Reset prior to registration
Luke D. Jones (3):
ALSA: hda/realtek: Add pincfg for ASUS G513 HP jack
ALSA: hda/realtek: Add pincfg for ASUS G533Z HP jack
ALSA: hda/realtek: Add quirk for ASUS GA503R laptop
Luís Henriques (1):
ext4: fix bug in extents parsing when eh_entries == 0 and eh_depth > 0
Marc Kleine-Budde (2):
can: flexcan: flexcan_mailbox_read() fix return value for drop = true
can: gs_usb: gs_can_open(): fix race dev->can.state condition
Maurizio Lombardi (1):
mm: slub: fix flush_cpu_slab()/__free_slab() invocations in task context.
Meng Li (1):
gpiolib: cdev: Set lineevent_state::irq after IRQ register successfully
Michal Jaron (3):
iavf: Fix set max MTU size with port VLAN and jumbo frames
i40e: Fix VF set max MTU size
i40e: Fix set max_tx_rate when it is lower than 1 Mbps
Mohan Kumar (1):
ALSA: hda/tegra: set depop delay for tegra
Namhyung Kim (2):
perf stat: Fix BPF program section name
perf tools: Honor namespace when synthesizing build-ids
Nathan Chancellor (3):
drm/amd/display: Reduce number of arguments of dml31's CalculateWatermarksAndDRAMSpeedChangeSupport() drm/amd/display: Reduce number of arguments of dml31's CalculateFlipSchedule() drm/amd/display: Mark dml30's UseMinimumDCFCLK() as noinline for stack usage
Nathan Huckleberry (1):
drm/rockchip: Fix return type of cdn_dp_connector_mode_valid
Norbert Zulinski (1):
iavf: Fix bad page state
Nícolas F. R. A. Prado (1):
drm/mediatek: dsi: Move mtk_dsi_stop() call back to mtk_dsi_poweroff()
Pablo Neira Ayuso (1):
netfilter: nfnetlink_osf: fix possible bogus match in nf_osf_find()
Peter Collingbourne (1):
kasan: call kasan_malloc() from __kmalloc_*track_caller()
Phil Auld (1):
drivers/base: Fix unsigned comparison to -1 in CPUMAP_FILE_MAX_BYTES
Piyush Mehta (1):
usb: gadget: udc-xilinx: replace memcpy with memcpy_toio
Rafael Mendonca (1):
scsi: qla2xxx: Fix memory leak in __qlt_24xx_handle_abts()
Randy Dunlap (2):
MIPS: lantiq: export clk_get_io() for lantiq_wdt.ko drm/hisilicon: Add depends on MMU
Sean Anderson (1):
net: sunhme: Fix packet reception for len < RX_COPY_THRESHOLD
Sean Christopherson (1):
KVM: x86: Inject #UD on emulated XSETBV if XSAVES isn't enabled
Serge Semin (1):
MIPS: Loongson32: Fix PHY-mode being left unspecified
Sergey Shtylyov (1):
arm64: topology: fix possible overflow in amu_fie_setup()
Sreekanth Reddy (1):
scsi: mpt3sas: Fix return value check of dma_get_required_mask()
Stefan Haberland (1):
s390/dasd: fix Oops in dasd_alias_get_start_dev due to missing pavgroup
Takashi Iwai (3):
Revert "ALSA: usb-audio: Split endpoint setups for hw_params and prepare"
ALSA: core: Fix double-free at snd_card_new()
ALSA: hda/realtek: Re-arrange quirk table entries
Tetsuo Handa (3):
netfilter: nf_tables: fix nft_counters_enabled underflow at nf_tables_addchain()
netfilter: nf_tables: fix percpu memory leak at nf_tables_addchain()
workqueue: don't skip lockdep work dependency in cancel_work_sync()
Theodore Ts'o (1):
ext4: limit the number of retries after discarding preallocations blocks
Thinh Nguyen (3):
usb: dwc3: gadget: Prevent repeat pullup()
usb: dwc3: gadget: Refactor pullup()
usb: dwc3: gadget: Don't modify GEVNTCOUNT in pullup()
Trond Myklebust (1):
NFSv4: Fixes for nfs4_inode_return_delegation()
Uwe Kleine-König (1):
i2c: imx: If pm_runtime_get_sync() returned 1 device access is possible
Victor Skvortsov (1):
drm/amdgpu: Separate vf2pf work item init from virt data exchange
Vitaly Kuznetsov (1):
Drivers: hv: Never allocate anything besides framebuffer from framebuffer memory region
Vladimir Oltean (4):
net: enetc: move enetc_set_psfp() out of the common enetc_set_features()
net: enetc: deny offload of tc-based TSN features on VF interfaces net/sched: taprio: avoid disabling offload when it was never enabled net/sched: taprio: make qdisc_leaf() see the per-netdev-queue pfifo child qdiscs
Wen Gu (1):
net/smc: Stop the CLC flow if no link to map buffers on
Wesley Cheng (3):
usb: dwc3: gadget: Avoid starting DWC3 gadget during UDC unbind
usb: dwc3: Issue core soft reset before enabling run/stop
usb: dwc3: gadget: Avoid duplicate requests to enable Run/Stop
Will Deacon (1):
vmlinux.lds.h: CFI: Reduce alignment of jump-table to function alignment
William Wu (1):
usb: dwc3: core: leave default DMA if the controller does not support 64-bit DMA
Yao Wang1 (1):
drm/amd/display: Limit user regamma to a valid value
Yi Liu (1):
iommu/vt-d: Check correct capability for sagaw determination
huangwenhui (1):
ALSA: hda/realtek: Add quirk for Huawei WRT-WX9
jerry meng (1):
USB: serial: option: add Quectel RM520N
zain wang (1):
arm64: dts: rockchip: Set RK3399-Gru PCLK_EDP to 24 MHz
Íñigo Huguet (2):
sfc: fix TX channel offset when using legacy interrupts
sfc: fix null pointer dereference in efx_hard_start_xmit
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 70 +SUBLEVEL = 71 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/boot/dts/rockchip/px30-engicam-px30-core.dtsi +2 -2
@@ -2,8 +2,8 @@ /* * Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd * Copyright (c) 2020 Engicam srl - * Copyright (c) 2020 Amarula Solutons - * Copyright (c) 2020 Amarula Solutons(India) + * Copyright (c) 2020 Amarula Solutions + * Copyright (c) 2020 Amarula Solutions(India) */ #include <dt-bindings/gpio/gpio.h>
arch/arm64/boot/dts/rockchip/rk3399-gru-bob.dts +5 -0
@@ -87,3 +87,8 @@ h1_int_od_l: h1-int-od-l { }; }; }; + +&wlan_host_wake_l { + /* Kevin has an external pull up, but Bob does not. */ + rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>; +};
arch/arm64/boot/dts/rockchip/rk3399-gru-chromebook.dtsi +9 -0
@@ -237,6 +237,14 @@ &cdn_dp { &edp { status = "okay"; + /* + * eDP PHY/clk don't sync reliably at anything other than 24 MHz. Only + * set this here, because rk3399-gru.dtsi ensures we can generate this + * off GPLL=600MHz, whereas some other RK3399 boards may not. + */ + assigned-clocks = <&cru PCLK_EDP>; + assigned-clock-rates = <24000000>; + ports { edp_out: port@1 { reg = <1>;
@@ -395,6 +403,7 @@ wifi_perst_l: wifi-perst-l { }; wlan_host_wake_l: wlan-host-wake-l { + /* Kevin has an external pull up, but Bob does not */ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>; }; };
arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi +0 -1
@@ -62,7 +62,6 @@ vcc3v3_sys: vcc3v3-sys { vcc5v0_host: vcc5v0-host-regulator { compatible = "regulator-fixed"; gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>; - enable-active-low; pinctrl-names = "default"; pinctrl-0 = <&vcc5v0_host_en>; regulator-name = "vcc5v0_host";
arch/arm64/kernel/topology.c +1 -1
@@ -249,7 +249,7 @@ static void amu_fie_setup(const struct cpumask *cpus)for_each_cpu (cpu, cpus) {if (!freq_counters_valid (cpu) ||freq_inv_set_max_ratio (cpu, -cpufreq_get_hw_max_freq (cpu) *1000 , +cpufreq_get_hw_max_freq (cpu) *1000ULL ,arch_timer_get_rate ()))return ; }
arch/mips/lantiq/clk.c +1 -0
@@ -50,6 +50,7 @@ struct clk *clk_get_io(void) {return &cpu_clk_generic[2 ]; } +EXPORT_SYMBOL_GPL (clk_get_io);struct clk *clk_get_ppe (void ) {
arch/mips/loongson32/common/platform.c +8 -8
@@ -98,7 +98,7 @@ int ls1x_eth_mux_init(struct platform_device *pdev, void *priv)if (plat_dat->bus_id) {__raw_writel (__raw_readl (LS1X_MUX_CTRL0 ) |GMAC1_USE_UART1 |GMAC1_USE_UART0 ,LS1X_MUX_CTRL0 ); -switch (plat_dat->interface) { +switch (plat_dat->phy_interface) {case PHY_INTERFACE_MODE_RGMII : val &= ~(GMAC1_USE_TXCLK |GMAC1_USE_PWM23 );break ;
@@ -107,12 +107,12 @@ int ls1x_eth_mux_init(struct platform_device *pdev, void *priv)break ;default :pr_err ("unsupported mii mode %d\n" , - plat_dat->interface); + plat_dat->phy_interface);return -ENOTSUPP ; } val &= ~GMAC1_SHUT ; }else { -switch (plat_dat->interface) { +switch (plat_dat->phy_interface) {case PHY_INTERFACE_MODE_RGMII : val &= ~(GMAC0_USE_TXCLK |GMAC0_USE_PWM01 );break ;
@@ -121,7 +121,7 @@ int ls1x_eth_mux_init(struct platform_device *pdev, void *priv)break ;default :pr_err ("unsupported mii mode %d\n" , - plat_dat->interface); + plat_dat->phy_interface);return -ENOTSUPP ; } val &= ~GMAC0_SHUT ;
@@ -131,7 +131,7 @@ int ls1x_eth_mux_init(struct platform_device *pdev, void *priv) plat_dat =dev_get_platdata (&pdev->dev); val &= ~PHY_INTF_SELI ; -if (plat_dat->interface ==PHY_INTERFACE_MODE_RMII ) +if (plat_dat->phy_interface ==PHY_INTERFACE_MODE_RMII ) val |=0x4 <<PHY_INTF_SELI_SHIFT ;__raw_writel (val,LS1X_MUX_CTRL1 );
@@ -146,9 +146,9 @@ static struct plat_stmmacenet_data ls1x_eth0_pdata = { .bus_id = 0, .phy_addr = -1,#if defined(CONFIG_LOONGSON1_LS1B ) - .interface = PHY_INTERFACE_MODE_MII, + .phy_interface = PHY_INTERFACE_MODE_MII,#elif defined(CONFIG_LOONGSON1_LS1C ) - .interface = PHY_INTERFACE_MODE_RMII, + .phy_interface = PHY_INTERFACE_MODE_RMII, #endif .mdio_bus_data = &ls1x_mdio_bus_data, .dma_cfg = &ls1x_eth_dma_cfg,
@@ -186,7 +186,7 @@ struct platform_device ls1x_eth0_pdev = {static struct plat_stmmacenet_data ls1x_eth1_pdata = { .bus_id =1 , .phy_addr =-1 , - .interface =PHY_INTERFACE_MODE_MII , + .phy_interface =PHY_INTERFACE_MODE_MII , .mdio_bus_data = &ls1x_mdio_bus_data, .dma_cfg = &ls1x_eth_dma_cfg, .has_gmac =1 ,
arch/riscv/kernel/signal.c +2 -0
@@ -121,6 +121,8 @@ SYSCALL_DEFINE0(rt_sigreturn)if (restore_altstack (&frame->uc.uc_stack)) goto badframe; + regs->cause =-1UL ; +return regs->a0; badframe:
arch/um/kernel/um_arch.c +1 -1
@@ -31,7 +31,7 @@#include <os.h> #define DEFAULT_COMMAND_LINE_ROOT "root=98:0" -#define DEFAULT_COMMAND_LINE_CONSOLE "console=tty" +#define DEFAULT_COMMAND_LINE_CONSOLE "console=tty0"/* Changed in add_arg and setup_arch, which run before SMP is started */ static char __initdata command_line[COMMAND_LINE_SIZE ] = {0 };
arch/x86/kvm/emulate.c +3 -0
@@ -4122,6 +4122,9 @@ static int em_xsetbv(struct x86_emulate_ctxt *ctxt) {u32 eax, ecx, edx; +if (!(ctxt->ops->get_cr (ctxt,4 ) &X86_CR4_OSXSAVE )) +return emulate_ud (ctxt); + eax =reg_read (ctxt,VCPU_REGS_RAX ); edx =reg_read (ctxt,VCPU_REGS_RDX ); ecx =reg_read (ctxt,VCPU_REGS_RCX );
arch/x86/kvm/mmu/mmu.c +14 -26
@@ -1071,20 +1071,6 @@ static bool rmap_can_add(struct kvm_vcpu *vcpu)return kvm_mmu_memory_cache_nr_free_objects (mc); } -static int rmap_add (struct kvm_vcpu *vcpu,u64 *spte,gfn_t gfn) -{ -struct kvm_memory_slot *slot; -struct kvm_mmu_page *sp; -struct kvm_rmap_head *rmap_head; - - sp =sptep_to_sp (spte); -kvm_mmu_page_set_gfn (sp, spte - sp->spt, gfn); - slot =kvm_vcpu_gfn_to_memslot (vcpu, gfn); - rmap_head =gfn_to_rmap (gfn, sp->role.level, slot); -return pte_list_add (vcpu, spte, rmap_head); -} - -static void rmap_remove (struct kvm *kvm,u64 *spte) {struct kvm_memslots *slots;
@@ -1097,9 +1083,9 @@ static void rmap_remove(struct kvm *kvm, u64 *spte) gfn =kvm_mmu_page_get_gfn (sp, spte - sp->spt);/* -* Unlike rmap_add and rmap_recycle, rmap_remove does not run in the -* context of a vCPU so have to determine which memslots to use based -* on context information in sp->role. +* Unlike rmap_add, rmap_remove does not run in the context of a vCPU +* so we have to determine which memslots to use based on context +* information in sp->role. */ slots =kvm_memslots_for_spte_role (kvm, sp->role);
@@ -1639,19 +1625,24 @@ static bool kvm_test_age_rmapp(struct kvm *kvm, struct kvm_rmap_head *rmap_head,#define RMAP_RECYCLE_THRESHOLD 1000 -static void rmap_recycle (struct kvm_vcpu *vcpu,u64 *spte,gfn_t gfn) +static void rmap_add (struct kvm_vcpu *vcpu,u64 *spte,gfn_t gfn) {struct kvm_memory_slot *slot; -struct kvm_rmap_head *rmap_head;struct kvm_mmu_page *sp; +struct kvm_rmap_head *rmap_head; +int rmap_count; sp =sptep_to_sp (spte); +kvm_mmu_page_set_gfn (sp, spte - sp->spt, gfn); slot =kvm_vcpu_gfn_to_memslot (vcpu, gfn); rmap_head =gfn_to_rmap (gfn, sp->role.level, slot); + rmap_count =pte_list_add (vcpu, spte, rmap_head); -kvm_unmap_rmapp (vcpu->kvm, rmap_head,NULL , gfn, sp->role.level,__pte (0 )); -kvm_flush_remote_tlbs_with_address (vcpu->kvm, sp->gfn, -KVM_PAGES_PER_HPAGE (sp->role.level)); +if (rmap_count >RMAP_RECYCLE_THRESHOLD ) { +kvm_unmap_rmapp (vcpu->kvm, rmap_head,NULL , gfn, sp->role.level,__pte (0 )); +kvm_flush_remote_tlbs_with_address ( + vcpu->kvm, sp->gfn,KVM_PAGES_PER_HPAGE (sp->role.level)); + } }bool kvm_age_gfn (struct kvm *kvm,struct kvm_gfn_range *range)
@@ -2718,7 +2709,6 @@ static int mmu_set_spte(struct kvm_vcpu *vcpu, u64 *sptep, bool host_writable) {int was_rmapped =0 ; -int rmap_count;int set_spte_ret;int ret =RET_PF_FIXED ;bool flush = false;
@@ -2778,9 +2768,7 @@ static int mmu_set_spte(struct kvm_vcpu *vcpu, u64 *sptep,if (!was_rmapped) {kvm_update_page_stats (vcpu->kvm, level,1 ); - rmap_count =rmap_add (vcpu, sptep, gfn); -if (rmap_count >RMAP_RECYCLE_THRESHOLD ) -rmap_recycle (vcpu, sptep, gfn); +rmap_add (vcpu, sptep, gfn); }return ret;
arch/x86/kvm/x86.c +1 -0
@@ -1021,6 +1021,7 @@ static int __kvm_set_xcr(struct kvm_vcpu *vcpu, u32 index, u64 xcr)int kvm_emulate_xsetbv (struct kvm_vcpu *vcpu) { +/* Note, #UD due to CR4.OSXSAVE=0 has priority over the intercept. */ if (static_call (kvm_x86_get_cpl)(vcpu) !=0 ||__kvm_set_xcr (vcpu,kvm_rcx_read (vcpu),kvm_read_edx_eax (vcpu))) {kvm_inject_gp (vcpu,0 );
drivers/dax/hmem/device.c +1 -0
@@ -15,6 +15,7 @@ void hmem_register_device(int target_nid, struct resource *r) .start = r->start, .end = r->end, .flags = IORESOURCE_MEM, + .desc = IORES_DESC_SOFT_RESERVED, };struct platform_device *pdev;struct memregion_info info;
drivers/dma/ti/k3-udma-private.c +3 -3
@@ -31,14 +31,14 @@ struct udma_dev *of_xudma_dev_get(struct device_node *np, const char *property) } pdev =of_find_device_by_node (udma_node); +if (np != udma_node) +of_node_put (udma_node); +if (!pdev) {pr_debug ("UDMA device not found\n" );return ERR_PTR (-EPROBE_DEFER ); } -if (np != udma_node) -of_node_put (udma_node); - ud =platform_get_drvdata (pdev);if (!ud) {pr_debug ("UDMA has not been probed\n" );
drivers/firmware/arm_scmi/reset.c +7 -3
@@ -152,9 +152,13 @@ static int scmi_domain_reset(const struct scmi_protocol_handle *ph, u32 domain,struct scmi_xfer *t;struct scmi_msg_reset_domain_reset *dom;struct scmi_reset_info *pi = ph->get_priv (ph); -struct reset_dom_info *rdom = pi->dom_info + domain; +struct reset_dom_info *rdom; -if (rdom->async_reset) +if (domain >= pi->num_domains) +return -EINVAL ; + + rdom = pi->dom_info + domain; +if (rdom->async_reset && flags &AUTONOMOUS_RESET ) flags |=ASYNCHRONOUS_RESET ; ret = ph->xops->xfer_get_init (ph,RESET ,sizeof (*dom),0 , &t);
@@ -166,7 +170,7 @@ static int scmi_domain_reset(const struct scmi_protocol_handle *ph, u32 domain, dom->flags =cpu_to_le32 (flags); dom->reset_state =cpu_to_le32 (state); -if (rdom->async_reset) +if (flags &ASYNCHRONOUS_RESET ) ret = ph->xops->do_xfer_with_response (ph, t);else ret = ph->xops->do_xfer (ph, t);
drivers/firmware/efi/libstub/secureboot.c +4 -4
@@ -14,7 +14,7 @@/* SHIM variables */ static const efi_guid_t shim_guid =EFI_SHIM_LOCK_GUID ; -static const efi_char16_t shim_MokSBState_name[] =L"MokSBState" ; +static const efi_char16_t shim_MokSBState_name[] =L"MokSBStateRT" ;static efi_status_t get_var (efi_char16_t *name,efi_guid_t *vendor,u32 *attr,unsigned long *data_size,void *data)
@@ -43,8 +43,8 @@ enum efi_secureboot_mode efi_get_secureboot(void)/* * See if a user has put the shim into insecure mode. If so, and if the -* variable doesn't have the runtime attribute set, we might as well -* honor that. +* variable doesn't have the non-volatile attribute set, we might as +* well honor that. */ size =sizeof (moksbstate); status = get_efi_var(shim_MokSBState_name, &shim_guid,
@@ -53,7 +53,7 @@ enum efi_secureboot_mode efi_get_secureboot(void)/* If it fails, we don't care why. Default to secure */ if (status !=EFI_SUCCESS ) goto secure_boot_enabled; -if (!(attr &EFI_VARIABLE_RUNTIME_ACCESS ) && moksbstate ==1 ) +if (!(attr &EFI_VARIABLE_NON_VOLATILE ) && moksbstate ==1 )return efi_secureboot_mode_disabled; secure_boot_enabled:
drivers/firmware/efi/libstub/x86-stub.c +7 -0
@@ -414,6 +414,13 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle, hdr->ramdisk_image =0 ; hdr->ramdisk_size =0 ; +/* +* Disregard any setup data that was provided by the bootloader: +* setup_data could be pointing anywhere, and we have no way of +* authenticating or validating the payload. +*/ + hdr->setup_data =0 ; +efi_stub_entry (handle, sys_table_arg, boot_params);/* not reached */
drivers/gpio/gpio-mockup.c +4 -2
@@ -554,8 +554,10 @@ static int __init gpio_mockup_register_chip(int idx) } fwnode =fwnode_create_software_node (properties,NULL ); -if (IS_ERR (fwnode)) +if (IS_ERR (fwnode)) { +kfree_strarray (line_names, ngpio);return PTR_ERR (fwnode); + } pdevinfo.name ="gpio-mockup" ; pdevinfo.id = idx;
@@ -618,9 +620,9 @@ static int __init gpio_mockup_init(void) static void __exit gpio_mockup_exit(void) { +gpio_mockup_unregister_pdevs ();debugfs_remove_recursive (gpio_mockup_dbg_dir);platform_driver_unregister (&gpio_mockup_driver); -gpio_mockup_unregister_pdevs (); }module_init (gpio_mockup_init);
drivers/gpio/gpiolib-cdev.c +3 -2
@@ -1784,7 +1784,6 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip) ret = -ENODEV ; goto out_free_le; } - le->irq = irq;if (eflags &GPIOEVENT_REQUEST_RISING_EDGE ) irqflags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ?
@@ -1798,7 +1797,7 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)init_waitqueue_head (&le->wait);/* Request a thread to read the events */ - ret = request_threaded_irq(le->irq, + ret = request_threaded_irq(irq, lineevent_irq_handler, lineevent_irq_thread, irqflags,
@@ -1807,6 +1806,8 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)if (ret) goto out_free_le; + le->irq = irq; + fd =get_unused_fd_flags (O_RDONLY |O_CLOEXEC );if (fd <0 ) { ret = fd;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +15 -3
@@ -2388,8 +2388,20 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev) } adev->ip_blocks[i].status.sw = true; -/* need to do gmc hw init early so we can allocate gpu mem */ -if (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_GMC ) { +if (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_COMMON ) { +/* need to do common hw init early so everything is set up for gmc */ + r = adev->ip_blocks[i].version->funcs->hw_init ((void *)adev); +if (r) { +DRM_ERROR ("hw_init %d failed %d\n" , i, r); + goto init_failed; + } + adev->ip_blocks[i].status.hw = true; + }else if (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_GMC ) { +/* need to do gmc hw init early so we can allocate gpu mem */ +/* Try to reserve bad pages early */ +if (amdgpu_sriov_vf (adev)) +amdgpu_virt_exchange_data (adev); + r =amdgpu_device_vram_scratch_init (adev);if (r) {DRM_ERROR ("amdgpu_vram_scratch_init failed %d\n" , r);
@@ -3033,8 +3045,8 @@ static int amdgpu_device_ip_reinit_early_sriov(struct amdgpu_device *adev)int i, r;static enum amd_ip_block_type ip_order[] = { -AMD_IP_BLOCK_TYPE_GMC ,AMD_IP_BLOCK_TYPE_COMMON , +AMD_IP_BLOCK_TYPE_GMC ,AMD_IP_BLOCK_TYPE_PSP ,AMD_IP_BLOCK_TYPE_IH , };
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +12 -1
@@ -35,6 +35,8 @@#include <linux/pci.h> #include <linux/pm_runtime.h> #include <drm/drm_crtc_helper.h> +#include <drm/drm_damage_helper.h> +#include <drm/drm_drv.h> #include <drm/drm_edid.h> #include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_fb_helper.h>
@@ -492,6 +494,12 @@ static const struct drm_framebuffer_funcs amdgpu_fb_funcs = { .create_handle = drm_gem_fb_create_handle, }; +static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = { + .destroy = drm_gem_fb_destroy, + .create_handle = drm_gem_fb_create_handle, + .dirty = drm_atomic_helper_dirtyfb, +}; +uint32_t amdgpu_display_supported_domains (struct amdgpu_device *adev,uint64_t bo_flags) {
@@ -1109,7 +1117,10 @@ int amdgpu_display_gem_fb_verify_and_init(if (ret) goto err; - ret =drm_framebuffer_init (dev, &rfb->base, &amdgpu_fb_funcs); +if (drm_drv_uses_atomic_modeset (dev)) + ret =drm_framebuffer_init (dev, &rfb->base, &amdgpu_fb_funcs_atomic); +else + ret =drm_framebuffer_init (dev, &rfb->base, &amdgpu_fb_funcs);if (ret) goto err;
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +24 -18
62 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h +1 -0
@@ -308,6 +308,7 @@ int amdgpu_virt_alloc_mm_table(struct amdgpu_device *adev);void amdgpu_virt_free_mm_table (struct amdgpu_device *adev);void amdgpu_virt_release_ras_err_handler_data (struct amdgpu_device *adev);void amdgpu_virt_init_data_exchange (struct amdgpu_device *adev); +void amdgpu_virt_exchange_data (struct amdgpu_device *adev);void amdgpu_virt_fini_data_exchange (struct amdgpu_device *adev);void amdgpu_detect_virtualization (struct amdgpu_device *adev);
drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c +1 -2
@@ -6658,8 +6658,7 @@ static double CalculateUrgentLatency(return ret; } - -static void UseMinimumDCFCLK( +static noinline_for_stack void UseMinimumDCFCLK( struct display_mode_lib *mode_lib, int MaxInterDCNTileRepeaters, int MaxPrefetchMode,
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c +99 -321
722 lines not on this page · raw message
drivers/gpu/drm/amd/display/modules/color/color_gamma.c +4 -0
@@ -1597,6 +1597,7 @@ static void interpolate_user_regamma(uint32_t hw_points_num,struct fixed31_32 lut2;struct fixed31_32 delta_lut;struct fixed31_32 delta_index; +const struct fixed31_32 one =dc_fixpt_from_int (1 ); i =0 ;/* fixed_pt library has problems handling too small values */
@@ -1625,6 +1626,9 @@ static void interpolate_user_regamma(uint32_t hw_points_num, }else hw_x = coordinates_x[i].x; +if (dc_fixpt_le (one, hw_x)) + hw_x = one; + norm_x =dc_fixpt_mul (norm_factor, hw_x); index =dc_fixpt_floor (norm_x);if (index <0 || index >255 )
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +11 -0
@@ -358,6 +358,17 @@ static void sienna_cichlid_check_bxco_support(struct smu_context *smu) smu_baco->platform_support = (val &RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK ) ? true : false; + +/* +* Disable BACO entry/exit completely on below SKUs to +* avoid hardware intermittent failures. +*/ +if (((adev->pdev->device ==0x73A1 ) && + (adev->pdev->revision ==0x00 )) || + ((adev->pdev->device ==0x73BF ) && + (adev->pdev->revision ==0xCF ))) + smu_baco->platform_support = false; + } }
drivers/gpu/drm/gma500/gma_display.c +7 -4
@@ -529,15 +529,18 @@ int gma_crtc_page_flip(struct drm_crtc *crtc,WARN_ON (drm_crtc_vblank_get (crtc) !=0 ); gma_crtc->page_flip_event = event; +spin_unlock_irqrestore (&dev->event_lock, flags);/* Call this locked if we want an event at vblank interrupt. */ ret = crtc_funcs->mode_set_base (crtc, crtc->x, crtc->y, old_fb);if (ret) { - gma_crtc->page_flip_event =NULL ; -drm_crtc_vblank_put (crtc); +spin_lock_irqsave (&dev->event_lock, flags); +if (gma_crtc->page_flip_event) { + gma_crtc->page_flip_event =NULL ; +drm_crtc_vblank_put (crtc); + } +spin_unlock_irqrestore (&dev->event_lock, flags); } - -spin_unlock_irqrestore (&dev->event_lock, flags); }else { ret = crtc_funcs->mode_set_base (crtc, crtc->x, crtc->y, old_fb); }
drivers/gpu/drm/hisilicon/hibmc/Kconfig +2 -1
@@ -1,7 +1,8 @@ # SPDX-License-Identifier: GPL-2.0-only config DRM_HISI_HIBMC tristate "DRM Support for Hisilicon Hibmc" - depends on DRM && PCI && ARM64 + depends on DRM && PCI && (ARM64 || COMPILE_TEST) + depends on MMU select DRM_KMS_HELPER select DRM_VRAM_HELPER select DRM_TTM
drivers/gpu/drm/mediatek/mtk_dsi.c +13 -11
@@ -673,6 +673,16 @@ static void mtk_dsi_poweroff(struct mtk_dsi *dsi)if (--dsi->refcount !=0 )return ; +/* +* mtk_dsi_stop() and mtk_dsi_start() is asymmetric, since +* mtk_dsi_stop() should be called after mtk_drm_crtc_atomic_disable(), +* which needs irq for vblank, and mtk_dsi_stop() will disable irq. +* mtk_dsi_start() needs to be called in mtk_output_dsi_enable(), +* after dsi is fully set. +*/ +mtk_dsi_stop (dsi); + +mtk_dsi_switch_to_cmd_mode (dsi,VM_DONE_INT_FLAG ,500 );mtk_dsi_reset_engine (dsi);mtk_dsi_lane0_ulp_mode_enter (dsi);mtk_dsi_clk_ulp_mode_enter (dsi);
@@ -723,17 +733,6 @@ static void mtk_output_dsi_disable(struct mtk_dsi *dsi)if (!dsi->enabled)return ; -/* -* mtk_dsi_stop() and mtk_dsi_start() is asymmetric, since -* mtk_dsi_stop() should be called after mtk_drm_crtc_atomic_disable(), -* which needs irq for vblank, and mtk_dsi_stop() will disable irq. -* mtk_dsi_start() needs to be called in mtk_output_dsi_enable(), -* after dsi is fully set. -*/ -mtk_dsi_stop (dsi); - -mtk_dsi_switch_to_cmd_mode (dsi,VM_DONE_INT_FLAG ,500 ); - dsi->enabled = false; }
@@ -796,10 +795,13 @@ static void mtk_dsi_bridge_atomic_post_disable(struct drm_bridge *bridge,static const struct drm_bridge_funcs mtk_dsi_bridge_funcs = { .attach = mtk_dsi_bridge_attach, + .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, .atomic_disable = mtk_dsi_bridge_atomic_disable, + .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, .atomic_enable = mtk_dsi_bridge_atomic_enable, .atomic_pre_enable = mtk_dsi_bridge_atomic_pre_enable, .atomic_post_disable = mtk_dsi_bridge_atomic_post_disable, + .atomic_reset = drm_atomic_helper_bridge_reset, .mode_set = mtk_dsi_bridge_mode_set, };
drivers/gpu/drm/panel/panel-simple.c +1 -1
@@ -2579,7 +2579,7 @@ static const struct panel_desc innolux_g121i1_l01 = { .enable = 200, .disable = 20, }, - .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG, .connector_type = DRM_MODE_CONNECTOR_LVDS, };
drivers/gpu/drm/rockchip/cdn-dp-core.c +3 -2
@@ -277,8 +277,9 @@ static int cdn_dp_connector_get_modes(struct drm_connector *connector)return ret; } -static int cdn_dp_connector_mode_valid (struct drm_connector *connector, -struct drm_display_mode *mode) +static enum drm_mode_status +cdn_dp_connector_mode_valid (struct drm_connector *connector, +struct drm_display_mode *mode) {struct cdn_dp_device *dp =connector_to_dp (connector);struct drm_display_info *display_info = &dp->connector.display_info;
drivers/hv/vmbus_drv.c +9 -1
@@ -2340,7 +2340,7 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj, bool fb_overlap_ok) {struct resource *iter, *shadow; -resource_size_t range_min, range_max, start; +resource_size_t range_min, range_max, start, end;const char *dev_n =dev_name (&device_obj->device);int retval;
@@ -2375,6 +2375,14 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj, range_max = iter->end; start = (range_min + align -1 ) & ~(align -1 );for (; start + size -1 <= range_max; start += align) { + end = start + size -1 ; + +/* Skip the whole fb_mmio region if not fb_overlap_ok */ +if (!fb_overlap_ok && fb_mmio && + (((start >= fb_mmio->start) && (start <= fb_mmio->end)) || + ((end >= fb_mmio->start) && (end <= fb_mmio->end)))) +continue ; + shadow =__request_region (iter, start, size,NULL ,IORESOURCE_BUSY );if (!shadow)
drivers/i2c/busses/i2c-imx.c +1 -1
@@ -1496,7 +1496,7 @@ static int i2c_imx_remove(struct platform_device *pdev)if (i2c_imx->dma)i2c_imx_dma_free (i2c_imx); -if (ret ==0 ) { +if (ret >=0 ) {/* setup chip registers to defaults */ imx_i2c_write_reg (0 , i2c_imx,IMX_I2C_IADR );imx_i2c_write_reg (0 , i2c_imx,IMX_I2C_IFDR );
drivers/i2c/busses/i2c-mlxbf.c +27 -41
165 lines not on this page · raw message
drivers/iommu/intel/iommu.c +1 -1
@@ -539,7 +539,7 @@ static unsigned long __iommu_calculate_sagaw(struct intel_iommu *iommu) {unsigned long fl_sagaw, sl_sagaw; - fl_sagaw =BIT (2 ) | (cap_fl1gp_support (iommu->cap) ?BIT (3 ) :0 ); + fl_sagaw =BIT (2 ) | (cap_5lp_support (iommu->cap) ?BIT (3 ) :0 ); sl_sagaw =cap_sagaw (iommu->cap);/* Second level only. */
drivers/media/usb/b2c2/flexcop-usb.c +1 -1
@@ -511,7 +511,7 @@ static int flexcop_usb_init(struct flexcop_usb *fc_usb)if (fc_usb->uintf->cur_altsetting->desc.bNumEndpoints <1 )return -ENODEV ; -if (!usb_endpoint_is_isoc_in (&fc_usb->uintf->cur_altsetting->endpoint[1 ].desc)) +if (!usb_endpoint_is_isoc_in (&fc_usb->uintf->cur_altsetting->endpoint[0 ].desc))return -ENODEV ;switch (fc_usb->udev->speed) {
drivers/net/bonding/bond_3ad.c +3 -2
@@ -87,8 +87,9 @@ static const u8 null_mac_addr[ETH_ALEN + 2] __long_aligned = {static u16 ad_ticks_per_sec;static const int ad_delta_in_ticks = (AD_TIMER_INTERVAL *HZ ) /1000 ; -static const u8 lacpdu_mcast_addr[ETH_ALEN + 2] __long_aligned = -MULTICAST_LACPDU_ADDR ; +const u8 lacpdu_mcast_addr[ETH_ALEN + 2] __long_aligned = { +0x01 ,0x80 ,0xC2 ,0x00 ,0x00 ,0x02 +};/* ================= main 802.3ad protocol functions ================== */ static int ad_lacpdu_send (struct port *port);
drivers/net/bonding/bond_main.c +42 -30
133 lines not on this page · raw message
drivers/net/can/flexcan.c +5 -5
@@ -1036,11 +1036,6 @@ static struct sk_buff *flexcan_mailbox_read(struct can_rx_offload *offload,u32 reg_ctrl, reg_id, reg_iflag1;int i; -if (unlikely (drop)) { - skb =ERR_PTR (-ENOBUFS ); - goto mark_as_read; - } - mb =flexcan_get_mb (priv, n);if (priv->devtype_data.quirks &FLEXCAN_QUIRK_USE_RX_MAILBOX ) {
@@ -1069,6 +1064,11 @@ static struct sk_buff *flexcan_mailbox_read(struct can_rx_offload *offload, reg_ctrl = priv->read (&mb->can_ctrl); } +if (unlikely (drop)) { + skb =ERR_PTR (-ENOBUFS ); + goto mark_as_read; + } +if (reg_ctrl &FLEXCAN_MB_CNT_EDL ) skb =alloc_canfd_skb (offload->dev, &cfd);else
drivers/net/can/usb/gs_usb.c +2 -2
@@ -680,6 +680,7 @@ static int gs_can_open(struct net_device *netdev) flags |=GS_CAN_MODE_TRIPLE_SAMPLE ;/* finally start device */ + dev->can.state =CAN_STATE_ERROR_ACTIVE ; dm->mode =cpu_to_le32 (GS_CAN_MODE_START ); dm->flags =cpu_to_le32 (flags); rc = usb_control_msg(interface_to_usbdev(dev->iface),
@@ -696,13 +697,12 @@ static int gs_can_open(struct net_device *netdev)if (rc <0 ) {netdev_err (netdev,"Couldn't start device (err=%d)\n" , rc);kfree (dm); + dev->can.state =CAN_STATE_STOPPED ;return rc; }kfree (dm); - dev->can.state =CAN_STATE_ERROR_ACTIVE ; - parent->active_channels++;if (!(dev->can.ctrlmode &CAN_CTRLMODE_LISTENONLY ))netif_start_queue (netdev);
drivers/net/ethernet/broadcom/bnxt/bnxt.c +5 -5
@@ -709,7 +709,6 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts)for (i =0 ; i < nr_pkts; i++) {struct bnxt_sw_tx_bd *tx_buf; -bool compl_deferred = false;struct sk_buff *skb;int j, last;
@@ -718,6 +717,8 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts) skb = tx_buf->skb; tx_buf->skb =NULL ; + tx_bytes += skb->len; +if (tx_buf->is_push) { tx_buf->is_push =0 ; goto next_tx_int;
@@ -738,8 +739,9 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts) }if (unlikely (skb_shinfo (skb)->tx_flags &SKBTX_IN_PROGRESS )) {if (bp->flags &BNXT_FLAG_CHIP_P5 ) { +/* PTP worker takes ownership of the skb */ if (!bnxt_get_tx_ts_p5 (bp, skb)) - compl_deferred = true; + skb =NULL ;else atomic_inc (&bp->ptp_cfg->tx_avail); }
@@ -748,9 +750,7 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts) next_tx_int: cons =NEXT_TX (cons); - tx_bytes += skb->len; -if (!compl_deferred) -dev_kfree_skb_any (skb); +dev_kfree_skb_any (skb); }netdev_tx_completed_queue (txq, nr_pkts, tx_bytes);
drivers/net/ethernet/freescale/enetc/Makefile +0 -1
@@ -9,7 +9,6 @@ fsl-enetc-$(CONFIG_FSL_ENETC_QOS) += enetc_qos.o obj-$(CONFIG_FSL_ENETC_VF) += fsl-enetc-vf.o fsl-enetc-vf-y := enetc_vf.o $(common-objs) -fsl-enetc-vf-$(CONFIG_FSL_ENETC_QOS) += enetc_qos.o obj-$(CONFIG_FSL_ENETC_IERB) += fsl-enetc-ierb.o fsl-enetc-ierb-y := enetc_ierb.o
drivers/net/ethernet/freescale/enetc/enetc.c +2 -51
85 lines not on this page · raw message
drivers/net/ethernet/freescale/enetc/enetc.h +8 -4
@@ -385,11 +385,9 @@ void enetc_start(struct net_device *ndev);void enetc_stop (struct net_device *ndev);netdev_tx_t enetc_xmit (struct sk_buff *skb,struct net_device *ndev);struct net_device_stats *enetc_get_stats (struct net_device *ndev); -int enetc_set_features (struct net_device *ndev, -netdev_features_t features); +void enetc_set_features (struct net_device *ndev,netdev_features_t features);int enetc_ioctl (struct net_device *ndev,struct ifreq *rq,int cmd); -int enetc_setup_tc (struct net_device *ndev,enum tc_setup_type type, -void *type_data); +int enetc_setup_tc_mqprio (struct net_device *ndev,void *type_data);int enetc_setup_bpf (struct net_device *dev,struct netdev_bpf *xdp);int enetc_xdp_xmit (struct net_device *ndev,int num_frames,struct xdp_frame **frames,u32 flags);
@@ -421,6 +419,7 @@ int enetc_setup_tc_block_cb(enum tc_setup_type type, void *type_data,int enetc_setup_tc_psfp (struct net_device *ndev,void *type_data);int enetc_psfp_init (struct enetc_ndev_priv *priv);int enetc_psfp_clean (struct enetc_ndev_priv *priv); +int enetc_set_psfp (struct net_device *ndev,bool en);static inline void enetc_get_max_cap (struct enetc_ndev_priv *priv) {
@@ -496,4 +495,9 @@ static inline int enetc_psfp_disable(struct enetc_ndev_priv *priv) {return 0 ; } + +static inline int enetc_set_psfp (struct net_device *ndev,bool en) +{ +return 0 ; +}#endif
drivers/net/ethernet/freescale/enetc/enetc_pf.c +30 -2
@@ -708,6 +708,13 @@ static int enetc_pf_set_features(struct net_device *ndev, {netdev_features_t changed = ndev->features ^ features;struct enetc_ndev_priv *priv =netdev_priv (ndev); +int err; + +if (changed &NETIF_F_HW_TC ) { + err =enetc_set_psfp (ndev, !!(features &NETIF_F_HW_TC )); +if (err) +return err; + }if (changed &NETIF_F_HW_VLAN_CTAG_FILTER ) {struct enetc_pf *pf =enetc_si_priv (priv->si);
@@ -721,7 +728,28 @@ static int enetc_pf_set_features(struct net_device *ndev,if (changed &NETIF_F_LOOPBACK )enetc_set_loopback (ndev, !!(features &NETIF_F_LOOPBACK )); -return enetc_set_features (ndev, features); +enetc_set_features (ndev, features); + +return 0 ; +} + +static int enetc_pf_setup_tc (struct net_device *ndev,enum tc_setup_type type, +void *type_data) +{ +switch (type) { +case TC_SETUP_QDISC_MQPRIO : +return enetc_setup_tc_mqprio (ndev, type_data); +case TC_SETUP_QDISC_TAPRIO : +return enetc_setup_tc_taprio (ndev, type_data); +case TC_SETUP_QDISC_CBS : +return enetc_setup_tc_cbs (ndev, type_data); +case TC_SETUP_QDISC_ETF : +return enetc_setup_tc_txtime (ndev, type_data); +case TC_SETUP_BLOCK : +return enetc_setup_tc_psfp (ndev, type_data); +default : +return -EOPNOTSUPP ; + } }static const struct net_device_ops enetc_ndev_ops = {
@@ -738,7 +766,7 @@ static const struct net_device_ops enetc_ndev_ops = { .ndo_set_vf_spoofchk = enetc_pf_set_vf_spoofchk, .ndo_set_features = enetc_pf_set_features, .ndo_eth_ioctl = enetc_ioctl, - .ndo_setup_tc = enetc_setup_tc, + .ndo_setup_tc = enetc_pf_setup_tc, .ndo_bpf = enetc_setup_bpf, .ndo_xdp_xmit = enetc_xdp_xmit, };
drivers/net/ethernet/freescale/enetc/enetc_qos.c +23 -0
@@ -1529,6 +1529,29 @@ int enetc_setup_tc_block_cb(enum tc_setup_type type, void *type_data, } } +int enetc_set_psfp (struct net_device *ndev,bool en) +{ +struct enetc_ndev_priv *priv =netdev_priv (ndev); +int err; + +if (en) { + err =enetc_psfp_enable (priv); +if (err) +return err; + + priv->active_offloads |=ENETC_F_QCI ; +return 0 ; + } + + err =enetc_psfp_disable (priv); +if (err) +return err; + + priv->active_offloads &= ~ENETC_F_QCI ; + +return 0 ; +} +int enetc_psfp_init (struct enetc_ndev_priv *priv) {if (epsfp.psfp_sfi_bitmap)
drivers/net/ethernet/freescale/enetc/enetc_vf.c +15 -2
@@ -88,7 +88,20 @@ static int enetc_vf_set_mac_addr(struct net_device *ndev, void *addr)static int enetc_vf_set_features (struct net_device *ndev,netdev_features_t features) { -return enetc_set_features (ndev, features); +enetc_set_features (ndev, features); + +return 0 ; +} + +static int enetc_vf_setup_tc (struct net_device *ndev,enum tc_setup_type type, +void *type_data) +{ +switch (type) { +case TC_SETUP_QDISC_MQPRIO : +return enetc_setup_tc_mqprio (ndev, type_data); +default : +return -EOPNOTSUPP ; + } }/* Probing/ Init */
@@ -100,7 +113,7 @@ static const struct net_device_ops enetc_ndev_ops = { .ndo_set_mac_address = enetc_vf_set_mac_addr, .ndo_set_features = enetc_vf_set_features, .ndo_eth_ioctl = enetc_ioctl, - .ndo_setup_tc = enetc_setup_tc, + .ndo_setup_tc = enetc_vf_setup_tc, }; static void enetc_vf_netdev_setup(struct enetc_si *si, struct net_device *ndev,
drivers/net/ethernet/intel/i40e/i40e_main.c +26 -6
@@ -5766,6 +5766,26 @@ static int i40e_get_link_speed(struct i40e_vsi *vsi) } } +/** +* i40e_bw_bytes_to_mbits - Convert max_tx_rate from bytes to mbits +* @vsi: Pointer to vsi structure +* @max_tx_rate: max TX rate in bytes to be converted into Mbits +* +* Helper function to convert units before send to set BW limit +**/ +static u64 i40e_bw_bytes_to_mbits (struct i40e_vsi *vsi,u64 max_tx_rate) +{ +if (max_tx_rate <I40E_BW_MBPS_DIVISOR ) { +dev_warn (&vsi->back->pdev->dev, +"Setting max tx rate to minimum usable value of 50Mbps.\n" ); + max_tx_rate =I40E_BW_CREDIT_DIVISOR ; + }else { +do_div (max_tx_rate,I40E_BW_MBPS_DIVISOR ); + } + +return max_tx_rate; +} +/** * i40e_set_bw_limit - setup BW limit for Tx traffic based on max_tx_rate * @vsi: VSI to be configured
@@ -5788,10 +5808,10 @@ int i40e_set_bw_limit(struct i40e_vsi *vsi, u16 seid, u64 max_tx_rate) max_tx_rate, seid);return -EINVAL ; } -if (max_tx_rate && max_tx_rate <50 ) { +if (max_tx_rate && max_tx_rate <I40E_BW_CREDIT_DIVISOR ) {dev_warn (&pf->pdev->dev,"Setting max tx rate to minimum usable value of 50Mbps.\n" ); - max_tx_rate =50 ; + max_tx_rate =I40E_BW_CREDIT_DIVISOR ; }/* Tx rate credits are in values of 50Mbps, 0 is disabled */
@@ -8082,9 +8102,9 @@ static int i40e_setup_tc(struct net_device *netdev, void *type_data)if (i40e_is_tc_mqprio_enabled (pf)) {if (vsi->mqprio_qopt.max_rate[0 ]) { -u64 max_tx_rate = vsi->mqprio_qopt.max_rate[0 ]; +u64 max_tx_rate =i40e_bw_bytes_to_mbits (vsi, + vsi->mqprio_qopt.max_rate[0 ]); -do_div (max_tx_rate,I40E_BW_MBPS_DIVISOR ); ret =i40e_set_bw_limit (vsi, vsi->seid, max_tx_rate);if (!ret) {u64 credits = max_tx_rate;
@@ -10829,10 +10849,10 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired) }if (vsi->mqprio_qopt.max_rate[0 ]) { -u64 max_tx_rate = vsi->mqprio_qopt.max_rate[0 ]; +u64 max_tx_rate =i40e_bw_bytes_to_mbits (vsi, + vsi->mqprio_qopt.max_rate[0 ]);u64 credits =0 ; -do_div (max_tx_rate,I40E_BW_MBPS_DIVISOR ); ret =i40e_set_bw_limit (vsi, vsi->seid, max_tx_rate);if (ret) goto end_unlock;
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +20 -0
@@ -2038,6 +2038,25 @@ static void i40e_del_qch(struct i40e_vf *vf) } } +/** +* i40e_vc_get_max_frame_size +* @vf: pointer to the VF +* +* Max frame size is determined based on the current port's max frame size and +* whether a port VLAN is configured on this VF. The VF is not aware whether +* it's in a port VLAN so the PF needs to account for this in max frame size +* checks and sending the max frame size to the VF. +**/ +static u16 i40e_vc_get_max_frame_size (struct i40e_vf *vf) +{ +u16 max_frame_size = vf->pf->hw.phy.link_info.max_frame_size; + +if (vf->port_vlan_id) + max_frame_size -=VLAN_HLEN ; + +return max_frame_size; +} +/** * i40e_vc_get_vf_resources_msg * @vf: pointer to the VF info
@@ -2139,6 +2158,7 @@ static int i40e_vc_get_vf_resources_msg(struct i40e_vf *vf, u8 *msg) vfres->max_vectors = pf->hw.func_caps.num_msix_vectors_vf; vfres->rss_key_size =I40E_HKEY_ARRAY_SIZE ; vfres->rss_lut_size =I40E_VF_HLUT_ARRAY_SIZE ; + vfres->max_mtu =i40e_vc_get_max_frame_size (vf);if (vf->lan_vsi_idx) { vfres->vsi_res[0 ].vsi_id = vf->lan_vsi_id;
drivers/net/ethernet/intel/iavf/iavf_txrx.c +6 -3
@@ -114,8 +114,11 @@ u32 iavf_get_tx_pending(struct iavf_ring *ring, bool in_sw) {u32 head, tail; +/* underlying hardware might not allow access and/or always return +* 0 for the head/tail registers so just use the cached values +*/ head = ring->next_to_clean; - tail =readl (ring->tail); + tail = ring->next_to_use;if (head != tail) return (head < tail) ?
@@ -1355,7 +1358,7 @@ static struct sk_buff *iavf_build_skb(struct iavf_ring *rx_ring,#endif struct sk_buff *skb; -if (!rx_buffer) +if (!rx_buffer || !size)return NULL ;/* prefetch first cache line of first page */ va =page_address (rx_buffer->page) + rx_buffer->page_offset;
@@ -1513,7 +1516,7 @@ static int iavf_clean_rx_irq(struct iavf_ring *rx_ring, int budget)/* exit if we failed to retrieve a buffer */ if (!skb) { rx_ring->rx_stats.alloc_buff_failed++; -if (rx_buffer) +if (rx_buffer && size) rx_buffer->pagecnt_bias++;break ; }
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +5 -2
@@ -244,11 +244,14 @@ int iavf_get_vf_config(struct iavf_adapter *adapter)void iavf_configure_queues (struct iavf_adapter *adapter) {struct virtchnl_vsi_queue_config_info *vqci; -struct virtchnl_queue_pair_info *vqpi; +int i, max_frame = adapter->vf_res->max_mtu;int pairs = adapter->num_active_queues; -int i, max_frame =IAVF_MAX_RXBUFFER ; +struct virtchnl_queue_pair_info *vqpi;size_t len; +if (max_frame >IAVF_MAX_RXBUFFER || !max_frame) + max_frame =IAVF_MAX_RXBUFFER ; +if (adapter->current_op !=VIRTCHNL_OP_UNKNOWN ) {/* bail because we already have a command pending */ dev_err(&adapter->pdev->dev, "Cannot configure queues, command %d pending\n",
drivers/net/ethernet/intel/ice/ice_main.c +0 -2
@@ -2255,8 +2255,6 @@ int ice_schedule_reset(struct ice_pf *pf, enum ice_reset_req reset)return -EBUSY ; } -ice_unplug_aux_dev (pf); -switch (reset) {case ICE_RESET_PFR :set_bit (ICE_PFR_REQ , pf->state);
drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_mdio.c +6 -0
@@ -178,6 +178,9 @@ static int mlxbf_gige_mdio_read(struct mii_bus *bus, int phy_add, int phy_reg)/* Only return ad bits of the gw register */ ret &=MLXBF_GIGE_MDIO_GW_AD_MASK ; +/* The MDIO lock is set on read. To release it, clear gw register */ +writel (0 , priv->mdio_io +MLXBF_GIGE_MDIO_GW_OFFSET ); +return ret; }
@@ -201,6 +204,9 @@ static int mlxbf_gige_mdio_write(struct mii_bus *bus, int phy_add, ret =readl_poll_timeout_atomic (priv->mdio_io +MLXBF_GIGE_MDIO_GW_OFFSET , temp, !(temp &MLXBF_GIGE_MDIO_GW_BUSY_MASK ),100 ,1000000 ); +/* The MDIO lock is set on read. To release it, clear gw register */ +writel (0 , priv->mdio_io +MLXBF_GIGE_MDIO_GW_OFFSET ); +return ret; }
drivers/net/ethernet/microsoft/mana/gdma_main.c +10 -0
@@ -368,6 +368,11 @@ static void mana_gd_process_eq_events(void *arg)break ; } +/* Per GDMA spec, rmb is necessary after checking owner_bits, before +* reading eqe. +*/ +rmb (); +mana_gd_process_eqe (eq); eq->head++;
@@ -1096,6 +1101,11 @@ static int mana_gd_read_cqe(struct gdma_queue *cq, struct gdma_comp *comp)if (WARN_ON_ONCE (owner_bits != new_bits))return -1 ; +/* Per GDMA spec, rmb is necessary after checking owner_bits, before +* reading completion info +*/ +rmb (); + comp->wq_num = cqe->cqe_info.wq_num; comp->is_sq = cqe->cqe_info.is_sq;memcpy (comp->cqe_data, cqe->cqe_data,GDMA_COMP_DATA_SIZE );
drivers/net/ethernet/renesas/ravb_main.c +2 -0
@@ -1115,6 +1115,8 @@ static int ravb_phy_init(struct net_device *ndev)phy_remove_link_mode (phydev, ETHTOOL_LINK_MODE_1000baseT_Half_BIT);phy_remove_link_mode (phydev, ETHTOOL_LINK_MODE_100baseT_Half_BIT); +/* Indicate that the MAC is responsible for managing PHY PM */ + phydev->mac_managed_pm = true;phy_attached_info (phydev);return 0 ;
drivers/net/ethernet/renesas/sh_eth.c +2 -0
@@ -2033,6 +2033,8 @@ static int sh_eth_phy_init(struct net_device *ndev) } } +/* Indicate that the MAC is responsible for managing PHY PM */ + phydev->mac_managed_pm = true;phy_attached_info (phydev);return 0 ;
drivers/net/ethernet/sfc/efx_channels.c +1 -1
@@ -329,7 +329,7 @@ int efx_probe_interrupts(struct efx_nic *efx) efx->n_channels =1 + (efx_separate_tx_channels ?1 :0 ); efx->n_rx_channels =1 ; efx->n_tx_channels =1 ; - efx->tx_channel_offset =1 ; + efx->tx_channel_offset = efx_separate_tx_channels ?1 :0 ; efx->n_xdp_channels =0 ; efx->xdp_channel_offset = efx->n_channels; efx->legacy_irq = efx->pci_dev->irq;
drivers/net/ethernet/sfc/tx.c +1 -1
@@ -548,7 +548,7 @@ netdev_tx_t efx_hard_start_xmit(struct sk_buff *skb,* previous packets out. */ if (!netdev_xmit_more ()) -efx_tx_send_pending (tx_queue->channel); +efx_tx_send_pending (efx_get_tx_channel (efx, index));return NETDEV_TX_OK ; }
drivers/net/ethernet/sun/sunhme.c +2 -2
@@ -2039,9 +2039,9 @@ static void happy_meal_rx(struct happy_meal *hp, struct net_device *dev)skb_reserve (copy_skb,2 );skb_put (copy_skb, len); -dma_sync_single_for_cpu (hp->dma_dev, dma_addr, len,DMA_FROM_DEVICE ); +dma_sync_single_for_cpu (hp->dma_dev, dma_addr, len +2 ,DMA_FROM_DEVICE );skb_copy_from_linear_data (skb, copy_skb->data, len); -dma_sync_single_for_device (hp->dma_dev, dma_addr, len,DMA_FROM_DEVICE ); +dma_sync_single_for_device (hp->dma_dev, dma_addr, len +2 ,DMA_FROM_DEVICE );/* Reuse original ring buffer. */ hme_write_rxd(hp, this, (RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),
drivers/net/ipa/ipa_qmi.c +4 -4
@@ -308,12 +308,12 @@ init_modem_driver_req(struct ipa_qmi *ipa_qmi) mem =ipa_mem_find (ipa,IPA_MEM_V4_ROUTE ); req.v4_route_tbl_info_valid =1 ; req.v4_route_tbl_info.start = ipa->mem_offset + mem->offset; - req.v4_route_tbl_info.count = mem->size /sizeof (__le64); + req.v4_route_tbl_info.end =IPA_ROUTE_MODEM_COUNT -1 ; mem =ipa_mem_find (ipa,IPA_MEM_V6_ROUTE ); req.v6_route_tbl_info_valid =1 ; req.v6_route_tbl_info.start = ipa->mem_offset + mem->offset; - req.v6_route_tbl_info.count = mem->size /sizeof (__le64); + req.v6_route_tbl_info.end =IPA_ROUTE_MODEM_COUNT -1 ; mem =ipa_mem_find (ipa,IPA_MEM_V4_FILTER ); req.v4_filter_tbl_start_valid =1 ;
@@ -352,7 +352,7 @@ init_modem_driver_req(struct ipa_qmi *ipa_qmi) req.v4_hash_route_tbl_info_valid =1 ; req.v4_hash_route_tbl_info.start = ipa->mem_offset + mem->offset; - req.v4_hash_route_tbl_info.count = mem->size /sizeof (__le64); + req.v4_hash_route_tbl_info.end =IPA_ROUTE_MODEM_COUNT -1 ; } mem =ipa_mem_find (ipa,IPA_MEM_V6_ROUTE_HASHED );
@@ -360,7 +360,7 @@ init_modem_driver_req(struct ipa_qmi *ipa_qmi) req.v6_hash_route_tbl_info_valid =1 ; req.v6_hash_route_tbl_info.start = ipa->mem_offset + mem->offset; - req.v6_hash_route_tbl_info.count = mem->size /sizeof (__le64); + req.v6_hash_route_tbl_info.end =IPA_ROUTE_MODEM_COUNT -1 ; } mem =ipa_mem_find (ipa,IPA_MEM_V4_FILTER_HASHED );
drivers/net/ipa/ipa_qmi_msg.c +4 -4
@@ -311,7 +311,7 @@ struct qmi_elem_info ipa_init_modem_driver_req_ei[] = { .tlv_type = 0x12, .offset = offsetof(struct ipa_init_modem_driver_req, v4_route_tbl_info), - .ei_array = ipa_mem_array_ei, + .ei_array = ipa_mem_bounds_ei, }, { .data_type = QMI_OPT_FLAG,
@@ -332,7 +332,7 @@ struct qmi_elem_info ipa_init_modem_driver_req_ei[] = { .tlv_type = 0x13, .offset = offsetof(struct ipa_init_modem_driver_req, v6_route_tbl_info), - .ei_array = ipa_mem_array_ei, + .ei_array = ipa_mem_bounds_ei, }, { .data_type = QMI_OPT_FLAG,
@@ -496,7 +496,7 @@ struct qmi_elem_info ipa_init_modem_driver_req_ei[] = { .tlv_type = 0x1b, .offset = offsetof(struct ipa_init_modem_driver_req, v4_hash_route_tbl_info), - .ei_array = ipa_mem_array_ei, + .ei_array = ipa_mem_bounds_ei, }, { .data_type = QMI_OPT_FLAG,
@@ -517,7 +517,7 @@ struct qmi_elem_info ipa_init_modem_driver_req_ei[] = { .tlv_type = 0x1c, .offset = offsetof(struct ipa_init_modem_driver_req, v6_hash_route_tbl_info), - .ei_array = ipa_mem_array_ei, + .ei_array = ipa_mem_bounds_ei, }, { .data_type = QMI_OPT_FLAG,
drivers/net/ipa/ipa_qmi_msg.h +21 -16
@@ -86,9 +86,11 @@ enum ipa_platform_type { IPA_QMI_PLATFORM_TYPE_MSM_QNX_V01 = 0x5, /* QNX MSM */ }; -/* This defines the start and end offset of a range of memory. Both -* fields are offsets relative to the start of IPA shared memory. -* The end value is the last addressable byte *within* the range. +/* This defines the start and end offset of a range of memory. The start +* value is a byte offset relative to the start of IPA shared memory. The +* end value is the last addressable unit *within* the range. Typically +* the end value is in units of bytes, however it can also be a maximum +* array index value. */ struct ipa_mem_bounds {u32 start;
@@ -129,18 +131,19 @@ struct ipa_init_modem_driver_req {u8 hdr_tbl_info_valid;struct ipa_mem_bounds hdr_tbl_info; -/* Routing table information. These define the location and size of -* non-hashable IPv4 and IPv6 filter tables. The start values are -* offsets relative to the start of IPA shared memory. +/* Routing table information. These define the location and maximum +* *index* (not byte) for the modem portion of non-hashable IPv4 and +* IPv6 routing tables. The start values are byte offsets relative +* to the start of IPA shared memory. */ u8 v4_route_tbl_info_valid; -struct ipa_mem_array v4_route_tbl_info; +struct ipa_mem_bounds v4_route_tbl_info;u8 v6_route_tbl_info_valid; -struct ipa_mem_array v6_route_tbl_info; +struct ipa_mem_bounds v6_route_tbl_info;/* Filter table information. These define the location of the * non-hashable IPv4 and IPv6 filter tables. The start values are -* offsets relative to the start of IPA shared memory. +* byte offsets relative to the start of IPA shared memory. */ u8 v4_filter_tbl_start_valid;u32 v4_filter_tbl_start;
@@ -181,18 +184,20 @@ struct ipa_init_modem_driver_req {u8 zip_tbl_info_valid;struct ipa_mem_bounds zip_tbl_info; -/* Routing table information. These define the location and size -* of hashable IPv4 and IPv6 filter tables. The start values are -* offsets relative to the start of IPA shared memory. +/* Routing table information. These define the location and maximum +* *index* (not byte) for the modem portion of hashable IPv4 and IPv6 +* routing tables (if supported by hardware). The start values are +* byte offsets relative to the start of IPA shared memory. */ u8 v4_hash_route_tbl_info_valid; -struct ipa_mem_array v4_hash_route_tbl_info; +struct ipa_mem_bounds v4_hash_route_tbl_info;u8 v6_hash_route_tbl_info_valid; -struct ipa_mem_array v6_hash_route_tbl_info; +struct ipa_mem_bounds v6_hash_route_tbl_info;/* Filter table information. These define the location and size -* of hashable IPv4 and IPv6 filter tables. The start values are -* offsets relative to the start of IPA shared memory. +* of hashable IPv4 and IPv6 filter tables (if supported by hardware). +* The start values are byte offsets relative to the start of IPA +* shared memory. */ u8 v4_hash_filter_tbl_start_valid;u32 v4_hash_filter_tbl_start;
drivers/net/ipa/ipa_table.c +0 -2
@@ -108,8 +108,6 @@/* Assignment of route table entries to the modem and AP */ #define IPA_ROUTE_MODEM_MIN 0 -#define IPA_ROUTE_MODEM_COUNT 8 -#define IPA_ROUTE_AP_MIN IPA_ROUTE_MODEM_COUNT#define IPA_ROUTE_AP_COUNT \ (IPA_ROUTE_COUNT_MAX - IPA_ROUTE_MODEM_COUNT)
drivers/net/ipa/ipa_table.h +3 -0
@@ -13,6 +13,9 @@ struct ipa;/* The maximum number of filter table entries (IPv4, IPv6; hashed or not) */ #define IPA_FILTER_COUNT_MAX 14 +/* The number of route table entries allotted to the modem */ +#define IPA_ROUTE_MODEM_COUNT 8 +/* The maximum number of route table entries (IPv4, IPv6; hashed or not) */ #define IPA_ROUTE_COUNT_MAX 15
drivers/net/ipvlan/ipvlan_core.c +4 -2
@@ -496,7 +496,6 @@ static int ipvlan_process_v6_outbound(struct sk_buff *skb)static int ipvlan_process_outbound (struct sk_buff *skb) { -struct ethhdr *ethh =eth_hdr (skb);int ret =NET_XMIT_DROP ;/* The ipvlan is a pseudo-L2 device, so the packets that we receive
@@ -506,6 +505,8 @@ static int ipvlan_process_outbound(struct sk_buff *skb)if (skb_mac_header_was_set (skb)) {/* In this mode we dont care about * multicast and broadcast traffic */ +struct ethhdr *ethh =eth_hdr (skb); +if (is_multicast_ether_addr (ethh->h_dest)) { pr_debug_ratelimited( "Dropped {multi|broad}cast of type=[%x]\n",
@@ -590,7 +591,7 @@ static int ipvlan_xmit_mode_l3(struct sk_buff *skb, struct net_device *dev)static int ipvlan_xmit_mode_l2 (struct sk_buff *skb,struct net_device *dev) {const struct ipvl_dev *ipvlan =netdev_priv (dev); -struct ethhdr *eth =eth_hdr (skb); +struct ethhdr *eth =skb_eth_hdr (skb);struct ipvl_addr *addr;void *lyr3h;int addr_type;
@@ -620,6 +621,7 @@ static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev)return dev_forward_skb (ipvlan->phy_dev, skb); }else if (is_multicast_ether_addr (eth->h_dest)) { +skb_reset_mac_header (skb);ipvlan_skb_crossing_ns (skb,NULL );ipvlan_multicast_enqueue (ipvlan->port, skb, true);return NET_XMIT_SUCCESS ;
drivers/net/mdio/of_mdio.c +1 -0
@@ -231,6 +231,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)return 0 ; unregister: +of_node_put (child);mdiobus_unregister (mdio);return rc; }
drivers/net/phy/aquantia_main.c +49 -4
77 lines not on this page · raw message
drivers/net/team/team.c +18 -6
@@ -1270,10 +1270,12 @@ static int team_port_add(struct team *team, struct net_device *port_dev, } } -netif_addr_lock_bh (dev); -dev_uc_sync_multiple (port_dev, dev); -dev_mc_sync_multiple (port_dev, dev); -netif_addr_unlock_bh (dev); +if (dev->flags &IFF_UP ) { +netif_addr_lock_bh (dev); +dev_uc_sync_multiple (port_dev, dev); +dev_mc_sync_multiple (port_dev, dev); +netif_addr_unlock_bh (dev); + } port->index =-1 ;list_add_tail_rcu (&port->list, &team->port_list);
@@ -1344,8 +1346,10 @@ static int team_port_del(struct team *team, struct net_device *port_dev)netdev_rx_handler_unregister (port_dev);team_port_disable_netpoll (port);vlan_vids_del_by_dev (port_dev, dev); -dev_uc_unsync (port_dev, dev); -dev_mc_unsync (port_dev, dev); +if (dev->flags &IFF_UP ) { +dev_uc_unsync (port_dev, dev); +dev_mc_unsync (port_dev, dev); + }dev_close (port_dev);team_port_leave (team, port);
@@ -1695,6 +1699,14 @@ static int team_open(struct net_device *dev)static int team_close (struct net_device *dev) { +struct team *team =netdev_priv (dev); +struct team_port *port; + +list_for_each_entry (port, &team->port_list, list) { +dev_uc_unsync (port->dev, dev); +dev_mc_unsync (port->dev, dev); + } +return 0 ; }
drivers/net/wireguard/netlink.c +6 -7
@@ -436,14 +436,13 @@ static int set_peer(struct wg_device *wg, struct nlattr **attrs)if (attrs[WGPEER_A_ENDPOINT ]) {struct sockaddr *addr =nla_data (attrs[WGPEER_A_ENDPOINT ]);size_t len =nla_len (attrs[WGPEER_A_ENDPOINT ]); +struct endpoint endpoint = { { {0 } } }; -if ((len ==sizeof (struct sockaddr_in ) && - addr->sa_family ==AF_INET ) || - (len ==sizeof (struct sockaddr_in6 ) && - addr->sa_family ==AF_INET6 )) { -struct endpoint endpoint = { { {0 } } }; - -memcpy (&endpoint.addr, addr, len); +if (len ==sizeof (struct sockaddr_in ) && addr->sa_family ==AF_INET ) { + endpoint.addr4 = *(struct sockaddr_in *)addr; +wg_socket_set_peer_endpoint (peer, &endpoint); + }else if (len ==sizeof (struct sockaddr_in6 ) && addr->sa_family ==AF_INET6 ) { + endpoint.addr6 = *(struct sockaddr_in6 *)addr;wg_socket_set_peer_endpoint (peer, &endpoint); } }
drivers/net/wireguard/selftest/ratelimiter.c +10 -15
@@ -6,29 +6,28 @@#ifdef DEBUG #include <linux/jiffies.h> -#include <linux/hrtimer.h> static const struct {bool result; -u64 nsec_to_sleep_before; +unsigned int msec_to_sleep_before; } expected_results[]__initconst = { [0 ...PACKETS_BURSTABLE -1 ] = { true,0 }, [PACKETS_BURSTABLE ] = { false,0 }, - [PACKETS_BURSTABLE +1 ] = { true,NSEC_PER_SEC /PACKETS_PER_SECOND }, + [PACKETS_BURSTABLE +1 ] = { true,MSEC_PER_SEC /PACKETS_PER_SECOND }, [PACKETS_BURSTABLE +2 ] = { false,0 }, - [PACKETS_BURSTABLE +3 ] = { true, (NSEC_PER_SEC /PACKETS_PER_SECOND ) *2 }, + [PACKETS_BURSTABLE +3 ] = { true, (MSEC_PER_SEC /PACKETS_PER_SECOND ) *2 }, [PACKETS_BURSTABLE +4 ] = { true,0 }, [PACKETS_BURSTABLE +5 ] = { false,0 } };static __init unsigned int maximum_jiffies_at_index (int index) { -u64 total_nsecs =2 *NSEC_PER_SEC /PACKETS_PER_SECOND /3 ; +unsigned int total_msecs =2 *MSEC_PER_SEC /PACKETS_PER_SECOND /3 ;int i;for (i =0 ; i <= index; ++i) - total_nsecs += expected_results[i].nsec_to_sleep_before; -return nsecs_to_jiffies (total_nsecs); + total_msecs += expected_results[i].msec_to_sleep_before; +return msecs_to_jiffies (total_msecs); } static __init int timings_test(struct sk_buff *skb4, struct iphdr *hdr4,
@@ -43,12 +42,8 @@ static __init int timings_test(struct sk_buff *skb4, struct iphdr *hdr4, loop_start_time = jiffies;for (i =0 ; i <ARRAY_SIZE (expected_results); ++i) { -if (expected_results[i].nsec_to_sleep_before) { -ktime_t timeout =ktime_add (ktime_add_ns (ktime_get_coarse_boottime (),TICK_NSEC *4 /3 ), -ns_to_ktime (expected_results[i].nsec_to_sleep_before)); -set_current_state (TASK_UNINTERRUPTIBLE ); -schedule_hrtimeout_range_clock (&timeout,0 ,HRTIMER_MODE_ABS ,CLOCK_BOOTTIME ); - } +if (expected_results[i].msec_to_sleep_before) +msleep (expected_results[i].msec_to_sleep_before);if (time_is_before_jiffies (loop_start_time +maximum_jiffies_at_index (i)))
@@ -132,7 +127,7 @@ bool __init wg_ratelimiter_selftest(void)if (IS_ENABLED (CONFIG_KASAN ) ||IS_ENABLED (CONFIG_UBSAN ))return true; -BUILD_BUG_ON (NSEC_PER_SEC %PACKETS_PER_SECOND !=0 ); +BUILD_BUG_ON (MSEC_PER_SEC %PACKETS_PER_SECOND !=0 );if (wg_ratelimiter_init ()) goto out;
@@ -172,7 +167,7 @@ bool __init wg_ratelimiter_selftest(void) ++test;#endif -for (trials =TRIALS_BEFORE_GIVING_UP ;;) { +for (trials =TRIALS_BEFORE_GIVING_UP ;IS_ENABLED (DEBUG_RATELIMITER_TIMINGS );) {int test_count =0 , ret; ret =timings_test (skb4, hdr4, skb6, hdr6, &test_count);
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +1 -1
@@ -1038,7 +1038,7 @@ u32 mt7615_mac_get_sta_tid_sn(struct mt7615_dev *dev, int wcid, u8 tid) offset %=32 ; val =mt76_rr (dev, addr); - val >>= (tid %32 ); + val >>= offset;if (offset >20 ) { addr +=4 ;
drivers/s390/block/dasd_alias.c +7 -2
@@ -675,12 +675,12 @@ int dasd_alias_remove_device(struct dasd_device *device)struct dasd_device *dasd_alias_get_start_dev (struct dasd_device *base_device) {struct dasd_eckd_private *alias_priv, *private = base_device->private; -struct alias_pav_group *group = private->pavgroup;struct alias_lcu *lcu = private->lcu;struct dasd_device *alias_device; +struct alias_pav_group *group;unsigned long flags; -if (!group || !lcu) +if (!lcu)return NULL ;if (lcu->pav ==NO_PAV || lcu->flags & (NEED_UAC_UPDATE |UPDATE_PENDING ))
@@ -697,6 +697,11 @@ struct dasd_device *dasd_alias_get_start_dev(struct dasd_device *base_device) }spin_lock_irqsave (&lcu->lock, flags); + group = private->pavgroup; +if (!group) { +spin_unlock_irqrestore (&lcu->lock, flags); +return NULL ; + } alias_device = group->next;if (!alias_device) {if (list_empty (&group->aliaslist)) {
drivers/scsi/mpt3sas/mpt3sas_base.c +1 -1
@@ -3005,7 +3005,7 @@ _base_config_dma_addressing(struct MPT3SAS_ADAPTER *ioc, struct pci_dev *pdev)if (ioc->is_mcpu_endpoint ||sizeof (dma_addr_t) ==4 || ioc->use_32bit_dma || -dma_get_required_mask (&pdev->dev) <=32 ) +dma_get_required_mask (&pdev->dev) <=DMA_BIT_MASK (32 )) ioc->dma_mask =32 ;/* Set 63 bit DMA mask for all SAS3 and SAS35 controllers */ else if (ioc->hba_mpi_version_belonged >MPI2_VERSION )
drivers/scsi/qla2xxx/qla_target.c +3 -1
@@ -2166,8 +2166,10 @@ static int __qlt_24xx_handle_abts(struct scsi_qla_host *vha, abort_cmd = ha->tgt.tgt_ops->find_cmd_by_tag (sess,le32_to_cpu (abts->exchange_addr_to_abort)); -if (!abort_cmd) +if (!abort_cmd) { +mempool_free (mcmd, qla_tgt_mgmt_cmd_mempool);return -EIO ; + } mcmd->unpacked_lun = abort_cmd->se_cmd.orig_fe_lun;if (abort_cmd->qpair) {
drivers/staging/r8188eu/os_dep/usb_intf.c +1 -1
@@ -30,7 +30,7 @@ static struct usb_device_id rtw_usb_id_tbl[] = {/*=== Realtek demoboard ===*/ {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)}, /* 8188EUS */ {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */ - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0xf179)}, /* 8188FU */ + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0xffef)}, /* Rosewill USB-N150 Nano *//*=== Customer ID ===*/ /****** 8188EUS ********/ {USB_DEVICE(0x07B8, 0x8179)}, /* Abocom - Abocom */
drivers/thunderbolt/icm.c +1 -0
@@ -2522,6 +2522,7 @@ struct tb *icm_probe(struct tb_nhi *nhi) tb->cm_ops = &icm_icl_ops;break ; +case PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_2C_NHI :case PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_4C_NHI : icm->is_supported = icm_tgl_is_supported; icm->get_mode = icm_ar_get_mode;
drivers/thunderbolt/nhi.h +1 -0
@@ -55,6 +55,7 @@ extern const struct tb_nhi_ops icl_nhi_ops;* need for the PCI quirk anymore as we will use ICM also on Apple * hardware. */ +#define PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_2C_NHI 0x1134#define PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_4C_NHI 0x1137#define PCI_DEVICE_ID_INTEL_WIN_RIDGE_2C_NHI 0x157d#define PCI_DEVICE_ID_INTEL_WIN_RIDGE_2C_BRIDGE 0x157e
drivers/tty/serial/fsl_lpuart.c +5 -4
@@ -2726,14 +2726,15 @@ static int lpuart_probe(struct platform_device *pdev) lpuart_reg.cons =LPUART_CONSOLE ; handler = lpuart_int; } - ret =uart_add_one_port (&lpuart_reg, &sport->port); -if (ret) - goto failed_attach_port; ret =lpuart_global_reset (sport);if (ret) goto failed_reset; + ret =uart_add_one_port (&lpuart_reg, &sport->port); +if (ret) + goto failed_attach_port; + ret =uart_get_rs485_mode (&sport->port);if (ret) goto failed_get_rs485;
@@ -2756,9 +2757,9 @@ static int lpuart_probe(struct platform_device *pdev) failed_irq_request: failed_get_rs485: -failed_reset:uart_remove_one_port (&lpuart_reg, &sport->port); failed_attach_port: +failed_reset:lpuart_disable_clks (sport);return ret; }
drivers/tty/serial/serial-tegra.c +2 -3
@@ -525,7 +525,7 @@ static void tegra_uart_tx_dma_complete(void *args) count = tup->tx_bytes_requested - state.residue;async_tx_ack (tup->tx_dma_desc);spin_lock_irqsave (&tup->uport.lock, flags); - xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE -1 ); +uart_xmit_advance (&tup->uport, count); tup->tx_in_progress =0 ;if (uart_circ_chars_pending (xmit) <WAKEUP_CHARS )uart_write_wakeup (&tup->uport);
@@ -613,7 +613,6 @@ static unsigned int tegra_uart_tx_empty(struct uart_port *u)static void tegra_uart_stop_tx (struct uart_port *u) {struct tegra_uart_port *tup =to_tegra_uport (u); -struct circ_buf *xmit = &tup->uport.state->xmit;struct dma_tx_state state;unsigned int count;
@@ -624,7 +623,7 @@ static void tegra_uart_stop_tx(struct uart_port *u)dmaengine_tx_status (tup->tx_dma_chan, tup->tx_cookie, &state); count = tup->tx_bytes_requested - state.residue;async_tx_ack (tup->tx_dma_desc); - xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE -1 ); +uart_xmit_advance (&tup->uport, count); tup->tx_in_progress =0 ; }
drivers/tty/serial/tegra-tcu.c +1 -1
@@ -101,7 +101,7 @@ static void tegra_tcu_uart_start_tx(struct uart_port *port)break ;tegra_tcu_write (tcu, &xmit->buf[xmit->tail], count); - xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE -1 ); +uart_xmit_advance (port, count); }uart_write_wakeup (port);
drivers/usb/core/hub.c +1 -1
@@ -6044,7 +6044,7 @@ static int usb_reset_and_verify_device(struct usb_device *udev)* * Return: The same as for usb_reset_and_verify_device(). * However, if a reset is already in progress (for instance, if a -* driver doesn't have pre_ or post_reset() callbacks, and while +* driver doesn't have pre_reset() or post_reset() callbacks, and while * being unbound or re-bound during the ongoing reset its disconnect() * or probe() routine tries to perform a second, nested reset), the * routine returns -EINPROGRESS.
drivers/usb/dwc3/core.c +8 -9
@@ -114,8 +114,6 @@ void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode) dwc->current_dr_role = mode; } -static int dwc3_core_soft_reset (struct dwc3 *dwc); -static void __dwc3_set_mode (struct work_struct *work) {struct dwc3 *dwc =work_to_dwc (work);
@@ -265,7 +263,7 @@ u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type)* dwc3_core_soft_reset - Issues core soft reset and PHY reset * @dwc: pointer to our context structure */ -static int dwc3_core_soft_reset (struct dwc3 *dwc) +int dwc3_core_soft_reset (struct dwc3 *dwc) {u32 reg;int retries =1000 ;
@@ -1572,12 +1570,6 @@ static int dwc3_probe(struct platform_device *pdev)dwc3_get_properties (dwc); -if (!dwc->sysdev_is_parent) { - ret =dma_set_mask_and_coherent (dwc->sysdev,DMA_BIT_MASK (64 )); -if (ret) -return ret; - } - dwc->reset =devm_reset_control_array_get_optional_shared (dev);if (IS_ERR (dwc->reset))return PTR_ERR (dwc->reset);
@@ -1614,6 +1606,13 @@ static int dwc3_probe(struct platform_device *pdev)platform_set_drvdata (pdev, dwc);dwc3_cache_hwparams (dwc); +if (!dwc->sysdev_is_parent && +DWC3_GHWPARAMS0_AWIDTH (dwc->hwparams.hwparams0) ==64 ) { + ret =dma_set_mask_and_coherent (dwc->sysdev,DMA_BIT_MASK (64 )); +if (ret) + goto disable_clks; + } +spin_lock_init (&dwc->lock);mutex_init (&dwc->mutex);
drivers/usb/dwc3/core.h +4 -0
@@ -1028,6 +1028,7 @@ struct dwc3_scratchpad_array {* @tx_fifo_resize_max_num: max number of fifos allocated during txfifo resize * @hsphy_interface: "utmi" or "ulpi" * @connected: true when we're connected to a host, false otherwise +* @softconnect: true when gadget connect is called, false when disconnect runs * @delayed_status: true when gadget driver asks for delayed status * @ep0_bounced: true when we used bounce buffer * @ep0_expect_in: true when we expect a DATA IN transfer
@@ -1247,6 +1248,7 @@ struct dwc3 {const char *hsphy_interface; unsigned connected:1; + unsigned softconnect:1; unsigned delayed_status:1; unsigned ep0_bounced:1; unsigned ep0_expect_in:1;
@@ -1508,6 +1510,8 @@ bool dwc3_has_imod(struct dwc3 *dwc);int dwc3_event_buffers_setup (struct dwc3 *dwc);void dwc3_event_buffers_cleanup (struct dwc3 *dwc); +int dwc3_core_soft_reset (struct dwc3 *dwc); +#if IS_ENABLED (CONFIG_USB_DWC3_HOST ) ||IS_ENABLED (CONFIG_USB_DWC3_DUAL_ROLE )int dwc3_host_init (struct dwc3 *dwc);void dwc3_host_exit (struct dwc3 *dwc);
drivers/usb/dwc3/gadget.c +43 -38
114 lines not on this page · raw message
drivers/usb/serial/option.c +6 -0
@@ -256,6 +256,7 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_PRODUCT_EM060K 0x030b#define QUECTEL_PRODUCT_EM12 0x0512#define QUECTEL_PRODUCT_RM500Q 0x0800 +#define QUECTEL_PRODUCT_RM520N 0x0801#define QUECTEL_PRODUCT_EC200S_CN 0x6002#define QUECTEL_PRODUCT_EC200T 0x6026#define QUECTEL_PRODUCT_RM500K 0x7001
@@ -1138,6 +1139,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff), .driver_info = NUMEP2 }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, 0x0203, 0xff), /* BG95-M3 */ + .driver_info = ZLP }, { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96), .driver_info = RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
@@ -1159,6 +1162,9 @@ 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_RM520N, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM520N, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500K, 0xff, 0x00, 0x00) },
fs/btrfs/disk-io.c +36 -6
25 lines not on this page · raw message
fs/ext4/mballoc.c +38 -31
69 lines not on this page · raw message
tools/perf/util/bpf_skel/bperf_cgroup.bpf.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/sch_red.sh +1 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.