1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
# SPDX-License-Identifier: GPL-2.0
config MMU
	def_bool y

config CPU_BIG_ENDIAN
	def_bool y

config LOCKDEP_SUPPORT
	def_bool y

config STACKTRACE_SUPPORT
	def_bool y

config ARCH_HAS_ILOG2_U32
	def_bool n

config ARCH_HAS_ILOG2_U64
	def_bool n

config ARCH_PROC_KCORE_TEXT
	def_bool y

config ARCH_HAS_CPU_RELAX
	def_bool y

config GENERIC_HWEIGHT
	def_bool !HAVE_MARCH_Z196_FEATURES

config GENERIC_BUG
	def_bool y if BUG

config GENERIC_BUG_RELATIVE_POINTERS
	def_bool y

config AUDIT_ARCH
	def_bool y

config NO_IOPORT_MAP
	def_bool y

config ARCH_SUPPORTS_UPROBES
	def_bool y

config KASAN_SHADOW_OFFSET
	hex
	depends on KASAN
	default 0x1C000000000000

config CC_HAS_BUILTIN_FFS
	def_bool !(CC_IS_GCC && GCC_VERSION < 160000)
	help
	  GCC versions before 16.0.0 generate library calls to ffs()
	  for __builtin_ffs() even when __has_builtin(__builtin_ffs)
	  is true.

config CC_ASM_FLAG_OUTPUT_BROKEN
	def_bool CC_IS_GCC && GCC_VERSION < 140200
	help
	  GCC versions before 14.2.0 may die with an internal
	  compiler error in some configurations if flag output
	  operands are used within inline assemblies.

config CC_HAS_ASM_AOR_FORMAT_FLAGS
	def_bool !(CC_IS_CLANG && CLANG_VERSION < 190100)
	help
	  Clang versions before 19.1.0 do not support A,
	  O, and R inline assembly format flags.

config CC_HAS_ASM_IMMEDIATE_STRINGS
	def_bool !(CC_IS_GCC && GCC_VERSION < 90000)
	help
	  GCC versions before 9.0.0 cannot handle strings as immediate
	  input operands in inline assemblies.

config CC_HAS_STACKPROTECTOR_GLOBAL
	def_bool $(cc-option, -mstack-protector-guard=global -mstack-protector-guard-record)

