Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 's390-6.18-3' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 fixes from Heiko Carstens:

- Use correct locking in zPCI event code to avoid deadlock

- Get rid of irqs_registered flag in zpci_dev structure and restore IRQ
unconditionally for zPCI devices. This fixes sit uations where the
flag was not correctly updated

- Fix potential memory leak kernel page table dumper code

- Disable (revert) ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP for s390 again.

The optimized hugetlb vmemmap code modifies kernel page tables in a
way which does not work on s390 and leads to reproducible kernel
crashes due to stale TLB entries. This needs to be addressed with
some larger changes. For now simply disable the feature

- Update defconfigs

* tag 's390-6.18-3' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
s390: Disable ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
s390/mm: Fix memory leak in add_marker() when kvrealloc() fails
s390/pci: Restore IRQ unconditionally for the zPCI device
s390: Update defconfigs
s390/pci: Avoid deadlock between PCI error recovery and mlx5 crdump

+28 -35
-1
arch/s390/Kconfig
··· 158 158 select ARCH_WANT_IRQS_OFF_ACTIVATE_MM 159 159 select ARCH_WANT_KERNEL_PMD_MKWRITE 160 160 select ARCH_WANT_LD_ORPHAN_WARN 161 - select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP 162 161 select ARCH_WANTS_THP_SWAP 163 162 select BUILDTIME_TABLE_SORT 164 163 select CLONE_BACKWARDS2
+9 -5
arch/s390/configs/debug_defconfig
··· 101 101 CONFIG_MEMORY_HOTPLUG=y 102 102 CONFIG_MEMORY_HOTREMOVE=y 103 103 CONFIG_KSM=y 104 + CONFIG_PERSISTENT_HUGE_ZERO_FOLIO=y 104 105 CONFIG_TRANSPARENT_HUGEPAGE=y 105 106 CONFIG_CMA_DEBUGFS=y 106 107 CONFIG_CMA_SYSFS=y ··· 124 123 CONFIG_TLS_TOE=y 125 124 CONFIG_XFRM_USER=m 126 125 CONFIG_NET_KEY=m 127 - CONFIG_XDP_SOCKETS=y 128 - CONFIG_XDP_SOCKETS_DIAG=m 129 - CONFIG_DIBS=y 130 - CONFIG_DIBS_LO=y 131 126 CONFIG_SMC=m 132 127 CONFIG_SMC_DIAG=m 128 + CONFIG_DIBS=y 129 + CONFIG_DIBS_LO=y 130 + CONFIG_XDP_SOCKETS=y 131 + CONFIG_XDP_SOCKETS_DIAG=m 133 132 CONFIG_INET=y 134 133 CONFIG_IP_MULTICAST=y 135 134 CONFIG_IP_ADVANCED_ROUTER=y ··· 473 472 CONFIG_SCSI_DH_ALUA=m 474 473 CONFIG_MD=y 475 474 CONFIG_BLK_DEV_MD=y 475 + CONFIG_MD_LLBITMAP=y 476 476 # CONFIG_MD_BITMAP_FILE is not set 477 477 CONFIG_MD_LINEAR=m 478 478 CONFIG_MD_CLUSTER=m ··· 656 654 CONFIG_JFS_SECURITY=y 657 655 CONFIG_JFS_STATISTICS=y 658 656 CONFIG_XFS_FS=y 657 + CONFIG_XFS_SUPPORT_V4=y 658 + CONFIG_XFS_SUPPORT_ASCII_CI=y 659 659 CONFIG_XFS_QUOTA=y 660 660 CONFIG_XFS_POSIX_ACL=y 661 661 CONFIG_XFS_RT=y 662 + # CONFIG_XFS_ONLINE_SCRUB is not set 662 663 CONFIG_XFS_DEBUG=y 663 664 CONFIG_GFS2_FS=m 664 665 CONFIG_GFS2_FS_LOCKING_DLM=y ··· 671 666 CONFIG_BTRFS_DEBUG=y 672 667 CONFIG_BTRFS_ASSERT=y 673 668 CONFIG_NILFS2_FS=m 674 - CONFIG_FS_DAX=y 675 669 CONFIG_EXPORTFS_BLOCK_OPS=y 676 670 CONFIG_FS_ENCRYPTION=y 677 671 CONFIG_FS_VERITY=y
+9 -5
arch/s390/configs/defconfig
··· 94 94 CONFIG_MEMORY_HOTPLUG=y 95 95 CONFIG_MEMORY_HOTREMOVE=y 96 96 CONFIG_KSM=y 97 + CONFIG_PERSISTENT_HUGE_ZERO_FOLIO=y 97 98 CONFIG_TRANSPARENT_HUGEPAGE=y 98 99 CONFIG_CMA_SYSFS=y 99 100 CONFIG_CMA_AREAS=7 ··· 115 114 CONFIG_TLS_TOE=y 116 115 CONFIG_XFRM_USER=m 117 116 CONFIG_NET_KEY=m 118 - CONFIG_XDP_SOCKETS=y 119 - CONFIG_XDP_SOCKETS_DIAG=m 120 - CONFIG_DIBS=y 121 - CONFIG_DIBS_LO=y 122 117 CONFIG_SMC=m 123 118 CONFIG_SMC_DIAG=m 119 + CONFIG_DIBS=y 120 + CONFIG_DIBS_LO=y 121 + CONFIG_XDP_SOCKETS=y 122 + CONFIG_XDP_SOCKETS_DIAG=m 124 123 CONFIG_INET=y 125 124 CONFIG_IP_MULTICAST=y 126 125 CONFIG_IP_ADVANCED_ROUTER=y ··· 463 462 CONFIG_SCSI_DH_ALUA=m 464 463 CONFIG_MD=y 465 464 CONFIG_BLK_DEV_MD=y 465 + CONFIG_MD_LLBITMAP=y 466 466 # CONFIG_MD_BITMAP_FILE is not set 467 467 CONFIG_MD_LINEAR=m 468 468 CONFIG_MD_CLUSTER=m ··· 646 644 CONFIG_JFS_SECURITY=y 647 645 CONFIG_JFS_STATISTICS=y 648 646 CONFIG_XFS_FS=y 647 + CONFIG_XFS_SUPPORT_V4=y 648 + CONFIG_XFS_SUPPORT_ASCII_CI=y 649 649 CONFIG_XFS_QUOTA=y 650 650 CONFIG_XFS_POSIX_ACL=y 651 651 CONFIG_XFS_RT=y 652 + # CONFIG_XFS_ONLINE_SCRUB is not set 652 653 CONFIG_GFS2_FS=m 653 654 CONFIG_GFS2_FS_LOCKING_DLM=y 654 655 CONFIG_OCFS2_FS=m 655 656 CONFIG_BTRFS_FS=y 656 657 CONFIG_BTRFS_FS_POSIX_ACL=y 657 658 CONFIG_NILFS2_FS=m 658 - CONFIG_FS_DAX=y 659 659 CONFIG_EXPORTFS_BLOCK_OPS=y 660 660 CONFIG_FS_ENCRYPTION=y 661 661 CONFIG_FS_VERITY=y
-1
arch/s390/configs/zfcpdump_defconfig
··· 33 33 CONFIG_DEVTMPFS=y 34 34 CONFIG_DEVTMPFS_SAFE=y 35 35 CONFIG_BLK_DEV_RAM=y 36 - # CONFIG_DCSSBLK is not set 37 36 # CONFIG_DASD is not set 38 37 CONFIG_ENCLOSURE_SERVICES=y 39 38 CONFIG_SCSI=y
-1
arch/s390/include/asm/pci.h
··· 145 145 u8 has_resources : 1; 146 146 u8 is_physfn : 1; 147 147 u8 util_str_avail : 1; 148 - u8 irqs_registered : 1; 149 148 u8 tid_avail : 1; 150 149 u8 rtr_avail : 1; /* Relaxed translation allowed */ 151 150 unsigned int devfn; /* DEVFN part of the RID*/
+7 -12
arch/s390/mm/dump_pagetables.c
··· 291 291 292 292 static int add_marker(unsigned long start, unsigned long end, const char *name) 293 293 { 294 - size_t oldsize, newsize; 294 + struct addr_marker *new; 295 + size_t newsize; 295 296 296 - oldsize = markers_cnt * sizeof(*markers); 297 - newsize = oldsize + 2 * sizeof(*markers); 298 - if (!oldsize) 299 - markers = kvmalloc(newsize, GFP_KERNEL); 300 - else 301 - markers = kvrealloc(markers, newsize, GFP_KERNEL); 302 - if (!markers) 303 - goto error; 297 + newsize = (markers_cnt + 2) * sizeof(*markers); 298 + new = kvrealloc(markers, newsize, GFP_KERNEL); 299 + if (!new) 300 + return -ENOMEM; 301 + markers = new; 304 302 markers[markers_cnt].is_start = 1; 305 303 markers[markers_cnt].start_address = start; 306 304 markers[markers_cnt].size = end - start; ··· 310 312 markers[markers_cnt].name = name; 311 313 markers_cnt++; 312 314 return 0; 313 - error: 314 - markers_cnt = 0; 315 - return -ENOMEM; 316 315 } 317 316 318 317 static int pt_dump_init(void)
+2 -2
arch/s390/pci/pci_event.c
··· 188 188 * is unbound or probed and that userspace can't access its 189 189 * configuration space while we perform recovery. 190 190 */ 191 - pci_dev_lock(pdev); 191 + device_lock(&pdev->dev); 192 192 if (pdev->error_state == pci_channel_io_perm_failure) { 193 193 ers_res = PCI_ERS_RESULT_DISCONNECT; 194 194 goto out_unlock; ··· 257 257 driver->err_handler->resume(pdev); 258 258 pci_uevent_ers(pdev, PCI_ERS_RESULT_RECOVERED); 259 259 out_unlock: 260 - pci_dev_unlock(pdev); 260 + device_unlock(&pdev->dev); 261 261 zpci_report_status(zdev, "recovery", status_str); 262 262 263 263 return ers_res;
+1 -8
arch/s390/pci/pci_irq.c
··· 107 107 else 108 108 rc = zpci_set_airq(zdev); 109 109 110 - if (!rc) 111 - zdev->irqs_registered = 1; 112 - 113 110 return rc; 114 111 } 115 112 ··· 119 122 rc = zpci_clear_directed_irq(zdev); 120 123 else 121 124 rc = zpci_clear_airq(zdev); 122 - 123 - if (!rc) 124 - zdev->irqs_registered = 0; 125 125 126 126 return rc; 127 127 } ··· 421 427 { 422 428 struct zpci_dev *zdev = to_zpci(pdev); 423 429 424 - if (!zdev->irqs_registered) 425 - zpci_set_irq(zdev); 430 + zpci_set_irq(zdev); 426 431 return true; 427 432 } 428 433