Linux 5.4.144
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 143 +SUBLEVEL = 144 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arc/kernel/vmlinux.lds.S +2 -0
@@ -88,6 +88,8 @@ SECTIONS CPUIDLE_TEXT LOCK_TEXT KPROBES_TEXT + IRQENTRY_TEXT + SOFTIRQENTRY_TEXT *(.fixup) *(.gnu.warning) }
arch/arm64/boot/dts/qcom/msm8994-angler-rev-101.dts +4 -0
@@ -30,3 +30,7 @@ }; }; }; + +&msmgpio { + gpio-reserved-ranges = <85 4>; +};
arch/parisc/include/asm/string.h +0 -15
@@ -8,19 +8,4 @@ extern void * memset(void *, int, size_t);#define __HAVE_ARCH_MEMCPYvoid *memcpy (void * dest,const void *src,size_t count); -#define __HAVE_ARCH_STRLEN -extern size_t strlen (const char *s); - -#define __HAVE_ARCH_STRCPY -extern char *strcpy (char *dest,const char *src); - -#define __HAVE_ARCH_STRNCPY -extern char *strncpy (char *dest,const char *src,size_t count); - -#define __HAVE_ARCH_STRCAT -extern char *strcat (char *dest,const char *src); - -#define __HAVE_ARCH_MEMSET -extern void *memset (void *,int ,size_t ); -#endif
arch/parisc/kernel/parisc_ksyms.c +0 -4
@@ -17,10 +17,6 @@#include <linux/string.h> EXPORT_SYMBOL (memset); -EXPORT_SYMBOL (strlen); -EXPORT_SYMBOL (strcpy); -EXPORT_SYMBOL (strncpy); -EXPORT_SYMBOL (strcat);#include <linux/atomic.h> EXPORT_SYMBOL (__xchg8);
arch/parisc/lib/Makefile +2 -2
@@ -3,7 +3,7 @@ # Makefile for parisc-specific library files # -lib-y := lusercopy.o bitops.o checksum.o io.o memcpy.o \ - ucmpdi2.o delay.o string.o +lib-y := lusercopy.o bitops.o checksum.o io.o memset.o memcpy.o \ + ucmpdi2.o delay.o obj-y := iomap.o
arch/parisc/lib/memset.c new file +72 -0
72 lines not on this page · raw message
arch/parisc/lib/string.S deleted +0 -136
136 lines not on this page · raw message
arch/x86/events/intel/uncore_snbep.c +1 -1
@@ -4382,7 +4382,7 @@ static void snr_uncore_mmio_init_box(struct intel_uncore_box *box)return ;pci_read_config_dword (pdev,SNR_IMC_MMIO_BASE_OFFSET , &pci_dword); - addr = (pci_dword &SNR_IMC_MMIO_BASE_MASK ) <<23 ; + addr = ((resource_size_t )pci_dword &SNR_IMC_MMIO_BASE_MASK ) <<23 ;pci_read_config_dword (pdev,SNR_IMC_MMIO_MEM0_OFFSET , &pci_dword); addr |= (pci_dword &SNR_IMC_MMIO_MEM0_MASK ) <<12 ;
arch/x86/kvm/mmu.c +9 -1
@@ -4666,7 +4666,15 @@ static void reset_rsvds_bits_mask_ept(struct kvm_vcpu *vcpu,void reset_shadow_zero_bits_mask (struct kvm_vcpu *vcpu,struct kvm_mmu *context) { -bool uses_nx = context->nx || +/* +* KVM uses NX when TDP is disabled to handle a variety of scenarios, +* notably for huge SPTEs if iTLB multi-hit mitigation is enabled and +* to generate correct permissions for CR0.WP=0/CR4.SMEP=1/EFER.NX=0. +* The iTLB multi-hit workaround can be toggled at any time, so assume +* NX can be used by any non-nested shadow MMU to avoid having to reset +* MMU contexts. Note, KVM forces EFER.NX=1 when TDP is disabled. +*/ +bool uses_nx = context->nx || !tdp_enabled || context->mmu_role.base.smep_andnot_wp;struct rsvd_bits_validate *shadow_zero_check;int i;
drivers/block/floppy.c +13 -14
@@ -4063,22 +4063,21 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)if (UFDCS ->rawcmd ==1 )UFDCS ->rawcmd =2 ; -if (mode & (FMODE_READ |FMODE_WRITE )) { -UDRS ->last_checked =0 ; -clear_bit (FD_OPEN_SHOULD_FAIL_BIT , &UDRS ->flags); -check_disk_change (bdev); -if (test_bit (FD_DISK_CHANGED_BIT , &UDRS ->flags)) - goto out; -if (test_bit (FD_OPEN_SHOULD_FAIL_BIT , &UDRS ->flags)) +if (!(mode &FMODE_NDELAY )) { +if (mode & (FMODE_READ |FMODE_WRITE )) { +UDRS ->last_checked =0 ; +clear_bit (FD_OPEN_SHOULD_FAIL_BIT , &UDRS ->flags); +check_disk_change (bdev); +if (test_bit (FD_DISK_CHANGED_BIT , &UDRS ->flags)) + goto out; +if (test_bit (FD_OPEN_SHOULD_FAIL_BIT , &UDRS ->flags)) + goto out; + } + res = -EROFS ; +if ((mode &FMODE_WRITE ) && + !test_bit (FD_DISK_WRITABLE_BIT , &UDRS ->flags)) goto out; } - - res = -EROFS ; - -if ((mode &FMODE_WRITE ) && - !test_bit (FD_DISK_WRITABLE_BIT , &UDRS ->flags)) - goto out; -mutex_unlock (&open_lock);mutex_unlock (&floppy_mutex);return 0 ;
drivers/gpu/drm/drm_ioc32.c +1 -3
@@ -863,8 +863,6 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd, req.request.sequence = req32.request.sequence; req.request.signal = req32.request.signal; err =drm_ioctl_kernel (file, drm_wait_vblank_ioctl, &req,DRM_UNLOCKED ); -if (err) -return err; req32.reply.type = req.reply.type; req32.reply.sequence = req.reply.sequence;
@@ -873,7 +871,7 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd,if (copy_to_user (argp, &req32,sizeof (req32)))return -EFAULT ; -return 0 ; +return err; }#if defined(CONFIG_X86 )
drivers/gpu/drm/i915/gt/intel_timeline.c +8 -0
@@ -289,6 +289,14 @@ void intel_timeline_fini(struct intel_timeline *timeline)i915_gem_object_unpin_map (timeline->hwsp_ggtt->obj);i915_vma_put (timeline->hwsp_ggtt); + +/* +* A small race exists between intel_gt_retire_requests_timeout and +* intel_timeline_exit which could result in the syncmap not getting +* free'd. Rather than work to hard to seal this race, simply cleanup +* the syncmap on fini. +*/ +i915_syncmap_free (&timeline->sync); } struct intel_timeline *
drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c +1 -1
@@ -419,7 +419,7 @@ nvkm_dp_train(struct nvkm_dp *dp, u32 dataKBps)return ret; } -static void +void nvkm_dp_disable (struct nvkm_outp *outp,struct nvkm_ior *ior) {struct nvkm_dp *dp =nvkm_dp (outp);
drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.h +1 -0
@@ -32,6 +32,7 @@ struct nvkm_dp {int nvkm_dp_new (struct nvkm_disp *,int index,struct dcb_output *,struct nvkm_outp **); +void nvkm_dp_disable (struct nvkm_outp *,struct nvkm_ior *);/* DPCD Receiver Capabilities */ #define DPCD_RC00_DPCD_REV 0x00000
drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c +9 -0
@@ -22,6 +22,7 @@* Authors: Ben Skeggs */ #include "outp.h" +#include "dp.h" #include "ior.h" #include <subdev/bios.h>
@@ -216,6 +217,14 @@ nvkm_outp_init_route(struct nvkm_outp *outp)if (!ior->arm.head || ior->arm.proto != proto) {OUTP_DBG (outp,"no heads (%x %d %d)" , ior->arm.head, ior->arm.proto, proto); + +/* The EFI GOP driver on Ampere can leave unused DP links routed, +* which we don't expect. The DisableLT IED script *should* get +* us back to where we need to be. +*/ +if (ior->func->route.get && !ior->arm.head && outp->info.type ==DCB_OUTPUT_DP ) +nvkm_dp_disable (outp, ior); +return ; }
drivers/infiniband/hw/bnxt_re/ib_verbs.c +1 -0
@@ -1404,6 +1404,7 @@ int bnxt_re_create_srq(struct ib_srq *ib_srq,if (nq) nq->budget++;atomic_inc (&rdev->srq_count); +spin_lock_init (&srq->lock);return 0 ;
drivers/infiniband/hw/efa/efa_main.c +1 -0
@@ -340,6 +340,7 @@ static int efa_enable_msix(struct efa_dev *dev) }if (irq_num != msix_vecs) { +efa_disable_msix (dev);dev_err (&dev->pdev->dev,"Allocated %d MSI-X (out of %d requested)\n" , irq_num, msix_vecs);
drivers/infiniband/hw/hfi1/sdma.c +4 -5
@@ -3056,6 +3056,7 @@ static void __sdma_process_event(struct sdma_engine *sde,static int _extend_sdma_tx_descs (struct hfi1_devdata *dd,struct sdma_txreq *tx) {int i; +struct sdma_desc *descp;/* Handle last descriptor */ if (unlikely ((tx->num_desc == (MAX_DESC -1 )))) {
@@ -3076,12 +3077,10 @@ static int _extend_sdma_tx_descs(struct hfi1_devdata *dd, struct sdma_txreq *tx)if (unlikely (tx->num_desc ==MAX_DESC )) goto enomem; - tx->descp =kmalloc_array ( -MAX_DESC , -sizeof (struct sdma_desc ), -GFP_ATOMIC ); -if (!tx->descp) + descp =kmalloc_array (MAX_DESC ,sizeof (struct sdma_desc ),GFP_ATOMIC ); +if (!descp) goto enomem; + tx->descp = descp;/* reserve last descriptor for coalescing */ tx->desc_limit =MAX_DESC -1 ;
drivers/mmc/host/sdhci-msm.c +18 -0
@@ -1589,6 +1589,23 @@ static void sdhci_msm_set_clock(struct sdhci_host *host, unsigned int clock)__sdhci_msm_set_clock (host, clock); } +static void sdhci_msm_set_timeout (struct sdhci_host *host,struct mmc_command *cmd) +{ +u32 count, start =15 ; + +__sdhci_set_timeout (host, cmd); + count =sdhci_readb (host,SDHCI_TIMEOUT_CONTROL ); +/* +* Update software timeout value if its value is less than hardware data +* timeout value. Qcom SoC hardware data timeout value was calculated +* using 4 * MCLK * 2^(count + 13). where MCLK = 1 / host->clock. +*/ +if (cmd && cmd->data && host->clock >400000 && + host->clock <=50000000 && + ((1 << (count + start)) > (10 * host->clock))) + host->data_timeout =22LL *NSEC_PER_SEC ; +} +/* * Platform specific register write functions. This is so that, if any * register write needs to be followed up by platform specific actions,
@@ -1753,6 +1770,7 @@ static const struct sdhci_ops sdhci_msm_ops = { .set_uhs_signaling = sdhci_msm_set_uhs_signaling, .write_w = sdhci_msm_writew, .write_b = sdhci_msm_writeb, + .set_timeout = sdhci_msm_set_timeout, };static const struct sdhci_pltfm_data sdhci_msm_pdata = {
drivers/net/can/usb/esd_usb2.c +2 -2
@@ -224,8 +224,8 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv,if (id ==ESD_EV_CAN_ERROR_EXT ) {u8 state = msg->msg.rx.data[0 ];u8 ecc = msg->msg.rx.data[1 ]; -u8 txerr = msg->msg.rx.data[2 ]; -u8 rxerr = msg->msg.rx.data[3 ]; +u8 rxerr = msg->msg.rx.data[2 ]; +u8 txerr = msg->msg.rx.data[3 ]; skb =alloc_can_err_skb (priv->netdev, &cf);if (skb ==NULL ) {
drivers/net/dsa/mt7530.c +1 -4
@@ -842,11 +842,8 @@ mt7530_port_bridge_leave(struct dsa_switch *ds, int port,/* Remove this port from the port matrix of the other ports * in the same bridge. If the port is disabled, port matrix * is kept and not being setup until the port becomes enabled. -* And the other port's port matrix cannot be broken when the -* other port is still a VLAN-aware port. */ -if (dsa_is_user_port (ds, i) && i != port && - !dsa_port_is_vlan_filtering (&ds->ports[i])) { +if (dsa_is_user_port (ds, i) && i != port) {if (dsa_to_port (ds, i)->bridge_dev != bridge)continue ;if (priv->ports[i].enable)
drivers/net/ethernet/apm/xgene-v2/main.c +3 -1
@@ -677,11 +677,13 @@ static int xge_probe(struct platform_device *pdev) ret =register_netdev (ndev);if (ret) {netdev_err (ndev,"Failed to register netdev\n" ); - goto err; + goto err_mdio_remove; }return 0 ; +err_mdio_remove: +xge_mdio_remove (ndev); err:free_netdev (ndev);
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +3 -0
@@ -257,6 +257,9 @@ enum hclge_opcode_type {/* Led command */ HCLGE_OPC_LED_STATUS_CFG =0xB000 , +/* clear hardware resource command */ +HCLGE_OPC_CLEAR_HW_RESOURCE =0x700B , +/* NCL config command */ HCLGE_OPC_QUERY_NCL_CONFIG = 0x7011,/* M7 stats command */
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c +2 -11
@@ -281,21 +281,12 @@ static int hclge_ieee_getpfc(struct hnae3_handle *h, struct ieee_pfc *pfc)u64 requests[HNAE3_MAX_TC ], indications[HNAE3_MAX_TC ];struct hclge_vport *vport =hclge_get_vport (h);struct hclge_dev *hdev = vport->back; -u8 i, j, pfc_map, *prio_tc;int ret; +u8 i;memset (pfc,0 ,sizeof (*pfc)); pfc->pfc_cap = hdev->pfc_max; - prio_tc = hdev->tm_info.prio_tc; - pfc_map = hdev->tm_info.hw_pfc_map; - -/* Pfc setting is based on TC */ -for (i =0 ; i < hdev->tm_info.num_tc; i++) { -for (j =0 ; j <HNAE3_MAX_USER_PRIO ; j++) { -if ((prio_tc[j] == i) && (pfc_map &BIT (i))) - pfc->pfc_en |=BIT (j); - } - } + pfc->pfc_en = hdev->tm_info.pfc_en; ret =hclge_pfc_tx_stats_get (hdev, requests);if (ret)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +31 -1
@@ -8006,7 +8006,11 @@ static int hclge_init_vlan_config(struct hclge_dev *hdev)static void hclge_add_vport_vlan_table (struct hclge_vport *vport,u16 vlan_id,bool writen_to_tbl) { -struct hclge_vport_vlan_cfg *vlan; +struct hclge_vport_vlan_cfg *vlan, *tmp; + +list_for_each_entry_safe (vlan, tmp, &vport->vlan_list, node) +if (vlan->vlan_id == vlan_id) +return ; vlan =kzalloc (sizeof (*vlan),GFP_KERNEL );if (!vlan)
@@ -9165,6 +9169,28 @@ static void hclge_clear_resetting_state(struct hclge_dev *hdev) } } +static int hclge_clear_hw_resource (struct hclge_dev *hdev) +{ +struct hclge_desc desc; +int ret; + +hclge_cmd_setup_basic_desc (&desc,HCLGE_OPC_CLEAR_HW_RESOURCE , false); + + ret =hclge_cmd_send (&hdev->hw, &desc,1 ); +/* This new command is only supported by new firmware, it will +* fail with older firmware. Error value -EOPNOSUPP can only be +* returned by older firmware running this command, to keep code +* backward compatible we will override this value and return +* success. +*/ +if (ret && ret != -EOPNOTSUPP ) { +dev_err (&hdev->pdev->dev, +"failed to clear hw resource, ret = %d\n" , ret); +return ret; + } +return 0 ; +} +static int hclge_init_ae_dev (struct hnae3_ae_dev *ae_dev) {struct pci_dev *pdev = ae_dev->pdev;
@@ -9206,6 +9232,10 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)if (ret) goto err_cmd_uninit; + ret =hclge_clear_hw_resource (hdev); +if (ret) + goto err_cmd_uninit; + ret =hclge_get_cap (hdev);if (ret) { dev_err(&pdev->dev, "get hw capability error, ret = %d.\n",
drivers/net/ethernet/intel/e1000e/ich8lan.c +13 -1
@@ -995,6 +995,8 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link) {u32 reg = link << (E1000_LTRV_REQ_SHIFT +E1000_LTRV_NOSNOOP_SHIFT ) | link <<E1000_LTRV_REQ_SHIFT |E1000_LTRV_SEND ; +u16 max_ltr_enc_d =0 ;/* maximum LTR decoded by platform */ +u16 lat_enc_d =0 ;/* latency decoded */ u16 lat_enc =0 ;/* latency encoded */ if (link) {
@@ -1048,7 +1050,17 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link) E1000_PCI_LTR_CAP_LPT + 2, &max_nosnoop); max_ltr_enc =max_t (u16, max_snoop, max_nosnoop); -if (lat_enc > max_ltr_enc) + lat_enc_d = (lat_enc &E1000_LTRV_VALUE_MASK ) * + (1U << (E1000_LTRV_SCALE_FACTOR * + ((lat_enc &E1000_LTRV_SCALE_MASK ) + >>E1000_LTRV_SCALE_SHIFT ))); + + max_ltr_enc_d = (max_ltr_enc &E1000_LTRV_VALUE_MASK ) * + (1U << (E1000_LTRV_SCALE_FACTOR * + ((max_ltr_enc &E1000_LTRV_SCALE_MASK ) + >>E1000_LTRV_SCALE_SHIFT ))); + +if (lat_enc_d > max_ltr_enc_d) lat_enc = max_ltr_enc; }
drivers/net/ethernet/intel/e1000e/ich8lan.h +3 -0
@@ -274,8 +274,11 @@/* Latency Tolerance Reporting */ #define E1000_LTRV 0x000F8 +#define E1000_LTRV_VALUE_MASK 0x000003FF#define E1000_LTRV_SCALE_MAX 5#define E1000_LTRV_SCALE_FACTOR 5 +#define E1000_LTRV_SCALE_SHIFT 10 +#define E1000_LTRV_SCALE_MASK 0x00001C00#define E1000_LTRV_REQ_SHIFT 15#define E1000_LTRV_NOSNOOP_SHIFT 16#define E1000_LTRV_SEND (1 << 30)
drivers/net/ethernet/marvell/mvneta.c +1 -1
@@ -101,7 +101,7 @@#define MVNETA_DESC_SWAP BIT(6)#define MVNETA_TX_BRST_SZ_MASK (burst) ((burst) << 22)#define MVNETA_PORT_STATUS 0x2444 -#define MVNETA_TX_IN_PRGRS BIT(1) +#define MVNETA_TX_IN_PRGRS BIT(0)#define MVNETA_TX_FIFO_EMPTY BIT(8)#define MVNETA_RX_MIN_FRAME_SIZE 0x247c/* Only exists on Armada XP and Armada 370 */
drivers/net/ethernet/qlogic/qed/qed_ll2.c +20 -0
@@ -353,6 +353,9 @@ static int qed_ll2_txq_completion(struct qed_hwfn *p_hwfn, void *p_cookie)unsigned long flags;int rc = -EINVAL ; +if (!p_ll2_conn) +return rc; +spin_lock_irqsave (&p_tx->lock, flags);if (p_tx->b_completing_packet) { rc = -EBUSY ;
@@ -526,7 +529,16 @@ static int qed_ll2_rxq_completion(struct qed_hwfn *p_hwfn, void *cookie)unsigned long flags =0 ;int rc =0 ; +if (!p_ll2_conn) +return rc; +spin_lock_irqsave (&p_rx->lock, flags); + +if (!QED_LL2_RX_REGISTERED (p_ll2_conn)) { +spin_unlock_irqrestore (&p_rx->lock, flags); +return 0 ; + } + cq_new_idx =le16_to_cpu (*p_rx->p_fw_cons); cq_old_idx =qed_chain_get_cons_idx (&p_rx->rcq_chain);
@@ -847,6 +859,9 @@ static int qed_ll2_lb_rxq_completion(struct qed_hwfn *p_hwfn, void *p_cookie)struct qed_ll2_info *p_ll2_conn = (struct qed_ll2_info *)p_cookie;int rc; +if (!p_ll2_conn) +return 0 ; +if (!QED_LL2_RX_REGISTERED (p_ll2_conn))return 0 ;
@@ -870,6 +885,9 @@ static int qed_ll2_lb_txq_completion(struct qed_hwfn *p_hwfn, void *p_cookie)u16 new_idx =0 , num_bds =0 ;int rc; +if (!p_ll2_conn) +return 0 ; +if (!QED_LL2_TX_REGISTERED (p_ll2_conn))return 0 ;
@@ -1642,6 +1660,8 @@ int qed_ll2_post_rx_buffer(void *cxt,if (!p_ll2_conn)return -EINVAL ; p_rx = &p_ll2_conn->rx_queue; +if (!p_rx->set_prod_addr) +return -EIO ;spin_lock_irqsave (&p_rx->lock, flags);if (!list_empty (&p_rx->free_descq))
drivers/net/ethernet/qlogic/qed/qed_rdma.c +1 -2
@@ -1245,8 +1245,7 @@ qed_rdma_create_qp(void *rdma_cxt,if (!rdma_cxt || !in_params || !out_params || !p_hwfn->p_rdma_info->active) { -DP_ERR (p_hwfn->cdev, -"qed roce create qp failed due to NULL entry (rdma_cxt=%p, in=%p, out=%p, roce_info=?\n" , +pr_err ("qed roce create qp failed due to NULL entry (rdma_cxt=%p, in=%p, out=%p, roce_info=?\n" , rdma_cxt, in_params, out_params);return NULL ; }
drivers/opp/of.c +3 -2
@@ -682,8 +682,9 @@ static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table) } } -/* There should be one of more OPP defined */ -if (WARN_ON (!count)) { +/* There should be one or more OPPs defined */ +if (!count) { +dev_err (dev,"%s: no supported OPPs" , __func__); ret = -ENOENT ; goto remove_static_opp; }
drivers/scsi/scsi_sysfs.c +6 -3
@@ -788,12 +788,15 @@ store_state_field(struct device *dev, struct device_attribute *attr, ret =scsi_device_set_state (sdev, state);/* * If the device state changes to SDEV_RUNNING, we need to -* rescan the device to revalidate it, and run the queue to -* avoid I/O hang. +* run the queue to avoid I/O hang, and rescan the device +* to revalidate it. Running the queue first is necessary +* because another thread may be waiting inside +* blk_mq_freeze_queue_wait() and because that call may be +* waiting for pending I/O to finish. */ if (ret ==0 && state ==SDEV_RUNNING ) { -scsi_rescan_device (dev);blk_mq_run_hw_queues (sdev->request_queue, true); +scsi_rescan_device (dev); }mutex_unlock (&sdev->state_mutex);
drivers/tty/vt/vt_ioctl.c +7 -4
@@ -484,16 +484,19 @@ int vt_ioctl(struct tty_struct *tty, ret = -EINVAL ; goto out; } -/* FIXME: this needs the console lock extending */ -if (vc->vc_mode == (unsigned char ) arg) +console_lock (); +if (vc->vc_mode == (unsigned char ) arg) { +console_unlock ();break ; + } vc->vc_mode = (unsigned char ) arg; -if (console != fg_console) +if (console != fg_console) { +console_unlock ();break ; + }/* * explicitly blank/unblank the screen if switching modes */ -console_lock ();if (arg ==KD_TEXT )do_unblank_screen (1 );else
drivers/usb/dwc3/gadget.c +11 -12
@@ -894,19 +894,19 @@ static struct dwc3_trb *dwc3_ep_prev_trb(struct dwc3_ep *dep, u8 index)static u32 dwc3_calc_trbs_left (struct dwc3_ep *dep) { -struct dwc3_trb *tmp;u8 trbs_left;/* -* If enqueue & dequeue are equal than it is either full or empty. -* -* One way to know for sure is if the TRB right before us has HWO bit -* set or not. If it has, then we're definitely full and can't fit any -* more transfers in our ring. +* If the enqueue & dequeue are equal then the TRB ring is either full +* or empty. It's considered full when there are DWC3_TRB_NUM-1 of TRBs +* pending to be processed by the driver. */ if (dep->trb_enqueue == dep->trb_dequeue) { - tmp =dwc3_ep_prev_trb (dep, dep->trb_enqueue); -if (tmp->ctrl &DWC3_TRB_CTRL_HWO ) +/* +* If there is any request remained in the started_list at +* this point, that means there is no TRB available. +*/ +if (!list_empty (&dep->started_list))return 0 ;return DWC3_TRB_NUM -1 ;
@@ -2012,10 +2012,8 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) ret =wait_for_completion_timeout (&dwc->ep0_in_setup,msecs_to_jiffies (DWC3_PULL_UP_TIMEOUT )); -if (ret ==0 ) { -dev_err (dwc->dev,"timed out waiting for SETUP phase\n" ); -return -ETIMEDOUT ; - } +if (ret ==0 ) +dev_warn (dwc->dev,"timed out waiting for SETUP phase\n" ); }/*
@@ -2217,6 +2215,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc)/* begin to receive SETUP packets */ dwc->ep0state =EP0_SETUP_PHASE ; dwc->link_state =DWC3_LINK_STATE_SS_DIS ; + dwc->delayed_status = false;dwc3_ep0_out_start (dwc);dwc3_gadget_enable_irq (dwc);
drivers/usb/gadget/function/u_audio.c +2 -3
@@ -349,8 +349,6 @@ static inline void free_ep(struct uac_rtd_params *prm, struct usb_ep *ep)if (!prm->ep_enabled)return ; - prm->ep_enabled = false; - audio_dev = uac->audio_dev; params = &audio_dev->params;
@@ -368,11 +366,12 @@ static inline void free_ep(struct uac_rtd_params *prm, struct usb_ep *ep) } } + prm->ep_enabled = false; +if (usb_ep_disable (ep))dev_err (uac->card->dev,"%s:%d Error!\n" , __func__, __LINE__); } -int u_audio_start_capture (struct g_audio *audio_dev) {struct snd_uac_chip *uac = audio_dev->uac;
drivers/usb/serial/ch341.c +0 -1
@@ -678,7 +678,6 @@ static struct usb_serial_driver ch341_device = { .owner = THIS_MODULE, .name = "ch341-uart", }, - .bulk_in_size = 512, .id_table = id_table, .num_ports = 1, .open = ch341_open,
drivers/usb/serial/option.c +2 -0
@@ -2074,6 +2074,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(4) | RSVD(5) }, { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */ .driver_info = RSVD(6) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */
drivers/vhost/vringh.c +1 -1
@@ -331,7 +331,7 @@ __vringh_iov(struct vringh *vrh, u16 i, iov = wiov; else { iov = riov; -if (unlikely (wiov && wiov->i)) { +if (unlikely (wiov && wiov->used)) {vringh_bad ("Readable desc %p after writable" , &descs[i]); err = -EINVAL ;
drivers/virtio/virtio_pci_common.c +7 -0
@@ -576,6 +576,13 @@ static void virtio_pci_remove(struct pci_dev *pci_dev)struct virtio_pci_device *vp_dev =pci_get_drvdata (pci_dev);struct device *dev =get_device (&vp_dev->vdev.dev); +/* +* Device is marked broken on surprise removal so that virtio upper +* layers can abort any ongoing operation. +*/ +if (!pci_device_is_present (pci_dev)) +virtio_break_device (&vp_dev->vdev); +pci_disable_sriov (pci_dev);unregister_virtio_device (&vp_dev->vdev);
drivers/virtio/virtio_ring.c +4 -2
@@ -2268,7 +2268,7 @@ bool virtqueue_is_broken(struct virtqueue *_vq) {struct vring_virtqueue *vq =to_vvq (_vq); -return vq->broken; +return READ_ONCE (vq->broken); }EXPORT_SYMBOL_GPL (virtqueue_is_broken);
@@ -2283,7 +2283,9 @@ void virtio_break_device(struct virtio_device *dev)spin_lock (&dev->vqs_list_lock);list_for_each_entry (_vq, &dev->vqs, list) {struct vring_virtqueue *vq =to_vvq (_vq); - vq->broken = true; + +/* Pairs with READ_ONCE() in virtqueue_is_broken(). */ +WRITE_ONCE (vq->broken, true); }spin_unlock (&dev->vqs_list_lock); }
fs/btrfs/btrfs_inode.h +15 -0
@@ -268,6 +268,21 @@ static inline void btrfs_mod_outstanding_extents(struct btrfs_inode *inode, mod); } +/* +* Called every time after doing a buffered, direct IO or memory mapped write. +* +* This is to ensure that if we write to a file that was previously fsynced in +* the current transaction, then try to fsync it again in the same transaction, +* we will know that there were changes in the file and that it needs to be +* logged. +*/ +static inline void btrfs_set_inode_last_sub_trans (struct btrfs_inode *inode) +{ +spin_lock (&inode->lock); + inode->last_sub_trans = inode->root->log_transid; +spin_unlock (&inode->lock); +} +static inline int btrfs_inode_in_log (struct btrfs_inode *inode,u64 generation) {int ret =0 ;
fs/btrfs/file.c +2 -8
@@ -2004,14 +2004,8 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,inode_unlock (inode); -/* -* We also have to set last_sub_trans to the current log transid, -* otherwise subsequent syncs to a file that's been synced in this -* transaction will appear to have already occurred. -*/ -spin_lock (&BTRFS_I (inode)->lock); -BTRFS_I (inode)->last_sub_trans = root->log_transid; -spin_unlock (&BTRFS_I (inode)->lock); +btrfs_set_inode_last_sub_trans (BTRFS_I (inode)); +if (num_written >0 ) num_written =generic_write_sync (iocb, num_written);
fs/btrfs/inode.c +1 -3
@@ -9250,9 +9250,7 @@ vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)set_page_dirty (page);SetPageUptodate (page); -BTRFS_I (inode)->last_trans = fs_info->generation; -BTRFS_I (inode)->last_sub_trans =BTRFS_I (inode)->root->log_transid; -BTRFS_I (inode)->last_log_commit =BTRFS_I (inode)->root->last_log_commit; +btrfs_set_inode_last_sub_trans (BTRFS_I (inode));unlock_extent_cached (io_tree, page_start, page_end, &cached_state);
fs/btrfs/transaction.h +1 -1
@@ -160,7 +160,7 @@ static inline void btrfs_set_inode_last_trans(struct btrfs_trans_handle *trans,spin_lock (&BTRFS_I (inode)->lock);BTRFS_I (inode)->last_trans = trans->transaction->transid;BTRFS_I (inode)->last_sub_trans =BTRFS_I (inode)->root->log_transid; -BTRFS_I (inode)->last_log_commit =BTRFS_I (inode)->root->last_log_commit; +BTRFS_I (inode)->last_log_commit =BTRFS_I (inode)->last_sub_trans -1 ;spin_unlock (&BTRFS_I (inode)->lock); }
fs/btrfs/volumes.c +1 -1
@@ -2168,7 +2168,7 @@ int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path,if (IS_ERR (device)) {if (PTR_ERR (device) == -ENOENT && -strcmp (device_path,"missing" ) ==0 ) + device_path &&strcmp (device_path,"missing" ) ==0 ) ret =BTRFS_ERROR_DEV_MISSING_NOT_FOUND ;else ret =PTR_ERR (device);
fs/overlayfs/export.c +1 -1
@@ -395,6 +395,7 @@ static struct dentry *ovl_lookup_real_one(struct dentry *connected,*/ take_dentry_name_snapshot (&name, real); this =lookup_one_len (name.name.name, connected, name.name.len); +release_dentry_name_snapshot (&name); err =PTR_ERR (this);if (IS_ERR (this)) { goto fail;
@@ -409,7 +410,6 @@ static struct dentry *ovl_lookup_real_one(struct dentry *connected, } out: -release_dentry_name_snapshot (&name);dput (parent);inode_unlock (dir);return this;
fs/proc/base.c +10 -1
@@ -549,8 +549,17 @@ static int proc_oom_score(struct seq_file *m, struct pid_namespace *ns, {unsigned long totalpages =totalram_pages () + total_swap_pages;unsigned long points =0 ; +long badness; + + badness =oom_badness (task, totalpages); +/* +* Special case OOM_SCORE_ADJ_MIN for all others scale the +* badness value into [0, 2000] range which we have been +* exporting for a long time so userspace might depend on it. +*/ +if (badness !=LONG_MIN ) + points = (1000 + badness *1000 / (long )totalpages) *2 /3 ; - points =oom_badness (task, totalpages) *1000 / totalpages;seq_printf (m,"%lu\n" , points);return 0 ;
include/linux/netdevice.h +4 -0
@@ -3684,6 +3684,10 @@ int netdev_rx_handler_register(struct net_device *dev,void netdev_rx_handler_unregister (struct net_device *dev);bool dev_valid_name (const char *name); +static inline bool is_socket_ioctl_cmd (unsigned int cmd) +{ +return _IOC_TYPE (cmd) ==SOCK_IOC_TYPE ; +}int dev_ioctl (struct net *net,unsigned int cmd,struct ifreq *ifr,bool *need_copyout);int dev_ifconf (struct net *net,struct ifconf *,int );
include/linux/once.h +2 -2
@@ -7,7 +7,7 @@bool __do_once_start (bool *done,unsigned long *flags);void __do_once_done (bool *done,struct static_key_true *once_key, -unsigned long *flags); +unsigned long *flags,struct module *mod);/* Call a function exactly once. The idea of DO_ONCE() is to perform * a function call such as initialization of random seeds, etc, only
@@ -46,7 +46,7 @@ void __do_once_done(bool *done, struct static_key_true *once_key,if (unlikely (___ret)) { \func (__VA_ARGS__); \__do_once_done (&___done, &___once_key, \ - &___flags); \ + &___flags,THIS_MODULE ); \ } \ } \ ___ret; \
include/linux/oom.h +2 -2
@@ -48,7 +48,7 @@ struct oom_control {/* Used by oom implementation, do not set */ unsigned long totalpages;struct task_struct *chosen; -unsigned long chosen_points; +long chosen_points;/* Used to print the constraint info. */ enum oom_constraint constraint;
@@ -108,7 +108,7 @@ static inline vm_fault_t check_stable_address_space(struct mm_struct *mm)bool __oom_reap_task_mm (struct mm_struct *mm); -extern unsigned long oom_badness (struct task_struct *p, +long oom_badness (struct task_struct *p,unsigned long totalpages);extern bool out_of_memory (struct oom_control *oc);
kernel/audit_tree.c +1 -1
@@ -595,7 +595,6 @@ static void prune_tree_chunks(struct audit_tree *victim, bool tagged)spin_lock (&hash_lock); }spin_unlock (&hash_lock); -put_tree (victim); }/*
@@ -604,6 +603,7 @@ static void prune_tree_chunks(struct audit_tree *victim, bool tagged)static void prune_one (struct audit_tree *victim) {prune_tree_chunks (victim, false); +put_tree (victim); }/* trim the uncommitted chunks from tree */
kernel/bpf/verifier.c +55 -2
70 lines not on this page · raw message
lib/once.c +8 -3
@@ -3,10 +3,12 @@#include <linux/spinlock.h> #include <linux/once.h> #include <linux/random.h> +#include <linux/module.h> struct once_work {struct work_struct work;struct static_key_true *key; +struct module *module; };static void once_deferred (struct work_struct *w)
@@ -16,10 +18,11 @@ static void once_deferred(struct work_struct *w) work = container_of(w, struct once_work, work);BUG_ON (!static_key_enabled (work->key));static_branch_disable (work->key); +module_put (work->module);kfree (work); } -static void once_disable_jump (struct static_key_true *key) +static void once_disable_jump (struct static_key_true *key,struct module *mod) {struct once_work *w;
@@ -29,6 +32,8 @@ static void once_disable_jump(struct static_key_true *key)INIT_WORK (&w->work, once_deferred); w->key = key; + w->module = mod; +__module_get (mod);schedule_work (&w->work); }
@@ -53,11 +58,11 @@ bool __do_once_start(bool *done, unsigned long *flags)EXPORT_SYMBOL (__do_once_start);void __do_once_done (bool *done,struct static_key_true *once_key, -unsigned long *flags) +unsigned long *flags,struct module *mod)__releases (once_lock) { *done = true;spin_unlock_irqrestore (&once_lock, *flags); -once_disable_jump (once_key); +once_disable_jump (once_key, mod); }EXPORT_SYMBOL (__do_once_done);
mm/oom_kill.c +10 -12
@@ -197,17 +197,17 @@ static bool is_dump_unreclaim_slabs(void)* predictable as possible. The goal is to return the highest value for the * task consuming the most memory to avoid subsequent oom failures. */ -unsigned long oom_badness (struct task_struct *p,unsigned long totalpages) +long oom_badness (struct task_struct *p,unsigned long totalpages) {long points;long adj;if (oom_unkillable_task (p)) -return 0 ; +return LONG_MIN ; p =find_lock_task_mm (p);if (!p) -return 0 ; +return LONG_MIN ;/* * Do not even consider tasks which are explicitly marked oom
@@ -219,7 +219,7 @@ unsigned long oom_badness(struct task_struct *p, unsigned long totalpages) test_bit(MMF_OOM_SKIP, &p->mm->flags) || in_vfork(p)) {task_unlock (p); -return 0 ; +return LONG_MIN ; }/*
@@ -234,11 +234,7 @@ unsigned long oom_badness(struct task_struct *p, unsigned long totalpages) adj *= totalpages /1000 ; points += adj; -/* -* Never return 0 for an eligible task regardless of the root bonus and -* oom_score_adj (oom_score_adj can't be OOM_SCORE_ADJ_MIN here). -*/ -return points >0 ? points :1 ; +return points; }static const char *const oom_constraint_text[] = {
@@ -311,7 +307,7 @@ static enum oom_constraint constrained_alloc(struct oom_control *oc)static int oom_evaluate_task (struct task_struct *task,void *arg) {struct oom_control *oc = arg; -unsigned long points; +long points;if (oom_unkillable_task (task)) goto next;
@@ -337,12 +333,12 @@ static int oom_evaluate_task(struct task_struct *task, void *arg)* killed first if it triggers an oom, then select it. */ if (oom_task_origin (task)) { - points =ULONG_MAX ; + points =LONG_MAX ; goto select; } points =oom_badness (task, oc->totalpages); -if (!points || points < oc->chosen_points) +if (points ==LONG_MIN || points < oc->chosen_points) goto next; select:
@@ -366,6 +362,8 @@ static int oom_evaluate_task(struct task_struct *task, void *arg)*/ static void select_bad_process (struct oom_control *oc) { + oc->chosen_points =LONG_MIN ; +if (is_memcg_oom (oc))mem_cgroup_scan_tasks (oc->memcg, oom_evaluate_task, oc);else {
net/core/rtnetlink.c +2 -1
@@ -2414,6 +2414,7 @@ static int do_setlink(const struct sk_buff *skb,return err;if (tb[IFLA_NET_NS_PID ] || tb[IFLA_NET_NS_FD ] || tb[IFLA_TARGET_NETNSID ]) { +const char *pat = ifname && ifname[0 ] ? ifname :NULL ;struct net *net =rtnl_link_get_net_capable (skb,dev_net (dev), tb,CAP_NET_ADMIN );if (IS_ERR (net)) {
@@ -2421,7 +2422,7 @@ static int do_setlink(const struct sk_buff *skb, goto errout; } - err =dev_change_net_namespace (dev, net, ifname); + err =dev_change_net_namespace (dev, net, pat);put_net (net);if (err) goto errout;
net/ipv4/ip_gre.c +2 -0
@@ -446,6 +446,8 @@ static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,static int gre_handle_offloads (struct sk_buff *skb,bool csum) { +if (csum &&skb_checksum_start (skb) < skb->data) +return -EINVAL ;return iptunnel_handle_offloads (skb, csum ?SKB_GSO_GRE_CSUM :SKB_GSO_GRE ); }
net/netfilter/nf_conntrack_core.c +22 -49
137 lines not on this page · raw message
net/qrtr/qrtr.c +1 -1
@@ -314,7 +314,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) goto err; } -if (len !=ALIGN (size,4 ) + hdrlen) +if (!size || len !=ALIGN (size,4 ) + hdrlen) goto err;if (cb->dst_port !=QRTR_PORT_CTRL && cb->type !=QRTR_TYPE_DATA )
net/rds/ib_frmr.c +2 -2
@@ -131,9 +131,9 @@ static int rds_ib_post_reg_frmr(struct rds_ib_mr *ibmr)cpu_relax (); } - ret =ib_map_mr_sg_zbva (frmr->mr, ibmr->sg, ibmr->sg_len, + ret =ib_map_mr_sg_zbva (frmr->mr, ibmr->sg, ibmr->sg_dma_len, &off,PAGE_SIZE ); -if (unlikely (ret != ibmr->sg_len)) +if (unlikely (ret != ibmr->sg_dma_len))return ret <0 ? ret : -EINVAL ; if (cmpxchg(&frmr->fr_state,
net/socket.c +5 -1
@@ -1053,7 +1053,7 @@ static long sock_do_ioctl(struct net *net, struct socket *sock,rtnl_unlock ();if (!err &©_to_user (argp, &ifc,sizeof (struct ifconf ))) err = -EFAULT ; - }else { + }else if (is_socket_ioctl_cmd (cmd)) {struct ifreq ifr;bool need_copyout;if (copy_from_user (&ifr, argp,sizeof (struct ifreq )))
@@ -1062,6 +1062,8 @@ static long sock_do_ioctl(struct net *net, struct socket *sock,if (!err && need_copyout)if (copy_to_user (argp, &ifr,sizeof (struct ifreq )))return -EFAULT ; + }else { + err = -ENOTTY ; }return err; }
@@ -3228,6 +3230,8 @@ static int compat_ifr_data_ioctl(struct net *net, unsigned int cmd,struct ifreq ifreq;u32 data32; +if (!is_socket_ioctl_cmd (cmd)) +return -ENOTTY ;if (copy_from_user (ifreq.ifr_name, u_ifreq32->ifr_name,IFNAMSIZ ))return -EFAULT ;if (get_user (data32, &u_ifreq32->ifr_data))
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.144 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/arc/kernel/vmlinux.lds.S | 2 arch/arm64/boot/dts/qcom/msm8994-angler-rev-101.dts | 4 arch/parisc/include/asm/string.h | 15 - arch/parisc/kernel/parisc_ksyms.c | 4 arch/parisc/lib/Makefile | 4 arch/parisc/lib/memset.c | 72 ++++++++ arch/parisc/lib/string.S | 136 ---------------- arch/x86/events/intel/uncore_snbep.c | 2 arch/x86/kvm/mmu.c | 10 + drivers/block/floppy.c | 27 +-- drivers/gpu/drm/drm_ioc32.c | 4 drivers/gpu/drm/i915/gt/intel_timeline.c | 8 drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | 2 drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.h | 1 drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c | 9 + drivers/infiniband/hw/bnxt_re/ib_verbs.c | 1 drivers/infiniband/hw/efa/efa_main.c | 1 drivers/infiniband/hw/hfi1/sdma.c | 9 - drivers/mmc/host/sdhci-msm.c | 18 ++ drivers/net/can/usb/esd_usb2.c | 4 drivers/net/dsa/mt7530.c | 5 drivers/net/ethernet/apm/xgene-v2/main.c | 4 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h | 3 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c | 13 - drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 32 +++ drivers/net/ethernet/intel/e1000e/ich8lan.c | 14 + drivers/net/ethernet/intel/e1000e/ich8lan.h | 3 drivers/net/ethernet/marvell/mvneta.c | 2 drivers/net/ethernet/qlogic/qed/qed_ll2.c | 20 ++ drivers/net/ethernet/qlogic/qed/qed_rdma.c | 3 drivers/opp/of.c | 5 drivers/scsi/scsi_sysfs.c | 9 - drivers/tty/vt/vt_ioctl.c | 11 - drivers/usb/dwc3/gadget.c | 23 +- drivers/usb/gadget/function/u_audio.c | 5 drivers/usb/serial/ch341.c | 1 drivers/usb/serial/option.c | 2 drivers/vhost/vringh.c | 2 drivers/virtio/virtio_pci_common.c | 7 drivers/virtio/virtio_ring.c | 6 fs/btrfs/btrfs_inode.h | 15 + fs/btrfs/file.c | 10 - fs/btrfs/inode.c | 4 fs/btrfs/transaction.h | 2 fs/btrfs/volumes.c | 2 fs/overlayfs/export.c | 2 fs/proc/base.c | 11 + include/linux/netdevice.h | 4 include/linux/once.h | 4 include/linux/oom.h | 4 kernel/audit_tree.c | 2 kernel/bpf/verifier.c | 57 ++++++ lib/once.c | 11 - mm/oom_kill.c | 22 +- net/core/rtnetlink.c | 3 net/ipv4/ip_gre.c | 2 net/netfilter/nf_conntrack_core.c | 71 ++------ net/qrtr/qrtr.c | 2 net/rds/ib_frmr.c | 4 net/socket.c | 6 61 files changed, 418 insertions(+), 325 deletions(-)
Andrey Ignatov (1):
rtnetlink: Return correct error on changing device netns
Andrii Nakryiko (2):
bpf: Track contents of read-only maps as scalars
bpf: Fix cast to pointer from integer of different size warning
Ben Skeggs (1):
drm/nouveau/disp: power down unused DP links during init
Christophe JAILLET (1):
xgene-v2: Fix a resource leak in the error handling path of 'xge_probe()'
Colin Ian King (1):
perf/x86/intel/uncore: Fix integer overflow on 23 bit left shift of a u32
DENG Qingfang (1):
net: dsa: mt7530: fix VLAN traffic leaks again
Denis Efremov (1):
Revert "floppy: reintroduce O_NDELAY fix"
Filipe Manana (1):
btrfs: fix race between marking inode needs to be logged and log syncing
Florian Westphal (1):
netfilter: conntrack: collect all entries in one cycle
Gal Pressman (1):
RDMA/efa: Free IRQ vectors on error flow
Gerd Rausch (1):
net/rds: dma_map_sg is entitled to merge entries
Greg Kroah-Hartman (1):
Linux 5.4.144
Guangbin Huang (1):
net: hns3: fix get wrong pfc_en when query PFC configuration
Guenter Roeck (1):
ARC: Fix CONFIG_STACKDEPOT
Guojia Liao (1):
net: hns3: fix duplicate node in VLAN list
Helge Deller (1):
Revert "parisc: Add assembly implementations for memset, strlen, strcpy, strncpy and strcat"
Jerome Brunet (1):
usb: gadget: u_audio: fix race condition on endpoint stop
Johan Hovold (1):
Revert "USB: serial: ch341: fix character loss at high transfer rates"
Kefeng Wang (1):
once: Fix panic when module unload
Li Jinlin (1):
scsi: core: Fix hang of freezing queue between blocking and running device
Linus Torvalds (1):
vt_kdsetmode: extend console locking
Mark Yacoub (1):
drm: Copy drm_wait_vblank to user before returning
Matthew Brost (1):
drm/i915: Fix syncmap memory leak
Maxim Kiselev (1):
net: marvell: fix MVNETA_TX_IN_PRGRS bit number
Michał Mirosław (1):
opp: remove WARN when no valid OPPs remain
Miklos Szeredi (1):
ovl: fix uninitialized pointer read in ovl_lookup_real_one()
Naresh Kumar PBS (1):
RDMA/bnxt_re: Add missing spin lock initialization
Neeraj Upadhyay (1):
vringh: Use wiov->used to check for read/write desc order
Parav Pandit (2):
virtio: Improve vq->broken access to avoid any compiler optimization
virtio_pci: Support surprise removal of virtio pci device
Peter Collingbourne (1):
net: don't unconditionally copy_from_user a struct ifreq for socket ioctls
Petr Vorel (1):
arm64: dts: qcom: msm8994-angler: Fix gpio-reserved-ranges 85-88
Qu Wenruo (1):
btrfs: fix NULL pointer dereference when deleting device by invalid id
Richard Guy Briggs (1):
audit: move put_tree() to avoid trim_trees refcount underflow and UAF
Sasha Neftin (1):
e1000e: Fix the max snoop/no-snoop latency for 10M
Sean Christopherson (1):
KVM: x86/mmu: Treat NX as used (not reserved) for all !TDP shadow MMUs
Shai Malin (2):
qed: qed ll2 race condition fixes
qed: Fix null-pointer dereference in qed_rdma_create_qp()
Shaik Sajida Bhanu (1):
mmc: sdhci-msm: Update the software timeout value for sdhc
Shreyansh Chouhan (1):
ip_gre: add validation for csum_start
Stefan Mätje (1):
can: usb: esd_usb2: esd_usb2_rx_event(): fix the interchange of the CAN RX and TX error counters
Thinh Nguyen (1):
usb: dwc3: gadget: Fix dwc3_calc_trbs_left()
Tuo Li (1):
IB/hfi1: Fix possible null-pointer dereference in _extend_sdma_tx_descs()
Wesley Cheng (1):
usb: dwc3: gadget: Stop EP0 transfers during pullup disable
Xiaolong Huang (1):
net: qrtr: fix another OOB Read in qrtr_endpoint_post
Yafang Shao (1):
mm, oom: make the calculation of oom badness more accurate
Yufeng Mo (1):
net: hns3: clear hardware resource when loading driver
Zhengjun Zhang (1):
USB: serial: option: add new VID/PID to support Fibocom FG150