config S390
	def_bool y
	#
	# Note: keep this list sorted alphabetically
	#
	select ALTERNATE_USER_ADDRESS_SPACE
	select ARCH_32BIT_USTAT_F_TINODE
	select ARCH_CORRECT_STACKTRACE_ON_KRETPROBE
	select ARCH_ENABLE_MEMORY_HOTPLUG if SPARSEMEM
	select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
	select ARCH_HAS_PMD_SOFTLEAVES if TRANSPARENT_HUGEPAGE
	select ARCH_HAS_CC_CAN_LINK
	select ARCH_HAS_CC_PLATFORM
	select ARCH_HAS_CPU_FINALIZE_INIT
	select ARCH_HAS_CURRENT_STACK_POINTER
	select ARCH_HAS_DEBUG_VIRTUAL
	select ARCH_HAS_DEBUG_VM_PGTABLE
	select ARCH_HAS_DEBUG_WX
	select ARCH_HAS_DEVMEM_IS_ALLOWED
	select ARCH_HAS_DMA_OPS if PCI
	select ARCH_HAS_ELF_RANDOMIZE
	select ARCH_HAS_FORCE_DMA_UNENCRYPTED
	select ARCH_HAS_FORTIFY_SOURCE
	select ARCH_HAS_GCOV_PROFILE_ALL
	select ARCH_HAS_GIGANTIC_PAGE
	select ARCH_HAS_KCOV
	select ARCH_HAS_MEMBARRIER_SYNC_CORE
	select ARCH_HAS_MEM_ENCRYPT
	select ARCH_HAS_NMI_SAFE_THIS_CPU_OPS
	select ARCH_HAS_PREEMPT_LAZY
	select ARCH_HAS_PTDUMP
	select ARCH_HAS_PTE_SPECIAL
	select ARCH_HAS_SCALED_CPUTIME
	select ARCH_HAS_SET_DIRECT_MAP
	select ARCH_HAS_SET_MEMORY
	select ARCH_HAS_STRICT_KERNEL_RWX
	select ARCH_HAS_STRICT_MODULE_RWX
	select ARCH_HAS_SYSCALL_WRAPPER
	select ARCH_HAS_UBSAN
	select ARCH_HAS_VDSO_TIME_DATA
	select ARCH_HAVE_NMI_SAFE_CMPXCHG
	select ARCH_HAVE_TRACE_MMIO_ACCESS
	select ARCH_INLINE_READ_LOCK
	select ARCH_INLINE_READ_LOCK_BH
	select ARCH_INLINE_READ_LOCK_IRQ
	select ARCH_INLINE_READ_LOCK_IRQSAVE
	select ARCH_INLINE_READ_TRYLOCK
	select ARCH_INLINE_READ_UNLOCK
	select ARCH_INLINE_READ_UNLOCK_BH
	select ARCH_INLINE_READ_UNLOCK_IRQ
	select ARCH_INLINE_READ_UNLOCK_IRQRESTORE
	select ARCH_INLINE_SPIN_LOCK
	select ARCH_INLINE_SPIN_LOCK_BH
	select ARCH_INLINE_SPIN_LOCK_IRQ
	select ARCH_INLINE_SPIN_LOCK_IRQSAVE
	select ARCH_INLINE_SPIN_TRYLOCK
	select ARCH_INLINE_SPIN_TRYLOCK_BH
	select ARCH_INLINE_SPIN_UNLOCK
	select ARCH_INLINE_SPIN_UNLOCK_BH
	select ARCH_INLINE_SPIN_UNLOCK_IRQ
	select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE
	select ARCH_INLINE_WRITE_LOCK
	select ARCH_INLINE_WRITE_LOCK_BH
	select ARCH_INLINE_WRITE_LOCK_IRQ
	select ARCH_INLINE_WRITE_LOCK_IRQSAVE
	select ARCH_INLINE_WRITE_TRYLOCK
	select ARCH_INLINE_WRITE_UNLOCK
	select ARCH_INLINE_WRITE_UNLOCK_BH
	select ARCH_INLINE_WRITE_UNLOCK_IRQ
	select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
	select ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
	select ARCH_STACKWALK
	select ARCH_SUPPORTS_ATOMIC_RMW
	select ARCH_SUPPORTS_CFI
	select ARCH_SUPPORTS_DEBUG_PAGEALLOC
	select ARCH_SUPPORTS_HUGETLBFS
	select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 && CC_IS_CLANG
	select ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS
	select ARCH_HAS_PTE_PROTNONE
	select ARCH_SUPPORTS_NUMA_BALANCING
	select ARCH_SUPPORTS_PAGE_TABLE_CHECK
	select ARCH_SUPPORTS_PER_VMA_LOCK
	select ARCH_USES_CFI_GENERIC_LLVM_PASS if CC_IS_CLANG
	select ARCH_USE_BUILTIN_BSWAP
	select ARCH_USE_CMPXCHG_LOCKREF
	select ARCH_USE_SYM_ANNOTATIONS
	select ARCH_WANTS_NO_INSTR
	select ARCH_WANT_DEFAULT_BPF_JIT
	select ARCH_WANT_IPC_PARSE_VERSION
	select ARCH_WANT_IRQS_OFF_ACTIVATE_MM
	select ARCH_WANT_KERNEL_PMD_MKWRITE
	select ARCH_WANT_LD_ORPHAN_WARN
	select ARCH_WANTS_THP_SWAP
	select BUILDTIME_TABLE_SORT
	select CLONE_BACKWARDS2
	select DCACHE_WORD_ACCESS if !KMSAN
	select DYNAMIC_FTRACE if FUNCTION_TRACER
	select FUNCTION_ALIGNMENT_8B if CC_IS_GCC
	select FUNCTION_ALIGNMENT_16B if !CC_IS_GCC
	select GENERIC_ALLOCATOR
	select GENERIC_CPU_DEVICES
	select GENERIC_CPU_AUTOPROBE
	select GENERIC_CPU_VULNERABILITIES
	select GENERIC_ENTRY
	select GENERIC_GETTIMEOFDAY
	select GENERIC_SMP_IDLE_THREAD
	select GENERIC_IOREMAP if PCI
	select GLOB
	select HAVE_ALIGNED_STRUCT_PAGE
	select HAVE_ARCH_AUDITSYSCALL
	select HAVE_ARCH_GET_SECUREBOOT
	select HAVE_ARCH_JUMP_LABEL
	select HAVE_ARCH_JUMP_LABEL_RELATIVE
	select HAVE_ARCH_KASAN
	select HAVE_ARCH_KASAN_VMALLOC
	select HAVE_ARCH_KCSAN
	select HAVE_ARCH_KMSAN
	select HAVE_ARCH_KFENCE
	select HAVE_ARCH_KSTACK_ERASE
	select HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET
	select HAVE_ARCH_SECCOMP_FILTER
	select HAVE_ARCH_SOFT_DIRTY
	select HAVE_ARCH_TRACEHOOK
	select HAVE_ARCH_TRANSPARENT_HUGEPAGE
	select HAVE_ARCH_VMAP_STACK
	select HAVE_ASM_MODVERSIONS
	select HAVE_BUILDTIME_MCOUNT_SORT
	select HAVE_CMPXCHG_DOUBLE
	select HAVE_CMPXCHG_LOCAL
	select HAVE_DEBUG_KMEMLEAK
	select HAVE_DMA_CONTIGUOUS
	select HAVE_DYNAMIC_FTRACE
	select HAVE_DYNAMIC_FTRACE_WITH_ARGS
	select HAVE_FTRACE_REGS_HAVING_PT_REGS
	select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
	select HAVE_DYNAMIC_FTRACE_WITH_REGS
	select HAVE_EBPF_JIT if HAVE_MARCH_Z196_FEATURES
	select HAVE_EFFICIENT_UNALIGNED_ACCESS
	select HAVE_GENERIC_TIF_BITS
	select HAVE_GUP_FAST
	select HAVE_FENTRY
	select HAVE_FTRACE_GRAPH_FUNC
	select HAVE_FUNCTION_ARG_ACCESS_API
	select HAVE_FUNCTION_ERROR_INJECTION
	select HAVE_FUNCTION_GRAPH_FREGS
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_FUNCTION_TRACER
	select HAVE_GCC_PLUGINS
	select HAVE_IOREMAP_PROT if PCI
	select HAVE_KERNEL_BZIP2
	select HAVE_KERNEL_GZIP
	select HAVE_KERNEL_LZ4
	select HAVE_KERNEL_LZMA
	select HAVE_KERNEL_LZO
	select HAVE_KERNEL_UNCOMPRESSED
	select HAVE_KERNEL_XZ
	select HAVE_KERNEL_ZSTD
	select HAVE_KPROBES
	select HAVE_KPROBES_ON_FTRACE
	select HAVE_KRETPROBES
	select HAVE_LIVEPATCH
	select HAVE_MEMBLOCK_PHYS_MAP
	select HAVE_MOD_ARCH_SPECIFIC
	select HAVE_NMI
	select HAVE_NOP_MCOUNT
	select HAVE_PAGE_SIZE_4KB
	select HAVE_PCI
	select HAVE_PERF_EVENTS
	select HAVE_PERF_REGS
	select HAVE_PERF_USER_STACK_DUMP
	select HAVE_POSIX_CPU_TIMERS_TASK_WORK
	select HAVE_PREEMPT_DYNAMIC_KEY
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_RELIABLE_STACKTRACE
	select HAVE_RETHOOK
	select HAVE_RSEQ
	select HAVE_RUST if !EXPOLINE
	select HAVE_SAMPLE_FTRACE_DIRECT
	select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
	select HAVE_SETUP_PER_CPU_AREA
	select HAVE_SOFTIRQ_ON_OWN_STACK
	select HAVE_STACKPROTECTOR if CC_HAS_STACKPROTECTOR_GLOBAL
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_VIRT_CPU_ACCOUNTING
	select HAVE_VIRT_CPU_ACCOUNTING_IDLE
	select HOTPLUG_SMT
	select IOMMU_HELPER		if PCI
	select IOMMU_SUPPORT		if PCI
	select IRQ_MSI_LIB		if PCI
	select KASAN_VMALLOC if KASAN
	select LOCK_MM_AND_FIND_VMA
	select MMU_GATHER_MERGE_VMAS
	select MMU_GATHER_NO_GATHER
	select MMU_GATHER_RCU_TABLE_FREE
	select MODULES_USE_ELF_RELA
	select NEED_DMA_MAP_STATE	if PCI
	select NEED_PER_CPU_EMBED_FIRST_CHUNK
	select NEED_PROC_VMCORE_DEVICE_RAM if PROC_VMCORE
	select NEED_SG_DMA_LENGTH	if PCI
	select OLD_SIGACTION
	select OLD_SIGSUSPEND3
	select PCI_DOMAINS		if PCI
	select PCI_MSI			if PCI
	select PCI_MSI_ARCH_FALLBACKS	if PCI_MSI
	select PCI_QUIRKS		if PCI
	select HAS_SEPARATE_PREEMPT_RESCHED_BITS
	select SPARSE_IRQ
	select SWIOTLB
	select SWIOTLB_DYNAMIC
	select DMA_COHERENT_POOL
	select SYSCTL_EXCEPTION_TRACE
	select SYSTEM_DATA_VERIFICATION if KEXEC_SIG
	select THREAD_INFO_IN_TASK
	select TRACE_IRQFLAGS_SUPPORT
	select TTY
	select USER_STACKTRACE_SUPPORT
	select VDSO_GETRANDOM
	select VIRT_CPU_ACCOUNTING
	select VMAP_STACK
	select ZONE_DMA
	# Note: keep the above list sorted alphabetically

