Linux 5.10.90
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.90 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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 | 2 Documentation/admin-guide/sysctl/kernel.rst | 17 ++ Makefile | 2 arch/parisc/kernel/traps.c | 2 drivers/android/binder_alloc.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 76 +++++++---- drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 7 + drivers/gpu/drm/amd/include/discovery.h | 49 +++++++ drivers/i2c/i2c-dev.c | 3 drivers/input/joystick/spaceball.c | 11 + drivers/input/mouse/appletouch.c | 4 drivers/input/serio/i8042-x86ia64io.h | 21 +++ drivers/input/serio/i8042.c | 54 +++++-- drivers/net/ethernet/atheros/ag71xx.c | 23 +-- drivers/net/ethernet/freescale/fman/fman_port.c | 12 + drivers/net/ethernet/intel/igc/igc_main.c | 6 drivers/net/ethernet/lantiq_xrx200.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en.h | 3 drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c | 10 + drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 41 +++-- drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c | 5 drivers/net/ethernet/pensando/ionic/ionic_lif.c | 2 drivers/net/usb/pegasus.c | 4 drivers/nfc/st21nfca/i2c.c | 29 ++-- drivers/platform/x86/apple-gmux.c | 2 drivers/scsi/lpfc/lpfc_debugfs.c | 4 drivers/scsi/vmw_pvscsi.c | 7 - drivers/usb/gadget/function/f_fs.c | 9 - drivers/usb/host/xhci-pci.c | 5 drivers/usb/mtu3/mtu3_gadget.c | 8 + drivers/usb/mtu3/mtu3_qmu.c | 7 - include/linux/memblock.h | 4 include/net/sctp/sctp.h | 6 include/net/sctp/structs.h | 3 include/uapi/linux/nfc.h | 6 init/Kconfig | 10 + kernel/bpf/syscall.c | 3 kernel/sysctl.c | 29 +++- net/ipv4/af_inet.c | 10 - net/ipv6/udp.c | 2 net/ncsi/ncsi-netlink.c | 6 net/sctp/diag.c | 12 - net/sctp/endpointola.c | 23 ++- net/sctp/socket.c | 23 ++- net/smc/smc.h | 5 net/smc/smc_cdc.c | 59 ++++---- net/smc/smc_cdc.h | 2 net/smc/smc_core.c | 47 ++++-- net/smc/smc_core.h | 6 net/smc/smc_ib.c | 4 net/smc/smc_ib.h | 1 net/smc/smc_llc.c | 65 +++++++-- net/smc/smc_tx.c | 22 --- net/smc/smc_wr.c | 51 +------ net/smc/smc_wr.h | 17 ++ scripts/recordmcount.pl | 2 security/selinux/hooks.c | 2 security/tomoyo/util.c | 31 ++-- tools/perf/builtin-script.c | 2 tools/testing/selftests/net/udpgso.c | 12 - tools/testing/selftests/net/udpgso_bench_tx.c | 8 + 61 files changed, 594 insertions(+), 308 deletions(-)
Adrian Hunter (1):
perf script: Fix CPU filtering of a script's switch events
Aleksander Jan Bajkowski (1):
net: lantiq_xrx200: fix statistics of received bytes
Alex Deucher (1):
drm/amdgpu: add support for IP discovery gc_info table v2
Alexey Makhalov (1):
scsi: vmw_pvscsi: Set residual data length conditionally
Amir Tzin (1):
net/mlx5e: Wrap the tx reporter dump callback to extract the sq
Christophe JAILLET (2):
net: ag71xx: Fix a potential double free in error handling paths
ionic: Initialize the 'lif->dbid_inuse' bitmap
Chunfeng Yun (3):
usb: mtu3: add memory barrier before set GPD's HWO
usb: mtu3: fix list_head check warning
usb: mtu3: set interval of FS intr and isoc endpoint
Coco Li (2):
udp: using datalen to cap ipv6 udp max gso segments
selftests: Calculate udpgso segment count without header adjustment
Dan Carpenter (1):
scsi: lpfc: Terminate string in lpfc_debugfs_nvmeio_trc_write()
Daniel Borkmann (1):
bpf: Add kconfig knob for disabling unpriv bpf by default
Dmitry V. Levin (1):
uapi: fix linux/nfc.h userspace compilation errors
Dmitry Vyukov (1):
tomoyo: Check exceeded quota early in tomoyo_domain_quota_is_ok().
Dust Li (2):
net/smc: don't send CDC/LLC message if link not ready net/smc: fix kernel panic caused by race of smc_sock
Gal Pressman (1):
net/mlx5e: Fix wrong features assignment in case of error
Greg Kroah-Hartman (1):
Linux 5.10.90
Heiko Carstens (1):
recordmcount.pl: fix typo in s390 mcount regex
Helge Deller (1):
parisc: Clear stale IIR value on instruction access rights trap
Jackie Liu (1):
memblock: fix memblock_phys_alloc() section mismatch error
James McLaughlin (1):
igc: Fix TX timestamp support for non-MSI-X platforms
Jiasheng Jiang (1):
net/ncsi: check for error return from call to nla_put_u32
Karsten Graul (2):
net/smc: fix using of uninitialized completions net/smc: improved fix wait on already cleared link
Krzysztof Kozlowski (1):
nfc: uapi: use kernel size_t to fix user-space builds
Leo L. Schwab (1):
Input: spaceball - fix parsing of movement data packets
Mathias Nyman (1):
xhci: Fresco FL1100 controller should not have BROKEN_MSI quirk set.
Matthias-Christian Ott (1):
net: usb: pegasus: Do not drop long Ethernet frames
Maxim Mikityanskiy (1):
net/mlx5e: Fix ICOSQ recovery flow for XSK
Miaoqian Lin (2):
net/mlx5: DR, Fix NULL vs IS_ERR checking in dr_domain_init_resources fsl/fman: Fix missing put_device() call in fman_port_probe
Muchun Song (1):
net: fix use-after-free in tw_timer_handler
Pavel Skripkin (2):
i2c: validate user data in compat ioctl
Input: appletouch - initialize work before device registration
Samuel Čavoj (1):
Input: i8042 - enable deferred probe quirk for ASUS UM325UA
Takashi Iwai (1):
Input: i8042 - add deferred probe support
Tetsuo Handa (1):
tomoyo: use hwight16() in tomoyo_domain_quota_is_ok()
Todd Kjos (1):
binder: fix async_free_space accounting for empty parcels
Tom Rix (1):
selinux: initialize proto variable in selinux_ip_postroute_compat()
Vincent Pelletier (1):
usb: gadget: f_fs: Clear ffs_eventfd in ffs_data_clear.
Wang Qing (1):
platform/x86: apple-gmux: use resource_size() with res
Wei Yongjun (1):
NFC: st21nfca: Fix memory leak in device probe and remove
Xin Long (1):
sctp: use call_rcu to free endpoint
chen gong (1):
drm/amdgpu: When the VCN(1.0) block is suspended, powergating is explicitly enabled
wujianguo (1):
selftests/net: udpgso_bench_tx: fix dst ip argument
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +2 -0
@@ -1617,6 +1617,8 @@ architectures force reset to be always executed i8042.unlock [HW] Unlock (ignore) the keylock i8042.kbdreset [HW] Reset device connected to KBD port + i8042.probe_defer + [HW] Allow deferred probing upon i8042 probe errors i810= [HW,DRM]
Documentation/admin-guide/sysctl/kernel.rst +14 -3
@@ -1457,11 +1457,22 @@ unprivileged_bpf_disabled ========================= Writing 1 to this entry will disable unprivileged calls to ``bpf()``; -once disabled, calling ``bpf()`` without ``CAP_SYS_ADMIN`` will return -``-EPERM``. +once disabled, calling ``bpf()`` without ``CAP_SYS_ADMIN`` or ``CAP_BPF`` +will return ``-EPERM``. Once set to 1, this can't be cleared from the +running kernel anymore. -Once set, this can't be cleared. +Writing 2 to this entry will also disable unprivileged calls to ``bpf()``, +however, an admin can still change this setting later on, if needed, by +writing 0 or 1 to this entry. +If ``BPF_UNPRIV_DEFAULT_OFF`` is enabled in the kernel config, then this +entry will default to 2 instead of 0. + += ============================================================= +0 Unprivileged calls to ``bpf()`` are enabled +1 Unprivileged calls to ``bpf()`` are disabled without recovery +2 Unprivileged calls to ``bpf()`` are disabled += ============================================================= watchdog ========
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 89 +SUBLEVEL = 90 EXTRAVERSION = NAME = Dare mighty things
arch/parisc/kernel/traps.c +2 -0
@@ -729,6 +729,8 @@ void notrace handle_interruption(int code, struct pt_regs *regs) }mmap_read_unlock (current->mm); } +/* CPU could not fetch instruction, so clear stale IIR value. */ + regs->iir =0xbaadf00d ; fallthrough;case 27 :/* Data memory protection ID trap */
drivers/android/binder_alloc.c +1 -1
@@ -662,7 +662,7 @@ static void binder_free_buf_locked(struct binder_alloc *alloc,BUG_ON (buffer->user_data > alloc->buffer + alloc->buffer_size);if (buffer->async_transaction) { - alloc->free_async_space += size +sizeof (struct binder_buffer ); + alloc->free_async_space += buffer_size +sizeof (struct binder_buffer ); binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC_ASYNC, "%d: binder_free_buf size %zd async free %zd\n",
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c +54 -22
91 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +7 -0
@@ -254,6 +254,13 @@ static int vcn_v1_0_suspend(void *handle) {int r;struct amdgpu_device *adev = (struct amdgpu_device *)handle; +bool idle_work_unexecuted; + + idle_work_unexecuted =cancel_delayed_work_sync (&adev->vcn.idle_work); +if (idle_work_unexecuted) { +if (adev->pm.dpm_enabled) +amdgpu_dpm_enable_uvd (adev, false); + } r =vcn_v1_0_hw_fini (adev);if (r)
drivers/gpu/drm/amd/include/discovery.h +49 -0
55 lines not on this page · raw message
drivers/i2c/i2c-dev.c +3 -0
@@ -536,6 +536,9 @@ static long compat_i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned lo sizeof(rdwr_arg)))return -EFAULT ; +if (!rdwr_arg.msgs || rdwr_arg.nmsgs ==0 ) +return -EINVAL ; +if (rdwr_arg.nmsgs >I2C_RDWR_IOCTL_MAX_MSGS )return -EINVAL ;
drivers/input/joystick/spaceball.c +9 -2
@@ -19,6 +19,7 @@#include <linux/module.h> #include <linux/input.h> #include <linux/serio.h> +#include <asm/unaligned.h> #define DRIVER_DESC "SpaceTec SpaceBall 2003/3003/4000 FLX driver"
@@ -75,9 +76,15 @@ static void spaceball_process_packet(struct spaceball* spaceball)case 'D' :/* Ball data */ if (spaceball->idx !=15 )return ; -for (i =0 ; i <6 ; i++) +/* +* Skip first three bytes; read six axes worth of data. +* Axis values are signed 16-bit big-endian. +*/ + data +=3 ; +for (i =0 ; i <ARRAY_SIZE (spaceball_axes); i++) {input_report_abs (dev, spaceball_axes[i], - (__s16)((data[2 * i +3 ] <<8 ) | data[2 * i +2 ])); + (__s16 )get_unaligned_be16 (&data[i *2 ])); + }break ;case 'K' :/* Button data */
drivers/input/mouse/appletouch.c +2 -2
@@ -916,6 +916,8 @@ static int atp_probe(struct usb_interface *iface,set_bit (BTN_TOOL_TRIPLETAP , input_dev->keybit);set_bit (BTN_LEFT , input_dev->keybit); +INIT_WORK (&dev->work, atp_reinit); + error =input_register_device (dev->input);if (error) goto err_free_buffer;
@@ -923,8 +925,6 @@ static int atp_probe(struct usb_interface *iface,/* save our data pointer in this interface device */ usb_set_intfdata (iface, dev); -INIT_WORK (&dev->work, atp_reinit); -return 0 ; err_free_buffer:
drivers/input/serio/i8042-x86ia64io.h +21 -0
@@ -995,6 +995,24 @@ static const struct dmi_system_id __initconst i8042_dmi_kbdreset_table[] = { { } }; +static const struct dmi_system_id i8042_dmi_probe_defer_table[]__initconst = { + { +/* ASUS ZenBook UX425UA */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), +DMI_MATCH (DMI_PRODUCT_NAME ,"ZenBook UX425UA" ), + }, + }, + { +/* ASUS ZenBook UM325UA */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), +DMI_MATCH (DMI_PRODUCT_NAME ,"ZenBook UX325UA_UM325UA" ), + }, + }, + { } +}; +#endif /* CONFIG_X86 */ #ifdef CONFIG_PNP
@@ -1315,6 +1333,9 @@ static int __init i8042_platform_init(void)if (dmi_check_system (i8042_dmi_kbdreset_table)) i8042_kbdreset = true; +if (dmi_check_system (i8042_dmi_probe_defer_table)) + i8042_probe_defer = true; +/* * A20 was already enabled during early kernel init. But some buggy * BIOSes (in MSI Laptops) require A20 to be enabled using 8042 to
drivers/input/serio/i8042.c +35 -19
164 lines not on this page · raw message
drivers/net/ethernet/atheros/ag71xx.c +8 -15
@@ -1904,15 +1904,12 @@ static int ag71xx_probe(struct platform_device *pdev) ag->mac_reset =devm_reset_control_get (&pdev->dev,"mac" );if (IS_ERR (ag->mac_reset)) {netif_err (ag, probe, ndev,"missing mac reset\n" ); - err =PTR_ERR (ag->mac_reset); - goto err_free; +return PTR_ERR (ag->mac_reset); } ag->mac_base =devm_ioremap (&pdev->dev, res->start,resource_size (res)); -if (!ag->mac_base) { - err = -ENOMEM ; - goto err_free; - } +if (!ag->mac_base) +return -ENOMEM ; ndev->irq =platform_get_irq (pdev,0 ); err = devm_request_irq(&pdev->dev, ndev->irq, ag71xx_interrupt,
@@ -1920,7 +1917,7 @@ static int ag71xx_probe(struct platform_device *pdev)if (err) {netif_err (ag, probe, ndev,"unable to request IRQ %d\n" , ndev->irq); - goto err_free; +return err; } ndev->netdev_ops = &ag71xx_netdev_ops;
@@ -1948,10 +1945,8 @@ static int ag71xx_probe(struct platform_device *pdev) ag->stop_desc =dmam_alloc_coherent (&pdev->dev,sizeof (struct ag71xx_desc ), &ag->stop_desc_dma,GFP_KERNEL ); -if (!ag->stop_desc) { - err = -ENOMEM ; - goto err_free; - } +if (!ag->stop_desc) +return -ENOMEM ; ag->stop_desc->data =0 ; ag->stop_desc->ctrl =0 ;
@@ -1968,7 +1963,7 @@ static int ag71xx_probe(struct platform_device *pdev) err =of_get_phy_mode (np, &ag->phy_if_mode);if (err) {netif_err (ag, probe, ndev,"missing phy-mode property in DT\n" ); - goto err_free; +return err; }netif_napi_add (ndev, &ag->napi, ag71xx_poll,AG71XX_NAPI_WEIGHT );
@@ -1976,7 +1971,7 @@ static int ag71xx_probe(struct platform_device *pdev) err =clk_prepare_enable (ag->clk_eth);if (err) {netif_err (ag, probe, ndev,"Failed to enable eth clk.\n" ); - goto err_free; +return err; }ag71xx_wr (ag,AG71XX_REG_MAC_CFG1 ,0 );
@@ -2012,8 +2007,6 @@ static int ag71xx_probe(struct platform_device *pdev)ag71xx_mdio_remove (ag); err_put_clk:clk_disable_unprepare (ag->clk_eth); -err_free: -free_netdev (ndev);return err; }
drivers/net/ethernet/freescale/fman/fman_port.c +7 -5
@@ -1805,7 +1805,7 @@ static int fman_port_probe(struct platform_device *of_dev) fman =dev_get_drvdata (&fm_pdev->dev);if (!fman) { err = -EINVAL ; - goto return_err; + goto put_device; } err =of_property_read_u32 (port_node,"cell-index" , &val);
@@ -1813,7 +1813,7 @@ static int fman_port_probe(struct platform_device *of_dev)dev_err (port->dev,"%s: reading cell-index for %pOF failed\n" , __func__, port_node); err = -EINVAL ; - goto return_err; + goto put_device; } port_id = (u8 )val; port->dts_params.id = port_id;
@@ -1847,7 +1847,7 @@ static int fman_port_probe(struct platform_device *of_dev) }else {dev_err (port->dev,"%s: Illegal port type\n" , __func__); err = -EINVAL ; - goto return_err; + goto put_device; } port->dts_params.type = port_type;
@@ -1861,7 +1861,7 @@ static int fman_port_probe(struct platform_device *of_dev)dev_err (port->dev,"%s: incorrect qman-channel-id\n" , __func__); err = -EINVAL ; - goto return_err; + goto put_device; } port->dts_params.qman_channel_id = qman_channel_id; }
@@ -1871,7 +1871,7 @@ static int fman_port_probe(struct platform_device *of_dev)dev_err (port->dev,"%s: of_address_to_resource() failed\n" , __func__); err = -ENOMEM ; - goto return_err; + goto put_device; } port->dts_params.fman = fman;
@@ -1896,6 +1896,8 @@ static int fman_port_probe(struct platform_device *of_dev)return 0 ; +put_device: +put_device (&fm_pdev->dev); return_err:of_node_put (port_node); free_port:
drivers/net/ethernet/intel/igc/igc_main.c +6 -0
@@ -4422,6 +4422,9 @@ static irqreturn_t igc_intr_msi(int irq, void *data)mod_timer (&adapter->watchdog_timer, jiffies +1 ); } +if (icr &IGC_ICR_TS ) +igc_tsync_interrupt (adapter); +napi_schedule (&q_vector->napi);return IRQ_HANDLED ;
@@ -4465,6 +4468,9 @@ static irqreturn_t igc_intr(int irq, void *data)mod_timer (&adapter->watchdog_timer, jiffies +1 ); } +if (icr &IGC_ICR_TS ) +igc_tsync_interrupt (adapter); +napi_schedule (&q_vector->napi);return IRQ_HANDLED ;
drivers/net/ethernet/lantiq_xrx200.c +1 -1
@@ -209,7 +209,7 @@ static int xrx200_hw_receive(struct xrx200_chan *ch) skb->protocol =eth_type_trans (skb, net_dev);netif_receive_skb (skb); net_dev->stats.rx_packets++; - net_dev->stats.rx_bytes += len -ETH_FCS_LEN ; + net_dev->stats.rx_bytes += len;return 0 ; }
drivers/net/ethernet/mellanox/mlx5/core/en.h +0 -3
@@ -916,9 +916,6 @@ void mlx5e_deactivate_rq(struct mlx5e_rq *rq);void mlx5e_close_rq (struct mlx5e_rq *rq);struct mlx5e_sq_param ; -int mlx5e_open_icosq (struct mlx5e_channel *c,struct mlx5e_params *params, -struct mlx5e_sq_param *param,struct mlx5e_icosq *sq); -void mlx5e_close_icosq (struct mlx5e_icosq *sq);int mlx5e_open_xdpsq (struct mlx5e_channel *c,struct mlx5e_params *params,struct mlx5e_sq_param *param,struct xsk_buff_pool *xsk_pool,struct mlx5e_xdpsq *sq,bool is_redirect);
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c +9 -1
@@ -335,6 +335,14 @@ static int mlx5e_tx_reporter_dump_sq(struct mlx5e_priv *priv, struct devlink_fmsreturn mlx5e_health_fmsg_named_obj_nest_end (fmsg); } +static int mlx5e_tx_reporter_timeout_dump (struct mlx5e_priv *priv,struct devlink_fmsg *fmsg, +void *ctx) +{ +struct mlx5e_tx_timeout_ctx *to_ctx = ctx; + +return mlx5e_tx_reporter_dump_sq (priv, fmsg, to_ctx->sq); +} +static int mlx5e_tx_reporter_dump_all_sqs (struct mlx5e_priv *priv,struct devlink_fmsg *fmsg) {
@@ -418,7 +426,7 @@ int mlx5e_reporter_tx_timeout(struct mlx5e_txqsq *sq) to_ctx.sq = sq; err_ctx.ctx = &to_ctx; err_ctx.recover = mlx5e_tx_reporter_timeout_recover; - err_ctx.dump = mlx5e_tx_reporter_dump_sq; + err_ctx.dump = mlx5e_tx_reporter_timeout_dump; snprintf(err_str, sizeof(err_str), "TX timeout on queue: %d, SQ: 0x%x, CQ: 0x%x, SQ Cons: 0x%x SQ Prod: 0x%x, usecs since last trans: %u", sq->channel->ix, sq->sqn, sq->cq.mcq.cqn, sq->cc, sq->pc,
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +27 -14
108 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c +3 -2
@@ -2,6 +2,7 @@/* Copyright (c) 2019 Mellanox Technologies. */ #include <linux/mlx5/eswitch.h> +#include <linux/err.h> #include "dr_types.h" #define DR_DOMAIN_SW_STEERING_SUPPORTED (dmn, dmn_type) \
@@ -69,9 +70,9 @@ static int dr_domain_init_resources(struct mlx5dr_domain *dmn) } dmn->uar =mlx5_get_uars_page (dmn->mdev); -if (!dmn->uar) { +if (IS_ERR (dmn->uar)) {mlx5dr_err (dmn,"Couldn't allocate UAR\n" ); - ret = -ENOMEM ; + ret =PTR_ERR (dmn->uar); goto clean_pd; }
drivers/net/ethernet/pensando/ionic/ionic_lif.c +1 -1
@@ -2836,7 +2836,7 @@ int ionic_lif_init(struct ionic_lif *lif)return -EINVAL ; } - lif->dbid_inuse =bitmap_alloc (lif->dbid_count,GFP_KERNEL ); + lif->dbid_inuse =bitmap_zalloc (lif->dbid_count,GFP_KERNEL );if (!lif->dbid_inuse) {dev_err (dev,"Failed alloc doorbell id bitmap, aborting\n" );return -ENOMEM ;
drivers/net/usb/pegasus.c +2 -2
@@ -518,11 +518,11 @@ static void read_bulk_callback(struct urb *urb) goto goon; rx_status = buf[count -2 ]; -if (rx_status &0x1e ) { +if (rx_status &0x1c ) {netif_dbg (pegasus, rx_err, net,"RX packet error %x\n" , rx_status); net->stats.rx_errors++; -if (rx_status &0x06 )/* long or runt */ +if (rx_status &0x04 )/* runt */ net->stats.rx_length_errors++;if (rx_status &0x08 ) net->stats.rx_crc_errors++;
drivers/nfc/st21nfca/i2c.c +20 -9
@@ -533,7 +533,8 @@ static int st21nfca_hci_i2c_probe(struct i2c_client *client, phy->gpiod_ena =devm_gpiod_get (dev,"enable" ,GPIOD_OUT_LOW );if (IS_ERR (phy->gpiod_ena)) {nfc_err (dev,"Unable to get ENABLE GPIO\n" ); -return PTR_ERR (phy->gpiod_ena); + r =PTR_ERR (phy->gpiod_ena); + goto out_free; } phy->se_status.is_ese_present =
@@ -544,7 +545,7 @@ static int st21nfca_hci_i2c_probe(struct i2c_client *client, r =st21nfca_hci_platform_init (phy);if (r <0 ) {nfc_err (&client->dev,"Unable to reboot st21nfca\n" ); -return r; + goto out_free; } r = devm_request_threaded_irq(&client->dev, client->irq, NULL,
@@ -553,15 +554,23 @@ static int st21nfca_hci_i2c_probe(struct i2c_client *client, ST21NFCA_HCI_DRIVER_NAME, phy);if (r <0 ) {nfc_err (&client->dev,"Unable to register IRQ handler\n" ); -return r; + goto out_free; } -return st21nfca_hci_probe (phy, &i2c_phy_ops,LLC_SHDLC_NAME , -ST21NFCA_FRAME_HEADROOM , -ST21NFCA_FRAME_TAILROOM , -ST21NFCA_HCI_LLC_MAX_PAYLOAD , - &phy->hdev, - &phy->se_status); + r =st21nfca_hci_probe (phy, &i2c_phy_ops,LLC_SHDLC_NAME , +ST21NFCA_FRAME_HEADROOM , +ST21NFCA_FRAME_TAILROOM , +ST21NFCA_HCI_LLC_MAX_PAYLOAD , + &phy->hdev, + &phy->se_status); +if (r) + goto out_free; + +return 0 ; + +out_free: +kfree_skb (phy->pending_skb); +return r; }static int st21nfca_hci_i2c_remove (struct i2c_client *client)
@@ -574,6 +583,8 @@ static int st21nfca_hci_i2c_remove(struct i2c_client *client)if (phy->powered)st21nfca_hci_i2c_disable (phy); +if (phy->pending_skb) +kfree_skb (phy->pending_skb);return 0 ; }
drivers/platform/x86/apple-gmux.c +1 -1
@@ -625,7 +625,7 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id) } gmux_data->iostart = res->start; - gmux_data->iolen = res->end - res->start; + gmux_data->iolen =resource_size (res);if (gmux_data->iolen <GMUX_MIN_IO_LEN ) { pr_err("gmux I/O region too small (%lu < %u)\n",
drivers/scsi/lpfc/lpfc_debugfs.c +2 -2
@@ -2956,8 +2956,8 @@ lpfc_debugfs_nvmeio_trc_write(struct file *file, const char __user *buf,char mybuf[64 ];char *pbuf; -if (nbytes >64 ) - nbytes =64 ; +if (nbytes >63 ) + nbytes =63 ;memset (mybuf,0 ,sizeof (mybuf));
drivers/scsi/vmw_pvscsi.c +5 -2
@@ -591,9 +591,12 @@ static void pvscsi_complete_request(struct pvscsi_adapter *adapter,* Commands like INQUIRY may transfer less data than * requested by the initiator via bufflen. Set residual * count to make upper layer aware of the actual amount -* of data returned. +* of data returned. There are cases when controller +* returns zero dataLen with non zero data - do not set +* residual count in that case. */ -scsi_set_resid (cmd,scsi_bufflen (cmd) - e->dataLen); +if (e->dataLen && (e->dataLen <scsi_bufflen (cmd))) +scsi_set_resid (cmd,scsi_bufflen (cmd) - e->dataLen); cmd->result = (DID_OK <<16 );break ;
drivers/usb/gadget/function/f_fs.c +6 -3
@@ -1772,11 +1772,15 @@ static void ffs_data_clear(struct ffs_data *ffs)BUG_ON (ffs->gadget); -if (ffs->epfiles) +if (ffs->epfiles) {ffs_epfiles_destroy (ffs->epfiles, ffs->eps_count); + ffs->epfiles =NULL ; + } -if (ffs->ffs_eventfd) +if (ffs->ffs_eventfd) {eventfd_ctx_put (ffs->ffs_eventfd); + ffs->ffs_eventfd =NULL ; + }kfree (ffs->raw_descs_data);kfree (ffs->raw_strings);
@@ -1789,7 +1793,6 @@ static void ffs_data_reset(struct ffs_data *ffs)ffs_data_clear (ffs); - ffs->epfiles =NULL ; ffs->raw_descs_data =NULL ; ffs->raw_descs =NULL ; ffs->raw_strings =NULL ;
drivers/usb/host/xhci-pci.c +4 -1
@@ -122,7 +122,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)/* Look for vendor-specific quirks */ if (pdev->vendor ==PCI_VENDOR_ID_FRESCO_LOGIC && (pdev->device ==PCI_DEVICE_ID_FRESCO_LOGIC_PDK || - pdev->device ==PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 || pdev->device ==PCI_DEVICE_ID_FRESCO_LOGIC_FL1400 )) {if (pdev->device ==PCI_DEVICE_ID_FRESCO_LOGIC_PDK && pdev->revision ==0x0 ) {
@@ -157,6 +156,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1009) xhci->quirks |= XHCI_BROKEN_STREAMS; +if (pdev->vendor ==PCI_VENDOR_ID_FRESCO_LOGIC && + pdev->device ==PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 ) + xhci->quirks |=XHCI_TRUST_TX_LENGTH ; +if (pdev->vendor ==PCI_VENDOR_ID_NEC ) xhci->quirks |=XHCI_NEC_HOST ;
drivers/usb/mtu3/mtu3_gadget.c +8 -0
@@ -92,6 +92,13 @@ static int mtu3_ep_enable(struct mtu3_ep *mep) interval =clamp_val (interval,1 ,16 ) -1 ; mult =usb_endpoint_maxp_mult (desc) -1 ; } +break ; +case USB_SPEED_FULL : +if (usb_endpoint_xfer_isoc (desc)) + interval =clamp_val (desc->bInterval,1 ,16 ); +else if (usb_endpoint_xfer_int (desc)) + interval =clamp_val (desc->bInterval,1 ,255 ); +break ;default :break ;/*others are ignored */
@@ -235,6 +242,7 @@ struct usb_request *mtu3_alloc_request(struct usb_ep *ep, gfp_t gfp_flags) mreq->request.dma =DMA_ADDR_INVALID ; mreq->epnum = mep->epnum; mreq->mep = mep; +INIT_LIST_HEAD (&mreq->list);trace_mtu3_alloc_request (mreq);return &mreq->request;
drivers/usb/mtu3/mtu3_qmu.c +6 -1
@@ -273,6 +273,8 @@ static int mtu3_prepare_tx_gpd(struct mtu3_ep *mep, struct mtu3_request *mreq) gpd->dw3_info |=cpu_to_le32 (GPD_EXT_FLAG_ZLP ); } +/* prevent reorder, make sure GPD's HWO is set last */ +mb (); gpd->dw0_info |=cpu_to_le32 (GPD_FLAGS_IOC |GPD_FLAGS_HWO ); mreq->gpd = gpd;
@@ -306,6 +308,8 @@ static int mtu3_prepare_rx_gpd(struct mtu3_ep *mep, struct mtu3_request *mreq) gpd->next_gpd =cpu_to_le32 (lower_32_bits (enq_dma)); ext_addr |=GPD_EXT_NGP (mtu,upper_32_bits (enq_dma)); gpd->dw3_info =cpu_to_le32 (ext_addr); +/* prevent reorder, make sure GPD's HWO is set last */ +mb (); gpd->dw0_info |=cpu_to_le32 (GPD_FLAGS_IOC |GPD_FLAGS_HWO ); mreq->gpd = gpd;
@@ -445,7 +449,8 @@ static void qmu_tx_zlp_error_handler(struct mtu3 *mtu, u8 epnum)return ; }mtu3_setbits (mbase,MU3D_EP_TXCR0 (mep->epnum),TX_TXPKTRDY ); - +/* prevent reorder, make sure GPD's HWO is set last */ +mb ();/* by pass the current GDP */ gpd_current->dw0_info |=cpu_to_le32 (GPD_FLAGS_BPS |GPD_FLAGS_HWO );
include/linux/memblock.h +2 -2
@@ -387,8 +387,8 @@ phys_addr_t memblock_alloc_range_nid(phys_addr_t size, phys_addr_t end, int nid, bool exact_nid);phys_addr_t memblock_phys_alloc_try_nid (phys_addr_t size,phys_addr_t align,int nid); -static inline phys_addr_t memblock_phys_alloc (phys_addr_t size, -phys_addr_t align) +static __always_inline phys_addr_t memblock_phys_alloc(phys_addr_t size, +phys_addr_t align) {return memblock_phys_alloc_range (size, align,0 ,MEMBLOCK_ALLOC_ACCESSIBLE );
include/net/sctp/sctp.h +3 -3
@@ -103,6 +103,7 @@ extern struct percpu_counter sctp_sockets_allocated;int sctp_asconf_mgmt (struct sctp_sock *,struct sctp_sockaddr_entry *);struct sk_buff *sctp_skb_recv_datagram (struct sock *,int ,int ,int *); +typedef int (*sctp_callback_t )(struct sctp_endpoint *,struct sctp_transport *,void *);void sctp_transport_walk_start (struct rhashtable_iter *iter);void sctp_transport_walk_stop (struct rhashtable_iter *iter); struct sctp_transport *sctp_transport_get_next(struct net *net,
@@ -113,9 +114,8 @@ int sctp_transport_lookup_process(int (*cb)(struct sctp_transport *, void *),struct net *net, const union sctp_addr *laddr, const union sctp_addr *paddr, void *p); -int sctp_for_each_transport (int (*cb)(struct sctp_transport *,void *), -int (*cb_done)(struct sctp_transport *,void *), -struct net *net,int *pos,void *p); +int sctp_transport_traverse_process (sctp_callback_t cb,sctp_callback_t cb_done, +struct net *net,int *pos,void *p);int sctp_for_each_endpoint (int (*cb)(struct sctp_endpoint *,void *),void *p);int sctp_get_sctp_info (struct sock *sk,struct sctp_association *asoc,struct sctp_info *info);
include/net/sctp/structs.h +2 -1
@@ -1339,6 +1339,7 @@ struct sctp_endpoint {u32 secid;u32 peer_secid; +struct rcu_head rcu; };/* Recover the outter endpoint structure. */
@@ -1354,7 +1355,7 @@ static inline struct sctp_endpoint *sctp_ep(struct sctp_ep_common *base)struct sctp_endpoint *sctp_endpoint_new (struct sock *,gfp_t );void sctp_endpoint_free (struct sctp_endpoint *);void sctp_endpoint_put (struct sctp_endpoint *); -void sctp_endpoint_hold (struct sctp_endpoint *); +int sctp_endpoint_hold (struct sctp_endpoint *ep);void sctp_endpoint_add_asoc (struct sctp_endpoint *,struct sctp_association *); struct sctp_association *sctp_endpoint_lookup_assoc( const struct sctp_endpoint *ep,
include/uapi/linux/nfc.h +3 -3
@@ -263,7 +263,7 @@ enum nfc_sdp_attr {#define NFC_SE_ENABLED 0x1struct sockaddr_nfc { -sa_family_t sa_family; +__kernel_sa_family_t sa_family;__u32 dev_idx;__u32 target_idx;__u32 nfc_protocol;
@@ -271,14 +271,14 @@ struct sockaddr_nfc {#define NFC_LLCP_MAX_SERVICE_NAME 63struct sockaddr_nfc_llcp { -sa_family_t sa_family; +__kernel_sa_family_t sa_family;__u32 dev_idx;__u32 target_idx;__u32 nfc_protocol;__u8 dsap;/* Destination SAP, if known */ __u8 ssap;/* Source SAP to be bound to */ char service_name[NFC_LLCP_MAX_SERVICE_NAME]; /* Service name URI */; -size_t service_name_len; +__kernel_size_t service_name_len; };/* NFC socket protocols */
init/Kconfig +10 -0
@@ -1722,6 +1722,16 @@ config BPF_JIT_DEFAULT_ON def_bool ARCH_WANT_DEFAULT_BPF_JIT || BPF_JIT_ALWAYS_ON depends on HAVE_EBPF_JIT && BPF_JIT +config BPF_UNPRIV_DEFAULT_OFF + bool "Disable unprivileged BPF by default" + depends on BPF_SYSCALL + help + Disables unprivileged BPF by default by setting the corresponding + /proc/sys/kernel/unprivileged_bpf_disabled knob to 2. An admin can + still reenable it by setting it to 0 later on, or permanently + disable it by setting it to 1 (from which no other transition to + 0 is possible anymore). + source "kernel/bpf/preload/Kconfig" config USERFAULTFD
kernel/bpf/syscall.c +2 -1
@@ -50,7 +50,8 @@ static DEFINE_SPINLOCK(map_idr_lock);static DEFINE_IDR (link_idr);static DEFINE_SPINLOCK (link_idr_lock); -int sysctl_unprivileged_bpf_disabled__read_mostly ; +int sysctl_unprivileged_bpf_disabled__read_mostly = +IS_BUILTIN (CONFIG_BPF_UNPRIV_DEFAULT_OFF ) ?2 :0 ;static const struct bpf_map_ops *const bpf_map_types[] = { #define BPF_PROG_TYPE(_id, _name, prog_ctx_type, kern_ctx_type)
kernel/sysctl.c +24 -5
@@ -233,7 +233,27 @@ static int bpf_stats_handler(struct ctl_table *table, int write,mutex_unlock (&bpf_stats_enabled_mutex);return ret; } -#endif + +static int bpf_unpriv_handler (struct ctl_table *table,int write, +void *buffer,size_t *lenp,loff_t *ppos) +{ +int ret, unpriv_enable = *(int *)table->data; +bool locked_state = unpriv_enable ==1 ; +struct ctl_table tmp = *table; + +if (write && !capable (CAP_SYS_ADMIN )) +return -EPERM ; + + tmp.data = &unpriv_enable; + ret =proc_dointvec_minmax (&tmp, write, buffer, lenp, ppos); +if (write && !ret) { +if (locked_state && unpriv_enable !=1 ) +return -EPERM ; + *(int *)table->data = unpriv_enable; + } +return ret; +} +#endif /* CONFIG_BPF_SYSCALL && CONFIG_SYSCTL */ /* * /proc/sys support
@@ -2626,10 +2646,9 @@ static struct ctl_table kern_table[] = { .data = &sysctl_unprivileged_bpf_disabled, .maxlen = sizeof(sysctl_unprivileged_bpf_disabled), .mode = 0644, -/* only handle a transition from default "0" to "1" */ - .proc_handler = proc_dointvec_minmax, - .extra1 = SYSCTL_ONE, - .extra2 = SYSCTL_ONE, + .proc_handler = bpf_unpriv_handler, + .extra1 = SYSCTL_ZERO, + .extra2 = &two, }, { .procname = "bpf_stats_enabled",
net/ipv4/af_inet.c +4 -6
@@ -2003,6 +2003,10 @@ static int __init inet_init(void)ip_init (); +/* Initialise per-cpu ipv4 mibs */ +if (init_ipv4_mibs ()) +panic ("%s: Cannot init ipv4 mibs\n" , __func__); +/* Setup TCP slab cache for open requests. */ tcp_init ();
@@ -2033,12 +2037,6 @@ static int __init inet_init(void)if (init_inet_pernet_ops ())pr_crit ("%s: Cannot init ipv4 inet pernet ops\n" , __func__); -/* -* Initialise per-cpu ipv4 mibs -*/ - -if (init_ipv4_mibs ()) -pr_crit ("%s: Cannot init ipv4 mibs\n" , __func__);ipv4_proc_init ();
net/ipv6/udp.c +1 -1
@@ -1189,7 +1189,7 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6,kfree_skb (skb);return -EINVAL ; } -if (skb->len > cork->gso_size *UDP_MAX_SEGMENTS ) { +if (datalen > cork->gso_size *UDP_MAX_SEGMENTS ) {kfree_skb (skb);return -EINVAL ; }
net/ncsi/ncsi-netlink.c +5 -1
@@ -112,7 +112,11 @@ static int ncsi_write_package_info(struct sk_buff *skb, pnest =nla_nest_start_noflag (skb,NCSI_PKG_ATTR );if (!pnest)return -ENOMEM ; -nla_put_u32 (skb,NCSI_PKG_ATTR_ID , np->id); + rc =nla_put_u32 (skb,NCSI_PKG_ATTR_ID , np->id); +if (rc) { +nla_nest_cancel (skb, pnest); +return rc; + }if ((0x1 << np->id) == ndp->package_whitelist)nla_put_flag (skb,NCSI_PKG_ATTR_FORCED ); cnest =nla_nest_start_noflag (skb,NCSI_PKG_ATTR_CHANNEL_LIST );
net/sctp/diag.c +6 -6
@@ -292,9 +292,8 @@ static int sctp_tsp_dump_one(struct sctp_transport *tsp, void *p)return err; } -static int sctp_sock_dump (struct sctp_transport *tsp,void *p) +static int sctp_sock_dump (struct sctp_endpoint *ep,struct sctp_transport *tsp,void *p) { -struct sctp_endpoint *ep = tsp->asoc->ep;struct sctp_comm_param *commp = p;struct sock *sk = ep->base.sk;struct sk_buff *skb = commp->skb;
@@ -304,6 +303,8 @@ static int sctp_sock_dump(struct sctp_transport *tsp, void *p)int err =0 ;lock_sock (sk); +if (ep != tsp->asoc->ep) + goto release;list_for_each_entry (assoc, &ep->asocs, asocs) {if (cb->args[4 ] < cb->args[1 ]) goto next;
@@ -346,9 +347,8 @@ static int sctp_sock_dump(struct sctp_transport *tsp, void *p)return err; } -static int sctp_sock_filter (struct sctp_transport *tsp,void *p) +static int sctp_sock_filter (struct sctp_endpoint *ep,struct sctp_transport *tsp,void *p) { -struct sctp_endpoint *ep = tsp->asoc->ep;struct sctp_comm_param *commp = p;struct sock *sk = ep->base.sk;const struct inet_diag_req_v2 *r = commp->r;
@@ -507,8 +507,8 @@ static void sctp_diag_dump(struct sk_buff *skb, struct netlink_callback *cb,if (!(idiag_states & ~(TCPF_LISTEN |TCPF_CLOSE ))) goto done; -sctp_for_each_transport (sctp_sock_filter, sctp_sock_dump, - net, &pos, &commp); +sctp_transport_traverse_process (sctp_sock_filter, sctp_sock_dump, + net, &pos, &commp); cb->args[2 ] = pos; done:
net/sctp/endpointola.c +15 -8
@@ -184,6 +184,18 @@ void sctp_endpoint_free(struct sctp_endpoint *ep) }/* Final destructor for endpoint. */ +static void sctp_endpoint_destroy_rcu (struct rcu_head *head) +{ + struct sctp_endpoint *ep = container_of(head, struct sctp_endpoint, rcu); +struct sock *sk = ep->base.sk; + +sctp_sk (sk)->ep =NULL ; +sock_put (sk); + +kfree (ep); +SCTP_DBG_OBJCNT_DEC (ep); +} +static void sctp_endpoint_destroy (struct sctp_endpoint *ep) {struct sock *sk;
@@ -213,18 +225,13 @@ static void sctp_endpoint_destroy(struct sctp_endpoint *ep)if (sctp_sk (sk)->bind_hash)sctp_put_port (sk); -sctp_sk (sk)->ep =NULL ; -/* Give up our hold on the sock */ -sock_put (sk); - -kfree (ep); -SCTP_DBG_OBJCNT_DEC (ep); +call_rcu (&ep->rcu, sctp_endpoint_destroy_rcu); }/* Hold a reference to an endpoint. */ -void sctp_endpoint_hold (struct sctp_endpoint *ep) +int sctp_endpoint_hold (struct sctp_endpoint *ep) { -refcount_inc (&ep->base.refcnt); +return refcount_inc_not_zero (&ep->base.refcnt); }/* Release a reference to an endpoint and clean up if there are
net/sctp/socket.c +15 -8
@@ -5223,11 +5223,12 @@ int sctp_transport_lookup_process(int (*cb)(struct sctp_transport *, void *), }EXPORT_SYMBOL_GPL (sctp_transport_lookup_process); -int sctp_for_each_transport (int (*cb)(struct sctp_transport *,void *), -int (*cb_done)(struct sctp_transport *,void *), -struct net *net,int *pos,void *p) { +int sctp_transport_traverse_process (sctp_callback_t cb,sctp_callback_t cb_done, +struct net *net,int *pos,void *p) +{struct rhashtable_iter hti;struct sctp_transport *tsp; +struct sctp_endpoint *ep;int ret; again:
@@ -5236,26 +5237,32 @@ int sctp_for_each_transport(int (*cb)(struct sctp_transport *, void *), tsp =sctp_transport_get_idx (net, &hti, *pos +1 );for (; !IS_ERR_OR_NULL (tsp); tsp =sctp_transport_get_next (net, &hti)) { - ret =cb (tsp, p); -if (ret) -break ; + ep = tsp->asoc->ep; +if (sctp_endpoint_hold (ep)) {/* asoc can be peeled off */ + ret =cb (ep, tsp, p); +if (ret) +break ; +sctp_endpoint_put (ep); + } (*pos)++;sctp_transport_put (tsp); }sctp_transport_walk_stop (&hti);if (ret) { -if (cb_done && !cb_done (tsp, p)) { +if (cb_done && !cb_done (ep, tsp, p)) { (*pos)++; +sctp_endpoint_put (ep);sctp_transport_put (tsp); goto again; } +sctp_endpoint_put (ep);sctp_transport_put (tsp); }return ret; } -EXPORT_SYMBOL_GPL (sctp_for_each_transport); +EXPORT_SYMBOL_GPL (sctp_transport_traverse_process);/* 7.2.1 Association Status (SCTP_STATUS)
net/smc/smc.h +5 -0
@@ -170,6 +170,11 @@ struct smc_connection {u16 tx_cdc_seq;/* sequence # for CDC send */ u16 tx_cdc_seq_fin;/* sequence # - tx completed */ spinlock_t send_lock;/* protect wr_sends */ +atomic_t cdc_pend_tx_wr;/* number of pending tx CDC wqe +* - inc when post wqe, +* - dec on polled tx cqe +*/ +wait_queue_head_t cdc_pend_tx_wq;/* wakeup on no cdc_pend_tx_wr*/ struct delayed_work tx_work;/* retry of smc_cdc_msg_send */ u32 tx_off;/* base offset in peer rmb */
net/smc/smc_cdc.c +30 -29
117 lines not on this page · raw message
net/smc/smc_cdc.h +1 -1
@@ -291,7 +291,7 @@ int smc_cdc_get_free_slot(struct smc_connection *conn,struct smc_wr_buf **wr_buf, struct smc_rdma_wr **wr_rdma_buf, struct smc_cdc_tx_pend **pend); -void smc_cdc_tx_dismiss_slots (struct smc_connection *conn); +void smc_cdc_wait_pend_tx_wr (struct smc_connection *conn);int smc_cdc_msg_send (struct smc_connection *conn,struct smc_wr_buf *wr_buf,struct smc_cdc_tx_pend *pend);int smc_cdc_get_slot_and_msg_send (struct smc_connection *conn);
net/smc/smc_core.c +32 -15
128 lines not on this page · raw message
net/smc/smc_core.h +6 -0
@@ -359,6 +359,12 @@ static inline bool smc_link_usable(struct smc_link *lnk)return true; } +static inline bool smc_link_sendable (struct smc_link *lnk) +{ +return smc_link_usable (lnk) && + lnk->qp_attr.cur_qp_state ==IB_QPS_RTS ; +} +static inline bool smc_link_active (struct smc_link *lnk) {return lnk->state ==SMC_LNK_ACTIVE ;
net/smc/smc_ib.c +2 -2
@@ -100,12 +100,12 @@ int smc_ib_modify_qp_rts(struct smc_link *lnk) IB_QP_MAX_QP_RD_ATOMIC); } -int smc_ib_modify_qp_reset (struct smc_link *lnk) +int smc_ib_modify_qp_error (struct smc_link *lnk) {struct ib_qp_attr qp_attr;memset (&qp_attr,0 ,sizeof (qp_attr)); - qp_attr.qp_state =IB_QPS_RESET ; + qp_attr.qp_state =IB_QPS_ERR ;return ib_modify_qp (lnk->roce_qp, &qp_attr,IB_QP_STATE ); }
net/smc/smc_ib.h +1 -0
@@ -74,6 +74,7 @@ int smc_ib_create_queue_pair(struct smc_link *lnk);int smc_ib_ready_link (struct smc_link *lnk);int smc_ib_modify_qp_rts (struct smc_link *lnk);int smc_ib_modify_qp_reset (struct smc_link *lnk); +int smc_ib_modify_qp_error (struct smc_link *lnk);long smc_ib_setup_per_ibdev (struct smc_ib_device *smcibdev);int smc_ib_get_memory_region (struct ib_pd *pd,int access_flags,struct smc_buf_desc *buf_slot,u8 link_idx);
net/smc/smc_llc.c +50 -15
189 lines not on this page · raw message
net/smc/smc_tx.c +5 -17
@@ -479,7 +479,7 @@ static int smc_tx_rdma_writes(struct smc_connection *conn,/* Wakeup sndbuf consumers from any context (IRQ or process) * since there is more data to transmit; usable snd_wnd as max transmit */ -static int _smcr_tx_sndbuf_nonempty (struct smc_connection *conn) +static int smcr_tx_sndbuf_nonempty (struct smc_connection *conn) {struct smc_cdc_producer_flags *pflags = &conn->local_tx_ctrl.prod_flags;struct smc_link *link = conn->lnk;
@@ -488,8 +488,11 @@ static int _smcr_tx_sndbuf_nonempty(struct smc_connection *conn)struct smc_wr_buf *wr_buf;int rc; +if (!link || !smc_wr_tx_link_hold (link)) +return -ENOLINK ; rc =smc_cdc_get_free_slot (conn, link, &wr_buf, &wr_rdma_buf, &pend);if (rc <0 ) { +smc_wr_tx_link_put (link);if (rc == -EBUSY ) {struct smc_sock *smc = container_of(conn, struct smc_sock, conn);
@@ -530,22 +533,7 @@ static int _smcr_tx_sndbuf_nonempty(struct smc_connection *conn) out_unlock:spin_unlock_bh (&conn->send_lock); -return rc; -} - -static int smcr_tx_sndbuf_nonempty (struct smc_connection *conn) -{ -struct smc_link *link = conn->lnk; -int rc = -ENOLINK ; - -if (!link) -return rc; - -atomic_inc (&link->wr_tx_refcnt); -if (smc_link_usable (link)) - rc =_smcr_tx_sndbuf_nonempty (conn); -if (atomic_dec_and_test (&link->wr_tx_refcnt)) -wake_up_all (&link->wr_tx_wait); +smc_wr_tx_link_put (link);return rc; }
net/smc/smc_wr.c +9 -42
110 lines not on this page · raw message
net/smc/smc_wr.h +15 -2
@@ -22,7 +22,6 @@#define SMC_WR_BUF_CNT 16/* # of ctrl buffers per link */ #define SMC_WR_TX_WAIT_FREE_SLOT_TIME (10 * HZ) -#define SMC_WR_TX_WAIT_PENDING_TIME (5 * HZ)#define SMC_WR_TX_SIZE 44/* actual size of wr_send data (<=SMC_WR_BUF_SIZE) */
@@ -60,6 +59,20 @@ static inline void smc_wr_tx_set_wr_id(atomic_long_t *wr_tx_id, long val)atomic_long_set (wr_tx_id, val); } +static inline bool smc_wr_tx_link_hold (struct smc_link *link) +{ +if (!smc_link_sendable (link)) +return false; +atomic_inc (&link->wr_tx_refcnt); +return true; +} + +static inline void smc_wr_tx_link_put (struct smc_link *link) +{ +if (atomic_dec_and_test (&link->wr_tx_refcnt)) +wake_up_all (&link->wr_tx_wait); +} +static inline void smc_wr_wakeup_tx_wait (struct smc_link *lnk) {wake_up_all (&lnk->wr_tx_wait);
@@ -108,7 +121,7 @@ void smc_wr_tx_dismiss_slots(struct smc_link *lnk, u8 wr_rx_hdr_type,smc_wr_tx_filter filter, smc_wr_tx_dismisser dismisser, unsigned long data); -int smc_wr_tx_wait_no_pending_sends (struct smc_link *link); +void smc_wr_tx_wait_no_pending_sends (struct smc_link *link);int smc_wr_rx_register_handler (struct smc_wr_rx_handler *handler);int smc_wr_rx_post_init (struct smc_link *link);
scripts/recordmcount.pl +1 -1
@@ -252,7 +252,7 @@ if ($arch eq "x86_64") { } elsif ($arch eq "s390" && $bits == 64) { if ($cc =~ /-DCC_USING_HOTPATCH/) { - $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*c0 04 00 00 00 00\\s*(bcrl\\s*0,|jgnop\\s*)[0-9a-f]+ <([^\+]*)>\$"; + $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*c0 04 00 00 00 00\\s*(brcl\\s*0,|jgnop\\s*)[0-9a-f]+ <([^\+]*)>\$"; $mcount_adjust = 0; } else { $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_390_(PC|PLT)32DBL\\s+_mcount\\+0x2\$";
security/selinux/hooks.c +1 -1
@@ -5665,7 +5665,7 @@ static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb,struct common_audit_data ad;struct lsm_network_audit net = {0 ,};char *addrp; -u8 proto; +u8 proto =0 ;if (sk ==NULL )return NF_ACCEPT ;
security/tomoyo/util.c +14 -17
@@ -1046,10 +1046,11 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r)return false;if (!domain)return true; +if (READ_ONCE (domain->flags[TOMOYO_DIF_QUOTA_WARNED ])) +return false;list_for_each_entry_rcu (ptr, &domain->acl_info_list, list,srcu_read_lock_held (&tomoyo_ss)) {u16 perm; -u8 i;if (ptr->is_deleted)continue ;
@@ -1060,23 +1061,23 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r)*/ switch (ptr->type) {case TOMOYO_TYPE_PATH_ACL : - data_race(perm = container_of(ptr, struct tomoyo_path_acl, head)->perm); + perm = data_race(container_of(ptr, struct tomoyo_path_acl, head)->perm);break ;case TOMOYO_TYPE_PATH2_ACL : - data_race(perm = container_of(ptr, struct tomoyo_path2_acl, head)->perm); + perm = data_race(container_of(ptr, struct tomoyo_path2_acl, head)->perm);break ;case TOMOYO_TYPE_PATH_NUMBER_ACL : - data_race(perm = container_of(ptr, struct tomoyo_path_number_acl, head) + perm = data_race(container_of(ptr, struct tomoyo_path_number_acl, head) ->perm);break ;case TOMOYO_TYPE_MKDEV_ACL : - data_race(perm = container_of(ptr, struct tomoyo_mkdev_acl, head)->perm); + perm = data_race(container_of(ptr, struct tomoyo_mkdev_acl, head)->perm);break ;case TOMOYO_TYPE_INET_ACL : - data_race(perm = container_of(ptr, struct tomoyo_inet_acl, head)->perm); + perm = data_race(container_of(ptr, struct tomoyo_inet_acl, head)->perm);break ;case TOMOYO_TYPE_UNIX_ACL : - data_race(perm = container_of(ptr, struct tomoyo_unix_acl, head)->perm); + perm = data_race(container_of(ptr, struct tomoyo_unix_acl, head)->perm);break ;case TOMOYO_TYPE_MANUAL_TASK_ACL : perm =0 ;
@@ -1084,21 +1085,17 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r)default : perm =1 ; } -for (i =0 ; i <16 ; i++) -if (perm & (1 << i)) - count++; + count +=hweight16 (perm); }if (count <tomoyo_profile (domain->ns, domain->profile)-> pref[TOMOYO_PREF_MAX_LEARNING_ENTRY ])return true; -if (!domain->flags[TOMOYO_DIF_QUOTA_WARNED ]) { - domain->flags[TOMOYO_DIF_QUOTA_WARNED ] = true; -/* r->granted = false; */ -tomoyo_write_log (r,"%s" , tomoyo_dif[TOMOYO_DIF_QUOTA_WARNED ]); +WRITE_ONCE (domain->flags[TOMOYO_DIF_QUOTA_WARNED ], true); +/* r->granted = false; */ +tomoyo_write_log (r,"%s" , tomoyo_dif[TOMOYO_DIF_QUOTA_WARNED ]);#ifndef CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING -pr_warn ("WARNING: Domain '%s' has too many ACLs to hold. Stopped learning mode.\n" , - domain->domainname->name); +pr_warn ("WARNING: Domain '%s' has too many ACLs to hold. Stopped learning mode.\n" , + domain->domainname->name);#endif - }return false; }
tools/perf/builtin-script.c +1 -1
@@ -2354,7 +2354,7 @@ static int process_switch_event(struct perf_tool *tool,if (perf_event__process_switch (tool, event, sample, machine) <0 )return -1 ; -if (scripting_ops && scripting_ops->process_switch) +if (scripting_ops && scripting_ops->process_switch && !filter_cpu (sample)) scripting_ops->process_switch (event, sample, machine);if (!script->show_switch_events)
tools/testing/selftests/net/udpgso.c +6 -6
@@ -156,13 +156,13 @@ struct testcase testcases_v4[] = { }, { /* send max number of min sized segments */ - .tlen = UDP_MAX_SEGMENTS - CONST_HDRLEN_V4, + .tlen = UDP_MAX_SEGMENTS, .gso_len = 1, - .r_num_mss = UDP_MAX_SEGMENTS - CONST_HDRLEN_V4, + .r_num_mss = UDP_MAX_SEGMENTS, }, { /* send max number + 1 of min sized segments: fail */ - .tlen = UDP_MAX_SEGMENTS - CONST_HDRLEN_V4 + 1, + .tlen = UDP_MAX_SEGMENTS + 1, .gso_len = 1, .tfail = true, },
@@ -259,13 +259,13 @@ struct testcase testcases_v6[] = { }, { /* send max number of min sized segments */ - .tlen = UDP_MAX_SEGMENTS - CONST_HDRLEN_V6, + .tlen = UDP_MAX_SEGMENTS, .gso_len = 1, - .r_num_mss = UDP_MAX_SEGMENTS - CONST_HDRLEN_V6, + .r_num_mss = UDP_MAX_SEGMENTS, }, { /* send max number + 1 of min sized segments: fail */ - .tlen = UDP_MAX_SEGMENTS - CONST_HDRLEN_V6 + 1, + .tlen = UDP_MAX_SEGMENTS + 1, .gso_len = 1, .tfail = true, },
tools/testing/selftests/net/udpgso_bench_tx.c +7 -1
@@ -419,6 +419,7 @@ static void usage(const char *filepath)static void parse_opts (int argc,char **argv) { +const char *bind_addr =NULL ;int max_len, hdrlen;int c;
@@ -446,7 +447,7 @@ static void parse_opts(int argc, char **argv) cfg_cpu =strtol (optarg,NULL ,0 );break ;case 'D' : -setup_sockaddr (cfg_family, optarg, &cfg_dst_addr); + bind_addr = optarg;break ;case 'l' : cfg_runtime_ms =strtoul (optarg,NULL ,10 ) *1000 ;
@@ -492,6 +493,11 @@ static void parse_opts(int argc, char **argv) } } +if (!bind_addr) + bind_addr = cfg_family ==PF_INET6 ?"::" :"0.0.0.0" ; + +setup_sockaddr (cfg_family, bind_addr, &cfg_dst_addr); +if (optind != argc)usage (argv[0 ]);