Pull s390 updates from Heiko Carstens: - Add support for function error injection. - Add support for custom exception handlers, as required by BPF_PROBE_MEM. - Add support for BPF_PROBE_MEM. - Add trace events for idle enter / exit for the s390 specific idle implementation. - Remove unused zcore memmmap device. - Remove unused "raw view" from s390 debug feature. - AP bus + zcrypt device driver code refactoring. - Provide cex4 cca sysfs attributes for cex3 for zcrypt device driver. - Expose only minimal interface to walk physmem for mm/memblock. This is a common code change and it has been agreed on with Mike Rapoport and Andrew Morton that this can go upstream via the s390 tree. - Rework of the s390 vmem/vmmemap code to allow for future memory hot remove. - Get rid of FORCE_MAX_ZONEORDER to finally allow for order-10 allocations again, instead of only order-8 allocations. - Various small improvements and fixes. * tag 's390-5.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (48 commits) s390/vmemmap: coding style updates s390/vmemmap: avoid memset(PAGE_UNUSED) when adding consecutive sections s390/vmemmap: remember unused sub-pmd ranges s390/vmemmap: fallback to PTEs if mapping large PMD fails s390/vmem: cleanup empty page tables s390/vmemmap: take the vmem_mutex when populating/freeing s390/vmemmap: cleanup when vmemmap_populate() fails s390/vmemmap: extend modify_pagetable() to handle vmemmap s390/vmem: consolidate vmem_add_range() and vmem_remove_range() s390/vmem: rename vmem_add_mem() to vmem_add_range() s390: enable HAVE_FUNCTION_ERROR_INJECTION s390/pci: clarify comment in s390_mmio_read/write s390/time: improve comparison for tod steering s390/time: select CLOCKSOURCE_VALIDATE_LAST_CYCLE s390/time: use CLOCKSOURCE_MASK s390/bpf: implement BPF_PROBE_MEM s390/kernel: expand exception table logic to allow new handling options s390/kernel: unify EX_TABLE* implementations s390/mm: allow order 10 allocations s390/mm: avoid trimming to MAX_ORDER ...
Showing the changes to include/linux (1 of 55 files). Show all
Unified · Split
| @@ -77,16 +77,12 @@ struct memblock_type { · 76 unmodified lines | |||
| 77 | * @current_limit: physical address of the current allocation limit | 77 | * @current_limit: physical address of the current allocation limit |
| 78 | * @memory: usable memory regions | 78 | * @memory: usable memory regions |
| 79 | * @reserved: reserved memory regions | 79 | * @reserved: reserved memory regions |
| 80 | * @physmem: all physical memory | ||
| 81 | */ | 80 | */ |
| 82 | struct memblock { | 81 | struct memblock { |
| 83 | bool bottom_up; /* is bottom up direction? */ | 82 | bool bottom_up; /* is bottom up direction? */ |
| 84 | phys_addr_t current_limit; | 83 | phys_addr_t current_limit; |
| 85 | struct memblock_type memory; | 84 | struct memblock_type memory; |
| 86 | struct memblock_type reserved; | 85 | struct memblock_type reserved; |
| 87 | #ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP | ||
| 88 | struct memblock_type physmem; | ||
| 89 | #endif | ||
| 90 | }; | 86 | }; |
| 91 | 87 | ||
| 92 | extern struct memblock memblock; | 88 | extern struct memblock memblock; |
| @@ -145,6 +141,30 @@ void __next_reserved_mem_region(u64 *idx, phys_addr_t *out_start, · 52 unmodified lines | |||
| 145 | 141 | ||
| 146 | void __memblock_free_late(phys_addr_t base, phys_addr_t size); | 142 | void __memblock_free_late(phys_addr_t base, phys_addr_t size); |
| 147 | 143 | ||
| 144 | #ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP | ||
| 145 | static inline void __next_physmem_range(u64 *idx, struct memblock_type *type, | ||
| 146 | phys_addr_t *out_start, | ||
| 147 | phys_addr_t *out_end) | ||
| 148 | { | ||
| 149 | extern struct memblock_type physmem; | ||
| 150 | |||
| 151 | __next_mem_range(idx, NUMA_NO_NODE, MEMBLOCK_NONE, &physmem, type, | ||
| 152 | out_start, out_end, NULL); | ||
| 153 | } | ||
| 154 | |||
| 155 | /** | ||
| 156 | * for_each_physmem_range - iterate through physmem areas not included in type. | ||
| 157 | * @i: u64 used as loop variable | ||
| 158 | * @type: ptr to memblock_type which excludes from the iteration, can be %NULL | ||
| 159 | * @p_start: ptr to phys_addr_t for start address of the range, can be %NULL | ||
| 160 | * @p_end: ptr to phys_addr_t for end address of the range, can be %NULL | ||
| 161 | */ | ||
| 162 | #define for_each_physmem_range(i, type, p_start, p_end) \ | ||
| 163 | for (i = 0, __next_physmem_range(&i, type, p_start, p_end); \ | ||
| 164 | i != (u64)ULLONG_MAX; \ | ||
| 165 | __next_physmem_range(&i, type, p_start, p_end)) | ||
| 166 | #endif /* CONFIG_HAVE_MEMBLOCK_PHYS_MAP */ | ||
| 167 | |||
| 148 | /** | 168 | /** |
| 149 | * for_each_mem_range - iterate through memblock areas from type_a and not | 169 | * for_each_mem_range - iterate through memblock areas from type_a and not |
| 150 | * included in type_b. Or just type_a if type_b is NULL. | 170 | * included in type_b. Or just type_a if type_b is NULL. |