config SCHED_OMIT_FRAME_POINTER
	def_bool y

config PGTABLE_LEVELS
	int
	default 5

source "kernel/livepatch/Kconfig"

config ARCH_CC_CAN_LINK
	bool
	default $(cc_can_link_user,-m64)

config ARCH_USERFLAGS
	string
	default "-m64"

config ARCH_SUPPORTS_KEXEC
	def_bool y

config ARCH_SUPPORTS_KEXEC_FILE
	def_bool y

config ARCH_SUPPORTS_KEXEC_SIG
	def_bool y

config ARCH_SUPPORTS_KEXEC_PURGATORY
	def_bool y

config ARCH_SUPPORTS_CRASH_DUMP
	def_bool y
	help
	  Refer to <file:Documentation/arch/s390/zfcpdump.rst> for more details on this.
	  This option also enables s390 zfcpdump.
	  See also <file:Documentation/arch/s390/zfcpdump.rst>

config ARCH_DEFAULT_CRASH_DUMP
	def_bool y

menu "Processor type and features"

config HAVE_MARCH_Z10_FEATURES
	def_bool n

config HAVE_MARCH_Z196_FEATURES
	def_bool n
	select HAVE_MARCH_Z10_FEATURES

config HAVE_MARCH_ZEC12_FEATURES
	def_bool n
	select HAVE_MARCH_Z196_FEATURES

