Commit bec07716 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull more s390 updates from Alexander Gordeev:

 - Support MMIO read/write tracing

 - Enable THP swapping and THP migration

 - Unmask SLCF bit ("stateless command filtering") introduced with CEX8
   cards, so that user space applications like lszcrypt could evaluate
   and list this feature

 - Fix the value of high_memory variable, so it considers possible
   tailing offline memory blocks

 - Make vmem_pte_alloc() consistent and always allocate memory of
   PAGE_SIZE for page tables. This ensures a page table occupies the
   whole page, as the rest of the code assumes

 - Fix kernel image end address in the decompressor debug output

 - Fix a typo in debug_sprintf_format_fn() comment

* tag 's390-6.17-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390/debug: Fix typo in debug_sprintf_format_fn() comment
  s390/boot: Fix startup debugging log
  s390/mm: Allocate page table with PAGE_SIZE granularity
  s390/mm: Enable THP_SWAP and THP_MIGRATION
  s390: Support CONFIG_TRACE_MMIO_ACCESS
  s390/mm: Set high_memory at the end of the identity mapping
  s390/ap: Unmask SLCF bit in card and queue ap functions sysfs
parents b1e06c19 2baf16f3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ config S390
	select ARCH_ENABLE_MEMORY_HOTPLUG if SPARSEMEM
	select ARCH_ENABLE_MEMORY_HOTREMOVE
	select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
	select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
	select ARCH_HAS_CPU_FINALIZE_INIT
	select ARCH_HAS_CURRENT_STACK_POINTER
	select ARCH_HAS_DEBUG_VIRTUAL
@@ -102,6 +103,7 @@ config S390
	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
@@ -150,6 +152,7 @@ config S390
	select ARCH_WANT_KERNEL_PMD_MKWRITE
	select ARCH_WANT_LD_ORPHAN_WARN
	select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
	select ARCH_WANTS_THP_SWAP
	select BUILDTIME_TABLE_SORT
	select CLONE_BACKWARDS2
	select DCACHE_WORD_ACCESS if !KMSAN
+1 −1
Original line number Diff line number Diff line
@@ -384,7 +384,7 @@ static unsigned long setup_kernel_memory_layout(unsigned long kernel_size)
		kernel_start = round_down(kernel_end - kernel_size, THREAD_SIZE);
		boot_debug("Randomization range: 0x%016lx-0x%016lx\n", vmax - kaslr_len, vmax);
		boot_debug("kernel image:        0x%016lx-0x%016lx (kaslr)\n", kernel_start,
			   kernel_size + kernel_size);
			   kernel_start + kernel_size);
	} else if (vmax < __NO_KASLR_END_KERNEL || vsize > __NO_KASLR_END_KERNEL) {
		kernel_start = round_down(vmax - kernel_size, THREAD_SIZE);
		boot_debug("kernel image:        0x%016lx-0x%016lx (constrained)\n", kernel_start,
+1 −1
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ struct ap_tapq_hwinfo {
			unsigned int accel :  1; /* A */
			unsigned int ep11  :  1; /* X */
			unsigned int apxa  :  1; /* APXA */
			unsigned int	   :  1;
			unsigned int slcf  :  1; /* Cmd filtering avail. */
			unsigned int class :  8;
			unsigned int bs	   :  2; /* SE bind/assoc */
			unsigned int	   : 14;
+45 −0
Original line number Diff line number Diff line
@@ -963,6 +963,12 @@ static inline pmd_t pmd_clear_soft_dirty(pmd_t pmd)
	return clear_pmd_bit(pmd, __pgprot(_SEGMENT_ENTRY_SOFT_DIRTY));
}

#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
#define pmd_swp_soft_dirty(pmd)		pmd_soft_dirty(pmd)
#define pmd_swp_mksoft_dirty(pmd)	pmd_mksoft_dirty(pmd)
#define pmd_swp_clear_soft_dirty(pmd)	pmd_clear_soft_dirty(pmd)
#endif

/*
 * query functions pte_write/pte_dirty/pte_young only work if
 * pte_present() is true. Undefined behaviour if not..
@@ -1979,6 +1985,45 @@ static inline unsigned long __swp_offset_rste(swp_entry_t entry)

#define __rste_to_swp_entry(rste)	((swp_entry_t) { rste })

/*
 * s390 has different layout for PTE and region / segment table entries (RSTE).
 * This is also true for swap entries, and their swap type and offset encoding.
 * For hugetlbfs PTE_MARKER support, s390 has internal __swp_type_rste() and
 * __swp_offset_rste() helpers to correctly handle RSTE swap entries.
 *
 * But common swap code does not know about this difference, and only uses
 * __swp_type(), __swp_offset() and __swp_entry() helpers for conversion between
 * arch-dependent and arch-independent representation of swp_entry_t for all
 * pagetable levels. On s390, those helpers only work for PTE swap entries.
 *
 * Therefore, implement __pmd_to_swp_entry() to build a fake PTE swap entry
 * and return the arch-dependent representation of that. Correspondingly,
 * implement __swp_entry_to_pmd() to convert that into a proper PMD swap
 * entry again. With this, the arch-dependent swp_entry_t representation will
 * always look like a PTE swap entry in common code.
 *
 * This is somewhat similar to fake PTEs in hugetlbfs code for s390, but only
 * requires conversion of the swap type and offset, and not all the possible
 * PTE bits.
 */
static inline swp_entry_t __pmd_to_swp_entry(pmd_t pmd)
{
	swp_entry_t arch_entry;
	pte_t pte;

	arch_entry = __rste_to_swp_entry(pmd_val(pmd));
	pte = mk_swap_pte(__swp_type_rste(arch_entry), __swp_offset_rste(arch_entry));
	return __pte_to_swp_entry(pte);
}

static inline pmd_t __swp_entry_to_pmd(swp_entry_t arch_entry)
{
	pmd_t pmd;

	pmd = __pmd(mk_swap_rste(__swp_type(arch_entry), __swp_offset(arch_entry)));
	return pmd;
}

extern int vmem_add_mapping(unsigned long start, unsigned long size);
extern void vmem_remove_mapping(unsigned long start, unsigned long size);
extern int __vmem_map_4k_page(unsigned long addr, unsigned long phys, pgprot_t prot, bool alloc);
+1 −1
Original line number Diff line number Diff line
@@ -1677,7 +1677,7 @@ EXPORT_SYMBOL(debug_dflt_header_fn);

/*
 * prints debug data sprintf-formatted:
 * debug_sprinf_event/exception calls must be used together with this view
 * debug_sprintf_event/exception calls must be used together with this view
 */

#define DEBUG_SPRINTF_MAX_ARGS 10
Loading