Linux 5.4.85
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.85 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
------------
Documentation/admin-guide/kernel-parameters.txt | 1 Documentation/virt/kvm/mmu.txt | 2 Makefile | 2 arch/x86/kernel/cpu/resctrl/internal.h | 2 arch/x86/kernel/cpu/resctrl/monitor.c | 7 arch/x86/kvm/mmu.c | 29 ++- drivers/net/ethernet/freescale/enetc/enetc_ethtool.c | 10 - drivers/net/ethernet/freescale/enetc/enetc_hw.h | 10 - drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h | 4 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 21 +- drivers/net/ethernet/mellanox/mlx4/en_tx.c | 40 +++- drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 12 + drivers/net/ethernet/microchip/lan743x_ethtool.c | 9 drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 6 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 27 ++ drivers/net/ethernet/xilinx/ll_temac_main.c | 4 drivers/net/vrf.c | 10 - drivers/tty/serial/8250/8250_omap.c | 5 drivers/usb/core/quirks.c | 3 drivers/usb/gadget/udc/dummy_hcd.c | 2 drivers/usb/host/xhci-hub.c | 4 drivers/usb/host/xhci-pci.c | 2 drivers/usb/misc/sisusbvga/Kconfig | 2 drivers/usb/storage/uas.c | 3 drivers/usb/storage/unusual_uas.h | 7 drivers/usb/storage/usb.c | 3 include/linux/usb_usual.h | 2 include/uapi/linux/ptrace.h | 3 kernel/sched/membarrier.c | 21 ++ net/bridge/br_device.c | 6 net/bridge/br_multicast.c | 34 ++- net/bridge/br_private.h | 10 + net/bridge/br_vlan.c | 4 net/ipv4/fib_frontend.c | 2 net/ipv4/tcp_input.c | 3 net/ipv4/tcp_output.c | 9 net/ipv4/udp.c | 2 net/mac80211/mesh_pathtbl.c | 4 sound/core/oss/pcm_oss.c | 6 sound/usb/format.c | 2 sound/usb/stream.c | 6 tools/testing/ktest/ktest.pl | 7 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_user.tc | 4 tools/testing/selftests/net/fcnal-test.sh | 95 ++++++++++ 44 files changed, 350 insertions(+), 97 deletions(-)
Alexander Sverdlin (1):
serial: 8250_omap: Avoid FIFO corruption caused by MDR1 access
Andy Lutomirski (1):
membarrier: Explicitly sync remote cores when SYNC_CORE is requested
Bui Quang Minh (1):
USB: dummy-hcd: Fix uninitialized array use in init()
Claudiu Manoil (1):
enetc: Fix reporting of h/w packet counters
Eric Dumazet (2):
mac80211: mesh: fix mesh_pathtbl_init() error path
tcp: select sane initial rcvq_space.space for big MSS
Fugang Duan (2):
net: stmmac: free tx skb buffer in stmmac_resume()
net: stmmac: delete the eee_ctrl_timer after napi disabled
Greg Kroah-Hartman (1):
Linux 5.4.85
Hans de Goede (1):
xhci-pci: Allow host runtime PM as default for Intel Alpine Ridge LP
Huazhong Tan (1):
net: hns3: remove a misused pragma packed
James Morse (1):
x86/resctrl: Remove unused struct mbm_state::chunks_bw
Joseph Huang (1):
bridge: Fix a deadlock when enabling multicast snooping
Kamal Mostafa (1):
Revert "selftests/ftrace: check for do_sys_openat2 in user-memory test"
Li Jun (1):
xhci: Give USB2 ports time to enter U3 in bus suspend
Maciej S. Szmigiero (1):
KVM: mmu: Fix SPTE encoding of MMIO generation upper half
Martin Blumenstingl (1):
net: stmmac: dwmac-meson8b: fix mask definition of the m250_sel mux
Moshe Shemesh (2):
net/mlx4_en: Avoid scheduling restart task if it is already running net/mlx4_en: Handle TX error CQE
Neal Cardwell (1):
tcp: fix cwnd-limited bug for TSO deferral where we send nothing
Oliver Neukum (2):
USB: add RESET_RESUME quirk for Snapscan 1212
USB: UAS: introduce a quirk to set no_write_same
Peilin Ye (1):
ptrace: Prevent kernel-infoleak in ptrace_get_syscall_info()
Sergej Bauer (1):
lan743x: fix for potential NULL pointer dereference with bare card
Stephen Suryaputra (1):
vrf: packets with lladdr src needs dst at input with orig_iif when needs strict
Steven Rostedt (VMware) (1):
ktest.pl: If size of log is too big to email, email error message
Takashi Iwai (3):
ALSA: usb-audio: Fix potential out-of-bounds shift
ALSA: usb-audio: Fix control 'access overflow' errors from chmap
ALSA: pcm: oss: Fix potential out-of-bounds shift
Thomas Gleixner (1):
USB: sisusbvga: Make console support depend on BROKEN
Xiaochen Shen (1):
x86/resctrl: Fix incorrect local bandwidth when mba_sc is enabled
Xin Long (1):
udp: fix the proto value passed to ip_protocol_deliver_rcu for the segments
Zhang Changzhong (3):
ipv4: fix error return code in rtm_to_fib_config()
net: bridge: vlan: fix error return code in __vlan_add()
net: ll_temac: Fix potential NULL dereference in temac_probe()
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +1 -0
@@ -5151,6 +5151,7 @@ device); j = NO_REPORT_LUNS (don't use report luns command, uas only); + k = NO_SAME (do not use WRITE_SAME, uas only) l = NOT_LOCKABLE (don't try to lock and unlock ejectable media, not on uas); m = MAX_SECTORS_64 (don't transfer more
Documentation/virt/kvm/mmu.txt +1 -1
@@ -420,7 +420,7 @@ If the generation number of the spte does not equal the global generation number, it will ignore the cached MMIO information and handle the page fault through the slow path. -Since only 19 bits are used to store generation-number on mmio spte, all +Since only 18 bits are used to store generation-number on mmio spte, all pages are zapped when there is an overflow. Unfortunately, a single memory access might access kvm_memslots(kvm) multiple
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 84 +SUBLEVEL = 85 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/x86/kernel/cpu/resctrl/internal.h +0 -2
@@ -276,7 +276,6 @@ struct rftype {* struct mbm_state - status for each MBM counter in each domain * @chunks: Total data moved (multiply by rdt_group.mon_scale to get bytes) * @prev_msr Value of IA32_QM_CTR for this RMID last time we read it -* @chunks_bw Total local data moved. Used for bandwidth calculation * @prev_bw_msr:Value of previous IA32_QM_CTR for bandwidth counting * @prev_bw The most recent bandwidth in MBps * @delta_bw Difference between the current and previous bandwidth
@@ -285,7 +284,6 @@ struct rftype {struct mbm_state {u64 chunks;u64 prev_msr; -u64 chunks_bw;u64 prev_bw_msr;u32 prev_bw;u32 delta_bw;
arch/x86/kernel/cpu/resctrl/monitor.c +2 -5
@@ -280,8 +280,6 @@ static void mbm_bw_count(u32 rmid, struct rmid_read *rr)return ; chunks =mbm_overflow_count (m->prev_bw_msr, tval); - m->chunks_bw += chunks; - m->chunks = m->chunks_bw; cur_bw = (chunks * r->mon_scale) >>20 ;if (m->delta_comp)
@@ -451,15 +449,14 @@ static void mbm_update(struct rdt_domain *d, int rmid) }if (is_mbm_local_enabled ()) { rr.evtid =QOS_L3_MBM_LOCAL_EVENT_ID ; +__mon_event_count (rmid, &rr);/* * Call the MBA software controller only for the * control groups and when user has enabled * the software controller explicitly. */ -if (!is_mba_sc (NULL )) -__mon_event_count (rmid, &rr); -else +if (is_mba_sc (NULL ))mbm_bw_count (rmid, &rr); } }
arch/x86/kvm/mmu.c +20 -9
@@ -407,11 +407,11 @@ static inline bool is_access_track_spte(u64 spte) }/* -* Due to limited space in PTEs, the MMIO generation is a 19 bit subset of +* Due to limited space in PTEs, the MMIO generation is a 18 bit subset of * the memslots generation and is derived as follows: * * Bits 0-8 of the MMIO generation are propagated to spte bits 3-11 -* Bits 9-18 of the MMIO generation are propagated to spte bits 52-61 +* Bits 9-17 of the MMIO generation are propagated to spte bits 54-62 * * The KVM_MEMSLOT_GEN_UPDATE_IN_PROGRESS flag is intentionally not included in * the MMIO generation number, as doing so would require stealing a bit from
@@ -420,18 +420,29 @@ static inline bool is_access_track_spte(u64 spte)* requires a full MMU zap). The flag is instead explicitly queried when * checking for MMIO spte cache hits. */ -#define MMIO_SPTE_GEN_MASK GENMASK_ULL(17, 0)#define MMIO_SPTE_GEN_LOW_START 3#define MMIO_SPTE_GEN_LOW_END 11 -#define MMIO_SPTE_GEN_LOW_MASK GENMASK_ULL(MMIO_SPTE_GEN_LOW_END, \ - MMIO_SPTE_GEN_LOW_START)#define MMIO_SPTE_GEN_HIGH_START PT64_SECOND_AVAIL_BITS_SHIFT#define MMIO_SPTE_GEN_HIGH_END 62 + +#define MMIO_SPTE_GEN_LOW_MASK GENMASK_ULL(MMIO_SPTE_GEN_LOW_END, \ + MMIO_SPTE_GEN_LOW_START)#define MMIO_SPTE_GEN_HIGH_MASK GENMASK_ULL(MMIO_SPTE_GEN_HIGH_END, \ MMIO_SPTE_GEN_HIGH_START) +#define MMIO_SPTE_GEN_LOW_BITS (MMIO_SPTE_GEN_LOW_END - MMIO_SPTE_GEN_LOW_START + 1) +#define MMIO_SPTE_GEN_HIGH_BITS (MMIO_SPTE_GEN_HIGH_END - MMIO_SPTE_GEN_HIGH_START + 1) + +/* remember to adjust the comment above as well if you change these */ +static_assert (MMIO_SPTE_GEN_LOW_BITS ==9 &&MMIO_SPTE_GEN_HIGH_BITS ==9 ); + +#define MMIO_SPTE_GEN_LOW_SHIFT (MMIO_SPTE_GEN_LOW_START - 0) +#define MMIO_SPTE_GEN_HIGH_SHIFT (MMIO_SPTE_GEN_HIGH_START - MMIO_SPTE_GEN_LOW_BITS) + +#define MMIO_SPTE_GEN_MASK GENMASK_ULL(MMIO_SPTE_GEN_LOW_BITS + MMIO_SPTE_GEN_HIGH_BITS - 1, 0) +static u64 generation_mmio_spte_mask (u64 gen) {u64 mask;
@@ -439,8 +450,8 @@ static u64 generation_mmio_spte_mask(u64 gen)WARN_ON (gen & ~MMIO_SPTE_GEN_MASK );BUILD_BUG_ON ((MMIO_SPTE_GEN_HIGH_MASK |MMIO_SPTE_GEN_LOW_MASK ) &SPTE_SPECIAL_MASK ); - mask = (gen <<MMIO_SPTE_GEN_LOW_START ) &MMIO_SPTE_GEN_LOW_MASK ; - mask |= (gen <<MMIO_SPTE_GEN_HIGH_START ) &MMIO_SPTE_GEN_HIGH_MASK ; + mask = (gen <<MMIO_SPTE_GEN_LOW_SHIFT ) &MMIO_SPTE_GEN_LOW_MASK ; + mask |= (gen <<MMIO_SPTE_GEN_HIGH_SHIFT ) &MMIO_SPTE_GEN_HIGH_MASK ;return mask; }
@@ -448,8 +459,8 @@ static u64 get_mmio_spte_generation(u64 spte) {u64 gen; - gen = (spte &MMIO_SPTE_GEN_LOW_MASK ) >>MMIO_SPTE_GEN_LOW_START ; - gen |= (spte &MMIO_SPTE_GEN_HIGH_MASK ) >>MMIO_SPTE_GEN_HIGH_START ; + gen = (spte &MMIO_SPTE_GEN_LOW_MASK ) >>MMIO_SPTE_GEN_LOW_SHIFT ; + gen |= (spte &MMIO_SPTE_GEN_HIGH_MASK ) >>MMIO_SPTE_GEN_HIGH_SHIFT ;return gen; }
drivers/net/ethernet/freescale/enetc/enetc_ethtool.c +7 -3
@@ -141,8 +141,8 @@ static const struct { { ENETC_PM0_R255, "MAC rx 128-255 byte packets" }, { ENETC_PM0_R511, "MAC rx 256-511 byte packets" }, { ENETC_PM0_R1023, "MAC rx 512-1023 byte packets" }, - { ENETC_PM0_R1518, "MAC rx 1024-1518 byte packets" }, - { ENETC_PM0_R1519X, "MAC rx 1519 to max-octet packets" }, + { ENETC_PM0_R1522, "MAC rx 1024-1522 byte packets" }, + { ENETC_PM0_R1523X, "MAC rx 1523 to max-octet packets" }, { ENETC_PM0_ROVR, "MAC rx oversized packets" }, { ENETC_PM0_RJBR, "MAC rx jabber packets" }, { ENETC_PM0_RFRG, "MAC rx fragment packets" },
@@ -161,9 +161,13 @@ static const struct { { ENETC_PM0_TBCA, "MAC tx broadcast frames" }, { ENETC_PM0_TPKT, "MAC tx packets" }, { ENETC_PM0_TUND, "MAC tx undersized packets" }, + { ENETC_PM0_T64, "MAC tx 64 byte packets" }, { ENETC_PM0_T127, "MAC tx 65-127 byte packets" }, + { ENETC_PM0_T255, "MAC tx 128-255 byte packets" }, + { ENETC_PM0_T511, "MAC tx 256-511 byte packets" }, { ENETC_PM0_T1023, "MAC tx 512-1023 byte packets" }, - { ENETC_PM0_T1518, "MAC tx 1024-1518 byte packets" }, + { ENETC_PM0_T1522, "MAC tx 1024-1522 byte packets" }, + { ENETC_PM0_T1523X, "MAC tx 1523 to max-octet packets" }, { ENETC_PM0_TCNP, "MAC tx control packets" }, { ENETC_PM0_TDFR, "MAC tx deferred packets" }, { ENETC_PM0_TMCOL, "MAC tx multiple collisions" },
drivers/net/ethernet/freescale/enetc/enetc_hw.h +7 -3
@@ -239,8 +239,8 @@ enum enetc_bdr_type {TX, RX};#define ENETC_PM0_R255 0x8180#define ENETC_PM0_R511 0x8188#define ENETC_PM0_R1023 0x8190 -#define ENETC_PM0_R1518 0x8198 -#define ENETC_PM0_R1519X 0x81A0 +#define ENETC_PM0_R1522 0x8198 +#define ENETC_PM0_R1523X 0x81A0#define ENETC_PM0_ROVR 0x81A8#define ENETC_PM0_RJBR 0x81B0#define ENETC_PM0_RFRG 0x81B8
@@ -259,9 +259,13 @@ enum enetc_bdr_type {TX, RX};#define ENETC_PM0_TBCA 0x8250#define ENETC_PM0_TPKT 0x8260#define ENETC_PM0_TUND 0x8268 +#define ENETC_PM0_T64 0x8270#define ENETC_PM0_T127 0x8278 +#define ENETC_PM0_T255 0x8280 +#define ENETC_PM0_T511 0x8288#define ENETC_PM0_T1023 0x8290 -#define ENETC_PM0_T1518 0x8298 +#define ENETC_PM0_T1522 0x8298 +#define ENETC_PM0_T1523X 0x82A0#define ENETC_PM0_TCNP 0x82C0#define ENETC_PM0_TDFR 0x82D0#define ENETC_PM0_TMCOL 0x82D8
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h +0 -4
@@ -35,8 +35,6 @@#define HCLGE_DBG_DFX_SSU_2_OFFSET 12 -#pragma pack(1) -struct hclge_qos_pri_map_cmd {u8 pri0_tc :4 , pri1_tc :4 ;
@@ -85,8 +83,6 @@ struct hclge_dbg_reg_type_info {struct hclge_dbg_reg_common_msg reg_msg; }; -#pragma pack() -static struct hclge_dbg_dfx_message hclge_dbg_bios_common_reg[] = { {false,"Reserved" }, {true,"BP_CPU_STATE" },
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +14 -7
@@ -1383,8 +1383,10 @@ static void mlx4_en_tx_timeout(struct net_device *dev) } priv->port_stats.tx_timeout++; -en_dbg (DRV , priv,"Scheduling watchdog\n" ); -queue_work (mdev->workqueue, &priv->watchdog_task); +if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , &priv->state)) { +en_dbg (DRV , priv,"Scheduling port restart\n" ); +queue_work (mdev->workqueue, &priv->restart_task); + } }
@@ -1738,6 +1740,7 @@ int mlx4_en_start_port(struct net_device *dev)mlx4_en_deactivate_cq (priv, cq); goto tx_err; } +clear_bit (MLX4_EN_TX_RING_STATE_RECOVERING , &tx_ring->state);if (t !=TX_XDP ) { tx_ring->tx_queue =netdev_get_tx_queue (dev, i); tx_ring->recycle_ring =NULL ;
@@ -1834,6 +1837,7 @@ int mlx4_en_start_port(struct net_device *dev)local_bh_enable (); } +clear_bit (MLX4_EN_STATE_FLAG_RESTARTING , &priv->state);netif_tx_start_all_queues (dev);netif_device_attach (dev);
@@ -2004,7 +2008,7 @@ void mlx4_en_stop_port(struct net_device *dev, int detach)static void mlx4_en_restart (struct work_struct *work) { struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv, - watchdog_task); + restart_task);struct mlx4_en_dev *mdev = priv->mdev;struct net_device *dev = priv->dev;
@@ -2386,7 +2390,7 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)if (netif_running (dev)) {mutex_lock (&mdev->state_lock);if (!mdev->device_up) { -/* NIC is probably restarting - let watchdog task reset +/* NIC is probably restarting - let restart task reset * the port */ en_dbg (DRV , priv,"Change MTU called with card down!?\n" ); }else {
@@ -2395,7 +2399,9 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)if (err) {en_err (priv,"Failed restarting port:%d\n" , priv->port); -queue_work (mdev->workqueue, &priv->watchdog_task); +if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , + &priv->state)) +queue_work (mdev->workqueue, &priv->restart_task); } }mutex_unlock (&mdev->state_lock);
@@ -2865,7 +2871,8 @@ static int mlx4_xdp_set(struct net_device *dev, struct bpf_prog *prog)if (err) {en_err (priv,"Failed starting port %d for XDP change\n" , priv->port); -queue_work (mdev->workqueue, &priv->watchdog_task); +if (!test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , &priv->state)) +queue_work (mdev->workqueue, &priv->restart_task); } }
@@ -3263,7 +3270,7 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, priv->counter_index =MLX4_SINK_COUNTER_INDEX (mdev->dev);spin_lock_init (&priv->stats_lock);INIT_WORK (&priv->rx_mode_task, mlx4_en_do_set_rx_mode); -INIT_WORK (&priv->watchdog_task, mlx4_en_restart); +INIT_WORK (&priv->restart_task, mlx4_en_restart);INIT_WORK (&priv->linkstate_task, mlx4_en_linkstate);INIT_DELAYED_WORK (&priv->stats_task, mlx4_en_do_get_stats);INIT_DELAYED_WORK (&priv->service_task, mlx4_en_service_task);
drivers/net/ethernet/mellanox/mlx4/en_tx.c +33 -7
@@ -392,6 +392,35 @@ int mlx4_en_free_tx_buf(struct net_device *dev, struct mlx4_en_tx_ring *ring)return cnt; } +static void mlx4_en_handle_err_cqe (struct mlx4_en_priv *priv,struct mlx4_err_cqe *err_cqe, +u16 cqe_index,struct mlx4_en_tx_ring *ring) +{ +struct mlx4_en_dev *mdev = priv->mdev; +struct mlx4_en_tx_info *tx_info; +struct mlx4_en_tx_desc *tx_desc; +u16 wqe_index; +int desc_size; + +en_err (priv,"CQE error - cqn 0x%x, ci 0x%x, vendor syndrome: 0x%x syndrome: 0x%x\n" , + ring->sp_cqn, cqe_index, err_cqe->vendor_err_syndrome, err_cqe->syndrome); +print_hex_dump (KERN_WARNING ,"" ,DUMP_PREFIX_OFFSET ,16 ,1 , err_cqe,sizeof (*err_cqe), + false); + + wqe_index =be16_to_cpu (err_cqe->wqe_index) & ring->size_mask; + tx_info = &ring->tx_info[wqe_index]; + desc_size = tx_info->nr_txbb <<LOG_TXBB_SIZE ; +en_err (priv,"Related WQE - qpn 0x%x, wqe index 0x%x, wqe size 0x%x\n" , ring->qpn, + wqe_index, desc_size); + tx_desc = ring->buf + (wqe_index <<LOG_TXBB_SIZE ); +print_hex_dump (KERN_WARNING ,"" ,DUMP_PREFIX_OFFSET ,16 ,1 , tx_desc, desc_size, false); + +if (test_and_set_bit (MLX4_EN_STATE_FLAG_RESTARTING , &priv->state)) +return ; + +en_err (priv,"Scheduling port restart\n" ); +queue_work (mdev->workqueue, &priv->restart_task); +} +bool mlx4_en_process_tx_cq (struct net_device *dev,struct mlx4_en_cq *cq,int napi_budget) {
@@ -438,13 +467,10 @@ bool mlx4_en_process_tx_cq(struct net_device *dev,dma_rmb ();if (unlikely ((cqe->owner_sr_opcode &MLX4_CQE_OPCODE_MASK ) == -MLX4_CQE_OPCODE_ERROR )) { -struct mlx4_err_cqe *cqe_err = (struct mlx4_err_cqe *)cqe; - -en_err (priv,"CQE error - vendor syndrome: 0x%x syndrome: 0x%x\n" , - cqe_err->vendor_err_syndrome, - cqe_err->syndrome); - } +MLX4_CQE_OPCODE_ERROR )) +if (!test_and_set_bit (MLX4_EN_TX_RING_STATE_RECOVERING , &ring->state)) +mlx4_en_handle_err_cqe (priv, (struct mlx4_err_cqe *)cqe, index, + ring);/* Skip over last polled CQE */ new_index =be16_to_cpu (cqe->wqe_index) & size_mask;
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +11 -1
@@ -271,6 +271,10 @@ struct mlx4_en_page_cache { } buf[MLX4_EN_CACHE_SIZE ]; }; +enum { +MLX4_EN_TX_RING_STATE_RECOVERING , +}; +struct mlx4_en_priv ;struct mlx4_en_tx_ring {
@@ -317,6 +321,7 @@ struct mlx4_en_tx_ring {* Only queue_stopped might be used if BQL is not properly working. */ unsigned long queue_stopped; +unsigned long state;struct mlx4_hwq_resources sp_wqres;struct mlx4_qp sp_qp;struct mlx4_qp_context sp_context;
@@ -530,6 +535,10 @@ struct mlx4_en_stats_bitmap {struct mutex mutex;/* for mutual access to stats bitmap */ }; +enum { +MLX4_EN_STATE_FLAG_RESTARTING , +}; +struct mlx4_en_priv {struct mlx4_en_dev *mdev;struct mlx4_en_port_profile *prof;
@@ -595,7 +604,7 @@ struct mlx4_en_priv {struct mlx4_en_cq *rx_cq[MAX_RX_RINGS ];struct mlx4_qp drop_qp;struct work_struct rx_mode_task; -struct work_struct watchdog_task; +struct work_struct restart_task;struct work_struct linkstate_task;struct delayed_work stats_task;struct delayed_work service_task;
@@ -643,6 +652,7 @@ struct mlx4_en_priv {u32 pflags;u8 rss_key[MLX4_EN_RSS_KEY_SIZE ];u8 rss_hash_fn; +unsigned long state; };enum mlx4_en_wol {
drivers/net/ethernet/microchip/lan743x_ethtool.c +5 -4
@@ -780,7 +780,9 @@ static void lan743x_ethtool_get_wol(struct net_device *netdev, wol->supported =0 ; wol->wolopts =0 ; -phy_ethtool_get_wol (netdev->phydev, wol); + +if (netdev->phydev) +phy_ethtool_get_wol (netdev->phydev, wol); wol->supported |=WAKE_BCAST |WAKE_UCAST |WAKE_MCAST |WAKE_MAGIC |WAKE_PHY |WAKE_ARP ;
@@ -809,9 +811,8 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,device_set_wakeup_enable (&adapter->pdev->dev, (bool )wol->wolopts); -phy_ethtool_set_wol (netdev->phydev, wol); - - return 0; +return netdev->phydev ?phy_ethtool_set_wol (netdev->phydev, wol) + : -ENETDOWN; }#endif /* CONFIG_PM */
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +3 -3
@@ -29,7 +29,6 @@#define PRG_ETH0_EXT_RMII_MODE 4/* mux to choose between fclk_div2 (bit unset) and mpll2 (bit set) */ -#define PRG_ETH0_CLK_M250_SEL_SHIFT 4#define PRG_ETH0_CLK_M250_SEL_MASK GENMASK(4, 4)#define PRG_ETH0_TXDLY_SHIFT 5
@@ -143,8 +142,9 @@ static int meson8b_init_rgmii_tx_clk(struct meson8b_dwmac *dwmac) } clk_configs->m250_mux.reg = dwmac->regs +PRG_ETH0 ; - clk_configs->m250_mux.shift =PRG_ETH0_CLK_M250_SEL_SHIFT ; - clk_configs->m250_mux.mask =PRG_ETH0_CLK_M250_SEL_MASK ; + clk_configs->m250_mux.shift =__ffs (PRG_ETH0_CLK_M250_SEL_MASK ); + clk_configs->m250_mux.mask =PRG_ETH0_CLK_M250_SEL_MASK >> + clk_configs->m250_mux.shift; clk =meson8b_dwmac_register_clk (dwmac,"m250_sel" , mux_parent_names,MUX_CLK_NUM_PARENTS , &clk_mux_ops, &clk_configs->m250_mux.hw);
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +24 -3
@@ -1441,6 +1441,19 @@ static void dma_free_tx_skbufs(struct stmmac_priv *priv, u32 queue)stmmac_free_tx_buffer (priv, queue, i); } +/** +* stmmac_free_tx_skbufs - free TX skb buffers +* @priv: private structure +*/ +static void stmmac_free_tx_skbufs (struct stmmac_priv *priv) +{ +u32 tx_queue_cnt = priv->plat->tx_queues_to_use; +u32 queue; + +for (queue =0 ; queue < tx_queue_cnt; queue++) +dma_free_tx_skbufs (priv, queue); +} +/** * free_dma_rx_desc_resources - free RX dma desc resources * @priv: private structure
@@ -2745,9 +2758,6 @@ static int stmmac_release(struct net_device *dev)struct stmmac_priv *priv =netdev_priv (dev);u32 chan; -if (priv->eee_enabled) -del_timer_sync (&priv->eee_ctrl_timer); -/* Stop and disconnect the PHY */ phylink_stop (priv->phylink);phylink_disconnect_phy (priv->phylink);
@@ -2764,6 +2774,11 @@ static int stmmac_release(struct net_device *dev)if (priv->lpi_irq >0 )free_irq (priv->lpi_irq, dev); +if (priv->eee_enabled) { + priv->tx_path_in_lpi_mode = false; +del_timer_sync (&priv->eee_ctrl_timer); + } +/* Stop TX/RX DMA and clear the descriptors */ stmmac_stop_all_dma (priv);
@@ -4748,6 +4763,11 @@ int stmmac_suspend(struct device *dev)for (chan =0 ; chan < priv->plat->tx_queues_to_use; chan++)del_timer_sync (&priv->tx_queue[chan].txtimer); +if (priv->eee_enabled) { + priv->tx_path_in_lpi_mode = false; +del_timer_sync (&priv->eee_ctrl_timer); + } +/* Stop TX/RX DMA */ stmmac_stop_all_dma (priv);
@@ -4846,6 +4866,7 @@ int stmmac_resume(struct device *dev)stmmac_reset_queues_param (priv); +stmmac_free_tx_skbufs (priv);stmmac_clear_descriptors (priv);stmmac_hw_setup (ndev, false);
drivers/net/ethernet/xilinx/ll_temac_main.c +1 -3
@@ -1425,9 +1425,7 @@ static int temac_probe(struct platform_device *pdev)of_node_put (dma_np); }else if (pdata) {/* 2nd memory resource specifies DMA registers */ - res =platform_get_resource (pdev,IORESOURCE_MEM ,1 ); - lp->sdma_regs =devm_ioremap_nocache (&pdev->dev, res->start, -resource_size (res)); + lp->sdma_regs =devm_platform_ioremap_resource (pdev,1 );if (IS_ERR (lp->sdma_regs)) {dev_err (&pdev->dev,"could not map DMA registers\n" );
drivers/net/vrf.c +8 -2
@@ -1038,11 +1038,17 @@ static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev,int orig_iif = skb->skb_iif;bool need_strict =rt6_need_strict (&ipv6_hdr (skb)->daddr);bool is_ndisc =ipv6_ndisc_frame (skb); +bool is_ll_src;/* loopback, multicast & non-ND link-local traffic; do not push through -* packet taps again. Reset pkt_type for upper layers to process skb +* packet taps again. Reset pkt_type for upper layers to process skb. +* for packets with lladdr src, however, skip so that the dst can be +* determine at input using original ifindex in the case that daddr +* needs strict */ -if (skb->pkt_type ==PACKET_LOOPBACK || (need_strict && !is_ndisc)) { + is_ll_src =ipv6_addr_type (&ipv6_hdr (skb)->saddr) &IPV6_ADDR_LINKLOCAL ; +if (skb->pkt_type ==PACKET_LOOPBACK || + (need_strict && !is_ndisc && !is_ll_src)) { skb->dev = vrf_dev; skb->skb_iif = vrf_dev->ifindex;IP6CB (skb)->flags |=IP6SKB_L3SLAVE ;
drivers/tty/serial/8250/8250_omap.c +0 -5
@@ -170,11 +170,6 @@ static void omap_8250_mdr1_errataset(struct uart_8250_port *up, struct omap8250_priv *priv) {u8 timeout =255 ; -u8 old_mdr1; - - old_mdr1 =serial_in (up,UART_OMAP_MDR1 ); -if (old_mdr1 == priv->mdr1) -return ;serial_out (up,UART_OMAP_MDR1 , priv->mdr1);udelay (2 );
drivers/usb/core/quirks.c +3 -0
@@ -342,6 +342,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x06a3, 0x0006), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, + /* Agfa SNAPSCAN 1212U */ + { USB_DEVICE(0x06bd, 0x0001), .driver_info = USB_QUIRK_RESET_RESUME }, + /* Guillemot Webcam Hercules Dualpix Exchange (2nd ID) */ { USB_DEVICE(0x06f8, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME },
drivers/usb/gadget/udc/dummy_hcd.c +1 -1
@@ -2733,7 +2733,7 @@ static int __init init(void) {int retval = -ENOMEM ;int i; -struct dummy *dum[MAX_NUM_UDC ]; +struct dummy *dum[MAX_NUM_UDC ] = {};if (usb_disabled ())return -ENODEV ;
drivers/usb/host/xhci-hub.c +4 -0
@@ -1705,6 +1705,10 @@ int xhci_bus_suspend(struct usb_hcd *hcd) hcd->state =HC_STATE_SUSPENDED ; bus_state->next_statechange = jiffies +msecs_to_jiffies (10 );spin_unlock_irqrestore (&xhci->lock, flags); + +if (bus_state->bus_suspended) +usleep_range (5000 ,10000 ); +return 0 ; }
drivers/usb/host/xhci-pci.c +2 -0
@@ -45,6 +45,7 @@#define PCI_DEVICE_ID_INTEL_DNV_XHCI 0x19d0#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_XHCI 0x15b5#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_XHCI 0x15b6 +#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_XHCI 0x15c1#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_2C_XHCI 0x15db#define PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_4C_XHCI 0x15d4#define PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_XHCI 0x15e9
@@ -220,6 +221,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) if (pdev->vendor == PCI_VENDOR_ID_INTEL && (pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_XHCI || pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_XHCI || + pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_XHCI || pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_2C_XHCI || pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_4C_XHCI || pdev->device == PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_XHCI ||
drivers/usb/misc/sisusbvga/Kconfig +1 -1
@@ -16,7 +16,7 @@ config USB_SISUSBVGA config USB_SISUSBVGA_CON bool "Text console and mode switching support" if USB_SISUSBVGA - depends on VT + depends on VT && BROKEN select FONT_8x16 ---help--- Say Y here if you want a VGA text console via the USB dongle or
drivers/usb/storage/uas.c +3 -0
@@ -867,6 +867,9 @@ static int uas_slave_configure(struct scsi_device *sdev)if (devinfo->flags &US_FL_NO_READ_CAPACITY_16 ) sdev->no_read_capacity_16 =1 ; +/* Some disks cannot handle WRITE_SAME */ +if (devinfo->flags &US_FL_NO_SAME ) + sdev->no_write_same =1 ;/* * Some disks return the total number of blocks in response * to READ CAPACITY rather than the highest block number.
drivers/usb/storage/unusual_uas.h +5 -2
@@ -35,12 +35,15 @@ UNUSUAL_DEV(0x054c, 0x087d, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NO_REPORT_OPCODES), -/* Reported-by: Julian Groß <[email protected]> */ +/* +* Initially Reported-by: Julian Groß <[email protected]> +* Further reports David C. Partridge <[email protected]> +*/ UNUSUAL_DEV (0x059f ,0x105f ,0x0000 ,0x9999 ,"LaCie" ,"2Big Quadra USB3" ,USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , - US_FL_NO_REPORT_OPCODES), + US_FL_NO_REPORT_OPCODES | US_FL_NO_SAME),/* * Apricorn USB3 dongle sometimes returns "USBSUSBSUSBS" in response to SCSI
drivers/usb/storage/usb.c +3 -0
@@ -541,6 +541,9 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)case 'j' : f |=US_FL_NO_REPORT_LUNS ;break ; +case 'k' : + f |=US_FL_NO_SAME ; +break ;case 'l' : f |=US_FL_NOT_LOCKABLE ;break ;
include/linux/usb_usual.h +2 -0
@@ -84,6 +84,8 @@/* Cannot handle REPORT_LUNS */ \US_FLAG (ALWAYS_SYNC ,0x20000000 ) \ /* lies about caching, so always sync */ \ +US_FLAG (NO_SAME ,0x40000000 ) \ + /* Cannot handle WRITE_SAME */ \#define US_FLAG (name, value) US_FL_##name = value ,enum {US_DO_ALL_FLAGS };
include/uapi/linux/ptrace.h +2 -1
@@ -81,7 +81,8 @@ struct seccomp_metadata {struct ptrace_syscall_info {__u8 op;/* PTRACE_SYSCALL_INFO_* */ -__u32 arch __attribute__((__aligned__ (sizeof (__u32)))); +__u8 pad[3 ]; +__u32 arch;__u64 instruction_pointer;__u64 stack_pointer;union {
kernel/sched/membarrier.c +20 -1
@@ -30,6 +30,23 @@ static void ipi_mb(void *info)smp_mb ();/* IPIs should be serializing but paranoid. */ } +static void ipi_sync_core (void *info) +{ +/* +* The smp_mb() in membarrier after all the IPIs is supposed to +* ensure that memory on remote CPUs that occur before the IPI +* become visible to membarrier()'s caller -- see scenario B in +* the big comment at the top of this file. +* +* A sync_core() would provide this guarantee, but +* sync_core_before_usermode() might end up being deferred until +* after membarrier()'s smp_mb(). +*/ +smp_mb ();/* IPIs should be serializing but paranoid. */ + +sync_core_before_usermode (); +} +static void ipi_sync_rq_state (void *info) {struct mm_struct *mm = (struct mm_struct *) info;
@@ -134,6 +151,7 @@ static int membarrier_private_expedited(int flags)int cpu;cpumask_var_t tmpmask;struct mm_struct *mm = current->mm; +smp_call_func_t ipi_func = ipi_mb;if (flags &MEMBARRIER_FLAG_SYNC_CORE ) {if (!IS_ENABLED (CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE ))
@@ -141,6 +159,7 @@ static int membarrier_private_expedited(int flags)if (!(atomic_read (&mm->membarrier_state) &MEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY ))return -EPERM ; + ipi_func = ipi_sync_core; }else {if (!(atomic_read (&mm->membarrier_state) &MEMBARRIER_STATE_PRIVATE_EXPEDITED_READY ))
@@ -181,7 +200,7 @@ static int membarrier_private_expedited(int flags)rcu_read_unlock ();preempt_disable (); -smp_call_function_many (tmpmask, ipi_mb,NULL ,1 ); +smp_call_function_many (tmpmask, ipi_func,NULL ,1 );preempt_enable ();free_cpumask_var (tmpmask);
net/bridge/br_device.c +6 -0
@@ -168,6 +168,9 @@ static int br_dev_open(struct net_device *dev)br_stp_enable_bridge (br);br_multicast_open (br); +if (br_opt_get (br,BROPT_MULTICAST_ENABLED )) +br_multicast_join_snoopers (br); +return 0 ; }
@@ -188,6 +191,9 @@ static int br_dev_stop(struct net_device *dev)br_stp_disable_bridge (br);br_multicast_stop (br); +if (br_opt_get (br,BROPT_MULTICAST_ENABLED )) +br_multicast_leave_snoopers (br); +netif_stop_queue (dev);return 0 ;
net/bridge/br_multicast.c +25 -9
@@ -1848,7 +1848,7 @@ static inline void br_ip6_multicast_join_snoopers(struct net_bridge *br) }#endif -static void br_multicast_join_snoopers (struct net_bridge *br) +void br_multicast_join_snoopers (struct net_bridge *br) {br_ip4_multicast_join_snoopers (br);br_ip6_multicast_join_snoopers (br);
@@ -1879,7 +1879,7 @@ static inline void br_ip6_multicast_leave_snoopers(struct net_bridge *br) }#endif -static void br_multicast_leave_snoopers (struct net_bridge *br) +void br_multicast_leave_snoopers (struct net_bridge *br) {br_ip4_multicast_leave_snoopers (br);br_ip6_multicast_leave_snoopers (br);
@@ -1898,9 +1898,6 @@ static void __br_multicast_open(struct net_bridge *br,void br_multicast_open (struct net_bridge *br) { -if (br_opt_get (br,BROPT_MULTICAST_ENABLED )) -br_multicast_join_snoopers (br); -__br_multicast_open (br, &br->ip4_own_query);#if IS_ENABLED (CONFIG_IPV6 )__br_multicast_open (br, &br->ip6_own_query);
@@ -1916,9 +1913,6 @@ void br_multicast_stop(struct net_bridge *br)del_timer_sync (&br->ip6_other_query.timer);del_timer_sync (&br->ip6_own_query.timer);#endif - -if (br_opt_get (br,BROPT_MULTICAST_ENABLED )) -br_multicast_leave_snoopers (br); }void br_multicast_dev_del (struct net_bridge *br)
@@ -2049,6 +2043,7 @@ static void br_multicast_start_querier(struct net_bridge *br,int br_multicast_toggle (struct net_bridge *br,unsigned long val) {struct net_bridge_port *port; +bool change_snoopers = false;spin_lock_bh (&br->multicast_lock);if (!!br_opt_get (br,BROPT_MULTICAST_ENABLED ) == !!val)
@@ -2057,7 +2052,7 @@ int br_multicast_toggle(struct net_bridge *br, unsigned long val)br_mc_disabled_update (br->dev, val);br_opt_toggle (br,BROPT_MULTICAST_ENABLED , !!val);if (!br_opt_get (br,BROPT_MULTICAST_ENABLED )) { -br_multicast_leave_snoopers (br); + change_snoopers = true; goto unlock; }
@@ -2068,9 +2063,30 @@ int br_multicast_toggle(struct net_bridge *br, unsigned long val)list_for_each_entry (port, &br->port_list, list)__br_multicast_enable_port (port); + change_snoopers = true; + unlock:spin_unlock_bh (&br->multicast_lock); +/* br_multicast_join_snoopers has the potential to cause +* an MLD Report/Leave to be delivered to br_multicast_rcv, +* which would in turn call br_multicast_add_group, which would +* attempt to acquire multicast_lock. This function should be +* called after the lock has been released to avoid deadlocks on +* multicast_lock. +* +* br_multicast_leave_snoopers does not have the problem since +* br_multicast_rcv first checks BROPT_MULTICAST_ENABLED, and +* returns without calling br_multicast_ipv4/6_rcv if it's not +* enabled. Moved both functions out just for symmetry. +*/ +if (change_snoopers) { +if (br_opt_get (br,BROPT_MULTICAST_ENABLED )) +br_multicast_join_snoopers (br); +else +br_multicast_leave_snoopers (br); + } +return 0 ; }
net/bridge/br_private.h +10 -0
@@ -665,6 +665,8 @@ void br_multicast_del_port(struct net_bridge_port *port);void br_multicast_enable_port (struct net_bridge_port *port);void br_multicast_disable_port (struct net_bridge_port *port);void br_multicast_init (struct net_bridge *br); +void br_multicast_join_snoopers (struct net_bridge *br); +void br_multicast_leave_snoopers (struct net_bridge *br);void br_multicast_open (struct net_bridge *br);void br_multicast_stop (struct net_bridge *br);void br_multicast_dev_del (struct net_bridge *br);
@@ -792,6 +794,14 @@ static inline void br_multicast_init(struct net_bridge *br) { } +static inline void br_multicast_join_snoopers (struct net_bridge *br) +{ +} + +static inline void br_multicast_leave_snoopers (struct net_bridge *br) +{ +} +static inline void br_multicast_open (struct net_bridge *br) { }
net/bridge/br_vlan.c +3 -1
@@ -260,8 +260,10 @@ static int __vlan_add(struct net_bridge_vlan *v, u16 flags, } masterv =br_vlan_get_master (br, v->vid, extack); -if (!masterv) +if (!masterv) { + err = -ENOMEM ; goto out_filt; + } v->brvlan = masterv;if (br_opt_get (br,BROPT_VLAN_STATS_PER_PORT )) { v->stats = netdev_alloc_pcpu_stats(struct br_vlan_stats);
net/ipv4/fib_frontend.c +1 -1
@@ -835,7 +835,7 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,if (has_gw && has_via) {NL_SET_ERR_MSG (extack,"Nexthop configuration can not contain both GATEWAY and VIA" ); - goto errout; +return -EINVAL ; }return 0 ;
net/ipv4/tcp_input.c +2 -1
@@ -446,7 +446,6 @@ void tcp_init_buffer_space(struct sock *sk)if (!(sk->sk_userlocks &SOCK_SNDBUF_LOCK ))tcp_sndbuf_expand (sk); - tp->rcvq_space.space =min_t (u32, tp->rcv_wnd,TCP_INIT_CWND * tp->advmss);tcp_mstamp_refresh (tp); tp->rcvq_space.time = tp->tcp_mstamp; tp->rcvq_space.seq = tp->copied_seq;
@@ -470,6 +469,8 @@ void tcp_init_buffer_space(struct sock *sk) tp->rcv_ssthresh =min (tp->rcv_ssthresh, tp->window_clamp); tp->snd_cwnd_stamp = tcp_jiffies32; + tp->rcvq_space.space =min3 (tp->rcv_ssthresh, tp->rcv_wnd, + (u32 )TCP_INIT_CWND * tp->advmss); }/* 4. Recalculate window clamp after socket hit its memory bounds. */
net/ipv4/tcp_output.c +6 -3
@@ -1654,7 +1654,8 @@ static void tcp_cwnd_validate(struct sock *sk, bool is_cwnd_limited)* window, and remember whether we were cwnd-limited then. */ if (!before (tp->snd_una, tp->max_packets_seq) || - tp->packets_out > tp->max_packets_out) { + tp->packets_out > tp->max_packets_out || + is_cwnd_limited) { tp->max_packets_out = tp->packets_out; tp->max_packets_seq = tp->snd_nxt; tp->is_cwnd_limited = is_cwnd_limited;
@@ -2476,6 +2477,10 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,else tcp_chrono_stop (sk,TCP_CHRONO_RWND_LIMITED ); + is_cwnd_limited |= (tcp_packets_in_flight (tp) >= tp->snd_cwnd); +if (likely (sent_pkts || is_cwnd_limited)) +tcp_cwnd_validate (sk, is_cwnd_limited); +if (likely (sent_pkts)) {if (tcp_in_cwnd_reduction (sk)) tp->prr_out += sent_pkts;
@@ -2483,8 +2488,6 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,/* Send one loss probe per tail loss episode. */ if (push_one !=2 )tcp_schedule_loss_probe (sk, false); - is_cwnd_limited |= (tcp_packets_in_flight (tp) >= tp->snd_cwnd); -tcp_cwnd_validate (sk, is_cwnd_limited);return false; }return !tp->packets_out && !tcp_write_queue_empty (sk);
net/ipv4/udp.c +1 -1
@@ -2117,7 +2117,7 @@ static int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)__skb_pull (skb,skb_transport_offset (skb)); ret =udp_queue_rcv_one_skb (sk, skb);if (ret >0 ) -ip_protocol_deliver_rcu (dev_net (skb->dev), skb, -ret); +ip_protocol_deliver_rcu (dev_net (skb->dev), skb, ret); }return 0 ; }
net/mac80211/mesh_pathtbl.c +1 -3
@@ -60,6 +60,7 @@ static struct mesh_table *mesh_table_alloc(void)atomic_set (&newtbl->entries,0 );spin_lock_init (&newtbl->gates_lock);spin_lock_init (&newtbl->walk_lock); +rhashtable_init (&newtbl->rhead, &mesh_rht_params);return newtbl; }
@@ -775,9 +776,6 @@ int mesh_pathtbl_init(struct ieee80211_sub_if_data *sdata) goto free_path; } -rhashtable_init (&tbl_path->rhead, &mesh_rht_params); -rhashtable_init (&tbl_mpp->rhead, &mesh_rht_params); - sdata->u.mesh.mesh_paths = tbl_path; sdata->u.mesh.mpp_paths = tbl_mpp;
sound/core/oss/pcm_oss.c +5 -1
@@ -1934,11 +1934,15 @@ static int snd_pcm_oss_set_subdivide(struct snd_pcm_oss_file *pcm_oss_file, intstatic int snd_pcm_oss_set_fragment1 (struct snd_pcm_substream *substream,unsigned int val) {struct snd_pcm_runtime *runtime; +int fragshift; runtime = substream->runtime;if (runtime->oss.subdivision || runtime->oss.fragshift)return -EINVAL ; - runtime->oss.fragshift = val &0xffff ; + fragshift = val &0xffff ; +if (fragshift >=31 ) +return -EINVAL ; + runtime->oss.fragshift = fragshift; runtime->oss.maxfrags = (val >>16 ) &0xffff ;if (runtime->oss.fragshift <4 )/* < 16 */ runtime->oss.fragshift =4 ;
sound/usb/format.c +2 -0
@@ -40,6 +40,8 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip,case UAC_VERSION_1 :default : {struct uac_format_type_i_discrete_descriptor *fmt = _fmt; +if (format >=64 ) +return 0 ;/* invalid format */ sample_width = fmt->bBitResolution; sample_bytes = fmt->bSubframeSize; format =1ULL << format;
sound/usb/stream.c +3 -3
@@ -193,16 +193,16 @@ static int usb_chmap_ctl_get(struct snd_kcontrol *kcontrol,struct snd_pcm_chmap *info =snd_kcontrol_chip (kcontrol);struct snd_usb_substream *subs = info->private_data;struct snd_pcm_chmap_elem *chmap =NULL ; -int i; +int i =0 ; -memset (ucontrol->value.integer.value,0 , -sizeof (ucontrol->value.integer.value));if (subs->cur_audiofmt) chmap = subs->cur_audiofmt->chmap;if (chmap) {for (i =0 ; i < chmap->channels; i++) ucontrol->value.integer.value[i] = chmap->map[i]; } +for (; i < subs->channels_max; i++) + ucontrol->value.integer.value[i] =0 ;return 0 ; }
tools/testing/ktest/ktest.pl +6 -1
@@ -4197,7 +4197,12 @@ sub do_send_mail { $mail_command =~ s/\$SUBJECT/$subject/g; $mail_command =~ s/\$MESSAGE/$message/g; - run_command $mail_command; + my $ret = run_command $mail_command; + if (!$ret && defined($file)) { + # try again without the file + $message .= "\n\n*** FAILED TO SEND LOG ***\n\n"; + do_send_email($subject, $message); + } } sub send_email {
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_user.tc +0 -4
@@ -11,16 +11,12 @@ grep -A10 "fetcharg:" README | grep -q '\[u\]<offset>' || exit_unsupported :;: "user-memory access syntax and ustring working on user memory";: echo 'p:myevent do_sys_open path=+0($arg2):ustring path2=+u0($arg2):string' \ > kprobe_events -echo 'p:myevent2 do_sys_openat2 path=+0($arg2):ustring path2=+u0($arg2):string' \ - >> kprobe_events grep myevent kprobe_events | \ grep -q 'path=+0($arg2):ustring path2=+u0($arg2):string' echo 1 > events/kprobes/myevent/enable -echo 1 > events/kprobes/myevent2/enable echo > /dev/null echo 0 > events/kprobes/myevent/enable -echo 0 > events/kprobes/myevent2/enable grep myevent trace | grep -q 'path="/dev/null" path2="/dev/null"'
tools/testing/selftests/net/fcnal-test.sh +95 -0
117 lines not on this page · raw message