config HAVE_MARCH_Z13_FEATURES
	def_bool n
	select HAVE_MARCH_ZEC12_FEATURES

config HAVE_MARCH_Z14_FEATURES
	def_bool n
	select HAVE_MARCH_Z13_FEATURES

config HAVE_MARCH_Z15_FEATURES
	def_bool n
	select HAVE_MARCH_Z14_FEATURES

config HAVE_MARCH_Z16_FEATURES
	def_bool n
	select HAVE_MARCH_Z15_FEATURES

config HAVE_MARCH_Z17_FEATURES
	def_bool n
	select HAVE_MARCH_Z16_FEATURES

choice
	prompt "Processor type"
	default MARCH_Z196

config MARCH_Z10
	bool "IBM System z10"
	select HAVE_MARCH_Z10_FEATURES
	depends on $(cc-option,-march=z10)
	help
	  Select this to enable optimizations for IBM System z10 (2097 and 2098
	  series). This is the oldest machine generation currently supported.

config MARCH_Z196
	bool "IBM zEnterprise 114 and 196"
	select HAVE_MARCH_Z196_FEATURES
	depends on $(cc-option,-march=z196)
	help
	  Select this to enable optimizations for IBM zEnterprise 114 and 196
	  (2818 and 2817 series). The kernel will be slightly faster but will
	  not work on older machines.

config MARCH_ZEC12
	bool "IBM zBC12 and zEC12"
	select HAVE_MARCH_ZEC12_FEATURES
	depends on $(cc-option,-march=zEC12)
	help
	  Select this to enable optimizations for IBM zBC12 and zEC12 (2828 and
	  2827 series). The kernel will be slightly faster but will not work on
	  older machines.

config MARCH_Z13
	bool "IBM z13s and z13"
	select HAVE_MARCH_Z13_FEATURES
	depends on $(cc-option,-march=z13)
	help
	  Select this to enable optimizations for IBM z13s and z13 (2965 and
	  2964 series). The kernel will be slightly faster but will not work on
	  older machines.

config MARCH_Z14
	bool "IBM z14 ZR1 and z14"
	select HAVE_MARCH_Z14_FEATURES
	depends on $(cc-option,-march=z14)
	help
	  Select this to enable optimizations for IBM z14 ZR1 and z14 (3907
	  and 3906 series). The kernel will be slightly faster but will not
	  work on older machines.

config MARCH_Z15
	bool "IBM z15"
	select HAVE_MARCH_Z15_FEATURES
	depends on $(cc-option,-march=z15)
	help
	  Select this to enable optimizations for IBM z15 (8562
	  and 8561 series). The kernel will be slightly faster but will not
	  work on older machines.

config MARCH_Z16
	bool "IBM z16"
	select HAVE_MARCH_Z16_FEATURES
	depends on $(cc-option,-march=z16)
	help
	  Select this to enable optimizations for IBM z16 (3931 and
	  3932 series).

config MARCH_Z17
	bool "IBM z17"
	select HAVE_MARCH_Z17_FEATURES
	depends on $(cc-option,-march=z17)
	help
	  Select this to enable optimizations for IBM z17 (9175 and
	  9176 series).

