Linux 5.9.16
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.9.16 kernel.
All users of the 5.9 kernel series must upgrade.
NOTE, this is the LAST 5.9.y kernel to be released unless something really odd happens. Please move to 5.10.y at this point in time, the 5.9.y branch is now end-of-life.
The updated 5.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.9.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.rst | 2 Makefile | 2 arch/x86/kernel/cpu/resctrl/internal.h | 2 arch/x86/kernel/cpu/resctrl/monitor.c | 7 arch/x86/kvm/mmu/mmu.c | 29 ++- drivers/crypto/chelsio/chcr_ktls.c | 6 drivers/net/bonding/bond_options.c | 22 ++- drivers/net/dsa/ocelot/felix.c | 7 drivers/net/dsa/ocelot/felix_vsc9959.c | 1 drivers/net/dsa/ocelot/seville_vsc9953.c | 1 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/intel/e1000e/netdev.c | 8 - 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/mscc/ocelot.c | 9 - drivers/net/ethernet/mscc/ocelot_vsc7514.c | 1 drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c | 9 - drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 6 drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c | 2 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 51 +++++- drivers/net/ethernet/xilinx/ll_temac_main.c | 9 - drivers/net/ipa/gsi_trans.c | 7 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 | 6 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/stmmac.h | 1 include/linux/usb_usual.h | 2 include/net/bonding.h | 2 include/soc/mscc/ocelot.h | 3 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/core/flow_offload.c | 4 net/ethtool/bitset.c | 2 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 net/mptcp/mib.c | 1 net/sched/cls_flower.c | 4 net/sched/sch_fq_pie.c | 2 net/tipc/node.c | 6 sound/core/oss/pcm_oss.c | 6 sound/usb/format.c | 2 sound/usb/stream.c | 6 tools/testing/ktest/ktest.pl | 20 +- tools/testing/selftests/net/fcnal-test.sh | 95 +++++++++++++ 63 files changed, 428 insertions(+), 159 deletions(-)
Alex Elder (1):
net: ipa: pass the correct size when freeing DMA memory
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
Arnd Bergmann (1):
ch_ktls: fix build warning for ipv4-only config
Bui Quang Minh (1):
USB: dummy-hcd: Fix uninitialized array use in init()
Cengiz Can (1):
net: tipc: prevent possible null deref of link
Chris Mi (1):
net: flow_offload: Fix memory leak for indirect flow block
Claudiu Manoil (1):
enetc: Fix reporting of h/w packet counters
Davide Caratti (1):
net/sched: fq_pie: initialize timer earlier in fq_pie_init()
Eric Dumazet (2):
mac80211: mesh: fix mesh_pathtbl_init() error path
tcp: select sane initial rcvq_space.space for big MSS
Fugang Duan (5):
net: stmmac: start phylink instance before stmmac_hw_setup()
net: stmmac: free tx skb buffer in stmmac_resume()
net: stmmac: delete the eee_ctrl_timer after napi disabled
net: stmmac: overwrite the dma_cap.addr64 according to HW design
net: stmmac: increase the timeout for dma reset
Greg Kroah-Hartman (1):
Linux 5.9.16
Guillaume Nault (1):
net: sched: Fix dump of MPLS_OPT_LSE_LABEL attribute in cls_flower
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
Jarod Wilson (1):
bonding: fix feature flag setting at init time
Jianguo Wu (1):
mptcp: print new line in mptcp_seq_show() if mptcp isn't in use
Joseph Huang (1):
bridge: Fix a deadlock when enabling multicast snooping
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
Michal Kubecek (1):
ethtool: fix stack overflow in ethnl_parse_bitset()
Mika Westerberg (1):
xhci-pci: Allow host runtime PM as default for Intel Maple Ridge xHCI
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) (2):
ktest.pl: If size of log is too big to email, email error message ktest.pl: Fix the logic for truncating the size of the log file for email
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
Vitaly Lifshits (1):
e1000e: fix S0ix flow to allow S0i3.2 subset entry
Vladimir Oltean (1):
net: mscc: ocelot: fix dropping of unknown IPv4 multicast on Seville
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
@@ -5521,6 +5521,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.rst +1 -1
@@ -455,7 +455,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 = 9 -SUBLEVEL = 15 +SUBLEVEL = 16 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/x86/kernel/cpu/resctrl/internal.h +0 -2
@@ -283,7 +283,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
@@ -292,7 +291,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
@@ -279,8 +279,6 @@ static void mbm_bw_count(u32 rmid, struct rmid_read *rr)return ; chunks =mbm_overflow_count (m->prev_bw_msr, tval, rr->r->mbm_width); - 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_resource *r, 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/mmu.c +20 -9
@@ -402,11 +402,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
@@ -415,18 +415,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;
@@ -434,8 +445,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; }
@@ -443,8 +454,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/crypto/chelsio/chcr_ktls.c +1 -5
@@ -921,9 +921,7 @@ chcr_ktls_write_tcp_options(struct chcr_ktls_info *tx_info, struct sk_buff *skb,struct fw_eth_tx_pkt_wr *wr;struct cpl_tx_pkt_core *cpl;u32 ctrl, iplen, maclen; -#if IS_ENABLED (CONFIG_IPV6 )struct ipv6hdr *ip6; -#endif unsigned int ndesc;struct tcphdr *tcp;int len16, pktlen;
@@ -971,17 +969,15 @@ chcr_ktls_write_tcp_options(struct chcr_ktls_info *tx_info, struct sk_buff *skb, cpl->len =htons (pktlen);memcpy (buf, skb->data, pktlen); -if (tx_info->ip_family ==AF_INET ) { +if (!IS_ENABLED (CONFIG_IPV6 ) || tx_info->ip_family ==AF_INET ) {/* we need to correct ip header len */ ip = (struct iphdr *)(buf + maclen); ip->tot_len =htons (pktlen - maclen); cntrl1 =TXPKT_CSUM_TYPE_V (TX_CSUM_TCPIP ); -#if IS_ENABLED (CONFIG_IPV6 ) }else { ip6 = (struct ipv6hdr *)(buf + maclen); ip6->payload_len =htons (pktlen - maclen - iplen); cntrl1 =TXPKT_CSUM_TYPE_V (TX_CSUM_TCPIP6 ); -#endif } cntrl1 |= T6_TXPKT_ETHHDR_LEN_V(maclen - ETH_HLEN) |
drivers/net/bonding/bond_options.c +15 -7
@@ -745,6 +745,19 @@ const struct bond_option *bond_opt_get(unsigned int option)return &bond_opts[option]; } +static void bond_set_xfrm_features (struct net_device *bond_dev,u64 mode) +{ +if (!IS_ENABLED (CONFIG_XFRM_OFFLOAD )) +return ; + +if (mode ==BOND_MODE_ACTIVEBACKUP ) + bond_dev->wanted_features |=BOND_XFRM_FEATURES ; +else + bond_dev->wanted_features &= ~BOND_XFRM_FEATURES ; + +netdev_update_features (bond_dev); +} +static int bond_option_mode_set (struct bonding *bond,const struct bond_opt_value *newval) {
@@ -767,13 +780,8 @@ static int bond_option_mode_set(struct bonding *bond,if (newval->value ==BOND_MODE_ALB ) bond->params.tlb_dynamic_lb =1 ; -#ifdef CONFIG_XFRM_OFFLOAD -if (newval->value ==BOND_MODE_ACTIVEBACKUP ) - bond->dev->wanted_features |=BOND_XFRM_FEATURES ; -else - bond->dev->wanted_features &= ~BOND_XFRM_FEATURES ; -netdev_change_features (bond->dev); -#endif /* CONFIG_XFRM_OFFLOAD */ +if (bond->dev->reg_state ==NETREG_REGISTERED ) +bond_set_xfrm_features (bond->dev, newval->value);/* don't cache arp_validate between modes */ bond->params.arp_validate =BOND_ARP_VALIDATE_NONE ;
drivers/net/dsa/ocelot/felix.c +0 -7
@@ -579,7 +579,6 @@ static int felix_setup(struct dsa_switch *ds)struct ocelot *ocelot = ds->priv;struct felix *felix =ocelot_to_felix (ocelot);int port, err; -int tc; err =felix_init_structs (felix, ds->num_ports);if (err)
@@ -621,12 +620,6 @@ static int felix_setup(struct dsa_switch *ds)ocelot_write_rix (ocelot,ANA_PGID_PGID_PGID (GENMASK (ocelot->num_phys_ports,0 )),ANA_PGID_PGID ,PGID_UC ); -/* Setup the per-traffic class flooding PGIDs */ -for (tc =0 ; tc <FELIX_NUM_TC ; tc++) -ocelot_write_rix (ocelot,ANA_FLOODING_FLD_MULTICAST (PGID_MC ) | -ANA_FLOODING_FLD_BROADCAST (PGID_MC ) | -ANA_FLOODING_FLD_UNICAST (PGID_UC ), -ANA_FLOODING , tc); ds->mtu_enforcement_ingress = true; ds->configure_vlan_while_not_filtering = true;
drivers/net/dsa/ocelot/felix_vsc9959.c +1 -0
@@ -1588,6 +1588,7 @@ static int felix_pci_probe(struct pci_dev *pdev,pci_set_drvdata (pdev, felix); ocelot = &felix->ocelot; ocelot->dev = &pdev->dev; + ocelot->num_flooding_pgids =FELIX_NUM_TC ; felix->info = &felix_info_vsc9959; felix->switch_base =pci_resource_start (pdev, felix->info->switch_pci_bar);
drivers/net/dsa/ocelot/seville_vsc9953.c +1 -0
@@ -1042,6 +1042,7 @@ static int seville_probe(struct platform_device *pdev) ocelot = &felix->ocelot; ocelot->dev = &pdev->dev; + ocelot->num_flooding_pgids =1 ; felix->info = &seville_info_vsc9953; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 );
drivers/net/ethernet/freescale/enetc/enetc_ethtool.c +7 -3
@@ -143,8 +143,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" },
@@ -163,9 +163,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
@@ -267,8 +267,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
@@ -287,9 +287,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/intel/e1000e/netdev.c +4 -4
@@ -6449,13 +6449,13 @@ static void e1000e_s0ix_entry_flow(struct e1000_adapter *adapter)/* Ungate PGCB clock */ mac_data =er32 (FEXTNVM9 ); - mac_data |=BIT (28 ); + mac_data &= ~BIT (28 );ew32 (FEXTNVM9 , mac_data);/* Enable K1 off to enable mPHY Power Gating */ mac_data =er32 (FEXTNVM6 ); mac_data |=BIT (31 ); -ew32 (FEXTNVM12 , mac_data); +ew32 (FEXTNVM6 , mac_data);/* Enable mPHY power gating for any link and speed */ mac_data =er32 (FEXTNVM8 );
@@ -6499,11 +6499,11 @@ static void e1000e_s0ix_exit_flow(struct e1000_adapter *adapter)/* Disable K1 off */ mac_data =er32 (FEXTNVM6 ); mac_data &= ~BIT (31 ); -ew32 (FEXTNVM12 , mac_data); +ew32 (FEXTNVM6 , mac_data);/* Disable Ungate PGCB clock */ mac_data =er32 (FEXTNVM9 ); - mac_data &= ~BIT (28 ); + mac_data |=BIT (28 );ew32 (FEXTNVM9 , mac_data);/* Cancel not waking from dynamic
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +14 -7
@@ -1378,8 +1378,10 @@ static void mlx4_en_tx_timeout(struct net_device *dev, unsigned int txqueue) tx_ring->cons, tx_ring->prod); 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); + } }
@@ -1733,6 +1735,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 ;
@@ -1829,6 +1832,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);
@@ -1999,7 +2003,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;
@@ -2377,7 +2381,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 {
@@ -2386,7 +2390,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);
@@ -2792,7 +2798,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); } }
@@ -3165,7 +3172,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); +} +int mlx4_en_process_tx_cq (struct net_device *dev,struct mlx4_en_cq *cq,int napi_budget) {
@@ -438,13 +467,10 @@ int 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;
@@ -641,6 +650,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/mscc/ocelot.c +5 -4
@@ -1485,10 +1485,11 @@ int ocelot_init(struct ocelot *ocelot) SYS_FRM_AGING_MAX_AGE(307692), SYS_FRM_AGING);/* Setup flooding PGIDs */ -ocelot_write_rix (ocelot,ANA_FLOODING_FLD_MULTICAST (PGID_MC ) | -ANA_FLOODING_FLD_BROADCAST (PGID_MC ) | -ANA_FLOODING_FLD_UNICAST (PGID_UC ), -ANA_FLOODING ,0 ); +for (i =0 ; i < ocelot->num_flooding_pgids; i++) +ocelot_write_rix (ocelot,ANA_FLOODING_FLD_MULTICAST (PGID_MC ) | +ANA_FLOODING_FLD_BROADCAST (PGID_MC ) | +ANA_FLOODING_FLD_UNICAST (PGID_UC ), +ANA_FLOODING , i); ocelot_write(ocelot, ANA_FLOODING_IPMC_FLD_MC6_DATA(PGID_MCIPV6) | ANA_FLOODING_IPMC_FLD_MC6_CTRL(PGID_MC) | ANA_FLOODING_IPMC_FLD_MC4_DATA(PGID_MCIPV4) |
drivers/net/ethernet/mscc/ocelot_vsc7514.c +1 -0
@@ -1118,6 +1118,7 @@ static int mscc_ocelot_probe(struct platform_device *pdev) } ocelot->num_phys_ports =of_get_child_count (ports); + ocelot->num_flooding_pgids =1 ; ocelot->vcap_is2_keys = vsc7514_vcap_is2_keys; ocelot->vcap_is2_actions = vsc7514_vcap_is2_actions;
drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c +1 -8
@@ -247,13 +247,7 @@ static int imx_dwmac_probe(struct platform_device *pdev) goto err_parse_dt; } - ret =dma_set_mask_and_coherent (&pdev->dev, -DMA_BIT_MASK (dwmac->ops->addr_width)); -if (ret) { -dev_err (&pdev->dev,"DMA mask set failed\n" ); - goto err_dma_mask; - } - + plat_dat->addr64 = dwmac->ops->addr_width; plat_dat->init = imx_dwmac_init; plat_dat->exit = imx_dwmac_exit; plat_dat->fix_mac_speed = imx_dwmac_fix_speed;
@@ -273,7 +267,6 @@ static int imx_dwmac_probe(struct platform_device *pdev) err_dwmac_init: err_drv_probe:imx_dwmac_exit (pdev, plat_dat->bsp_priv); -err_dma_mask: err_parse_dt: err_match_data:stmmac_remove_config_dt (pdev, plat_dat);
drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +3 -3
@@ -30,7 +30,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)/* TX clock delay in ns = "8ns / 4 * tx_dly_val" (where 8ns are exactly one
@@ -155,8 +154,9 @@ static int meson8b_init_rgmii_tx_clk(struct meson8b_dwmac *dwmac)return -ENOMEM ; 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_parents,ARRAY_SIZE (mux_parents), &clk_mux_ops, &clk_configs->m250_mux.hw);
drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c +1 -1
@@ -22,7 +22,7 @@ int dwmac4_dma_reset(void __iomem *ioaddr)return readl_poll_timeout (ioaddr +DMA_BUS_MODE , value, !(value &DMA_BUS_MODE_SFT_RESET ), -10000 ,100000 ); +10000 ,1000000 ); }void dwmac4_set_rx_tail_ptr (void __iomem *ioaddr,u32 tail_ptr,u32 chan)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +40 -11
98 lines not on this page · raw message
drivers/net/ethernet/xilinx/ll_temac_main.c +3 -6
@@ -1351,7 +1351,6 @@ static int temac_probe(struct platform_device *pdev)struct device_node *temac_np =dev_of_node (&pdev->dev), *dma_np;struct temac_local *lp;struct net_device *ndev; -struct resource *res;const void *addr;__be32 *p;bool little_endian;
@@ -1500,13 +1499,11 @@ 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 (&pdev->dev, res->start, -resource_size (res)); -if (!lp->sdma_regs) { + 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" ); -return -ENOMEM ; +return PTR_ERR (lp->sdma_regs); }if (pdata->dma_little_endian) { lp->dma_in = temac_dma_in32_le;
drivers/net/ipa/gsi_trans.c +6 -1
@@ -157,6 +157,9 @@ int gsi_trans_pool_init_dma(struct device *dev, struct gsi_trans_pool *pool,/* The allocator will give us a power-of-2 number of pages. But we * can't guarantee that, so request it. That way we won't waste any * memory that would be available beyond the required space. +* +* Note that gsi_trans_pool_exit_dma() assumes the total allocated +* size is exactly (count * size). */ total_size =get_order (total_size) <<PAGE_SHIFT ;
@@ -176,7 +179,9 @@ int gsi_trans_pool_init_dma(struct device *dev, struct gsi_trans_pool *pool,void gsi_trans_pool_exit_dma (struct device *dev,struct gsi_trans_pool *pool) { -dma_free_coherent (dev, pool->size, pool->base, pool->addr); +size_t total_size = pool->count * pool->size; + +dma_free_coherent (dev, total_size, pool->base, pool->addr);memset (pool,0 ,sizeof (*pool)); }
drivers/net/vrf.c +8 -2
@@ -1315,11 +1315,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
@@ -184,11 +184,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
@@ -2734,7 +2734,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
@@ -1712,6 +1712,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 +5 -1
@@ -46,6 +46,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
@@ -54,6 +55,7 @@#define PCI_DEVICE_ID_INTEL_ICE_LAKE_XHCI 0x8a13#define PCI_DEVICE_ID_INTEL_CML_XHCI 0xa3af#define PCI_DEVICE_ID_INTEL_TIGER_LAKE_XHCI 0x9a13 +#define PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI 0x1138#define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9#define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba
@@ -231,13 +233,15 @@ 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 || pdev->device ==PCI_DEVICE_ID_INTEL_TITAN_RIDGE_4C_XHCI || pdev->device ==PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_XHCI || pdev->device ==PCI_DEVICE_ID_INTEL_ICE_LAKE_XHCI || - pdev->device ==PCI_DEVICE_ID_INTEL_TIGER_LAKE_XHCI )) + pdev->device ==PCI_DEVICE_ID_INTEL_TIGER_LAKE_XHCI || + pdev->device ==PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI )) xhci->quirks |=XHCI_DEFAULT_PM_RUNTIME_ALLOW ; if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
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/stmmac.h +1 -0
@@ -170,6 +170,7 @@ struct plat_stmmacenet_data {int unicast_filter_entries;int tx_fifo_size;int rx_fifo_size; +u32 addr64;u32 rx_queues_to_use;u32 tx_queues_to_use;u8 rx_sched_algorithm;
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/net/bonding.h +0 -2
@@ -86,10 +86,8 @@#define bond_for_each_slave_rcu (bond, pos, iter) \ netdev_for_each_lower_private_rcu((bond)->dev, pos, iter) -#ifdef CONFIG_XFRM_OFFLOAD #define BOND_XFRM_FEATURES (NETIF_F_HW_ESP | NETIF_F_HW_ESP_TX_CSUM | \ NETIF_F_GSO_ESP) -#endif /* CONFIG_XFRM_OFFLOAD */ #ifdef CONFIG_NET_POLL_CONTROLLER extern atomic_t netpoll_block_tx;
include/soc/mscc/ocelot.h +3 -0
@@ -597,6 +597,9 @@ struct ocelot {/* Keep track of the vlan port masks */ u32 vlan_mask[VLAN_N_VID ]; +/* Switches like VSC9959 have flooding per traffic class */ +int num_flooding_pgids; +/* In tables like ANA:PORT and the ANA:PGID:PGID mask, * the CPU is located after the physical ports (at the * num_phys_ports index).
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
@@ -177,6 +177,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 ; }
@@ -197,6 +200,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
@@ -745,6 +745,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);
@@ -872,6 +874,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
@@ -266,8 +266,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/core/flow_offload.c +1 -3
@@ -381,10 +381,8 @@ static void __flow_block_indr_cleanup(void (*release)(void *cb_priv),list_for_each_entry_safe (this, next, &flow_block_indr_list, indr.list) {if (this->release == release && - this->indr.cb_priv == cb_priv) { + this->indr.cb_priv == cb_priv)list_move (&this->indr.list, cleanup_list); -return ; - } } }
net/ethtool/bitset.c +2 -0
@@ -630,6 +630,8 @@ int ethnl_parse_bitset(unsigned long *val, unsigned long *mask,return ret; change_bits =nla_get_u32 (tb[ETHTOOL_A_BITSET_SIZE ]); +if (change_bits > nbits) + change_bits = nbits;bitmap_from_arr32 (val,nla_data (tb[ETHTOOL_A_BITSET_VALUE ]), change_bits);if (change_bits < nbits)
net/ipv4/fib_frontend.c +1 -1
@@ -825,7 +825,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
@@ -447,7 +447,6 @@ static 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;
@@ -471,6 +470,8 @@ static 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
@@ -1723,7 +1723,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;
@@ -2545,6 +2546,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;
@@ -2552,8 +2557,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
@@ -2173,7 +2173,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; }
@@ -773,9 +774,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;
net/mptcp/mib.c +1 -0
@@ -58,6 +58,7 @@ void mptcp_seq_show(struct seq_file *seq)for (i =0 ; mptcp_snmp_list[i].name; i++)seq_puts (seq," 0" ); +seq_putc (seq,'\n' );return ; }
net/sched/cls_flower.c +2 -2
@@ -2424,8 +2424,8 @@ static int fl_dump_key_mpls_opt_lse(struct sk_buff *skb,return err; }if (lse_mask->mpls_label) { - err =nla_put_u8 (skb,TCA_FLOWER_KEY_MPLS_OPT_LSE_LABEL , - lse_key->mpls_label); + err =nla_put_u32 (skb,TCA_FLOWER_KEY_MPLS_OPT_LSE_LABEL , + lse_key->mpls_label);if (err)return err; }
net/sched/sch_fq_pie.c +1 -1
@@ -401,6 +401,7 @@ static int fq_pie_init(struct Qdisc *sch, struct nlattr *opt,INIT_LIST_HEAD (&q->new_flows);INIT_LIST_HEAD (&q->old_flows); +timer_setup (&q->adapt_timer, fq_pie_timer,0 );if (opt) { err =fq_pie_change (sch, opt, extack);
@@ -426,7 +427,6 @@ static int fq_pie_init(struct Qdisc *sch, struct nlattr *opt,pie_vars_init (&flow->vars); } -timer_setup (&q->adapt_timer, fq_pie_timer,0 );mod_timer (&q->adapt_timer, jiffies +HZ /2 );return 0 ;
net/tipc/node.c +4 -2
@@ -2170,9 +2170,11 @@ void tipc_node_apply_property(struct net *net, struct tipc_bearer *b, &xmitq); else if (prop == TIPC_NLA_PROP_MTU) tipc_link_set_mtu(e->link, b->mtu); + +/* Update MTU for node link entry */ + e->mtu =tipc_link_mss (e->link); } -/* Update MTU for node link entry */ - e->mtu =tipc_link_mss (e->link); +tipc_node_write_unlock (n);tipc_bearer_xmit (net, bearer_id, &xmitq, &e->maddr,NULL ); }
sound/core/oss/pcm_oss.c +5 -1
@@ -1935,11 +1935,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 +12 -8
@@ -1499,17 +1499,16 @@ sub dodie { my $log_file; if (defined($opt{"LOG_FILE"})) { - my $whence = 0; # beginning of file - my $pos = $test_log_start; + my $whence = 2; # End of file + my $log_size = tell LOG; + my $size = $log_size - $test_log_start; if (defined($mail_max_size)) { - my $log_size = tell LOG; - $log_size -= $test_log_start; - if ($log_size > $mail_max_size) { - $whence = 2; # end of file - $pos = - $mail_max_size; + if ($size > $mail_max_size) { + $size = $mail_max_size; } } + my $pos = - $size; $log_file = "$tmpdir/log"; open (L, "$opt{LOG_FILE}") or die "Can't open $opt{LOG_FILE} to read)"; open (O, "> $tmpdir/log") or die "Can't open $tmpdir/log\n";
@@ -4253,7 +4252,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/net/fcnal-test.sh +95 -0
117 lines not on this page · raw message