Linux 5.4.91
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.91 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 | 4 - arch/arc/Makefile | 20 ++++-- arch/arc/boot/Makefile | 11 --- arch/arc/include/asm/page.h | 1 arch/arm/boot/dts/picoxcell-pc3x2.dtsi | 4 + arch/mips/boot/compressed/decompress.c | 3 arch/mips/kernel/relocate.c | 10 ++- arch/mips/lib/uncached.c | 4 - arch/mips/mm/c-r4k.c | 2 arch/mips/mm/sc-mips.c | 4 - arch/x86/hyperv/mmu.c | 12 ++- block/bfq-iosched.c | 8 +- drivers/acpi/internal.h | 2 drivers/acpi/scan.c | 15 ++++ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 - drivers/gpu/drm/i915/display/intel_panel.c | 9 +- drivers/gpu/drm/i915/display/vlv_dsi.c | 16 ++++- drivers/gpu/drm/msm/msm_drv.c | 8 +- drivers/hwmon/pwm-fan.c | 12 +++ drivers/infiniband/core/restrack.c | 1 drivers/infiniband/hw/mlx5/main.c | 4 - drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 2 drivers/infiniband/hw/usnic/usnic_ib_verbs.c | 3 drivers/iommu/intel-svm.c | 22 ++++++- drivers/isdn/mISDN/Kconfig | 1 drivers/md/dm-bufio.c | 6 + drivers/md/dm-integrity.c | 58 ++++++++++++++++--- drivers/md/dm-raid.c | 6 - drivers/md/dm-snap.c | 24 +++++++ drivers/md/dm.c | 2 drivers/misc/habanalabs/device.c | 2 drivers/misc/habanalabs/habanalabs_drv.c | 1 drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 8 +- drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c | 1 drivers/net/ethernet/freescale/fs_enet/mii-fec.c | 1 drivers/net/ethernet/freescale/ucc_geth.h | 9 ++ drivers/net/usb/cdc_ether.c | 7 ++ drivers/net/usb/r8152.c | 1 drivers/nvme/host/pci.c | 3 drivers/nvme/host/tcp.c | 2 drivers/nvme/target/rdma.c | 10 +++ drivers/regulator/bd718x7-regulator.c | 57 ++++++++++++++++++ drivers/usb/typec/altmodes/Kconfig | 2 fs/btrfs/extent_io.c | 4 - fs/btrfs/qgroup.c | 13 +++- fs/btrfs/super.c | 8 ++ fs/btrfs/tree-checker.c | 7 ++ fs/cifs/smb2pdu.c | 21 +----- fs/cifs/smb2proto.h | 2 fs/ext4/file.c | 2 fs/ext4/ioctl.c | 3 fs/ext4/namei.c | 16 ++--- fs/nfs/internal.h | 12 ++- fs/nfs/nfs4proc.c | 28 +++------ fs/nfs/pnfs.c | 58 ++++++++++--------- fs/nfs/pnfs.h | 8 -- include/linux/acpi.h | 7 ++ include/linux/dm-bufio.h | 1 kernel/trace/Kconfig | 2 kernel/trace/trace_kprobe.c | 2 lib/raid6/Makefile | 2 mm/hugetlb.c | 2 mm/slub.c | 2 net/netfilter/ipset/ip_set_hash_gen.h | 22 ++++--- net/netfilter/nf_conntrack_standalone.c | 3 net/netfilter/nf_nat_core.c | 1 net/netfilter/nft_compat.c | 37 ++++-------- net/sunrpc/addr.c | 2 security/lsm_audit.c | 7 +- sound/firewire/fireface/ff-transaction.c | 2 sound/firewire/tascam/tascam-transaction.c | 2 sound/soc/intel/skylake/cnl-sst.c | 1 sound/soc/meson/axg-tdm-interface.c | 14 ++++ sound/soc/meson/axg-tdmin.c | 13 ---- sound/soc/soc-dapm.c | 1 tools/perf/util/machine.c | 4 - tools/perf/util/session.c | 2 tools/testing/selftests/net/udpgro.sh | 34 +++++++++++ 78 files changed, 512 insertions(+), 215 deletions(-)
Adrian Hunter (1):
perf intel-pt: Fix 'CPU too large' error
Akilesh Kailash (1):
dm snapshot: flush merged data before committing metadata
Al Viro (1):
dump_common_audit_data(): fix racy accesses to ->d_name
Alexander Lobakin (1):
MIPS: relocatable: fix possible boot hangup with KASLR enabled
Anders Roxell (2):
mips: fix Section mismatch in reference
mips: lib: uncached: fix non-standard usage of variable 'sp'
Arnd Bergmann (2):
misdn: dsp: select CONFIG_BITREVERSE
ARM: picoxcell: fix missing interrupt-parent properties
Craig Tatlor (1):
drm/msm: Call msm_init_vram before binding the gpu
Dan Carpenter (1):
ASoC: Intel: fix error code cnl_set_dsp_D0()
Dave Wysochanski (1):
NFS4: Fix use-after-free in trace_event_raw_event_nfs4_set_lock
Dennis Li (1):
drm/amdgpu: fix a GPU hang issue when remove device
Dexuan Cui (1):
ACPI: scan: Harden acpi_device_add() against device ID overflows
Dinghao Liu (3):
habanalabs: Fix memleak in hl_device_reset RDMA/usnic: Fix memleak in find_free_vf_and_create_qp_grp
netfilter: nf_nat: Fix memleak in nf_nat_init
Filipe Manana (1):
btrfs: fix transaction leak and crash after RO remount caused by qgroup rescan
Florian Westphal (1):
netfilter: nft_compat: remove flush counter optimization
Geert Uytterhoeven (2):
ALSA: fireface: Fix integer overflow in transmit_midi_msg()
ALSA: firewire-tascam: Fix integer overflow in midi_port_work()
Gopal Tiwari (1):
nvme-pci: mark Samsung PM1725a as IGNORE_DEV_SUBNQN
Greg Kroah-Hartman (1):
Linux 5.4.91
Guido Günther (1):
regulator: bd718x7: Add enable times
Hans de Goede (1):
drm/i915/dsi: Use unconditional msleep for the panel_on_delay when there is no reset-deassert MIPI-sequence
Israel Rukshin (1):
nvmet-rdma: Fix list_del corruption on queue establishment failure
Jan Kara (2):
bfq: Fix computation of shallow depth
ext4: fix superblock checksum failure when setting password salt
Jani Nikula (1):
drm/i915/backlight: fix CPU mode backlight takeover on LPT
Jann Horn (1):
mm, slub: consider rest of partial list if acquire_slab() fails
Jerome Brunet (2):
ASoC: meson: axg-tdm-interface: fix loopback
ASoC: meson: axg-tdmin: fix axg skew offset
Jesper Dangaard Brouer (1):
netfilter: conntrack: fix reading nf_conntrack_buckets
John Millikin (1):
lib/raid6: Let $(UNROLL) rules work with macOS userland
Leon Romanovsky (1):
RDMA/restrack: Don't treat as an error allocation ID wrapping
Leon Schuermann (1):
r8152: Add Lenovo Powered USB-C Travel Hub
Lu Baolu (1):
iommu/vt-d: Fix unaligned addresses for intel_flush_svm_range_dev()
Mark Bloch (1):
RDMA/mlx5: Fix wrong free of blue flame register on error
Masahiro Yamada (4):
ARC: build: remove non-existing bootpImage from KBUILD_IMAGE
ARC: build: add uImage.lzma to the top-level target
ARC: build: add boot_targets to PHONY
ARC: build: move symlink creation to arch/arc/Makefile to avoid race
Masami Hiramatsu (1):
tracing/kprobes: Do the notrace functions check without kprobes on ftrace
Miaohe Lin (1):
mm/hugetlb: fix potential missing huge page size info
Michael Chan (1):
bnxt_en: Improve stats context resource accounting with RDMA driver loaded.
Michael Ellerman (1):
net: ethernet: fs_enet: Add missing MODULE_LICENSE
Mike Snitzer (2):
dm raid: fix discard limits for raid1
dm: eliminate potential source of excessive kernel log noise
Mikulas Patocka (2):
dm integrity: fix the maximum number of arguments dm integrity: fix flush with external metadata device
Oded Gabbay (1):
habanalabs: register to pci shutdown callback
Olaf Hering (1):
kbuild: enforce -Werror=return-type
Parav Pandit (1):
IB/mlx5: Fix error unwinding when set_has_smi_cap fails
Paul Cercueil (1):
MIPS: boot: Fix unaligned access with CONFIG_MIPS_RAW_APPENDED_DTB
Paulo Alcantara (1):
cifs: fix interrupted close commands
Peter Robinson (1):
usb: typec: Fix copy paste error for NVIDIA alt-mode description
Po-Hsu Lin (1):
selftests: fix the return value for UDP GRO test
Randy Dunlap (1):
arch/arc: add copy_user_page() to <asm/page.h> to fix build error on ARC
Rasmus Villemoes (1):
ethernet: ucc_geth: fix definition and size of ucc_geth_tx_global_pram
Sagi Grimberg (1):
nvme-tcp: fix possible data corruption with bio merges
Shawn Guo (1):
ACPI: scan: add stub acpi_create_platform_device() for !CONFIG_ACPI
Steve French (1):
smb3: remove unused flag passed into close functions
Su Yue (2):
btrfs: prevent NULL pointer dereference in extent_io_tree_panic
btrfs: tree-checker: check if chunk item end overflows
Theodore Ts'o (1):
ext4: don't leak old mountpoint samples
Thomas Hebb (1):
ASoC: dapm: remove widget from dirty list on free
Tom Rix (1):
RDMA/ocrdma: Fix use after free in ocrdma_dealloc_ucontext_pd()
Trond Myklebust (5):
pNFS: We want return-on-close to complete when evicting the inode
pNFS: Mark layout for return if return-on-close was not sent
pNFS: Stricter ordering of layoutget and layoutreturn NFS/pNFS: Fix a leak of the layout 'plh_outstanding' counter
NFS: nfs_igrab_and_active must first reference the superblock
Uwe Kleine-König (1):
hwmon: (pwm-fan) Ensure that calculation doesn't discard big period values
Vasily Averin (1):
netfilter: ipset: fixes possible oops in mtype_resize
Wei Liu (1):
x86/hyperv: check cpu mask after interrupt has been disabled
[email protected] (1):
net: sunrpc: interpret the return value of kstrtou32 correctly
yangerkun (1):
ext4: fix bug for rename with RENAME_WHITEOUT
Greg Kroah-Hartman
maintainerMakefile +2 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 90 +SUBLEVEL = 91 EXTRAVERSION = NAME = Kleptomaniac Octopus
@@ -480,7 +480,7 @@ KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \ -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \ -Werror=implicit-function-declaration -Werror=implicit-int \ - -Wno-format-security \ + -Werror=return-type -Wno-format-security \ -std=gnu89 KBUILD_CPPFLAGS := -D__KERNEL__ KBUILD_AFLAGS_KERNEL :=
arch/arc/Makefile +13 -7
@@ -90,16 +90,22 @@ libs-y += arch/arc/lib/ $(LIBGCC) boot := arch/arc/boot -#default target for make without any arguments. -KBUILD_IMAGE := $(boot)/bootpImage - -all: bootpImage -bootpImage: vmlinux - -boot_targets += uImage uImage.bin uImage.gz +boot_targets := uImage.bin uImage.gz uImage.lzma +PHONY += $(boot_targets) $(boot_targets): vmlinux $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ +uimage-default-y := uImage.bin +uimage-default-$(CONFIG_KERNEL_GZIP) := uImage.gz +uimage-default-$(CONFIG_KERNEL_LZMA) := uImage.lzma + +PHONY += uImage +uImage: $(uimage-default-y) + @ln -sf $< $(boot)/uImage + @$(kecho) ' Image $(boot)/uImage is ready' + +CLEAN_FILES += $(boot)/uImage + archclean: $(Q)$(MAKE) $(clean)=$(boot)
arch/arc/boot/Makefile +1 -10
@@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 -targets := vmlinux.bin vmlinux.bin.gz uImage +targets := vmlinux.bin vmlinux.bin.gz # uImage build relies on mkimage being availble on your host for ARC target # You will need to build u-boot for ARC, rename mkimage to arc-elf32-mkimage
@@ -13,11 +13,6 @@ LINUX_START_TEXT = $$(readelf -h vmlinux | \ UIMAGE_LOADADDR = $(CONFIG_LINUX_LINK_BASE) UIMAGE_ENTRYADDR = $(LINUX_START_TEXT) -suffix-y := bin -suffix-$(CONFIG_KERNEL_GZIP) := gz -suffix-$(CONFIG_KERNEL_LZMA) := lzma - -targets += uImage targets += uImage.bin targets += uImage.gz targets += uImage.lzma
@@ -42,7 +37,3 @@ $(obj)/uImage.gz: $(obj)/vmlinux.bin.gz FORCE $(obj)/uImage.lzma: $(obj)/vmlinux.bin.lzma FORCE $(call if_changed,uimage,lzma) - -$(obj)/uImage: $(obj)/uImage.$(suffix-y) - @ln -sf $(notdir $<) $@ - @echo ' Image $@ is ready'
arch/arc/include/asm/page.h +1 -0
@@ -10,6 +10,7 @@#ifndef __ASSEMBLY__#define clear_page (paddr) memset((paddr), 0, PAGE_SIZE) +#define copy_user_page (to, from, vaddr, pg) copy_page(to, from)#define copy_page (to, from) memcpy((to), (from), PAGE_SIZE)struct vm_area_struct ;
arch/arm/boot/dts/picoxcell-pc3x2.dtsi +4 -0
@@ -45,18 +45,21 @@ emac: gem@30000 { compatible = "cadence,gem"; reg = <0x30000 0x10000>; + interrupt-parent = <&vic0>; interrupts = <31>; }; dmac1: dmac@40000 { compatible = "snps,dw-dmac"; reg = <0x40000 0x10000>; + interrupt-parent = <&vic0>; interrupts = <25>; }; dmac2: dmac@50000 { compatible = "snps,dw-dmac"; reg = <0x50000 0x10000>; + interrupt-parent = <&vic0>; interrupts = <26>; };
@@ -234,6 +237,7 @@ axi2pico@c0000000 { compatible = "picochip,axi2pico-pc3x2"; reg = <0xc0000000 0x10000>; + interrupt-parent = <&vic0>; interrupts = <13 14 15 16 17 18 19 20 21>; }; };
arch/mips/boot/compressed/decompress.c +2 -1
@@ -13,6 +13,7 @@#include <linux/libfdt.h> #include <asm/addrspace.h> +#include <asm/unaligned.h> /* * These two variables specify the free mem region
@@ -113,7 +114,7 @@ void decompress_kernel(unsigned long boot_heap_start) dtb_size =fdt_totalsize ((void *)&__appended_dtb);/* last four bytes is always image size in little endian */ - image_size =le32_to_cpup ((void *)&__image_end -4 ); + image_size =get_unaligned_le32 ((void *)&__image_end -4 );/* copy dtb to where the booted kernel will expect it */ memcpy((void *)VMLINUX_LOAD_ADDRESS_ULL + image_size,
arch/mips/kernel/relocate.c +8 -2
@@ -187,8 +187,14 @@ static int __init relocate_exception_table(long offset)static inline __init unsigned long rotate_xor (unsigned long hash,const void *area,size_t size) { -size_t i; -unsigned long *ptr = (unsigned long *)area; +const typeof (hash) *ptr =PTR_ALIGN (area,sizeof (hash)); +size_t diff, i; + + diff = (void *)ptr - area; +if (unlikely (size < diff +sizeof (hash))) +return hash; + + size =ALIGN_DOWN (size - diff,sizeof (hash));for (i =0 ; i < size /sizeof (hash); i++) {/* Rotate by odd number of bits and XOR. */
arch/mips/lib/uncached.c +3 -1
@@ -37,10 +37,12 @@*/ unsigned long run_uncached (void *func) { - registerlong sp __asm__("$sp" ); registerlong ret __asm__("$2" );long lfunc = (long )func, ufunc;long usp; +long sp; + + __asm__("move %0, $sp" :"=r" (sp));if (sp >= (long )CKSEG0 && sp < (long )CKSEG2 ) usp =CKSEG1ADDR (sp);
arch/mips/mm/c-r4k.c +1 -1
@@ -1576,7 +1576,7 @@ static void __init loongson2_sc_init(void) c->options |=MIPS_CPU_INCLUSIVE_CACHES ; } -static void __init loongson3_sc_init (void ) +static void loongson3_sc_init (void ) {struct cpuinfo_mips *c = ¤t_cpu_data;unsigned int config2, lsize;
arch/mips/mm/sc-mips.c +2 -2
@@ -147,7 +147,7 @@ static inline int mips_sc_is_activated(struct cpuinfo_mips *c)return 1 ; } -static int __init mips_sc_probe_cm3 (void ) +static int mips_sc_probe_cm3 (void ) {struct cpuinfo_mips *c = ¤t_cpu_data;unsigned long cfg =read_gcr_l2_config ();
@@ -181,7 +181,7 @@ static int __init mips_sc_probe_cm3(void)return 0 ; } -static inline int __init mips_sc_probe (void ) +static inline int mips_sc_probe (void ) {struct cpuinfo_mips *c = ¤t_cpu_data;unsigned int config1, config2;
arch/x86/hyperv/mmu.c +9 -3
@@ -66,11 +66,17 @@ static void hyperv_flush_tlb_others(const struct cpumask *cpus,if (!hv_hypercall_pg) goto do_native; -if (cpumask_empty (cpus)) -return ; -local_irq_save (flags); +/* +* Only check the mask _after_ interrupt has been disabled to avoid the +* mask changing under our feet. +*/ +if (cpumask_empty (cpus)) { +local_irq_restore (flags); +return ; + } + flush_pcpu = (struct hv_tlb_flush **)this_cpu_ptr (hyperv_pcpu_input_arg);
block/bfq-iosched.c +4 -4
@@ -6320,13 +6320,13 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd,* limit 'something'. */ /* no more than 50% of tags for async I/O */ - bfqd->word_depths[0 ][0 ] =max ((1U << bt->sb.shift) >>1 ,1U ); + bfqd->word_depths[0 ][0 ] =max (bt->sb.depth >>1 ,1U );/* * no more than 75% of tags for sync writes (25% extra tags * w.r.t. async I/O, to prevent async I/O from starving sync * writes) */ - bfqd->word_depths[0 ][1 ] =max (((1U << bt->sb.shift) *3 ) >>2 ,1U ); + bfqd->word_depths[0 ][1 ] =max ((bt->sb.depth *3 ) >>2 ,1U );/* * In-word depths in case some bfq_queue is being weight-
@@ -6336,9 +6336,9 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd,* shortage. */ /* no more than ~18% of tags for async I/O */ - bfqd->word_depths[1 ][0 ] =max (((1U << bt->sb.shift) *3 ) >>4 ,1U ); + bfqd->word_depths[1 ][0 ] =max ((bt->sb.depth *3 ) >>4 ,1U );/* no more than ~37% of tags for sync writes (~20% extra tags) */ - bfqd->word_depths[1 ][1 ] =max (((1U << bt->sb.shift) *6 ) >>4 ,1U ); + bfqd->word_depths[1 ][1 ] =max ((bt->sb.depth *6 ) >>4 ,1U );for (i =0 ; i <2 ; i++)for (j =0 ; j <2 ; j++)
drivers/acpi/internal.h +1 -1
@@ -97,7 +97,7 @@ void acpi_scan_table_handler(u32 event, void *table, void *context);extern struct list_head acpi_bus_id_list;struct acpi_device_bus_id { -char bus_id[15 ]; +const char *bus_id;unsigned int instance_no;struct list_head node; };
drivers/acpi/scan.c +14 -1
@@ -487,6 +487,7 @@ static void acpi_device_del(struct acpi_device *device) acpi_device_bus_id->instance_no--; else {list_del (&acpi_device_bus_id->node); +kfree_const (acpi_device_bus_id->bus_id);kfree (acpi_device_bus_id); }break ;
@@ -675,7 +676,14 @@ int acpi_device_add(struct acpi_device *device, }if (!found) { acpi_device_bus_id = new_bus_id; -strcpy (acpi_device_bus_id->bus_id,acpi_device_hid (device)); + acpi_device_bus_id->bus_id = +kstrdup_const (acpi_device_hid (device),GFP_KERNEL ); +if (!acpi_device_bus_id->bus_id) { +pr_err (PREFIX "Memory allocation error for bus id\n" ); + result = -ENOMEM ; + goto err_free_new_bus_id; + } + acpi_device_bus_id->instance_no =0 ;list_add_tail (&acpi_device_bus_id->node, &acpi_bus_id_list); }
@@ -710,6 +718,11 @@ int acpi_device_add(struct acpi_device *device,if (device->parent)list_del (&device->node);list_del (&device->wakeup_list); + + err_free_new_bus_id: +if (!found) +kfree (new_bus_id); +mutex_unlock (&acpi_device_lock); err_detach:
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +2 -2
@@ -2057,11 +2057,11 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev)if (adev->gmc.xgmi.num_physical_nodes >1 )amdgpu_xgmi_remove_device (adev); -amdgpu_amdkfd_device_fini (adev); -amdgpu_device_set_pg_state (adev,AMD_PG_STATE_UNGATE );amdgpu_device_set_cg_state (adev,AMD_CG_STATE_UNGATE ); +amdgpu_amdkfd_device_fini (adev); +/* need to disable SMC first */ for (i =0 ; i < adev->num_ip_blocks; i++) {if (!adev->ip_blocks[i].status.hw)
drivers/gpu/drm/i915/display/intel_panel.c +5 -4
@@ -1603,20 +1603,21 @@ static int lpt_setup_backlight(struct intel_connector *connector, enum pipe unus val =pch_get_backlight (connector); else val =lpt_get_backlight (connector); - val =intel_panel_compute_brightness (connector, val); - panel->backlight.level =clamp (val, panel->backlight.min, - panel->backlight.max);if (cpu_mode) {DRM_DEBUG_KMS ("CPU backlight register was enabled, switching to PCH override\n" );/* Write converted CPU PWM value to PCH override register */ -lpt_set_backlight (connector->base.state, panel->backlight.level); +lpt_set_backlight (connector->base.state, val);I915_WRITE (BLC_PWM_PCH_CTL1 , pch_ctl1 |BLM_PCH_OVERRIDE_ENABLE );I915_WRITE (BLC_PWM_CPU_CTL2 , cpu_ctl2 & ~BLM_PWM_ENABLE ); } + val =intel_panel_compute_brightness (connector, val); + panel->backlight.level =clamp (val, panel->backlight.min, + panel->backlight.max); +return 0 ; }
drivers/gpu/drm/i915/display/vlv_dsi.c +13 -3
@@ -797,10 +797,20 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder,if (intel_dsi->gpio_panel)gpiod_set_value_cansleep (intel_dsi->gpio_panel,1 );intel_dsi_vbt_exec_sequence (intel_dsi,MIPI_SEQ_POWER_ON ); -intel_dsi_msleep (intel_dsi, intel_dsi->panel_on_delay); -/* Deassert reset */ -intel_dsi_vbt_exec_sequence (intel_dsi,MIPI_SEQ_DEASSERT_RESET ); +/* +* Give the panel time to power-on and then deassert its reset. +* Depending on the VBT MIPI sequences version the deassert-seq +* may contain the necessary delay, intel_dsi_msleep() will skip +* the delay in that case. If there is no deassert-seq, then an +* unconditional msleep is used to give the panel time to power-on. +*/ +if (dev_priv->vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET ]) { +intel_dsi_msleep (intel_dsi, intel_dsi->panel_on_delay); +intel_dsi_vbt_exec_sequence (intel_dsi,MIPI_SEQ_DEASSERT_RESET ); + }else { +msleep (intel_dsi->panel_on_delay); + }if (IS_GEMINILAKE (dev_priv)) { glk_cold_boot =glk_dsi_enable_io (encoder);
drivers/gpu/drm/msm/msm_drv.c +4 -4
@@ -432,14 +432,14 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)drm_mode_config_init (ddev); -/* Bind all our sub-components: */ - ret =component_bind_all (dev, ddev); + ret =msm_init_vram (ddev);if (ret) goto err_destroy_mdss; - ret =msm_init_vram (ddev); +/* Bind all our sub-components: */ + ret =component_bind_all (dev, ddev);if (ret) - goto err_msm_uninit; + goto err_destroy_mdss;if (!dev->dma_parms) { dev->dma_parms = devm_kzalloc(dev, sizeof(*dev->dma_parms),
drivers/hwmon/pwm-fan.c +11 -1
@@ -330,8 +330,18 @@ static int pwm_fan_probe(struct platform_device *pdev) ctx->pwm_value =MAX_PWM ; -/* Set duty cycle to maximum allowed and enable PWM output */ pwm_init_state (ctx->pwm, &state); +/* +* __set_pwm assumes that MAX_PWM * (period - 1) fits into an unsigned +* long. Check this here to prevent the fan running at a too low +* frequency. +*/ +if (state.period >ULONG_MAX /MAX_PWM +1 ) { +dev_err (dev,"Configured period too big\n" ); +return -EINVAL ; + } + +/* Set duty cycle to maximum allowed and enable PWM output */ state.duty_cycle = ctx->pwm->args.period -1 ; state.enabled = true;
drivers/infiniband/core/restrack.c +1 -0
@@ -234,6 +234,7 @@ static void rdma_restrack_add(struct rdma_restrack_entry *res) }else { ret =xa_alloc_cyclic (&rt->xa, &res->id, res, xa_limit_32b, &rt->next_id,GFP_KERNEL ); + ret = (ret <0 ) ? ret :0 ; }if (!ret)
drivers/infiniband/hw/mlx5/main.c +2 -2
@@ -6173,7 +6173,7 @@ static int mlx5_ib_stage_init_init(struct mlx5_ib_dev *dev) err =set_has_smi_cap (dev);if (err) -return err; + goto err_mp;if (!mlx5_core_mp_enabled (mdev)) {for (i =1 ; i <= dev->num_ports; i++) {
@@ -6626,7 +6626,7 @@ static int mlx5_ib_stage_bfrag_init(struct mlx5_ib_dev *dev) err =mlx5_alloc_bfreg (dev->mdev, &dev->fp_bfreg, false, true);if (err) -mlx5_free_bfreg (dev->mdev, &dev->fp_bfreg); +mlx5_free_bfreg (dev->mdev, &dev->bfreg);return err; }
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +1 -1
@@ -442,9 +442,9 @@ static void ocrdma_dealloc_ucontext_pd(struct ocrdma_ucontext *uctx)pr_err ("%s(%d) Freeing in use pdid=0x%x.\n" , __func__, dev->id, pd->id); } -kfree (uctx->cntxt_pd); uctx->cntxt_pd =NULL ;_ocrdma_dealloc_pd (dev, pd); +kfree (pd); }static struct ocrdma_pd *ocrdma_get_ucontext_pd (struct ocrdma_ucontext *uctx)
drivers/infiniband/hw/usnic/usnic_ib_verbs.c +3 -0
@@ -214,6 +214,7 @@ find_free_vf_and_create_qp_grp(struct usnic_ib_dev *us_ibdev, }usnic_uiom_free_dev_list (dev_list); + dev_list =NULL ; }/* Try to find resources on an unused vf */
@@ -239,6 +240,8 @@ find_free_vf_and_create_qp_grp(struct usnic_ib_dev *us_ibdev, qp_grp_check:if (IS_ERR_OR_NULL (qp_grp)) {usnic_err ("Failed to allocate qp_grp\n" ); +if (usnic_ib_share_vf) +usnic_uiom_free_dev_list (dev_list);return ERR_PTR (qp_grp ?PTR_ERR (qp_grp) : -ENOMEM ); }return qp_grp;
drivers/iommu/intel-svm.c +20 -2
@@ -99,8 +99,10 @@ int intel_svm_finish_prq(struct intel_iommu *iommu)return 0 ; } -static void intel_flush_svm_range_dev (struct intel_svm *svm,struct intel_svm_dev *sdev, -unsigned long address,unsigned long pages,int ih) +static void __flush_svm_range_dev (struct intel_svm *svm, +struct intel_svm_dev *sdev, +unsigned long address, +unsigned long pages,int ih) {struct qi_desc desc;
@@ -151,6 +153,22 @@ static void intel_flush_svm_range_dev (struct intel_svm *svm, struct intel_svm_d } } +static void intel_flush_svm_range_dev (struct intel_svm *svm, +struct intel_svm_dev *sdev, +unsigned long address, +unsigned long pages,int ih) +{ +unsigned long shift =ilog2 (__roundup_pow_of_two (pages)); +unsigned long align = (1ULL << (VTD_PAGE_SHIFT + shift)); +unsigned long start =ALIGN_DOWN (address, align); +unsigned long end =ALIGN (address + (pages <<VTD_PAGE_SHIFT ), align); + +while (start < end) { +__flush_svm_range_dev (svm, sdev, start, align >>VTD_PAGE_SHIFT , ih); + start += align; + } +} +static void intel_flush_svm_range (struct intel_svm *svm,unsigned long address,unsigned long pages,int ih) {
drivers/isdn/mISDN/Kconfig +1 -0
@@ -13,6 +13,7 @@ if MISDN != n config MISDN_DSP tristate "Digital Audio Processing of transparent data" depends on MISDN + select BITREVERSE help Enable support for digital audio processing capability.
drivers/md/dm-bufio.c +6 -0
@@ -1446,6 +1446,12 @@ sector_t dm_bufio_get_device_size(struct dm_bufio_client *c) }EXPORT_SYMBOL_GPL (dm_bufio_get_device_size); +struct dm_io_client *dm_bufio_get_dm_io_client (struct dm_bufio_client *c) +{ +return c->dm_io; +} +EXPORT_SYMBOL_GPL (dm_bufio_get_dm_io_client); +sector_t dm_bufio_get_block_number (struct dm_buffer *b) {return b->block;
drivers/md/dm-integrity.c +49 -9
114 lines not on this page · raw message
drivers/md/dm-raid.c +3 -3
@@ -3744,10 +3744,10 @@ static void raid_io_hints(struct dm_target *ti, struct queue_limits *limits)blk_limits_io_opt (limits, chunk_size_bytes *mddev_data_stripes (rs));/* -* RAID1 and RAID10 personalities require bio splitting, -* RAID0/4/5/6 don't and process large discard bios properly. +* RAID0 and RAID10 personalities require bio splitting, +* RAID1/4/5/6 don't and process large discard bios properly. */ -if (rs_is_raid1 (rs) ||rs_is_raid10 (rs)) { +if (rs_is_raid0 (rs) ||rs_is_raid10 (rs)) { limits->discard_granularity = chunk_size_bytes; limits->max_discard_sectors = rs->md.chunk_sectors; }
drivers/md/dm-snap.c +24 -0
@@ -141,6 +141,11 @@ struct dm_snapshot {* for them to be committed. */ struct bio_list bios_queued_during_merge; + +/* +* Flush data after merge. +*/ +struct bio flush_bio; };/*
@@ -1121,6 +1126,17 @@ static void snapshot_merge_next_chunks(struct dm_snapshot *s)static void error_bios (struct bio *bio); +static int flush_data (struct dm_snapshot *s) +{ +struct bio *flush_bio = &s->flush_bio; + +bio_reset (flush_bio); +bio_set_dev (flush_bio, s->origin->bdev); + flush_bio->bi_opf =REQ_OP_WRITE |REQ_PREFLUSH ; + +return submit_bio_wait (flush_bio); +} +static void merge_callback (int read_err,unsigned long write_err,void *context) {struct dm_snapshot *s = context;
@@ -1134,6 +1150,11 @@ static void merge_callback(int read_err, unsigned long write_err, void *context) goto shut; } +if (flush_data (s) <0 ) { +DMERR ("Flush after merge failed: shutting down merge" ); + goto shut; + } +if (s->store->type->commit_merge (s->store, s->num_merging_chunks) <0 ) {DMERR ("Write error in exception store: shutting down merge" );
@@ -1318,6 +1339,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv) s->first_merging_chunk =0 ; s->num_merging_chunks =0 ;bio_list_init (&s->bios_queued_during_merge); +bio_init (&s->flush_bio,NULL ,0 );/* Allocate hash table for COW data */ if (init_hash_tables (s)) {
@@ -1504,6 +1526,8 @@ static void snapshot_dtr(struct dm_target *ti)dm_exception_store_destroy (s->store); +bio_uninit (&s->flush_bio); +dm_put_device (ti, s->cow);dm_put_device (ti, s->origin);
drivers/md/dm.c +1 -1
@@ -548,7 +548,7 @@ static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode,* subset of the parent bdev; require extra privileges. */ if (!capable (CAP_SYS_RAWIO )) { -DMWARN_LIMIT ( +DMDEBUG_LIMIT ("%s: sending ioctl %x to DM device without required privilege." , current->comm, cmd); r = -ENOIOCTLCMD ;
drivers/misc/habanalabs/device.c +2 -0
@@ -959,6 +959,7 @@ int hl_device_reset(struct hl_device *hdev, bool hard_reset, GFP_KERNEL);if (!hdev->kernel_ctx) { rc = -ENOMEM ; +hl_mmu_fini (hdev); goto out_err; }
@@ -970,6 +971,7 @@ int hl_device_reset(struct hl_device *hdev, bool hard_reset, "failed to init kernel ctx in hard reset\n");kfree (hdev->kernel_ctx); hdev->kernel_ctx =NULL ; +hl_mmu_fini (hdev); goto out_err; } }
drivers/misc/habanalabs/habanalabs_drv.c +1 -0
@@ -443,6 +443,7 @@ static struct pci_driver hl_pci_driver = { .id_table = ids, .probe = hl_pci_probe, .remove = hl_pci_remove, + .shutdown = hl_pci_remove, .driver.pm = &hl_pm_ops, };
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c +6 -2
@@ -216,8 +216,12 @@ int bnxt_get_ulp_msix_base(struct bnxt *bp)int bnxt_get_ulp_stat_ctxs (struct bnxt *bp) { -if (bnxt_ulp_registered (bp->edev,BNXT_ROCE_ULP )) -return BNXT_MIN_ROCE_STAT_CTXS ; +if (bnxt_ulp_registered (bp->edev,BNXT_ROCE_ULP )) { +struct bnxt_en_dev *edev = bp->edev; + +if (edev->ulp_tbl[BNXT_ROCE_ULP ].msix_requested) +return BNXT_MIN_ROCE_STAT_CTXS ; + }return 0 ; }
drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c +1 -0
@@ -223,3 +223,4 @@ static struct platform_driver fs_enet_bb_mdio_driver = { };module_platform_driver (fs_enet_bb_mdio_driver); +MODULE_LICENSE ("GPL" );
drivers/net/ethernet/freescale/fs_enet/mii-fec.c +1 -0
@@ -224,3 +224,4 @@ static struct platform_driver fs_enet_fec_mdio_driver = { };module_platform_driver (fs_enet_fec_mdio_driver); +MODULE_LICENSE ("GPL" );
drivers/net/ethernet/freescale/ucc_geth.h +8 -1
@@ -576,7 +576,14 @@ struct ucc_geth_tx_global_pram {u32 vtagtable[0x8 ];/* 8 4-byte VLAN tags */ u32 tqptr;/* a base pointer to the Tx Queues Memory Region */ -u8 res2[0x80 -0x74 ]; +u8 res2[0x78 -0x74 ]; +u64 snums_en; +u32 l2l3baseptr;/* top byte consists of a few other bit fields */ + +u16 mtu[8 ]; +u8 res3[0xa8 -0x94 ]; +u32 wrrtablebase;/* top byte is reserved */ +u8 res4[0xc0 -0xac ]; } __packed;/* structure representing Extended Filtering Global Parameters in PRAM */
drivers/net/usb/cdc_ether.c +7 -0
@@ -787,6 +787,13 @@ static const struct usb_device_id products[] = { .driver_info = 0, }, +/* Lenovo Powered USB-C Travel Hub (4X90S92381, based on Realtek RTL8153) */ +{ +USB_DEVICE_AND_INTERFACE_INFO (LENOVO_VENDOR_ID ,0x721e ,USB_CLASS_COMM , + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info =0 , +}, + /* ThinkPad USB-C Dock Gen 2 (based on Realtek RTL8153) */ { USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0xa387, USB_CLASS_COMM,
drivers/net/usb/r8152.c +1 -0
@@ -5845,6 +5845,7 @@ static const struct usb_device_id rtl8152_table[] = { {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7205)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x720c)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7214)}, + {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x721e)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0xa387)}, {REALTEK_USB_DEVICE(VENDOR_ID_LINKSYS, 0x0041)}, {REALTEK_USB_DEVICE(VENDOR_ID_NVIDIA, 0x09ff)},
drivers/nvme/host/pci.c +2 -1
@@ -3145,7 +3145,8 @@ static const struct pci_device_id nvme_id_table[] = { { PCI_DEVICE(0x144d, 0xa821), /* Samsung PM1725 */ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, { PCI_DEVICE(0x144d, 0xa822), /* Samsung PM1725a */ - .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, }, + .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY | + NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE(0x1d1d, 0x1f1f), /* LighNVM qemu device */ .driver_data = NVME_QUIRK_LIGHTNVM, }, { PCI_DEVICE(0x1d1d, 0x2807), /* CNEX WL */
drivers/nvme/host/tcp.c +1 -1
@@ -186,7 +186,7 @@ static inline size_t nvme_tcp_req_cur_offset(struct nvme_tcp_request *req)static inline size_t nvme_tcp_req_cur_length (struct nvme_tcp_request *req) { -return min_t (size_t, req->iter.bvec->bv_len - req->iter.iov_offset, +return min_t (size_t,iov_iter_single_seg_count (&req->iter), req->pdu_len - req->pdu_sent); }
drivers/nvme/target/rdma.c +10 -0
@@ -1351,6 +1351,16 @@ static void __nvmet_rdma_queue_disconnect(struct nvmet_rdma_queue *queue)spin_lock_irqsave (&queue->state_lock, flags);switch (queue->state) {case NVMET_RDMA_Q_CONNECTING : +while (!list_empty (&queue->rsp_wait_list)) { +struct nvmet_rdma_rsp *rsp; + + rsp =list_first_entry (&queue->rsp_wait_list, + struct nvmet_rdma_rsp, + wait_list); +list_del (&rsp->wait_list); +nvmet_rdma_put_rsp (rsp); + } + fallthrough;case NVMET_RDMA_Q_LIVE : queue->state =NVMET_RDMA_Q_DISCONNECTING ; disconnect = true;
drivers/regulator/bd718x7-regulator.c +57 -0
225 lines not on this page · raw message
drivers/usb/typec/altmodes/Kconfig +1 -1
@@ -20,6 +20,6 @@ config TYPEC_NVIDIA_ALTMODE to enable support for VirtualLink devices with NVIDIA GPUs. To compile this driver as a module, choose M here: the - module will be called typec_displayport. + module will be called typec_nvidia. endmenu
fs/btrfs/extent_io.c +1 -3
@@ -647,9 +647,7 @@ alloc_extent_state_atomic(struct extent_state *prealloc)static void extent_io_tree_panic (struct extent_io_tree *tree,int err) { -struct inode *inode = tree->private_data; - -btrfs_panic (btrfs_sb (inode->i_sb), err, +btrfs_panic (tree->fs_info, err,"locking error: extent tree was modified by another thread while locked" ); }
fs/btrfs/qgroup.c +10 -3
@@ -3144,6 +3144,12 @@ static int qgroup_rescan_leaf(struct btrfs_trans_handle *trans,return ret; } +static bool rescan_should_stop (struct btrfs_fs_info *fs_info) +{ +return btrfs_fs_closing (fs_info) || +test_bit (BTRFS_FS_STATE_REMOUNTING , &fs_info->fs_state); +} +static void btrfs_qgroup_rescan_worker (struct btrfs_work *work) { struct btrfs_fs_info *fs_info = container_of(work, struct btrfs_fs_info,
@@ -3152,6 +3158,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work)struct btrfs_trans_handle *trans =NULL ;int err = -ENOMEM ;int ret =0 ; +bool stopped = false; path =btrfs_alloc_path ();if (!path)
@@ -3164,7 +3171,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work) path->skip_locking =1 ; err =0 ; -while (!err && !btrfs_fs_closing (fs_info)) { +while (!err && !(stopped =rescan_should_stop (fs_info))) { trans =btrfs_start_transaction (fs_info->fs_root,0 );if (IS_ERR (trans)) { err =PTR_ERR (trans);
@@ -3207,7 +3214,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work) }mutex_lock (&fs_info->qgroup_rescan_lock); -if (!btrfs_fs_closing (fs_info)) +if (!stopped) fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN ;if (trans) { ret =update_qgroup_status_item (trans);
@@ -3226,7 +3233,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work)btrfs_end_transaction (trans); -if (btrfs_fs_closing (fs_info)) { +if (stopped) {btrfs_info (fs_info,"qgroup scan paused" ); }else if (err >=0 ) { btrfs_info(fs_info, "qgroup scan completed%s",
fs/btrfs/super.c +8 -0
@@ -1792,6 +1792,14 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data)btrfs_scrub_cancel (fs_info);btrfs_pause_balance (fs_info); +/* +* Pause the qgroup rescan worker if it is running. We don't want +* it to be still running after we are in RO mode, as after that, +* by the time we unmount, it might have left a transaction open, +* so we would leak the transaction and/or crash. +*/ +btrfs_qgroup_wait_for_completion (fs_info, false); + ret =btrfs_commit_super (fs_info);if (ret) goto restore;
fs/btrfs/tree-checker.c +7 -0
@@ -571,6 +571,7 @@ int btrfs_check_chunk_valid(struct extent_buffer *leaf, {struct btrfs_fs_info *fs_info = leaf->fs_info;u64 length; +u64 chunk_end;u64 stripe_len;u16 num_stripes;u16 sub_stripes;
@@ -625,6 +626,12 @@ int btrfs_check_chunk_valid(struct extent_buffer *leaf, "invalid chunk length, have %llu", length);return -EUCLEAN ; } +if (unlikely (check_add_overflow (logical, length, &chunk_end))) { +chunk_err (leaf, chunk, logical, +"invalid chunk logical start and length, have logical start %llu length %llu" , + logical, length); +return -EUCLEAN ; + }if (!is_power_of_2 (stripe_len) || stripe_len !=BTRFS_STRIPE_LEN ) { chunk_err(leaf, chunk, logical, "invalid chunk stripe length: %llu",
fs/cifs/smb2pdu.c +6 -15
@@ -2945,8 +2945,8 @@ SMB2_close_free(struct smb_rqst *rqst) }int -SMB2_close_flags (const unsigned int xid,struct cifs_tcon *tcon, -u64 persistent_fid,u64 volatile_fid,int flags) +SMB2_close (const unsigned int xid,struct cifs_tcon *tcon, +u64 persistent_fid,u64 volatile_fid) {struct smb_rqst rqst;struct smb2_close_rsp *rsp =NULL ;
@@ -2955,6 +2955,7 @@ SMB2_close_flags(const unsigned int xid, struct cifs_tcon *tcon,struct kvec rsp_iov;int resp_buftype =CIFS_NO_BUFFER ;int rc =0 ; +int flags =0 ;cifs_dbg (FYI ,"Close\n" );
@@ -2993,27 +2994,17 @@ SMB2_close_flags(const unsigned int xid, struct cifs_tcon *tcon, close_exit:SMB2_close_free (&rqst);free_rsp_buf (resp_buftype, rsp); -return rc; -} - -int -SMB2_close (const unsigned int xid,struct cifs_tcon *tcon, -u64 persistent_fid,u64 volatile_fid) -{ -int rc; -int tmp_rc; - - rc =SMB2_close_flags (xid, tcon, persistent_fid, volatile_fid,0 );/* retry close in a worker thread if this one is interrupted */ -if (rc == -EINTR ) { +if (is_interrupt_error (rc)) { +int tmp_rc; + tmp_rc =smb2_handle_cancelled_close (tcon, persistent_fid, volatile_fid);if (tmp_rc)cifs_dbg (VFS ,"handle cancelled close fid 0x%llx returned error %d\n" , persistent_fid, tmp_rc); } -return rc; }
fs/cifs/smb2proto.h +0 -2
@@ -156,8 +156,6 @@ extern int SMB2_change_notify(const unsigned int xid, struct cifs_tcon *tcon,extern int SMB2_close (const unsigned int xid,struct cifs_tcon *tcon,u64 persistent_file_id,u64 volatile_file_id); -extern int SMB2_close_flags (const unsigned int xid,struct cifs_tcon *tcon, -u64 persistent_fid,u64 volatile_fid,int flags);extern int SMB2_close_init (struct cifs_tcon *tcon,struct smb_rqst *rqst,u64 persistent_file_id,u64 volatile_file_id);extern void SMB2_close_free (struct smb_rqst *rqst);
fs/ext4/file.c +1 -1
@@ -432,7 +432,7 @@ static int ext4_sample_last_mounted(struct super_block *sb, err =ext4_journal_get_write_access (handle, sbi->s_sbh);if (err) goto out_journal; -strlcpy (sbi->s_es->s_last_mounted, cp, +strncpy (sbi->s_es->s_last_mounted, cp,sizeof (sbi->s_es->s_last_mounted));ext4_handle_dirty_super (handle, sb); out_journal:
fs/ext4/ioctl.c +3 -0
@@ -1160,7 +1160,10 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) err =ext4_journal_get_write_access (handle, sbi->s_sbh);if (err) goto pwsalt_err_journal; +lock_buffer (sbi->s_sbh);generate_random_uuid (sbi->s_es->s_encrypt_pw_salt); +ext4_superblock_csum_set (sb); +unlock_buffer (sbi->s_sbh); err =ext4_handle_dirty_metadata (handle,NULL , sbi->s_sbh); pwsalt_err_journal:
fs/ext4/namei.c +9 -7
@@ -3544,8 +3544,6 @@ static int ext4_setent(handle_t *handle, struct ext4_renament *ent,return retval; } } -brelse (ent->bh); - ent->bh =NULL ;return 0 ; }
@@ -3745,6 +3743,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, } } + old_file_type = old.de->file_type;if (IS_DIRSYNC (old.dir) ||IS_DIRSYNC (new.dir))ext4_handle_sync (handle);
@@ -3772,7 +3771,6 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, force_reread = (new.dir->i_ino == old.dir->i_ino &&ext4_test_inode_flag (new.dir,EXT4_INODE_INLINE_DATA )); - old_file_type = old.de->file_type;if (whiteout) {/* * Do this before adding a new entry, so the old entry is sure
@@ -3844,15 +3842,19 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, retval =0 ; end_rename: -brelse (old.dir_bh); -brelse (old.bh); -brelse (new.bh);if (whiteout) { -if (retval) +if (retval) { +ext4_setent (handle, &old, + old.inode->i_ino, old_file_type);drop_nlink (whiteout); + }unlock_new_inode (whiteout);iput (whiteout); + } +brelse (old.dir_bh); +brelse (old.bh); +brelse (new.bh);if (handle)ext4_journal_stop (handle);return retval;
fs/nfs/internal.h +7 -5
@@ -569,12 +569,14 @@ extern void nfs4_test_session_trunk(struct rpc_clnt *clnt,static inline struct inode *nfs_igrab_and_active (struct inode *inode) { - inode =igrab (inode); -if (inode !=NULL && !nfs_sb_active (inode->i_sb)) { -iput (inode); - inode =NULL ; +struct super_block *sb = inode->i_sb; + +if (sb &&nfs_sb_active (sb)) { +if (igrab (inode)) +return inode; +nfs_sb_deactive (sb); } -return inode; +return NULL ; }static inline void nfs_iput_and_deactive (struct inode *inode)
fs/nfs/nfs4proc.c +11 -17
@@ -3488,10 +3488,8 @@ static void nfs4_close_done(struct rpc_task *task, void *data)trace_nfs4_close (state, &calldata->arg, &calldata->res, task->tk_status);/* Handle Layoutreturn errors */ -if (pnfs_roc_done (task, calldata->inode, - &calldata->arg.lr_args, - &calldata->res.lr_res, - &calldata->res.lr_ret) == -EAGAIN ) +if (pnfs_roc_done (task, &calldata->arg.lr_args, &calldata->res.lr_res, + &calldata->res.lr_ret) == -EAGAIN ) goto out_restart;/* hmm. we are done with the inode, and in the process of freeing
@@ -6238,10 +6236,8 @@ static void nfs4_delegreturn_done(struct rpc_task *task, void *calldata)trace_nfs4_delegreturn_exit (&data->args, &data->res, task->tk_status);/* Handle Layoutreturn errors */ -if (pnfs_roc_done (task, data->inode, - &data->args.lr_args, - &data->res.lr_res, - &data->res.lr_ret) == -EAGAIN ) +if (pnfs_roc_done (task, &data->args.lr_args, &data->res.lr_res, + &data->res.lr_ret) == -EAGAIN ) goto out_restart;switch (task->tk_status) {
@@ -6290,10 +6286,10 @@ static void nfs4_delegreturn_release(void *calldata)struct nfs4_delegreturndata *data = calldata;struct inode *inode = data->inode; +if (data->lr.roc) +pnfs_roc_release (&data->lr.arg, &data->lr.res, + data->res.lr_ret);if (inode) { -if (data->lr.roc) -pnfs_roc_release (&data->lr.arg, &data->lr.res, - data->res.lr_ret);nfs_post_op_update_inode_force_wcc (inode, &data->fattr);nfs_iput_and_deactive (inode); }
@@ -6368,16 +6364,14 @@ static int _nfs4_proc_delegreturn(struct inode *inode, const struct cred *cred,nfs_fattr_init (data->res.fattr); data->timestamp = jiffies; data->rpc_status =0 ; - data->lr.roc =pnfs_roc (inode, &data->lr.arg, &data->lr.res, cred); data->inode =nfs_igrab_and_active (inode); -if (data->inode) { +if (data->inode || issync) { + data->lr.roc =pnfs_roc (inode, &data->lr.arg, &data->lr.res, + cred);if (data->lr.roc) { data->args.lr_args = &data->lr.arg; data->res.lr_res = &data->lr.res; } - }else if (data->lr.roc) { -pnfs_roc_release (&data->lr.arg, &data->lr.res,0 ); - data->lr.roc = false; } task_setup_data.callback_data = data;
@@ -6959,9 +6953,9 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f data->arg.new_lock_owner, ret); }else data->cancelled = true; +trace_nfs4_set_lock (fl, state, &data->res.stateid, cmd, ret);rpc_put_task (task);dprintk ("%s: done, ret = %d!\n" , __func__, ret); -trace_nfs4_set_lock (fl, state, &data->res.stateid, cmd, ret);return ret; }
fs/nfs/pnfs.c +31 -27
100 lines not on this page · raw message
fs/nfs/pnfs.h +3 -5
@@ -283,10 +283,8 @@ bool pnfs_roc(struct inode *ino,struct nfs4_layoutreturn_args *args, struct nfs4_layoutreturn_res *res, const struct cred *cred); -int pnfs_roc_done (struct rpc_task *task,struct inode *inode, -struct nfs4_layoutreturn_args **argpp, -struct nfs4_layoutreturn_res **respp, -int *ret); +int pnfs_roc_done (struct rpc_task *task,struct nfs4_layoutreturn_args **argpp, +struct nfs4_layoutreturn_res **respp,int *ret);void pnfs_roc_release (struct nfs4_layoutreturn_args *args,struct nfs4_layoutreturn_res *res,int ret);
@@ -711,7 +709,7 @@ pnfs_roc(struct inode *ino, }static inline int -pnfs_roc_done (struct rpc_task *task,struct inode *inode, +pnfs_roc_done (struct rpc_task *task,struct nfs4_layoutreturn_args **argpp,struct nfs4_layoutreturn_res **respp,int *ret)
include/linux/acpi.h +7 -0
@@ -837,6 +837,13 @@ static inline int acpi_device_modalias(struct device *dev,return -ENODEV ; } +static inline struct platform_device * +acpi_create_platform_device (struct acpi_device *adev, +struct property_entry *properties) +{ +return NULL ; +} +static inline bool acpi_dma_supported (struct acpi_device *adev) {return false;
include/linux/dm-bufio.h +1 -0
@@ -138,6 +138,7 @@ void dm_bufio_set_minimum_buffers(struct dm_bufio_client *c, unsigned n);unsigned dm_bufio_get_block_size (struct dm_bufio_client *c);sector_t dm_bufio_get_device_size (struct dm_bufio_client *c); +struct dm_io_client *dm_bufio_get_dm_io_client (struct dm_bufio_client *c);sector_t dm_bufio_get_block_number (struct dm_buffer *b);void *dm_bufio_get_block_data (struct dm_buffer *b);void *dm_bufio_get_aux_data (struct dm_buffer *b);
kernel/trace/Kconfig +1 -1
@@ -478,7 +478,7 @@ config KPROBE_EVENTS config KPROBE_EVENTS_ON_NOTRACE bool "Do NOT protect notrace function from kprobe events" depends on KPROBE_EVENTS - depends on KPROBES_ON_FTRACE + depends on DYNAMIC_FTRACE default n help This is only for the developers who want to debug ftrace itself
kernel/trace/trace_kprobe.c +1 -1
@@ -433,7 +433,7 @@ static int disable_trace_kprobe(struct trace_event_call *call,return 0 ; } -#if defined(CONFIG_KPROBES_ON_FTRACE ) && \ +#if defined(CONFIG_DYNAMIC_FTRACE ) && \ !defined(CONFIG_KPROBE_EVENTS_ON_NOTRACE )static bool __within_notrace_func (unsigned long addr) {
lib/raid6/Makefile +1 -1
@@ -48,7 +48,7 @@ endif endif quiet_cmd_unroll = UNROLL $@ - cmd_unroll = $(AWK) -f$(srctree)/$(src)/unroll.awk -vN=$* < $< > $@ + cmd_unroll = $(AWK) -v N=$* -f $(srctree)/$(src)/unroll.awk < $< > $@ targets += int1.c int2.c int4.c int8.c int16.c int32.c $(obj)/int%.c: $(src)/int.uc $(src)/unroll.awk FORCE
mm/hugetlb.c +1 -1
@@ -4036,7 +4036,7 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm,* So we need to block hugepage fault by PG_hwpoison bit check. */ if (unlikely (PageHWPoison (page))) { - ret =VM_FAULT_HWPOISON | + ret =VM_FAULT_HWPOISON_LARGE |VM_FAULT_SET_HINDEX (hstate_index (h)); goto backout_unlocked; }
mm/slub.c +1 -1
@@ -1887,7 +1887,7 @@ static void *get_partial_node(struct kmem_cache *s, struct kmem_cache_node *n, t =acquire_slab (s, n, page, object ==NULL , &objects);if (!t) -break ; +continue ;/* cmpxchg raced */ available += objects;if (!object) {
net/netfilter/ipset/ip_set_hash_gen.h +13 -9
@@ -630,7 +630,7 @@ mtype_resize(struct ip_set *set, bool retried)struct htype *h = set->data;struct htable *t, *orig;u8 htable_bits; -size_t dsize = set->dsize; +size_t hsize, dsize = set->dsize;#ifdef IP_SET_HASH_WITH_NETS u8 flags;struct mtype_elem *tmp;
@@ -654,14 +654,12 @@ mtype_resize(struct ip_set *set, bool retried) retry: ret =0 ; htable_bits++; -if (!htable_bits) { -/* In case we have plenty of memory :-) */ -pr_warn ("Cannot increase the hashsize of set %s further\n" , - set->name); - ret = -IPSET_ERR_HASH_FULL ; - goto out; - } - t =ip_set_alloc (htable_size (htable_bits)); +if (!htable_bits) + goto hbwarn; + hsize =htable_size (htable_bits); +if (!hsize) + goto hbwarn; + t =ip_set_alloc (hsize);if (!t) { ret = -ENOMEM ; goto out;
@@ -803,6 +801,12 @@ mtype_resize(struct ip_set *set, bool retried)if (ret == -EAGAIN ) goto retry; goto out; + +hbwarn: +/* In case we have plenty of memory :-) */ +pr_warn ("Cannot increase the hashsize of set %s further\n" , set->name); + ret = -IPSET_ERR_HASH_FULL ; + goto out; }/* Get the current number of elements and ext_size in the set */
net/netfilter/nf_conntrack_standalone.c +3 -0
@@ -521,6 +521,9 @@ nf_conntrack_hash_sysctl(struct ctl_table *table, int write, {int ret; +/* module_param hashsize could have changed value */ + nf_conntrack_htable_size_user = nf_conntrack_htable_size; + ret =proc_dointvec (table, write, buffer, lenp, ppos);if (ret <0 || !write)return ret;
net/netfilter/nf_nat_core.c +1 -0
@@ -1174,6 +1174,7 @@ static int __init nf_nat_init(void) ret =register_pernet_subsys (&nat_net_ops);if (ret <0 ) {nf_ct_extend_unregister (&nat_extend); +kvfree (nf_nat_bysource);return ret; }
net/netfilter/nft_compat.c +14 -23
@@ -27,8 +27,6 @@ struct nft_xt_match_priv {void *info; }; -static refcount_t nft_compat_pending_destroy =REFCOUNT_INIT (1 ); -static int nft_compat_chain_validate_dependency (const struct nft_ctx *ctx,const char *tablename) {
@@ -215,6 +213,17 @@ static int nft_parse_compat(const struct nlattr *attr, u16 *proto, bool *inv)return 0 ; } +static void nft_compat_wait_for_destructors (void ) +{ +/* xtables matches or targets can have side effects, e.g. +* creation/destruction of /proc files. +* The xt ->destroy functions are run asynchronously from +* work queue. If we have pending invocations we thus +* need to wait for those to finish. +*/ +nf_tables_trans_destroy_flush_work (); +} +static int nft_target_init (const struct nft_ctx *ctx,const struct nft_expr *expr,const struct nlattr *const tb[])
@@ -238,14 +247,7 @@ nft_target_init(const struct nft_ctx *ctx, const struct nft_expr *expr,nft_target_set_tgchk_param (&par, ctx, target, info, &e, proto, inv); -/* xtables matches or targets can have side effects, e.g. -* creation/destruction of /proc files. -* The xt ->destroy functions are run asynchronously from -* work queue. If we have pending invocations we thus -* need to wait for those to finish. -*/ -if (refcount_read (&nft_compat_pending_destroy) >1 ) -nf_tables_trans_destroy_flush_work (); +nft_compat_wait_for_destructors (); ret =xt_check_target (&par, size, proto, inv);if (ret <0 )
@@ -260,7 +262,6 @@ nft_target_init(const struct nft_ctx *ctx, const struct nft_expr *expr,static void __nft_mt_tg_destroy (struct module *me,const struct nft_expr *expr) { -refcount_dec (&nft_compat_pending_destroy);module_put (me);kfree (expr->ops); }
@@ -468,6 +469,8 @@ __nft_match_init(const struct nft_ctx *ctx, const struct nft_expr *expr,nft_match_set_mtchk_param (&par, ctx, match, info, &e, proto, inv); +nft_compat_wait_for_destructors (); +return xt_check_match (&par, size, proto, inv); }
@@ -716,14 +719,6 @@ static const struct nfnetlink_subsystem nfnl_compat_subsys = {static struct nft_expr_type nft_match_type; -static void nft_mt_tg_deactivate (const struct nft_ctx *ctx, -const struct nft_expr *expr, -enum nft_trans_phase phase) -{ -if (phase ==NFT_TRANS_COMMIT ) -refcount_inc (&nft_compat_pending_destroy); -} -static const struct nft_expr_ops *nft_match_select_ops (const struct nft_ctx *ctx,const struct nlattr *const tb[])
@@ -762,7 +757,6 @@ nft_match_select_ops(const struct nft_ctx *ctx, ops->type = &nft_match_type; ops->eval = nft_match_eval; ops->init = nft_match_init; - ops->deactivate = nft_mt_tg_deactivate, ops->destroy = nft_match_destroy; ops->dump = nft_match_dump; ops->validate = nft_match_validate;
@@ -853,7 +847,6 @@ nft_target_select_ops(const struct nft_ctx *ctx, ops->size =NFT_EXPR_SIZE (XT_ALIGN (target->targetsize)); ops->init = nft_target_init; ops->destroy = nft_target_destroy; - ops->deactivate = nft_mt_tg_deactivate, ops->dump = nft_target_dump; ops->validate = nft_target_validate; ops->data = target;
@@ -917,8 +910,6 @@ static void __exit nft_compat_module_exit(void)nfnetlink_subsys_unregister (&nfnl_compat_subsys);nft_unregister_expr (&nft_target_type);nft_unregister_expr (&nft_match_type); - -WARN_ON_ONCE (refcount_read (&nft_compat_pending_destroy) !=1 ); }MODULE_ALIAS_NFNL_SUBSYS (NFNL_SUBSYS_NFT_COMPAT );
net/sunrpc/addr.c +1 -1
@@ -185,7 +185,7 @@ static int rpc_parse_scope_id(struct net *net, const char *buf, scope_id = dev->ifindex;dev_put (dev); }else { -if (kstrtou32 (p,10 , &scope_id) ==0 ) { +if (kstrtou32 (p,10 , &scope_id) !=0 ) {kfree (p);return 0 ; }
security/lsm_audit.c +5 -2
@@ -274,7 +274,9 @@ static void dump_common_audit_data(struct audit_buffer *ab,struct inode *inode;audit_log_format (ab," name=" ); +spin_lock (&a->u.dentry->d_lock);audit_log_untrustedstring (ab, a->u.dentry->d_name.name); +spin_unlock (&a->u.dentry->d_lock); inode =d_backing_inode (a->u.dentry);if (inode) {
@@ -292,8 +294,9 @@ static void dump_common_audit_data(struct audit_buffer *ab, dentry =d_find_alias (inode);if (dentry) {audit_log_format (ab," name=" ); -audit_log_untrustedstring (ab, - dentry->d_name.name); +spin_lock (&dentry->d_lock); +audit_log_untrustedstring (ab, dentry->d_name.name); +spin_unlock (&dentry->d_lock);dput (dentry); }audit_log_format (ab," dev=" );
sound/firewire/fireface/ff-transaction.c +1 -1
@@ -88,7 +88,7 @@ static void transmit_midi_msg(struct snd_ff *ff, unsigned int port)/* Set interval to next transaction. */ ff->next_ktime[port] =ktime_add_ns (ktime_get (), - ff->rx_bytes[port] *8 *NSEC_PER_SEC /31250 ); + ff->rx_bytes[port] *8 * (NSEC_PER_SEC /31250 ));if (quad_count ==1 ) tcode =TCODE_WRITE_QUADLET_REQUEST ;
sound/firewire/tascam/tascam-transaction.c +1 -1
@@ -209,7 +209,7 @@ static void midi_port_work(struct work_struct *work)/* Set interval to next transaction. */ port->next_ktime =ktime_add_ns (ktime_get (), - port->consume_bytes *8 *NSEC_PER_SEC /31250 ); + port->consume_bytes *8 * (NSEC_PER_SEC /31250 ));/* Start this transaction. */ port->idling = false;
sound/soc/intel/skylake/cnl-sst.c +1 -0
@@ -224,6 +224,7 @@ static int cnl_set_dsp_D0(struct sst_dsp *ctx, unsigned int core_id)"dsp boot timeout, status=%#x error=%#x\n" ,sst_dsp_shim_read (ctx,CNL_ADSP_FW_STATUS ), sst_dsp_shim_read(ctx, CNL_ADSP_ERROR_CODE)); + ret = -ETIMEDOUT ; goto err; } }else {
sound/soc/meson/axg-tdm-interface.c +13 -1
@@ -467,8 +467,20 @@ static int axg_tdm_iface_set_bias_level(struct snd_soc_component *component,return ret; } +static const struct snd_soc_dapm_widget axg_tdm_iface_dapm_widgets[] = { +SND_SOC_DAPM_SIGGEN ("Playback Signal" ), +}; + +static const struct snd_soc_dapm_route axg_tdm_iface_dapm_routes[] = { + {"Loopback" ,NULL ,"Playback Signal" }, +}; +static const struct snd_soc_component_driver axg_tdm_iface_component_drv = { - .set_bias_level = axg_tdm_iface_set_bias_level, + .dapm_widgets = axg_tdm_iface_dapm_widgets, + .num_dapm_widgets =ARRAY_SIZE (axg_tdm_iface_dapm_widgets), + .dapm_routes = axg_tdm_iface_dapm_routes, + .num_dapm_routes =ARRAY_SIZE (axg_tdm_iface_dapm_routes), + .set_bias_level = axg_tdm_iface_set_bias_level, };static const struct of_device_id axg_tdm_iface_of_match[] = {
sound/soc/meson/axg-tdmin.c +2 -11
@@ -224,15 +224,6 @@ static const struct axg_tdm_formatter_ops axg_tdmin_ops = { };static const struct axg_tdm_formatter_driver axg_tdmin_drv = { - .component_drv = &axg_tdmin_component_drv, - .regmap_cfg = &axg_tdmin_regmap_cfg, - .ops = &axg_tdmin_ops, - .quirks = &(const struct axg_tdm_formatter_hw ) { - .skew_offset =2 , - }, -}; - -static const struct axg_tdm_formatter_driver g12a_tdmin_drv = { .component_drv = &axg_tdmin_component_drv, .regmap_cfg = &axg_tdmin_regmap_cfg, .ops = &axg_tdmin_ops,
@@ -247,10 +238,10 @@ static const struct of_device_id axg_tdmin_of_match[] = { .data = &axg_tdmin_drv, }, { .compatible = "amlogic,g12a-tdmin", - .data = &g12a_tdmin_drv, + .data = &axg_tdmin_drv, }, { .compatible = "amlogic,sm1-tdmin", - .data = &g12a_tdmin_drv, + .data = &axg_tdmin_drv, }, {} };MODULE_DEVICE_TABLE (of, axg_tdmin_of_match);
sound/soc/soc-dapm.c +1 -0
@@ -2484,6 +2484,7 @@ void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w)enum snd_soc_dapm_direction dir;list_del (&w->list); +list_del (&w->dirty);/* * remove source and sink paths associated to this widget. * While removing the path, remove reference to it from both
tools/perf/util/machine.c +2 -2
@@ -2587,7 +2587,7 @@ int machines__for_each_thread(struct machines *machines,pid_t machine__get_current_tid (struct machine *machine,int cpu) { -int nr_cpus =min (machine->env->nr_cpus_online,MAX_NR_CPUS ); +int nr_cpus =min (machine->env->nr_cpus_avail,MAX_NR_CPUS );if (cpu <0 || cpu >= nr_cpus || !machine->current_tid)return -1 ;
@@ -2599,7 +2599,7 @@ int machine__set_current_tid(struct machine *machine, int cpu, pid_t pid, pid_t tid) {struct thread *thread; -int nr_cpus =min (machine->env->nr_cpus_online,MAX_NR_CPUS ); +int nr_cpus =min (machine->env->nr_cpus_avail,MAX_NR_CPUS );if (cpu <0 )return -EINVAL ;
tools/perf/util/session.c +1 -1
@@ -2314,7 +2314,7 @@ int perf_session__cpu_bitmap(struct perf_session *session, {int i, err =-1 ;struct perf_cpu_map *map; -int nr_cpus =min (session->header.env.nr_cpus_online,MAX_NR_CPUS ); +int nr_cpus =min (session->header.env.nr_cpus_avail,MAX_NR_CPUS );for (i =0 ; i <PERF_TYPE_MAX ; ++i) {struct evsel *evsel;
tools/testing/selftests/net/udpgro.sh +34 -0
@@ -5,6 +5,14 @@ readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)" +# set global exit status, but never reset nonzero one. +check_err() +{ + if [ $ret -eq 0 ]; then + ret=$1 + fi +} + cleanup() { local -r jobs="$(jobs -p)" local -r ns="$(ip netns list|grep $PEER_NS)"
@@ -44,7 +52,9 @@ run_one() { # Hack: let bg programs complete the startup sleep 0.1 ./udpgso_bench_tx ${tx_args} + ret=$? wait $(jobs -p) + return $ret } run_test() {
@@ -87,8 +97,10 @@ run_one_nat() { sleep 0.1 ./udpgso_bench_tx ${tx_args} + ret=$? kill -INT $pid wait $(jobs -p) + return $ret } run_one_2sock() {
@@ -110,7 +122,9 @@ run_one_2sock() { sleep 0.1 # first UDP GSO socket should be closed at this point ./udpgso_bench_tx ${tx_args} + ret=$? wait $(jobs -p) + return $ret } run_nat_test() {
@@ -131,36 +145,54 @@ run_all() { local -r core_args="-l 4" local -r ipv4_args="${core_args} -4 -D 192.168.1.1" local -r ipv6_args="${core_args} -6 -D 2001:db8::1" + ret=0 echo "ipv4" run_test "no GRO" "${ipv4_args} -M 10 -s 1400" "-4 -n 10 -l 1400" + check_err $? # explicitly check we are not receiving UDP_SEGMENT cmsg (-S -1) # when GRO does not take place run_test "no GRO chk cmsg" "${ipv4_args} -M 10 -s 1400" "-4 -n 10 -l 1400 -S -1" + check_err $? # the GSO packets are aggregated because: # * veth schedule napi after each xmit # * segmentation happens in BH context, veth napi poll is delayed after # the transmission of the last segment run_test "GRO" "${ipv4_args} -M 1 -s 14720 -S 0 " "-4 -n 1 -l 14720" + check_err $? run_test "GRO chk cmsg" "${ipv4_args} -M 1 -s 14720 -S 0 " "-4 -n 1 -l 14720 -S 1472" + check_err $? run_test "GRO with custom segment size" "${ipv4_args} -M 1 -s 14720 -S 500 " "-4 -n 1 -l 14720" + check_err $? run_test "GRO with custom segment size cmsg" "${ipv4_args} -M 1 -s 14720 -S 500 " "-4 -n 1 -l 14720 -S 500" + check_err $? run_nat_test "bad GRO lookup" "${ipv4_args} -M 1 -s 14720 -S 0" "-n 10 -l 1472" + check_err $? run_2sock_test "multiple GRO socks" "${ipv4_args} -M 1 -s 14720 -S 0 " "-4 -n 1 -l 14720 -S 1472" + check_err $? echo "ipv6" run_test "no GRO" "${ipv6_args} -M 10 -s 1400" "-n 10 -l 1400" + check_err $? run_test "no GRO chk cmsg" "${ipv6_args} -M 10 -s 1400" "-n 10 -l 1400 -S -1" + check_err $? run_test "GRO" "${ipv6_args} -M 1 -s 14520 -S 0" "-n 1 -l 14520" + check_err $? run_test "GRO chk cmsg" "${ipv6_args} -M 1 -s 14520 -S 0" "-n 1 -l 14520 -S 1452" + check_err $? run_test "GRO with custom segment size" "${ipv6_args} -M 1 -s 14520 -S 500" "-n 1 -l 14520" + check_err $? run_test "GRO with custom segment size cmsg" "${ipv6_args} -M 1 -s 14520 -S 500" "-n 1 -l 14520 -S 500" + check_err $? run_nat_test "bad GRO lookup" "${ipv6_args} -M 1 -s 14520 -S 0" "-n 10 -l 1452" + check_err $? run_2sock_test "multiple GRO socks" "${ipv6_args} -M 1 -s 14520 -S 0 " "-n 1 -l 14520 -S 1452" + check_err $? + return $ret } if [ ! -f ../bpf/xdp_dummy.o ]; then
@@ -180,3 +212,5 @@ elif [[ $1 == "__subprocess_2sock" ]]; then shift run_one_2sock $@ fi + +exit $?