endchoice

config MARCH_Z10_TUNE
	def_bool TUNE_Z10 || MARCH_Z10 && TUNE_DEFAULT

config MARCH_Z196_TUNE
	def_bool TUNE_Z196 || MARCH_Z196 && TUNE_DEFAULT

config MARCH_ZEC12_TUNE
	def_bool TUNE_ZEC12 || MARCH_ZEC12 && TUNE_DEFAULT

config MARCH_Z13_TUNE
	def_bool TUNE_Z13 || MARCH_Z13 && TUNE_DEFAULT

config MARCH_Z14_TUNE
	def_bool TUNE_Z14 || MARCH_Z14 && TUNE_DEFAULT

config MARCH_Z15_TUNE
	def_bool TUNE_Z15 || MARCH_Z15 && TUNE_DEFAULT

config MARCH_Z16_TUNE
	def_bool TUNE_Z16 || MARCH_Z16 && TUNE_DEFAULT

config MARCH_Z17_TUNE
	def_bool TUNE_Z17 || MARCH_Z17 && TUNE_DEFAULT

choice
	prompt "Tune code generation"
	default TUNE_DEFAULT
	help
	  Cause the compiler to tune (-mtune) the generated code for a machine.
	  This will make the code run faster on the selected machine but
	  somewhat slower on other machines.
	  This option only changes how the compiler emits instructions, not the
	  selection of instructions itself, so the resulting kernel will run on
	  all other machines.

config TUNE_DEFAULT
	bool "Default"
	help
	  Tune the generated code for the target processor for which the kernel
	  will be compiled.

config TUNE_Z10
	bool "IBM System z10"

config TUNE_Z196
	bool "IBM zEnterprise 114 and 196"
	depends on $(cc-option,-mtune=z196)

config TUNE_ZEC12
	bool "IBM zBC12 and zEC12"
	depends on $(cc-option,-mtune=zEC12)

config TUNE_Z13
	bool "IBM z13s and z13"
	depends on $(cc-option,-mtune=z13)

config TUNE_Z14
	bool "IBM z14 ZR1 and z14"
	depends on $(cc-option,-mtune=z14)

config TUNE_Z15
	bool "IBM z15"
	depends on $(cc-option,-mtune=z15)

config TUNE_Z16
	bool "IBM z16"
	depends on $(cc-option,-mtune=z16)

config TUNE_Z17
	bool "IBM z17"
	depends on $(cc-option,-mtune=z17)

endchoice

config 64BIT
	def_bool y

config COMMAND_LINE_SIZE
	int "Maximum size of kernel command line"
	default 4096
	range 896 1048576
	help
	  This allows you to specify the maximum length of the kernel command
	  line.

config SMP
	def_bool y

config NR_CPUS
	int "Maximum number of CPUs (2-512)"
	range 2 512
	default "64"
	help
	  This allows you to specify the maximum number of CPUs which this
	  kernel will support. The maximum supported value is 512 and the
	  minimum value which makes sense is 2.

	  This is purely to save memory - each supported CPU adds
	  approximately sixteen kilobytes to the kernel image.

config HOTPLUG_CPU
	def_bool y

config NUMA
	bool "NUMA support"
	depends on SCHED_TOPOLOGY
	default n
	help
	  Enable NUMA support

	  This option adds NUMA support to the kernel.

config NODES_SHIFT
	int
	depends on NUMA
	default "1"

config SCHED_TOPOLOGY
	def_bool y
	prompt "Topology scheduler support"
	select ARCH_SUPPORTS_SCHED_SMT
	select ARCH_SUPPORTS_SCHED_MC
	select SCHED_SMT
	select SCHED_MC
	help
	  Topology scheduler support improves the CPU scheduler's decision
	  making when dealing with machines that have multi-threading,
	  multiple cores or multiple books.

config SCHED_TOPOLOGY_VERTICAL
	def_bool y
	bool "Use vertical CPU polarization by default"
	depends on SCHED_TOPOLOGY
	help
	  Use vertical CPU polarization by default if available.
	  The default CPU polarization is horizontal.

config HIPERDISPATCH_ON
	def_bool y
	bool "Use hiperdispatch on vertical polarization by default"
	depends on SCHED_TOPOLOGY
	depends on SYSCTL
	help
	  Hiperdispatch aims to improve the CPU scheduler's decision
	  making when using vertical polarization by adjusting CPU
	  capacities dynamically. Set this option to use hiperdispatch
	  on vertical polarization by default. This can be overwritten
	  by sysctl's s390.hiperdispatch attribute later on.

