Linux 5.13.15
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.13.15 kernel.
All users of the 5.13 kernel series must upgrade.
The updated 5.13.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.13.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/riscv/boot/dts/microchip/microchip-mpfs-icicle-kit.dts | 4 + arch/riscv/boot/dts/microchip/microchip-mpfs.dtsi | 2 arch/x86/events/amd/ibs.c | 8 +++ arch/x86/events/amd/power.c | 1 arch/x86/events/intel/pt.c | 2 arch/xtensa/Kconfig | 2 drivers/block/Kconfig | 4 - drivers/block/cryptoloop.c | 2 drivers/gpu/ipu-v3/ipu-cpmem.c | 30 ++++++------ drivers/media/usb/stkwebcam/stk-webcam.c | 6 +- drivers/net/dsa/mv88e6xxx/serdes.c | 11 ++-- drivers/net/ethernet/cadence/macb_ptp.c | 11 ++++ drivers/net/ethernet/qlogic/qed/qed_main.c | 7 ++ drivers/net/ethernet/qlogic/qede/qede_main.c | 2 drivers/reset/reset-zynqmp.c | 3 - drivers/usb/serial/cp210x.c | 21 +++++--- drivers/usb/serial/pl2303.c | 1 fs/ceph/mdsmap.c | 8 ++- fs/ext4/inline.c | 6 ++ fs/ext4/super.c | 8 +++ sound/core/pcm_lib.c | 2 sound/pci/hda/patch_realtek.c | 11 ++++ sound/usb/endpoint.c | 5 ++ 24 files changed, 115 insertions(+), 44 deletions(-)
Bin Meng (2):
riscv: dts: microchip: Use 'local-mac-address' for emac1
riscv: dts: microchip: Add ethernet0 to the aliases node
Christoph Hellwig (1):
cryptoloop: add a deprecation warning
Greg Kroah-Hartman (1):
Linux 5.13.15
Harini Katakam (1):
net: macb: Add a NULL check on desc_ptp
Jan Kara (1):
ext4: fix e2fsprogs checksum failure for mounted filesystem
Johan Hovold (2):
USB: serial: cp210x: fix control-characters error handling
USB: serial: cp210x: fix flow-control error handlingJohnathon Clark (1):
ALSA: hda/realtek: Quirk for HP Spectre x360 14 amp setup
Kim Phillips (2):
perf/x86/amd/ibs: Work around erratum #1197
perf/x86/amd/power: Assign pmu.module
Krzysztof Hałasa (1):
gpu: ipu-v3: Fix i.MX IPU-v3 offset calculations for (semi)planar U/V formats
Nathan Rossi (1):
net: dsa: mv88e6xxx: Update mv88e6393x serdes errata
Pavel Skripkin (1):
media: stkwebcam: fix memory leak in stk_camera_probe
Randy Dunlap (1):
xtensa: fix kconfig unmet dependency warning for HAVE_FUTEX_CMPXCHG
Robert Marko (1):
USB: serial: pl2303: fix GL type detection
Sai Krishna Potthuri (1):
reset: reset-zynqmp: Fixed the argument data type
Shai Malin (2):
qed: Fix the VF msix vectors flow
qede: Fix memset corruption
Takashi Iwai (2):
ALSA: usb-audio: Fix regression on Sony WALKMAN NW-A45 DAC
ALSA: hda/realtek: Workaround for conflicting SSID on ASUS ROG Strix G17
Theodore Ts'o (1):
ext4: fix race writing to an inline_data file while its xattrs are changing
Tuo Li (1):
ceph: fix possible null-pointer dereference in ceph_mdsmap_decode()
Xiaoyao Li (1):
perf/x86/intel/pt: Fix mask of num_address_ranges
Zubin Mithra (1):
ALSA: pcm: fix divide error in snd_pcm_lib_ioctl
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 13 -SUBLEVEL = 14 +SUBLEVEL = 15 EXTRAVERSION = NAME = Opossums on Parade
arch/riscv/boot/dts/microchip/microchip-mpfs-icicle-kit.dts +4 -0
@@ -14,6 +14,10 @@ / { model = "Microchip PolarFire-SoC Icicle Kit"; compatible = "microchip,mpfs-icicle-kit"; + aliases { + ethernet0 = &emac1; + }; + chosen { stdout-path = &serial0; };
arch/riscv/boot/dts/microchip/microchip-mpfs.dtsi +1 -1
@@ -317,7 +317,7 @@ emac1: ethernet@20112000 { reg = <0x0 0x20112000 0x0 0x2000>; interrupt-parent = <&plic>; interrupts = <70 71 72 73>; - mac-address = [00 00 00 00 00 00]; + local-mac-address = [00 00 00 00 00 00]; clocks = <&clkcfg 5>, <&clkcfg 2>; status = "disabled"; clock-names = "pclk", "hclk";
arch/x86/events/amd/ibs.c +8 -0
@@ -90,6 +90,7 @@ struct perf_ibs {unsigned long offset_mask[1 ];int offset_max; unsigned int fetch_count_reset_broken : 1; + unsigned int fetch_ignore_if_zero_rip : 1;struct cpu_perf_ibs __percpu *pcpu;struct attribute **format_attrs;
@@ -672,6 +673,10 @@ static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)if (check_rip && (ibs_data.regs[2 ] &IBS_RIP_INVALID )) { regs.flags &= ~PERF_EFLAGS_EXACT ; }else { +/* Workaround for erratum #1197 */ +if (perf_ibs->fetch_ignore_if_zero_rip && !(ibs_data.regs[1 ])) + goto out; +set_linear_ip (®s, ibs_data.regs[1 ]); regs.flags |=PERF_EFLAGS_EXACT ; }
@@ -769,6 +774,9 @@ static __init void perf_event_ibs_init(void)if (boot_cpu_data.x86 >=0x16 && boot_cpu_data.x86 <=0x18 ) perf_ibs_fetch.fetch_count_reset_broken =1 ; +if (boot_cpu_data.x86 ==0x19 && boot_cpu_data.x86_model <0x10 ) + perf_ibs_fetch.fetch_ignore_if_zero_rip =1 ; +perf_ibs_pmu_init (&perf_ibs_fetch,"ibs_fetch" );if (ibs_caps &IBS_CAPS_OPCNT ) {
arch/x86/events/amd/power.c +1 -0
@@ -213,6 +213,7 @@ static struct pmu pmu_class = { .stop = pmu_event_stop, .read = pmu_event_read, .capabilities = PERF_PMU_CAP_NO_EXCLUDE, + .module = THIS_MODULE, };static int power_cpu_exit (unsigned int cpu)
arch/x86/events/intel/pt.c +1 -1
@@ -62,7 +62,7 @@ static struct pt_cap_desc {PT_CAP (single_range_output,0 ,CPUID_ECX ,BIT (2 )),PT_CAP (output_subsys,0 ,CPUID_ECX ,BIT (3 )),PT_CAP (payloads_lip,0 ,CPUID_ECX ,BIT (31 )), -PT_CAP (num_address_ranges,1 ,CPUID_EAX ,0x3 ), +PT_CAP (num_address_ranges,1 ,CPUID_EAX ,0x7 ),PT_CAP (mtc_periods,1 ,CPUID_EAX ,0xffff0000 ),PT_CAP (cycle_thresholds,1 ,CPUID_EBX ,0xffff ), PT_CAP(psb_periods, 1, CPUID_EBX, 0xffff0000),
arch/xtensa/Kconfig +1 -1
@@ -30,7 +30,7 @@ config XTENSA select HAVE_DMA_CONTIGUOUS select HAVE_EXIT_THREAD select HAVE_FUNCTION_TRACER - select HAVE_FUTEX_CMPXCHG if !MMU + select HAVE_FUTEX_CMPXCHG if !MMU && FUTEX select HAVE_HW_BREAKPOINT if PERF_EVENTS select HAVE_IRQ_TIME_ACCOUNTING select HAVE_PCI
drivers/block/Kconfig +2 -2
@@ -213,7 +213,7 @@ config BLK_DEV_LOOP_MIN_COUNT dynamically allocated with the /dev/loop-control interface. config BLK_DEV_CRYPTOLOOP - tristate "Cryptoloop Support" + tristate "Cryptoloop Support (DEPRECATED)" select CRYPTO select CRYPTO_CBC depends on BLK_DEV_LOOP
@@ -225,7 +225,7 @@ config BLK_DEV_CRYPTOLOOP WARNING: This device is not safe for journaled file systems like ext3 or Reiserfs. Please use the Device Mapper crypto module instead, which can be configured to be on-disk compatible with the - cryptoloop device. + cryptoloop device. cryptoloop support will be removed in Linux 5.16. source "drivers/block/drbd/Kconfig"
drivers/block/cryptoloop.c +2 -0
@@ -189,6 +189,8 @@ init_cryptoloop(void)if (rc)printk (KERN_ERR "cryptoloop: loop_register_transfer failed\n" ); +else +pr_warn ("the cryptoloop driver has been deprecated and will be removed in in Linux 5.16\n" );return rc; }
drivers/gpu/ipu-v3/ipu-cpmem.c +15 -15
@@ -585,21 +585,21 @@ static const struct ipu_rgb def_bgra_16 = { .bits_per_pixel = 16, }; -#define Y_OFFSET (pix, x, y) ((x) + pix->width * (y)) -#define U_OFFSET (pix, x, y) ((pix->width * pix->height) + \ - (pix->width * ((y) / 2) / 2) + (x) / 2) -#define V_OFFSET (pix, x, y) ((pix->width * pix->height) + \ - (pix->width * pix->height / 4) + \ - (pix->width * ((y) / 2) / 2) + (x) / 2) -#define U2_OFFSET (pix, x, y) ((pix->width * pix->height) + \ - (pix->width * (y) / 2) + (x) / 2) -#define V2_OFFSET (pix, x, y) ((pix->width * pix->height) + \ - (pix->width * pix->height / 2) + \ - (pix->width * (y) / 2) + (x) / 2) -#define UV_OFFSET (pix, x, y) ((pix->width * pix->height) + \ - (pix->width * ((y) / 2)) + (x)) -#define UV2_OFFSET (pix, x, y) ((pix->width * pix->height) + \ - (pix->width * y) + (x)) +#define Y_OFFSET (pix, x, y) ((x) + pix->bytesperline * (y)) +#define U_OFFSET (pix, x, y) ((pix->bytesperline * pix->height) + \ + (pix->bytesperline * ((y) / 2) / 2) + (x) / 2) +#define V_OFFSET (pix, x, y) ((pix->bytesperline * pix->height) + \ + (pix->bytesperline * pix->height / 4) + \ + (pix->bytesperline * ((y) / 2) / 2) + (x) / 2) +#define U2_OFFSET (pix, x, y) ((pix->bytesperline * pix->height) + \ + (pix->bytesperline * (y) / 2) + (x) / 2) +#define V2_OFFSET (pix, x, y) ((pix->bytesperline * pix->height) + \ + (pix->bytesperline * pix->height / 2) + \ + (pix->bytesperline * (y) / 2) + (x) / 2) +#define UV_OFFSET (pix, x, y) ((pix->bytesperline * pix->height) + \ + (pix->bytesperline * ((y) / 2)) + (x)) +#define UV2_OFFSET (pix, x, y) ((pix->bytesperline * pix->height) + \ + (pix->bytesperline * y) + (x))#define NUM_ALPHA_CHANNELS 7
drivers/media/usb/stkwebcam/stk-webcam.c +4 -2
@@ -1346,7 +1346,7 @@ static int stk_camera_probe(struct usb_interface *interface,if (!dev->isoc_ep) {pr_err ("Could not find isoc-in endpoint\n" ); err = -ENODEV ; - goto error; + goto error_put; } dev->vsettings.palette =V4L2_PIX_FMT_RGB565 ; dev->vsettings.mode =MODE_VGA ;
@@ -1359,10 +1359,12 @@ static int stk_camera_probe(struct usb_interface *interface, err =stk_register_video_device (dev);if (err) - goto error; + goto error_put;return 0 ; +error_put: +usb_put_intf (interface); error:v4l2_ctrl_handler_free (hdl);v4l2_device_unregister (&dev->v4l2_dev);
drivers/net/dsa/mv88e6xxx/serdes.c +6 -5
@@ -1277,15 +1277,16 @@ static int mv88e6393x_serdes_port_errata(struct mv88e6xxx_chip *chip, int lane)int err;/* mv88e6393x family errata 4.6: -* Cannot clear PwrDn bit on SERDES on port 0 if device is configured -* CPU_MGD mode or P0_mode is configured for [x]MII. -* Workaround: Set Port0 SERDES register 4.F002 bit 5=0 and bit 15=1. +* Cannot clear PwrDn bit on SERDES if device is configured CPU_MGD +* mode or P0_mode is configured for [x]MII. +* Workaround: Set SERDES register 4.F002 bit 5=0 and bit 15=1. * * It seems that after this workaround the SERDES is automatically * powered up (the bit is cleared), so power it down. */ -if (lane ==MV88E6393X_PORT0_LANE ) { - err =mv88e6390_serdes_read (chip,MV88E6393X_PORT0_LANE , +if (lane ==MV88E6393X_PORT0_LANE || lane ==MV88E6393X_PORT9_LANE || + lane ==MV88E6393X_PORT10_LANE ) { + err =mv88e6390_serdes_read (chip, lane,MDIO_MMD_PHYXS ,MV88E6393X_SERDES_POC , ®);if (err)
drivers/net/ethernet/cadence/macb_ptp.c +10 -1
@@ -275,6 +275,12 @@ void gem_ptp_rxstamp(struct macb *bp, struct sk_buff *skb,if (GEM_BFEXT (DMA_RXVALID , desc->addr)) { desc_ptp =macb_ptp_desc (bp, desc); +/* Unlikely but check */ +if (!desc_ptp) { +dev_warn_ratelimited (&bp->pdev->dev, +"Timestamp not supported in BD\n" ); +return ; + }gem_hw_timestamp (bp, desc_ptp->ts_1, desc_ptp->ts_2, &ts);memset (shhwtstamps,0 ,sizeof (struct skb_shared_hwtstamps )); shhwtstamps->hwtstamp =ktime_set (ts.tv_sec, ts.tv_nsec);
@@ -307,8 +313,11 @@ int gem_ptp_txstamp(struct macb_queue *queue, struct sk_buff *skb,if (CIRC_SPACE (head, tail,PTP_TS_BUFFER_SIZE ) ==0 )return -ENOMEM ; -skb_shinfo (skb)->tx_flags |=SKBTX_IN_PROGRESS ; desc_ptp =macb_ptp_desc (queue->bp, desc); +/* Unlikely but check */ +if (!desc_ptp) +return -EINVAL ; +skb_shinfo (skb)->tx_flags |=SKBTX_IN_PROGRESS ; tx_timestamp = &queue->tx_timestamps[head]; tx_timestamp->skb = skb;/* ensure ts_1/ts_2 is loaded after ctrl (TX_USED check) */
drivers/net/ethernet/qlogic/qed/qed_main.c +6 -1
@@ -616,7 +616,12 @@ static int qed_enable_msix(struct qed_dev *cdev, rc = cnt; } -if (rc >0 ) { +/* For VFs, we should return with an error in case we didn't get the +* exact number of msix vectors as we requested. +* Not doing that will lead to a crash when starting queues for +* this VF. +*/ +if ((IS_PF (cdev) && rc >0 ) || (IS_VF (cdev) && rc == cnt)) {/* MSI-x configuration was achieved */ int_params->out.int_mode =QED_INT_MODE_MSIX ; int_params->out.num_vectors = rc;
drivers/net/ethernet/qlogic/qede/qede_main.c +1 -1
@@ -1874,6 +1874,7 @@ static void qede_sync_free_irqs(struct qede_dev *edev) } edev->int_info.used_cnt =0 ; + edev->int_info.msix_cnt =0 ; }static int qede_req_msix_irqs (struct qede_dev *edev)
@@ -2427,7 +2428,6 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode, goto out; err4:qede_sync_free_irqs (edev); -memset (&edev->int_info.msix_cnt,0 ,sizeof (struct qed_int_info )); err3:qede_napi_disable_remove (edev); err2:
drivers/reset/reset-zynqmp.c +2 -1
@@ -53,7 +53,8 @@ static int zynqmp_reset_status(struct reset_controller_dev *rcdev, unsigned long id) {struct zynqmp_reset_data *priv =to_zynqmp_reset_data (rcdev); -int val, err; +int err; +u32 val; err =zynqmp_pm_reset_get_status (priv->data->reset_id + id, &val);if (err)
drivers/usb/serial/cp210x.c +13 -8
@@ -1110,10 +1110,8 @@ static int cp210x_set_chars(struct usb_serial_port *port,kfree (dmabuf); -if (result <0 ) { -dev_err (&port->dev,"failed to set special chars: %d\n" , result); +if (result <0 )return result; - }return 0 ; }
@@ -1138,6 +1136,7 @@ static void cp210x_set_flow_control(struct tty_struct *tty,struct cp210x_flow_ctl flow_ctl;u32 flow_repl;u32 ctl_hs; +bool crtscts;int ret;/*
@@ -1165,8 +1164,10 @@ static void cp210x_set_flow_control(struct tty_struct *tty, chars.bXoffChar =STOP_CHAR (tty); ret =cp210x_set_chars (port, &chars); -if (ret) -return ; +if (ret) { +dev_err (&port->dev,"failed to set special chars: %d\n" , + ret); + } }mutex_lock (&port_priv->mutex);
@@ -1195,14 +1196,14 @@ static void cp210x_set_flow_control(struct tty_struct *tty, flow_repl |=CP210X_SERIAL_RTS_FLOW_CTL ; else flow_repl |= CP210X_SERIAL_RTS_INACTIVE; - port_priv->crtscts = true; + crtscts = true; }else { ctl_hs &= ~CP210X_SERIAL_CTS_HANDSHAKE ;if (port_priv->rts) flow_repl |=CP210X_SERIAL_RTS_ACTIVE ;else flow_repl |=CP210X_SERIAL_RTS_INACTIVE ; - port_priv->crtscts = false; + crtscts = false; }if (I_IXOFF (tty)) {
@@ -1225,8 +1226,12 @@ static void cp210x_set_flow_control(struct tty_struct *tty, flow_ctl.ulControlHandshake =cpu_to_le32 (ctl_hs); flow_ctl.ulFlowReplace =cpu_to_le32 (flow_repl); -cp210x_write_reg_block (port,CP210X_SET_FLOW , &flow_ctl, + ret =cp210x_write_reg_block (port,CP210X_SET_FLOW , &flow_ctl,sizeof (flow_ctl)); +if (ret) + goto out_unlock; + + port_priv->crtscts = crtscts; out_unlock:mutex_unlock (&port_priv->mutex); }
drivers/usb/serial/pl2303.c +1 -0
@@ -433,6 +433,7 @@ static int pl2303_detect_type(struct usb_serial *serial)switch (bcdDevice) {case 0x100 :case 0x305 : +case 0x405 :/* * Assume it's an HXN-type if the device doesn't * support the old read request value.
fs/ceph/mdsmap.c +5 -3
@@ -394,9 +394,11 @@ void ceph_mdsmap_destroy(struct ceph_mdsmap *m) {int i; -for (i =0 ; i < m->possible_max_rank; i++) -kfree (m->m_info[i].export_targets); -kfree (m->m_info); +if (m->m_info) { +for (i =0 ; i < m->possible_max_rank; i++) +kfree (m->m_info[i].export_targets); +kfree (m->m_info); + }kfree (m->m_data_pg_pools);kfree (m); }
fs/ext4/inline.c +6 -0
@@ -750,6 +750,12 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,ext4_write_lock_xattr (inode, &no_expand);BUG_ON (!ext4_has_inline_data (inode)); +/* +* ei->i_inline_off may have changed since ext4_write_begin() +* called ext4_try_to_write_inline_data() +*/ + (void )ext4_find_inline_data_nolock (inode); + kaddr =kmap_atomic (page);ext4_write_inline_data (inode, &iloc, kaddr, pos, len);kunmap_atomic (kaddr);
fs/ext4/super.c +8 -0
@@ -5051,6 +5051,14 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) err =percpu_counter_init (&sbi->s_freeinodes_counter, freei,GFP_KERNEL ); } +/* +* Update the checksum after updating free space/inode +* counters. Otherwise the superblock can have an incorrect +* checksum in the buffer cache until it is written out and +* e2fsprogs programs trying to open a file system immediately +* after it is mounted can fail. +*/ +ext4_superblock_csum_set (sb);if (!err) err =percpu_counter_init (&sbi->s_dirs_counter,ext4_count_dirs (sb),GFP_KERNEL );
sound/core/pcm_lib.c +1 -1
@@ -1746,7 +1746,7 @@ static int snd_pcm_lib_ioctl_fifo_size(struct snd_pcm_substream *substream, channels =params_channels (params); frame_size =snd_pcm_format_size (format, channels);if (frame_size >0 ) - params->fifo_size /= (unsigned )frame_size; + params->fifo_size /= frame_size; }return 0 ; }
sound/pci/hda/patch_realtek.c +11 -0
@@ -8378,6 +8378,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x87f2 ,"HP ProBook 640 G8 Notebook PC" ,ALC236_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x87f4 ,"HP" ,ALC287_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x87f5 ,"HP" ,ALC287_FIXUP_HP_GPIO_LED ), +SND_PCI_QUIRK (0x103c ,0x87f6 ,"HP Spectre x360 14" ,ALC245_FIXUP_HP_X360_AMP ),SND_PCI_QUIRK (0x103c ,0x87f7 ,"HP Spectre x360 14" ,ALC245_FIXUP_HP_X360_AMP ),SND_PCI_QUIRK (0x103c ,0x8805 ,"HP ProBook 650 G8 Notebook PC" ,ALC236_FIXUP_HP_GPIO_LED ), SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
@@ -9456,6 +9457,16 @@ static int patch_alc269(struct hda_codec *codec)snd_hda_pick_fixup (codec, alc269_fixup_models, alc269_fixup_tbl, alc269_fixups); +/* FIXME: both TX300 and ROG Strix G17 have the same SSID, and +* the quirk breaks the latter (bko#214101). +* Clear the wrong entry. +*/ +if (codec->fixup_id ==ALC282_FIXUP_ASUS_TX300 && + codec->core.vendor_id ==0x10ec0294 ) { +codec_dbg (codec,"Clear wrong fixup for ASUS ROG Strix G17\n" ); + codec->fixup_id =HDA_FIXUP_ID_NOT_SET ; + } +snd_hda_pick_pin_fixup (codec, alc269_pin_fixup_tbl, alc269_fixups, true);snd_hda_pick_pin_fixup (codec, alc269_fallback_pin_fixup_tbl, alc269_fixups, false); snd_hda_pick_fixup(codec, NULL, alc269_fixup_vendor_tbl,
sound/usb/endpoint.c +5 -0
@@ -1286,6 +1286,11 @@ int snd_usb_endpoint_configure(struct snd_usb_audio *chip,* to be set up before parameter setups */ iface_first = ep->cur_audiofmt->protocol ==UAC_VERSION_1 ; +/* Workaround for Sony WALKMAN NW-A45 DAC; +* it requires the interface setup at first like UAC1 +*/ +if (chip->usb_id ==USB_ID (0x054c ,0x0b8c )) + iface_first = true;if (iface_first) { err =endpoint_set_interface (chip, ep, true);if (err <0 )