Linux 5.4.71
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.71 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm64/boot/dts/altera/socfpga_stratix10_socdk.dts | 1 drivers/base/dd.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 1 drivers/gpu/drm/nouveau/nouveau_mem.c | 2 drivers/i2c/busses/i2c-i801.c | 1 drivers/i2c/busses/i2c-meson.c | 42 ++++-- drivers/i2c/busses/i2c-owl.c | 6 drivers/input/misc/ati_remote2.c | 4 drivers/iommu/intel-iommu.c | 4 drivers/mmc/core/queue.c | 2 drivers/net/bonding/bond_main.c | 1 drivers/net/ethernet/cavium/octeon/octeon_mgmt.c | 6 drivers/net/ethernet/intel/iavf/iavf_main.c | 49 ++----- drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 109 ++++++++++----- drivers/net/ethernet/mellanox/mlx5/core/en.h | 8 + drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 14 +- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 74 ++++++++++ drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c | 2 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c | 3 drivers/net/ethernet/realtek/r8169_main.c | 4 drivers/net/ethernet/renesas/ravb_main.c | 110 ++++++++-------- drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 15 -- drivers/net/macsec.c | 4 drivers/net/phy/Kconfig | 1 drivers/net/team/team.c | 3 drivers/net/usb/ax88179_178a.c | 1 drivers/net/usb/rtl8150.c | 16 +- drivers/net/virtio_net.c | 8 + drivers/nvme/host/core.c | 4 drivers/nvme/host/tcp.c | 7 - drivers/platform/olpc/olpc-ec.c | 4 drivers/platform/x86/Kconfig | 1 drivers/platform/x86/intel-vbtn.c | 64 +++++++-- drivers/platform/x86/thinkpad_acpi.c | 6 drivers/vhost/vhost.c | 12 - drivers/video/console/newport_con.c | 7 - drivers/video/fbdev/core/fbcon.c | 12 + drivers/video/fbdev/core/fbcon.h | 7 - drivers/video/fbdev/core/fbcon_rotate.c | 1 drivers/video/fbdev/core/tileblit.c | 1 fs/btrfs/ctree.h | 2 fs/btrfs/extent-tree.c | 41 ++++- fs/btrfs/file.c | 23 ++- fs/btrfs/inode.c | 44 +++++- fs/btrfs/send.c | 19 ++ fs/btrfs/volumes.c | 8 - fs/cifs/smb2ops.c | 2 fs/io_uring.c | 58 +++++--- include/asm-generic/vmlinux.lds.h | 2 include/linux/font.h | 13 + include/linux/khugepaged.h | 5 include/linux/mlx5/driver.h | 2 include/linux/net.h | 16 ++ include/net/act_api.h | 2 include/net/xfrm.h | 16 -- kernel/bpf/sysfs_btf.c | 6 kernel/events/core.c | 5 kernel/umh.c | 9 + lib/fonts/font_10x18.c | 9 - lib/fonts/font_6x10.c | 9 - lib/fonts/font_6x11.c | 9 - lib/fonts/font_7x14.c | 9 - lib/fonts/font_8x16.c | 9 - lib/fonts/font_8x8.c | 9 - lib/fonts/font_acorn_8x8.c | 9 - lib/fonts/font_mini_4x6.c | 8 - lib/fonts/font_pearl_8x8.c | 9 - lib/fonts/font_sun12x22.c | 9 - lib/fonts/font_sun8x16.c | 7 - lib/fonts/font_ter16x32.c | 9 - mm/khugepaged.c | 25 +++ mm/page_alloc.c | 3 net/core/skbuff.c | 4 net/ipv4/tcp.c | 3 net/ipv4/tcp_ipv4.c | 6 net/openvswitch/conntrack.c | 22 +-- net/rxrpc/conn_event.c | 6 net/rxrpc/key.c | 20 ++ net/sched/act_api.c | 52 ++++--- net/sched/act_bpf.c | 4 net/sched/act_connmark.c | 1 net/sched/act_csum.c | 3 net/sched/act_ct.c | 2 net/sched/act_ctinfo.c | 3 net/sched/act_gact.c | 2 net/sched/act_ife.c | 3 net/sched/act_ipt.c | 2 net/sched/act_mirred.c | 2 net/sched/act_mpls.c | 2 net/sched/act_nat.c | 3 net/sched/act_pedit.c | 2 net/sched/act_police.c | 2 net/sched/act_sample.c | 2 net/sched/act_simple.c | 2 net/sched/act_skbedit.c | 2 net/sched/act_skbmod.c | 2 net/sched/act_tunnel_key.c | 3 net/sched/act_vlan.c | 2 net/sctp/auth.c | 1 net/tls/tls_sw.c | 9 + net/wireless/nl80211.c | 3 net/xfrm/xfrm_interface.c | 2 net/xfrm/xfrm_state.c | 42 +++++- tools/perf/builtin-top.c | 4 tools/perf/tests/topology.c | 12 - 106 files changed, 812 insertions(+), 448 deletions(-)
Aaron Ma (1):
platform/x86: thinkpad_acpi: re-initialize ACPI buffer size when reuse
Anant Thazhemadam (3):
net: wireless: nl80211: fix out-of-bounds access in nl80211_del_key()
net: team: fix memory leak in __team_options_register
net: usb: rtl8150: set random MAC address when set_ethernet_addr() fails
Antony Antony (4):
xfrm: clone XFRMA_SET_MARK in xfrm_do_migrate
xfrm: clone XFRMA_REPLAY_ESN_VAL in xfrm_do_migrate
xfrm: clone XFRMA_SEC_CTX in xfrm_do_migrate
xfrm: clone whole liftime_cur structure in xfrm_do_migrate
Aya Levin (4):
net/mlx5e: Add resiliency in Striding RQ mode for packets larger than MTU net/mlx5e: Fix VLAN cleanup flow
net/mlx5e: Fix VLAN create flow
net/mlx5e: Fix driver's declaration to support GRE offload
Chaitanya Kulkarni (1):
nvme-core: put ctrl ref when module ref get fail
Coly Li (4):
net: introduce helper sendpage_ok() in include/linux/net.h
tcp: use sendpage_ok() to detect misused .sendpage
nvme-tcp: check page by sendpage_ok() before calling kernel_sendpage()
mmc: core: don't set limits.discard_granularity as 0
Cong Wang (2):
net_sched: defer tcf_idr_insert() in tcf_action_init_1()
net_sched: commit action insertions together
Cristian Ciocaltea (1):
i2c: owl: Clear NACK and BUS error bits
David Howells (4):
rxrpc: Downgrade the BUG() for unsupported token type in rxrpc_read()
rxrpc: Fix some missing _bh annotations on locking conn->state_lock
rxrpc: The server keyring isn't network-namespaced
rxrpc: Fix server keyring leak
Dinghao Liu (1):
Platform: OLPC: Fix memleak in olpc_ec_probe
Dinh Nguyen (1):
arm64: dts: stratix10: add status to qspi dts node
Dumitru Ceara (1):
openvswitch: handle DNAT tuple collision
Eran Ben Elisha (1):
net/mlx5: Avoid possible free of command entry while timeout comp handler
Eric Dumazet (5):
macsec: avoid use-after-free in macsec_handle_frame()
sctp: fix sctp_auth_init_hmacs() error path
team: set dev->needed_headroom in team_setup_by_port()
bonding: set dev->needed_headroom in bond_setup_by_slave()
tcp: fix receive window update in tcp_add_backlog()
Filipe Manana (3):
Btrfs: send, allow clone operations within the same file
Btrfs: send, fix emission of invalid clone operations within the same file
btrfs: fix RWF_NOWAIT write not failling when we need to cow
Geert Uytterhoeven (1):
Revert "ravb: Fixed to be able to unload modules"
Greg Kroah-Hartman (1):
Linux 5.4.71
Greg Kurz (2):
vhost: Don't call access_ok() when using IOTLB
vhost: Use vhost_get_used_size() in vhost_vring_set_addr()
Guillaume Nault (1):
net/core: check length before updating Ethertype in skb_mpls_{push,pop}Hans de Goede (2):
platform/x86: intel-vbtn: Fix SW_TABLET_MODE always reporting 1 on the HP Pavilion 11 x360 platform/x86: intel-vbtn: Switch to an allow-list for SW_TABLET_MODE reporting
Heiner Kallweit (1):
r8169: fix RTL8168f/RTL8411 EPHY config
Herbert Xu (1):
xfrm: Use correct address family in xfrm_state_find
Hugh Dickins (1):
mm/khugepaged: fix filemap page_to_pgoff(page) != offset
Ido Schimmel (1):
mlxsw: spectrum_acl: Fix mlxsw_sp_acl_tcam_group_add()'s error path
Ivan Khoronzhuk (1):
net: ethernet: cavium: octeon_mgmt: use phy_start and phy_stop
Jean Delvare (1):
i2c: i801: Exclude device from suspend direct complete optimization
Jerome Brunet (1):
i2c: meson: fix clock setting overwrite
Kajol Jain (1):
perf: Fix task_function_call() error handling
Karol Herbst (1):
drm/nouveau/mem: guard against NULL pointer access in mem_del
Linus Torvalds (1):
usermodehelper: reset umask to default before executing user process
Lu Baolu (1):
iommu/vt-d: Fix lockdep splat in iommu_flush_dev_iotlb()
Maor Gottlieb (1):
net/mlx5: Fix request_irqs error flow
Marc Dionne (1):
rxrpc: Fix rxkad token xdr encoding
Muchun Song (3):
io_uring: Fix missing smp_mb() in io_cancel_async_work()
io_uring: Fix remove irrelevant req from the task_list
io_uring: Fix double list add in io_queue_async_work()
Necip Fazil Yildiran (1):
platform/x86: fix kconfig dependency warning for FUJITSU_LAPTOP
Nicolas Belin (1):
i2c: meson: fixup rate calculation with filter delay
Peilin Ye (3):
fbdev, newport_con: Move FONT_EXTRA_WORDS macros into linux/font.h
Fonts: Support FONT_EXTRA_WORDS macros for built-in fonts
fbcon: Fix global-out-of-bounds read in fbcon_get_font()
Philip Yang (1):
drm/amdgpu: prevent double kfree ttm->sg
Qu Wenruo (3):
btrfs: volumes: Use more straightforward way to calculate map length
btrfs: Ensure we trim ranges across block group boundary
btrfs: allow btrfs_truncate_block() to fallback to nocow for data space reservation
Randy Dunlap (1):
mdio: fix mdio-thunder.c dependency & build error
Rohit Maheshwari (1):
net/tls: race causes kernel panic
Sabrina Dubroca (1):
xfrmi: drop ignore_df check before updating pmtu
Sylwester Dziedziuch (1):
iavf: Fix incorrect adapter get in iavf_resume
Tetsuo Handa (1):
driver core: Fix probe_count imbalance in really_probe()
Tom Rix (1):
platform/x86: thinkpad_acpi: initialize tp_nvram_state variable
Tommi Rantala (2):
perf test session topology: Fix data path
perf top: Fix stdio interface input handling with glibc 2.28+
Tonghao Zhang (1):
virtio-net: don't disable guest csum when disable LRO
Tony Ambardar (2):
bpf: Fix sysfs export of empty BTF section
bpf: Prevent .BTF section elimination
Vaibhav Gupta (1):
iavf: use generic power management
Vijay Balakrishna (1):
mm: khugepaged: recalculate min_free_kbytes after memory hotplug as expected by khugepaged
Vladimir Zapolskiy (1):
cifs: Fix incomplete memory allocation on setxattr path
Voon Weifeng (1):
net: stmmac: removed enabling eee in EEE set callback
Wilken Gottwalt (1):
net: usb: ax88179_178a: fix missing stop entry in driver_info
Xiongfeng Wang (1):
Input: ati_remote2 - add missing newlines when printing module parameters
Yinyin Zhu (1):
io_uring: Fix resource leaking when kill the process
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 70 +SUBLEVEL = 71 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm64/boot/dts/altera/socfpga_stratix10_socdk.dts +1 -0
@@ -155,6 +155,7 @@ }; &qspi { + status = "okay"; flash@0 { #address-cells = <1>; #size-cells = <1>;
drivers/base/dd.c +3 -2
@@ -518,7 +518,8 @@ static int really_probe(struct device *dev, struct device_driver *drv) drv->bus->name, __func__, drv->name, dev_name(dev));if (!list_empty (&dev->devres_head)) {dev_crit (dev,"Resources present before probing\n" ); -return -EBUSY ; + ret = -EBUSY ; + goto done; } re_probe:
@@ -639,7 +640,7 @@ static int really_probe(struct device *dev, struct device_driver *drv) ret =0 ; done:atomic_dec (&probe_count); -wake_up (&probe_waitqueue); +wake_up_all (&probe_waitqueue);return ret; }
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +1 -0
@@ -967,6 +967,7 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm) release_sg:kfree (ttm->sg); + ttm->sg =NULL ;return r; }
drivers/gpu/drm/nouveau/nouveau_mem.c +2 -0
@@ -176,6 +176,8 @@ void nouveau_mem_del(struct ttm_mem_reg *reg) {struct nouveau_mem *mem =nouveau_mem (reg); +if (!mem) +return ;nouveau_mem_fini (mem);kfree (reg->mm_node); reg->mm_node =NULL ;
drivers/i2c/busses/i2c-i801.c +1 -0
@@ -1891,6 +1891,7 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)pci_set_drvdata (dev, priv); +dev_pm_set_driver_flags (&dev->dev,DPM_FLAG_NEVER_SKIP );pm_runtime_set_autosuspend_delay (&dev->dev,1000 );pm_runtime_use_autosuspend (&dev->dev);pm_runtime_put_autosuspend (&dev->dev);
drivers/i2c/busses/i2c-meson.c +30 -12
80 lines not on this page · raw message
drivers/i2c/busses/i2c-owl.c +6 -0
@@ -179,6 +179,9 @@ static irqreturn_t owl_i2c_interrupt(int irq, void *_dev) fifostat =readl (i2c_dev->base +OWL_I2C_REG_FIFOSTAT );if (fifostat &OWL_I2C_FIFOSTAT_RNB ) { i2c_dev->err = -ENXIO ; +/* Clear NACK error bit by writing "1" */ +owl_i2c_update_reg (i2c_dev->base +OWL_I2C_REG_FIFOSTAT , +OWL_I2C_FIFOSTAT_RNB , true); goto stop; }
@@ -186,6 +189,9 @@ static irqreturn_t owl_i2c_interrupt(int irq, void *_dev) stat =readl (i2c_dev->base +OWL_I2C_REG_STAT );if (stat &OWL_I2C_STAT_BEB ) { i2c_dev->err = -EIO ; +/* Clear BUS error bit by writing "1" */ +owl_i2c_update_reg (i2c_dev->base +OWL_I2C_REG_STAT , +OWL_I2C_STAT_BEB , true); goto stop; }
drivers/input/misc/ati_remote2.c +2 -2
@@ -68,7 +68,7 @@ static int ati_remote2_get_channel_mask(char *buffer, {pr_debug ("%s()\n" , __func__); -return sprintf (buffer,"0x%04x" , *(unsigned int *)kp->arg); +return sprintf (buffer,"0x%04x\n" , *(unsigned int *)kp->arg); } static int ati_remote2_set_mode_mask(const char *val,
@@ -84,7 +84,7 @@ static int ati_remote2_get_mode_mask(char *buffer, {pr_debug ("%s()\n" , __func__); -return sprintf (buffer,"0x%02x" , *(unsigned int *)kp->arg); +return sprintf (buffer,"0x%02x\n" , *(unsigned int *)kp->arg); }static unsigned int channel_mask =ATI_REMOTE2_MAX_CHANNEL_MASK ;
drivers/iommu/intel-iommu.c +2 -2
@@ -2560,14 +2560,14 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu, }/* Setup the PASID entry for requests without PASID: */ -spin_lock (&iommu->lock); +spin_lock_irqsave (&iommu->lock, flags);if (hw_pass_through &&domain_type_is_si (domain)) ret =intel_pasid_setup_pass_through (iommu, domain, dev,PASID_RID2PASID );else ret =intel_pasid_setup_second_level (iommu, domain, dev,PASID_RID2PASID ); -spin_unlock (&iommu->lock); +spin_unlock_irqrestore (&iommu->lock, flags);if (ret) {dev_err (dev,"Setup RID2PASID failed\n" );dmar_remove_one_dev_info (dev);
drivers/mmc/core/queue.c +1 -1
@@ -184,7 +184,7 @@ static void mmc_queue_setup_discard(struct request_queue *q, q->limits.discard_granularity = card->pref_erase <<9 ;/* granularity must not be greater than max. discard */ if (card->pref_erase > max_discard) - q->limits.discard_granularity =0 ; + q->limits.discard_granularity =SECTOR_SIZE ;if (mmc_can_secure_erase_trim (card))blk_queue_flag_set (QUEUE_FLAG_SECERASE , q); }
drivers/net/bonding/bond_main.c +1 -0
@@ -1148,6 +1148,7 @@ static void bond_setup_by_slave(struct net_device *bond_dev, bond_dev->type = slave_dev->type; bond_dev->hard_header_len = slave_dev->hard_header_len; + bond_dev->needed_headroom = slave_dev->needed_headroom; bond_dev->addr_len = slave_dev->addr_len; memcpy(bond_dev->broadcast, slave_dev->broadcast,
drivers/net/ethernet/cavium/octeon/octeon_mgmt.c +4 -2
@@ -1222,7 +1222,7 @@ static int octeon_mgmt_open(struct net_device *netdev)*/ if (netdev->phydev) {netif_carrier_off (netdev); -phy_start_aneg (netdev->phydev); +phy_start (netdev->phydev); }netif_wake_queue (netdev);
@@ -1250,8 +1250,10 @@ static int octeon_mgmt_stop(struct net_device *netdev)napi_disable (&p->napi);netif_stop_queue (netdev); -if (netdev->phydev) +if (netdev->phydev) { +phy_stop (netdev->phydev);phy_disconnect (netdev->phydev); + }netif_carrier_off (netdev);
drivers/net/ethernet/intel/iavf/iavf_main.c +14 -35
91 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +71 -38
254 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en.h +7 -1
@@ -92,7 +92,12 @@ struct page_pool;#define MLX5_MPWRQ_PAGES_PER_WQE BIT(MLX5_MPWRQ_WQE_PAGE_ORDER)#define MLX5_MTT_OCTW (npages) (ALIGN(npages, 8) / 2) -#define MLX5E_REQUIRED_WQE_MTTS (ALIGN(MLX5_MPWRQ_PAGES_PER_WQE, 8)) +/* Add another page to MLX5E_REQUIRED_WQE_MTTS as a buffer between +* WQEs, This page will absorb write overflow by the hardware, when +* receiving packets larger than MTU. These oversize packets are +* dropped by the driver at a later stage. +*/ +#define MLX5E_REQUIRED_WQE_MTTS (ALIGN(MLX5_MPWRQ_PAGES_PER_WQE + 1, 8))#define MLX5E_LOG_ALIGNED_MPWQE_PPW (ilog2(MLX5E_REQUIRED_WQE_MTTS))#define MLX5E_REQUIRED_MTTS (wqes) (wqes * MLX5E_REQUIRED_WQE_MTTS)#define MLX5E_MAX_RQ_NUM_MTTS \
@@ -694,6 +699,7 @@ struct mlx5e_rq {u32 rqn;struct mlx5_core_dev *mdev;struct mlx5_core_mkey umr_mkey; +struct mlx5e_dma_info wqe_overflow;/* XDP read-mostly */ struct xdp_rxq_info xdp_rxq;
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c +10 -4
@@ -217,6 +217,9 @@ static int __mlx5e_add_vlan_rule(struct mlx5e_priv *priv,break ; } +if (WARN_ONCE (*rule_p,"VLAN rule already exists type %d" , rule_type)) +return 0 ; + *rule_p =mlx5_add_flow_rules (ft, spec, &flow_act, &dest,1 );if (IS_ERR (*rule_p)) {
@@ -397,8 +400,7 @@ static void mlx5e_add_vlan_rules(struct mlx5e_priv *priv)for_each_set_bit (i, priv->fs.vlan.active_svlans,VLAN_N_VID )mlx5e_add_vlan_rule (priv,MLX5E_VLAN_RULE_TYPE_MATCH_STAG_VID , i); -if (priv->fs.vlan.cvlan_filter_disabled && - !(priv->netdev->flags &IFF_PROMISC )) +if (priv->fs.vlan.cvlan_filter_disabled)mlx5e_add_any_vid_rules (priv); }
@@ -415,8 +417,12 @@ static void mlx5e_del_vlan_rules(struct mlx5e_priv *priv)for_each_set_bit (i, priv->fs.vlan.active_svlans,VLAN_N_VID )mlx5e_del_vlan_rule (priv,MLX5E_VLAN_RULE_TYPE_MATCH_STAG_VID , i); -if (priv->fs.vlan.cvlan_filter_disabled && - !(priv->netdev->flags &IFF_PROMISC )) +WARN_ON_ONCE (!(test_bit (MLX5E_STATE_DESTROYING , &priv->state))); + +/* must be called after DESTROY bit is set and +* set_rx_mode is called and flushed +*/ +if (priv->fs.vlan.cvlan_filter_disabled)mlx5e_del_any_vid_rules (priv); }
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +69 -5
138 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c +1 -1
@@ -115,7 +115,7 @@ static int request_irqs(struct mlx5_core_dev *dev, int nvec)return 0 ; err_request_irq: -for (; i >=0 ; i--) { +while (i--) {struct mlx5_irq *irq =mlx5_irq_get (dev, i);int irqn =pci_irq_vector (dev->pdev, i);
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c +2 -1
@@ -290,13 +290,14 @@ mlxsw_sp_acl_tcam_group_add(struct mlxsw_sp_acl_tcam *tcam,int err; group->tcam = tcam; -mutex_init (&group->lock);INIT_LIST_HEAD (&group->region_list); err =mlxsw_sp_acl_tcam_group_id_get (tcam, &group->id);if (err)return err; +mutex_init (&group->lock); +return 0 ; }
drivers/net/ethernet/realtek/r8169_main.c +2 -2
@@ -4701,7 +4701,7 @@ static void rtl_hw_start_8168f_1(struct rtl8169_private *tp) { 0x08, 0x0001, 0x0002 }, { 0x09, 0x0000, 0x0080 }, { 0x19, 0x0000, 0x0224 }, - { 0x00, 0x0000, 0x0004 }, + { 0x00, 0x0000, 0x0008 }, { 0x0c, 0x3df0, 0x0200 }, };
@@ -4718,7 +4718,7 @@ static void rtl_hw_start_8411(struct rtl8169_private *tp) { 0x06, 0x00c0, 0x0020 }, { 0x0f, 0xffff, 0x5200 }, { 0x19, 0x0000, 0x0224 }, - { 0x00, 0x0000, 0x0004 }, + { 0x00, 0x0000, 0x0008 }, { 0x0c, 0x3df0, 0x0200 }, };
drivers/net/ethernet/renesas/ravb_main.c +55 -55
158 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +4 -11
@@ -662,23 +662,16 @@ static int stmmac_ethtool_op_set_eee(struct net_device *dev,struct stmmac_priv *priv =netdev_priv (dev);int ret; -if (!edata->eee_enabled) { +if (!priv->dma_cap.eee) +return -EOPNOTSUPP ; + +if (!edata->eee_enabled)stmmac_disable_eee_mode (priv); - }else { -/* We are asking for enabling the EEE but it is safe -* to verify all by invoking the eee_init function. -* In case of failure it will return an error. -*/ - edata->eee_enabled =stmmac_eee_init (priv); -if (!edata->eee_enabled) -return -EOPNOTSUPP ; - } ret =phylink_ethtool_set_eee (priv->phylink, edata);if (ret)return ret; - priv->eee_enabled = edata->eee_enabled; priv->tx_lpi_timer = edata->tx_lpi_timer;return 0 ; }
drivers/net/macsec.c +3 -1
@@ -1080,6 +1080,7 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)struct macsec_rx_sa *rx_sa;struct macsec_rxh_data *rxd;struct macsec_dev *macsec; +unsigned int len;sci_t sci;u32 pn;bool cbit;
@@ -1236,9 +1237,10 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)macsec_rxsc_put (rx_sc);skb_orphan (skb); + len = skb->len; ret =gro_cells_receive (&macsec->gro_cells, skb);if (ret ==NET_RX_SUCCESS ) -count_rx (dev, skb->len); +count_rx (dev, len);else macsec->secy.netdev->stats.rx_dropped++;
drivers/net/phy/Kconfig +1 -0
@@ -193,6 +193,7 @@ config MDIO_THUNDER depends on 64BIT depends on PCI select MDIO_CAVIUM + select MDIO_DEVRES help This driver supports the MDIO interfaces found on Cavium ThunderX SoCs when the MDIO bus device appears as a PCI
drivers/net/team/team.c +2 -1
@@ -287,7 +287,7 @@ static int __team_options_register(struct team *team,for (i--; i >=0 ; i--)__team_option_inst_del_option (team, dst_opts[i]); - i = option_count -1 ; + i = option_count; alloc_rollback:for (i--; i >=0 ; i--)kfree (dst_opts[i]);
@@ -2111,6 +2111,7 @@ static void team_setup_by_port(struct net_device *dev, dev->header_ops = port_dev->header_ops; dev->type = port_dev->type; dev->hard_header_len = port_dev->hard_header_len; + dev->needed_headroom = port_dev->needed_headroom; dev->addr_len = port_dev->addr_len; dev->mtu = port_dev->mtu;memcpy (dev->broadcast, port_dev->broadcast, port_dev->addr_len);
drivers/net/usb/ax88179_178a.c +1 -0
@@ -1719,6 +1719,7 @@ static const struct driver_info belkin_info = { .status = ax88179_status, .link_reset = ax88179_link_reset, .reset = ax88179_reset, + .stop = ax88179_stop, .flags = FLAG_ETHER | FLAG_FRAMING_AX, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup,
drivers/net/usb/rtl8150.c +12 -4
@@ -274,12 +274,20 @@ static int write_mii_word(rtl8150_t * dev, u8 phy, __u8 indx, u16 reg)return 1 ; } -static inline void set_ethernet_addr (rtl8150_t * dev) +static void set_ethernet_addr (rtl8150_t *dev) { -u8 node_id[6 ]; +u8 node_id[ETH_ALEN ]; +int ret; + + ret =get_registers (dev,IDR ,sizeof (node_id), node_id); -get_registers (dev,IDR ,sizeof (node_id), node_id); -memcpy (dev->netdev->dev_addr, node_id,sizeof (node_id)); +if (ret ==sizeof (node_id)) { +ether_addr_copy (dev->netdev->dev_addr, node_id); + }else { +eth_hw_addr_random (dev->netdev); +netdev_notice (dev->netdev,"Assigned a random MAC address: %pM\n" , + dev->netdev->dev_addr); + } }static int rtl8150_set_mac_address (struct net_device *netdev,void *p)
drivers/net/virtio_net.c +7 -1
@@ -63,6 +63,11 @@ static const unsigned long guest_offloads[] = {VIRTIO_NET_F_GUEST_CSUM }; +#define GUEST_OFFLOAD_LRO_MASK ((1ULL << VIRTIO_NET_F_GUEST_TSO4) | \ + (1ULL << VIRTIO_NET_F_GUEST_TSO6) | \ + (1ULL << VIRTIO_NET_F_GUEST_ECN) | \ + (1ULL << VIRTIO_NET_F_GUEST_UFO)) +struct virtnet_stat_desc {char desc[ETH_GSTRING_LEN ];size_t offset;
@@ -2572,7 +2577,8 @@ static int virtnet_set_features(struct net_device *dev,if (features &NETIF_F_LRO ) offloads = vi->guest_offloads_capable;else - offloads =0 ; + offloads = vi->guest_offloads_capable & + ~GUEST_OFFLOAD_LRO_MASK ; err =virtnet_set_guest_offloads (vi, offloads);if (err)
drivers/nvme/host/core.c +3 -1
@@ -2932,8 +2932,10 @@ static int nvme_dev_open(struct inode *inode, struct file *file) }nvme_get_ctrl (ctrl); -if (!try_module_get (ctrl->ops->module)) +if (!try_module_get (ctrl->ops->module)) { +nvme_put_ctrl (ctrl);return -EINVAL ; + } file->private_data = ctrl;return 0 ;
drivers/nvme/host/tcp.c +3 -4
@@ -861,12 +861,11 @@ static int nvme_tcp_try_send_data(struct nvme_tcp_request *req)else flags |=MSG_MORE ; -/* can't zcopy slab pages */ -if (unlikely (PageSlab (page))) { - ret =sock_no_sendpage (queue->sock, page, offset, len, +if (sendpage_ok (page)) { + ret =kernel_sendpage (queue->sock, page, offset, len, flags); }else { - ret =kernel_sendpage (queue->sock, page, offset, len, + ret =sock_no_sendpage (queue->sock, page, offset, len, flags); }if (ret <=0 )
drivers/platform/olpc/olpc-ec.c +3 -1
@@ -439,7 +439,9 @@ static int olpc_ec_probe(struct platform_device *pdev) &config);if (IS_ERR (ec->dcon_rdev)) {dev_err (&pdev->dev,"failed to register DCON regulator\n" ); -return PTR_ERR (ec->dcon_rdev); + err =PTR_ERR (ec->dcon_rdev); +kfree (ec); +return err; } ec->dbgfs_dir =olpc_ec_setup_debugfs ();
drivers/platform/x86/Kconfig +1 -0
@@ -269,6 +269,7 @@ config FUJITSU_LAPTOP depends on BACKLIGHT_CLASS_DEVICE depends on ACPI_VIDEO || ACPI_VIDEO = n select INPUT_SPARSEKMAP + select NEW_LEDS select LEDS_CLASS ---help--- This is a driver for laptops built by Fujitsu:
drivers/platform/x86/intel-vbtn.c +51 -13
86 lines not on this page · raw message
drivers/platform/x86/thinkpad_acpi.c +4 -2
@@ -2587,7 +2587,7 @@ static void hotkey_compare_and_issue_event(struct tp_nvram_state *oldn,*/ static int hotkey_kthread (void *data) { -struct tp_nvram_state s[2 ]; +struct tp_nvram_state s[2 ] = {0 };u32 poll_mask, event_mask;unsigned int si, so;unsigned long t;
@@ -6863,8 +6863,10 @@ static int __init tpacpi_query_bcl_levels(acpi_handle handle)list_for_each_entry (child, &device->children, node) {acpi_status status =acpi_evaluate_object (child->handle,"_BCL" ,NULL , &buffer); -if (ACPI_FAILURE (status)) +if (ACPI_FAILURE (status)) { + buffer.length =ACPI_ALLOCATE_BUFFER ;continue ; + } obj = (union acpi_object *)buffer.pointer;if (!obj || (obj->type !=ACPI_TYPE_PACKAGE )) {
drivers/vhost/vhost.c +6 -6
@@ -1299,6 +1299,11 @@ static bool vq_access_ok(struct vhost_virtqueue *vq, unsigned int num, struct vring_used __user *used) { +/* If an IOTLB device is present, the vring addresses are +* GIOVAs. Access validation occurs at prefetch time. */ +if (vq->iotlb) +return true; +return access_ok (desc,vhost_get_desc_size (vq, num)) &&access_ok (avail,vhost_get_avail_size (vq, num)) &&access_ok (used,vhost_get_used_size (vq, num));
@@ -1394,10 +1399,6 @@ bool vhost_vq_access_ok(struct vhost_virtqueue *vq)if (!vq_log_access_ok (vq, vq->log_base))return false; -/* Access validation occurs at prefetch time with IOTLB */ -if (vq->iotlb) -return true; -return vq_access_ok (vq, vq->num, vq->desc, vq->avail, vq->used); }EXPORT_SYMBOL_GPL (vhost_vq_access_ok);
@@ -1544,8 +1545,7 @@ static long vhost_vring_set_addr(struct vhost_dev *d,/* Also validate log access for used ring if enabled. */ if ((a.flags & (0x1 <<VHOST_VRING_F_LOG )) && !log_access_ok (vq->log_base, a.log_guest_addr, -sizeof *vq->used + - vq->num *sizeof *vq->used->ring)) +vhost_get_used_size (vq, vq->num)))return -EINVAL ; }
drivers/video/console/newport_con.c +1 -6
@@ -36,12 +36,6 @@#define FONT_DATA ((unsigned char *)font_vga_8x16.data) -/* borrowed from fbcon.c */ -#define REFCOUNT (fd) (((int *)(fd))[-1]) -#define FNTSIZE (fd) (((int *)(fd))[-2]) -#define FNTCHARCNT (fd) (((int *)(fd))[-3]) -#define FONT_EXTRA_WORDS 3 -static unsigned char *font_data[MAX_NR_CONSOLES ];static struct newport_regs *npregs;
@@ -523,6 +517,7 @@ static int newport_set_font(int unit, struct console_font *op)FNTSIZE (new_data) = size;FNTCHARCNT (new_data) = op->charcount;REFCOUNT (new_data) =0 ;/* usage counter */ +FNTSUM (new_data) =0 ; p = new_data;for (i =0 ; i < op->charcount; i++) {
drivers/video/fbdev/core/fbcon.c +12 -0
@@ -2292,6 +2292,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font)if (font->width <=8 ) { j = vc->vc_font.height; +if (font->charcount * j >FNTSIZE (fontdata)) +return -EINVAL ; +for (i =0 ; i < font->charcount; i++) {memcpy (data, fontdata, j);memset (data + j,0 ,32 - j);
@@ -2300,6 +2303,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font) } }else if (font->width <=16 ) { j = vc->vc_font.height *2 ; +if (font->charcount * j >FNTSIZE (fontdata)) +return -EINVAL ; +for (i =0 ; i < font->charcount; i++) {memcpy (data, fontdata, j);memset (data + j,0 ,64 - j);
@@ -2307,6 +2313,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font) fontdata += j; } }else if (font->width <=24 ) { +if (font->charcount * (vc->vc_font.height *sizeof (u32)) >FNTSIZE (fontdata)) +return -EINVAL ; +for (i =0 ; i < font->charcount; i++) {for (j =0 ; j < vc->vc_font.height; j++) { *data++ = fontdata[0 ];
@@ -2319,6 +2328,9 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font) } }else { j = vc->vc_font.height *4 ; +if (font->charcount * j >FNTSIZE (fontdata)) +return -EINVAL ; +for (i =0 ; i < font->charcount; i++) {memcpy (data, fontdata, j);memset (data + j,0 ,128 - j);
drivers/video/fbdev/core/fbcon.h +0 -7
@@ -152,13 +152,6 @@ static inline int attr_col_ec(int shift, struct vc_data *vc,#define attr_bgcol_ec (bgshift, vc, info) attr_col_ec(bgshift, vc, info, 0)#define attr_fgcol_ec (fgshift, vc, info) attr_col_ec(fgshift, vc, info, 1) -/* Font */ -#define REFCOUNT (fd) (((int *)(fd))[-1]) -#define FNTSIZE (fd) (((int *)(fd))[-2]) -#define FNTCHARCNT (fd) (((int *)(fd))[-3]) -#define FNTSUM (fd) (((int *)(fd))[-4]) -#define FONT_EXTRA_WORDS 4 -/* * Scroll Method */
drivers/video/fbdev/core/fbcon_rotate.c +1 -0
@@ -14,6 +14,7 @@#include <linux/fb.h> #include <linux/vt_kern.h> #include <linux/console.h> +#include <linux/font.h> #include <asm/types.h> #include "fbcon.h" #include "fbcon_rotate.h"
drivers/video/fbdev/core/tileblit.c +1 -0
@@ -13,6 +13,7 @@#include <linux/fb.h> #include <linux/vt_kern.h> #include <linux/console.h> +#include <linux/font.h> #include <asm/types.h> #include "fbcon.h"
fs/btrfs/ctree.h +2 -0
@@ -2956,6 +2956,8 @@ int btrfs_fdatawrite_range(struct inode *inode, loff_t start, loff_t end);loff_t btrfs_remap_file_range (struct file *file_in,loff_t pos_in,struct file *file_out,loff_t pos_out,loff_t len,unsigned int remap_flags); +int btrfs_check_can_nocow (struct btrfs_inode *inode,loff_t pos, +size_t *write_bytes);/* tree-defrag.c */ int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,
fs/btrfs/extent-tree.c +31 -10
71 lines not on this page · raw message
fs/btrfs/file.c +19 -4
@@ -1546,8 +1546,8 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,return ret; } -static noinline int check_can_nocow(struct btrfs_inode *inode, loff_t pos, -size_t *write_bytes) +int btrfs_check_can_nocow (struct btrfs_inode *inode,loff_t pos, +size_t *write_bytes) {struct btrfs_fs_info *fs_info = inode->root->fs_info;struct btrfs_root *root = inode->root;
@@ -1647,7 +1647,7 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,if (ret <0 ) {if ((BTRFS_I (inode)->flags & (BTRFS_INODE_NODATACOW |BTRFS_INODE_PREALLOC )) && -check_can_nocow (BTRFS_I (inode), pos, +btrfs_check_can_nocow (BTRFS_I (inode), pos, &write_bytes) >0 ) {/* * For nodata cow case, no need to reserve
@@ -1919,13 +1919,28 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb, pos = iocb->ki_pos; count =iov_iter_count (from);if (iocb->ki_flags &IOCB_NOWAIT ) { +size_t nocow_bytes = count; +/* * We will allocate space in case nodatacow is not set, * so bail */ if (!(BTRFS_I (inode)->flags & (BTRFS_INODE_NODATACOW |BTRFS_INODE_PREALLOC )) || -check_can_nocow (BTRFS_I (inode), pos, &count) <=0 ) { +btrfs_check_can_nocow (BTRFS_I (inode), pos, + &nocow_bytes) <=0 ) { +inode_unlock (inode); +return -EAGAIN ; + } + +/* check_can_nocow() locks the snapshot lock on success */ +btrfs_end_write_no_snapshotting (root); +/* +* There are holes in the range or parts of the range that must +* be COWed (shared extents, RO block groups, etc), so just bail +* out. +*/ +if (nocow_bytes < count) {inode_unlock (inode);return -EAGAIN ; }
fs/btrfs/inode.c +37 -7
73 lines not on this page · raw message
fs/btrfs/send.c +14 -5
@@ -1257,12 +1257,21 @@ static int __iterate_backrefs(u64 ino, u64 offset, u64 root, void *ctx_)*/ if (found->root == bctx->sctx->send_root) {/* -* TODO for the moment we don't accept clones from the inode -* that is currently send. We may change this when -* BTRFS_IOC_CLONE_RANGE supports cloning from and to the same -* file. +* If the source inode was not yet processed we can't issue a +* clone operation, as the source extent does not exist yet at +* the destination of the stream. */ -if (ino >= bctx->cur_objectid) +if (ino > bctx->cur_objectid) +return 0 ; +/* +* We clone from the inode currently being sent as long as the +* source extent is already processed, otherwise we could try +* to clone from an extent that does not exist yet at the +* destination of the stream. +*/ +if (ino == bctx->cur_objectid && + offset + bctx->extent_len > + bctx->sctx->cur_inode_next_write_offset)return 0 ; }
fs/btrfs/volumes.c +5 -3
@@ -5676,12 +5676,13 @@ void btrfs_put_bbio(struct btrfs_bio *bbio)* replace. */ static int __btrfs_map_block_for_discard (struct btrfs_fs_info *fs_info, -u64 logical,u64 length, +u64 logical,u64 *length_ret,struct btrfs_bio **bbio_ret) {struct extent_map *em;struct map_lookup *map;struct btrfs_bio *bbio; +u64 length = *length_ret;u64 offset;u64 stripe_nr;u64 stripe_nr_end;
@@ -5714,7 +5715,8 @@ static int __btrfs_map_block_for_discard(struct btrfs_fs_info *fs_info, } offset = logical - em->start; - length =min_t (u64, em->len - offset, length); + length =min_t (u64, em->start + em->len - logical, length); + *length_ret = length; stripe_len = map->stripe_len;/*
@@ -6129,7 +6131,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info,if (op ==BTRFS_MAP_DISCARD )return __btrfs_map_block_for_discard (fs_info, logical, - *length, bbio_ret); + length, bbio_ret); ret =btrfs_get_io_geometry (fs_info, op, logical, *length, &geom);if (ret <0 )
fs/cifs/smb2ops.c +1 -1
@@ -1179,7 +1179,7 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon, rqst[1 ].rq_iov = si_iov; rqst[1 ].rq_nvec =1 ; - len =sizeof (ea) + ea_name_len + ea_value_len +1 ; + len =sizeof (*ea) + ea_name_len + ea_value_len +1 ; ea =kzalloc (len,GFP_KERNEL );if (ea ==NULL ) { rc = -ENOMEM ;
fs/io_uring.c +38 -20
114 lines not on this page · raw message
include/asm-generic/vmlinux.lds.h +1 -1
@@ -599,7 +599,7 @@#define BTF \ .BTF : AT(ADDR(.BTF) - LOAD_OFFSET) { \ __start_BTF = .; \ - *(.BTF) \ + KEEP(*(.BTF)) \ __stop_BTF = .; \ }#else
include/linux/font.h +13 -0
@@ -59,4 +59,17 @@ extern const struct font_desc *get_default_font(int xres, int yres,/* Max. length for the name of a predefined font */ #define MAX_FONT_NAME 32 +/* Extra word getters */ +#define REFCOUNT (fd) (((int *)(fd))[-1]) +#define FNTSIZE (fd) (((int *)(fd))[-2]) +#define FNTCHARCNT (fd) (((int *)(fd))[-3]) +#define FNTSUM (fd) (((int *)(fd))[-4]) + +#define FONT_EXTRA_WORDS 4 + +struct font_data { +unsigned int extra[FONT_EXTRA_WORDS ]; +const unsigned char data[]; +} __packed; +#endif /* _VIDEO_FONT_H */
include/linux/khugepaged.h +5 -0
@@ -15,6 +15,7 @@ extern int __khugepaged_enter(struct mm_struct *mm);extern void __khugepaged_exit (struct mm_struct *mm);extern int khugepaged_enter_vma_merge (struct vm_area_struct *vma,unsigned long vm_flags); +extern void khugepaged_min_free_kbytes_update (void );#ifdef CONFIG_SHMEM extern void collapse_pte_mapped_thp (struct mm_struct *mm,unsigned long addr);#else
@@ -85,6 +86,10 @@ static inline void collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr) { } + +static inline void khugepaged_min_free_kbytes_update (void ) +{ +}#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ #endif /* _LINUX_KHUGEPAGED_H */
include/linux/mlx5/driver.h +2 -0
@@ -769,6 +769,8 @@ struct mlx5_cmd_work_ent {u64 ts2;u16 op;bool polling; +/* Track the max comp handlers */ +refcount_t refcnt; };struct mlx5_pas {
include/linux/net.h +16 -0
@@ -21,6 +21,7 @@#include <linux/rcupdate.h> #include <linux/once.h> #include <linux/fs.h> +#include <linux/mm.h> #include <uapi/linux/net.h>
@@ -288,6 +289,21 @@ do { \#define net_get_random_once_wait (buf, nbytes) \ get_random_once_wait((buf), (nbytes)) +/* +* E.g. XFS meta- & log-data is in slab pages, or bcache meta +* data pages, or other high order pages allocated by +* __get_free_pages() without __GFP_COMP, which have a page_count +* of 0 and/or have PageSlab() set. We cannot use send_page for +* those, as that does get_page(); put_page(); and would cause +* either a VM_BUG directly, or __page_cache_release a page that +* would actually still be referenced by someone, leading to some +* obscure delayed Oops somewhere else. +*/ +static inline bool sendpage_ok (struct page *page) +{ +return !PageSlab (page) &&page_count (page) >=1 ; +} +int kernel_sendmsg (struct socket *sock,struct msghdr *msg,struct kvec *vec,size_t num,size_t len); int kernel_sendmsg_locked(struct sock *sk, struct msghdr *msg,
include/net/act_api.h +0 -2
@@ -156,8 +156,6 @@ int tcf_idr_search(struct tc_action_net *tn, struct tc_action **a, u32 index);int tcf_idr_create (struct tc_action_net *tn,u32 index,struct nlattr *est,struct tc_action **a,const struct tc_action_ops *ops,int bind,bool cpustats); -void tcf_idr_insert (struct tc_action_net *tn,struct tc_action *a); -void tcf_idr_cleanup (struct tc_action_net *tn,u32 index);int tcf_idr_check_alloc (struct tc_action_net *tn,u32 *index,struct tc_action **a,int bind);
include/net/xfrm.h +6 -10
@@ -1773,21 +1773,17 @@ static inline unsigned int xfrm_replay_state_esn_len(struct xfrm_replay_state_esstatic inline int xfrm_replay_clone (struct xfrm_state *x,struct xfrm_state *orig) { - x->replay_esn =kzalloc (xfrm_replay_state_esn_len (orig->replay_esn), + + x->replay_esn =kmemdup (orig->replay_esn, +xfrm_replay_state_esn_len (orig->replay_esn),GFP_KERNEL );if (!x->replay_esn)return -ENOMEM ; - - x->replay_esn->bmp_len = orig->replay_esn->bmp_len; - x->replay_esn->replay_window = orig->replay_esn->replay_window; - - x->preplay_esn =kmemdup (x->replay_esn, -xfrm_replay_state_esn_len (x->replay_esn), + x->preplay_esn =kmemdup (orig->preplay_esn, +xfrm_replay_state_esn_len (orig->preplay_esn),GFP_KERNEL ); -if (!x->preplay_esn) { -kfree (x->replay_esn); +if (!x->preplay_esn)return -ENOMEM ; - }return 0 ; }
kernel/bpf/sysfs_btf.c +3 -3
@@ -30,15 +30,15 @@ static struct kobject *btf_kobj;static int __init btf_vmlinux_init (void ) { -if (!__start_BTF) + bin_attr_btf_vmlinux.size = __stop_BTF - __start_BTF; + +if (!__start_BTF || bin_attr_btf_vmlinux.size ==0 )return 0 ; btf_kobj =kobject_create_and_add ("btf" , kernel_kobj);if (!btf_kobj)return -ENOMEM ; - bin_attr_btf_vmlinux.size = __stop_BTF - __start_BTF; -return sysfs_create_bin_file (btf_kobj, &bin_attr_btf_vmlinux); }
kernel/events/core.c +3 -2
@@ -97,7 +97,7 @@ static void remote_function(void *data)* retry due to any failures in smp_call_function_single(), such as if the * task_cpu() goes offline concurrently. * -* returns @func return value or -ESRCH when the process isn't running +* returns @func return value or -ESRCH or -ENXIO when the process isn't running */ static int task_function_call (struct task_struct *p,remote_function_f func,void *info)
@@ -113,7 +113,8 @@ task_function_call(struct task_struct *p, remote_function_f func, void *info)for (;;) { ret =smp_call_function_single (task_cpu (p), remote_function, &data,1 ); - ret = !ret ? data.ret : -EAGAIN ; +if (!ret) + ret = data.ret;if (ret != -EAGAIN )break ;
kernel/umh.c +9 -0
@@ -14,6 +14,7 @@#include <linux/cred.h> #include <linux/file.h> #include <linux/fdtable.h> +#include <linux/fs_struct.h> #include <linux/workqueue.h> #include <linux/security.h> #include <linux/mount.h>
@@ -75,6 +76,14 @@ static int call_usermodehelper_exec_async(void *data)flush_signal_handlers (current,1 );spin_unlock_irq (¤t->sighand->siglock); +/* +* Initial kernel threads share ther FS with init, in order to +* get the init root directory. But we've now created a new +* thread that is going to execve a user process and has its own +* 'struct fs_struct'. Reset umask to the default. +*/ + current->fs->umask =0022 ; +/* * Our parent (unbound workqueue) runs with elevated scheduling * priority. Avoid propagating that into the userspace child.
lib/fonts/font_10x18.c +4 -5
@@ -8,8 +8,8 @@#define FONTDATAMAX 9216 -static const unsigned char fontdata_10x18[FONTDATAMAX ] = { - +static struct font_data fontdata_10x18 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/* 0 0x00 '^@' */ 0x00 ,0x00 ,/* 0000000000 */ 0x00 ,0x00 ,/* 0000000000 */
@@ -5129,8 +5129,7 @@ static const unsigned char fontdata_10x18[FONTDATAMAX] = {0x00 ,0x00 ,/* 0000000000 */ 0x00 ,0x00 ,/* 0000000000 */ 0x00, 0x00, /* 0000000000 */ - -}; +} }; const struct font_desc font_10x18 = {
@@ -5138,7 +5137,7 @@ const struct font_desc font_10x18 = { .name = "10x18", .width = 10, .height = 18, - .data = fontdata_10x18, + .data = fontdata_10x18.data,#ifdef __sparc__ .pref = 5,#else
lib/fonts/font_6x10.c +5 -4
@@ -1,8 +1,10 @@// SPDX-License-Identifier: GPL-2.0 #include <linux/font.h> -static const unsigned char fontdata_6x10[] = { +#define FONTDATAMAX 2560 +static struct font_data fontdata_6x10 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/* 0 0x00 '^@' */ 0x00 ,/* 00000000 */ 0x00 ,/* 00000000 */
@@ -3074,14 +3076,13 @@ static const unsigned char fontdata_6x10[] = { 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - -}; +} };const struct font_desc font_6x10 = { .idx = FONT6x10_IDX, .name ="6x10" , .width =6 , .height =10 , - .data = fontdata_6x10, + .data = fontdata_6x10.data, .pref =0 , };
lib/fonts/font_6x11.c +4 -5
@@ -9,8 +9,8 @@#define FONTDATAMAX (11*256) -static const unsigned char fontdata_6x11[FONTDATAMAX ] = { - +static struct font_data fontdata_6x11 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/* 0 0x00 '^@' */ 0x00 ,/* 00000000 */ 0x00 ,/* 00000000 */
@@ -3338,8 +3338,7 @@ static const unsigned char fontdata_6x11[FONTDATAMAX] = {0x00 ,/* 00000000 */ 0x00 ,/* 00000000 */ 0x00, /* 00000000 */ - -}; +} }; const struct font_desc font_vga_6x11 = {
@@ -3347,7 +3346,7 @@ const struct font_desc font_vga_6x11 = { .name = "ProFont6x11", .width = 6, .height = 11, - .data = fontdata_6x11, + .data = fontdata_6x11.data, /* Try avoiding this font if possible unless on MAC */ .pref = -2000, };
lib/fonts/font_7x14.c +4 -5
@@ -8,8 +8,8 @@#define FONTDATAMAX 3584 -static const unsigned char fontdata_7x14[FONTDATAMAX ] = { - +static struct font_data fontdata_7x14 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/* 0 0x00 '^@' */ 0x00 ,/* 0000000 */ 0x00 ,/* 0000000 */
@@ -4105,8 +4105,7 @@ static const unsigned char fontdata_7x14[FONTDATAMAX] = {0x00 ,/* 0000000 */ 0x00 ,/* 0000000 */ 0x00, /* 0000000 */ - -}; +} }; const struct font_desc font_7x14 = {
@@ -4114,6 +4113,6 @@ const struct font_desc font_7x14 = { .name = "7x14", .width = 7, .height = 14, - .data = fontdata_7x14, + .data = fontdata_7x14.data, .pref = 0, };
lib/fonts/font_8x16.c +4 -5
@@ -10,8 +10,8 @@#define FONTDATAMAX 4096 -static const unsigned char fontdata_8x16[FONTDATAMAX ] = { - +static struct font_data fontdata_8x16 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/* 0 0x00 '^@' */ 0x00 ,/* 00000000 */ 0x00 ,/* 00000000 */
@@ -4619,8 +4619,7 @@ static const unsigned char fontdata_8x16[FONTDATAMAX] = {0x00 ,/* 00000000 */ 0x00 ,/* 00000000 */ 0x00, /* 00000000 */ - -}; +} }; const struct font_desc font_vga_8x16 = {
@@ -4628,7 +4627,7 @@ const struct font_desc font_vga_8x16 = { .name = "VGA8x16", .width = 8, .height = 16, - .data = fontdata_8x16, + .data = fontdata_8x16.data, .pref = 0, };EXPORT_SYMBOL (font_vga_8x16);
lib/fonts/font_8x8.c +4 -5
@@ -9,8 +9,8 @@#define FONTDATAMAX 2048 -static const unsigned char fontdata_8x8[FONTDATAMAX ] = { - +static struct font_data fontdata_8x8 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/* 0 0x00 '^@' */ 0x00 ,/* 00000000 */ 0x00 ,/* 00000000 */
@@ -2570,8 +2570,7 @@ static const unsigned char fontdata_8x8[FONTDATAMAX] = {0x00 ,/* 00000000 */ 0x00 ,/* 00000000 */ 0x00, /* 00000000 */ - -}; +} }; const struct font_desc font_vga_8x8 = {
@@ -2579,6 +2578,6 @@ const struct font_desc font_vga_8x8 = { .name = "VGA8x8", .width = 8, .height = 8, - .data = fontdata_8x8, + .data = fontdata_8x8.data, .pref = 0, };
lib/fonts/font_acorn_8x8.c +6 -3
@@ -3,7 +3,10 @@#include <linux/font.h> -static const unsigned char acorndata_8x8[] = { +#define FONTDATAMAX 2048 + +static struct font_data acorndata_8x8 = { +{0 ,0 ,FONTDATAMAX ,0 }, {/* 00 */ 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,/* ^@ */ /* 01 */ 0x7e ,0x81 ,0xa5 ,0x81 ,0xbd ,0x99 ,0x81 ,0x7e ,/* ^A */ /* 02 */ 0x7e ,0xff ,0xbd ,0xff ,0xc3 ,0xe7 ,0xff ,0x7e ,/* ^B */
@@ -260,14 +263,14 @@ static const unsigned char acorndata_8x8[] = { /* FD */ 0x38, 0x04, 0x18, 0x20, 0x3c, 0x00, 0x00, 0x00, /* FE */ 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, /* FF */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; +} };const struct font_desc font_acorn_8x8 = { .idx = ACORN8x8_IDX, .name ="Acorn8x8" , .width =8 , .height =8 , - .data = acorndata_8x8, + .data = acorndata_8x8.data, #ifdef CONFIG_ARCH_ACORN .pref =20 , #else
lib/fonts/font_mini_4x6.c +4 -4
@@ -43,8 +43,8 @@ __END__;#define FONTDATAMAX 1536 -static const unsigned char fontdata_mini_4x6[FONTDATAMAX ] = { - +static struct font_data fontdata_mini_4x6 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/*{*/ /* Char 0: ' ' */ 0xee ,/*= [*** ] */
@@ -2145,14 +2145,14 @@ static const unsigned char fontdata_mini_4x6[FONTDATAMAX] = { 0xee, /*= [*** ] */ 0x00, /*= [ ] */ /*}*/ -}; +} };const struct font_desc font_mini_4x6 = { .idx = MINI4x6_IDX, .name ="MINI4x6" , .width =4 , .height =6 , - .data = fontdata_mini_4x6, + .data = fontdata_mini_4x6.data, .pref =3 , };
lib/fonts/font_pearl_8x8.c +4 -5
@@ -14,8 +14,8 @@#define FONTDATAMAX 2048 -static const unsigned char fontdata_pearl8x8[FONTDATAMAX ] = { - +static struct font_data fontdata_pearl8x8 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/* 0 0x00 '^@' */ 0x00 ,/* 00000000 */ 0x00 ,/* 00000000 */
@@ -2575,14 +2575,13 @@ static const unsigned char fontdata_pearl8x8[FONTDATAMAX] = { 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - -}; +} };const struct font_desc font_pearl_8x8 = { .idx = PEARL8x8_IDX, .name ="PEARL8x8" , .width =8 , .height =8 , - .data = fontdata_pearl8x8, + .data = fontdata_pearl8x8.data, .pref =2 , };
lib/fonts/font_sun12x22.c +4 -5
@@ -3,8 +3,8 @@#define FONTDATAMAX 11264 -static const unsigned char fontdata_sun12x22[FONTDATAMAX ] = { - +static struct font_data fontdata_sun12x22 = { + {0 ,0 ,FONTDATAMAX ,0 }, {/* 0 0x00 '^@' */ 0x00 ,0x00 ,/* 000000000000 */ 0x00 ,0x00 ,/* 000000000000 */
@@ -6148,8 +6148,7 @@ static const unsigned char fontdata_sun12x22[FONTDATAMAX] = {0x00 ,0x00 ,/* 000000000000 */ 0x00 ,0x00 ,/* 000000000000 */ 0x00, 0x00, /* 000000000000 */ - -}; +} }; const struct font_desc font_sun_12x22 = {
@@ -6157,7 +6156,7 @@ const struct font_desc font_sun_12x22 = { .name = "SUN12x22", .width = 12, .height = 22, - .data = fontdata_sun12x22, + .data = fontdata_sun12x22.data,#ifdef __sparc__ .pref = 5,#else
lib/fonts/font_sun8x16.c +4 -3
@@ -3,7 +3,8 @@#define FONTDATAMAX 4096 -static const unsigned char fontdata_sun8x16[FONTDATAMAX ] = { +static struct font_data fontdata_sun8x16 = { +{0 ,0 ,FONTDATAMAX ,0 }, {/* */ 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,/* */ 0x00 ,0x00 ,0x7e ,0x81 ,0xa5 ,0x81 ,0x81 ,0xbd ,0x99 ,0x81 ,0x81 ,0x7e ,0x00 ,0x00 ,0x00 ,0x00 ,/* */ 0x00 ,0x00 ,0x7e ,0xff ,0xdb ,0xff ,0xff ,0xc3 ,0xe7 ,0xff ,0xff ,0x7e ,0x00 ,0x00 ,0x00 ,0x00 ,
@@ -260,14 +261,14 @@ static const unsigned char fontdata_sun8x16[FONTDATAMAX] = { /* */ 0x00,0x70,0xd8,0x30,0x60,0xc8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* */ 0x00,0x00,0x00,0x00,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00, /* */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; +} };const struct font_desc font_sun_8x16 = { .idx = SUN8x16_IDX, .name ="SUN8x16" , .width =8 , .height =16 , - .data = fontdata_sun8x16, + .data = fontdata_sun8x16.data, #ifdef __sparc__ .pref =10 , #else
lib/fonts/font_ter16x32.c +4 -5
@@ -4,8 +4,8 @@#define FONTDATAMAX 16384 -static const unsigned char fontdata_ter16x32[FONTDATAMAX ] = { - +static struct font_data fontdata_ter16x32 = { + {0 ,0 ,FONTDATAMAX ,0 }, {0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7f ,0xfc ,0x7f ,0xfc ,0x70 ,0x1c ,0x70 ,0x1c ,0x70 ,0x1c ,0x70 ,0x1c ,
@@ -2054,8 +2054,7 @@ static const unsigned char fontdata_ter16x32[FONTDATAMAX] = {0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 255 */ - -}; +} }; const struct font_desc font_ter_16x32 = {
@@ -2063,7 +2062,7 @@ const struct font_desc font_ter_16x32 = { .name = "TER16x32", .width = 16, .height = 32, - .data = fontdata_ter16x32, + .data = fontdata_ter16x32.data,#ifdef __sparc__ .pref = 5,#else
mm/khugepaged.c +23 -2
@@ -54,6 +54,9 @@ enum scan_result {#define CREATE_TRACE_POINTS #include <trace/events/huge_memory.h> +static struct task_struct *khugepaged_thread__read_mostly ; +static DEFINE_MUTEX (khugepaged_mutex); +/* default scan 8*512 pte (or vmas) every 30 second */ static unsigned int khugepaged_pages_to_scan__read_mostly ;static unsigned int khugepaged_pages_collapsed;
@@ -832,6 +835,18 @@ static struct page *khugepaged_alloc_hugepage(bool *wait)static bool khugepaged_prealloc_page (struct page **hpage,bool *wait) { +/* +* If the hpage allocated earlier was briefly exposed in page cache +* before collapse_file() failed, it is possible that racing lookups +* have not yet completed, and would then be unpleasantly surprised by +* finding the hpage reused for the same mapping at a different offset. +* Just release the previous allocation if there is any danger of that. +*/ +if (*hpage &&page_count (*hpage) >1 ) { +put_page (*hpage); + *hpage =NULL ; + } +if (!*hpage) *hpage =khugepaged_alloc_hugepage (wait);
@@ -2165,8 +2180,6 @@ static void set_recommended_min_free_kbytes(void)int start_stop_khugepaged (void ) { -static struct task_struct *khugepaged_thread__read_mostly ; -static DEFINE_MUTEX (khugepaged_mutex);int err =0 ;mutex_lock (&khugepaged_mutex);
@@ -2193,3 +2206,11 @@ int start_stop_khugepaged(void)mutex_unlock (&khugepaged_mutex);return err; } + +void khugepaged_min_free_kbytes_update (void ) +{ +mutex_lock (&khugepaged_mutex); +if (khugepaged_enabled () && khugepaged_thread) +set_recommended_min_free_kbytes (); +mutex_unlock (&khugepaged_mutex); +}
mm/page_alloc.c +3 -0
@@ -68,6 +68,7 @@#include <linux/lockdep.h> #include <linux/nmi.h> #include <linux/psi.h> +#include <linux/khugepaged.h> #include <asm/sections.h> #include <asm/tlbflush.h>
@@ -7870,6 +7871,8 @@ int __meminit init_per_zone_wmark_min(void)setup_min_slab_ratio ();#endif +khugepaged_min_free_kbytes_update (); +return 0 ; }postcore_initcall (init_per_zone_wmark_min)
net/core/skbuff.c +2 -2
@@ -5515,7 +5515,7 @@ int skb_mpls_push(struct sk_buff *skb, __be32 mpls_lse, __be16 mpls_proto, lse->label_stack_entry = mpls_lse;skb_postpush_rcsum (skb, lse,MPLS_HLEN ); -if (ethernet) +if (ethernet && mac_len >=ETH_HLEN )skb_mod_eth_type (skb,eth_hdr (skb), mpls_proto); skb->protocol = mpls_proto;
@@ -5555,7 +5555,7 @@ int skb_mpls_pop(struct sk_buff *skb, __be16 next_proto, int mac_len,skb_reset_mac_header (skb);skb_set_network_header (skb, mac_len); -if (ethernet) { +if (ethernet && mac_len >=ETH_HLEN ) {struct ethhdr *hdr;/* use mpls_hdr() to get ethertype to account for VLANs. */
net/ipv4/tcp.c +2 -1
@@ -971,7 +971,8 @@ ssize_t do_tcp_sendpages(struct sock *sk, struct page *page, int offset,long timeo =sock_sndtimeo (sk, flags &MSG_DONTWAIT );if (IS_ENABLED (CONFIG_DEBUG_VM ) && -WARN_ONCE (PageSlab (page),"page must not be a Slab one" )) +WARN_ONCE (!sendpage_ok (page), +"page must not be a Slab one and have page_count > 0" ))return -EINVAL ;/* Wait for a connection to finish. One exception is TCP Fast Open
net/ipv4/tcp_ipv4.c +3 -3
@@ -1719,12 +1719,12 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)__skb_pull (skb, hdrlen);if (skb_try_coalesce (tail, skb, &fragstolen, &delta)) { - thtail->window = th->window; -TCP_SKB_CB (tail)->end_seq =TCP_SKB_CB (skb)->end_seq; -if (after (TCP_SKB_CB (skb)->ack_seq,TCP_SKB_CB (tail)->ack_seq)) +if (likely (!before (TCP_SKB_CB (skb)->ack_seq,TCP_SKB_CB (tail)->ack_seq))) {TCP_SKB_CB (tail)->ack_seq =TCP_SKB_CB (skb)->ack_seq; + thtail->window = th->window; + }/* We have to update both TCP_SKB_CB(tail)->tcp_flags and * thtail->fin, so that the fast path in tcp_rcv_established()
net/openvswitch/conntrack.c +13 -9
@@ -905,15 +905,19 @@ static int ovs_ct_nat(struct net *net, struct sw_flow_key *key, } err =ovs_ct_nat_execute (skb, ct, ctinfo, &info->range, maniptype); -if (err ==NF_ACCEPT && - ct->status &IPS_SRC_NAT && ct->status &IPS_DST_NAT ) { -if (maniptype ==NF_NAT_MANIP_SRC ) - maniptype =NF_NAT_MANIP_DST ; -else - maniptype =NF_NAT_MANIP_SRC ; - - err =ovs_ct_nat_execute (skb, ct, ctinfo, &info->range, - maniptype); +if (err ==NF_ACCEPT && ct->status &IPS_DST_NAT ) { +if (ct->status &IPS_SRC_NAT ) { +if (maniptype ==NF_NAT_MANIP_SRC ) + maniptype =NF_NAT_MANIP_DST ; +else + maniptype =NF_NAT_MANIP_SRC ; + + err =ovs_ct_nat_execute (skb, ct, ctinfo, &info->range, + maniptype); + }else if (CTINFO2DIR (ctinfo) ==IP_CT_DIR_ORIGINAL ) { + err =ovs_ct_nat_execute (skb, ct, ctinfo,NULL , +NF_NAT_MANIP_SRC ); + } }/* Mark NAT done if successful and update the flow key. */
net/rxrpc/conn_event.c +3 -3
@@ -341,18 +341,18 @@ static int rxrpc_process_event(struct rxrpc_connection *conn,return ret;spin_lock (&conn->channel_lock); -spin_lock (&conn->state_lock); +spin_lock_bh (&conn->state_lock);if (conn->state ==RXRPC_CONN_SERVICE_CHALLENGING ) { conn->state =RXRPC_CONN_SERVICE ; -spin_unlock (&conn->state_lock); +spin_unlock_bh (&conn->state_lock);for (loop =0 ; loop <RXRPC_MAXCALLS ; loop++)rxrpc_call_is_secure (rcu_dereference_protected ( conn->channels[loop].call,lockdep_is_held (&conn->channel_lock))); }else { -spin_unlock (&conn->state_lock); +spin_unlock_bh (&conn->state_lock); }spin_unlock (&conn->channel_lock);
net/rxrpc/key.c +14 -6
@@ -903,7 +903,7 @@ int rxrpc_request_key(struct rxrpc_sock *rx, char __user *optval, int optlen)_enter ("" ); -if (optlen <=0 || optlen >PAGE_SIZE -1 ) +if (optlen <=0 || optlen >PAGE_SIZE -1 || rx->securities)return -EINVAL ; description =memdup_user_nul (optval, optlen);
@@ -941,7 +941,7 @@ int rxrpc_server_keyring(struct rxrpc_sock *rx, char __user *optval,if (IS_ERR (description))return PTR_ERR (description); - key =request_key_net (&key_type_keyring, description,sock_net (&rx->sk),NULL ); + key =request_key (&key_type_keyring, description,NULL );if (IS_ERR (key)) {kfree (description);_leave (" = %ld" ,PTR_ERR (key));
@@ -1073,7 +1073,7 @@ static long rxrpc_read(const struct key *key,switch (token->security_index) {case RXRPC_SECURITY_RXKAD : - toksize +=9 *4 ;/* viceid, kvno, key*2 + len, begin, + toksize +=8 *4 ;/* viceid, kvno, key*2, begin, * end, primary, tktlen */ toksize +=RND (token->kad->ticket_len);break ;
@@ -1108,7 +1108,8 @@ static long rxrpc_read(const struct key *key,break ;default :/* we have a ticket we can't encode */ -BUG (); +pr_err ("Unsupported key token type (%u)\n" , + token->security_index);continue ; }
@@ -1139,6 +1140,14 @@ static long rxrpc_read(const struct key *key,memcpy ((u8 *)xdr + _l, &zero,4 - (_l &3 )); \ xdr += (_l +3 ) >>2 ; \ } while(0) +#define ENCODE_BYTES (l, s) \ + do { \ + u32 _l = (l); \ + memcpy(xdr, (s), _l); \ + if (_l & 3) \ + memcpy((u8 *)xdr + _l, &zero, 4 - (_l & 3)); \ + xdr += (_l + 3) >> 2; \ + } while(0)#define ENCODE64 (x) \ do { \ __be64 y = cpu_to_be64(x); \
@@ -1166,7 +1175,7 @@ static long rxrpc_read(const struct key *key,case RXRPC_SECURITY_RXKAD :ENCODE (token->kad->vice_id);ENCODE (token->kad->kvno); -ENCODE_DATA (8 , token->kad->session_key); +ENCODE_BYTES (8 , token->kad->session_key);ENCODE (token->kad->start);ENCODE (token->kad->expiry);ENCODE (token->kad->primary_flag);
@@ -1216,7 +1225,6 @@ static long rxrpc_read(const struct key *key,break ;default : -BUG ();break ; }
net/sched/act_api.c +34 -18
88 lines not on this page · raw message
net/sched/act_bpf.c +1 -3
@@ -361,9 +361,7 @@ static int tcf_bpf_init(struct net *net, struct nlattr *nla,if (goto_ch)tcf_chain_put_by_act (goto_ch); -if (res ==ACT_P_CREATED ) { -tcf_idr_insert (tn, *act); - }else { +if (res !=ACT_P_CREATED ) {/* make sure the program being replaced is no longer executing */ synchronize_rcu ();tcf_bpf_cfg_cleanup (&old);
net/sched/act_connmark.c +0 -1
@@ -139,7 +139,6 @@ static int tcf_connmark_init(struct net *net, struct nlattr *nla, ci->net = net; ci->zone = parm->zone; -tcf_idr_insert (tn, *a); ret =ACT_P_CREATED ; }else if (ret >0 ) { ci =to_connmark (*a);
net/sched/act_csum.c +0 -3
@@ -110,9 +110,6 @@ static int tcf_csum_init(struct net *net, struct nlattr *nla,if (params_new)kfree_rcu (params_new, rcu); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a); -return ret; put_chain:if (goto_ch)
net/sched/act_ct.c +0 -2
@@ -740,8 +740,6 @@ static int tcf_ct_init(struct net *net, struct nlattr *nla,tcf_chain_put_by_act (goto_ch);if (params)call_rcu (¶ms->rcu, tcf_ct_params_free); -if (res ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return res;
net/sched/act_ctinfo.c +0 -3
@@ -269,9 +269,6 @@ static int tcf_ctinfo_init(struct net *net, struct nlattr *nla,if (cp_new)kfree_rcu (cp_new, rcu); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a); -return ret; put_chain:
net/sched/act_gact.c +0 -2
@@ -139,8 +139,6 @@ static int tcf_gact_init(struct net *net, struct nlattr *nla,if (goto_ch)tcf_chain_put_by_act (goto_ch); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; release_idr:tcf_idr_release (*a, bind);
net/sched/act_ife.c +0 -3
@@ -626,9 +626,6 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,if (p)kfree_rcu (p, rcu); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a); -return ret; metadata_parse_err:if (goto_ch)
net/sched/act_ipt.c +0 -2
@@ -189,8 +189,6 @@ static int __tcf_ipt_init(struct net *net, unsigned int id, struct nlattr *nla, ipt->tcfi_t = t; ipt->tcfi_hook = hook;spin_unlock_bh (&ipt->tcf_lock); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; err3:
net/sched/act_mirred.c +0 -2
@@ -194,8 +194,6 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla,spin_lock (&mirred_list_lock);list_add (&m->tcfm_list, &mirred_list);spin_unlock (&mirred_list_lock); - -tcf_idr_insert (tn, *a); }return ret;
net/sched/act_mpls.c +0 -2
@@ -273,8 +273,6 @@ static int tcf_mpls_init(struct net *net, struct nlattr *nla,if (p)kfree_rcu (p, rcu); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; put_chain:if (goto_ch)
net/sched/act_nat.c +0 -3
@@ -93,9 +93,6 @@ static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est,if (goto_ch)tcf_chain_put_by_act (goto_ch); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a); -return ret; release_idr:tcf_idr_release (*a, bind);
net/sched/act_pedit.c +0 -2
@@ -237,8 +237,6 @@ static int tcf_pedit_init(struct net *net, struct nlattr *nla,spin_unlock_bh (&p->tcf_lock);if (goto_ch)tcf_chain_put_by_act (goto_ch); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; put_chain:
net/sched/act_police.c +0 -2
@@ -201,8 +201,6 @@ static int tcf_police_init(struct net *net, struct nlattr *nla,if (new)kfree_rcu (new, rcu); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; failure:
net/sched/act_sample.c +0 -2
@@ -116,8 +116,6 @@ static int tcf_sample_init(struct net *net, struct nlattr *nla,if (goto_ch)tcf_chain_put_by_act (goto_ch); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; put_chain:if (goto_ch)
net/sched/act_simple.c +0 -2
@@ -156,8 +156,6 @@ static int tcf_simp_init(struct net *net, struct nlattr *nla, goto release_idr; } -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; put_chain:if (goto_ch)
net/sched/act_skbedit.c +0 -2
@@ -214,8 +214,6 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla,if (goto_ch)tcf_chain_put_by_act (goto_ch); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; put_chain:if (goto_ch)
net/sched/act_skbmod.c +0 -2
@@ -190,8 +190,6 @@ static int tcf_skbmod_init(struct net *net, struct nlattr *nla,if (goto_ch)tcf_chain_put_by_act (goto_ch); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; put_chain:if (goto_ch)
net/sched/act_tunnel_key.c +0 -3
@@ -392,9 +392,6 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,if (goto_ch)tcf_chain_put_by_act (goto_ch); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a); -return ret; put_chain:
net/sched/act_vlan.c +0 -2
@@ -228,8 +228,6 @@ static int tcf_vlan_init(struct net *net, struct nlattr *nla,if (p)kfree_rcu (p, rcu); -if (ret ==ACT_P_CREATED ) -tcf_idr_insert (tn, *a);return ret; put_chain:if (goto_ch)
net/sctp/auth.c +1 -0
@@ -494,6 +494,7 @@ int sctp_auth_init_hmacs(struct sctp_endpoint *ep, gfp_t gfp) out_err:/* Clean up any successful allocations */ sctp_auth_destroy_hmacs (ep->auth_hmacs); + ep->auth_hmacs =NULL ;return -ENOMEM ; }
net/tls/tls_sw.c +7 -2
@@ -2137,10 +2137,15 @@ void tls_sw_release_resources_tx(struct sock *sk)struct tls_context *tls_ctx =tls_get_ctx (sk);struct tls_sw_context_tx *ctx =tls_sw_ctx_tx (tls_ctx);struct tls_rec *rec, *tmp; +int pending;/* Wait for any pending async encryptions to complete */ -smp_store_mb (ctx->async_notify, true); -if (atomic_read (&ctx->encrypt_pending)) +spin_lock_bh (&ctx->encrypt_compl_lock); + ctx->async_notify = true; + pending =atomic_read (&ctx->encrypt_pending); +spin_unlock_bh (&ctx->encrypt_compl_lock); + +if (pending)crypto_wait_req (-EINPROGRESS , &ctx->async_wait);tls_tx_records (sk,-1 );
net/wireless/nl80211.c +3 -0
@@ -3975,6 +3975,9 @@ static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info)if (err)return err; +if (key.idx <0 ) +return -EINVAL ; +if (info->attrs[NL80211_ATTR_MAC ]) mac_addr =nla_data (info->attrs[NL80211_ATTR_MAC ]);
net/xfrm/xfrm_interface.c +1 -1
@@ -293,7 +293,7 @@ xfrmi_xmit2(struct sk_buff *skb, struct net_device *dev, struct flowi *fl) } mtu =dst_mtu (dst); -if (!skb->ignore_df && skb->len > mtu) { +if (skb->len > mtu) {skb_dst_update_pmtu_no_confirm (skb, mtu);if (skb->protocol ==htons (ETH_P_IPV6 )) {
net/xfrm/xfrm_state.c +37 -5
90 lines not on this page · raw message
tools/perf/builtin-top.c +3 -1
@@ -683,7 +683,9 @@ static void *display_thread(void *arg) delay_msecs = top->delay_secs *MSEC_PER_SEC ;set_term_quiet_input (&save);/* trash return*/ -getc (stdin); +clearerr (stdin); +if (poll (&stdin_poll,1 ,0 ) >0 ) +getc (stdin);while (!done) {perf_top__print_sym_table (top);
tools/perf/tests/topology.c +4 -8
@@ -33,10 +33,8 @@ static int session_write_header(char *path) {struct perf_session *session;struct perf_data data = { - .file = { - .path = path, - }, - .mode =PERF_DATA_MODE_WRITE , + .path = path, + .mode =PERF_DATA_MODE_WRITE , }; session =perf_session__new (&data, false,NULL );
@@ -63,10 +61,8 @@ static int check_cpu_topology(char *path, struct perf_cpu_map *map) {struct perf_session *session;struct perf_data data = { - .file = { - .path = path, - }, - .mode =PERF_DATA_MODE_READ , + .path = path, + .mode =PERF_DATA_MODE_READ , };int i;