source "kernel/Kconfig.hz"

config CERT_STORE
	bool "Get user certificates via DIAG320"
	depends on KEYS
	select CRYPTO_LIB_SHA256
	help
	  Enable this option if you want to access user-provided secure boot
	  certificates via DIAG 0x320.

	  These certificates will be made available via the keyring named
	  'cert_store'.

config KERNEL_NOBP
	def_bool n
	prompt "Enable modified branch prediction for the kernel by default"
	help
	  If this option is selected the kernel will switch to a modified
	  branch prediction mode if the firmware interface is available.
	  The modified branch prediction mode improves the behaviour in
	  regard to speculative execution.

	  With the option enabled the kernel parameter "nobp=0" or "nospec"
	  can be used to run the kernel in the normal branch prediction mode.

	  With the option disabled the modified branch prediction mode is
	  enabled with the "nobp=1" kernel parameter.

	  If unsure, say N.

config EXPOLINE
	def_bool n
	depends on $(cc-option,-mindirect-branch=thunk)
	prompt "Avoid speculative indirect branches in the kernel"
	help
	  Compile the kernel with the expoline compiler options to guard
	  against kernel-to-user data leaks by avoiding speculative indirect
	  branches.
	  Requires a compiler with -mindirect-branch=thunk support for full
	  protection. The kernel may run slower.

	  If unsure, say N.

config EXPOLINE_EXTERN
	def_bool EXPOLINE && CC_IS_GCC && GCC_VERSION >= 110200 && \
		 $(success,$(srctree)/arch/s390/tools/gcc-thunk-extern.sh $(CC))
	help
	  Generate expolines as external functions if the compiler supports it.
	  This option is required for some tooling like kpatch, if expolines
	  are enabled. The kernel is compiled with
	  -mindirect-branch=thunk-extern, which requires a newer compiler.

choice
	prompt "Expoline default"
	depends on EXPOLINE
	default EXPOLINE_FULL

config EXPOLINE_OFF
	bool "spectre_v2=off"

config EXPOLINE_AUTO
	bool "spectre_v2=auto"

config EXPOLINE_FULL
	bool "spectre_v2=on"

endchoice

config RELOCATABLE
	def_bool y
	select ARCH_VMLINUX_NEEDS_RELOCS
	help
	  This builds a kernel image that retains relocation information
	  so it can be loaded at an arbitrary address.
	  The relocations make the kernel image about 15% larger (compressed
	  10%), but are discarded at runtime.
	  Note: this option exists only for documentation purposes, please do
	  not remove it.

config RANDOMIZE_BASE
	bool "Randomize the address of the kernel image (KASLR)"
	default y
	help
	  In support of Kernel Address Space Layout Randomization (KASLR),
	  this randomizes the address at which the kernel image is loaded,
	  as a security feature that deters exploit attempts relying on
	  knowledge of the location of kernel internals.

config RANDOMIZE_IDENTITY_BASE
	bool "Randomize the address of the identity mapping base"
	depends on RANDOMIZE_BASE
	default DEBUG_VM
	help
	  The identity mapping base address is pinned to zero by default.
	  Allow randomization of that base to expose otherwise missed
	  notion of physical and virtual addresses of data structures.
	  That does not have any impact on the base address at which the
	  kernel image is loaded.

	  If unsure, say N

config KERNEL_IMAGE_BASE
	hex "Kernel image base address"
	range 0x100000 0x1FFFFFE0000000 if !KASAN
	range 0x100000 0x1BFFFFE0000000 if KASAN
	default 0x3FFE0000000 if !KASAN
	default 0x7FFFE0000000 if KASAN
	help
	  This is the address at which the kernel image is loaded in case
	  Kernel Address Space Layout Randomization (KASLR) is disabled.

	  In case the Protected virtualization guest support is enabled the
	  Ultravisor imposes a virtual address limit. If the value of this
	  option leads to the kernel image exceeding the Ultravisor limit,
	  this option is ignored and the image is loaded below the limit.

	  If the value of this option leads to the kernel image overlapping
	  the virtual memory where other data structures are located, this
	  option is ignored and the image is loaded above the structures.

endmenu

source "drivers/cpuidle/Kconfig"

menu "Memory setup"

config ARCH_SPARSEMEM_ENABLE
	def_bool y
	select SPARSEMEM_VMEMMAP_ENABLE

config ARCH_SPARSEMEM_DEFAULT
	def_bool y

config ILLEGAL_POINTER_VALUE
	hex
	default 0xdead000000000000

