Linux 6.1.65
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.65 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
------------
Makefile | 2 arch/arm/xen/enlighten.c | 3 arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi | 1 arch/arm64/include/asm/kfence.h | 10 arch/arm64/include/asm/setup.h | 17 arch/arm64/mm/mmu.c | 61 +++ arch/arm64/mm/pageattr.c | 12 arch/mips/kvm/mmu.c | 3 drivers/acpi/resource.c | 7 drivers/ata/pata_isapnp.c | 3 drivers/gpu/drm/i915/gt/intel_gt.c | 11 drivers/gpu/drm/i915/i915_driver.c | 4 drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c | 7 drivers/gpu/drm/panel/panel-simple.c | 13 drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 drivers/hid/hid-core.c | 12 drivers/hid/hid-debug.c | 3 drivers/md/bcache/btree.c | 4 drivers/md/bcache/sysfs.c | 2 drivers/md/bcache/writeback.c | 22 - drivers/md/dm-delay.c | 17 drivers/md/md.c | 3 drivers/media/platform/qcom/camss/camss-vfe-170.c | 20 - drivers/media/platform/qcom/camss/camss-vfe-480.c | 20 - drivers/media/platform/qcom/camss/camss.c | 86 ++-- drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 14 drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 11 drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 14 drivers/net/ethernet/intel/i40e/i40e_client.c | 8 drivers/net/ethernet/intel/i40e/i40e_dcb_nl.c | 16 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 40 +- drivers/net/ethernet/intel/i40e/i40e_main.c | 299 +++++++-------- drivers/net/ethernet/intel/i40e/i40e_nvm.c | 4 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 42 +- drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c | 20 - drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 2 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 2 drivers/net/hyperv/netvsc_drv.c | 66 ++- drivers/net/usb/ax88179_178a.c | 4 drivers/net/wireguard/device.c | 4 drivers/net/wireguard/receive.c | 12 drivers/net/wireguard/send.c | 3 drivers/nvme/target/fabrics-cmd.c | 4 drivers/s390/block/dasd.c | 24 - drivers/usb/cdns3/cdnsp-ring.c | 3 drivers/usb/dwc2/hcd_intr.c | 15 drivers/usb/dwc3/core.c | 2 drivers/usb/dwc3/drd.c | 2 drivers/usb/dwc3/dwc3-qcom.c | 65 ++- drivers/usb/serial/option.c | 11 drivers/usb/typec/tcpm/tcpm.c | 9 drivers/xen/swiotlb-xen.c | 1 fs/afs/dynroot.c | 4 fs/afs/internal.h | 1 fs/afs/server_list.c | 2 fs/afs/super.c | 2 fs/afs/vl_rotate.c | 10 fs/ext4/extents_status.c | 306 +++++++++++----- fs/nfsd/cache.h | 3 fs/nfsd/nfscache.c | 65 ++- fs/nfsd/nfssvc.c | 15 fs/smb/client/cifs_debug.c | 22 + fs/smb/client/cifs_ioctl.h | 8 fs/smb/client/cifsfs.h | 4 fs/smb/client/cifsglob.h | 9 fs/smb/client/connect.c | 6 fs/smb/client/ioctl.c | 25 + fs/smb/client/sess.c | 112 +++++ fs/smb/client/smb2ops.c | 6 include/linux/hid.h | 3 io_uring/fs.c | 2 io_uring/rsrc.c | 2 kernel/locking/lockdep.c | 3 mm/kfence/core.c | 4 net/ipv4/route.c | 2 net/smc/af_smc.c | 8 76 files changed, 1161 insertions(+), 517 deletions(-)
Alexander Stein (1):
usb: dwc3: Fix default mode initialization
Andrzej Hajda (1):
drm/i915: do not clean GT table on error path
Asuna Yang (1):
USB: serial: option: add Luat Air72*U series products
Badhri Jagan Sridharan (1):
usb: typec: tcpm: Skip hard reset when in error recovery
Baokun Li (8):
ext4: add a new helper to check if es must be kept
ext4: factor out __es_alloc_extent() and __es_free_extent()
ext4: use pre-allocated es in __es_insert_extent()
ext4: use pre-allocated es in __es_remove_extent()
ext4: using nofail preallocation in ext4_es_remove_extent()
ext4: using nofail preallocation in ext4_es_insert_delayed_block()
ext4: using nofail preallocation in ext4_es_insert_extent()
ext4: fix slab-use-after-free in ext4_es_insert_extent()
Bryan O'Donoghue (2):
media: qcom: camss: Fix V4L2 async notifier error path
media: qcom: camss: Fix genpd cleanup
Charles Mirabile (1):
io_uring/fs: consider link->flags when getting path for LINKAT
Charles Yi (1):
HID: fix HID device resource race between HID core and debugging support
Chen Ni (1):
ata: pata_isapnp: Add missing error check for devm_ioport_map()
Christoph Hellwig (1):
nvmet: nul-terminate the NQNs passed in the connect command
Chuck Lever (2):
NFSD: Fix "start of NFS reply" pointer passed to nfsd_cache_update()
NFSD: Fix checksum mismatches in the duplicate reply cache
Coly Li (2):
bcache: replace a mistaken IS_ERR() by IS_ERR_OR_NULL() in btree_gc_coalesce()
bcache: check return value from btree_node_alloc_replacement()
D. Wythe (1):
net/smc: avoid data corruption caused by decline
David Howells (4):
afs: Fix afs_server_list to be cleaned up with RCU
afs: Make error on cell lookup failure consistent with OpenAFS
afs: Return ENOENT if no cell DNS record can be found
afs: Fix file locking on R/O volumes to operate in local mode
Eric Dumazet (1):
wireguard: use DEV_STATS_INC()
Greg Kroah-Hartman (1):
Linux 6.1.65
Haiyang Zhang (2):
hv_netvsc: fix race of netvsc and VF register_netdevice
hv_netvsc: Fix race of register_netdevice_notifier and VF register
Hans de Goede (1):
ACPI: resource: Skip IRQ override on ASUS ExpertBook B1402CVA
Huacai Chen (1):
MIPS: KVM: Fix a build warning about variable set but not used
Hugo Villeneuve (1):
arm64: dts: imx8mn-var-som: add 20ms delay to ethernet regulator enable
Ivan Vecera (1):
i40e: Fix adding unsupported cloud filters
Jan Höppner (1):
s390/dasd: protect device queue against concurrent access
Jan Sokolowski (1):
i40e: use ERR_PTR error print in i40e messages
Johan Hovold (4):
USB: dwc3: qcom: fix resource leaks on probe deferral
USB: dwc3: qcom: fix ACPI platform device leak
USB: dwc3: qcom: fix software node leak on probe errors
USB: dwc3: qcom: fix wakeup after probe deferral
Jonas Karlman (1):
drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full
Jose Ignacio Tornos Martinez (1):
net: usb: ax88179_178a: fix failed operations during ax88179_reset
Keith Busch (2):
swiotlb-xen: provide the "max_mapping_size" method
io_uring: fix off-by one bvec index
Kunwu Chan (1):
ipv4: Correct/silence an endian warning in __ip_do_redirect
Lech Perczak (1):
USB: serial: option: don't claim interface 4 for ZTE MF290
Long Li (1):
hv_netvsc: Mark VF as slave before exposing it to user-mode
Marek Vasut (2):
drm/panel: simple: Fix Innolux G101ICE-L01 bus flags drm/panel: simple: Fix Innolux G101ICE-L01 timings
Mikulas Patocka (1):
dm-delay: fix a race between delay_presuspend and delay_bio
Mingzhe Zou (3):
bcache: fixup multi-threaded bch_sectors_dirty_init() wake-up race
bcache: fixup init dirty data errors
bcache: fixup lock c->root error
Oliver Neukum (1):
USB: dwc2: write HCINT with INTMASK applied
Pawel Laszczak (1):
usb: cdnsp: Fix deadlock issue during using NCM gadget
Peter Zijlstra (1):
lockdep: Fix block chain corruption
Puliang Lu (1):
USB: serial: option: fix FM101R-GL defines
Raju Rangoju (3):
amd-xgbe: handle corner-case during sfp hotplug
amd-xgbe: handle the corner-case during tx completion
amd-xgbe: propagate the correct speed and duplex status
Rand Deeb (1):
bcache: prevent potential division by zero error
Ricardo Ribalda (1):
usb: dwc3: set the dma max_seg_size
Sakari Ailus (1):
media: qcom: Initialise V4L2 async notifier later
Samuel Holland (1):
net: axienet: Fix check for partial TX checksum
Shuijing Li (1):
drm/panel: boe-tv101wum-nl6: Fine tune the panel power sequence
Shyam Prasad N (4):
cifs: print last update time for interface list
cifs: distribute channels across interfaces based on speed
cifs: account for primary channel in the interface list
cifs: fix leak of iface for primary channel
Song Liu (1):
md: fix bi_status reporting in md_end_clone_io
Stefano Stabellini (1):
arm/xen: fix xen_vcpu_info allocation alignment
Steve French (2):
cifs: minor cleanup of some headers
smb3: allow dumping session and tcon id to improve stats analysis and debugging
Suman Ghosh (2):
octeontx2-pf: Fix memory leak during interface down
octeontx2-pf: Fix ntuple rule creation to direct packet to VF with higher Rx queue than its PF
Uwe Kleine-König (1):
media: camss: Convert to platform remove callback returning void
Victor Fragoso (1):
USB: serial: option: add Fibocom L7xx modules
Vladimir Zapolskiy (1):
media: camss: Split power domain management
Will Deacon (1):
arm64: mm: Fix "rodata=on" when CONFIG_RODATA_FULL_DEFAULT_ENABLED=y
Xuxin Xiong (1):
drm/panel: auo,b101uan08.3: Fine tune the panel power sequence
Zhang Yi (1):
ext4: make sure allocate pending entry not fail
Zhenhua Huang (1):
mm,kfence: decouple kfence from page granularity mapping judgement
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 64 +SUBLEVEL = 65 EXTRAVERSION = NAME = Curry Ramen
arch/arm/xen/enlighten.c +2 -1
@@ -484,7 +484,8 @@ static int __init xen_guest_init(void)* for secondary CPUs as they are brought up. * For uniformity we use VCPUOP_register_vcpu_info even on cpu0. */ - xen_vcpu_info = alloc_percpu(struct vcpu_info); + xen_vcpu_info =__alloc_percpu (sizeof (struct vcpu_info ), +1 <<fls (sizeof (struct vcpu_info ) -1 ));if (xen_vcpu_info ==NULL )return -ENOMEM ;
arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi +1 -0
@@ -27,6 +27,7 @@ reg_eth_phy: regulator-eth-phy { regulator-name = "eth_phy_pwr"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; + regulator-enable-ramp-delay = <20000>; gpio = <&gpio2 9 GPIO_ACTIVE_HIGH>; enable-active-high; };
arch/arm64/include/asm/kfence.h +10 -0
@@ -19,4 +19,14 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect) return true; } +#ifdef CONFIG_KFENCE +extern bool kfence_early_init; +static inline bool arm64_kfence_can_set_direct_map (void ) +{ +return !kfence_early_init; +} +#else /* CONFIG_KFENCE */ +static inline bool arm64_kfence_can_set_direct_map (void ) {return false; } +#endif /* CONFIG_KFENCE */ +#endif /* __ASM_KFENCE_H */
arch/arm64/include/asm/setup.h +15 -2
@@ -21,9 +21,22 @@ static inline bool arch_parse_debug_rodata(char *arg)extern bool rodata_enabled;extern bool rodata_full; -if (arg && !strcmp (arg,"full" )) { +if (!arg) +return false; + +if (!strcmp (arg,"full" )) { + rodata_enabled = rodata_full = true; +return true; + } + +if (!strcmp (arg,"off" )) { + rodata_enabled = rodata_full = false; +return true; + } + +if (!strcmp (arg,"on" )) { rodata_enabled = true; - rodata_full = true; + rodata_full = false;return true; }
arch/arm64/mm/mmu.c +61 -0
97 lines not on this page · raw message
arch/arm64/mm/pageattr.c +7 -5
@@ -11,6 +11,7 @@#include <asm/cacheflush.h> #include <asm/set_memory.h> #include <asm/tlbflush.h> +#include <asm/kfence.h> struct page_change_data {pgprot_t set_mask;
@@ -22,12 +23,14 @@ bool rodata_full __ro_after_init = IS_ENABLED(CONFIG_RODATA_FULL_DEFAULT_ENABLEDbool can_set_direct_map (void ) {/* -* rodata_full, DEBUG_PAGEALLOC and KFENCE require linear map to be +* rodata_full and DEBUG_PAGEALLOC require linear map to be * mapped at page granularity, so that it is possible to * protect/unprotect single pages. +* +* KFENCE pool requires page-granular mapping if initialized late. */ -return (rodata_enabled && rodata_full) ||debug_pagealloc_enabled () || -IS_ENABLED (CONFIG_KFENCE ); +return rodata_full ||debug_pagealloc_enabled () || +arm64_kfence_can_set_direct_map (); }static int change_page_range (pte_t *ptep,unsigned long addr,void *data)
@@ -102,8 +105,7 @@ static int change_memory_common(unsigned long addr, int numpages,* If we are manipulating read-only permissions, apply the same * change to the linear mapping of the pages that back this VM area. */ -if (rodata_enabled && - rodata_full && (pgprot_val (set_mask) ==PTE_RDONLY || +if (rodata_full && (pgprot_val (set_mask) ==PTE_RDONLY ||pgprot_val (clear_mask) ==PTE_RDONLY )) {for (i =0 ; i < area->nr_pages; i++) { __change_memory_common((u64)page_address(area->pages[i]),
arch/mips/kvm/mmu.c +1 -2
@@ -593,7 +593,7 @@ static int kvm_mips_map_page(struct kvm_vcpu *vcpu, unsigned long gpa,gfn_t gfn = gpa >>PAGE_SHIFT ;int srcu_idx, err;kvm_pfn_t pfn; -pte_t *ptep, entry, old_pte; +pte_t *ptep, entry;bool writeable;unsigned long prot_bits;unsigned long mmu_seq;
@@ -665,7 +665,6 @@ static int kvm_mips_map_page(struct kvm_vcpu *vcpu, unsigned long gpa, entry =pfn_pte (pfn,__pgprot (prot_bits));/* Write the PTE */ - old_pte = *ptep;set_pte (ptep, entry); err =0 ;
drivers/acpi/resource.c +7 -0
@@ -446,6 +446,13 @@ static const struct dmi_system_id asus_laptop[] = { DMI_MATCH(DMI_BOARD_NAME, "B1402CBA"), }, }, + { +/* Asus ExpertBook B1402CVA */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), + DMI_MATCH(DMI_BOARD_NAME, "B1402CVA"), + }, + }, { .ident ="Asus ExpertBook B2402CBA" , .matches = {
drivers/ata/pata_isapnp.c +3 -0
@@ -82,6 +82,9 @@ static int isapnp_init_one(struct pnp_dev *idev, const struct pnp_device_id *devif (pnp_port_valid (idev,1 )) { ctl_addr =devm_ioport_map (&idev->dev,pnp_port_start (idev,1 ),1 ); +if (!ctl_addr) +return -ENOMEM ; + ap->ioaddr.altstatus_addr = ctl_addr; ap->ioaddr.ctl_addr = ctl_addr; ap->ops = &isapnp_port_ops;
drivers/gpu/drm/i915/gt/intel_gt.c +0 -11
@@ -903,8 +903,6 @@ int intel_gt_probe_all(struct drm_i915_private *i915) err:i915_probe_error (i915,"Failed to initialize %s! (%d)\n" , gtdef->name, ret); -intel_gt_release_all (i915); -return ret; }
@@ -923,15 +921,6 @@ int intel_gt_tiles_init(struct drm_i915_private *i915)return 0 ; } -void intel_gt_release_all (struct drm_i915_private *i915) -{ -struct intel_gt *gt; -unsigned int id; - -for_each_gt (gt, i915, id) - i915->gt[id] =NULL ; -} -void intel_gt_info_print (const struct intel_gt_info *info,struct drm_printer *p) {
drivers/gpu/drm/i915/i915_driver.c +1 -3
@@ -901,7 +901,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ret =i915_driver_mmio_probe (i915);if (ret <0 ) - goto out_tiles_cleanup; + goto out_runtime_pm_put; ret =i915_driver_hw_probe (i915);if (ret <0 )
@@ -959,8 +959,6 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)i915_ggtt_driver_late_release (i915); out_cleanup_mmio:i915_driver_mmio_release (i915); -out_tiles_cleanup: -intel_gt_release_all (i915); out_runtime_pm_put:enable_rpm_wakeref_asserts (&i915->runtime_pm);i915_driver_late_release (i915);
drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c +7 -0
@@ -36,6 +36,7 @@ struct panel_desc {const struct panel_init_cmd *init_cmds;unsigned int lanes;bool discharge_on_disable; +bool lp11_before_reset; };struct boe_panel {
@@ -1269,6 +1270,10 @@ static int boe_panel_prepare(struct drm_panel *panel)usleep_range (10000 ,11000 ); +if (boe->desc->lp11_before_reset) { +mipi_dsi_dcs_nop (boe->dsi); +usleep_range (1000 ,2000 ); + }gpiod_set_value (boe->enable_gpio,1 );usleep_range (1000 ,2000 );gpiod_set_value (boe->enable_gpio,0 );
@@ -1468,6 +1473,7 @@ static const struct panel_desc auo_b101uan08_3_desc = { .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_LPM, .init_cmds = auo_b101uan08_3_init_cmd, + .lp11_before_reset = true, };static const struct drm_display_mode boe_tv105wum_nw0_default_mode = {
@@ -1495,6 +1501,7 @@ static const struct panel_desc boe_tv105wum_nw0_desc = { .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_LPM, .init_cmds = boe_init_cmd, + .lp11_before_reset = true, }; static int boe_panel_get_modes(struct drm_panel *panel,
drivers/gpu/drm/panel/panel-simple.c +7 -6
@@ -2205,13 +2205,13 @@ static const struct panel_desc innolux_g070y2_t02 = {static const struct display_timing innolux_g101ice_l01_timing = { .pixelclock = {60400000 ,71100000 ,74700000 }, .hactive = {1280 ,1280 ,1280 }, - .hfront_porch = {41 ,80 ,100 }, - .hback_porch = {40 ,79 ,99 }, - .hsync_len = {1 ,1 ,1 }, + .hfront_porch = {30 ,60 ,70 }, + .hback_porch = {30 ,60 ,70 }, + .hsync_len = {22 ,40 ,60 }, .vactive = {800 ,800 ,800 }, - .vfront_porch = {5 ,11 ,14 }, - .vback_porch = {4 ,11 ,14 }, - .vsync_len = {1 ,1 ,1 }, + .vfront_porch = {3 ,8 ,14 }, + .vback_porch = {3 ,8 ,14 }, + .vsync_len = {4 ,7 ,12 }, .flags =DISPLAY_FLAGS_DE_HIGH , };
@@ -2228,6 +2228,7 @@ static const struct panel_desc innolux_g101ice_l01 = { .disable = 200, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .bus_flags = DRM_BUS_FLAG_DE_HIGH, .connector_type = DRM_MODE_CONNECTOR_LVDS, };
drivers/gpu/drm/rockchip/rockchip_drm_vop.c +11 -3
@@ -248,14 +248,22 @@ static inline void vop_cfg_done(struct vop *vop)VOP_REG_SET (vop, common, cfg_done,1 ); } -static bool has_rb_swapped (uint32_t format) +static bool has_rb_swapped (uint32_t version,uint32_t format) {switch (format) {case DRM_FORMAT_XBGR8888 :case DRM_FORMAT_ABGR8888 : -case DRM_FORMAT_BGR888 :case DRM_FORMAT_BGR565 :return true; +/* +* full framework (IP version 3.x) only need rb swapped for RGB888 and +* little framework (IP version 2.x) only need rb swapped for BGR888, +* check for 3.x to also only rb swap BGR888 for unknown vop version +*/ +case DRM_FORMAT_RGB888 : +return VOP_MAJOR (version) ==3 ; +case DRM_FORMAT_BGR888 : +return VOP_MAJOR (version) !=3 ;default :return false; }
@@ -1017,7 +1025,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,VOP_WIN_SET (vop, win, dsp_info, dsp_info);VOP_WIN_SET (vop, win, dsp_st, dsp_st); - rb_swap =has_rb_swapped (fb->format->format); + rb_swap =has_rb_swapped (vop->data->version, fb->format->format);VOP_WIN_SET (vop, win, rb_swap, rb_swap);/*
drivers/hid/hid-core.c +10 -2
@@ -707,15 +707,22 @@ static void hid_close_report(struct hid_device *device)* Free a device structure, all reports, and all fields. */ -static void hid_device_release (struct device *dev) +void hiddev_free (struct kref *ref) { -struct hid_device *hid =to_hid_device (dev); + struct hid_device *hid = container_of(ref, struct hid_device, ref);hid_close_report (hid);kfree (hid->dev_rdesc);kfree (hid); } +static void hid_device_release (struct device *dev) +{ +struct hid_device *hid =to_hid_device (dev); + +kref_put (&hid->ref, hiddev_free); +} +/* * Fetch a report description item from the data stream. We support long * items, though they are not used yet.
@@ -2813,6 +2820,7 @@ struct hid_device *hid_allocate_device(void)spin_lock_init (&hdev->debug_list_lock);sema_init (&hdev->driver_input_lock,1 );mutex_init (&hdev->ll_open_lock); +kref_init (&hdev->ref);return hdev; }
drivers/hid/hid-debug.c +3 -0
@@ -1132,6 +1132,7 @@ static int hid_debug_events_open(struct inode *inode, struct file *file) goto out; } list->hdev = (struct hid_device *) inode->i_private; +kref_get (&list->hdev->ref); file->private_data = list;mutex_init (&list->read_mutex);
@@ -1224,6 +1225,8 @@ static int hid_debug_events_release(struct inode *inode, struct file *file)list_del (&list->node);spin_unlock_irqrestore (&list->hdev->debug_list_lock, flags);kfifo_free (&list->hid_debug_fifo); + +kref_put (&list->hdev->ref, hiddev_free);kfree (list);return 0 ;
drivers/md/bcache/btree.c +3 -1
@@ -1342,7 +1342,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,memset (new_nodes,0 ,sizeof (new_nodes));closure_init_stack (&cl); -while (nodes <GC_MERGE_NODES && !IS_ERR (r[nodes].b)) +while (nodes <GC_MERGE_NODES && !IS_ERR_OR_NULL (r[nodes].b)) keys += r[nodes++].keys; blocks =btree_default_blocks (b->c) *2 /3 ;
@@ -1506,6 +1506,8 @@ static int btree_gc_rewrite_node(struct btree *b, struct btree_op *op,return 0 ; n =btree_node_alloc_replacement (replace,NULL ); +if (IS_ERR (n)) +return 0 ;/* recheck reserve after allocating replacement node */ if (btree_check_reserve (b,NULL )) {
drivers/md/bcache/sysfs.c +1 -1
@@ -1103,7 +1103,7 @@ SHOW(__bch_cache) sum +=INITIAL_PRIO - cached[i];if (n) -do_div (sum, n); + sum =div64_u64 (sum, n);for (i =0 ; i <ARRAY_SIZE (q); i++) q[i] = INITIAL_PRIO - cached[n * (i + 1) /
drivers/md/bcache/writeback.c +17 -5
@@ -977,24 +977,35 @@ static int bch_btre_dirty_init_thread_nr(void)void bch_sectors_dirty_init (struct bcache_device *d) {int i; +struct btree *b =NULL ;struct bkey *k =NULL ;struct btree_iter iter;struct sectors_dirty_init op;struct cache_set *c = d->c;struct bch_dirty_init_state state; +retry_lock: + b = c->root; +rw_lock (0 , b, b->level); +if (b != c->root) { +rw_unlock (0 , b); + goto retry_lock; + } +/* Just count root keys if no leaf node */ -rw_lock (0 , c->root, c->root->level);if (c->root->level ==0 ) {bch_btree_op_init (&op.op,-1 ); op.inode = d->id; op.count =0 ;for_each_key_filter (&c->root->keys, - k, &iter, bch_ptr_invalid) + k, &iter, bch_ptr_invalid) { +if (KEY_INODE (k) != op.inode) +continue ;sectors_dirty_init_fn (&op.op, c->root, k); + } -rw_unlock (0 , c->root); +rw_unlock (0 , b);return ; }
@@ -1014,23 +1025,24 @@ void bch_sectors_dirty_init(struct bcache_device *d)if (atomic_read (&state.enough))break ; +atomic_inc (&state.started); state.infos[i].state = &state; state.infos[i].thread =kthread_run (bch_dirty_init_thread, &state.infos[i],"bch_dirtcnt[%d]" , i);if (IS_ERR (state.infos[i].thread)) {pr_err ("fails to run thread bch_dirty_init[%d]\n" , i); +atomic_dec (&state.started);for (--i; i >=0 ; i--)kthread_stop (state.infos[i].thread); goto out; } -atomic_inc (&state.started); } out:/* Must wait for all threads to stop. */ wait_event (state.wait,atomic_read (&state.started) ==0 ); -rw_unlock (0 , c->root); +rw_unlock (0 , b); }void bch_cached_dev_writeback_init (struct cached_dev *dc)
drivers/md/dm-delay.c +12 -5
@@ -30,7 +30,7 @@ struct delay_c {struct workqueue_struct *kdelayd_wq;struct work_struct flush_expired_bios;struct list_head delayed_bios; -atomic_t may_delay; +bool may_delay;struct delay_class read;struct delay_class write;
@@ -191,7 +191,7 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)INIT_WORK (&dc->flush_expired_bios, flush_expired_bios);INIT_LIST_HEAD (&dc->delayed_bios);mutex_init (&dc->timer_lock); -atomic_set (&dc->may_delay,1 ); + dc->may_delay = true; dc->argc = argc; ret =delay_class_ctr (ti, &dc->read, argv);
@@ -246,7 +246,7 @@ static int delay_bio(struct delay_c *dc, struct delay_class *c, struct bio *bio)struct dm_delay_info *delayed;unsigned long expires =0 ; -if (!c->delay || !atomic_read (&dc->may_delay)) +if (!c->delay)return DM_MAPIO_REMAPPED ; delayed =dm_per_bio_data (bio,sizeof (struct dm_delay_info ));
@@ -255,6 +255,10 @@ static int delay_bio(struct delay_c *dc, struct delay_class *c, struct bio *bio) delayed->expires = expires = jiffies +msecs_to_jiffies (c->delay);mutex_lock (&delayed_bios_lock); +if (unlikely (!dc->may_delay)) { +mutex_unlock (&delayed_bios_lock); +return DM_MAPIO_REMAPPED ; + } c->ops++;list_add_tail (&delayed->list, &dc->delayed_bios);mutex_unlock (&delayed_bios_lock);
@@ -268,7 +272,10 @@ static void delay_presuspend(struct dm_target *ti) {struct delay_c *dc = ti->private; -atomic_set (&dc->may_delay,0 ); +mutex_lock (&delayed_bios_lock); + dc->may_delay = false; +mutex_unlock (&delayed_bios_lock); +del_timer_sync (&dc->delay_timer);flush_bios (flush_delayed_bios (dc,1 )); }
@@ -277,7 +284,7 @@ static void delay_resume(struct dm_target *ti) {struct delay_c *dc = ti->private; -atomic_set (&dc->may_delay,1 ); + dc->may_delay = true; }static int delay_map (struct dm_target *ti,struct bio *bio)
drivers/md/md.c +2 -1
@@ -8648,7 +8648,8 @@ static void md_end_io_acct(struct bio *bio)struct md_io_acct *md_io_acct = bio->bi_private;struct bio *orig_bio = md_io_acct->orig_bio; - orig_bio->bi_status = bio->bi_status; +if (bio->bi_status && !orig_bio->bi_status) + orig_bio->bi_status = bio->bi_status;bio_end_io_acct (orig_bio, md_io_acct->start_time);bio_put (bio);
drivers/media/platform/qcom/camss/camss-vfe-170.c +19 -1
@@ -671,7 +671,12 @@ static void vfe_isr_wm_done(struct vfe_device *vfe, u8 wm)*/ static void vfe_pm_domain_off (struct vfe_device *vfe) { -/* nop */ +struct camss *camss = vfe->camss; + +if (vfe->id >= camss->vfe_num) +return ; + +device_link_del (camss->genpd_link[vfe->id]); }/*
@@ -680,6 +685,19 @@ static void vfe_pm_domain_off(struct vfe_device *vfe)*/ static int vfe_pm_domain_on (struct vfe_device *vfe) { +struct camss *camss = vfe->camss; +enum vfe_line_id id = vfe->id; + +if (id >= camss->vfe_num) +return 0 ; + + camss->genpd_link[id] =device_link_add (camss->dev, camss->genpd[id], +DL_FLAG_STATELESS | +DL_FLAG_PM_RUNTIME | +DL_FLAG_RPM_ACTIVE ); +if (!camss->genpd_link[id]) +return -EINVAL ; +return 0 ; }
drivers/media/platform/qcom/camss/camss-vfe-480.c +19 -1
@@ -478,7 +478,12 @@ static void vfe_isr_wm_done(struct vfe_device *vfe, u8 wm)*/ static void vfe_pm_domain_off (struct vfe_device *vfe) { -/* nop */ +struct camss *camss = vfe->camss; + +if (vfe->id >= camss->vfe_num) +return ; + +device_link_del (camss->genpd_link[vfe->id]); }/*
@@ -487,6 +492,19 @@ static void vfe_pm_domain_off(struct vfe_device *vfe)*/ static int vfe_pm_domain_on (struct vfe_device *vfe) { +struct camss *camss = vfe->camss; +enum vfe_line_id id = vfe->id; + +if (id >= camss->vfe_num) +return 0 ; + + camss->genpd_link[id] =device_link_add (camss->dev, camss->genpd[id], +DL_FLAG_STATELESS | +DL_FLAG_PM_RUNTIME | +DL_FLAG_RPM_ACTIVE ); +if (!camss->genpd_link[id]) +return -EINVAL ; +return 0 ; }
drivers/media/platform/qcom/camss/camss.c +46 -40
186 lines not on this page · raw message
drivers/net/ethernet/amd/xgbe/xgbe-drv.c +14 -0
@@ -682,10 +682,24 @@ static void xgbe_service(struct work_struct *work)static void xgbe_service_timer (struct timer_list *t) {struct xgbe_prv_data *pdata =from_timer (pdata, t, service_timer); +struct xgbe_channel *channel; +unsigned int i;queue_work (pdata->dev_workqueue, &pdata->service_work);mod_timer (&pdata->service_timer, jiffies +HZ ); + +if (!pdata->tx_usecs) +return ; + +for (i =0 ; i < pdata->channel_count; i++) { + channel = pdata->channel[i]; +if (!channel->tx_ring || channel->tx_timer_active) +break ; + channel->tx_timer_active =1 ; +mod_timer (&channel->tx_timer, + jiffies +usecs_to_jiffies (pdata->tx_usecs)); + } }static void xgbe_init_timers (struct xgbe_prv_data *pdata)
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c +8 -3
@@ -314,10 +314,15 @@ static int xgbe_get_link_ksettings(struct net_device *netdev, cmd->base.phy_address = pdata->phy.address; - cmd->base.autoneg = pdata->phy.autoneg; - cmd->base.speed = pdata->phy.speed; - cmd->base.duplex = pdata->phy.duplex; +if (netif_carrier_ok (netdev)) { + cmd->base.speed = pdata->phy.speed; + cmd->base.duplex = pdata->phy.duplex; + }else { + cmd->base.speed =SPEED_UNKNOWN ; + cmd->base.duplex =DUPLEX_UNKNOWN ; + } + cmd->base.autoneg = pdata->phy.autoneg; cmd->base.port =PORT_NONE ;XGBE_LM_COPY (cmd, supported, lks, supported);
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +13 -1
@@ -1178,7 +1178,19 @@ static int xgbe_phy_config_fixed(struct xgbe_prv_data *pdata)if (pdata->phy.duplex !=DUPLEX_FULL )return -EINVAL ; -xgbe_set_mode (pdata, mode); +/* Force the mode change for SFI in Fixed PHY config. +* Fixed PHY configs needs PLL to be enabled while doing mode set. +* When the SFP module isn't connected during boot, driver assumes +* AN is ON and attempts autonegotiation. However, if the connected +* SFP comes up in Fixed PHY config, the link will not come up as +* PLL isn't enabled while the initial mode set command is issued. +* So, force the mode change for SFI in Fixed PHY configuration to +* fix link issues. +*/ +if (mode ==XGBE_MODE_SFI ) +xgbe_change_mode (pdata, mode); +else +xgbe_set_mode (pdata, mode);return 0 ; }
drivers/net/ethernet/intel/i40e/i40e_client.c +4 -4
@@ -686,8 +686,8 @@ static int i40e_client_update_vsi_ctxt(struct i40e_info *ldev, ctxt.flags =I40E_AQ_VSI_TYPE_PF ;if (err) {dev_info (&pf->pdev->dev, -"couldn't get PF vsi config, err %d aq_err %s\n" , - err, +"couldn't get PF vsi config, err %pe aq_err %s\n" , +ERR_PTR (err),i40e_aq_str (&pf->hw, pf->hw.aq.asq_last_status));return -ENOENT ;
@@ -714,8 +714,8 @@ static int i40e_client_update_vsi_ctxt(struct i40e_info *ldev, err =i40e_aq_update_vsi_params (&vsi->back->hw, &ctxt,NULL );if (err) {dev_info (&pf->pdev->dev, -"update VSI ctxt for PE failed, err %d aq_err %s\n" , - err, +"update VSI ctxt for PE failed, err %pe aq_err %s\n" , +ERR_PTR (err),i40e_aq_str (&pf->hw, pf->hw.aq.asq_last_status)); }
drivers/net/ethernet/intel/i40e/i40e_dcb_nl.c +8 -8
@@ -135,8 +135,8 @@ static int i40e_dcbnl_ieee_setets(struct net_device *netdev, ret =i40e_hw_dcb_config (pf, &pf->tmp_cfg);if (ret) {dev_info (&pf->pdev->dev, -"Failed setting DCB ETS configuration err %d aq_err %s\n" , - ret, +"Failed setting DCB ETS configuration err %pe aq_err %s\n" , +ERR_PTR (ret),i40e_aq_str (&pf->hw, pf->hw.aq.asq_last_status));return -EINVAL ; }
@@ -174,8 +174,8 @@ static int i40e_dcbnl_ieee_setpfc(struct net_device *netdev, ret =i40e_hw_dcb_config (pf, &pf->tmp_cfg);if (ret) {dev_info (&pf->pdev->dev, -"Failed setting DCB PFC configuration err %d aq_err %s\n" , - ret, +"Failed setting DCB PFC configuration err %pe aq_err %s\n" , +ERR_PTR (ret),i40e_aq_str (&pf->hw, pf->hw.aq.asq_last_status));return -EINVAL ; }
@@ -225,8 +225,8 @@ static int i40e_dcbnl_ieee_setapp(struct net_device *netdev, ret =i40e_hw_dcb_config (pf, &pf->tmp_cfg);if (ret) {dev_info (&pf->pdev->dev, -"Failed setting DCB configuration err %d aq_err %s\n" , - ret, +"Failed setting DCB configuration err %pe aq_err %s\n" , +ERR_PTR (ret),i40e_aq_str (&pf->hw, pf->hw.aq.asq_last_status));return -EINVAL ; }
@@ -290,8 +290,8 @@ static int i40e_dcbnl_ieee_delapp(struct net_device *netdev, ret =i40e_hw_dcb_config (pf, &pf->tmp_cfg);if (ret) {dev_info (&pf->pdev->dev, -"Failed setting DCB configuration err %d aq_err %s\n" , - ret, +"Failed setting DCB configuration err %pe aq_err %s\n" , +ERR_PTR (ret),i40e_aq_str (&pf->hw, pf->hw.aq.asq_last_status));return -EINVAL ; }
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +20 -20
@@ -1453,8 +1453,8 @@ static int i40e_set_link_ksettings(struct net_device *netdev, status =i40e_aq_set_phy_config (hw, &config,NULL );if (status) {netdev_info (netdev, -"Set phy config failed, err %d aq_err %s\n" , - status, +"Set phy config failed, err %pe aq_err %s\n" , +ERR_PTR (status),i40e_aq_str (hw, hw->aq.asq_last_status)); err = -EAGAIN ; goto done;
@@ -1463,8 +1463,8 @@ static int i40e_set_link_ksettings(struct net_device *netdev, status =i40e_update_link_info (hw);if (status)netdev_dbg (netdev, -"Updating link info failed with err %d aq_err %s\n" , - status, +"Updating link info failed with err %pe aq_err %s\n" , +ERR_PTR (status),i40e_aq_str (hw, hw->aq.asq_last_status)); }else {
@@ -1515,8 +1515,8 @@ static int i40e_set_fec_cfg(struct net_device *netdev, u8 fec_cfg) status =i40e_aq_set_phy_config (hw, &config,NULL );if (status) {netdev_info (netdev, -"Set phy config failed, err %d aq_err %s\n" , - status, +"Set phy config failed, err %pe aq_err %s\n" , +ERR_PTR (status),i40e_aq_str (hw, hw->aq.asq_last_status)); err = -EAGAIN ; goto done;
@@ -1529,8 +1529,8 @@ static int i40e_set_fec_cfg(struct net_device *netdev, u8 fec_cfg)* (e.g. no physical connection etc.) */ netdev_dbg (netdev, -"Updating link info failed with err %d aq_err %s\n" , - status, +"Updating link info failed with err %pe aq_err %s\n" , +ERR_PTR (status),i40e_aq_str (hw, hw->aq.asq_last_status)); }
@@ -1636,8 +1636,8 @@ static int i40e_nway_reset(struct net_device *netdev) ret =i40e_aq_set_link_restart_an (hw, link_up,NULL );if (ret) { -netdev_info (netdev,"link restart failed, err %d aq_err %s\n" , - ret, +netdev_info (netdev,"link restart failed, err %pe aq_err %s\n" , +ERR_PTR (ret),i40e_aq_str (hw, hw->aq.asq_last_status));return -EIO ; }
@@ -1753,20 +1753,20 @@ static int i40e_set_pauseparam(struct net_device *netdev, status =i40e_set_fc (hw, &aq_failures, link_up);if (aq_failures &I40E_SET_FC_AQ_FAIL_GET ) { -netdev_info (netdev,"Set fc failed on the get_phy_capabilities call with err %d aq_err %s\n" , - status, +netdev_info (netdev,"Set fc failed on the get_phy_capabilities call with err %pe aq_err %s\n" , +ERR_PTR (status),i40e_aq_str (hw, hw->aq.asq_last_status)); err = -EAGAIN ; }if (aq_failures &I40E_SET_FC_AQ_FAIL_SET ) { -netdev_info (netdev,"Set fc failed on the set_phy_config call with err %d aq_err %s\n" , - status, +netdev_info (netdev,"Set fc failed on the set_phy_config call with err %pe aq_err %s\n" , +ERR_PTR (status),i40e_aq_str (hw, hw->aq.asq_last_status)); err = -EAGAIN ; }if (aq_failures &I40E_SET_FC_AQ_FAIL_UPDATE ) { -netdev_info (netdev,"Set fc failed on the get_link_info call with err %d aq_err %s\n" , - status, +netdev_info (netdev,"Set fc failed on the get_link_info call with err %pe aq_err %s\n" , +ERR_PTR (status),i40e_aq_str (hw, hw->aq.asq_last_status)); err = -EAGAIN ; }
@@ -5360,8 +5360,8 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags) 0, NULL);if (ret && pf->hw.aq.asq_last_status !=I40E_AQ_RC_ESRCH ) {dev_info (&pf->pdev->dev, -"couldn't set switch config bits, err %d aq_err %s\n" , - ret, +"couldn't set switch config bits, err %pe aq_err %s\n" , +ERR_PTR (ret),i40e_aq_str (&pf->hw, pf->hw.aq.asq_last_status));/* not a fatal problem, just keep going */
@@ -5433,8 +5433,8 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags)return -EBUSY ;default :dev_warn (&pf->pdev->dev, -"Starting FW LLDP agent failed: error: %d, %s\n" , - status, +"Starting FW LLDP agent failed: error: %pe, %s\n" , +ERR_PTR (status),i40e_aq_str (&pf->hw, adq_err));return -EINVAL ;
drivers/net/ethernet/intel/i40e/i40e_main.c +150 -149
754 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_nvm.c +2 -2
@@ -1429,8 +1429,8 @@ static int i40e_nvmupd_exec_aq(struct i40e_hw *hw, buff_size, &cmd_details);if (status) {i40e_debug (hw,I40E_DEBUG_NVM , -"%s err %d aq_err %s\n" , - __func__, status, +"%s err %pe aq_err %s\n" , + __func__,ERR_PTR (status),i40e_aq_str (hw, hw->aq.asq_last_status)); *perrno =i40e_aq_rc_to_posix (status, hw->aq.asq_last_status);return status;
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +22 -20
102 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c +19 -1
@@ -1069,6 +1069,7 @@ int otx2_add_flow(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc)struct ethhdr *eth_hdr;bool new = false;int err =0 ; +u64 vf_num;u32 ring;if (!flow_cfg->max_flows) {
@@ -1081,7 +1082,21 @@ int otx2_add_flow(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc)if (!(pfvf->flags &OTX2_FLAG_NTUPLE_SUPPORT ))return -ENOMEM ; -if (ring >= pfvf->hw.rx_queues && fsp->ring_cookie !=RX_CLS_FLOW_DISC ) +/* Number of queues on a VF can be greater or less than +* the PF's queue. Hence no need to check for the +* queue count. Hence no need to check queue count if PF +* is installing for its VF. Below is the expected vf_num value +* based on the ethtool commands. +* +* e.g. +* 1. ethtool -U <netdev> ... action -1 ==> vf_num:255 +* 2. ethtool -U <netdev> ... action <queue_num> ==> vf_num:0 +* 3. ethtool -U <netdev> ... vf <vf_idx> queue <queue_num> ==> +* vf_num:vf_idx+1 +*/ + vf_num =ethtool_get_flow_spec_ring_vf (fsp->ring_cookie); +if (!is_otx2_vf (pfvf->pcifunc) && !vf_num && + ring >= pfvf->hw.rx_queues && fsp->ring_cookie !=RX_CLS_FLOW_DISC )return -EINVAL ;if (fsp->location >=otx2_get_maxflows (flow_cfg))
@@ -1163,6 +1178,9 @@ int otx2_add_flow(struct otx2_nic *pfvf, struct ethtool_rxnfc *nfc) flow_cfg->nr_flows++; } +if (flow->is_vf) +netdev_info (pfvf->netdev, +"Make sure that VF's queue number is within its queue limit\n" );return 0 ; }
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +2 -0
@@ -1919,6 +1919,8 @@ int otx2_stop(struct net_device *netdev)/* Clear RSS enable flag */ rss = &pf->hw.rss_info; rss->enable = false; +if (!netif_is_rxfh_configured (netdev)) +kfree (rss->rss_ctx[DEFAULT_RSS_CONTEXT_GROUP ]);/* Cleanup Queue IRQ */ vec = pci_irq_vector(pf->pdev,
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +1 -1
@@ -821,7 +821,7 @@ axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev)if (lp->features &XAE_FEATURE_FULL_TX_CSUM ) {/* Tx Full Checksum Offload Enabled */ cur_p->app0 |=2 ; - }else if (lp->features &XAE_FEATURE_PARTIAL_RX_CSUM ) { + }else if (lp->features &XAE_FEATURE_PARTIAL_TX_CSUM ) { csum_start_off =skb_transport_offset (skb); csum_index_off = csum_start_off + skb->csum_offset;/* Tx Partial Checksum Offload Enabled */
drivers/net/hyperv/netvsc_drv.c +45 -21
127 lines not on this page · raw message
drivers/net/usb/ax88179_178a.c +2 -2
@@ -1583,11 +1583,11 @@ static int ax88179_reset(struct usbnet *dev) *tmp16 =AX_PHYPWR_RSTCTL_IPRL ;ax88179_write_cmd (dev,AX_ACCESS_MAC ,AX_PHYPWR_RSTCTL ,2 ,2 , tmp16); -msleep (200 ); +msleep (500 ); *tmp =AX_CLK_SELECT_ACS |AX_CLK_SELECT_BCS ;ax88179_write_cmd (dev,AX_ACCESS_MAC ,AX_CLK_SELECT ,1 ,1 , tmp); -msleep (100 ); +msleep (200 );/* Ethernet PHY Auto Detach*/ ax88179_auto_detach (dev);
drivers/net/wireguard/device.c +2 -2
@@ -209,7 +209,7 @@ static netdev_tx_t wg_xmit(struct sk_buff *skb, struct net_device *dev)*/ while (skb_queue_len (&peer->staged_packet_queue) >MAX_STAGED_PACKETS ) {dev_kfree_skb (__skb_dequeue (&peer->staged_packet_queue)); - ++dev->stats.tx_dropped; +DEV_STATS_INC (dev, tx_dropped); }skb_queue_splice_tail (&packets, &peer->staged_packet_queue);spin_unlock_bh (&peer->staged_packet_queue.lock);
@@ -227,7 +227,7 @@ static netdev_tx_t wg_xmit(struct sk_buff *skb, struct net_device *dev)else if (skb->protocol ==htons (ETH_P_IPV6 ))icmpv6_ndo_send (skb,ICMPV6_DEST_UNREACH ,ICMPV6_ADDR_UNREACH ,0 ); err: - ++dev->stats.tx_errors; +DEV_STATS_INC (dev, tx_errors);kfree_skb (skb);return ret; }
drivers/net/wireguard/receive.c +6 -6
@@ -416,20 +416,20 @@ static void wg_packet_consume_data_done(struct wg_peer *peer,net_dbg_skb_ratelimited ("%s: Packet has unallowed src IP (%pISc) from peer %llu (%pISpfsc)\n" , dev->name, skb, peer->internal_id, &peer->endpoint.addr); - ++dev->stats.rx_errors; - ++dev->stats.rx_frame_errors; +DEV_STATS_INC (dev, rx_errors); +DEV_STATS_INC (dev, rx_frame_errors); goto packet_processed; dishonest_packet_type:net_dbg_ratelimited ("%s: Packet is neither ipv4 nor ipv6 from peer %llu (%pISpfsc)\n" , dev->name, peer->internal_id, &peer->endpoint.addr); - ++dev->stats.rx_errors; - ++dev->stats.rx_frame_errors; +DEV_STATS_INC (dev, rx_errors); +DEV_STATS_INC (dev, rx_frame_errors); goto packet_processed; dishonest_packet_size:net_dbg_ratelimited ("%s: Packet has incorrect size from peer %llu (%pISpfsc)\n" , dev->name, peer->internal_id, &peer->endpoint.addr); - ++dev->stats.rx_errors; - ++dev->stats.rx_length_errors; +DEV_STATS_INC (dev, rx_errors); +DEV_STATS_INC (dev, rx_length_errors); goto packet_processed; packet_processed:dev_kfree_skb (skb);
drivers/net/wireguard/send.c +2 -1
@@ -333,7 +333,8 @@ static void wg_packet_create_data(struct wg_peer *peer, struct sk_buff *first)void wg_packet_purge_staged_packets (struct wg_peer *peer) {spin_lock_bh (&peer->staged_packet_queue.lock); - peer->device->dev->stats.tx_dropped += peer->staged_packet_queue.qlen; +DEV_STATS_ADD (peer->device->dev, tx_dropped, + peer->staged_packet_queue.qlen);__skb_queue_purge (&peer->staged_packet_queue);spin_unlock_bh (&peer->staged_packet_queue.lock); }
drivers/nvme/target/fabrics-cmd.c +4 -0
@@ -244,6 +244,8 @@ static void nvmet_execute_admin_connect(struct nvmet_req *req) goto out; } + d->subsysnqn[NVMF_NQN_FIELD_LEN -1 ] ='\0' ; + d->hostnqn[NVMF_NQN_FIELD_LEN -1 ] ='\0' ; status =nvmet_alloc_ctrl (d->subsysnqn, d->hostnqn, req,le32_to_cpu (c->kato), &ctrl);if (status)
@@ -313,6 +315,8 @@ static void nvmet_execute_io_connect(struct nvmet_req *req) goto out; } + d->subsysnqn[NVMF_NQN_FIELD_LEN -1 ] ='\0' ; + d->hostnqn[NVMF_NQN_FIELD_LEN -1 ] ='\0' ; ctrl =nvmet_ctrl_find_get (d->subsysnqn, d->hostnqn,le16_to_cpu (d->cntlid), req);if (!ctrl) {
drivers/s390/block/dasd.c +13 -11
@@ -673,18 +673,20 @@ static void dasd_profile_start(struct dasd_block *block,* we count each request only once. */ device = cqr->startdev; -if (device->profile.data) { - counter =1 ;/* request is not yet queued on the start device */ -list_for_each (l, &device->ccw_queue) -if (++counter >=31 ) -break ; - } +if (!device->profile.data) +return ; + +spin_lock (get_ccwdev_lock (device->cdev)); + counter =1 ;/* request is not yet queued on the start device */ +list_for_each (l, &device->ccw_queue) +if (++counter >=31 ) +break ; +spin_unlock (get_ccwdev_lock (device->cdev)); +spin_lock (&device->profile.lock); -if (device->profile.data) { - device->profile.data->dasd_io_nr_req[counter]++; -if (rq_data_dir (req) ==READ ) - device->profile.data->dasd_read_nr_req[counter]++; - } + device->profile.data->dasd_io_nr_req[counter]++; +if (rq_data_dir (req) ==READ ) + device->profile.data->dasd_read_nr_req[counter]++;spin_unlock (&device->profile.lock); }
drivers/usb/cdns3/cdnsp-ring.c +3 -0
@@ -1522,6 +1522,7 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data)unsigned long flags;int counter =0 ; +local_bh_disable ();spin_lock_irqsave (&pdev->lock, flags);if (pdev->cdnsp_state & (CDNSP_STATE_HALTED |CDNSP_STATE_DYING )) {
@@ -1534,6 +1535,7 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data)cdnsp_died (pdev);spin_unlock_irqrestore (&pdev->lock, flags); +local_bh_enable ();return IRQ_HANDLED ; }
@@ -1550,6 +1552,7 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data)cdnsp_update_erst_dequeue (pdev, event_ring_deq,1 );spin_unlock_irqrestore (&pdev->lock, flags); +local_bh_enable ();return IRQ_HANDLED ; }
drivers/usb/dwc2/hcd_intr.c +7 -8
@@ -2015,15 +2015,17 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum) {struct dwc2_qtd *qtd;struct dwc2_host_chan *chan; -u32 hcint, hcintmsk; +u32 hcint, hcintraw, hcintmsk; chan = hsotg->hc_ptr_array[chnum]; - hcint =dwc2_readl (hsotg,HCINT (chnum)); + hcintraw =dwc2_readl (hsotg,HCINT (chnum)); hcintmsk =dwc2_readl (hsotg,HCINTMSK (chnum)); + hcint = hcintraw & hcintmsk; +dwc2_writel (hsotg, hcint,HCINT (chnum)); +if (!chan) {dev_err (hsotg->dev,"## hc_ptr_array for channel is NULL ##\n" ); -dwc2_writel (hsotg, hcint,HCINT (chnum));return ; }
@@ -2032,11 +2034,9 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum) chnum);dev_vdbg (hsotg->dev," hcint 0x%08x, hcintmsk 0x%08x, hcint&hcintmsk 0x%08x\n" , - hcint, hcintmsk, hcint & hcintmsk); + hcintraw, hcintmsk, hcint); } -dwc2_writel (hsotg, hcint,HCINT (chnum)); -/* * If we got an interrupt after someone called * dwc2_hcd_endpoint_disable() we don't want to crash below
@@ -2046,8 +2046,7 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)return ; } - chan->hcint = hcint; - hcint &= hcintmsk; + chan->hcint = hcintraw;/* * If the channel was halted due to a dequeue, the qtd list might
drivers/usb/dwc3/core.c +2 -0
@@ -2036,6 +2036,8 @@ static int dwc3_probe(struct platform_device *pdev)pm_runtime_put (dev); +dma_set_max_seg_size (dev,UINT_MAX ); +return 0 ; err5:
drivers/usb/dwc3/drd.c +1 -1
@@ -505,6 +505,7 @@ static int dwc3_setup_role_switch(struct dwc3 *dwc) dwc->role_switch_default_mode =USB_DR_MODE_PERIPHERAL ; mode =DWC3_GCTL_PRTCAP_DEVICE ; } +dwc3_set_mode (dwc, mode); dwc3_role_switch.fwnode =dev_fwnode (dwc->dev); dwc3_role_switch.set = dwc3_usb_role_switch_set;
@@ -526,7 +527,6 @@ static int dwc3_setup_role_switch(struct dwc3 *dwc) } } -dwc3_set_mode (dwc, mode);return 0 ; }#else
drivers/usb/dwc3/dwc3-qcom.c +47 -18
140 lines not on this page · raw message
drivers/usb/serial/option.c +8 -3
@@ -203,8 +203,8 @@ static void option_instat_callback(struct urb *urb);#define DELL_PRODUCT_5829E_ESIM 0x81e4#define DELL_PRODUCT_5829E 0x81e6 -#define DELL_PRODUCT_FM101R 0x8213 -#define DELL_PRODUCT_FM101R_ESIM 0x8215 +#define DELL_PRODUCT_FM101R_ESIM 0x8213 +#define DELL_PRODUCT_FM101R 0x8215#define KYOCERA_VENDOR_ID 0x0c88#define KYOCERA_PRODUCT_KPC650 0x17da
@@ -609,6 +609,8 @@ static void option_instat_callback(struct urb *urb);#define UNISOC_VENDOR_ID 0x1782/* TOZED LT70-C based on UNISOC SL8563 uses UNISOC's vendor ID */ #define TOZED_PRODUCT_LT70C 0x4055 +/* Luat Air72*U series based on UNISOC UIS8910 uses UNISOC's vendor ID */ +#define LUAT_PRODUCT_AIR720U 0x4e00/* Device flags */
@@ -1546,7 +1548,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0165, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0167, 0xff, 0xff, 0xff), .driver_info = RSVD(4) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0189, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0189, 0xff, 0xff, 0xff), + .driver_info = RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0191, 0xff, 0xff, 0xff), /* ZTE EuFi890 */ .driver_info = RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0196, 0xff, 0xff, 0xff) },
@@ -2249,6 +2252,7 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(4) | RSVD(5) | RSVD(6) }, { USB_DEVICE(0x1782, 0x4d10) }, /* Fibocom L610 (AT mode) */ { USB_DEVICE_INTERFACE_CLASS(0x1782, 0x4d11, 0xff) }, /* Fibocom L610 (ECM/RNDIS mode) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x0001, 0xff, 0xff, 0xff) }, /* Fibocom L716-EU (ECM/RNDIS mode) */ { USB_DEVICE(0x2cb7, 0x0104), /* Fibocom NL678 series */ .driver_info = RSVD(4) | RSVD(5) }, { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */
@@ -2271,6 +2275,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
drivers/usb/typec/tcpm/tcpm.c +9 -0
@@ -5426,6 +5426,15 @@ static void _tcpm_pd_hard_reset(struct tcpm_port *port)if (port->bist_request ==BDO_MODE_TESTDATA && port->tcpc->set_bist_data) port->tcpc->set_bist_data (port->tcpc, false); +switch (port->state) { +case ERROR_RECOVERY : +case PORT_RESET : +case PORT_RESET_WAIT_OFF : +return ; +default : +break ; + } +if (port->ams !=NONE_AMS ) port->ams =NONE_AMS ;if (port->hard_reset_count <PD_N_HARD_RESET_COUNT )
drivers/xen/swiotlb-xen.c +1 -0
@@ -405,4 +405,5 @@ const struct dma_map_ops xen_swiotlb_dma_ops = { .get_sgtable = dma_common_get_sgtable, .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, + .max_mapping_size = swiotlb_max_mapping_size, };
fs/afs/dynroot.c +2 -2
@@ -132,8 +132,8 @@ static int afs_probe_cell_name(struct dentry *dentry) ret =dns_query (net->net,"afsdb" , name, len,"srv=1" ,NULL ,NULL , false); -if (ret == -ENODATA ) - ret = -EDESTADDRREQ ; +if (ret == -ENODATA || ret == -ENOKEY ) + ret = -ENOENT ;return ret; }
fs/afs/internal.h +1 -0
@@ -552,6 +552,7 @@ struct afs_server_entry { };struct afs_server_list { +struct rcu_head rcu;afs_volid_t vids[AFS_MAXTYPES ];/* Volume IDs */ refcount_t usage;unsigned char nr_servers;
fs/afs/server_list.c +1 -1
@@ -17,7 +17,7 @@ void afs_put_serverlist(struct afs_net *net, struct afs_server_list *slist)for (i =0 ; i < slist->nr_servers; i++)afs_unuse_server (net, slist->servers[i].server, afs_server_trace_put_slist); -kfree (slist); +kfree_rcu (slist, rcu); } }
fs/afs/super.c +2 -0
@@ -407,6 +407,8 @@ static int afs_validate_fc(struct fs_context *fc)return PTR_ERR (volume); ctx->volume = volume; +if (volume->type !=AFSVL_RWVOL ) + ctx->flock_mode = afs_flock_mode_local; }return 0 ;
fs/afs/vl_rotate.c +10 -0
@@ -58,6 +58,12 @@ static bool afs_start_vl_iteration(struct afs_vl_cursor *vc) }/* Status load is ordered after lookup counter load */ +if (cell->dns_status ==DNS_LOOKUP_GOT_NOT_FOUND ) { +pr_warn ("No record of cell %s\n" , cell->name); + vc->error = -ENOENT ; +return false; + } +if (cell->dns_source ==DNS_RECORD_UNAVAILABLE ) { vc->error = -EDESTADDRREQ ;return false;
@@ -285,6 +291,7 @@ bool afs_select_vlserver(struct afs_vl_cursor *vc)*/ static void afs_vl_dump_edestaddrreq (const struct afs_vl_cursor *vc) { +struct afs_cell *cell = vc->cell;static int count;int i;
@@ -294,6 +301,9 @@ static void afs_vl_dump_edestaddrreq(const struct afs_vl_cursor *vc)rcu_read_lock ();pr_notice ("EDESTADDR occurred\n" ); +pr_notice ("CELL: %s err=%d\n" , cell->name, cell->error); +pr_notice ("DNS: src=%u st=%u lc=%x\n" , + cell->dns_source, cell->dns_status, cell->dns_lookup_count);pr_notice ("VC: ut=%lx ix=%u ni=%hu fl=%hx err=%hd\n" , vc->untried, vc->index, vc->nr_iterations, vc->flags, vc->error);
fs/ext4/extents_status.c +216 -90
475 lines not on this page · raw message
fs/nfsd/nfscache.c +44 -21
65 lines not on this page · raw message
fs/smb/client/sess.c +98 -14
112 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.