···651651652652 default: initial size of receive buffer used by TCP sockets.653653 This value overrides net.core.rmem_default used by other protocols.654654- Default: 87380 bytes. This value results in window of 65535 with655655- default setting of tcp_adv_win_scale and tcp_app_win:0 and a bit656656- less for default tcp_app_win. See below about these variables.654654+ Default: 131072 bytes.655655+ This value results in initial window of 65535.657656658657 max: maximal size of receive buffer allowed for automatically659658 selected receiver buffers for TCP socket. This value does not override660659 net.core.rmem_max. Calling setsockopt() with SO_RCVBUF disables661660 automatic tuning of that socket's receive buffer size, in which662661 case this value is ignored.663663- Default: between 87380B and 6MB, depending on RAM size.662662+ Default: between 131072 and 6MB, depending on RAM size.664663665664tcp_sack - BOOLEAN666665 Enable select acknowledgments (SACKS).
+16
Documentation/networking/netdev-FAQ.rst
···272272Posting as one thread is discouraged because it confuses patchwork273273(as of patchwork 2.2.2).274274275275+Can I reproduce the checks from patchwork on my local machine?276276+--------------------------------------------------------------277277+278278+Checks in patchwork are mostly simple wrappers around existing kernel279279+scripts, the sources are available at:280280+281281+https://github.com/kuba-moo/nipa/tree/master/tests282282+283283+Running all the builds and checks locally is a pain, can I post my patches and have the patchwork bot validate them?284284+--------------------------------------------------------------------------------------------------------------------285285+286286+No, you must ensure that your patches are ready by testing them locally287287+before posting to the mailing list. The patchwork build bot instance288288+gets overloaded very easily and netdev@vger really doesn't need more289289+traffic if we can help it.290290+275291Any other tips to help ensure my net/net-next patch gets OK'd?276292--------------------------------------------------------------277293Attention to detail. Re-read your own work as if you were the
+1-10
drivers/atm/idt77252.c
···37433743 struct sk_buff *skb;3744374437453745 printk("%s: at %p\n", __func__, idt77252_init);37463746-37473747- if (sizeof(skb->cb) < sizeof(struct atm_skb_data) +37483748- sizeof(struct idt77252_skb_prv)) {37493749- printk(KERN_ERR "%s: skb->cb is too small (%lu < %lu)\n",37503750- __func__, (unsigned long) sizeof(skb->cb),37513751- (unsigned long) sizeof(struct atm_skb_data) +37523752- sizeof(struct idt77252_skb_prv));37533753- return -EIO;37543754- }37553755-37463746+ BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct idt77252_skb_prv) + sizeof(struct atm_skb_data));37563747 return pci_register_driver(&idt77252_driver);37573748}37583749
···12791279#define MDIO_PMA_10GBR_FECCTRL 0x00ab12801280#endif1281128112821282+#ifndef MDIO_PMA_RX_CTRL112831283+#define MDIO_PMA_RX_CTRL1 0x805112841284+#endif12851285+12821286#ifndef MDIO_PCS_DIG_CTRL12831287#define MDIO_PCS_DIG_CTRL 0x800012881288+#endif12891289+12901290+#ifndef MDIO_PCS_DIGITAL_STAT12911291+#define MDIO_PCS_DIGITAL_STAT 0x801012841292#endif1285129312861294#ifndef MDIO_AN_XNP···13661358#define XGBE_KR_TRAINING_ENABLE BIT(1)1367135913681360#define XGBE_PCS_CL37_BP BIT(12)13611361+#define XGBE_PCS_PSEQ_STATE_MASK 0x1c13621362+#define XGBE_PCS_PSEQ_STATE_POWER_GOOD 0x101369136313701364#define XGBE_AN_CL37_INT_CMPLT BIT(0)13711365#define XGBE_AN_CL37_INT_MASK 0x01···13841374#define XGBE_PMA_CDR_TRACK_EN_MASK 0x0113851375#define XGBE_PMA_CDR_TRACK_EN_OFF 0x0013861376#define XGBE_PMA_CDR_TRACK_EN_ON 0x0113771377+13781378+#define XGBE_PMA_RX_RST_0_MASK BIT(4)13791379+#define XGBE_PMA_RX_RST_0_RESET_ON 0x1013801380+#define XGBE_PMA_RX_RST_0_RESET_OFF 0x001387138113881382/* Bit setting and getting macros13891383 * The get macro will extract the current bit field value from within
···28462846 * @skb: the packet28472847 *28482848 * Returns true if a packet can be sent as an offload WR with immediate28492849- * data. We currently use the same limit as for Ethernet packets.28492849+ * data.28502850+ * FW_OFLD_TX_DATA_WR limits the payload to 255 bytes due to 8-bit field.28512851+ * However, FW_ULPTX_WR commands have a 256 byte immediate only28522852+ * payload limit.28502853 */28512854static inline int is_ofld_imm(const struct sk_buff *skb)28522855{28532856 struct work_request_hdr *req = (struct work_request_hdr *)skb->data;28542857 unsigned long opcode = FW_WR_OP_G(ntohl(req->wr_hi));2855285828562856- if (opcode == FW_CRYPTO_LOOKASIDE_WR)28592859+ if (unlikely(opcode == FW_ULPTX_WR))28602860+ return skb->len <= MAX_IMM_ULPTX_WR_LEN;28612861+ else if (opcode == FW_CRYPTO_LOOKASIDE_WR)28572862 return skb->len <= SGE_MAX_WR_LEN;28582863 else28592859- return skb->len <= MAX_IMM_TX_PKT_LEN;28642864+ return skb->len <= MAX_IMM_OFLD_TX_DATA_WR_LEN;28602865}2861286628622867/**
···27272828config FSL_ENETC_MDIO2929 tristate "ENETC MDIO driver"3030- depends on PCI3030+ depends on PCI && MDIO_DEVRES && MDIO_BUS3131 help3232 This driver supports NXP ENETC Central MDIO controller as a PCIe3333 physical function (PF) device.
···247247 if (!ltb->buff)248248 return;249249250250+ /* VIOS automatically unmaps the long term buffer at remote251251+ * end for the following resets:252252+ * FAILOVER, MOBILITY, TIMEOUT.253253+ */250254 if (adapter->reset_reason != VNIC_RESET_FAILOVER &&251251- adapter->reset_reason != VNIC_RESET_MOBILITY)255255+ adapter->reset_reason != VNIC_RESET_MOBILITY &&256256+ adapter->reset_reason != VNIC_RESET_TIMEOUT)252257 send_request_unmap(adapter, ltb->map_id);253258 dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr);254259}···1327132213281323 adapter->state = VNIC_CLOSING;13291324 rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_DN);13301330- if (rc)13311331- return rc;13321325 adapter->state = VNIC_CLOSED;13331333- return 0;13261326+ return rc;13341327}1335132813361329static int ibmvnic_close(struct net_device *netdev)···16721669 } else {16731670 skb_copy_from_linear_data(skb, dst, skb->len);16741671 }16721672+16731673+ /* post changes to long_term_buff *dst before VIOS accessing it */16741674+ dma_wmb();1675167516761676 tx_pool->consumer_index =16771677 (tx_pool->consumer_index + 1) % tx_pool->num_buffers;···22942288 unsigned long flags;22952289 int ret;2296229022972297- /* If failover is pending don't schedule any other reset.22912291+ /*22922292+ * If failover is pending don't schedule any other reset.22982293 * Instead let the failover complete. If there is already a22992294 * a failover reset scheduled, we will detect and drop the23002295 * duplicate reset when walking the ->rwi_list below.···23152308 goto err;23162309 }2317231023182318- spin_lock_irqsave(&adapter->rwi_lock, flags);23192319-23202311 list_for_each(entry, &adapter->rwi_list) {23212312 tmp = list_entry(entry, struct ibmvnic_rwi, list);23222313 if (tmp->reset_reason == reason) {23232314 netdev_dbg(netdev, "Skipping matching reset, reason=%d\n",23242315 reason);23252325- spin_unlock_irqrestore(&adapter->rwi_lock, flags);23262316 ret = EBUSY;23272317 goto err;23282318 }···2327232323282324 rwi = kzalloc(sizeof(*rwi), GFP_ATOMIC);23292325 if (!rwi) {23302330- spin_unlock_irqrestore(&adapter->rwi_lock, flags);23312331- ibmvnic_close(netdev);23322326 ret = ENOMEM;23332327 goto err;23342328 }···23392337 }23402338 rwi->reset_reason = reason;23412339 list_add_tail(&rwi->list, &adapter->rwi_list);23422342- spin_unlock_irqrestore(&adapter->rwi_lock, flags);23432340 netdev_dbg(adapter->netdev, "Scheduling reset (reason %d)\n", reason);23442341 schedule_work(&adapter->ibmvnic_reset);2345234223462346- return 0;23432343+ ret = 0;23472344err:23452345+ /* ibmvnic_close() below can block, so drop the lock first */23462346+ spin_unlock_irqrestore(&adapter->rwi_lock, flags);23472347+23482348+ if (ret == ENOMEM)23492349+ ibmvnic_close(netdev);23502350+23482351 return -ret;23492352}23502353···24402433 offset = be16_to_cpu(next->rx_comp.off_frame_data);24412434 flags = next->rx_comp.flags;24422435 skb = rx_buff->skb;24362436+ /* load long_term_buff before copying to skb */24372437+ dma_rmb();24432438 skb_copy_to_linear_data(skb, rx_buff->data + offset,24442439 length);24452440···53555346 unsigned long flags;5356534753575348 spin_lock_irqsave(&adapter->state_lock, flags);53495349+53505350+ /* If ibmvnic_reset() is scheduling a reset, wait for it to53515351+ * finish. Then, set the state to REMOVING to prevent it from53525352+ * scheduling any more work and to have reset functions ignore53535353+ * any resets that have already been scheduled. Drop the lock53545354+ * after setting state, so __ibmvnic_reset() which is called53555355+ * from the flush_work() below, can make progress.53565356+ */53575357+ spin_lock_irqsave(&adapter->rwi_lock, flags);53585358 adapter->state = VNIC_REMOVING;53595359+ spin_unlock_irqrestore(&adapter->rwi_lock, flags);53605360+53595361 spin_unlock_irqrestore(&adapter->state_lock, flags);5360536253615363 flush_work(&adapter->ibmvnic_reset);
+3-1
drivers/net/ethernet/ibm/ibmvnic.h
···3131#define IBMVNIC_BUFFS_PER_POOL 1003232#define IBMVNIC_MAX_QUEUES 163333#define IBMVNIC_MAX_QUEUE_SZ 40963434-#define IBMVNIC_MAX_IND_DESCS 1283434+#define IBMVNIC_MAX_IND_DESCS 163535#define IBMVNIC_IND_ARR_SZ (IBMVNIC_MAX_IND_DESCS * 32)36363737#define IBMVNIC_TSO_BUF_SZ 65536···10841084 /* Used for serializatin of state field */10851085 spinlock_t state_lock;10861086 enum ibmvnic_reset_reason reset_reason;10871087+ /* when taking both state and rwi locks, take state lock first */10881088+ spinlock_t rwi_lock;10871089 struct list_head rwi_list;10881090 /* Used for serialization of rwi_list */10891091 spinlock_t rwi_lock;
+9
drivers/net/ethernet/mellanox/mlx5/core/devlink.c
···141141 return -EOPNOTSUPP;142142 }143143144144+ if (mlx5_lag_is_active(dev)) {145145+ NL_SET_ERR_MSG_MOD(extack, "reload is unsupported in Lag mode\n");146146+ return -EOPNOTSUPP;147147+ }148148+144149 switch (action) {145150 case DEVLINK_RELOAD_ACTION_DRIVER_REINIT:146151 mlx5_unload_one(dev, false);···431426432427 if (new_state && !MLX5_CAP_GEN(dev, roce)) {433428 NL_SET_ERR_MSG_MOD(extack, "Device doesn't support RoCE");429429+ return -EOPNOTSUPP;430430+ }431431+ if (mlx5_core_is_mp_slave(dev) || mlx5_lag_is_active(dev)) {432432+ NL_SET_ERR_MSG_MOD(extack, "Multi port slave/Lag device can't configure RoCE");434433 return -EOPNOTSUPP;435434 }436435
···83838484 clear_bit(MLX5E_STATE_XDP_TX_ENABLED, &priv->state);8585 /* Let other device's napi(s) and XSK wakeups see our new state. */8686- synchronize_rcu();8686+ synchronize_net();8787}88888989static inline bool mlx5e_xdp_tx_is_enabled(struct mlx5e_priv *priv)
···111111void mlx5e_close_xsk(struct mlx5e_channel *c)112112{113113 clear_bit(MLX5E_CHANNEL_STATE_XSK, c->state);114114- synchronize_rcu(); /* Sync with the XSK wakeup and with NAPI. */114114+ synchronize_net(); /* Sync with the XSK wakeup and with NAPI. */115115116116 mlx5e_close_rq(&c->xskrq);117117 mlx5e_close_cq(&c->xskrq.cq);
···5757 struct mlx5e_ktls_rx_resync_ctx resync;5858};59596060+static bool mlx5e_ktls_priv_rx_put(struct mlx5e_ktls_offload_context_rx *priv_rx)6161+{6262+ if (!refcount_dec_and_test(&priv_rx->resync.refcnt))6363+ return false;6464+6565+ kfree(priv_rx);6666+ return true;6767+}6868+6969+static void mlx5e_ktls_priv_rx_get(struct mlx5e_ktls_offload_context_rx *priv_rx)7070+{7171+ refcount_inc(&priv_rx->resync.refcnt);7272+}7373+6074static int mlx5e_ktls_create_tir(struct mlx5_core_dev *mdev, u32 *tirn, u32 rqtn)6175{6276 int err, inlen;···340326 priv_rx = container_of(resync, struct mlx5e_ktls_offload_context_rx, resync);341327342328 if (unlikely(test_bit(MLX5E_PRIV_RX_FLAG_DELETING, priv_rx->flags))) {343343- refcount_dec(&resync->refcnt);329329+ mlx5e_ktls_priv_rx_put(priv_rx);344330 return;345331 }346332···348334 sq = &c->async_icosq;349335350336 if (resync_post_get_progress_params(sq, priv_rx))351351- refcount_dec(&resync->refcnt);337337+ mlx5e_ktls_priv_rx_put(priv_rx);352338}353339354340static void resync_init(struct mlx5e_ktls_rx_resync_ctx *resync,···391377 return err;392378}393379394394-/* Function is called with elevated refcount, it decreases it. */380380+/* Function can be called with the refcount being either elevated or not.381381+ * It decreases the refcount and may free the kTLS priv context.382382+ * Refcount is not elevated only if tls_dev_del has been called, but GET_PSV was383383+ * already in flight.384384+ */395385void mlx5e_ktls_handle_get_psv_completion(struct mlx5e_icosq_wqe_info *wi,396386 struct mlx5e_icosq *sq)397387{···428410 tls_offload_rx_resync_async_request_end(priv_rx->sk, cpu_to_be32(hw_seq));429411 priv_rx->stats->tls_resync_req_end++;430412out:431431- refcount_dec(&resync->refcnt);413413+ mlx5e_ktls_priv_rx_put(priv_rx);432414 dma_unmap_single(dev, buf->dma_addr, PROGRESS_PARAMS_PADDED_SIZE, DMA_FROM_DEVICE);433415 kfree(buf);434416}···449431 return false;450432451433 resync = &priv_rx->resync;452452- refcount_inc(&resync->refcnt);434434+ mlx5e_ktls_priv_rx_get(priv_rx);453435 if (unlikely(!queue_work(resync->priv->tls->rx_wq, &resync->work)))454454- refcount_dec(&resync->refcnt);436436+ mlx5e_ktls_priv_rx_put(priv_rx);455437456438 return true;457439}···643625 return err;644626}645627646646-/* Elevated refcount on the resync object means there are647647- * outstanding operations (uncompleted GET_PSV WQEs) that648648- * will read the resync / priv_rx objects once completed.649649- * Wait for them to avoid use-after-free.650650- */651651-static void wait_for_resync(struct net_device *netdev,652652- struct mlx5e_ktls_rx_resync_ctx *resync)653653-{654654-#define MLX5E_KTLS_RX_RESYNC_TIMEOUT 20000 /* msecs */655655- unsigned long exp_time = jiffies + msecs_to_jiffies(MLX5E_KTLS_RX_RESYNC_TIMEOUT);656656- unsigned int refcnt;657657-658658- do {659659- refcnt = refcount_read(&resync->refcnt);660660- if (refcnt == 1)661661- return;662662-663663- msleep(20);664664- } while (time_before(jiffies, exp_time));665665-666666- netdev_warn(netdev,667667- "Failed waiting for kTLS RX resync refcnt to be released (%u).\n",668668- refcnt);669669-}670670-671628void mlx5e_ktls_del_rx(struct net_device *netdev, struct tls_context *tls_ctx)672629{673630 struct mlx5e_ktls_offload_context_rx *priv_rx;···656663 priv_rx = mlx5e_get_ktls_rx_priv_ctx(tls_ctx);657664 set_bit(MLX5E_PRIV_RX_FLAG_DELETING, priv_rx->flags);658665 mlx5e_set_ktls_rx_priv_ctx(tls_ctx, NULL);659659- synchronize_rcu(); /* Sync with NAPI */666666+ synchronize_net(); /* Sync with NAPI */660667 if (!cancel_work_sync(&priv_rx->rule.work))661668 /* completion is needed, as the priv_rx in the add flow662669 * is maintained on the wqe info (wi), not on the socket.···664671 wait_for_completion(&priv_rx->add_ctx);665672 resync = &priv_rx->resync;666673 if (cancel_work_sync(&resync->work))667667- refcount_dec(&resync->refcnt);668668- wait_for_resync(netdev, resync);674674+ mlx5e_ktls_priv_rx_put(priv_rx);669675670676 priv_rx->stats->tls_del++;671677 if (priv_rx->rule.rule)···672680673681 mlx5_core_destroy_tir(mdev, priv_rx->tirn);674682 mlx5_ktls_destroy_key(mdev, priv_rx->key_id);675675- kfree(priv_rx);683683+ /* priv_rx should normally be freed here, but if there is an outstanding684684+ * GET_PSV, deallocation will be delayed until the CQE for GET_PSV is685685+ * processed.686686+ */687687+ mlx5e_ktls_priv_rx_put(priv_rx);676688}
···14451445 dev_err(&pdev->dev, "mlx5_crdump_enable failed with error code %d\n", err);1446144614471447 pci_save_state(pdev);14481448- devlink_reload_enable(devlink);14481448+ if (!mlx5_core_is_mp_slave(dev))14491449+ devlink_reload_enable(devlink);14491450 return 0;1450145114511452err_load_one:
+25
drivers/net/ethernet/realtek/r8169_main.c
···22302230 phy_speed_down(tp->phydev, false);22312231 rtl_wol_enable_rx(tp);22322232 }22332233+22342234+ switch (tp->mac_version) {22352235+ case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26:22362236+ case RTL_GIGA_MAC_VER_29 ... RTL_GIGA_MAC_VER_30:22372237+ case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_33:22382238+ case RTL_GIGA_MAC_VER_37:22392239+ case RTL_GIGA_MAC_VER_39:22402240+ case RTL_GIGA_MAC_VER_43:22412241+ case RTL_GIGA_MAC_VER_44:22422242+ case RTL_GIGA_MAC_VER_45:22432243+ case RTL_GIGA_MAC_VER_46:22442244+ case RTL_GIGA_MAC_VER_47:22452245+ case RTL_GIGA_MAC_VER_48:22462246+ case RTL_GIGA_MAC_VER_50 ... RTL_GIGA_MAC_VER_63:22472247+ RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) & ~0x80);22482248+ break;22492249+ case RTL_GIGA_MAC_VER_40:22502250+ case RTL_GIGA_MAC_VER_41:22512251+ case RTL_GIGA_MAC_VER_49:22522252+ rtl_eri_clear_bits(tp, 0x1a8, 0xfc000000);22532253+ RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) & ~0x80);22542254+ break;22552255+ default:22562256+ break;22572257+ }22332258}2234225922352260static void rtl_init_rxcfg(struct rtl8169_private *tp)
+12-14
drivers/net/ethernet/xilinx/xilinx_axienet_main.c
···18621862 lp->options = XAE_OPTION_DEFAULTS;18631863 lp->rx_bd_num = RX_BD_NUM_DEFAULT;18641864 lp->tx_bd_num = TX_BD_NUM_DEFAULT;18651865+18661866+ lp->clk = devm_clk_get_optional(&pdev->dev, NULL);18671867+ if (IS_ERR(lp->clk)) {18681868+ ret = PTR_ERR(lp->clk);18691869+ goto free_netdev;18701870+ }18711871+ ret = clk_prepare_enable(lp->clk);18721872+ if (ret) {18731873+ dev_err(&pdev->dev, "Unable to enable clock: %d\n", ret);18741874+ goto free_netdev;18751875+ }18761876+18651877 /* Map device registers */18661878 ethres = platform_get_resource(pdev, IORESOURCE_MEM, 0);18671879 lp->regs = devm_ioremap_resource(&pdev->dev, ethres);···2058204620592047 lp->phy_node = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);20602048 if (lp->phy_node) {20612061- lp->clk = devm_clk_get(&pdev->dev, NULL);20622062- if (IS_ERR(lp->clk)) {20632063- dev_warn(&pdev->dev, "Failed to get clock: %ld\n",20642064- PTR_ERR(lp->clk));20652065- lp->clk = NULL;20662066- } else {20672067- ret = clk_prepare_enable(lp->clk);20682068- if (ret) {20692069- dev_err(&pdev->dev, "Unable to enable clock: %d\n",20702070- ret);20712071- goto free_netdev;20722072- }20732073- }20742074-20752049 ret = axienet_mdio_setup(lp);20762050 if (ret)20772051 dev_warn(&pdev->dev,
+2-2
drivers/net/ipa/ipa_main.c
···580580 return -EINVAL;581581582582 for (i = 0; i < data->resource_src_count; i++)583583- ipa_resource_config_src(ipa, data->resource_src);583583+ ipa_resource_config_src(ipa, &data->resource_src[i]);584584585585 for (i = 0; i < data->resource_dst_count; i++)586586- ipa_resource_config_dst(ipa, data->resource_dst);586586+ ipa_resource_config_dst(ipa, &data->resource_dst[i]);587587588588 return 0;589589}
+18-37
drivers/net/phy/phy_device.c
···300300301301 phydev->suspended_by_mdio_bus = 0;302302303303- ret = phy_resume(phydev);303303+ ret = phy_init_hw(phydev);304304 if (ret < 0)305305 return ret;306306307307+ ret = phy_resume(phydev);308308+ if (ret < 0)309309+ return ret;307310no_resume:308311 if (phydev->attached_dev && phydev->adjust_link)309312 phy_start_machine(phydev);···314311 return 0;315312}316313317317-static int mdio_bus_phy_restore(struct device *dev)318318-{319319- struct phy_device *phydev = to_phy_device(dev);320320- struct net_device *netdev = phydev->attached_dev;321321- int ret;322322-323323- if (!netdev)324324- return 0;325325-326326- ret = phy_init_hw(phydev);327327- if (ret < 0)328328- return ret;329329-330330- if (phydev->attached_dev && phydev->adjust_link)331331- phy_start_machine(phydev);332332-333333- return 0;334334-}335335-336336-static const struct dev_pm_ops mdio_bus_phy_pm_ops = {337337- .suspend = mdio_bus_phy_suspend,338338- .resume = mdio_bus_phy_resume,339339- .freeze = mdio_bus_phy_suspend,340340- .thaw = mdio_bus_phy_resume,341341- .restore = mdio_bus_phy_restore,342342-};343343-344344-#define MDIO_BUS_PHY_PM_OPS (&mdio_bus_phy_pm_ops)345345-346346-#else347347-348348-#define MDIO_BUS_PHY_PM_OPS NULL349349-314314+static SIMPLE_DEV_PM_OPS(mdio_bus_phy_pm_ops, mdio_bus_phy_suspend,315315+ mdio_bus_phy_resume);350316#endif /* CONFIG_PM */351317352318/**···526554 .name = "PHY",527555 .groups = phy_dev_groups,528556 .release = phy_device_release,529529- .pm = MDIO_BUS_PHY_PM_OPS,557557+ .pm = pm_ptr(&mdio_bus_phy_pm_ops),530558};531559532560static int phy_request_driver_module(struct phy_device *dev, u32 phy_id)···11161144 if (ret < 0)11171145 return ret;1118114611191119- if (phydev->drv->config_init)11471147+ if (phydev->drv->config_init) {11201148 ret = phydev->drv->config_init(phydev);11491149+ if (ret < 0)11501150+ return ret;11511151+ }1121115211221122- return ret;11531153+ if (phydev->drv->config_intr) {11541154+ ret = phydev->drv->config_intr(phydev);11551155+ if (ret < 0)11561156+ return ret;11571157+ }11581158+11591159+ return 0;11231160}11241161EXPORT_SYMBOL(phy_init_hw);11251162
···508508{509509 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);510510 struct mptcp_sock *msk = mptcp_sk(subflow->conn);511511+ u64 snd_data_fin_enable, ack_seq;511512 unsigned int dss_size = 0;512512- u64 snd_data_fin_enable;513513 struct mptcp_ext *mpext;514514 unsigned int ack_size;515515 bool ret = false;···541541 return ret;542542 }543543544544+ ack_seq = READ_ONCE(msk->ack_seq);544545 if (READ_ONCE(msk->use_64bit_ack)) {545546 ack_size = TCPOLEN_MPTCP_DSS_ACK64;546546- opts->ext_copy.data_ack = READ_ONCE(msk->ack_seq);547547+ opts->ext_copy.data_ack = ack_seq;547548 opts->ext_copy.ack64 = 1;548549 } else {549550 ack_size = TCPOLEN_MPTCP_DSS_ACK32;550550- opts->ext_copy.data_ack32 = (uint32_t)READ_ONCE(msk->ack_seq);551551+ opts->ext_copy.data_ack32 = (uint32_t)ack_seq;551552 opts->ext_copy.ack64 = 0;552553 }553554 opts->ext_copy.use_ack = 1;···919918 msk->wnd_end = new_wnd_end;920919921920 /* this assumes mptcp_incoming_options() is invoked after tcp_ack() */922922- if (after64(msk->wnd_end, READ_ONCE(msk->snd_nxt)) &&923923- sk_stream_memory_free(ssk))921921+ if (after64(msk->wnd_end, READ_ONCE(msk->snd_nxt)))924922 __mptcp_check_push(sk, ssk);925923926924 if (after64(new_snd_una, old_snd_una)) {
+36-19
net/mptcp/protocol.c
···363363364364 /* Look for an acknowledged DATA_FIN */365365 if (mptcp_pending_data_fin_ack(sk)) {366366- mptcp_stop_timer(sk);367367-368366 WRITE_ONCE(msk->snd_data_fin_enable, 0);369367370368 switch (sk->sk_state) {···456458static void mptcp_cleanup_rbuf(struct mptcp_sock *msk)457459{458460 struct sock *ack_hint = READ_ONCE(msk->ack_hint);461461+ int old_space = READ_ONCE(msk->old_wspace);459462 struct mptcp_subflow_context *subflow;463463+ struct sock *sk = (struct sock *)msk;464464+ bool cleanup;465465+466466+ /* this is a simple superset of what tcp_cleanup_rbuf() implements467467+ * so that we don't have to acquire the ssk socket lock most of the time468468+ * to do actually nothing469469+ */470470+ cleanup = __mptcp_space(sk) - old_space >= max(0, old_space);471471+ if (!cleanup)472472+ return;460473461474 /* if the hinted ssk is still active, try to use it */462475 if (likely(ack_hint)) {···15741565 mptcp_set_timeout(sk, ssk);15751566 tcp_push(ssk, 0, info.mss_now, tcp_sk(ssk)->nonagle,15761567 info.size_goal);15681568+ if (!mptcp_timer_pending(sk))15691569+ mptcp_reset_timer(sk);15701570+15771571 if (msk->snd_data_fin_enable &&15781572 msk->snd_nxt + 1 == msk->write_seq)15791573 mptcp_schedule_work(sk);···18801868 skb_queue_splice_tail_init(&sk->sk_receive_queue, &msk->receive_queue);18811869}1882187018831883-static bool __mptcp_move_skbs(struct mptcp_sock *msk, unsigned int rcv)18711871+static bool __mptcp_move_skbs(struct mptcp_sock *msk)18841872{18851873 struct sock *sk = (struct sock *)msk;18861874 unsigned int moved = 0;···1900188819011889 slowpath = lock_sock_fast(ssk);19021890 mptcp_data_lock(sk);18911891+ __mptcp_update_rmem(sk);19031892 done = __mptcp_move_skbs_from_subflow(msk, ssk, &moved);19041893 mptcp_data_unlock(sk);19051905- if (moved && rcv) {19061906- WRITE_ONCE(msk->rmem_pending, min(rcv, moved));19071907- tcp_cleanup_rbuf(ssk, 1);19081908- WRITE_ONCE(msk->rmem_pending, 0);19091909- }18941894+ tcp_cleanup_rbuf(ssk, moved);19101895 unlock_sock_fast(ssk, slowpath);19111896 } while (!done);19121897···19161907 ret |= __mptcp_ofo_queue(msk);19171908 __mptcp_splice_receive_queue(sk);19181909 mptcp_data_unlock(sk);19101910+ mptcp_cleanup_rbuf(msk);19191911 }19201912 if (ret)19211913 mptcp_check_data_fin((struct sock *)msk);···19461936 target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);1947193719481938 while (copied < len) {19491949- int bytes_read, old_space;19391939+ int bytes_read;1950194019511941 bytes_read = __mptcp_recvmsg_mskq(msk, msg, len - copied);19521942 if (unlikely(bytes_read < 0)) {···1957194719581948 copied += bytes_read;1959194919601960- if (skb_queue_empty(&msk->receive_queue) &&19611961- __mptcp_move_skbs(msk, len - copied))19621962- continue;19631963-19641950 /* be sure to advertise window change */19651965- old_space = READ_ONCE(msk->old_wspace);19661966- if ((tcp_space(sk) - old_space) >= old_space)19671967- mptcp_cleanup_rbuf(msk);19511951+ mptcp_cleanup_rbuf(msk);19521952+19531953+ if (skb_queue_empty(&msk->receive_queue) && __mptcp_move_skbs(msk))19541954+ continue;1968195519691956 /* only the master socket status is relevant here. The exit19701957 * conditions mirror closely tcp_recvmsg()···19891982 /* race breaker: the shutdown could be after the19901983 * previous receive queue check19911984 */19921992- if (__mptcp_move_skbs(msk, len - copied))19851985+ if (__mptcp_move_skbs(msk))19931986 continue;19941987 break;19951988 }···20222015 /* .. race-breaker: ssk might have gotten new data20232016 * after last __mptcp_move_skbs() returned false.20242017 */20252025- if (unlikely(__mptcp_move_skbs(msk, 0)))20182018+ if (unlikely(__mptcp_move_skbs(msk)))20262019 set_bit(MPTCP_DATA_READY, &msk->flags);20272020 } else if (unlikely(!test_bit(MPTCP_DATA_READY, &msk->flags))) {20282021 /* data to read but mptcp_wait_data() cleared DATA_READY */···22822275 if (!test_and_clear_bit(MPTCP_WORK_RTX, &msk->flags))22832276 goto unlock;2284227722782278+ __mptcp_clean_una(sk);22852279 dfrag = mptcp_rtx_head(sk);22862280 if (!dfrag)22872281 goto unlock;···29512943 mptcp_push_pending(sk, 0);29522944 spin_lock_bh(&sk->sk_lock.slock);29532945 }29462946+ if (test_and_clear_bit(MPTCP_ERROR_REPORT, &mptcp_sk(sk)->flags))29472947+ __mptcp_error_report(sk);2954294829552949 /* clear any wmem reservation and errors */29562950 __mptcp_update_wmem(sk);···33293319 struct sock *sk = (struct sock *)msk;3330332033313321 if (unlikely(sk->sk_shutdown & SEND_SHUTDOWN))33323332- return 0;33223322+ return EPOLLOUT | EPOLLWRNORM;3333332333343324 if (sk_stream_is_writeable(sk))33353325 return EPOLLOUT | EPOLLWRNORM;···33623352 mask |= mptcp_check_readable(msk);33633353 mask |= mptcp_check_writeable(msk);33643354 }33553355+ if (sk->sk_shutdown == SHUTDOWN_MASK || state == TCP_CLOSE)33563356+ mask |= EPOLLHUP;33653357 if (sk->sk_shutdown & RCV_SHUTDOWN)33663358 mask |= EPOLLIN | EPOLLRDNORM | EPOLLRDHUP;33593359+33603360+ /* This barrier is coupled with smp_wmb() in tcp_reset() */33613361+ smp_rmb();33623362+ if (sk->sk_err)33633363+ mask |= EPOLLERR;3367336433683365 return mask;33693366}