config MAX_PHYSMEM_BITS
	int "Maximum size of supported physical memory in bits (42-53)"
	range 42 53
	default "46"
	help
	  This option specifies the maximum supported size of physical memory
	  in bits. Supported is any size between 2^42 (4TB) and 2^53 (8PB).
	  Increasing the number of bits also increases the kernel image size.
	  By default 46 bits (64TB) are supported.

endmenu

menu "I/O subsystem"

config QDIO
	def_tristate y
	prompt "QDIO support"
	help
	  This driver provides the Queued Direct I/O base support for
	  IBM System z.

	  To compile this driver as a module, choose M here: the
	  module will be called qdio.

	  If unsure, say Y.

if PCI

config PCI_NR_FUNCTIONS
	int "Maximum number of PCI functions (1-4096)"
	range 1 4096
	default "512"
	help
	  This allows you to specify the maximum number of PCI functions which
	  this kernel will support.

endif # PCI

config HAS_IOMEM
	def_bool PCI

config CHSC_SCH
	def_tristate m
	prompt "Support for CHSC subchannels"
	help
	  This driver allows usage of CHSC subchannels. A CHSC subchannel
	  is usually present on LPAR only.
	  The driver creates a device /dev/chsc, which may be used to
	  obtain I/O configuration information about the machine and
	  to issue asynchronous chsc commands (DANGEROUS).
	  You will usually only want to use this interface on a special
	  LPAR designated for system management.

	  To compile this driver as a module, choose M here: the
	  module will be called chsc_sch.

	  If unsure, say N.

config SCM_BUS
	def_bool y
	prompt "SCM bus driver"
	help
	  Bus driver for Storage Class Memory.

config EADM_SCH
	def_tristate m
	prompt "Support for EADM subchannels"
	depends on SCM_BUS
	help
	  This driver allows usage of EADM subchannels. EADM subchannels act
	  as a communication vehicle for SCM increments.

	  To compile this driver as a module, choose M here: the
	  module will be called eadm_sch.

config AP
	def_tristate y
	prompt "Support for Adjunct Processors (ap)"
	help
	  This driver allows usage to Adjunct Processor (AP) devices via
	  the ap bus, cards and queues. Supported Adjunct Processors are
	  the CryptoExpress Cards (CEX).

	  To compile this driver as a module, choose M here: the
	  module will be called ap.

	  If unsure, say Y (default).

config AP_DEBUG
	def_bool n
	prompt "Enable debug features for Adjunct Processor (ap) devices"
	depends on AP
	help
	  Say 'Y' here to enable some additional debug features for Adjunct
	  Processor (ap) devices.

	  There will be some more sysfs attributes displayed for ap queues.

	  Do not enable on production level kernel build.

	  If unsure, say N.

config VFIO_CCW
	def_tristate n
	prompt "Support for VFIO-CCW subchannels"
	depends on VFIO
	select VFIO_MDEV
	help
	  This driver allows usage of I/O subchannels via VFIO-CCW.

	  To compile this driver as a module, choose M here: the
	  module will be called vfio_ccw.

config VFIO_AP
	def_tristate n
	prompt "VFIO support for AP devices"
	depends on KVM
	depends on VFIO
	depends on AP
	select VFIO_MDEV
	help
	  This driver grants access to Adjunct Processor (AP) devices
	  via the VFIO mediated device interface.

	  To compile this driver as a module, choose M here: the module
	  will be called vfio_ap.

endmenu

config CCW
	def_bool y

config HAVE_PNETID
	tristate
	default (SMC || CCWGROUP)

menu "Virtualization"

config PFAULT
	def_bool y
	prompt "Pseudo page fault support"
	help
	  Select this option, if you want to use PFAULT pseudo page fault
	  handling under VM. If running native or in LPAR, this option
	  has no effect. If your VM does not support PFAULT, PAGEEX
	  pseudo page fault handling will be used.
	  Note that VM 4.2 supports PFAULT but has a bug in its
	  implementation that causes some problems.
	  Everybody who wants to run Linux under VM != VM4.2 should select
	  this option.

config CMM
	def_tristate n
	prompt "Cooperative memory management"
	help
	  Select this option, if you want to enable the kernel interface
	  to reduce the memory size of the system. This is accomplished
	  by allocating pages of memory and put them "on hold". This only
	  makes sense for a system running under VM where the unused pages
	  will be reused by VM for other guest systems. The interface
	  allows an external monitor to balance memory of many systems.
	  Everybody who wants to run Linux under VM should select this
	  option.

config CMM_IUCV
	def_bool y
	prompt "IUCV special message interface to cooperative memory management"
	depends on CMM && (SMSGIUCV=y || CMM=SMSGIUCV)
	help
	  Select this option to enable the special message interface to
	  the cooperative memory management.

