Linux 6.1.164
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.164 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/PCI/endpoint/pci-ntb-howto.rst | 11 Documentation/PCI/endpoint/pci-vntb-howto.rst | 13 Makefile | 2 drivers/acpi/apei/ghes.c | 10 drivers/base/cacheinfo.c | 19 drivers/bus/fsl-mc/fsl-mc-bus.c | 10 drivers/clk/mediatek/clk-mtk.c | 7 drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c | 2 drivers/crypto/omap-crypto.c | 2 drivers/crypto/virtio/virtio_crypto_core.c | 5 drivers/crypto/virtio/virtio_crypto_skcipher_algs.c | 2 drivers/gpio/gpio-omap.c | 22 drivers/gpio/gpio-sprd.c | 8 drivers/gpio/gpiolib-acpi.c | 1 drivers/gpu/drm/tegra/hdmi.c | 4 drivers/gpu/drm/tegra/sor.c | 4 drivers/net/bareudp.c | 4 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 11 drivers/net/geneve.c | 4 drivers/net/phy/sfp.c | 2 drivers/net/wireguard/device.c | 1 drivers/pci/endpoint/pci-ep-cfs.c | 54 - drivers/platform/x86/classmate-laptop.c | 32 + drivers/platform/x86/panasonic-laptop.c | 4 drivers/scsi/qla2xxx/qla_bsg.c | 28 drivers/scsi/qla2xxx/qla_def.h | 17 drivers/scsi/qla2xxx/qla_gbl.h | 9 drivers/scsi/qla2xxx/qla_gs.c | 581 ++++++-------------- drivers/scsi/qla2xxx/qla_init.c | 40 - drivers/scsi/qla2xxx/qla_isr.c | 19 drivers/scsi/qla2xxx/qla_os.c | 18 drivers/usb/serial/option.c | 6 drivers/video/fbdev/riva/riva_hw.c | 3 drivers/video/fbdev/smscufx.c | 8 fs/btrfs/block-group.c | 6 fs/btrfs/space-info.c | 22 fs/btrfs/space-info.h | 6 fs/f2fs/data.c | 12 fs/f2fs/node.c | 14 fs/f2fs/sysfs.c | 61 +- fs/nfsd/nfsctl.c | 9 fs/nfsd/stats.c | 4 fs/nfsd/stats.h | 2 fs/nilfs2/sufile.c | 4 fs/romfs/super.c | 5 fs/smb/client/cached_dir.h | 8 fs/smb/client/cifs_dfs_ref.c | 16 fs/smb/server/server.c | 6 fs/smb/server/smb2pdu.c | 10 fs/smb/server/transport_tcp.c | 3 include/net/ip_tunnels.h | 13 include/net/xdp_sock.h | 2 include/net/xsk_buff_pool.h | 2 kernel/cgroup/cpuset.c | 2 net/devlink/leftover.c | 4 net/dsa/dsa2.c | 21 net/mptcp/pm_netlink.c | 16 net/mptcp/protocol.c | 24 net/mptcp/protocol.h | 3 net/wireless/reg.c | 5 net/xdp/xsk.c | 6 net/xdp/xsk_buff_pool.c | 1 sound/pci/hda/patch_realtek.c | 5 sound/soc/amd/yc/acp6x-mach.c | 7 sound/soc/codecs/cs35l45.c | 2 sound/soc/fsl/fsl_xcvr.c | 3 sound/soc/intel/boards/sof_es8336.c | 9 tools/testing/selftests/net/mptcp/mptcp_join.sh | 111 +++ tools/testing/selftests/net/mptcp/pm_netlink.sh | 4 tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 11 70 files changed, 780 insertions(+), 622 deletions(-)
Alban Bedel (1):
gpiolib: acpi: Fix gpio count with string references
Alexander Wetzel (1):
wifi: cfg80211: Add missing lock in cfg80211_check_and_end_cac()
Anatolii Shirykalov (1):
ASoC: amd: yc: Add ASUS ExpertBook PM1503CDA to quirks list
Anil Gurumurthy (5):
scsi: qla2xxx: Validate sp before freeing associated memory
scsi: qla2xxx: Delay module unload while fabric scan in progress
scsi: qla2xxx: Query FW again before proceeding with login
scsi: qla2xxx: Fix bsg_done() causing double free
scsi: qla2xxx: Free sp in error path to fix system crash
Bibo Mao (2):
crypto: virtio - Add spinlock protection with virtqueue notification
crypto: virtio - Remove duplicated virtqueue_kick in virtio_crypto_skcipher_crypt_req
Boris Burkov (1):
btrfs: fix racy bitfield write in btrfs_clear_space_info_full()
Bosi Zhang (1):
clk: mediatek: fix of_iomap memory leak
Brahmajit Das (1):
drm/tegra: hdmi: sor: Fix error: variable ‘j’ set but not used
Chao Yu (1):
f2fs: fix to avoid UAF in f2fs_write_end_io()
Chelsy Ratnawat (1):
bus: fsl-mc: Replace snprintf and sprintf with sysfs_emit in sysfs show functions
Chen Ridong (1):
cpuset: Fix missing adaptation for cpuset_is_populated
Christophe JAILLET (1):
PCI: endpoint: Remove unused field in struct pci_epf_group
Damien Le Moal (1):
PCI: endpoint: Automatically create a function specific attributes group
Daniel Borkmann (1):
Revert "wireguard: device: enable threaded NAPI"
Danilo Krummrich (1):
gpio: omap: do not register driver in probe()
Deepanshu Kartikey (1):
romfs: check sb_set_blocksize() return value
Edward Adam Davis (1):
nilfs2: Fix potential block overflow that cause system hang
Eric Dumazet (1):
mptcp: fix race in mptcp_pm_nl_flush_addrs_doit()
Fabio Porcedda (1):
USB: serial: option: add Telit FN920C04 RNDIS compositions
Greg Kroah-Hartman (2):
fbdev: smscufx: properly copy ioctl memory to kernelspace Linux 6.1.164
Guangshuo Li (1):
fbdev: rivafb: fix divide error in nv3_arb()
Gui-Dong Han (1):
bus: fsl-mc: fix use-after-free in driver_override_show()
Henrique Carvalho (2):
smb: client: split cached_fid bitfields to avoid shared-byte RMW races
smb: server: fix leak of active_num_conn in ksmbd_tcp_new_connection()
Jeff Layton (1):
nfsd: don't ignore the return code of svc_proc_register()
Kees Cook (1):
crypto: omap - Allocate OMAP_CRYPTO_FORCE_COPY scatterlists correctly
Liu Song (1):
PCI: endpoint: Avoid creating sub-groups asynchronously
Marek Behún (1):
net: sfp: Fix quirk for Ubiquiti U-Fiber Instant SFP module
Matthieu Baerts (NGI0) (4):
selftests: mptcp: pm: ensure unknown flags are ignored
selftests: mptcp: check no dup close events after error
selftests: mptcp: check subflow errors in close events
selftests: mptcp: join: fix local endp not being tracked
Menglong Dong (1):
net: tunnel: make skb_vlan_inet_prepare() return drop reasons
Namjae Jeon (2):
ksmbd: fix infinite loop caused by next_smb2_rcv_hdr_off reset in error paths
ksmbd: set ATTR_CTIME flags when setting mtime
Paolo Abeni (2):
mptcp: schedule rtx timer only after pushing data
mptcp: ensure context reset on disconnect()
Paulo Alcantara (1):
smb: client: set correct id, uid and cruid for multiuser automounts
Pierre Gondois (2):
cacheinfo: Decrement refcount in cache_setup_of_node()
cacheinfo: Remove of_node_put() for fw_token
Qingfang Deng (1):
net: stmmac: Fix accessing freed irq affinity_hint
Quinn Tran (2):
scsi: qla2xxx: Remove dead code (GNN ID)
scsi: qla2xxx: Reduce fabric scan duplicate code
Rafael J. Wysocki (2):
platform/x86: classmate-laptop: Add missing NULL pointer checks platform/x86: panasonic-laptop: Fix sysfs group leak in error path
Ricardo Rivera-Matos (1):
ASoC: cs35l45: Corrects ASP_TX5 DAPM widget channel
Shay Drory (1):
devlink: rate: Unset parent pointer in devl_rate_nodes_destroy
Shreyas Deodhar (1):
scsi: qla2xxx: Allow recovery for tape devices
Shuai Xue (1):
ACPI: APEI: send SIGBUS to current task if synchronous memory error not recovered
Tagir Garaev (1):
ASoC: Intel: sof_es8336: Add DMI quirk for Huawei BOD-WXX9
Thorsten Blum (1):
crypto: octeontx - Fix length check to avoid truncation in ucode_load_store
Tim Guttzeit (1):
ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU
Vladimir Oltean (1):
net: dsa: free routing table on probe failure
Xuewen Yan (1):
gpio: sprd: Change sprd_gpio lock to raw_spin_lock
Yongpeng Yang (2):
f2fs: fix IS_CHECKPOINTED flag inconsistency issue caused by concurrent atomic commit and checkpoint writes
f2fs: fix out-of-bounds access in sysfs attribute read/write
Zhang Heng (1):
ALSA: hda/realtek: Add quirk for Inspur S14-G1
Ziyi Guo (1):
ASoC: fsl_xcvr: fix missing lock in fsl_xcvr_mode_put()
e.kubanski (1):
xsk: Fix race condition in AF_XDP generic RX path
Greg Kroah-Hartman
maintainerDocumentation/PCI/endpoint/pci-ntb-howto.rst +4 -7
@@ -88,13 +88,10 @@ commands can be used:: # echo 0x104c > functions/pci_epf_ntb/func1/vendorid # echo 0xb00d > functions/pci_epf_ntb/func1/deviceid -In order to configure NTB specific attributes, a new sub-directory to func1 -should be created:: - - # mkdir functions/pci_epf_ntb/func1/pci_epf_ntb.0/ - -The NTB function driver will populate this directory with various attributes -that can be configured by the user:: +The PCI endpoint framework also automatically creates a sub-directory in the +function attribute directory. This sub-directory has the same name as the name +of the function device and is populated with the following NTB specific +attributes that can be configured by the user:: # ls functions/pci_epf_ntb/func1/pci_epf_ntb.0/ db_count mw1 mw2 mw3 mw4 num_mws
Documentation/PCI/endpoint/pci-vntb-howto.rst +5 -8
@@ -84,13 +84,10 @@ commands can be used:: # echo 0x1957 > functions/pci_epf_vntb/func1/vendorid # echo 0x0809 > functions/pci_epf_vntb/func1/deviceid -In order to configure NTB specific attributes, a new sub-directory to func1 -should be created:: - - # mkdir functions/pci_epf_vntb/func1/pci_epf_vntb.0/ - -The NTB function driver will populate this directory with various attributes -that can be configured by the user:: +The PCI endpoint framework also automatically creates a sub-directory in the +function attribute directory. This sub-directory has the same name as the name +of the function device and is populated with the following NTB specific +attributes that can be configured by the user:: # ls functions/pci_epf_vntb/func1/pci_epf_vntb.0/ db_count mw1 mw2 mw3 mw4 num_mws
@@ -103,7 +100,7 @@ A sample configuration for NTB function is given below:: # echo 1 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/num_mws # echo 0x100000 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/mw1 -A sample configuration for virtual NTB driver for virutal PCI bus:: +A sample configuration for virtual NTB driver for virtual PCI bus:: # echo 0x1957 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vntb_vid # echo 0x080A > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vntb_pid
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 163 +SUBLEVEL = 164 EXTRAVERSION = NAME = Curry Ramen
drivers/acpi/apei/ghes.c +10 -0
@@ -684,6 +684,16 @@ static bool ghes_do_proc(struct ghes *ghes, } } +/* +* If no memory failure work is queued for abnormal synchronous +* errors, do a force kill. +*/ +if (sync && !queued) { +pr_err (GHES_PFX "%s:%d: synchronous unrecoverable error (SIGBUS)\n" , + current->comm,task_pid_nr (current)); +force_sig (SIGBUS ); + } +return queued; }
drivers/base/cacheinfo.c +11 -8
@@ -195,7 +195,7 @@ static void cache_of_set_props(struct cacheinfo *this_leaf,static int cache_setup_of_node (unsigned int cpu) { -struct device_node *np; +struct device_node *np, *prev;struct cacheinfo *this_leaf;unsigned int index =0 ;
@@ -205,19 +205,24 @@ static int cache_setup_of_node(unsigned int cpu)return -ENOENT ; } + prev = np; +while (index <cache_leaves (cpu)) { this_leaf =per_cpu_cacheinfo_idx (cpu, index); -if (this_leaf->level !=1 ) +if (this_leaf->level !=1 ) { np =of_find_next_cache_node (np); -else - np =of_node_get (np);/* cpu node itself */ -if (!np) -break ; +of_node_put (prev); + prev = np; +if (!np) +break ; + }cache_of_set_props (this_leaf, np); this_leaf->fw_token = np; index++; } +of_node_put (np); +if (index !=cache_leaves (cpu))/* not all OF nodes populated */ return -ENOENT ;
@@ -404,8 +409,6 @@ static void cache_shared_cpu_map_remove(unsigned int cpu) } } } -if (of_have_populated_dt ()) -of_node_put (this_leaf->fw_token); }/* cpu is no longer populated in the shared map */
drivers/bus/fsl-mc/fsl-mc-bus.c +7 -3
@@ -175,8 +175,8 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, {struct fsl_mc_device *mc_dev =to_fsl_mc_device (dev); -return sprintf (buf,"fsl-mc:v%08Xd%s\n" , mc_dev->obj_desc.vendor, - mc_dev->obj_desc.type); +return sysfs_emit (buf,"fsl-mc:v%08Xd%s\n" , mc_dev->obj_desc.vendor, + mc_dev->obj_desc.type); }static DEVICE_ATTR_RO (modalias);
@@ -201,8 +201,12 @@ static ssize_t driver_override_show(struct device *dev, struct device_attribute *attr, char *buf) { struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev); +ssize_t len; -return snprintf (buf,PAGE_SIZE ,"%s\n" , mc_dev->driver_override); +device_lock (dev); + len =sysfs_emit (buf,"%s\n" , mc_dev->driver_override); +device_unlock (dev); +return len; }static DEVICE_ATTR_RW (driver_override);
drivers/clk/mediatek/clk-mtk.c +5 -2
@@ -505,8 +505,10 @@ int mtk_clk_simple_probe(struct platform_device *pdev) num_clks += mcd->num_mux_clks; clk_data =mtk_alloc_clk_data (num_clks); -if (!clk_data) -return -ENOMEM ; +if (!clk_data) { + r = -ENOMEM ; + goto free_base; + }if (mcd->fixed_clks) { r = mtk_clk_register_fixed_clks(mcd->fixed_clks,
@@ -594,6 +596,7 @@ int mtk_clk_simple_probe(struct platform_device *pdev) mcd->num_fixed_clks, clk_data); free_data:mtk_free_clk_data (clk_data); +free_base:if (mcd->shared_io && base)iounmap (base);
drivers/crypto/marvell/octeontx/otx_cptpf_ucode.c +1 -1
@@ -1337,7 +1337,7 @@ static ssize_t ucode_load_store(struct device *dev,int del_grp_idx =-1 ;int ucode_idx =0 ; -if (strlen (buf) >OTX_CPT_UCODE_NAME_LENGTH ) +if (count >=OTX_CPT_UCODE_NAME_LENGTH )return -EINVAL ; eng_grps = container_of(attr, struct otx_cpt_eng_grps, ucode_load_attr);
drivers/crypto/omap-crypto.c +1 -1
@@ -21,7 +21,7 @@ static int omap_crypto_copy_sg_lists(int total, int bs,struct scatterlist *tmp;if (!(flags &OMAP_CRYPTO_FORCE_SINGLE_ENTRY )) { - new_sg =kmalloc_array (n,sizeof (*sg),GFP_KERNEL ); + new_sg =kmalloc_array (n,sizeof (*new_sg),GFP_KERNEL );if (!new_sg)return -ENOMEM ;
drivers/crypto/virtio/virtio_crypto_core.c +5 -0
@@ -77,15 +77,20 @@ static void virtcrypto_done_task(unsigned long data)struct data_queue *data_vq = (struct data_queue *)data;struct virtqueue *vq = data_vq->vq;struct virtio_crypto_request *vc_req; +unsigned long flags;unsigned int len; +spin_lock_irqsave (&data_vq->lock, flags);do {virtqueue_disable_cb (vq);while ((vc_req =virtqueue_get_buf (vq, &len)) !=NULL ) { +spin_unlock_irqrestore (&data_vq->lock, flags);if (vc_req->alg_cb) vc_req->alg_cb (vc_req, len); +spin_lock_irqsave (&data_vq->lock, flags); } }while (!virtqueue_enable_cb (vq)); +spin_unlock_irqrestore (&data_vq->lock, flags); }static void virtcrypto_dataq_callback (struct virtqueue *vq)
drivers/crypto/virtio/virtio_crypto_skcipher_algs.c +0 -2
@@ -556,8 +556,6 @@ int virtio_crypto_skcipher_crypt_req(if (ret <0 )return ret; -virtqueue_kick (data_vq->vq); -return 0 ; }
drivers/gpio/gpio-omap.c +18 -4
@@ -762,10 +762,13 @@ static struct platform_device omap_mpuio_device = {static inline void omap_mpuio_init (struct gpio_bank *bank) { -platform_set_drvdata (&omap_mpuio_device, bank); +static bool registered; -if (platform_driver_register (&omap_mpuio_driver) ==0 ) - (void )platform_device_register (&omap_mpuio_device); +platform_set_drvdata (&omap_mpuio_device, bank); +if (!registered) { + (void )platform_device_register (&omap_mpuio_device); + registered = true; + } }/*---------------------------------------------------------------------*/
@@ -1572,13 +1575,24 @@ static struct platform_driver omap_gpio_driver = {*/ static int __init omap_gpio_drv_reg (void ) { -return platform_driver_register (&omap_gpio_driver); +int ret; + + ret =platform_driver_register (&omap_mpuio_driver); +if (ret) +return ret; + + ret =platform_driver_register (&omap_gpio_driver); +if (ret) +platform_driver_unregister (&omap_mpuio_driver); + +return ret; }postcore_initcall (omap_gpio_drv_reg); static void __exit omap_gpio_exit(void) {platform_driver_unregister (&omap_gpio_driver); +platform_driver_unregister (&omap_mpuio_driver); }module_exit (omap_gpio_exit);
drivers/gpio/gpio-sprd.c +4 -4
@@ -35,7 +35,7 @@struct sprd_gpio {struct gpio_chip chip;void __iomem *base; -spinlock_t lock; +raw_spinlock_t lock;int irq; };
@@ -54,7 +54,7 @@ static void sprd_gpio_update(struct gpio_chip *chip, unsigned int offset,unsigned long flags;u32 tmp; -spin_lock_irqsave (&sprd_gpio->lock, flags); +raw_spin_lock_irqsave (&sprd_gpio->lock, flags); tmp =readl_relaxed (base + reg);if (val)
@@ -63,7 +63,7 @@ static void sprd_gpio_update(struct gpio_chip *chip, unsigned int offset, tmp &= ~BIT (SPRD_GPIO_BIT (offset));writel_relaxed (tmp, base + reg); -spin_unlock_irqrestore (&sprd_gpio->lock, flags); +raw_spin_unlock_irqrestore (&sprd_gpio->lock, flags); }static int sprd_gpio_read (struct gpio_chip *chip,unsigned int offset,u16 reg)
@@ -231,7 +231,7 @@ static int sprd_gpio_probe(struct platform_device *pdev)if (IS_ERR (sprd_gpio->base))return PTR_ERR (sprd_gpio->base); -spin_lock_init (&sprd_gpio->lock); +raw_spin_lock_init (&sprd_gpio->lock); sprd_gpio->chip.label =dev_name (&pdev->dev); sprd_gpio->chip.ngpio =SPRD_GPIO_NR ;
drivers/gpio/gpiolib-acpi.c +1 -0
@@ -1383,6 +1383,7 @@ static int acpi_gpio_package_count(const union acpi_object *obj)while (element < end) {switch (element->type) {case ACPI_TYPE_LOCAL_REFERENCE : +case ACPI_TYPE_STRING : element +=3 ; fallthrough;case ACPI_TYPE_INTEGER :
drivers/gpu/drm/tegra/hdmi.c +2 -2
@@ -654,7 +654,7 @@ static void tegra_hdmi_write_infopack(struct tegra_hdmi *hdmi, const void *data, {const u8 *ptr = data;unsigned long offset; -size_t i, j; +size_t i;u32 value;switch (ptr[0 ]) {
@@ -687,7 +687,7 @@ static void tegra_hdmi_write_infopack(struct tegra_hdmi *hdmi, const void *data,* - subpack_low: bytes 0 - 3 * - subpack_high: bytes 4 - 6 (with byte 7 padded to 0x00) */ -for (i =3 , j =0 ; i < size; i +=7 , j +=8 ) { +for (i =3 ; i < size; i +=7 ) {size_t rem = size - i, num =min_t (size_t, rem,4 ); value =tegra_hdmi_subpack (&ptr[i], num);
drivers/gpu/drm/tegra/sor.c +2 -2
@@ -1860,7 +1860,7 @@ static void tegra_sor_hdmi_write_infopack(struct tegra_sor *sor, {const u8 *ptr = data;unsigned long offset; -size_t i, j; +size_t i;u32 value;switch (ptr[0 ]) {
@@ -1893,7 +1893,7 @@ static void tegra_sor_hdmi_write_infopack(struct tegra_sor *sor,* - subpack_low: bytes 0 - 3 * - subpack_high: bytes 4 - 6 (with byte 7 padded to 0x00) */ -for (i =3 , j =0 ; i < size; i +=7 , j +=8 ) { +for (i =3 ; i < size; i +=7 ) {size_t rem = size - i, num =min_t (size_t, rem,4 ); value =tegra_sor_hdmi_subpack (&ptr[i], num);
drivers/net/bareudp.c +2 -2
@@ -319,7 +319,7 @@ static int bareudp_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be32 saddr;int err; -if (!skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB ))) +if (skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB )))return -EINVAL ;if (!sock)
@@ -385,7 +385,7 @@ static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB ))) +if (skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB )))return -EINVAL ;if (!sock)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +4 -7
@@ -3518,7 +3518,6 @@ static int stmmac_request_irq_multi_msi(struct net_device *dev) {struct stmmac_priv *priv =netdev_priv (dev);enum request_irq_err irq_err; -cpumask_t cpu_mask;int irq_idx =0 ;char *int_name;int ret;
@@ -3630,9 +3629,8 @@ static int stmmac_request_irq_multi_msi(struct net_device *dev) irq_idx = i; goto irq_error; } -cpumask_clear (&cpu_mask); -cpumask_set_cpu (i %num_online_cpus (), &cpu_mask); -irq_set_affinity_hint (priv->rx_irq[i], &cpu_mask); +irq_set_affinity_hint (priv->rx_irq[i], +cpumask_of (i %num_online_cpus ())); }/* Request Tx MSI irq */
@@ -3655,9 +3653,8 @@ static int stmmac_request_irq_multi_msi(struct net_device *dev) irq_idx = i; goto irq_error; } -cpumask_clear (&cpu_mask); -cpumask_set_cpu (i %num_online_cpus (), &cpu_mask); -irq_set_affinity_hint (priv->tx_irq[i], &cpu_mask); +irq_set_affinity_hint (priv->tx_irq[i], +cpumask_of (i %num_online_cpus ())); }return 0 ;
drivers/net/geneve.c +2 -2
@@ -932,7 +932,7 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, inner_proto_inherit)) +if (skb_vlan_inet_prepare (skb, inner_proto_inherit))return -EINVAL ; sport =udp_flow_src_port (geneve->net, skb,1 ,USHRT_MAX , true);
@@ -1031,7 +1031,7 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, inner_proto_inherit)) +if (skb_vlan_inet_prepare (skb, inner_proto_inherit))return -EINVAL ; sport =udp_flow_src_port (geneve->net, skb,1 ,USHRT_MAX , true);
drivers/net/phy/sfp.c +2 -0
@@ -376,6 +376,8 @@ static void sfp_quirk_ubnt_uf_instant(const struct sfp_eeprom_id *id,*/ linkmode_zero (modes);linkmode_set_bit (ETHTOOL_LINK_MODE_1000baseX_Full_BIT, modes); +phy_interface_zero (interfaces); +__set_bit (PHY_INTERFACE_MODE_1000BASEX , interfaces); }#define SFP_QUIRK (_v, _p, _m, _f) \
drivers/net/wireguard/device.c +0 -1
@@ -368,7 +368,6 @@ static int wg_newlink(struct net *src_net, struct net_device *dev,if (ret <0 ) goto err_free_handshake_queue; -dev_set_threaded (dev, true); ret =register_netdevice (dev);if (ret <0 ) goto err_uninit_ratelimiter;
drivers/pci/endpoint/pci-ep-cfs.c +23 -31
99 lines not on this page · raw message
drivers/platform/x86/classmate-laptop.c +32 -0
@@ -208,7 +208,12 @@ static ssize_t cmpc_accel_sensitivity_show_v4(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ;return sprintf (buf,"%d\n" , accel->sensitivity); }
@@ -225,7 +230,12 @@ static ssize_t cmpc_accel_sensitivity_store_v4(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ; r =kstrtoul (buf,0 , &sensitivity);if (r)
@@ -257,7 +267,12 @@ static ssize_t cmpc_accel_g_select_show_v4(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ;return sprintf (buf,"%d\n" , accel->g_select); }
@@ -274,7 +289,12 @@ static ssize_t cmpc_accel_g_select_store_v4(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ; r =kstrtoul (buf,0 , &g_select);if (r)
@@ -303,6 +323,8 @@ static int cmpc_accel_open_v4(struct input_dev *input) acpi =to_acpi_device (input->dev.parent); accel =dev_get_drvdata (&input->dev); +if (!accel) +return -ENXIO ;cmpc_accel_set_sensitivity_v4 (acpi->handle, accel->sensitivity);cmpc_accel_set_g_select_v4 (acpi->handle, accel->g_select);
@@ -551,7 +573,12 @@ static ssize_t cmpc_accel_sensitivity_show(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ;return sprintf (buf,"%d\n" , accel->sensitivity); }
@@ -568,7 +595,12 @@ static ssize_t cmpc_accel_sensitivity_store(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ; r =kstrtoul (buf,0 , &sensitivity);if (r)
drivers/platform/x86/panasonic-laptop.c +3 -1
@@ -1077,7 +1077,7 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) PLATFORM_DEVID_NONE, NULL, 0);if (IS_ERR (pcc->platform)) { result =PTR_ERR (pcc->platform); - goto out_backlight; + goto out_sysfs; } result =device_create_file (&pcc->platform->dev, &dev_attr_cdpower);
@@ -1093,6 +1093,8 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) out_platform:platform_device_unregister (pcc->platform); +out_sysfs: +sysfs_remove_group (&device->dev.kobj, &pcc_attr_group); out_backlight:backlight_device_unregister (pcc->backlight); out_input:
drivers/scsi/qla2xxx/qla_bsg.c +17 -11
@@ -1546,8 +1546,9 @@ qla2x00_update_optrom(struct bsg_job *bsg_job) ha->optrom_buffer =NULL ; ha->optrom_state =QLA_SWAITING ;mutex_unlock (&ha->optrom_mutex); -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!rval) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len);return rval; }
@@ -2612,8 +2613,9 @@ qla2x00_manage_host_stats(struct bsg_job *bsg_job) sizeof(struct ql_vnd_mng_host_stats_resp)); bsg_reply->result =DID_OK ; -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len);return ret; }
@@ -2702,8 +2704,9 @@ qla2x00_get_host_stats(struct bsg_job *bsg_job) bsg_job->reply_payload.sg_cnt, data, response_len); bsg_reply->result =DID_OK ; -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len);kfree (data); host_stat_out:
@@ -2802,8 +2805,9 @@ qla2x00_get_tgt_stats(struct bsg_job *bsg_job) bsg_job->reply_payload.sg_cnt, data, response_len); bsg_reply->result =DID_OK ; -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len); tgt_stat_out:kfree (data);
@@ -2864,8 +2868,9 @@ qla2x00_manage_host_port(struct bsg_job *bsg_job) bsg_job->reply_payload.sg_cnt, &rsp_data, sizeof(struct ql_vnd_mng_host_port_resp)); bsg_reply->result =DID_OK ; -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len);return ret; }
@@ -3240,7 +3245,8 @@ int qla2x00_mailbox_passthru(struct bsg_job *bsg_job) bsg_job->reply_len =sizeof (*bsg_job->reply); bsg_reply->result =DID_OK <<16 ; -bsg_job_done (bsg_job, bsg_reply->result, bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, bsg_reply->reply_payload_rcv_len);kfree (req_data);
drivers/scsi/qla2xxx/qla_def.h +11 -6
@@ -2499,7 +2499,6 @@ struct ct_sns_desc {enum discovery_state {DSC_DELETED , -DSC_GNN_ID ,DSC_GNL ,DSC_LOGIN_PEND ,DSC_LOGIN_FAILED ,
@@ -2712,7 +2711,6 @@ extern const char *const port_state_str[5];static const char *const port_dstate_str[] = { [DSC_DELETED ] ="DELETED" , - [DSC_GNN_ID ] ="GNN_ID" , [DSC_GNL ] ="GNL" , [DSC_LOGIN_PEND ] ="LOGIN_PEND" , [DSC_LOGIN_FAILED ] ="LOGIN_FAILED" ,
@@ -3275,11 +3273,20 @@ struct fab_scan_rp {u8 node_name[8 ]; }; +enum scan_step { +FAB_SCAN_START , +FAB_SCAN_GPNFT_FCP , +FAB_SCAN_GNNFT_FCP , +FAB_SCAN_GPNFT_NVME , +FAB_SCAN_GNNFT_NVME , +}; +struct fab_scan {struct fab_scan_rp *l;u32 size;u32 rscn_gen_start;u32 rscn_gen_end; +enum scan_step step;u16 scan_retry;#define MAX_SCAN_RETRIES 5enum scan_flags_t scan_flags;
@@ -3505,10 +3512,8 @@ enum qla_work_type {QLA_EVT_RELOGIN ,QLA_EVT_ASYNC_PRLO ,QLA_EVT_ASYNC_PRLO_DONE , -QLA_EVT_GPNFT , -QLA_EVT_GPNFT_DONE , -QLA_EVT_GNNFT_DONE , -QLA_EVT_GNNID , +QLA_EVT_SCAN_CMD , +QLA_EVT_SCAN_FINISH ,QLA_EVT_GFPNID ,QLA_EVT_SP_RETRY , QLA_EVT_IIDMA,
drivers/scsi/qla2xxx/qla_gbl.h +3 -6
@@ -736,12 +736,9 @@ void qla24xx_handle_gpsc_event(scsi_qla_host_t *, struct event_arg *);int qla2x00_mgmt_svr_login (scsi_qla_host_t *);void qla24xx_handle_gffid_event (scsi_qla_host_t *vha,struct event_arg *ea);int qla24xx_async_gffid (scsi_qla_host_t *vha,fc_port_t *fcport,bool ); -int qla24xx_async_gpnft (scsi_qla_host_t *,u8 ,srb_t *); -void qla24xx_async_gpnft_done (scsi_qla_host_t *,srb_t *); -void qla24xx_async_gnnft_done (scsi_qla_host_t *,srb_t *); -int qla24xx_async_gnnid (scsi_qla_host_t *,fc_port_t *); -void qla24xx_handle_gnnid_event (scsi_qla_host_t *,struct event_arg *); -int qla24xx_post_gnnid_work (struct scsi_qla_host *,fc_port_t *); +int qla_fab_async_scan (scsi_qla_host_t *,srb_t *); +void qla_fab_scan_start (struct scsi_qla_host *); +void qla_fab_scan_finish (scsi_qla_host_t *,srb_t *);int qla24xx_post_gfpnid_work (struct scsi_qla_host *,fc_port_t *);int qla24xx_async_gfpnid (scsi_qla_host_t *,fc_port_t *);void qla24xx_handle_gfpnid_event (scsi_qla_host_t *,struct event_arg *);
drivers/scsi/qla2xxx/qla_gs.c +200 -381
743 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_init.c +19 -21
@@ -1723,12 +1723,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport) }break ;default : -if (wwn ==0 ) { -ql_dbg (ql_dbg_disc, vha,0xffff , -"%s %d %8phC post GNNID\n" , - __func__, __LINE__, fcport->port_name); -qla24xx_post_gnnid_work (vha, fcport); - }else if (fcport->loop_id ==FC_NO_LOOP_ID ) { +if (fcport->loop_id ==FC_NO_LOOP_ID ) {ql_dbg (ql_dbg_disc, vha,0x20bd ,"%s %d %8phC post gnl\n" , __func__, __LINE__, fcport->port_name);
@@ -1860,15 +1855,6 @@ void qla2x00_handle_rscn(scsi_qla_host_t *vha, struct event_arg *ea)case RSCN_PORT_ADDR : fcport =qla2x00_find_fcport_by_nportid (vha, &ea->id,1 );if (fcport) { -if (ql2xfc2target && - fcport->flags &FCF_FCP2_DEVICE && -atomic_read (&fcport->state) ==FCS_ONLINE ) { -ql_dbg (ql_dbg_disc, vha,0x2115 , -"Delaying session delete for FCP2 portid=%06x %8phC " , - fcport->d_id.b24, fcport->port_name); -return ; - } -if (vha->hw->flags.edif_enabled &&DBELL_ACTIVE (vha)) {/* * On ipsec start by remote port, Target port
@@ -2472,8 +2458,23 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea) ea->sp->gen1, fcport->rscn_gen, ea->data[0], ea->data[1], ea->iop[0], ea->iop[1]); -if ((fcport->fw_login_state ==DSC_LS_PLOGI_PEND ) || - (fcport->fw_login_state ==DSC_LS_PRLI_PEND )) { +if (fcport->fw_login_state ==DSC_LS_PLOGI_PEND ) { +ql_dbg (ql_dbg_disc, vha,0x20ea , +"%s %d %8phC Remote is trying to login\n" , + __func__, __LINE__, fcport->port_name); +/* +* If we get here, there is port thats already logged in, +* but it's state has not moved ahead. Recheck with FW on +* what state it is in and proceed ahead +*/ +if (!N2N_TOPO (vha->hw)) { + fcport->fw_login_state =DSC_LS_PRLI_COMP ; +qla24xx_post_gpdb_work (vha, fcport,0 ); + } +return ; + } + +if (fcport->fw_login_state ==DSC_LS_PRLI_PEND ) {ql_dbg (ql_dbg_disc, vha,0x20ea ,"%s %d %8phC Remote is trying to login\n" , __func__, __LINE__, fcport->port_name);
@@ -6443,10 +6444,7 @@ qla2x00_configure_fabric(scsi_qla_host_t *vha)if (USE_ASYNC_SCAN (ha)) {/* start of scan begins here */ vha->scan.rscn_gen_end =atomic_read (&vha->rscn_gen); - rval =qla24xx_async_gpnft (vha,FC4_TYPE_FCP_SCSI , -NULL ); -if (rval) -set_bit (LOOP_RESYNC_NEEDED , &vha->dpc_flags); +qla_fab_scan_start (vha); }else {list_for_each_entry (fcport, &vha->vp_fcports, list) fcport->scan_state =QLA_FCPORT_SCAN ;
drivers/scsi/qla2xxx/qla_isr.c +17 -2
@@ -1524,13 +1524,28 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)/* Port logout */ fcport =qla2x00_find_fcport_by_loopid (vha, mb[1 ]); -if (!fcport) +if (!fcport) { +ql_dbg (ql_dbg_async, vha,0x5011 , +"Could not find fcport:%04x %04x %04x\n" , + mb[1 ], mb[2 ], mb[3 ]);break ; -if (atomic_read (&fcport->state) !=FCS_ONLINE ) + } + +if (atomic_read (&fcport->state) !=FCS_ONLINE ) { +ql_dbg (ql_dbg_async, vha,0x5012 , +"Port state is not online State:0x%x \n" , +atomic_read (&fcport->state)); +ql_dbg (ql_dbg_async, vha,0x5012 , +"Scheduling session for deletion \n" ); + fcport->logout_on_delete =0 ; +qlt_schedule_sess_for_deletion (fcport);break ; + } +ql_dbg (ql_dbg_async, vha,0x508a ,"Marking port lost loopid=%04x portid=%06x.\n" , fcport->loop_id, fcport->d_id.b24); +if (qla_ini_mode_enabled (vha)) { fcport->logout_on_delete =0 ;qlt_schedule_sess_for_deletion (fcport);
drivers/scsi/qla2xxx/qla_os.c +6 -12
@@ -1189,7 +1189,8 @@ qla2x00_wait_for_hba_ready(scsi_qla_host_t *vha)while ((qla2x00_reset_active (vha) || ha->dpc_active || ha->flags.mbox_busy) ||test_bit (FX00_RESET_RECOVERY , &vha->dpc_flags) || -test_bit (FX00_TARGET_SCAN , &vha->dpc_flags)) { +test_bit (FX00_TARGET_SCAN , &vha->dpc_flags) || + (vha->scan.scan_flags &SF_SCANNING )) {if (test_bit (UNLOADING , &base_vha->dpc_flags))break ;msleep (1000 );
@@ -5521,18 +5522,11 @@ qla2x00_do_work(struct scsi_qla_host *vha)qla2x00_async_prlo_done (vha, e->u.logio.fcport, e->u.logio.data);break ; -case QLA_EVT_GPNFT : -qla24xx_async_gpnft (vha, e->u.gpnft.fc4_type, - e->u.gpnft.sp); +case QLA_EVT_SCAN_CMD : +qla_fab_async_scan (vha, e->u.iosb.sp);break ; -case QLA_EVT_GPNFT_DONE : -qla24xx_async_gpnft_done (vha, e->u.iosb.sp); -break ; -case QLA_EVT_GNNFT_DONE : -qla24xx_async_gnnft_done (vha, e->u.iosb.sp); -break ; -case QLA_EVT_GNNID : -qla24xx_async_gnnid (vha, e->u.fcport.fcport); +case QLA_EVT_SCAN_FINISH : +qla_fab_scan_finish (vha, e->u.iosb.sp);break ;case QLA_EVT_GFPNID :qla24xx_async_gfpnid (vha, e->u.fcport.fcport);
drivers/usb/serial/option.c +6 -0
@@ -1401,12 +1401,16 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a0, 0xff), /* Telit FN20C04 (rmnet) */ .driver_info = RSVD(0) | NCTRL(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a1, 0xff), /* Telit FN20C04 (RNDIS) */ + .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a2, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a3, 0xff), /* Telit FN920C04 (ECM) */ .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a4, 0xff), /* Telit FN20C04 (rmnet) */ .driver_info = RSVD(0) | NCTRL(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a6, 0xff), /* Telit FN920C04 (RNDIS) */ + .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a7, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a8, 0xff), /* Telit FN920C04 (ECM) */
@@ -1415,6 +1419,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10aa, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(3) | RSVD(4) | RSVD(5) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10ab, 0xff), /* Telit FN920C04 (RNDIS) */ + .driver_info = NCTRL(3) | RSVD(4) | RSVD(5) }, { USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b0, 0xff, 0xff, 0x30), /* Telit FE990B (rmnet) */ .driver_info = NCTRL(5) }, { USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b0, 0xff, 0xff, 0x40) },
drivers/video/fbdev/riva/riva_hw.c +3 -0
@@ -436,6 +436,9 @@ static char nv3_arb(nv3_fifo_info * res_info, nv3_sim_state * state, nv3_arb_in vmisses =2 ; eburst_size = state->memory_width *1 ; mburst_size =32 ; +if (!state->mclk_khz) +return (0 ); + gns =1000000 * (gmisses*state->mem_page_miss + state->mem_latency)/state->mclk_khz; ainfo->by_gfacc = gns*ainfo->gdrain_rate/1000000 ; ainfo->wcmocc =0 ;
drivers/video/fbdev/smscufx.c +6 -2
@@ -988,7 +988,6 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg) {struct ufx_data *dev = info->par; -struct dloarea *area =NULL ;if (!atomic_read (&dev->usb_active))return 0 ;
@@ -1003,6 +1002,10 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd,/* TODO: Help propose a standard fb.h ioctl to report mmap damage */ if (cmd ==UFX_IOCTL_REPORT_DAMAGE ) { + struct dloarea *area __free(kfree) = kmalloc(sizeof(*area), GFP_KERNEL); +if (!area) +return -ENOMEM ; +/* If we have a damage-aware client, turn fb_defio "off" * To avoid perf imact of unnecessary page fault handling. * Done by resetting the delay for this fb_info to a very
@@ -1012,7 +1015,8 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd,if (info->fbdefio) info->fbdefio->delay =UFX_DEFIO_WRITE_DISABLE ; - area = (struct dloarea *)arg; +if (copy_from_user (area, (u8 __user *)arg,sizeof (*area))) +return -EFAULT ;if (area->x <0 ) area->x =0 ;
fs/btrfs/block-group.c +3 -3
@@ -3924,7 +3924,7 @@ int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags,mutex_unlock (&fs_info->chunk_mutex); }else {/* Proceed with allocation */ - space_info->chunk_alloc =1 ; + space_info->chunk_alloc = true; wait_for_alloc = false;spin_unlock (&space_info->lock); }
@@ -3973,7 +3973,7 @@ int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags,spin_lock (&space_info->lock);if (ret <0 ) {if (ret == -ENOSPC ) - space_info->full =1 ; + space_info->full = true;else goto out; }else {
@@ -3983,7 +3983,7 @@ int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags, space_info->force_alloc =CHUNK_ALLOC_NO_FORCE ; out: - space_info->chunk_alloc =0 ; + space_info->chunk_alloc = false;spin_unlock (&space_info->lock);mutex_unlock (&fs_info->chunk_mutex);
fs/btrfs/space-info.c +11 -11
@@ -179,7 +179,7 @@ void btrfs_clear_space_info_full(struct btrfs_fs_info *info)struct btrfs_space_info *found;list_for_each_entry (found, head, list) - found->full =0 ; + found->full = false; }/*
@@ -360,7 +360,7 @@ void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, found->bytes_readonly += block_group->bytes_super;btrfs_space_info_update_bytes_zone_unusable (info, found, block_group->zone_unusable);if (block_group->length >0 ) - found->full =0 ; + found->full = false;btrfs_try_granting_tickets (info, found);spin_unlock (&found->lock);
@@ -1116,7 +1116,7 @@ static void btrfs_async_reclaim_metadata_space(struct work_struct *work)spin_lock (&space_info->lock); to_reclaim =btrfs_calc_reclaim_metadata_size (fs_info, space_info);if (!to_reclaim) { - space_info->flush =0 ; + space_info->flush = false;spin_unlock (&space_info->lock);return ; }
@@ -1128,7 +1128,7 @@ static void btrfs_async_reclaim_metadata_space(struct work_struct *work)flush_space (fs_info, space_info, to_reclaim, flush_state, false);spin_lock (&space_info->lock);if (list_empty (&space_info->tickets)) { - space_info->flush =0 ; + space_info->flush = false;spin_unlock (&space_info->lock);return ; }
@@ -1171,7 +1171,7 @@ static void btrfs_async_reclaim_metadata_space(struct work_struct *work) flush_state =FLUSH_DELAYED_ITEMS_NR ; commit_cycles--; }else { - space_info->flush =0 ; + space_info->flush = false; } }else { flush_state =FLUSH_DELAYED_ITEMS_NR ;
@@ -1333,7 +1333,7 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work)spin_lock (&space_info->lock);if (list_empty (&space_info->tickets)) { - space_info->flush =0 ; + space_info->flush = false;spin_unlock (&space_info->lock);return ; }
@@ -1344,7 +1344,7 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work)flush_space (fs_info, space_info,U64_MAX ,ALLOC_CHUNK_FORCE , false);spin_lock (&space_info->lock);if (list_empty (&space_info->tickets)) { - space_info->flush =0 ; + space_info->flush = false;spin_unlock (&space_info->lock);return ; }
@@ -1361,7 +1361,7 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work) data_flush_states[flush_state], false);spin_lock (&space_info->lock);if (list_empty (&space_info->tickets)) { - space_info->flush =0 ; + space_info->flush = false;spin_unlock (&space_info->lock);return ; }
@@ -1378,7 +1378,7 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work)if (maybe_fail_all_tickets (fs_info, space_info)) flush_state =0 ;else - space_info->flush =0 ; + space_info->flush = false; }else { flush_state =0 ; }
@@ -1394,7 +1394,7 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work) aborted_fs:maybe_fail_all_tickets (fs_info, space_info); - space_info->flush =0 ; + space_info->flush = false;spin_unlock (&space_info->lock); }
@@ -1719,7 +1719,7 @@ static int __reserve_bytes(struct btrfs_fs_info *fs_info,*/ maybe_clamp_preempt (fs_info, space_info); - space_info->flush =1 ; + space_info->flush = true; trace_btrfs_trigger_flush(fs_info, space_info->flags, orig_bytes, flush,
fs/btrfs/space-info.h +3 -3
@@ -109,11 +109,11 @@ struct btrfs_space_info {flushing. The value is >> clamp, so turns out to be a 2^clamp divisor. */ - unsigned int full:1; /* indicates that we cannot allocate any more +bool full;/* indicates that we cannot allocate any more chunks for this space */ - unsigned int chunk_alloc:1; /* set if we are allocating a chunk */ +bool chunk_alloc;/* set if we are allocating a chunk */ - unsigned int flush:1; /* set if we are trying to make space */ +bool flush;/* set if we are trying to make space */ unsigned int force_alloc;/* set if we need to force a chunk alloc for this space */
fs/f2fs/data.c +9 -3
@@ -358,14 +358,20 @@ static void f2fs_write_end_io(struct bio *bio) page->index != nid_of_node(page));dec_page_count (sbi, type); + +/* +* we should access sbi before end_page_writeback() to +* avoid racing w/ kill_f2fs_super() +*/ +if (type ==F2FS_WB_CP_DATA && !get_pages (sbi, type) && +wq_has_sleeper (&sbi->cp_wait)) +wake_up (&sbi->cp_wait); +if (f2fs_in_warm_node_list (sbi, page))f2fs_del_fsync_node_entry (sbi, page);clear_page_private_gcing (page);end_page_writeback (page); } -if (!get_pages (sbi,F2FS_WB_CP_DATA ) && -wq_has_sleeper (&sbi->cp_wait)) -wake_up (&sbi->cp_wait);bio_put (bio); }
fs/f2fs/node.c +10 -4
@@ -1665,8 +1665,13 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted, goto redirty_out; } -if (atomic && !test_opt (sbi,NOBARRIER ) && !f2fs_sb_has_blkzoned (sbi)) - fio.op_flags |=REQ_PREFLUSH |REQ_FUA ; +if (atomic) { +if (!test_opt (sbi,NOBARRIER ) && !f2fs_sb_has_blkzoned (sbi)) + fio.op_flags |=REQ_PREFLUSH |REQ_FUA ; +if (IS_INODE (page)) +set_dentry_mark (page, +f2fs_need_dentry_mark (sbi,ino_of_node (page))); + }/* should add to global list before clearing PAGECACHE status */ if (f2fs_in_warm_node_list (sbi, page)) {
@@ -1821,8 +1826,9 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,if (is_inode_flag_set (inode,FI_DIRTY_INODE ))f2fs_update_inode (inode, page); -set_dentry_mark (page, -f2fs_need_dentry_mark (sbi, ino)); +if (!atomic) +set_dentry_mark (page, +f2fs_need_dentry_mark (sbi, ino)); }/* may be written by other thread */ if (!PageDirty (page))
fs/f2fs/sysfs.c +53 -8
116 lines not on this page · raw message
fs/nfsd/nfsctl.c +8 -1
@@ -1460,17 +1460,24 @@ static __net_init int nfsd_init_net(struct net *net) retval =nfsd_stat_counters_init (nn);if (retval) goto out_repcache_error; +memset (&nn->nfsd_svcstats,0 ,sizeof (nn->nfsd_svcstats)); nn->nfsd_svcstats.program = &nfsd_program; +if (!nfsd_proc_stat_init (net)) { + retval = -ENOMEM ; + goto out_proc_error; + } + nn->nfsd_versions =NULL ; nn->nfsd4_minorversions =NULL ;nfsd4_init_leases_net (nn);get_random_bytes (&nn->siphash_key,sizeof (nn->siphash_key));seqlock_init (&nn->writeverf_lock); -nfsd_proc_stat_init (net);return 0 ; +out_proc_error: +nfsd_stat_counters_destroy (nn); out_repcache_error:nfsd_idmap_shutdown (net); out_idmap_error:
fs/nfsd/stats.c +2 -2
@@ -113,11 +113,11 @@ void nfsd_stat_counters_destroy(struct nfsd_net *nn)nfsd_percpu_counters_destroy (nn->counter,NFSD_STATS_COUNTERS_NUM ); } -void nfsd_proc_stat_init (struct net *net) +struct proc_dir_entry *nfsd_proc_stat_init (struct net *net) {struct nfsd_net *nn =net_generic (net, nfsd_net_id); -svc_proc_register (net, &nn->nfsd_svcstats, &nfsd_proc_ops); +return svc_proc_register (net, &nn->nfsd_svcstats, &nfsd_proc_ops); }void nfsd_proc_stat_shutdown (struct net *net)
fs/nfsd/stats.h +1 -1
@@ -15,7 +15,7 @@ void nfsd_percpu_counters_reset(struct percpu_counter *counters, int num);void nfsd_percpu_counters_destroy (struct percpu_counter *counters,int num);int nfsd_stat_counters_init (struct nfsd_net *nn);void nfsd_stat_counters_destroy (struct nfsd_net *nn); -void nfsd_proc_stat_init (struct net *net); +struct proc_dir_entry *nfsd_proc_stat_init (struct net *net);void nfsd_proc_stat_shutdown (struct net *net);static inline void nfsd_stats_rc_hits_inc (struct nfsd_net *nn)
fs/nilfs2/sufile.c +4 -0
@@ -1091,6 +1091,9 @@ int nilfs_sufile_trim_fs(struct inode *sufile, struct fstrim_range *range)else end_block = start_block + len -1 ; +if (end_block < nilfs->ns_first_data_block) + goto out; + segnum =nilfs_get_segnum_of_block (nilfs, start_block); segnum_end =nilfs_get_segnum_of_block (nilfs, end_block);
@@ -1188,6 +1191,7 @@ int nilfs_sufile_trim_fs(struct inode *sufile, struct fstrim_range *range) out_sem:up_read (&NILFS_MDT (sufile)->mi_sem); +out: range->len = ndiscarded << nilfs->ns_blocksize_bits;return ret; }
fs/romfs/super.c +4 -1
@@ -468,7 +468,10 @@ static int romfs_fill_super(struct super_block *sb, struct fs_context *fc)#ifdef CONFIG_BLOCK if (!sb->s_mtd) { -sb_set_blocksize (sb,ROMBSIZE ); +if (!sb_set_blocksize (sb,ROMBSIZE )) { +errorf (fc,"romfs: unable to set blocksize\n" ); +return -EINVAL ; + } }else { sb->s_blocksize =ROMBSIZE ; sb->s_blocksize_bits =blksize_bits (ROMBSIZE );
fs/smb/client/cached_dir.h +4 -4
@@ -34,10 +34,10 @@ struct cached_fid {struct list_head entry;struct cached_fids *cfids;const char *path; - bool has_lease:1; - bool is_open:1; - bool on_list:1; - bool file_all_info_is_valid:1; +bool has_lease; +bool is_open; +bool on_list; +bool file_all_info_is_valid;unsigned long time;/* jiffies of when lease was taken */ struct kref refcount;struct cifs_fid fid;
fs/smb/client/cifs_dfs_ref.c +16 -0
@@ -283,6 +283,21 @@ static int set_dest_addr(struct smb3_fs_context *ctx, const char *full_path)return rc; } +static void fs_context_set_ids (struct smb3_fs_context *ctx) +{ +kuid_t uid =current_fsuid (); +kgid_t gid =current_fsgid (); + +if (ctx->multiuser) { +if (!ctx->uid_specified) + ctx->linux_uid = uid; +if (!ctx->gid_specified) + ctx->linux_gid = gid; + } +if (!ctx->cruid_specified) + ctx->cred_uid = uid; +} +/* * Create a vfsmount that we can automount */
@@ -333,6 +348,7 @@ static struct vfsmount *cifs_dfs_do_automount(struct path *path) tmp.source = full_path; tmp.UNC = tmp.prepath =NULL ; +fs_context_set_ids (&tmp); rc =smb3_fs_context_dup (ctx, &tmp);if (rc) { mnt =ERR_PTR (rc);
fs/smb/server/server.c +3 -3
@@ -126,21 +126,21 @@ static int __process_request(struct ksmbd_work *work, struct ksmbd_conn *conn, andx_again:if (command >= conn->max_cmds) { conn->ops->set_rsp_status (work,STATUS_INVALID_PARAMETER ); -return SERVER_HANDLER_CONTINUE ; +return SERVER_HANDLER_ABORT ; } cmds = &conn->cmds[command];if (!cmds->proc) {ksmbd_debug (SMB ,"*** not implemented yet cmd = %x\n" , command); conn->ops->set_rsp_status (work,STATUS_NOT_IMPLEMENTED ); -return SERVER_HANDLER_CONTINUE ; +return SERVER_HANDLER_ABORT ; }if (work->sess && conn->ops->is_sign_req (work, command)) { ret = conn->ops->check_sign_req (work);if (!ret) { conn->ops->set_rsp_status (work,STATUS_ACCESS_DENIED ); -return SERVER_HANDLER_CONTINUE ; +return SERVER_HANDLER_ABORT ; } }
fs/smb/server/smb2pdu.c +3 -7
@@ -5739,15 +5739,13 @@ static int set_file_basic_info(struct ksmbd_file *fp, attrs.ia_valid |= (ATTR_ATIME |ATTR_ATIME_SET ); } - attrs.ia_valid |=ATTR_CTIME ;if (file_info->ChangeTime) - attrs.ia_ctime =ksmbd_NTtimeToUnix (file_info->ChangeTime); -else - attrs.ia_ctime = inode->i_ctime; +inode_set_ctime_to_ts (inode, +ksmbd_NTtimeToUnix (file_info->ChangeTime));if (file_info->LastWriteTime) { attrs.ia_mtime =ksmbd_NTtimeToUnix (file_info->LastWriteTime); - attrs.ia_valid |= (ATTR_MTIME |ATTR_MTIME_SET ); + attrs.ia_valid |= (ATTR_MTIME |ATTR_MTIME_SET |ATTR_CTIME ); }if (file_info->Attributes) {
@@ -5789,8 +5787,6 @@ static int set_file_basic_info(struct ksmbd_file *fp,return -EACCES ;inode_lock (inode); - inode->i_ctime = attrs.ia_ctime; - attrs.ia_valid &= ~ATTR_CTIME ; rc =notify_change (user_ns, dentry, &attrs,NULL );inode_unlock (inode); }
fs/smb/server/transport_tcp.c +2 -1
@@ -41,6 +41,7 @@ static struct ksmbd_transport_ops ksmbd_tcp_transport_ops;static void tcp_stop_kthread (struct task_struct *kthread);static struct interface *alloc_iface (char *ifname); +static void ksmbd_tcp_disconnect (struct ksmbd_transport *t);#define KSMBD_TRANS (t) (&(t)->transport)#define TCP_TRANS (t) ((struct tcp_transport *)container_of(t, \
@@ -215,7 +216,7 @@ static int ksmbd_tcp_new_connection(struct socket *client_sk)if (IS_ERR (handler)) {pr_err ("cannot start conn thread\n" ); rc =PTR_ERR (handler); -free_transport (t); +ksmbd_tcp_disconnect (KSMBD_TRANS (t)); }return rc;
include/net/ip_tunnels.h +8 -5
@@ -354,11 +354,12 @@ static inline bool pskb_inet_may_pull(struct sk_buff *skb)/* Variant of pskb_inet_may_pull(). */ -static inline bool skb_vlan_inet_prepare (struct sk_buff *skb, -bool inner_proto_inherit) +static inline enum skb_drop_reason +skb_vlan_inet_prepare (struct sk_buff *skb,bool inner_proto_inherit) {int nhlen =0 , maclen = inner_proto_inherit ?0 :ETH_HLEN ;__be16 type = skb->protocol; +enum skb_drop_reason reason;/* Essentially this is skb_protocol(skb, true) * And we get MAC len.
@@ -379,11 +380,13 @@ static inline bool skb_vlan_inet_prepare(struct sk_buff *skb,/* For ETH_P_IPV6/ETH_P_IP we make sure to pull * a base network header in skb->head. */ -if (!pskb_may_pull (skb, maclen + nhlen)) -return false; + reason =pskb_may_pull_reason (skb, maclen + nhlen); +if (reason) +return reason;skb_set_network_header (skb, maclen); -return true; + +return SKB_NOT_DROPPED_YET ; }static inline int ip_encap_hlen (struct ip_tunnel_encap *e)
include/net/xdp_sock.h +0 -2
@@ -59,8 +59,6 @@ struct xdp_sock {struct xsk_queue *tx____cacheline_aligned_in_smp ;struct list_head tx_list; -/* Protects generic receive. */ -spinlock_t rx_lock;/* Statistics */ u64 rx_dropped;
include/net/xsk_buff_pool.h +2 -0
@@ -48,6 +48,8 @@ struct xsk_buff_pool {refcount_t users;struct xdp_umem *umem;struct work_struct work; +/* Protects generic receive in shared and non-shared umem mode. */ +spinlock_t rx_lock;struct list_head free_list;u32 heads_cnt;u16 queue_id;
kernel/cgroup/cpuset.c +1 -1
@@ -509,7 +509,7 @@ static inline bool partition_is_populated(struct cpuset *cs, cs->attach_in_progress)return true;if (!excluded_child && !cs->nr_subparts_cpus) -return cgroup_is_populated (cs->css.cgroup); +return cpuset_is_populated (cs);rcu_read_lock ();cpuset_for_each_descendant_pre (cp, pos_css, cs) {
net/devlink/leftover.c +3 -1
@@ -10274,13 +10274,15 @@ void devl_rate_nodes_destroy(struct devlink *devlink)if (!devlink_rate->parent)continue ; -refcount_dec (&devlink_rate->parent->refcnt);if (devlink_rate_is_leaf (devlink_rate)) ops->rate_leaf_parent_set (devlink_rate,NULL , devlink_rate->priv,NULL ,NULL );else if (devlink_rate_is_node (devlink_rate)) ops->rate_node_parent_set (devlink_rate,NULL , devlink_rate->priv,NULL ,NULL ); + +refcount_dec (&devlink_rate->parent->refcnt); + devlink_rate->parent =NULL ; }list_for_each_entry_safe (devlink_rate, tmp, &devlink->rate_list, list) {if (devlink_rate_is_node (devlink_rate)) {
net/dsa/dsa2.c +14 -7
@@ -1148,6 +1148,16 @@ static void dsa_tree_teardown_lags(struct dsa_switch_tree *dst)kfree (dst->lags); } +static void dsa_tree_teardown_routing_table (struct dsa_switch_tree *dst) +{ +struct dsa_link *dl, *next; + +list_for_each_entry_safe (dl, next, &dst->rtable, list) { +list_del (&dl->list); +kfree (dl); + } +} +static int dsa_tree_setup (struct dsa_switch_tree *dst) {bool complete;
@@ -1165,7 +1175,7 @@ static int dsa_tree_setup(struct dsa_switch_tree *dst) err =dsa_tree_setup_cpu_ports (dst);if (err) -return err; + goto teardown_rtable; err =dsa_tree_setup_switches (dst);if (err)
@@ -1197,14 +1207,14 @@ static int dsa_tree_setup(struct dsa_switch_tree *dst)dsa_tree_teardown_switches (dst); teardown_cpu_ports:dsa_tree_teardown_cpu_ports (dst); +teardown_rtable: +dsa_tree_teardown_routing_table (dst);return err; }static void dsa_tree_teardown (struct dsa_switch_tree *dst) { -struct dsa_link *dl, *next; -if (!dst->setup)return ;
@@ -1218,10 +1228,7 @@ static void dsa_tree_teardown(struct dsa_switch_tree *dst)dsa_tree_teardown_cpu_ports (dst); -list_for_each_entry_safe (dl, next, &dst->rtable, list) { -list_del (&dl->list); -kfree (dl); - } +dsa_tree_teardown_routing_table (dst);pr_info ("DSA: tree %d torn down\n" , dst->index);
net/mptcp/pm_netlink.c +13 -3
@@ -1855,16 +1855,26 @@ static void __reset_counters(struct pm_nl_pernet *pernet)static int mptcp_nl_cmd_flush_addrs (struct sk_buff *skb,struct genl_info *info) {struct pm_nl_pernet *pernet =genl_info_pm_nl (info); -LIST_HEAD (free_list); +struct list_head free_list;spin_lock_bh (&pernet->lock); -list_splice_init (&pernet->local_addr_list, &free_list); + free_list = pernet->local_addr_list; +INIT_LIST_HEAD_RCU (&pernet->local_addr_list);__reset_counters (pernet); pernet->next_id =1 ;bitmap_zero (pernet->id_bitmap,MPTCP_PM_MAX_ADDR_ID +1 );spin_unlock_bh (&pernet->lock); -mptcp_nl_remove_addrs_list (sock_net (skb->sk), &free_list); + +if (free_list.next == &pernet->local_addr_list) +return 0 ; +synchronize_rcu (); + +/* Adjust the pointers to free_list instead of pernet->local_addr_list */ + free_list.prev->next = &free_list; + free_list.next->prev = &free_list; + +mptcp_nl_remove_addrs_list (sock_net (skb->sk), &free_list);__flush_addrs (&free_list);return 0 ; }
net/mptcp/protocol.c +15 -9
@@ -1666,7 +1666,7 @@ void __mptcp_push_pending(struct sock *sk, unsigned int flags)struct mptcp_sendmsg_info info = { .flags = flags, }; -bool do_check_data_fin = false; +bool copied = false;struct mptcp_data_frag *dfrag;int len;
@@ -1703,7 +1703,7 @@ void __mptcp_push_pending(struct sock *sk, unsigned int flags) goto out; } - do_check_data_fin = true; + copied = true; info.sent += ret; len -= ret;
@@ -1717,11 +1717,14 @@ void __mptcp_push_pending(struct sock *sk, unsigned int flags)mptcp_push_release (ssk, &info); out: -/* ensure the rtx timer is running */ -if (!mptcp_rtx_timer_pending (sk)) -mptcp_reset_rtx_timer (sk); -if (do_check_data_fin) +/* Avoid scheduling the rtx timer if no data has been pushed; the timer +* will be updated on positive acks by __mptcp_cleanup_una(). +*/ +if (copied) { +if (!mptcp_rtx_timer_pending (sk)) +mptcp_reset_rtx_timer (sk);mptcp_check_send_data_fin (sk); + } }static void __mptcp_subflow_push_pending (struct sock *sk,struct sock *ssk,bool first)
@@ -2453,10 +2456,10 @@ bool __mptcp_retransmit_pending_data(struct sock *sk)*/ static void __mptcp_subflow_disconnect (struct sock *ssk,struct mptcp_subflow_context *subflow, -unsigned int flags) +bool fastclosing) {if (((1 << ssk->sk_state) & (TCPF_CLOSE |TCPF_LISTEN )) || - subflow->send_fastclose) { + fastclosing) {/* The MPTCP code never wait on the subflow sockets, TCP-level * disconnect should never fail */
@@ -2508,7 +2511,7 @@ static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk, need_push = (flags &MPTCP_CF_PUSH ) &&__mptcp_retransmit_pending_data (sk);if (!dispose_it) { -__mptcp_subflow_disconnect (ssk, subflow, flags); +__mptcp_subflow_disconnect (ssk, subflow, msk->fastclosing);if (msk->subflow && ssk == msk->subflow->sk) msk->subflow->state =SS_UNCONNECTED ;release_sock (ssk);
@@ -2799,6 +2802,8 @@ static void mptcp_do_fastclose(struct sock *sk)struct mptcp_subflow_context *subflow, *tmp;struct mptcp_sock *msk =mptcp_sk (sk); + msk->fastclosing =1 ; +/* Explicitly send the fastclose reset as need */ if (__mptcp_check_fallback (msk))return ;
@@ -3287,6 +3292,7 @@ static int mptcp_disconnect(struct sock *sk, int flags)WRITE_ONCE (msk->csum_enabled,mptcp_is_checksum_enabled (sock_net (sk)));mptcp_pm_data_reset (msk);mptcp_ca_reset (sk); + msk->fastclosing =0 ;WRITE_ONCE (sk->sk_shutdown,0 );sk_error_report (sk);
net/mptcp/protocol.h +2 -1
@@ -289,7 +289,8 @@ struct mptcp_sock { nodelay:1, fastopening:1, in_accept_queue:1, - free_first:1; + free_first:1, + fastclosing:1;int keepalive_cnt;int keepalive_idle;int keepalive_intvl;
net/wireless/reg.c +5 -0
@@ -4241,6 +4241,9 @@ EXPORT_SYMBOL(regulatory_pre_cac_allowed);static void cfg80211_check_and_end_cac (struct cfg80211_registered_device *rdev) {struct wireless_dev *wdev; + +wiphy_lock (&rdev->wiphy); +/* If we finished CAC or received radar, we should end any * CAC running on the same channels. * the check !cfg80211_chandef_dfs_usable contain 2 options:
@@ -4264,6 +4267,8 @@ static void cfg80211_check_and_end_cac(struct cfg80211_registered_device *rdev)if (!cfg80211_chandef_dfs_usable (&rdev->wiphy, chandef))rdev_end_cac (rdev, wdev->netdev); } + +wiphy_unlock (&rdev->wiphy); } void regulatory_propagate_dfs_state(struct wiphy *wiphy,
net/xdp/xsk.c +3 -3
@@ -237,13 +237,14 @@ int xsk_generic_rcv(struct xdp_sock *xs, struct xdp_buff *xdp) {int err; -spin_lock_bh (&xs->rx_lock); err =xsk_rcv_check (xs, xdp);if (!err) { +spin_lock_bh (&xs->pool->rx_lock); err =__xsk_rcv (xs, xdp);xsk_flush (xs); +spin_unlock_bh (&xs->pool->rx_lock); } -spin_unlock_bh (&xs->rx_lock); +return err; }
@@ -1448,7 +1449,6 @@ static int xsk_create(struct net *net, struct socket *sock, int protocol, xs =xdp_sk (sk); xs->state =XSK_READY ;mutex_init (&xs->mutex); -spin_lock_init (&xs->rx_lock);INIT_LIST_HEAD (&xs->map_list);spin_lock_init (&xs->map_list_lock);
net/xdp/xsk_buff_pool.c +1 -0
@@ -85,6 +85,7 @@ struct xsk_buff_pool *xp_create_and_assign_umem(struct xdp_sock *xs,XDP_PACKET_HEADROOM ; pool->umem = umem; pool->addrs = umem->addrs; +spin_lock_init (&pool->rx_lock);INIT_LIST_HEAD (&pool->free_list);INIT_LIST_HEAD (&pool->xsk_tx_list);spin_lock_init (&pool->xsk_tx_list_lock);
sound/pci/hda/patch_realtek.c +5 -0
@@ -10454,6 +10454,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1ee7 ,0x2078 ,"HONOR BRB-X M1010" ,ALC2XX_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x1f66 ,0x0105 ,"Ayaneo Portable Game Player" ,ALC287_FIXUP_CS35L41_I2C_2 ),SND_PCI_QUIRK (0x2014 ,0x800a ,"Positivo ARN50" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ), +SND_PCI_QUIRK (0x2039 ,0x0001 ,"Inspur S14-G1" ,ALC295_FIXUP_CHROME_BOOK ),SND_PCI_QUIRK (0x2782 ,0x0214 ,"VAIO VJFE-CL" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ),SND_PCI_QUIRK (0x2782 ,0x0228 ,"Infinix ZERO BOOK 13" ,ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13 ), SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO),
@@ -10906,6 +10907,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { {0x12, 0x90a60140}, {0x19, 0x04a11030}, {0x21, 0x04211020}), + SND_HDA_PIN_QUIRK(0x10ec0274, 0x1d05, "TongFang", ALC274_FIXUP_HP_HEADSET_MIC, + {0x17, 0x90170110}, + {0x19, 0x03a11030}, + {0x21, 0x03211020}), SND_HDA_PIN_QUIRK(0x10ec0282, 0x1025, "Acer", ALC282_FIXUP_ACER_DISABLE_LINEOUT, ALC282_STANDARD_PINS, {0x12, 0x90a609c0},
sound/soc/amd/yc/acp6x-mach.c +7 -0
@@ -451,6 +451,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "15NBC1011"), } }, + { + .driver_data = &acp6x_card, + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"ASUSTeK COMPUTER INC." ), + DMI_MATCH(DMI_PRODUCT_NAME, "ASUS EXPERTBOOK PM1503CDA"), + } + }, { .driver_data = &acp6x_card, .matches = {
sound/soc/codecs/cs35l45.c +1 -1
@@ -131,7 +131,7 @@ static const struct snd_soc_dapm_widget cs35l45_dapm_widgets[] = {SND_SOC_DAPM_AIF_OUT ("ASP_TX2" ,NULL ,1 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX2_EN_SHIFT ,0 ),SND_SOC_DAPM_AIF_OUT ("ASP_TX3" ,NULL ,2 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX3_EN_SHIFT ,0 ),SND_SOC_DAPM_AIF_OUT ("ASP_TX4" ,NULL ,3 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX4_EN_SHIFT ,0 ), -SND_SOC_DAPM_AIF_OUT ("ASP_TX5" ,NULL ,3 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX5_EN_SHIFT ,0 ), +SND_SOC_DAPM_AIF_OUT ("ASP_TX5" ,NULL ,4 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX5_EN_SHIFT ,0 ),SND_SOC_DAPM_MUX ("ASP_TX1 Source" ,SND_SOC_NOPM ,0 ,0 , &cs35l45_asp_muxes[0 ]), SND_SOC_DAPM_MUX("ASP_TX2 Source", SND_SOC_NOPM, 0, 0, &cs35l45_asp_muxes[1]),
sound/soc/fsl/fsl_xcvr.c +3 -0
@@ -203,10 +203,13 @@ static int fsl_xcvr_mode_put(struct snd_kcontrol *kcontrol, xcvr->mode =snd_soc_enum_item_to_val (e, item[0 ]); +down_read (&card->snd_card->controls_rwsem);fsl_xcvr_activate_ctl (dai, fsl_xcvr_arc_mode_kctl.name, (xcvr->mode ==FSL_XCVR_MODE_ARC ));fsl_xcvr_activate_ctl (dai, fsl_xcvr_earc_capds_kctl.name, (xcvr->mode ==FSL_XCVR_MODE_EARC )); +up_read (&card->snd_card->controls_rwsem); +/* Allow playback for SPDIF only */ rtd =snd_soc_get_pcm_runtime (card, card->dai_link); rtd->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream_count =
sound/soc/intel/boards/sof_es8336.c +9 -0
@@ -332,6 +332,15 @@ static int sof_es8336_quirk_cb(const struct dmi_system_id *id)* if the topology file is modified as well. */ static const struct dmi_system_id sof_es8336_quirk_table[] = { + { + .callback = sof_es8336_quirk_cb, + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"HUAWEI" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"BOD-WXX9" ), + }, + .driver_data = (void *)(SOF_ES8336_HEADPHONE_GPIO | +SOF_ES8336_ENABLE_DMIC ) + }, { .callback = sof_es8336_quirk_cb, .matches = {
tools/testing/selftests/net/mptcp/mptcp_join.sh +104 -7
159 lines not on this page · raw message
tools/testing/selftests/net/mptcp/pm_netlink.sh +4 -0
@@ -124,6 +124,10 @@ id 8 flags signal 10.0.1.8" "id limit" ip netns exec $ns1 ./pm_nl_ctl flush check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs" +ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1 flags unknown +check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1" "ignore unknown flags" +ip netns exec $ns1 ./pm_nl_ctl flush + ip netns exec $ns1 ./pm_nl_ctl limits 9 1 check "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "rcv addrs above hard limit"
tools/testing/selftests/net/mptcp/pm_nl_ctl.c +11 -0
@@ -29,6 +29,8 @@#define IPPROTO_MPTCP 262#endif +#define MPTCP_PM_ADDR_FLAG_UNKNOWN _BITUL(7) +static void syntax (char *argv[]) {fprintf (stderr,"%s add|ann|rem|csf|dsf|get|set|del|flush|dump|events|listen|accept [<args>]\n" , argv[0 ]);
@@ -814,6 +816,8 @@ int add_addr(int fd, int pm_family, int argc, char *argv[]) flags |=MPTCP_PM_ADDR_FLAG_BACKUP ; else if (!strcmp(tok, "fullmesh")) flags |=MPTCP_PM_ADDR_FLAG_FULLMESH ; + else if (!strcmp(tok, "unknown")) + flags |=MPTCP_PM_ADDR_FLAG_UNKNOWN ; else error(1, errno, "unknown flag %s", argv[arg]);
@@ -1019,6 +1023,13 @@ static void print_addr(struct rtattr *attrs, int len)printf ("," ); } +if (flags &MPTCP_PM_ADDR_FLAG_UNKNOWN ) { +printf ("unknown" ); + flags &= ~MPTCP_PM_ADDR_FLAG_UNKNOWN ; +if (flags) +printf ("," ); + } +/* bump unknown flags, if any */ if (flags)printf ("0x%x" , flags);