Linux 5.10.147
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.147 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/am33xx-l4.dtsi | 3 arch/arm/boot/dts/integratorap.dts | 1 arch/x86/kernel/alternative.c | 45 +++++----- arch/x86/kvm/cpuid.c | 2 drivers/ata/libata-core.c | 4 drivers/clk/bcm/clk-iproc-pll.c | 12 +- drivers/clk/imx/clk-imx6sx.c | 4 drivers/clk/ingenic/tcu.c | 15 +-- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 13 --- drivers/input/keyboard/snvs_pwrkey.c | 2 drivers/input/touchscreen/melfas_mip4.c | 2 drivers/media/dvb-core/dvb_vb2.c | 11 ++ drivers/mmc/host/mmc_hsq.c | 2 drivers/mmc/host/moxart-mmc.c | 17 ---- drivers/net/dsa/mt7530.c | 15 ++- drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c | 28 ++++-- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 23 +++-- drivers/net/usb/qmi_wwan.c | 1 drivers/net/usb/usbnet.c | 7 + drivers/nvme/host/core.c | 9 +- drivers/reset/reset-imx7.c | 1 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 7 - drivers/soc/sunxi/sunxi_sram.c | 27 ++---- drivers/staging/media/rkvdec/rkvdec-h264.c | 4 drivers/thunderbolt/icm.c | 12 ++ drivers/thunderbolt/nhi.h | 2 drivers/thunderbolt/switch.c | 1 drivers/usb/storage/unusual_uas.h | 21 +++++ drivers/usb/typec/ucsi/ucsi.c | 2 fs/btrfs/disk-io.c | 25 +++++ fs/ntfs/super.c | 3 kernel/dma/swiotlb.c | 13 ++- mm/madvise.c | 7 + mm/migrate.c | 5 - mm/page_alloc.c | 65 +++++++++++++-- net/sched/act_ct.c | 5 - sound/pci/hda/hda_tegra.c | 88 ++++++--------------- sound/pci/hda/patch_hdmi.c | 47 +++++++++-- sound/soc/codecs/tas2770.c | 3 tools/testing/selftests/net/reuseport_bpf.c | 2 41 files changed, 345 insertions(+), 213 deletions(-)
Aidan MacDonald (1):
clk: ingenic-tcu: Properly enable registers before accessing timers
Alexander Couzens (1):
net: mt7531: only do PLL once after the reset
Alistair Popple (1):
mm/migrate_device.c: flush TLB while holding PTL
Brian Norris (1):
Revert "drm: bridge: analogix/dp: add panel prepare/unprepare in suspend/resume time"
Cai Huoqing (1):
soc: sunxi_sram: Make use of the helper function devm_platform_ioremap_resource()
Chaitanya Kulkarni (1):
nvme: add new line after variable declatation
ChenXiaoSong (1):
ntfs: fix BUG_ON in ntfs_lookup_inode_by_name()
Dmitry Osipenko (2):
ALSA: hda/tegra: Use clk_bulk helpers
ALSA: hda/tegra: Reset hardware
Filipe Manana (1):
btrfs: fix hang during unmount when stopping a space reclaim worker
Florian Fainelli (1):
clk: iproc: Do not rely on node name for correct PLL setup
Frank Wunderlich (1):
net: usb: qmi_wwan: Add new usb-id for Dell branded EM7455
Gil Fine (1):
thunderbolt: Add support for Intel Maple Ridge single port controller
Greg Kroah-Hartman (1):
Linux 5.10.147
Han Xu (1):
clk: imx: imx6sx: remove the SET_RATE_PARENT flag for QSPI clocks
Hangyu Hua (2):
media: dvb_vb2: fix possible out of bound access
net: sched: act_ct: fix possible refcount leak in tcf_ct_init()
Heikki Krogerus (1):
usb: typec: ucsi: Remove incorrect warning
Hongling Zeng (3):
uas: add no-uas quirk for Hiksemi usb_disk
usb-storage: Add Hiksemi USB3-FW to IGNORE_UAS
uas: ignore UAS for Thinkplus chips
Hui Wang (1):
ALSA: hda/hdmi: let new platforms assign the pcm slot dynamically
Jim Mattson (1):
KVM: x86: Hide IA32_PLATFORM_DCA_CAP[31:0] from the guest
Junxiao Chang (1):
net: stmmac: power up/down serdes in stmmac_open/release
Kai Vehmanen (1):
ALSA: hda/hdmi: fix warning about PCM count when used with SOF
Linus Walleij (1):
ARM: dts: integrator: Tag PCI host with device_type
Mario Limonciello (1):
thunderbolt: Explicitly reset plug events delay back to USB4 spec value
Martin Povišer (1):
ASoC: tas2770: Reinit regcache on reset
Maurizio Lombardi (1):
mm: prevent page_frag_alloc() from corrupting the memory
Mel Gorman (1):
mm/page_alloc: fix race condition between build_all_zonelists and page allocation
Michael Kelley (1):
nvme: Fix IOC_PR_CLEAR and IOC_PR_RELEASE ioctls for nvme devices
Mika Westerberg (1):
thunderbolt: Add support for Intel Maple Ridge
Minchan Kim (1):
mm: fix madivse_pageout mishandling on non-LRU page
Mohan Kumar (1):
ALSA: hda: Fix Nvidia dp infoframe
Nadav Amit (1):
x86/alternative: Fix race in try_get_desc()
Nicolas Dufresne (1):
media: rkvdec: Disable H.264 error detection
Niklas Cassel (1):
libata: add ATA_HORKAGE_NOLPM for Pioneer BDR-207M and BDR-205
Peilin Ye (1):
usbnet: Fix memory leak in usbnet_disconnect()
Rafael Mendonca (1):
cxgb4: fix missing unlock on ETHOFLD desc collect fail path
Richard Zhu (1):
reset: imx7: Fix the iMX8MP PCIe PHY PERST support
Samuel Holland (4):
soc: sunxi: sram: Actually claim SRAM regions
soc: sunxi: sram: Prevent the driver from being unbound
soc: sunxi: sram: Fix probe function ordering issues
soc: sunxi: sram: Fix debugfs info for A64 SRAM C
Sebastian Krzyszkowiak (1):
Input: snvs_pwrkey - fix SNVS_HPVIDR1 register address
Sergei Antonov (1):
mmc: moxart: fix 4-bit bus width and remove 8-bit bus width
Tianyu Lan (1):
swiotlb: max mapping size takes min align mask into account
Wang Yufen (1):
selftests: Fix the if conditions of in test_extra_filter()
Wenchao Chen (1):
mmc: hsq: Fix data stomping during mmc recovery
Yang Yingliang (1):
Input: melfas_mip4 - fix return value check in mip4_probe()
Yu Kuai (1):
scsi: hisi_sas: Revert "scsi: hisi_sas: Limit max hw sectors for v3 HW"
YuTong Chang (1):
ARM: dts: am33xx: Fix MMCHS0 dma properties
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 146 +SUBLEVEL = 147 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/am33xx-l4.dtsi +1 -2
@@ -1352,8 +1352,7 @@ SYSC_OMAP2_SOFTRESET | mmc1: mmc@0 { compatible = "ti,am335-sdhci"; ti,needs-special-reset; - dmas = <&edma_xbar 24 0 0 - &edma_xbar 25 0 0>; + dmas = <&edma 24 0>, <&edma 25 0>; dma-names = "tx", "rx"; interrupts = <64>; reg = <0x0 0x1000>;
arch/arm/boot/dts/integratorap.dts +1 -0
@@ -153,6 +153,7 @@ pic: pic@14000000 { pci: pciv3@62000000 { compatible = "arm,integrator-ap-pci", "v3,v360epc-pci"; + device_type = "pci"; #interrupt-cells = <1>; #size-cells = <2>; #address-cells = <3>;
arch/x86/kernel/alternative.c +23 -22
97 lines not on this page · raw message
arch/x86/kvm/cpuid.c +0 -2
@@ -661,8 +661,6 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->edx =0 ; }break ; -case 9 : -break ;case 0xa : {/* Architectural Performance Monitoring */ struct x86_pmu_capability cap;union cpuid10_eax eax;
drivers/ata/libata-core.c +4 -0
@@ -3936,6 +3936,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { { "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER }, { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER }, +/* These specific Pioneer models have LPM issues */ + { "PIONEER BD-RW BDR-207M", NULL, ATA_HORKAGE_NOLPM }, + { "PIONEER BD-RW BDR-205", NULL, ATA_HORKAGE_NOLPM }, +/* Crucial BX100 SSD 500GB has broken LPM support */ { "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM },
drivers/clk/bcm/clk-iproc-pll.c +8 -4
@@ -736,6 +736,7 @@ void iproc_pll_clk_setup(struct device_node *node,const char *parent_name;struct iproc_clk *iclk_array;struct clk_hw_onecell_data *clk_data; +const char *clk_name;if (WARN_ON (!pll_ctrl) ||WARN_ON (!clk_ctrl))return ;
@@ -783,7 +784,12 @@ void iproc_pll_clk_setup(struct device_node *node, iclk = &iclk_array[0 ]; iclk->pll = pll; - init.name = node->name; + ret =of_property_read_string_index (node,"clock-output-names" , +0 , &clk_name); +if (WARN_ON (ret)) + goto err_pll_register; + + init.name = clk_name; init.ops = &iproc_pll_ops; init.flags =0 ; parent_name =of_clk_get_parent_name (node,0 );
@@ -803,13 +809,11 @@ void iproc_pll_clk_setup(struct device_node *node, goto err_pll_register; clk_data->hws[0 ] = &iclk->hw; + parent_name = clk_name;/* now initialize and register all leaf clocks */ for (i =1 ; i < num_clks; i++) { -const char *clk_name; -memset (&init,0 ,sizeof (init)); - parent_name = node->name; ret =of_property_read_string_index (node,"clock-output-names" , i, &clk_name);
drivers/clk/imx/clk-imx6sx.c +2 -2
@@ -280,13 +280,13 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node) hws[IMX6SX_CLK_SSI3_SEL ] =imx_clk_hw_mux ("ssi3_sel" , base +0x1c ,14 ,2 , ssi_sels,ARRAY_SIZE (ssi_sels)); hws[IMX6SX_CLK_SSI2_SEL ] =imx_clk_hw_mux ("ssi2_sel" , base +0x1c ,12 ,2 , ssi_sels,ARRAY_SIZE (ssi_sels)); hws[IMX6SX_CLK_SSI1_SEL ] =imx_clk_hw_mux ("ssi1_sel" , base +0x1c ,10 ,2 , ssi_sels,ARRAY_SIZE (ssi_sels)); - hws[IMX6SX_CLK_QSPI1_SEL ] =imx_clk_hw_mux_flags ("qspi1_sel" , base +0x1c ,7 ,3 , qspi1_sels,ARRAY_SIZE (qspi1_sels),CLK_SET_RATE_PARENT ); + hws[IMX6SX_CLK_QSPI1_SEL ] =imx_clk_hw_mux ("qspi1_sel" , base +0x1c ,7 ,3 , qspi1_sels,ARRAY_SIZE (qspi1_sels)); hws[IMX6SX_CLK_PERCLK_SEL ] =imx_clk_hw_mux ("perclk_sel" , base +0x1c ,6 ,1 , perclk_sels,ARRAY_SIZE (perclk_sels)); hws[IMX6SX_CLK_VID_SEL ] =imx_clk_hw_mux ("vid_sel" , base +0x20 ,21 ,3 , vid_sels,ARRAY_SIZE (vid_sels)); hws[IMX6SX_CLK_ESAI_SEL ] =imx_clk_hw_mux ("esai_sel" , base +0x20 ,19 ,2 , audio_sels,ARRAY_SIZE (audio_sels)); hws[IMX6SX_CLK_CAN_SEL ] =imx_clk_hw_mux ("can_sel" , base +0x20 ,8 ,2 , can_sels,ARRAY_SIZE (can_sels)); hws[IMX6SX_CLK_UART_SEL ] =imx_clk_hw_mux ("uart_sel" , base +0x24 ,6 ,1 , uart_sels,ARRAY_SIZE (uart_sels)); - hws[IMX6SX_CLK_QSPI2_SEL ] =imx_clk_hw_mux_flags ("qspi2_sel" , base +0x2c ,15 ,3 , qspi2_sels,ARRAY_SIZE (qspi2_sels),CLK_SET_RATE_PARENT ); + hws[IMX6SX_CLK_QSPI2_SEL ] =imx_clk_hw_mux ("qspi2_sel" , base +0x2c ,15 ,3 , qspi2_sels,ARRAY_SIZE (qspi2_sels)); hws[IMX6SX_CLK_SPDIF_SEL ] =imx_clk_hw_mux ("spdif_sel" , base +0x30 ,20 ,2 , audio_sels,ARRAY_SIZE (audio_sels)); hws[IMX6SX_CLK_AUDIO_SEL ] =imx_clk_hw_mux ("audio_sel" , base +0x30 ,7 ,2 , audio_sels,ARRAY_SIZE (audio_sels)); hws[IMX6SX_CLK_ENET_PRE_SEL ] =imx_clk_hw_mux ("enet_pre_sel" , base +0x34 ,15 ,3 , enet_pre_sels,ARRAY_SIZE (enet_pre_sels));
drivers/clk/ingenic/tcu.c +5 -10
@@ -100,15 +100,11 @@ static bool ingenic_tcu_enable_regs(struct clk_hw *hw)bool enabled = false;/* -* If the SoC has no global TCU clock, we must ungate the channel's -* clock to be able to access its registers. -* If we have a TCU clock, it will be enabled automatically as it has -* been attached to the regmap. +* According to the programming manual, a timer channel's registers can +* only be accessed when the channel's stop bit is clear. */ -if (!tcu->clk) { - enabled = !!ingenic_tcu_is_enabled (hw); -regmap_write (tcu->map,TCU_REG_TSCR ,BIT (info->gate_bit)); - } + enabled = !!ingenic_tcu_is_enabled (hw); +regmap_write (tcu->map,TCU_REG_TSCR ,BIT (info->gate_bit));return enabled; }
@@ -119,8 +115,7 @@ static void ingenic_tcu_disable_regs(struct clk_hw *hw)const struct ingenic_tcu_clk_info *info = tcu_clk->info;struct ingenic_tcu *tcu = tcu_clk->tcu; -if (!tcu->clk) -regmap_write (tcu->map,TCU_REG_TSSR ,BIT (info->gate_bit)); +regmap_write (tcu->map,TCU_REG_TSSR ,BIT (info->gate_bit)); }static u8 ingenic_tcu_get_parent (struct clk_hw *hw)
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +0 -13
@@ -1865,12 +1865,6 @@ EXPORT_SYMBOL_GPL(analogix_dp_remove);int analogix_dp_suspend (struct analogix_dp_device *dp) {clk_disable_unprepare (dp->clock); - -if (dp->plat_data->panel) { -if (drm_panel_unprepare (dp->plat_data->panel)) -DRM_ERROR ("failed to turnoff the panel\n" ); - } -return 0 ; }EXPORT_SYMBOL_GPL (analogix_dp_suspend);
@@ -1885,13 +1879,6 @@ int analogix_dp_resume(struct analogix_dp_device *dp)return ret; } -if (dp->plat_data->panel) { -if (drm_panel_prepare (dp->plat_data->panel)) { -DRM_ERROR ("failed to setup the panel\n" ); -return -EBUSY ; - } - } -return 0 ; }EXPORT_SYMBOL_GPL (analogix_dp_resume);
drivers/input/keyboard/snvs_pwrkey.c +1 -1
@@ -20,7 +20,7 @@#include <linux/mfd/syscon.h> #include <linux/regmap.h> -#define SNVS_HPVIDR1_REG 0xF8 +#define SNVS_HPVIDR1_REG 0xBF8#define SNVS_LPSR_REG 0x4C/* LP Status Register */ #define SNVS_LPCR_REG 0x38/* LP Control Register */ #define SNVS_HPSR_REG 0x14
drivers/input/touchscreen/melfas_mip4.c +1 -1
@@ -1453,7 +1453,7 @@ static int mip4_probe(struct i2c_client *client, const struct i2c_device_id *id) "ce", GPIOD_OUT_LOW);if (IS_ERR (ts->gpio_ce)) { error =PTR_ERR (ts->gpio_ce); -if (error !=EPROBE_DEFER ) +if (error != -EPROBE_DEFER )dev_err (&client->dev,"Failed to get gpio: %d\n" , error);return error;
drivers/media/dvb-core/dvb_vb2.c +11 -0
@@ -358,6 +358,12 @@ int dvb_vb2_reqbufs(struct dvb_vb2_ctx *ctx, struct dmx_requestbuffers *req)int dvb_vb2_querybuf (struct dvb_vb2_ctx *ctx,struct dmx_buffer *b) { +struct vb2_queue *q = &ctx->vb_q; + +if (b->index >= q->num_buffers) { +dprintk (1 ,"[%s] buffer index out of range\n" , ctx->name); +return -EINVAL ; + }vb2_core_querybuf (&ctx->vb_q, b->index, b);dprintk (3 ,"[%s] index=%d\n" , ctx->name, b->index);return 0 ;
@@ -382,8 +388,13 @@ int dvb_vb2_expbuf(struct dvb_vb2_ctx *ctx, struct dmx_exportbuffer *exp)int dvb_vb2_qbuf (struct dvb_vb2_ctx *ctx,struct dmx_buffer *b) { +struct vb2_queue *q = &ctx->vb_q;int ret; +if (b->index >= q->num_buffers) { +dprintk (1 ,"[%s] buffer index out of range\n" , ctx->name); +return -EINVAL ; + } ret =vb2_core_qbuf (&ctx->vb_q, b->index, b,NULL );if (ret) { dprintk(1, "[%s] index=%d errno=%d\n", ctx->name,
drivers/mmc/host/mmc_hsq.c +1 -1
@@ -34,7 +34,7 @@ static void mmc_hsq_pump_requests(struct mmc_hsq *hsq)spin_lock_irqsave (&hsq->lock, flags);/* Make sure we are not already running a request now */ -if (hsq->mrq) { +if (hsq->mrq || hsq->recovery_halt) {spin_unlock_irqrestore (&hsq->lock, flags);return ; }
drivers/mmc/host/moxart-mmc.c +3 -14
@@ -111,8 +111,8 @@#define CLK_DIV_MASK 0x7f/* REG_BUS_WIDTH */ -#define BUS_WIDTH_8 BIT(2) -#define BUS_WIDTH_4 BIT(1) +#define BUS_WIDTH_4_SUPPORT BIT(3) +#define BUS_WIDTH_4 BIT(2)#define BUS_WIDTH_1 BIT(0)#define MMC_VDD_360 23
@@ -527,9 +527,6 @@ static void moxart_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)case MMC_BUS_WIDTH_4 :writel (BUS_WIDTH_4 , host->base +REG_BUS_WIDTH );break ; -case MMC_BUS_WIDTH_8 : -writel (BUS_WIDTH_8 , host->base +REG_BUS_WIDTH ); -break ;default :writel (BUS_WIDTH_1 , host->base +REG_BUS_WIDTH );break ;
@@ -654,16 +651,8 @@ static int moxart_probe(struct platform_device *pdev)dmaengine_slave_config (host->dma_chan_rx, &cfg); } -switch ((readl (host->base +REG_BUS_WIDTH ) >>3 ) &3 ) { -case 1 : +if (readl (host->base +REG_BUS_WIDTH ) &BUS_WIDTH_4_SUPPORT ) mmc->caps |=MMC_CAP_4_BIT_DATA ; -break ; -case 2 : - mmc->caps |=MMC_CAP_4_BIT_DATA |MMC_CAP_8_BIT_DATA ; -break ; -default : -break ; - }writel (0 , host->base +REG_INTERRUPT_MASK );
drivers/net/dsa/mt7530.c +9 -6
@@ -502,14 +502,19 @@ static bool mt7531_dual_sgmii_supported(struct mt7530_priv *priv)static int mt7531_pad_setup (struct dsa_switch *ds,phy_interface_t interface) { -struct mt7530_priv *priv = ds->priv; +return 0 ; +} + +static void +mt7531_pll_setup (struct mt7530_priv *priv) +{u32 top_sig;u32 hwstrap;u32 xtal;u32 val;if (mt7531_dual_sgmii_supported (priv)) -return 0 ; +return ; val =mt7530_read (priv,MT7531_CREV ); top_sig =mt7530_read (priv,MT7531_TOP_SIG_SR );
@@ -588,8 +593,6 @@ mt7531_pad_setup(struct dsa_switch *ds, phy_interface_t interface) val |=EN_COREPLL ;mt7530_write (priv,MT7531_PLLGP_EN , val);usleep_range (25 ,35 ); - -return 0 ; } static void
@@ -1731,6 +1734,8 @@ mt7531_setup(struct dsa_switch *ds)SYS_CTRL_PHY_RST |SYS_CTRL_SW_RST | SYS_CTRL_REG_RST); +mt7531_pll_setup (priv); +if (mt7531_dual_sgmii_supported (priv)) { priv->p5_intf_sel =P5_INTF_SEL_GMAC5_SGMII ;
@@ -2281,8 +2286,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port)case 6 : interface =PHY_INTERFACE_MODE_2500BASEX ; -mt7531_pad_setup (ds, interface); - priv->p6_interface = interface;break ;default :
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c +19 -9
@@ -14,6 +14,7 @@#include "cudbg_entity.h" #include "cudbg_lib.h" #include "cudbg_zlib.h" +#include "cxgb4_tc_mqprio.h" static const u32 t6_tp_pio_array[][IREG_NUM_ELEM ] = { {0x7e40 ,0x7e44 ,0x020 ,28 },/* t6_tp_pio_regs_20_to_3b */
@@ -3476,7 +3477,7 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,for (i =0 ; i < utxq->ntxq; i++)QDESC_GET_TXQ (&utxq->uldtxq[i].q,cudbg_uld_txq_to_qtype (j), - out_unlock); + out_unlock_uld); } }
@@ -3493,7 +3494,7 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,for (i =0 ; i < urxq->nrxq; i++)QDESC_GET_RXQ (&urxq->uldrxq[i].rspq,cudbg_uld_rxq_to_qtype (j), - out_unlock); + out_unlock_uld); }/* ULD FLQ */
@@ -3505,7 +3506,7 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,for (i =0 ; i < urxq->nrxq; i++)QDESC_GET_FLQ (&urxq->uldrxq[i].fl,cudbg_uld_flq_to_qtype (j), - out_unlock); + out_unlock_uld); }/* ULD CIQ */
@@ -3518,29 +3519,34 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,for (i =0 ; i < urxq->nciq; i++)QDESC_GET_RXQ (&urxq->uldrxq[base + i].rspq,cudbg_uld_ciq_to_qtype (j), - out_unlock); + out_unlock_uld); } } +mutex_unlock (&uld_mutex); + +if (!padap->tc_mqprio) + goto out; +mutex_lock (&padap->tc_mqprio->mqprio_mutex);/* ETHOFLD TXQ */ if (s->eohw_txq)for (i =0 ; i < s->eoqsets; i++)QDESC_GET_TXQ (&s->eohw_txq[i].q, -CUDBG_QTYPE_ETHOFLD_TXQ , out); +CUDBG_QTYPE_ETHOFLD_TXQ , out_unlock_mqprio);/* ETHOFLD RXQ and FLQ */ if (s->eohw_rxq) {for (i =0 ; i < s->eoqsets; i++)QDESC_GET_RXQ (&s->eohw_rxq[i].rspq, -CUDBG_QTYPE_ETHOFLD_RXQ , out); +CUDBG_QTYPE_ETHOFLD_RXQ , out_unlock_mqprio);for (i =0 ; i < s->eoqsets; i++)QDESC_GET_FLQ (&s->eohw_rxq[i].fl, -CUDBG_QTYPE_ETHOFLD_FLQ , out); +CUDBG_QTYPE_ETHOFLD_FLQ , out_unlock_mqprio); } -out_unlock: -mutex_unlock (&uld_mutex); +out_unlock_mqprio: +mutex_unlock (&padap->tc_mqprio->mqprio_mutex); out: qdesc_info->qdesc_entry_size =sizeof (*qdesc_entry);
@@ -3578,6 +3584,10 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,#undef QDESC_GETreturn rc; + +out_unlock_uld: +mutex_unlock (&uld_mutex); + goto out; } int cudbg_collect_flash(struct cudbg_init *pdbg_init,
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +13 -10
@@ -2907,6 +2907,15 @@ static int stmmac_open(struct net_device *dev) goto init_error; } +if (priv->plat->serdes_powerup) { + ret = priv->plat->serdes_powerup (dev, priv->plat->bsp_priv); +if (ret <0 ) { +netdev_err (priv->dev,"%s: Serdes powerup failed\n" , + __func__); + goto init_error; + } + } + ret =stmmac_hw_setup (dev, true);if (ret <0 ) {netdev_err (priv->dev,"%s: Hw setup failed\n" , __func__);
@@ -3022,6 +3031,10 @@ static int stmmac_release(struct net_device *dev)/* Disable the MAC Rx/Tx */ stmmac_mac_set (priv, priv->ioaddr, false); +/* Powerdown Serdes if there is */ +if (priv->plat->serdes_powerdown) + priv->plat->serdes_powerdown (dev, priv->plat->bsp_priv); +netif_carrier_off (dev);stmmac_release_ptp (priv);
@@ -5178,14 +5191,6 @@ int stmmac_dvr_probe(struct device *device, goto error_netdev_register; } -if (priv->plat->serdes_powerup) { - ret = priv->plat->serdes_powerup (ndev, - priv->plat->bsp_priv); - -if (ret <0 ) - goto error_serdes_powerup; - } -#ifdef CONFIG_DEBUG_FS stmmac_init_fs (ndev);#endif
@@ -5197,8 +5202,6 @@ int stmmac_dvr_probe(struct device *device,return ret; -error_serdes_powerup: -unregister_netdev (ndev); error_netdev_register:phylink_destroy (priv->phylink); error_phy_setup:
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1332,6 +1332,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ {QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */ {QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */ + {QMI_FIXED_INTF(0x413c, 0x81c2, 8)}, /* Dell Wireless 5811e */ {QMI_FIXED_INTF(0x413c, 0x81cc, 8)}, /* Dell Wireless 5816e */ {QMI_FIXED_INTF(0x413c, 0x81d7, 0)}, /* Dell Wireless 5821e */ {QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e preproduction config */
drivers/net/usb/usbnet.c +6 -1
@@ -1567,6 +1567,7 @@ void usbnet_disconnect (struct usb_interface *intf)struct usbnet *dev;struct usb_device *xdev;struct net_device *net; +struct urb *urb; dev =usb_get_intfdata (intf);usb_set_intfdata (intf,NULL );
@@ -1583,7 +1584,11 @@ void usbnet_disconnect (struct usb_interface *intf) net = dev->net;unregister_netdev (net); -usb_scuttle_anchored_urbs (&dev->deferred); +while ((urb =usb_get_from_anchor (&dev->deferred))) { +dev_kfree_skb (urb->context); +kfree (urb->sg); +usb_free_urb (urb); + }if (dev->driver_info->unbind) dev->driver_info->unbind (dev, intf);
drivers/nvme/host/core.c +6 -3
@@ -2285,18 +2285,21 @@ static int nvme_pr_preempt(struct block_device *bdev, u64 old, u64 new, enum pr_type type, bool abort) {u32 cdw10 =nvme_pr_type (type) <<8 | (abort ?2 :1 ); +return nvme_pr_command (bdev, cdw10, old, new, nvme_cmd_resv_acquire); }static int nvme_pr_clear (struct block_device *bdev,u64 key) { -u32 cdw10 =1 | (key ?1 <<3 :0 ); -return nvme_pr_command (bdev, cdw10, key,0 , nvme_cmd_resv_register); +u32 cdw10 =1 | (key ?0 :1 <<3 ); + +return nvme_pr_command (bdev, cdw10, key,0 , nvme_cmd_resv_release); }static int nvme_pr_release (struct block_device *bdev,u64 key,enum pr_type type) { -u32 cdw10 =nvme_pr_type (type) <<8 | (key ?1 <<3 :0 ); +u32 cdw10 =nvme_pr_type (type) <<8 | (key ?0 :1 <<3 ); +return nvme_pr_command (bdev, cdw10, key,0 , nvme_cmd_resv_release); }
drivers/reset/reset-imx7.c +1 -0
@@ -329,6 +329,7 @@ static int imx8mp_reset_set(struct reset_controller_dev *rcdev,break ;case IMX8MP_RESET_PCIE_CTRL_APPS_EN : +case IMX8MP_RESET_PCIEPHY_PERST : value = assert ?0 : bit;break ; }
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +0 -7
@@ -2738,7 +2738,6 @@ static int slave_configure_v3_hw(struct scsi_device *sdev)struct hisi_hba *hisi_hba =shost_priv (shost);struct device *dev = hisi_hba->dev;int ret =sas_slave_configure (sdev); -unsigned int max_sectors;if (ret)return ret;
@@ -2756,12 +2755,6 @@ static int slave_configure_v3_hw(struct scsi_device *sdev) } } -/* Set according to IOMMU IOVA caching limit */ - max_sectors =min_t (size_t,queue_max_hw_sectors (sdev->request_queue), - (PAGE_SIZE *32 ) >>SECTOR_SHIFT ); - -blk_queue_max_hw_sectors (sdev->request_queue, max_sectors); -return 0 ; }
drivers/soc/sunxi/sunxi_sram.c +11 -16
@@ -78,8 +78,8 @@ static struct sunxi_sram_desc sun4i_a10_sram_d = {static struct sunxi_sram_desc sun50i_a64_sram_c = { .data =SUNXI_SRAM_DATA ("C" ,0x4 ,24 ,1 , -SUNXI_SRAM_MAP (0 ,1 ,"cpu" ), -SUNXI_SRAM_MAP (1 ,0 ,"de2" )), +SUNXI_SRAM_MAP (1 ,0 ,"cpu" ), +SUNXI_SRAM_MAP (0 ,1 ,"de2" )), };static const struct of_device_id sunxi_sram_dt_ids[] = {
@@ -254,6 +254,7 @@ int sunxi_sram_claim(struct device *dev)writel (val | ((device << sram_data->offset) & mask), base + sram_data->reg); + sram_desc->claimed = true;spin_unlock (&sram_lock);return 0 ;
@@ -318,12 +319,11 @@ static struct regmap_config sunxi_sram_emac_clock_regmap = { .writeable_reg = sunxi_sram_regmap_accessible_reg, }; -static int sunxi_sram_probe (struct platform_device *pdev) +static int __init sunxi_sram_probe (struct platform_device *pdev) { -struct resource *res; -struct dentry *d;struct regmap *emac_clock;const struct sunxi_sramc_variant *variant; +struct device *dev = &pdev->dev; sram_dev = &pdev->dev;
@@ -331,18 +331,10 @@ static int sunxi_sram_probe(struct platform_device *pdev)if (!variant)return -EINVAL ; - res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - base =devm_ioremap_resource (&pdev->dev, res); + base =devm_platform_ioremap_resource (pdev,0 );if (IS_ERR (base))return PTR_ERR (base); -of_platform_populate (pdev->dev.of_node,NULL ,NULL , &pdev->dev); - - d =debugfs_create_file ("sram" ,S_IRUGO ,NULL ,NULL , - &sunxi_sram_fops); -if (!d) -return -ENOMEM ; -if (variant->has_emac_clock) { emac_clock =devm_regmap_init_mmio (&pdev->dev, base, &sunxi_sram_emac_clock_regmap);
@@ -351,6 +343,10 @@ static int sunxi_sram_probe(struct platform_device *pdev)return PTR_ERR (emac_clock); } +of_platform_populate (dev->of_node,NULL ,NULL , dev); + +debugfs_create_file ("sram" ,0444 ,NULL ,NULL , &sunxi_sram_fops); +return 0 ; }
@@ -396,9 +392,8 @@ static struct platform_driver sunxi_sram_driver = { .name = "sunxi-sram", .of_match_table = sunxi_sram_dt_match, }, - .probe = sunxi_sram_probe, }; -module_platform_driver (sunxi_sram_driver); +builtin_platform_driver_probe (sunxi_sram_driver, sunxi_sram_probe);MODULE_AUTHOR ("Maxime Ripard <[email protected]>" );MODULE_DESCRIPTION ("Allwinner sunXi SRAM Controller Driver" );
drivers/staging/media/rkvdec/rkvdec-h264.c +2 -2
@@ -1124,8 +1124,8 @@ static int rkvdec_h264_run(struct rkvdec_ctx *ctx)schedule_delayed_work (&rkvdec->watchdog_work,msecs_to_jiffies (2000 )); -writel (0xffffffff , rkvdec->regs +RKVDEC_REG_STRMD_ERR_EN ); -writel (0xffffffff , rkvdec->regs +RKVDEC_REG_H264_ERR_E ); +writel (0 , rkvdec->regs +RKVDEC_REG_STRMD_ERR_EN ); +writel (0 , rkvdec->regs +RKVDEC_REG_H264_ERR_E );writel (1 , rkvdec->regs +RKVDEC_REG_PREF_LUMA_CACHE_COMMAND );writel (1 , rkvdec->regs +RKVDEC_REG_PREF_CHR_CACHE_COMMAND );
drivers/thunderbolt/icm.c +12 -0
@@ -2300,6 +2300,18 @@ struct tb *icm_probe(struct tb_nhi *nhi) icm->rtd3_veto = icm_icl_rtd3_veto; 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; + icm->driver_ready = icm_tr_driver_ready; + icm->device_connected = icm_tr_device_connected; + icm->device_disconnected = icm_tr_device_disconnected; + icm->xdomain_connected = icm_tr_xdomain_connected; + icm->xdomain_disconnected = icm_tr_xdomain_disconnected; + tb->cm_ops = &icm_tr_ops; +break ; }if (!icm->is_supported || !icm->is_supported (tb)) {
drivers/thunderbolt/nhi.h +2 -0
@@ -55,6 +55,8 @@ 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#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_NHI 0x15bf
drivers/thunderbolt/switch.c +1 -0
@@ -2046,6 +2046,7 @@ int tb_switch_configure(struct tb_switch *sw)* additional capabilities. */ sw->config.cmuv =USB4_VERSION_1_0 ; + sw->config.plug_events_delay =0xa ;/* Enumerate the switch */ ret = tb_sw_write(sw, (u32 *)&sw->config + 1, TB_CFG_SWITCH,
drivers/usb/storage/unusual_uas.h +21 -0
@@ -52,6 +52,13 @@ UNUSUAL_DEV(0x059f, 0x1061, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NO_REPORT_OPCODES | US_FL_NO_SAME), +/* Reported-by: Hongling Zeng <[email protected]> */ +UNUSUAL_DEV (0x090c ,0x2000 ,0x0000 ,0x9999 , +"Hiksemi" , +"External HDD" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , + US_FL_IGNORE_UAS), +/* * Apricorn USB3 dongle sometimes returns "USBSUSBSUSBS" in response to SCSI * commands in UAS mode. Observed with the 1.28 firmware; are there others?
@@ -76,6 +83,13 @@ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NO_REPORT_LUNS), +/* Reported-by: Hongling Zeng <[email protected]> */ +UNUSUAL_DEV (0x0bda ,0x9210 ,0x0000 ,0x9999 , +"Hiksemi" , +"External HDD" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , +US_FL_IGNORE_UAS ), +/* Reported-by: Benjamin Tissoires <[email protected]> */ UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999, "Initio Corporation",
@@ -118,6 +132,13 @@ UNUSUAL_DEV(0x154b, 0xf00d, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NO_ATA_1X), +/* Reported-by: Hongling Zeng <[email protected]> */ +UNUSUAL_DEV (0x17ef ,0x3899 ,0x0000 ,0x9999 , +"Thinkplus" , +"External HDD" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , +US_FL_IGNORE_UAS ), +/* Reported-by: Hans de Goede <[email protected]> */ UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, "VIA",
drivers/usb/typec/ucsi/ucsi.c +0 -2
@@ -515,8 +515,6 @@ static int ucsi_get_pdos(struct ucsi_connector *con, int is_partner, num_pdos * sizeof(u32));if (ret <0 )dev_err (ucsi->dev,"UCSI_GET_PDOS failed (%d)\n" , ret); -if (ret ==0 && offset ==0 ) -dev_warn (ucsi->dev,"UCSI_GET_PDOS returned 0 bytes\n" );return ret; }
fs/btrfs/disk-io.c +25 -0
@@ -4105,6 +4105,31 @@ void __cold close_ctree(struct btrfs_fs_info *fs_info)/* clear out the rbtree of defraggable inodes */ btrfs_cleanup_defrag_inodes (fs_info); +/* +* After we parked the cleaner kthread, ordered extents may have +* completed and created new delayed iputs. If one of the async reclaim +* tasks is running and in the RUN_DELAYED_IPUTS flush state, then we +* can hang forever trying to stop it, because if a delayed iput is +* added after it ran btrfs_run_delayed_iputs() and before it called +* btrfs_wait_on_delayed_iputs(), it will hang forever since there is +* no one else to run iputs. +* +* So wait for all ongoing ordered extents to complete and then run +* delayed iputs. This works because once we reach this point no one +* can either create new ordered extents nor create delayed iputs +* through some other means. +* +* Also note that btrfs_wait_ordered_roots() is not safe here, because +* it waits for BTRFS_ORDERED_COMPLETE to be set on an ordered extent, +* but the delayed iput for the respective inode is made only when doing +* the final btrfs_put_ordered_extent() (which must happen at +* btrfs_finish_ordered_io() when we are unmounting). +*/ +btrfs_flush_workqueue (fs_info->endio_write_workers); +/* Ordered extents for free space inodes. */ +btrfs_flush_workqueue (fs_info->endio_freespace_worker); +btrfs_run_delayed_iputs (fs_info); +cancel_work_sync (&fs_info->async_reclaim_work);cancel_work_sync (&fs_info->async_data_reclaim_work);
fs/ntfs/super.c +2 -1
@@ -2092,7 +2092,8 @@ static bool load_system_files(ntfs_volume *vol)// TODO: Initialize security. /* Get the extended system files' directory inode. */ vol->extend_ino =ntfs_iget (sb, FILE_Extend); -if (IS_ERR (vol->extend_ino) ||is_bad_inode (vol->extend_ino)) { +if (IS_ERR (vol->extend_ino) ||is_bad_inode (vol->extend_ino) || + !S_ISDIR (vol->extend_ino->i_mode)) {if (!IS_ERR (vol->extend_ino))iput (vol->extend_ino);ntfs_error (sb,"Failed to load $Extend." );
kernel/dma/swiotlb.c +12 -1
@@ -734,7 +734,18 @@ dma_addr_t swiotlb_map(struct device *dev, phys_addr_t paddr, size_t size,size_t swiotlb_max_mapping_size (struct device *dev) { -return ((size_t )IO_TLB_SIZE ) *IO_TLB_SEGSIZE ; +int min_align_mask =dma_get_min_align_mask (dev); +int min_align =0 ; + +/* +* swiotlb_find_slots() skips slots according to +* min align mask. This affects max mapping size. +* Take it into acount here. +*/ +if (min_align_mask) + min_align =roundup (min_align_mask,IO_TLB_SIZE ); + +return ((size_t )IO_TLB_SIZE ) *IO_TLB_SEGSIZE - min_align; }bool is_swiotlb_active (void )
mm/madvise.c +5 -2
@@ -434,8 +434,11 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,continue ; } -/* Do not interfere with other mappings of this page */ -if (page_mapcount (page) !=1 ) +/* +* Do not interfere with other mappings of this page and +* non-LRU page. +*/ +if (!PageLRU (page) ||page_mapcount (page) !=1 )continue ;VM_BUG_ON_PAGE (PageTransCompound (page), page);
mm/migrate.c +3 -2
@@ -2473,13 +2473,14 @@ static int migrate_vma_collect_pmd(pmd_t *pmdp, migrate->dst[migrate->npages] =0 ; migrate->src[migrate->npages++] = mpfn; } -arch_leave_lazy_mmu_mode (); -pte_unmap_unlock (ptep -1 , ptl);/* Only flush the TLB if we actually modified any entries */ if (unmapped)flush_tlb_range (walk->vma, start, end); +arch_leave_lazy_mmu_mode (); +pte_unmap_unlock (ptep -1 , ptl); +return 0 ; }
mm/page_alloc.c +55 -10
118 lines not on this page · raw message
net/sched/act_ct.c +4 -1
@@ -1293,7 +1293,7 @@ static int tcf_ct_init(struct net *net, struct nlattr *nla, err =tcf_ct_flow_table_get (params);if (err) - goto cleanup; + goto cleanup_params;spin_lock_bh (&c->tcf_lock); goto_ch =tcf_action_set_ctrlact (*a, parm->action, goto_ch);
@@ -1308,6 +1308,9 @@ static int tcf_ct_init(struct net *net, struct nlattr *nla,return res; +cleanup_params: +if (params->tmpl) +nf_ct_put (params->tmpl); cleanup:if (goto_ch)tcf_chain_put_by_act (goto_ch);
sound/pci/hda/hda_tegra.c +29 -59
136 lines not on this page · raw message
sound/pci/hda/patch_hdmi.c +40 -7
114 lines not on this page · raw message
sound/soc/codecs/tas2770.c +3 -0
@@ -495,6 +495,8 @@ static struct snd_soc_dai_driver tas2770_dai_driver[] = { }, }; +static const struct regmap_config tas2770_i2c_regmap; +static int tas2770_codec_probe (struct snd_soc_component *component) { struct tas2770_priv *tas2770 =
@@ -508,6 +510,7 @@ static int tas2770_codec_probe(struct snd_soc_component *component) }tas2770_reset (tas2770); +regmap_reinit_cache (tas2770->regmap, &tas2770_i2c_regmap);return 0 ; }
tools/testing/selftests/net/reuseport_bpf.c +1 -1
@@ -330,7 +330,7 @@ static void test_extra_filter(const struct test_params p)if (bind (fd1, addr,sockaddr_size ()))error (1 , errno,"failed to bind recv socket 1" ); -if (!bind (fd2, addr,sockaddr_size ()) && errno !=EADDRINUSE ) +if (!bind (fd2, addr,sockaddr_size ()) || errno !=EADDRINUSE )error (1 , errno,"bind socket 2 should fail with EADDRINUSE" );free (addr);