config APPLDATA_BASE
	def_bool n
	prompt "Linux - VM Monitor Stream, base infrastructure"
	depends on SYSCTL
	help
	  This provides a kernel interface for creating and updating z/VM APPLDATA
	  monitor records. The monitor records are updated at certain time
	  intervals, once the timer is started.
	  Writing 1 or 0 to /proc/appldata/timer starts(1) or stops(0) the timer,
	  i.e. enables or disables monitoring on the Linux side.
	  A custom interval value (in seconds) can be written to
	  /proc/appldata/interval.

	  Defaults are 60 seconds interval and timer off.
	  The /proc entries can also be read from, showing the current settings.

config APPLDATA_MEM
	def_tristate m
	prompt "Monitor memory management statistics"
	depends on APPLDATA_BASE && VM_EVENT_COUNTERS
	help
	  This provides memory management related data to the Linux - VM Monitor
	  Stream, like paging/swapping rate, memory utilisation, etc.
	  Writing 1 or 0 to /proc/appldata/memory creates(1) or removes(0) a z/VM
	  APPLDATA monitor record, i.e. enables or disables monitoring this record
	  on the z/VM side.

	  Default is disabled.
	  The /proc entry can also be read from, showing the current settings.

	  This can also be compiled as a module, which will be called
	  appldata_mem.o.

config APPLDATA_OS
	def_tristate m
	prompt "Monitor OS statistics"
	depends on APPLDATA_BASE
	help
	  This provides OS related data to the Linux - VM Monitor Stream, like
	  CPU utilisation, etc.
	  Writing 1 or 0 to /proc/appldata/os creates(1) or removes(0) a z/VM
	  APPLDATA monitor record, i.e. enables or disables monitoring this record
	  on the z/VM side.

	  Default is disabled.
	  This can also be compiled as a module, which will be called
	  appldata_os.o.

config APPLDATA_NET_SUM
	def_tristate m
	prompt "Monitor overall network statistics"
	depends on APPLDATA_BASE && NET
	help
	  This provides network related data to the Linux - VM Monitor Stream,
	  currently there is only a total sum of network I/O statistics, no
	  per-interface data.
	  Writing 1 or 0 to /proc/appldata/net_sum creates(1) or removes(0) a z/VM
	  APPLDATA monitor record, i.e. enables or disables monitoring this record
	  on the z/VM side.

	  Default is disabled.
	  This can also be compiled as a module, which will be called
	  appldata_net_sum.o.

config S390_HYPFS
	def_bool y
	prompt "s390 hypervisor information"
	help
	  This provides several binary files at (debugfs)/s390_hypfs/ to
	  provide accounting information in an s390 hypervisor environment.

config S390_HYPFS_FS
	def_bool n
	prompt "s390 hypervisor file system support"
	select SYS_HYPERVISOR
	depends on S390_HYPFS
	help
	  This is a virtual file system intended to provide accounting
	  information in an s390 hypervisor environment. This file system
	  is deprecated and should not be used.

	  Say N if you are unsure.

source "arch/s390/kvm/Kconfig"

config S390_GUEST
	def_bool y
	prompt "s390 support for virtio devices"
	select TTY
	select VIRTUALIZATION
	select VIRTIO
	help
	  Enabling this option adds support for virtio based paravirtual device
	  drivers on s390.

	  Select this option if you want to run the kernel as a guest under
	  the KVM hypervisor.

endmenu

config S390_MODULES_SANITY_TEST_HELPERS
	def_bool n

menu "Selftests"

config S390_UNWIND_SELFTEST
	def_tristate KUNIT_ALL_TESTS
	depends on KUNIT
	prompt "Test unwind functions"
	help
	  This option enables s390 specific stack unwinder testing kernel
	  module. This option is not useful for distributions or general
	  kernels, but only for kernel developers working on architecture code.

	  Say N if you are unsure.

config S390_KPROBES_SANITY_TEST
	def_tristate KUNIT_ALL_TESTS
	prompt "Enable s390 specific kprobes tests"
	depends on KPROBES
	depends on KUNIT
	help
	  This option enables an s390 specific kprobes test module. This option
	  is not useful for distributions or general kernels, but only for kernel
	  developers working on architecture code.

	  Say N if you are unsure.

config S390_MODULES_SANITY_TEST
	def_tristate KUNIT_ALL_TESTS
	depends on KUNIT && m
	prompt "Enable s390 specific modules tests"
	select S390_MODULES_SANITY_TEST_HELPERS
	help
	  This option enables an s390 specific modules test. This option is
	  not useful for distributions or general kernels, but only for
	  kernel developers working on architecture code.

	  Say N if you are unsure.
endmenu