Linux 5.4.122
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.122 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/openrisc/kernel/setup.c | 2 drivers/cdrom/gdrom.c | 13 + drivers/firmware/arm_scpi.c | 4 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 6 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 10 + drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 4 drivers/gpu/drm/amd/amdgpu/soc15.c | 2 drivers/hwmon/lm80.c | 11 - drivers/infiniband/core/cma.c | 4 drivers/infiniband/core/uverbs_std_types_device.c | 4 drivers/infiniband/hw/mlx5/main.c | 1 drivers/infiniband/sw/rxe/rxe_qp.c | 7 + drivers/infiniband/sw/siw/siw_verbs.c | 11 - drivers/leds/leds-lp5523.c | 2 drivers/md/dm-snap.c | 1 drivers/media/platform/rcar_drif.c | 1 drivers/misc/ics932s401.c | 2 drivers/mmc/host/sdhci-pci-gli.c | 7 - drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 3 drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c | 8 - drivers/net/ethernet/sun/niu.c | 32 ++-- drivers/net/wireless/realtek/rtlwifi/base.c | 18 +- drivers/nvme/host/core.c | 3 drivers/nvme/host/multipath.c | 55 ++++---- drivers/nvme/host/nvme.h | 8 - drivers/nvme/target/io-cmd-file.c | 8 - drivers/platform/mellanox/mlxbf-tmfifo.c | 11 + drivers/platform/x86/dell-smbios-wmi.c | 3 drivers/rapidio/rio_cm.c | 17 +- drivers/scsi/qla2xxx/qla_nx.c | 3 drivers/scsi/ufs/ufs-hisi.c | 15 +- drivers/scsi/ufs/ufshcd.c | 5 drivers/tty/serial/mvebu-uart.c | 3 drivers/tty/vt/vt.c | 2 drivers/tty/vt/vt_ioctl.c | 6 drivers/uio/uio_hv_generic.c | 8 - drivers/video/console/vgacon.c | 56 ++++---- drivers/video/fbdev/core/fbcon.c | 2 drivers/video/fbdev/hgafb.c | 21 +-- drivers/video/fbdev/imsttfb.c | 5 drivers/xen/xen-pciback/xenbus.c | 22 ++- fs/btrfs/inode.c | 1 fs/cifs/smb2ops.c | 2 fs/ecryptfs/crypto.c | 6 fs/ext4/verity.c | 89 ++++++++----- include/linux/console_struct.h | 1 kernel/locking/mutex-debug.c | 4 kernel/locking/mutex-debug.h | 2 kernel/locking/mutex.c | 18 +- kernel/locking/mutex.h | 4 kernel/ptrace.c | 18 ++ net/bluetooth/l2cap_sock.c | 24 ++- net/bluetooth/smp.c | 9 + sound/firewire/Kconfig | 4 sound/firewire/amdtp-stream.c | 27 ++-- sound/firewire/bebob/bebob.c | 2 sound/firewire/dice/dice-alesis.c | 2 sound/firewire/dice/dice-tcelectronic.c | 4 sound/firewire/oxfw/oxfw.c | 1 sound/isa/sb/sb8.c | 4 sound/pci/hda/patch_realtek.c | 135 +++++++++++++++++++- sound/pci/intel8x0.c | 7 + sound/usb/line6/driver.c | 4 sound/usb/line6/pod.c | 5 sound/usb/line6/variax.c | 6 sound/usb/midi.c | 4 67 files changed, 538 insertions(+), 253 deletions(-)
Anirudh Rayabharam (3):
rapidio: handle create_workqueue() failure
net: stmicro: handle clk_prepare() failure during init
video: hgafb: correctly handle card detect failure during probe
Atul Gopinathan (1):
cdrom: gdrom: deallocate struct gdrom_unit fields in remove_gdrom
Bart Van Assche (1):
scsi: ufs: core: Increase the usable queue depth
Changfeng (1):
drm/amdgpu: disable 3DCGCG on picasso/raven1 to avoid compute hang
Christoph Hellwig (1):
nvme-multipath: fix double initialization of ANA state
Christophe JAILLET (2):
openrisc: Fix a memory leak
uio_hv_generic: Fix a memory leak in error handling paths
Dan Carpenter (2):
firmware: arm_scpi: Prevent the ternary sign expansion bug RDMA/uverbs: Fix a NULL vs IS_ERR() bug
Daniel Beer (1):
mmc: sdhci-pci-gli: increase 1.8V regulator wait
Daniel Cordova A (1):
ALSA: hda: fixup headset for ASUS GU502 laptop
Daniel Wagner (1):
nvmet: seset ns->file when open fails
Darrick J. Wong (1):
ics932s401: fix broken handling of errors when word reading fails
Du Cheng (1):
ethernet: sun: niu: fix missing checks of niu_pci_eeprom_read()
Elia Devito (1):
ALSA: hda/realtek: Add fixup for HP Spectre x360 15-df0xxx
Eric Biggers (1):
ext4: fix error handling in ext4_end_enable_verity()
Greg Kroah-Hartman (18):
Revert "ALSA: sb8: add a check for request_region"
Revert "rapidio: fix a NULL pointer dereference when create_workqueue() fails" Revert "serial: mvebu-uart: Fix to avoid a potential NULL pointer dereference" Revert "video: hgafb: fix potential NULL pointer dereference" Revert "net: stmicro: fix a missing check of clk_prepare"
Revert "leds: lp5523: fix a missing check of return value of lp55xx_read" Revert "hwmon: (lm80) fix a missing check of bus read in lm80 probe" Revert "video: imsttfb: fix potential NULL pointer dereferences" Revert "ecryptfs: replace BUG_ON with error handling code" Revert "scsi: ufs: fix a missing check of devm_reset_control_get" Revert "gdrom: fix a memory leak bug"
cdrom: gdrom: initialize global variable at init time
Revert "media: rcar_drif: fix a memory disclosure"
Revert "rtlwifi: fix a potential NULL pointer dereference" Revert "qlcnic: Avoid potential NULL pointer dereference"
Revert "niu: fix missing checks of niu_pci_eeprom_read"
net: rtlwifi: properly check for alloc_workqueue() failure
Linux 5.4.122
Guchun Chen (2):
drm/amdgpu: update gc golden setting for Navi12 drm/amdgpu: update sdma golden setting for Navi12
Hans de Goede (1):
platform/x86: dell-smbios-wmi: Fix oops on rmmod dell_smbios
Hou Pu (1):
nvmet: use new ana_log_size instead the old one
Hui Wang (1):
ALSA: hda/realtek: reset eapd coeff to default value for alc287
Igor Matheus Andrade Torrente (1):
video: hgafb: fix potential NULL pointer dereference
Jan Beulich (1):
xen-pciback: reconfigure also from backend watch handler
Josef Bacik (1):
btrfs: avoid RCU stalls while running delayed iputs
Leon Romanovsky (3):
RDMA/siw: Properly check send and receive CQ pointers RDMA/siw: Release xarray entry
RDMA/rxe: Clear all QP fields if creation failed
Liming Sun (1):
platform/mellanox: mlxbf-tmfifo: Fix a memory barrier issue
Luiz Augusto von Dentz (2):
Bluetooth: L2CAP: Fix handling LE modes by L2CAP_OPTIONS
Bluetooth: SMP: Fail if remote and local public keys are identical
Maciej W. Rozycki (2):
vgacon: Record video mode changes with VT_RESIZEX
vt: Fix character height handling with VT_RESIZEX
Maor Gottlieb (1):
RDMA/mlx5: Recover from fatal event in dual port mode
Mikulas Patocka (1):
dm snapshot: fix crash with transient storage and zero chunk size
Oleg Nesterov (1):
ptrace: make ptrace() fail if the tracee changed its pid unexpectedly
PeiSen Hou (1):
ALSA: hda/realtek: Add some CLOVE SSIDs of ALC293
Phillip Potter (2):
scsi: ufs: handle cleanup correctly on devm_reset_control_get error
leds: lp5523: check return value of lp5xx_read and jump to cleanup code
Ronnie Sahlberg (1):
cifs: fix memory leak in smb2_copychunk_range
Shay Drory (1):
RDMA/core: Don't access cm_id after its destruction
Takashi Iwai (5):
ALSA: intel8x0: Don't update period unless prepared
ALSA: line6: Fix racy initialization of LINE6 MIDI
ALSA: usb-audio: Validate MS endpoint descriptors
ALSA: hda/realtek: Fix silent headphone output on ASUS UX430UA
ALSA: hda/realtek: Add fixup for HP OMEN laptop
Takashi Sakamoto (5):
ALSA: dice: fix stream format for TC Electronic Konnekt Live at high sampling transfer frequency
ALSA: dice: fix stream format at middle sampling rate for Alesis iO 26
ALSA: firewire-lib: fix calculation for size of IR context payload
ALSA: bebob/oxfw: fix Kconfig entry for Mackie d.2 Pro
ALSA: firewire-lib: fix check for the size of isochronous packet payload
Tetsuo Handa (1):
tty: vt: always invoke vc->vc_sw->con_resize callback
Tom Seewald (1):
qlcnic: Add null check after calling netdev_alloc_skb
Zhen Lei (1):
scsi: qla2xxx: Fix error return code in qla82xx_write_flash_dword()
Zqiang (1):
locking/mutex: clear MUTEX_FLAGS if wait_list is empty due to signal
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 121 +SUBLEVEL = 122 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/openrisc/kernel/setup.c +2 -0
@@ -274,6 +274,8 @@ void calibrate_delay(void)pr_cont ("%lu.%02lu BogoMIPS (lpj=%lu)\n" , loops_per_jiffy / (500000 /HZ ), (loops_per_jiffy / (5000 /HZ )) %100 , loops_per_jiffy); + +of_node_put (cpu); }void __init setup_arch (char **cmdline_p)
drivers/cdrom/gdrom.c +10 -3
@@ -740,6 +740,13 @@ static const struct blk_mq_ops gdrom_mq_ops = {static int probe_gdrom (struct platform_device *devptr) {int err; + +/* +* Ensure our "one" device is initialized properly in case of previous +* usages of it +*/ +memset (&gd,0 ,sizeof (gd)); +/* Start the device */ if (gdrom_execute_diagnostic () !=1 ) {pr_warning ("ATA Probe for GDROM failed\n" );
@@ -828,6 +835,8 @@ static int remove_gdrom(struct platform_device *devptr)if (gdrom_major)unregister_blkdev (gdrom_major,GDROM_DEV_NAME );unregister_cdrom (gd.cd_info); +kfree (gd.cd_info); +kfree (gd.toc);return 0 ; }
@@ -843,7 +852,7 @@ static struct platform_driver gdrom_driver = {static int __init init_gdrom (void ) {int rc; - gd.toc =NULL ; + rc =platform_driver_register (&gdrom_driver);if (rc)return rc;
@@ -859,8 +868,6 @@ static void __exit exit_gdrom(void) {platform_device_unregister (pd);platform_driver_unregister (&gdrom_driver); -kfree (gd.toc); -kfree (gd.cd_info); }module_init (init_gdrom);
drivers/firmware/arm_scpi.c +3 -1
@@ -552,8 +552,10 @@ static unsigned long scpi_clk_get_val(u16 clk_id) ret =scpi_send_message (CMD_GET_CLOCK_VALUE , &le_clk_id,sizeof (le_clk_id), &rate,sizeof (rate)); +if (ret) +return 0 ; -return ret ? ret :le32_to_cpu (rate); +return le32_to_cpu (rate); }static int scpi_clk_set_val (u16 clk_id,unsigned long rate)
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +4 -2
@@ -190,9 +190,10 @@ static const struct soc15_reg_golden golden_settings_gc_10_1_2[] =SOC15_REG_GOLDEN_VALUE (GC ,0 , mmDB_DEBUG,0xffffffff ,0x20000000 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmDB_DEBUG2,0xffffffff ,0x00000420 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmDB_DEBUG3,0xffffffff ,0x00000200 ), -SOC15_REG_GOLDEN_VALUE (GC ,0 , mmDB_DEBUG4,0xffffffff ,0x04800000 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmDB_DEBUG4,0xffffffff ,0x04900000 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmDB_DFSM_TILES_IN_FLIGHT,0x0000ffff ,0x0000003f ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmDB_LAST_OF_BURST_CONFIG,0xffffffff ,0x03860204 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmGB_ADDR_CONFIG,0x0c1800ff ,0x00000044 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmGCR_GENERAL_CNTL,0x1ff0ffff ,0x00000500 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmGE_PRIV_CONTROL,0x00007fff ,0x000001fe ), SOC15_REG_GOLDEN_VALUE(GC, 0, mmGL1_PIPE_STEER, 0xffffffff, 0xe4e4e4e4),
@@ -210,12 +211,13 @@ static const struct soc15_reg_golden golden_settings_gc_10_1_2[] =SOC15_REG_GOLDEN_VALUE (GC ,0 , mmPA_SC_ENHANCE_2,0x00000820 ,0x00000820 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmPA_SC_LINE_STIPPLE_STATE,0x0000ff0f ,0x00000000 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmRMI_SPARE,0xffffffff ,0xffff3101 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSPI_CONFIG_CNTL_1,0x001f0000 ,0x00070104 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSQ_ALU_CLK_CTRL,0xffffffff ,0xffffffff ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSQ_ARB_CONFIG,0x00000133 ,0x00000130 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSQ_LDS_CLK_CTRL,0xffffffff ,0xffffffff ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmTA_CNTL_AUX,0xfff7ffff ,0x01030000 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmTCP_CNTL,0xffdf80ff ,0x479c0010 ), -SOC15_REG_GOLDEN_VALUE (GC ,0 , mmUTCL1_CTRL,0xffffffff ,0x00800000 ) +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmUTCL1_CTRL,0xffffffff ,0x00c00000 ) }; static const struct soc15_reg_golden golden_settings_gc_10_1_nv14[] =
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +7 -3
@@ -4661,7 +4661,7 @@ static void gfx_v9_0_update_3d_clock_gating(struct amdgpu_device *adev,amdgpu_gfx_rlc_enter_safe_mode (adev);/* Enable 3D CGCG/CGLS */ -if (enable && (adev->cg_flags &AMD_CG_SUPPORT_GFX_3D_CGCG )) { +if (enable) {/* write cmd to clear cgcg/cgls ov */ def = data =RREG32_SOC15 (GC ,0 , mmRLC_CGTT_MGCG_OVERRIDE);/* unset CGCG override */
@@ -4673,8 +4673,12 @@ static void gfx_v9_0_update_3d_clock_gating(struct amdgpu_device *adev,/* enable 3Dcgcg FSM(0x0000363f) */ def =RREG32_SOC15 (GC ,0 , mmRLC_CGCG_CGLS_CTRL_3D); - data = (0x36 <<RLC_CGCG_CGLS_CTRL_3D__CGCG_GFX_IDLE_THRESHOLD__SHIFT ) | -RLC_CGCG_CGLS_CTRL_3D__CGCG_EN_MASK ; +if (adev->cg_flags &AMD_CG_SUPPORT_GFX_3D_CGCG ) + data = (0x36 <<RLC_CGCG_CGLS_CTRL_3D__CGCG_GFX_IDLE_THRESHOLD__SHIFT ) | +RLC_CGCG_CGLS_CTRL_3D__CGCG_EN_MASK ; +else + data =0x0 <<RLC_CGCG_CGLS_CTRL_3D__CGCG_GFX_IDLE_THRESHOLD__SHIFT ; +if (adev->cg_flags &AMD_CG_SUPPORT_GFX_3D_CGLS ) data |= (0x000F <<RLC_CGCG_CGLS_CTRL_3D__CGLS_REP_COMPANSAT_DELAY__SHIFT ) |RLC_CGCG_CGLS_CTRL_3D__CGLS_EN_MASK ;
drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c +4 -0
@@ -100,6 +100,10 @@ static const struct soc15_reg_golden golden_settings_sdma_nv14[] = {static const struct soc15_reg_golden golden_settings_sdma_nv12[] = {SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSDMA0_RLC3_RB_WPTR_POLL_CNTL,0xfffffff7 ,0x00403000 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSDMA0_GB_ADDR_CONFIG,0x001877ff ,0x00000044 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSDMA0_GB_ADDR_CONFIG_READ,0x001877ff ,0x00000044 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSDMA1_GB_ADDR_CONFIG,0x001877ff ,0x00000044 ), +SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSDMA1_GB_ADDR_CONFIG_READ,0x001877ff ,0x00000044 ),SOC15_REG_GOLDEN_VALUE (GC ,0 , mmSDMA1_RLC3_RB_WPTR_POLL_CNTL,0xfffffff7 ,0x00403000 ), };
drivers/gpu/drm/amd/amdgpu/soc15.c +0 -2
@@ -1132,7 +1132,6 @@ static int soc15_common_early_init(void *handle) adev->cg_flags =AMD_CG_SUPPORT_GFX_MGCG |AMD_CG_SUPPORT_GFX_MGLS |AMD_CG_SUPPORT_GFX_CP_LS | -AMD_CG_SUPPORT_GFX_3D_CGCG |AMD_CG_SUPPORT_GFX_3D_CGLS |AMD_CG_SUPPORT_GFX_CGCG | AMD_CG_SUPPORT_GFX_CGLS |
@@ -1152,7 +1151,6 @@ static int soc15_common_early_init(void *handle)AMD_CG_SUPPORT_GFX_MGLS |AMD_CG_SUPPORT_GFX_RLC_LS |AMD_CG_SUPPORT_GFX_CP_LS | -AMD_CG_SUPPORT_GFX_3D_CGCG |AMD_CG_SUPPORT_GFX_3D_CGLS |AMD_CG_SUPPORT_GFX_CGCG | AMD_CG_SUPPORT_GFX_CGLS |
drivers/hwmon/lm80.c +2 -9
@@ -597,7 +597,6 @@ static int lm80_probe(struct i2c_client *client,struct device *dev = &client->dev;struct device *hwmon_dev;struct lm80_data *data; -int rv; data =devm_kzalloc (dev,sizeof (struct lm80_data ),GFP_KERNEL );if (!data)
@@ -610,14 +609,8 @@ static int lm80_probe(struct i2c_client *client,lm80_init_client (client);/* A few vars need to be filled upon startup */ - rv =lm80_read_value (client,LM80_REG_FAN_MIN (1 )); -if (rv <0 ) -return rv; - data->fan[f_min][0 ] = rv; - rv =lm80_read_value (client,LM80_REG_FAN_MIN (2 )); -if (rv <0 ) -return rv; - data->fan[f_min][1 ] = rv; + data->fan[f_min][0 ] =lm80_read_value (client,LM80_REG_FAN_MIN (1 )); + data->fan[f_min][1 ] =lm80_read_value (client,LM80_REG_FAN_MIN (2 )); hwmon_dev =devm_hwmon_device_register_with_groups (dev, client->name, data, lm80_groups);
drivers/infiniband/core/cma.c +3 -1
@@ -530,6 +530,7 @@ static void cma_release_dev(struct rdma_id_private *id_priv)list_del (&id_priv->list);cma_deref_dev (id_priv->cma_dev); id_priv->cma_dev =NULL ; + id_priv->id.device =NULL ;if (id_priv->id.route.addr.dev_addr.sgid_attr) {rdma_put_gid_attr (id_priv->id.route.addr.dev_addr.sgid_attr); id_priv->id.route.addr.dev_addr.sgid_attr =NULL ;
@@ -1871,6 +1872,7 @@ void rdma_destroy_id(struct rdma_cm_id *id)iw_destroy_cm_id (id_priv->cm_id.iw); }cma_leave_mc_groups (id_priv); +rdma_restrack_del (&id_priv->res);cma_release_dev (id_priv); }
@@ -3580,7 +3582,7 @@ int rdma_listen(struct rdma_cm_id *id, int backlog) } id_priv->backlog = backlog; -if (id->device) { +if (id_priv->cma_dev) {if (rdma_cap_ib_cm (id->device,1 )) { ret =cma_ib_listen (id_priv);if (ret)
drivers/infiniband/core/uverbs_std_types_device.c +2 -2
@@ -110,8 +110,8 @@ static int UVERBS_HANDLER(UVERBS_METHOD_INFO_HANDLES)(return ret; uapi_object =uapi_get_object (attrs->ufile->device->uapi, object_id); -if (!uapi_object) -return -EINVAL ; +if (IS_ERR (uapi_object)) +return PTR_ERR (uapi_object); handles =gather_objects_handle (attrs->ufile, uapi_object, attrs, out_len, &total);
drivers/infiniband/hw/mlx5/main.c +1 -0
@@ -6879,6 +6879,7 @@ static void *mlx5_ib_add_slave_port(struct mlx5_core_dev *mdev)if (bound) {rdma_roce_rescan_device (&dev->ib_dev); + mpi->ibdev->ib_active = true;break ; } }
drivers/infiniband/sw/rxe/rxe_qp.c +7 -0
@@ -260,6 +260,7 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,if (err) {vfree (qp->sq.queue->buf);kfree (qp->sq.queue); + qp->sq.queue =NULL ;return err; }
@@ -313,6 +314,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,if (err) {vfree (qp->rq.queue->buf);kfree (qp->rq.queue); + qp->rq.queue =NULL ;return err; } }
@@ -373,6 +375,11 @@ int rxe_qp_from_init(struct rxe_dev *rxe, struct rxe_qp *qp, struct rxe_pd *pd, err2:rxe_queue_cleanup (qp->sq.queue); err1: + qp->pd =NULL ; + qp->rcq =NULL ; + qp->scq =NULL ; + qp->srq =NULL ; +if (srq)rxe_drop_ref (srq);rxe_drop_ref (scq);
drivers/infiniband/sw/siw/siw_verbs.c +4 -7
@@ -314,7 +314,6 @@ struct ib_qp *siw_create_qp(struct ib_pd *pd,struct siw_ucontext *uctx = rdma_udata_to_drv_context(udata, struct siw_ucontext, base_ucontext); -struct siw_cq *scq =NULL , *rcq =NULL ;unsigned long flags;int num_sqe, num_rqe, rv =0 ;
@@ -353,10 +352,8 @@ struct ib_qp *siw_create_qp(struct ib_pd *pd, rv = -EINVAL ; goto err_out; } - scq =to_siw_cq (attrs->send_cq); - rcq =to_siw_cq (attrs->recv_cq); -if (!scq || (!rcq && !attrs->srq)) { +if (!attrs->send_cq || (!attrs->recv_cq && !attrs->srq)) {siw_dbg (base_dev,"send CQ or receive CQ invalid\n" ); rv = -EINVAL ; goto err_out;
@@ -400,7 +397,7 @@ struct ib_qp *siw_create_qp(struct ib_pd *pd,else {/* Zero sized SQ is not supported */ rv = -EINVAL ; - goto err_out; + goto err_out_xa; }if (num_rqe) num_rqe =roundup_pow_of_two (num_rqe);
@@ -423,8 +420,8 @@ struct ib_qp *siw_create_qp(struct ib_pd *pd, } } qp->pd = pd; - qp->scq = scq; - qp->rcq = rcq; + qp->scq =to_siw_cq (attrs->send_cq); + qp->rcq =to_siw_cq (attrs->recv_cq);if (attrs->srq) {/*
drivers/leds/leds-lp5523.c +1 -1
@@ -307,7 +307,7 @@ static int lp5523_init_program_engine(struct lp55xx_chip *chip)usleep_range (3000 ,6000 ); ret =lp55xx_read (chip,LP5523_REG_STATUS , &status);if (ret) -return ret; + goto out; status &=LP5523_ENG_STATUS_MASK ;if (status !=LP5523_ENG_STATUS_MASK ) {
drivers/md/dm-snap.c +1 -0
@@ -1408,6 +1408,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)if (!s->store->chunk_size) { ti->error ="Chunk size not set" ; + r = -EINVAL ; goto bad_read_metadata; }
drivers/media/platform/rcar_drif.c +0 -1
@@ -911,7 +911,6 @@ static int rcar_drif_g_fmt_sdr_cap(struct file *file, void *priv, {struct rcar_drif_sdr *sdr =video_drvdata (file); -memset (f->fmt.sdr.reserved,0 ,sizeof (f->fmt.sdr.reserved)); f->fmt.sdr.pixelformat = sdr->fmt->pixelformat; f->fmt.sdr.buffersize = sdr->fmt->buffersize;
drivers/misc/ics932s401.c +1 -1
@@ -134,7 +134,7 @@ static struct ics932s401_data *ics932s401_update_device(struct device *dev)for (i =0 ; i <NUM_MIRRORED_REGS ; i++) { temp =i2c_smbus_read_word_data (client, regs_to_copy[i]);if (temp <0 ) - data->regs[regs_to_copy[i]] =0 ; + temp =0 ; data->regs[regs_to_copy[i]] = temp >>8 ; }
drivers/mmc/host/sdhci-pci-gli.c +6 -1
@@ -318,8 +318,13 @@ static void sdhci_gli_voltage_switch(struct sdhci_host *host)* * Wait 5ms after set 1.8V signal enable in Host Control 2 register * to ensure 1.8V signal enable bit is set by GL9750/GL9755. +* +* ...however, the controller in the NUC10i3FNK4 (a 9755) requires +* slightly longer than 5ms before the control register reports that +* 1.8V is ready, and far longer still before the card will actually +* work reliably. */ -usleep_range (5000 ,5500 ); +usleep_range (100000 ,110000 ); }static void sdhci_gl9750_reset (struct sdhci_host *host,u8 mask)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +2 -1
@@ -1049,7 +1049,7 @@ int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode)for (i =0 ; i <QLCNIC_NUM_ILB_PKT ; i++) { skb =netdev_alloc_skb (adapter->netdev,QLCNIC_ILB_PKT_SIZE );if (!skb) -break ; + goto error;qlcnic_create_loopback_buff (skb->data, adapter->mac_addr);skb_put (skb,QLCNIC_ILB_PKT_SIZE ); adapter->ahw->diag_cnt =0 ;
@@ -1073,6 +1073,7 @@ int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode) cnt++; }if (cnt != i) { +error:dev_err (&adapter->pdev->dev,"LB Test: failed, TX[%d], RX[%d]\n" , i, cnt);if (mode !=QLCNIC_ILB_MODE )
drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c +4 -4
@@ -30,7 +30,7 @@ struct sunxi_priv_data {static int sun7i_gmac_init (struct platform_device *pdev,void *priv) {struct sunxi_priv_data *gmac = priv; -int ret; +int ret =0 ;if (gmac->regulator) { ret =regulator_enable (gmac->regulator);
@@ -51,11 +51,11 @@ static int sun7i_gmac_init(struct platform_device *pdev, void *priv) }else {clk_set_rate (gmac->tx_clk,SUN7I_GMAC_MII_RATE ); ret =clk_prepare (gmac->tx_clk); -if (ret) -return ret; +if (ret && gmac->regulator) +regulator_disable (gmac->regulator); } -return 0 ; +return ret; }static void sun7i_gmac_exit (struct platform_device *pdev,void *priv)
drivers/net/ethernet/sun/niu.c +20 -12
@@ -8144,10 +8144,10 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end)"VPD_SCAN: Reading in property [%s] len[%d]\n" , namebuf, prop_len);for (i =0 ; i < prop_len; i++) { - err =niu_pci_eeprom_read (np, off + i); -if (err >=0 ) - *prop_buf = err; - ++prop_buf; + err =niu_pci_eeprom_read (np, off + i); +if (err <0 ) +return err; + *prop_buf++ = err; } }
@@ -8158,14 +8158,14 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end) }/* ESPC_PIO_EN_ENABLE must be set */ -static void niu_pci_vpd_fetch (struct niu *np,u32 start) +static int niu_pci_vpd_fetch (struct niu *np,u32 start) {u32 offset;int err; err =niu_pci_eeprom_read16_swp (np, start +1 );if (err <0 ) -return ; +return err; offset = err +3 ;
@@ -8174,12 +8174,14 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start)u32 end; err =niu_pci_eeprom_read (np, here); +if (err <0 ) +return err;if (err !=0x90 ) -return ; +return -EINVAL ; err =niu_pci_eeprom_read16_swp (np, here +1 );if (err <0 ) -return ; +return err; here = start + offset +3 ; end = start + offset + err;
@@ -8187,9 +8189,12 @@ static void niu_pci_vpd_fetch(struct niu *np, u32 start) offset += err; err =niu_pci_vpd_scan_props (np, here, end); -if (err <0 || err ==1 ) -return ; +if (err <0 ) +return err; +if (err ==1 ) +return -EINVAL ; } +return 0 ; }/* ESPC_PIO_EN_ENABLE must be set */
@@ -9280,8 +9285,11 @@ static int niu_get_invariants(struct niu *np) offset =niu_pci_vpd_offset (np);netif_printk (np, probe,KERN_DEBUG , np->dev,"%s() VPD offset [%08x]\n" , __func__, offset); -if (offset) -niu_pci_vpd_fetch (np, offset); +if (offset) { + err =niu_pci_vpd_fetch (np, offset); +if (err <0 ) +return err; + }nw64 (ESPC_PIO_EN ,0 );if (np->flags &NIU_FLAGS_VPD_VALID ) {
drivers/net/wireless/realtek/rtlwifi/base.c +9 -9
@@ -436,9 +436,14 @@ static void _rtl_init_mac80211(struct ieee80211_hw *hw) } } -static void _rtl_init_deferred_work (struct ieee80211_hw *hw) +static int _rtl_init_deferred_work (struct ieee80211_hw *hw) {struct rtl_priv *rtlpriv =rtl_priv (hw); +struct workqueue_struct *wq; + + wq =alloc_workqueue ("%s" ,0 ,0 , rtlpriv->cfg->name); +if (!wq) +return -ENOMEM ;/* <1> timer */ timer_setup(&rtlpriv->works.watchdog_timer,
@@ -447,11 +452,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw) rtl_easy_concurrent_retrytimer_callback, 0);/* <2> work queue */ rtlpriv->works.hw = hw; - rtlpriv->works.rtl_wq =alloc_workqueue ("%s" ,0 ,0 , rtlpriv->cfg->name); -if (unlikely (!rtlpriv->works.rtl_wq)) { -pr_err ("Failed to allocate work queue\n" ); -return ; - } + rtlpriv->works.rtl_wq = wq;INIT_DELAYED_WORK (&rtlpriv->works.watchdog_wq, (void *)rtl_watchdog_wq_callback);
@@ -465,6 +466,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw) (void *)rtl_fwevt_wq_callback);INIT_DELAYED_WORK (&rtlpriv->works.c2hcmd_wq, (void *)rtl_c2hcmd_wq_callback); +return 0 ; }void rtl_deinit_deferred_work (struct ieee80211_hw *hw,bool ips_wq)
@@ -564,9 +566,7 @@ int rtl_init_core(struct ieee80211_hw *hw) rtlmac->link_state =MAC80211_NOLINK ;/* <6> init deferred work */ -_rtl_init_deferred_work (hw); - -return 0 ; +return _rtl_init_deferred_work (hw); }EXPORT_SYMBOL_GPL (rtl_init_core);
drivers/nvme/host/core.c +2 -1
@@ -2904,7 +2904,7 @@ int nvme_init_identify(struct nvme_ctrl *ctrl) ctrl->hmmaxd =le16_to_cpu (id->hmmaxd); } - ret =nvme_mpath_init (ctrl, id); + ret =nvme_mpath_init_identify (ctrl, id);kfree (id);if (ret <0 )
@@ -4145,6 +4145,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, min(default_ps_max_latency_us, (unsigned long)S32_MAX));nvme_fault_inject_init (&ctrl->fault_inject,dev_name (ctrl->device)); +nvme_mpath_init_ctrl (ctrl);return 0 ; out_free_name:
drivers/nvme/host/multipath.c +29 -26
75 lines not on this page · raw message
drivers/nvme/host/nvme.h +6 -2
@@ -549,7 +549,8 @@ void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl);int nvme_mpath_alloc_disk (struct nvme_ctrl *ctrl,struct nvme_ns_head *head);void nvme_mpath_add_disk (struct nvme_ns *ns,struct nvme_id_ns *id);void nvme_mpath_remove_disk (struct nvme_ns_head *head); -int nvme_mpath_init (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id); +int nvme_mpath_init_identify (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id); +void nvme_mpath_init_ctrl (struct nvme_ctrl *ctrl);void nvme_mpath_uninit (struct nvme_ctrl *ctrl);void nvme_mpath_stop (struct nvme_ctrl *ctrl);bool nvme_mpath_clear_current_path (struct nvme_ns *ns);
@@ -636,7 +637,10 @@ static inline void nvme_trace_bio_complete(struct request *req, blk_status_t status) { } -static inline int nvme_mpath_init (struct nvme_ctrl *ctrl, +static inline void nvme_mpath_init_ctrl (struct nvme_ctrl *ctrl) +{ +} +static inline int nvme_mpath_init_identify (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id) {if (ctrl->subsys->cmic & (1 <<3 ))
drivers/nvme/target/io-cmd-file.c +5 -3
@@ -38,9 +38,11 @@ int nvmet_file_ns_enable(struct nvmet_ns *ns) ns->file =filp_open (ns->device_path, flags,0 );if (IS_ERR (ns->file)) { -pr_err ("failed to open file %s: (%ld)\n" , - ns->device_path,PTR_ERR (ns->file)); -return PTR_ERR (ns->file); + ret =PTR_ERR (ns->file); +pr_err ("failed to open file %s: (%d)\n" , + ns->device_path, ret); + ns->file =NULL ; +return ret; } ret = vfs_getattr(&ns->file->f_path,
drivers/platform/mellanox/mlxbf-tmfifo.c +10 -1
@@ -294,6 +294,9 @@ mlxbf_tmfifo_get_next_desc(struct mlxbf_tmfifo_vring *vring)if (vring->next_avail ==virtio16_to_cpu (vdev, vr->avail->idx))return NULL ; +/* Make sure 'avail->idx' is visible already. */ +virtio_rmb (false); + idx = vring->next_avail % vr->num; head =virtio16_to_cpu (vdev, vr->avail->ring[idx]);if (WARN_ON (head >= vr->num))
@@ -322,7 +325,7 @@ static void mlxbf_tmfifo_release_desc(struct mlxbf_tmfifo_vring *vring,* done or not. Add a memory barrier here to make sure the update above * completes before updating the idx. */ -mb (); +virtio_mb (false); vr->used->idx =cpu_to_virtio16 (vdev, vr_idx +1 ); }
@@ -730,6 +733,12 @@ static bool mlxbf_tmfifo_rxtx_one_desc(struct mlxbf_tmfifo_vring *vring, desc =NULL ; fifo->vring[is_rx] =NULL ; +/* +* Make sure the load/store are in order before +* returning back to virtio. +*/ +virtio_mb (false); +/* Notify upper layer that packet is done. */ spin_lock_irqsave (&fifo->spin_lock[is_rx], flags);vring_interrupt (0 , vring->vq);
drivers/platform/x86/dell-smbios-wmi.c +2 -1
@@ -271,7 +271,8 @@ int init_dell_smbios_wmi(void)void exit_dell_smbios_wmi (void ) { -wmi_driver_unregister (&dell_smbios_wmi_driver); +if (wmi_supported) +wmi_driver_unregister (&dell_smbios_wmi_driver); }MODULE_DEVICE_TABLE (wmi, dell_smbios_wmi_id_table);
drivers/rapidio/rio_cm.c +8 -9
@@ -2127,6 +2127,14 @@ static int riocm_add_mport(struct device *dev,return -ENODEV ; } + cm->rx_wq =create_workqueue (DRV_NAME "/rxq" ); +if (!cm->rx_wq) { +rio_release_inb_mbox (mport, cmbox); +rio_release_outb_mbox (mport, cmbox); +kfree (cm); +return -ENOMEM ; + } +/* * Allocate and register inbound messaging buffers to be ready * to receive channel and system management requests
@@ -2137,15 +2145,6 @@ static int riocm_add_mport(struct device *dev, cm->rx_slots =RIOCM_RX_RING_SIZE ;mutex_init (&cm->rx_lock);riocm_rx_fill (cm,RIOCM_RX_RING_SIZE ); - cm->rx_wq =create_workqueue (DRV_NAME "/rxq" ); -if (!cm->rx_wq) { -riocm_error ("failed to allocate IBMBOX_%d on %s" , - cmbox, mport->name); -rio_release_outb_mbox (mport, cmbox); -kfree (cm); -return -ENOMEM ; - } -INIT_WORK (&cm->rx_work, rio_ibmsg_handler); cm->tx_slot =0 ;
drivers/scsi/qla2xxx/qla_nx.c +2 -1
@@ -1113,7 +1113,8 @@ qla82xx_write_flash_dword(struct qla_hw_data *ha, uint32_t flashaddr,return ret; } -if (qla82xx_flash_set_write_enable (ha)) + ret =qla82xx_flash_set_write_enable (ha); +if (ret <0 ) goto done_write;qla82xx_wr_32 (ha,QLA82XX_ROMUSB_ROM_WDATA , data);
drivers/scsi/ufs/ufs-hisi.c +9 -6
@@ -481,21 +481,24 @@ static int ufs_hisi_init_common(struct ufs_hba *hba) host->hba = hba;ufshcd_set_variant (hba, host); - host->rst =devm_reset_control_get (dev,"rst" ); + host->rst =devm_reset_control_get (dev,"rst" );if (IS_ERR (host->rst)) {dev_err (dev,"%s: failed to get reset control\n" , __func__); -return PTR_ERR (host->rst); + err =PTR_ERR (host->rst); + goto error; }ufs_hisi_set_pm_lvl (hba); err =ufs_hisi_get_resource (host); -if (err) { -ufshcd_set_variant (hba,NULL ); -return err; - } +if (err) + goto error;return 0 ; + +error: +ufshcd_set_variant (hba,NULL ); +return err; }static int ufs_hi3660_init (struct ufs_hba *hba)
drivers/scsi/ufs/ufshcd.c +4 -1
@@ -2615,7 +2615,7 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,* ufshcd_exec_dev_cmd - API for sending device management requests * @hba: UFS hba * @cmd_type: specifies the type (NOP, Query...) -* @timeout: time in seconds +* @timeout: timeout in milliseconds * * NOTE: Since there is only one available tag for device management commands, * it is expected you hold the hba->dev_cmd.lock mutex.
@@ -2645,6 +2645,9 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, } tag = req->tag;WARN_ON_ONCE (!ufshcd_valid_tag (hba, tag)); +/* Set the timeout such that the SCSI error handler is not activated. */ + req->timeout =msecs_to_jiffies (2 * timeout); +blk_mq_start_request (req);init_completion (&wait); lrbp = &hba->lrb[tag];
drivers/tty/serial/mvebu-uart.c +0 -3
@@ -818,9 +818,6 @@ static int mvebu_uart_probe(struct platform_device *pdev)return -EINVAL ; } -if (!match) -return -ENODEV ; -/* Assume that all UART ports have a DT alias or none has */ id =of_alias_get_id (pdev->dev.of_node,"serial" );if (!pdev->dev.of_node || id <0 )
drivers/tty/vt/vt.c +1 -1
@@ -1166,7 +1166,7 @@ static inline int resize_screen(struct vc_data *vc, int width, int height,/* Resizes the resolution of the display adapater */ int err =0 ; -if (vc->vc_mode !=KD_GRAPHICS && vc->vc_sw->con_resize) +if (vc->vc_sw->con_resize) err = vc->vc_sw->con_resize (vc, width, height, user);return err;
drivers/tty/vt/vt_ioctl.c +3 -3
@@ -895,17 +895,17 @@ int vt_ioctl(struct tty_struct *tty,if (vcp) {int ret;int save_scan_lines = vcp->vc_scan_lines; -int save_font_height = vcp->vc_font.height; +int save_cell_height = vcp->vc_cell_height;if (v.v_vlin) vcp->vc_scan_lines = v.v_vlin;if (v.v_clin) - vcp->vc_font.height = v.v_clin; + vcp->vc_cell_height = v.v_clin; vcp->vc_resize_user =1 ; ret =vc_resize (vcp, v.v_cols, v.v_rows);if (ret) { vcp->vc_scan_lines = save_scan_lines; - vcp->vc_font.height = save_font_height; + vcp->vc_cell_height = save_cell_height;console_unlock ();return ret; }
drivers/uio/uio_hv_generic.c +6 -2
@@ -296,8 +296,10 @@ hv_uio_probe(struct hv_device *dev, ret =vmbus_establish_gpadl (channel, pdata->recv_buf,RECV_BUFFER_SIZE , &pdata->recv_gpadl); -if (ret) +if (ret) { +vfree (pdata->recv_buf); goto fail_close; + }/* put Global Physical Address Label in name */ snprintf(pdata->recv_name, sizeof(pdata->recv_name),
@@ -316,8 +318,10 @@ hv_uio_probe(struct hv_device *dev, ret =vmbus_establish_gpadl (channel, pdata->send_buf,SEND_BUFFER_SIZE , &pdata->send_gpadl); -if (ret) +if (ret) { +vfree (pdata->send_buf); goto fail_close; + }snprintf (pdata->send_name,sizeof (pdata->send_name),"send:%u" , pdata->send_gpadl);
drivers/video/console/vgacon.c +32 -24
119 lines not on this page · raw message
drivers/video/fbdev/core/fbcon.c +1 -1
@@ -2058,7 +2058,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,return -EINVAL ;DPRINTK ("resize now %ix%i\n" , var.xres, var.yres); -if (con_is_visible (vc)) { +if (con_is_visible (vc) && vc->vc_mode ==KD_TEXT ) { var.activate =FB_ACTIVATE_NOW |FB_ACTIVATE_FORCE ;fb_set_var (info, &var);
drivers/video/fbdev/hgafb.c +12 -9
@@ -286,7 +286,7 @@ static int hga_card_detect(void) hga_vram =ioremap (0xb0000 , hga_vram_len);if (!hga_vram) - goto error; +return -ENOMEM ;if (request_region (0x3b0 ,12 ,"hgafb" )) release_io_ports =1 ;
@@ -346,13 +346,18 @@ static int hga_card_detect(void) hga_type_name ="Hercules" ;break ; } -return 1 ; +return 0 ; error:if (release_io_ports)release_region (0x3b0 ,12 );if (release_io_port)release_region (0x3bf ,1 ); -return 0 ; + +iounmap (hga_vram); + +pr_err ("hgafb: HGA card not detected.\n" ); + +return -EINVAL ; }/**
@@ -550,13 +555,11 @@ static struct fb_ops hgafb_ops = {static int hgafb_probe (struct platform_device *pdev) {struct fb_info *info; +int ret; -if (!hga_card_detect ()) { -printk (KERN_INFO "hgafb: HGA card not detected.\n" ); -if (hga_vram) -iounmap (hga_vram); -return -EINVAL ; - } + ret =hga_card_detect (); +if (ret) +return ret;printk (KERN_INFO "hgafb: %s with %ldK of memory detected.\n" , hga_type_name, hga_vram_len/1024 );
drivers/video/fbdev/imsttfb.c +0 -5
@@ -1512,11 +1512,6 @@ static int imsttfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) info->fix.smem_start = addr; info->screen_base = (__u8 *)ioremap (addr, par->ramdac ==IBM ?0x400000 :0x800000 ); -if (!info->screen_base) { -release_mem_region (addr, size); -framebuffer_release (info); -return -ENOMEM ; - } info->fix.mmio_start = addr +0x800000 ; par->dc_regs =ioremap (addr +0x800000 ,0x1000 ); par->cmap_regs_phys = addr +0x840000 ;
drivers/xen/xen-pciback/xenbus.c +17 -5
@@ -358,7 +358,8 @@ static int xen_pcibk_publish_pci_root(struct xen_pcibk_device *pdev,return err; } -static int xen_pcibk_reconfigure (struct xen_pcibk_device *pdev) +static int xen_pcibk_reconfigure (struct xen_pcibk_device *pdev, +enum xenbus_state state) {int err =0 ;int num_devs;
@@ -372,9 +373,7 @@ static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev)dev_dbg (&pdev->xdev->dev,"Reconfiguring device ...\n" );mutex_lock (&pdev->dev_lock); -/* Make sure we only reconfigure once */ -if (xenbus_read_driver_state (pdev->xdev->nodename) != - XenbusStateReconfiguring) +if (xenbus_read_driver_state (pdev->xdev->nodename) != state) goto out; err = xenbus_scanf(XBT_NIL, pdev->xdev->nodename, "num_devs", "%d",
@@ -499,6 +498,10 @@ static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev) } } +if (state != XenbusStateReconfiguring) +/* Make sure we only reconfigure once. */ + goto out; + err =xenbus_switch_state (pdev->xdev, XenbusStateReconfigured);if (err) { xenbus_dev_fatal(pdev->xdev, err,
@@ -524,7 +527,7 @@ static void xen_pcibk_frontend_changed(struct xenbus_device *xdev,break ;case XenbusStateReconfiguring: -xen_pcibk_reconfigure (pdev); +xen_pcibk_reconfigure (pdev, XenbusStateReconfiguring);break ;case XenbusStateConnected:
@@ -663,6 +666,15 @@ static void xen_pcibk_be_watch(struct xenbus_watch *watch,xen_pcibk_setup_backend (pdev);break ; +case XenbusStateInitialised: +/* +* We typically move to Initialised when the first device was +* added. Hence subsequent devices getting added may need +* reconfiguring. +*/ +xen_pcibk_reconfigure (pdev, XenbusStateInitialised); +break ; +default :break ; }
fs/btrfs/inode.c +1 -0
@@ -3571,6 +3571,7 @@ void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info) inode =list_first_entry (&fs_info->delayed_iputs, struct btrfs_inode, delayed_iput);run_delayed_iput_locked (fs_info, inode); +cond_resched_lock (&fs_info->delayed_iput_lock); }spin_unlock (&fs_info->delayed_iput_lock); }
fs/cifs/smb2ops.c +2 -0
@@ -1673,6 +1673,8 @@ smb2_copychunk_range(const unsigned int xid,cpu_to_le32 (min_t (u32, len, tcon->max_bytes_chunk));/* Request server copy to target from src identified by key */ +kfree (retbuf); + retbuf =NULL ; rc = SMB2_ioctl(xid, tcon, trgtfile->fid.persistent_fid, trgtfile->fid.volatile_fid, FSCTL_SRV_COPYCHUNK_WRITE, true /* is_fsctl */, (char *)pcchunk,
fs/ecryptfs/crypto.c +2 -4
@@ -311,10 +311,8 @@ static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,struct extent_crypt_result ecr;int rc =0 ; -if (!crypt_stat || !crypt_stat->tfm - || !(crypt_stat->flags &ECRYPTFS_STRUCT_INITIALIZED )) -return -EINVAL ; - +BUG_ON (!crypt_stat || !crypt_stat->tfm + || !(crypt_stat->flags &ECRYPTFS_STRUCT_INITIALIZED ));if (unlikely (ecryptfs_verbosity >0 )) {ecryptfs_printk (KERN_DEBUG ,"Key size [%zd]; key:\n" , crypt_stat->key_size);
fs/ext4/verity.c +55 -34
110 lines not on this page · raw message
include/linux/console_struct.h +1 -0
@@ -62,6 +62,7 @@ struct vc_data {unsigned int vc_rows;unsigned int vc_size_row;/* Bytes per row */ unsigned int vc_scan_lines;/* # of scan lines */ +unsigned int vc_cell_height;/* CRTC character cell height */ unsigned long vc_origin;/* [!] Start of real screen */ unsigned long vc_scr_end;/* [!] End of real screen */ unsigned long vc_visible_origin;/* [!] Top of visible window */
kernel/locking/mutex-debug.c +2 -2
@@ -57,7 +57,7 @@ void debug_mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter, task->blocked_on = waiter; } -void mutex_remove_waiter (struct mutex *lock,struct mutex_waiter *waiter, +void debug_mutex_remove_waiter (struct mutex *lock,struct mutex_waiter *waiter,struct task_struct *task) {DEBUG_LOCKS_WARN_ON (list_empty (&waiter->list));
@@ -65,7 +65,7 @@ void mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter,DEBUG_LOCKS_WARN_ON (task->blocked_on != waiter); task->blocked_on =NULL ; -list_del_init (&waiter->list); +INIT_LIST_HEAD (&waiter->list); waiter->task =NULL ; }
kernel/locking/mutex-debug.h +1 -1
@@ -22,7 +22,7 @@ extern void debug_mutex_free_waiter(struct mutex_waiter *waiter);extern void debug_mutex_add_waiter (struct mutex *lock,struct mutex_waiter *waiter,struct task_struct *task); -extern void mutex_remove_waiter (struct mutex *lock,struct mutex_waiter *waiter, +extern void debug_mutex_remove_waiter (struct mutex *lock,struct mutex_waiter *waiter,struct task_struct *task);extern void debug_mutex_unlock (struct mutex *lock); extern void debug_mutex_init(struct mutex *lock, const char *name,
kernel/locking/mutex.c +13 -5
@@ -204,7 +204,7 @@ static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_wait* Add @waiter to a given location in the lock wait_list and set the * FLAG_WAITERS flag if it's the first waiter. */ -static void __sched +static void __mutex_add_waiter (struct mutex *lock,struct mutex_waiter *waiter,struct list_head *list) {
@@ -215,6 +215,16 @@ __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter,__mutex_set_flag (lock,MUTEX_FLAG_WAITERS ); } +static void +__mutex_remove_waiter (struct mutex *lock,struct mutex_waiter *waiter) +{ +list_del (&waiter->list); +if (likely (list_empty (&lock->wait_list))) +__mutex_clear_flag (lock,MUTEX_FLAGS ); + +debug_mutex_remove_waiter (lock, waiter, current); +} +/* * Give up ownership to a specific task, when @task = NULL, this is equivalent * to a regular unlock. Sets PICKUP on a handoff, clears HANDOF, preserves
@@ -1071,9 +1081,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,__ww_mutex_check_waiters (lock, ww_ctx); } -mutex_remove_waiter (lock, &waiter, current); -if (likely (list_empty (&lock->wait_list))) -__mutex_clear_flag (lock,MUTEX_FLAGS ); +__mutex_remove_waiter (lock, &waiter);debug_mutex_free_waiter (&waiter);
@@ -1090,7 +1098,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, err:__set_current_state (TASK_RUNNING ); -mutex_remove_waiter (lock, &waiter, current); +__mutex_remove_waiter (lock, &waiter); err_early_kill:spin_unlock (&lock->wait_lock);debug_mutex_free_waiter (&waiter);
kernel/locking/mutex.h +1 -3
@@ -10,12 +10,10 @@* !CONFIG_DEBUG_MUTEXES case. Most of them are NOPs: */ -#define mutex_remove_waiter (lock, waiter, task) \ - __list_del((waiter)->list.prev, (waiter)->list.next) -#define debug_mutex_wake_waiter (lock, waiter) do { } while (0)#define debug_mutex_free_waiter (waiter) do { } while (0)#define debug_mutex_add_waiter (lock, waiter, ti) do { } while (0) +#define debug_mutex_remove_waiter (lock, waiter, ti) do { } while (0)#define debug_mutex_unlock (lock) do { } while (0)#define debug_mutex_init (lock, name, key) do { } while (0)
kernel/ptrace.c +17 -1
@@ -169,6 +169,21 @@ void __ptrace_unlink(struct task_struct *child)spin_unlock (&child->sighand->siglock); } +static bool looks_like_a_spurious_pid (struct task_struct *task) +{ +if (task->exit_code != ((PTRACE_EVENT_EXEC <<8 ) |SIGTRAP )) +return false; + +if (task_pid_vnr (task) == task->ptrace_message) +return false; +/* +* The tracee changed its pid but the PTRACE_EVENT_EXEC event +* was not wait()'ed, most probably debugger targets the old +* leader which was destroyed in de_thread(). +*/ +return true; +} +/* Ensure that nothing can wake it up, even SIGKILL */ static bool ptrace_freeze_traced (struct task_struct *task) {
@@ -179,7 +194,8 @@ static bool ptrace_freeze_traced(struct task_struct *task)return ret;spin_lock_irq (&task->sighand->siglock); -if (task_is_traced (task) && !__fatal_signal_pending (task)) { +if (task_is_traced (task) && !looks_like_a_spurious_pid (task) && + !__fatal_signal_pending (task)) { task->state = __TASK_TRACED; ret = true; }
net/bluetooth/l2cap_sock.c +20 -4
@@ -426,6 +426,20 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,break ; } +/* Only BR/EDR modes are supported here */ +switch (chan->mode) { +case L2CAP_MODE_BASIC : +case L2CAP_MODE_ERTM : +case L2CAP_MODE_STREAMING : +break ; +default : + err = -EINVAL ; +break ; + } + +if (err <0 ) +break ; +memset (&opts,0 ,sizeof (opts)); opts.imtu = chan->imtu; opts.omtu = chan->omtu;
@@ -685,10 +699,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,break ; } - chan->mode = opts.mode; -switch (chan->mode) { -case L2CAP_MODE_LE_FLOWCTL : -break ; +/* Only BR/EDR modes are supported here */ +switch (opts.mode) {case L2CAP_MODE_BASIC :clear_bit (CONF_STATE2_DEVICE , &chan->conf_state);break ;
@@ -702,6 +714,10 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,break ; } +if (err <0 ) +break ; + + chan->mode = opts.mode; chan->imtu = opts.imtu; chan->omtu = opts.omtu; chan->fcs = opts.fcs;
net/bluetooth/smp.c +9 -0
@@ -2685,6 +2685,15 @@ static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)if (skb->len <sizeof (*key))return SMP_INVALID_PARAMS ; +/* Check if remote and local public keys are the same and debug key is +* not in use. +*/ +if (!test_bit (SMP_FLAG_DEBUG_KEY , &smp->flags) && + !crypto_memneq (key, smp->local_pk,64 )) { +bt_dev_err (hdev,"Remote and local public keys are identical" ); +return SMP_UNSPECIFIED ; + } +memcpy (smp->remote_pk, key,64 );if (test_bit (SMP_FLAG_REMOTE_OOB , &smp->flags)) {
sound/firewire/Kconfig +2 -2
@@ -38,7 +38,7 @@ config SND_OXFW * Mackie(Loud) Onyx 1640i (former model) * Mackie(Loud) Onyx Satellite * Mackie(Loud) Tapco Link.Firewire - * Mackie(Loud) d.2 pro/d.4 pro + * Mackie(Loud) d.4 pro * Mackie(Loud) U.420/U.420d * TASCAM FireOne * Stanton Controllers & Systems 1 Deck/Mixer
@@ -84,7 +84,7 @@ config SND_BEBOB * PreSonus FIREBOX/FIREPOD/FP10/Inspire1394 * BridgeCo RDAudio1/Audio5 * Mackie Onyx 1220/1620/1640 (FireWire I/O Card) - * Mackie d.2 (FireWire Option) + * Mackie d.2 (FireWire Option) and d.2 Pro * Stanton FinalScratch 2 (ScratchAmp) * Tascam IF-FW/DM * Behringer XENIX UFX 1204/1604
sound/firewire/amdtp-stream.c +16 -11
@@ -617,18 +617,24 @@ static int parse_ir_ctx_header(struct amdtp_stream *s, unsigned int cycle, unsigned int *syt, unsigned int index) {const __be32 *cip_header; +unsigned int cip_header_size;int err; *payload_length =be32_to_cpu (ctx_header[0 ]) >>ISO_DATA_LENGTH_SHIFT ; -if (*payload_length > s->ctx_data.tx.ctx_header_size + - s->ctx_data.tx.max_ctx_payload_length) { + +if (!(s->flags &CIP_NO_HEADER )) + cip_header_size =8 ; +else + cip_header_size =0 ; + +if (*payload_length > cip_header_size + s->ctx_data.tx.max_ctx_payload_length) {dev_err (&s->unit->device,"Detect jumbo payload: %04x %04x\n" , - *payload_length, s->ctx_data.tx.max_ctx_payload_length); + *payload_length, cip_header_size + s->ctx_data.tx.max_ctx_payload_length);return -EIO ; } -if (!(s->flags &CIP_NO_HEADER )) { +if (cip_header_size >0 ) { cip_header = ctx_header +2 ; err =check_cip_header (s, cip_header, *payload_length, data_blocks, data_block_counter, syt);
@@ -932,23 +938,22 @@ static int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed) s->ctx_data.rx.last_syt_offset =TICKS_PER_CYCLE ; } -/* initialize packet buffer */ +// initialize packet buffer. + max_ctx_payload_size =amdtp_stream_get_max_payload (s);if (s->direction ==AMDTP_IN_STREAM ) { dir =DMA_FROM_DEVICE ; type =FW_ISO_CONTEXT_RECEIVE ; -if (!(s->flags &CIP_NO_HEADER )) +if (!(s->flags &CIP_NO_HEADER )) { + max_ctx_payload_size -=8 ; ctx_header_size =IR_CTX_HEADER_SIZE_CIP ; -else + }else { ctx_header_size =IR_CTX_HEADER_SIZE_NO_CIP ; - - max_ctx_payload_size =amdtp_stream_get_max_payload (s) - - ctx_header_size; + } }else { dir =DMA_TO_DEVICE ; type =FW_ISO_CONTEXT_TRANSMIT ; ctx_header_size =0 ;// No effect for IT context. - max_ctx_payload_size =amdtp_stream_get_max_payload (s);if (!(s->flags &CIP_NO_HEADER )) max_ctx_payload_size -=IT_PKT_HEADER_SIZE_CIP ; }
sound/firewire/bebob/bebob.c +1 -1
@@ -387,7 +387,7 @@ static const struct ieee1394_device_id bebob_id_table[] = {SND_BEBOB_DEV_ENTRY (VEN_BRIDGECO ,0x00010049 , &spec_normal),/* Mackie, Onyx 1220/1620/1640 (Firewire I/O Card) */ SND_BEBOB_DEV_ENTRY (VEN_MACKIE2 ,0x00010065 , &spec_normal), -/* Mackie, d.2 (Firewire Option) */ +// Mackie, d.2 (Firewire option card) and d.2 Pro (the card is built-in). SND_BEBOB_DEV_ENTRY (VEN_MACKIE1 ,0x00010067 , &spec_normal),/* Stanton, ScratchAmp */ SND_BEBOB_DEV_ENTRY(VEN_STANTON, 0x00000001, &spec_normal),
sound/firewire/dice/dice-alesis.c +1 -1
@@ -16,7 +16,7 @@ alesis_io14_tx_pcm_chs[MAX_STREAMS][SND_DICE_RATE_MODE_COUNT] = {static const unsigned int alesis_io26_tx_pcm_chs[MAX_STREAMS ][SND_DICE_RATE_MODE_COUNT ] = { {10 ,10 ,4 },/* Tx0 = Analog + S/PDIF. */ - {16 ,8 ,0 },/* Tx1 = ADAT1 + ADAT2. */ + {16 ,4 ,0 },/* Tx1 = ADAT1 + ADAT2 (available at low rate). */ };int snd_dice_detect_alesis_formats (struct snd_dice *dice)
sound/firewire/dice/dice-tcelectronic.c +2 -2
@@ -38,8 +38,8 @@ static const struct dice_tc_spec konnekt_24d = { };static const struct dice_tc_spec konnekt_live = { - .tx_pcm_chs = {{16 ,16 ,16 }, {0 ,0 ,0 } }, - .rx_pcm_chs = {{16 ,16 ,16 }, {0 ,0 ,0 } }, + .tx_pcm_chs = {{16 ,16 ,6 }, {0 ,0 ,0 } }, + .rx_pcm_chs = {{16 ,16 ,6 }, {0 ,0 ,0 } }, .has_midi = true, };
sound/firewire/oxfw/oxfw.c +0 -1
@@ -350,7 +350,6 @@ static const struct ieee1394_device_id oxfw_id_table[] = {* Onyx-i series (former models): 0x081216 * Mackie Onyx Satellite: 0x00200f * Tapco LINK.firewire 4x6: 0x000460 -* d.2 pro: Unknown * d.4 pro: Unknown * U.420: Unknown * U.420d: Unknown
sound/isa/sb/sb8.c +0 -4
@@ -96,10 +96,6 @@ static int snd_sb8_probe(struct device *pdev, unsigned int dev)/* block the 0x388 port to avoid PnP conflicts */ acard->fm_res =request_region (0x388 ,4 ,"SoundBlaster FM" ); -if (!acard->fm_res) { - err = -EBUSY ; - goto _err; - } if (port[dev] != SNDRV_AUTO_PORT) { if ((err = snd_sbdsp_create(card, port[dev], irq[dev],
sound/pci/hda/patch_realtek.c +134 -1
229 lines not on this page · raw message
sound/pci/intel8x0.c +7 -0
@@ -354,6 +354,7 @@ struct ichdev {unsigned int ali_slot;/* ALI DMA slot */ struct ac97_pcm *pcm;int pcm_open_flag; + unsigned int prepared:1; unsigned int suspended: 1; };
@@ -714,6 +715,9 @@ static inline void snd_intel8x0_update(struct intel8x0 *chip, struct ichdev *ichint status, civ, i, step;int ack =0 ; +if (!ichdev->prepared || ichdev->suspended) +return ; +spin_lock_irqsave (&chip->reg_lock, flags); status =igetbyte (chip, port + ichdev->roff_sr); civ =igetbyte (chip, port +ICH_REG_OFF_CIV );
@@ -907,6 +911,7 @@ static int snd_intel8x0_hw_params(struct snd_pcm_substream *substream,if (ichdev->pcm_open_flag) {snd_ac97_pcm_close (ichdev->pcm); ichdev->pcm_open_flag =0 ; + ichdev->prepared =0 ; } err = snd_ac97_pcm_open(ichdev->pcm, params_rate(hw_params), params_channels(hw_params),
@@ -928,6 +933,7 @@ static int snd_intel8x0_hw_free(struct snd_pcm_substream *substream)if (ichdev->pcm_open_flag) {snd_ac97_pcm_close (ichdev->pcm); ichdev->pcm_open_flag =0 ; + ichdev->prepared =0 ; }return snd_pcm_lib_free_pages (substream); }
@@ -1002,6 +1008,7 @@ static int snd_intel8x0_pcm_prepare(struct snd_pcm_substream *substream) ichdev->pos_shift = (runtime->sample_bits >16 ) ?2 :1 ; }snd_intel8x0_setup_periods (chip, ichdev); + ichdev->prepared =1 ;return 0 ; }
sound/usb/line6/driver.c +4 -0
@@ -690,6 +690,10 @@ static int line6_init_cap_control(struct usb_line6 *line6) line6->buffer_message =kmalloc (LINE6_MIDI_MESSAGE_MAXLEN ,GFP_KERNEL );if (!line6->buffer_message)return -ENOMEM ; + + ret =line6_init_midi (line6); +if (ret <0 ) +return ret; }else { ret =line6_hwdep_init (line6);if (ret <0 )
sound/usb/line6/pod.c +0 -5
@@ -376,11 +376,6 @@ static int pod_init(struct usb_line6 *line6,if (err <0 )return err; -/* initialize MIDI subsystem: */ - err =line6_init_midi (line6); -if (err <0 ) -return err; -/* initialize PCM subsystem: */ err =line6_init_pcm (line6, &pod_pcm_properties);if (err <0 )
sound/usb/line6/variax.c +0 -6
@@ -159,7 +159,6 @@ static int variax_init(struct usb_line6 *line6, const struct usb_device_id *id) {struct usb_line6_variax *variax =line6_to_variax (line6); -int err; line6->process_message = line6_variax_process_message; line6->disconnect = line6_variax_disconnect;
@@ -172,11 +171,6 @@ static int variax_init(struct usb_line6 *line6,if (variax->buffer_activate ==NULL )return -ENOMEM ; -/* initialize MIDI subsystem: */ - err =line6_init_midi (&variax->line6); -if (err <0 ) -return err; -/* initiate startup procedure: */ schedule_delayed_work (&line6->startup_work,msecs_to_jiffies (VARIAX_STARTUP_DELAY1 ));
sound/usb/midi.c +4 -0
@@ -1889,8 +1889,12 @@ static int snd_usbmidi_get_ms_info(struct snd_usb_midi *umidi, ms_ep =find_usb_ms_endpoint_descriptor (hostep);if (!ms_ep)continue ; +if (ms_ep->bLength <=sizeof (*ms_ep)) +continue ;if (ms_ep->bNumEmbMIDIJack >0x10 )continue ; +if (ms_ep->bLength <sizeof (*ms_ep) + ms_ep->bNumEmbMIDIJack) +continue ;if (usb_endpoint_dir_out (ep)) {if (endpoints[epidx].out_ep) {if (++epidx >=MIDI_MAX_ENDPOINTS ) {
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 5.4.122 kernel.
All users of the 5.4 kernel series must upgrade.
Quoted 9 lines
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-5.4.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=summarythanks,
greg k-h
Tested on arm64 and x86 for 5.4.122,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.4.y
Version: 5.4.122
Commit: 67154cff6258e46b05acc9f797e3328ed839b0e2
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8895
passed: 8895
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8895
passed: 8895
failed: 0
timeout: 0
--------------------------------------------------------------------