mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 23:00:21 +00:00
- Allow s390 debug feature to handle finally more than 256 CPU numbers, instead
of truncating the most significant bits. - Improve THP splitting required by qemu processes by making use of walk_page_vma() instead of calling follow_page() for every single page within each vma. - Add missing ZCRYPT dependency to VFIO_AP to fix potential compile problems. - Remove not required select CLOCKSOURCE_VALIDATE_LAST_CYCLE again. - Set node distance to LOCAL_DISTANCE instead of 0, since e.g. libnuma translates a node distance of 0 to "no NUMA support available". - Couple of other minor fixes and improvements. -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEECMNfWEw3SLnmiLkZIg7DeRspbsIFAl81bRwACgkQIg7DeRsp bsIT3g/7BSIfbI852VTn6hWw+LfdoBLVqXDFcg9xQhUqccbPcG8LG/BYlmuvIn1Z X9XujP76xAX7LKnt9x0Z9znwpgGIj0oURmcBxzGBTk+yLBf7YXCOLu9w4MV1AD57 WRoGG7pPFZy5rMDM29frqBNQBWc7g+/wGoPVqiffzqgj2DcS4Ka8TSTTboMIH7th mLK5xaU504FdDGwTgNv6Q/Pt3+YBZ6P/1cIuifzYnfjJ2CsjSBLjS9IFP6/w/c1Q VQ2TfajuRbAgkkY01o15tKrlqwPzzWYhnh9ix1LkL0WT6VNql+fcwN665HdsSDFu Ctu6Sk3BZmhN1GONK4gIx5didRxBi7neAfUMenSasPT8uMGJcR4EMoNUr70sXNA/ B1naRayfCH0dE3SVZflAeFJRSh1LnikY14uj65Gg/Wtla5N+90zuHEGDttIBNzrr FDzc+39GWN1wJEl7FzSIm+YRC88C/So/BNUQhmlVYNY0sbqyAszUGBOAa+5VS2WQ tkWzWPjJ6QA3e3t/dpnc0dvlCKLTJG3o7bdtilb71QNybGiAniP8+79hCNa5nPT3 iLRhmLX27cQF54IUw1whVA5mkfzHSzwAlB+/laPi8MWFQXTRLTD1XzhmjrIyR57Y Q6wM+lxC4qreDz7yGX+eQk7OEs8j8IKTF14HZxkp/DEL09Vbmbs= =E0hf -----END PGP SIGNATURE----- Merge tag 's390-5.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull more s390 updates from Heiko Carstens: - Allow s390 debug feature to handle finally more than 256 CPU numbers, instead of truncating the most significant bits. - Improve THP splitting required by qemu processes by making use of walk_page_vma() instead of calling follow_page() for every single page within each vma. - Add missing ZCRYPT dependency to VFIO_AP to fix potential compile problems. - Remove not required select CLOCKSOURCE_VALIDATE_LAST_CYCLE again. - Set node distance to LOCAL_DISTANCE instead of 0, since e.g. libnuma translates a node distance of 0 to "no NUMA support available". - Couple of other minor fixes and improvements. * tag 's390-5.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/numa: move code to arch/s390/kernel s390/time: remove select CLOCKSOURCE_VALIDATE_LAST_CYCLE again s390/debug: debug feature version 3 s390/Kconfig: add missing ZCRYPT dependency to VFIO_AP s390/numa: set node distance to LOCAL_DISTANCE s390/pkey: remove redundant variable initialization s390/test_unwind: fix possible memleak in test_unwind() s390/gmap: improve THP splitting s390/atomic: circumvent gcc 10 build regression
This commit is contained in:
commit
990f227371
@ -7,5 +7,4 @@ obj-$(CONFIG_S390_HYPFS_FS) += hypfs/
|
||||
obj-$(CONFIG_APPLDATA_BASE) += appldata/
|
||||
obj-y += net/
|
||||
obj-$(CONFIG_PCI) += pci/
|
||||
obj-$(CONFIG_NUMA) += numa/
|
||||
obj-$(CONFIG_ARCH_HAS_KEXEC_PURGATORY) += purgatory/
|
||||
|
@ -126,7 +126,6 @@ config S390
|
||||
select HAVE_ARCH_JUMP_LABEL_RELATIVE
|
||||
select HAVE_ARCH_KASAN
|
||||
select HAVE_ARCH_KASAN_VMALLOC
|
||||
select CLOCKSOURCE_VALIDATE_LAST_CYCLE
|
||||
select CPU_NO_EFFICIENT_FFS if !HAVE_MARCH_Z9_109_FEATURES
|
||||
select HAVE_ARCH_SECCOMP_FILTER
|
||||
select HAVE_ARCH_SOFT_DIRTY
|
||||
@ -766,6 +765,7 @@ config VFIO_AP
|
||||
def_tristate n
|
||||
prompt "VFIO support for AP devices"
|
||||
depends on S390_AP_IOMMU && VFIO_MDEV_DEVICE && KVM
|
||||
depends on ZCRYPT
|
||||
help
|
||||
This driver grants access to Adjunct Processor (AP) devices
|
||||
via the VFIO mediated device interface.
|
||||
|
@ -45,7 +45,11 @@ static inline int atomic_fetch_add(int i, atomic_t *v)
|
||||
static inline void atomic_add(int i, atomic_t *v)
|
||||
{
|
||||
#ifdef CONFIG_HAVE_MARCH_Z196_FEATURES
|
||||
if (__builtin_constant_p(i) && (i > -129) && (i < 128)) {
|
||||
/*
|
||||
* Order of conditions is important to circumvent gcc 10 bug:
|
||||
* https://gcc.gnu.org/pipermail/gcc-patches/2020-July/549318.html
|
||||
*/
|
||||
if ((i > -129) && (i < 128) && __builtin_constant_p(i)) {
|
||||
__atomic_add_const(i, &v->counter);
|
||||
return;
|
||||
}
|
||||
@ -112,7 +116,11 @@ static inline s64 atomic64_fetch_add(s64 i, atomic64_t *v)
|
||||
static inline void atomic64_add(s64 i, atomic64_t *v)
|
||||
{
|
||||
#ifdef CONFIG_HAVE_MARCH_Z196_FEATURES
|
||||
if (__builtin_constant_p(i) && (i > -129) && (i < 128)) {
|
||||
/*
|
||||
* Order of conditions is important to circumvent gcc 10 bug:
|
||||
* https://gcc.gnu.org/pipermail/gcc-patches/2020-July/549318.html
|
||||
*/
|
||||
if ((i > -129) && (i < 128) && __builtin_constant_p(i)) {
|
||||
__atomic64_add_const(i, (long *)&v->counter);
|
||||
return;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* S/390 debug facility
|
||||
*
|
||||
* Copyright IBM Corp. 1999, 2000
|
||||
* Copyright IBM Corp. 1999, 2020
|
||||
*/
|
||||
#ifndef DEBUG_H
|
||||
#define DEBUG_H
|
||||
@ -26,19 +26,14 @@
|
||||
#define DEBUG_DATA(entry) (char *)(entry + 1) /* data is stored behind */
|
||||
/* the entry information */
|
||||
|
||||
#define __DEBUG_FEATURE_VERSION 2 /* version of debug feature */
|
||||
#define __DEBUG_FEATURE_VERSION 3 /* version of debug feature */
|
||||
|
||||
struct __debug_entry {
|
||||
union {
|
||||
struct {
|
||||
unsigned long clock : 52;
|
||||
unsigned long exception : 1;
|
||||
unsigned long level : 3;
|
||||
unsigned long cpuid : 8;
|
||||
} fields;
|
||||
unsigned long stck;
|
||||
} id;
|
||||
unsigned long clock : 60;
|
||||
unsigned long exception : 1;
|
||||
unsigned long level : 3;
|
||||
void *caller;
|
||||
unsigned short cpu;
|
||||
} __packed;
|
||||
|
||||
typedef struct __debug_entry debug_entry_t;
|
||||
|
@ -86,12 +86,6 @@ static inline const struct cpumask *cpumask_of_node(int node)
|
||||
|
||||
#define pcibus_to_node(bus) __pcibus_to_node(bus)
|
||||
|
||||
#define node_distance(a, b) __node_distance(a, b)
|
||||
static inline int __node_distance(int a, int b)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* !CONFIG_NUMA */
|
||||
|
||||
#define numa_node_id numa_node_id
|
||||
|
@ -49,6 +49,7 @@ CFLAGS_REMOVE_nospec-branch.o += $(CC_FLAGS_EXPOLINE)
|
||||
|
||||
obj-$(CONFIG_MODULES) += module.o
|
||||
obj-$(CONFIG_SCHED_TOPOLOGY) += topology.o
|
||||
obj-$(CONFIG_NUMA) += numa.o
|
||||
obj-$(CONFIG_AUDIT) += audit.o
|
||||
compat-obj-$(CONFIG_AUDIT) += compat_audit.o
|
||||
obj-$(CONFIG_COMPAT) += compat_linux.o compat_signal.o
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* S/390 debug facility
|
||||
*
|
||||
* Copyright IBM Corp. 1999, 2012
|
||||
* Copyright IBM Corp. 1999, 2020
|
||||
*
|
||||
* Author(s): Michael Holzheu (holzheu@de.ibm.com),
|
||||
* Holger Smolinski (Holger.Smolinski@de.ibm.com)
|
||||
@ -433,7 +433,7 @@ static int debug_format_entry(file_private_info_t *p_info)
|
||||
act_entry = (debug_entry_t *) ((char *)id_snap->areas[p_info->act_area]
|
||||
[p_info->act_page] + p_info->act_entry);
|
||||
|
||||
if (act_entry->id.stck == 0LL)
|
||||
if (act_entry->clock == 0LL)
|
||||
goto out; /* empty entry */
|
||||
if (view->header_proc)
|
||||
len += view->header_proc(id_snap, view, p_info->act_area,
|
||||
@ -829,12 +829,17 @@ static inline debug_entry_t *get_active_entry(debug_info_t *id)
|
||||
static inline void debug_finish_entry(debug_info_t *id, debug_entry_t *active,
|
||||
int level, int exception)
|
||||
{
|
||||
active->id.stck = get_tod_clock_fast() -
|
||||
*(unsigned long long *) &tod_clock_base[1];
|
||||
active->id.fields.cpuid = smp_processor_id();
|
||||
unsigned char clk[STORE_CLOCK_EXT_SIZE];
|
||||
unsigned long timestamp;
|
||||
|
||||
get_tod_clock_ext(clk);
|
||||
timestamp = *(unsigned long *) &clk[0] >> 4;
|
||||
timestamp -= TOD_UNIX_EPOCH >> 12;
|
||||
active->clock = timestamp;
|
||||
active->cpu = smp_processor_id();
|
||||
active->caller = __builtin_return_address(0);
|
||||
active->id.fields.exception = exception;
|
||||
active->id.fields.level = level;
|
||||
active->exception = exception;
|
||||
active->level = level;
|
||||
proceed_active_entry(id);
|
||||
if (exception)
|
||||
proceed_active_area(id);
|
||||
@ -1398,25 +1403,24 @@ static int debug_hex_ascii_format_fn(debug_info_t *id, struct debug_view *view,
|
||||
int debug_dflt_header_fn(debug_info_t *id, struct debug_view *view,
|
||||
int area, debug_entry_t *entry, char *out_buf)
|
||||
{
|
||||
unsigned long base, sec, usec;
|
||||
unsigned long sec, usec;
|
||||
unsigned long caller;
|
||||
unsigned int level;
|
||||
char *except_str;
|
||||
int rc = 0;
|
||||
|
||||
level = entry->id.fields.level;
|
||||
base = (*(unsigned long *) &tod_clock_base[0]) >> 4;
|
||||
sec = (entry->id.stck >> 12) + base - (TOD_UNIX_EPOCH >> 12);
|
||||
level = entry->level;
|
||||
sec = entry->clock;
|
||||
usec = do_div(sec, USEC_PER_SEC);
|
||||
|
||||
if (entry->id.fields.exception)
|
||||
if (entry->exception)
|
||||
except_str = "*";
|
||||
else
|
||||
except_str = "-";
|
||||
caller = (unsigned long) entry->caller;
|
||||
rc += sprintf(out_buf, "%02i %011ld:%06lu %1u %1s %02i %pK ",
|
||||
rc += sprintf(out_buf, "%02i %011ld:%06lu %1u %1s %04u %pK ",
|
||||
area, sec, usec, level, except_str,
|
||||
entry->id.fields.cpuid, (void *)caller);
|
||||
entry->cpu, (void *)caller);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_dflt_header_fn);
|
||||
|
@ -64,6 +64,7 @@ static noinline int test_unwind(struct task_struct *task, struct pt_regs *regs,
|
||||
break;
|
||||
if (state.reliable && !addr) {
|
||||
pr_err("unwind state reliable but addr is 0\n");
|
||||
kfree(bt);
|
||||
return -EINVAL;
|
||||
}
|
||||
sprint_symbol(sym, addr);
|
||||
|
@ -2485,23 +2485,36 @@ void gmap_sync_dirty_log_pmd(struct gmap *gmap, unsigned long bitmap[4],
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gmap_sync_dirty_log_pmd);
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
static int thp_split_walk_pmd_entry(pmd_t *pmd, unsigned long addr,
|
||||
unsigned long end, struct mm_walk *walk)
|
||||
{
|
||||
struct vm_area_struct *vma = walk->vma;
|
||||
|
||||
split_huge_pmd(vma, pmd, addr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct mm_walk_ops thp_split_walk_ops = {
|
||||
.pmd_entry = thp_split_walk_pmd_entry,
|
||||
};
|
||||
|
||||
static inline void thp_split_mm(struct mm_struct *mm)
|
||||
{
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
struct vm_area_struct *vma;
|
||||
unsigned long addr;
|
||||
|
||||
for (vma = mm->mmap; vma != NULL; vma = vma->vm_next) {
|
||||
for (addr = vma->vm_start;
|
||||
addr < vma->vm_end;
|
||||
addr += PAGE_SIZE)
|
||||
follow_page(vma, addr, FOLL_SPLIT);
|
||||
vma->vm_flags &= ~VM_HUGEPAGE;
|
||||
vma->vm_flags |= VM_NOHUGEPAGE;
|
||||
walk_page_vma(vma, &thp_split_walk_ops, NULL);
|
||||
}
|
||||
mm->def_flags |= VM_NOHUGEPAGE;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
static inline void thp_split_mm(struct mm_struct *mm)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
||||
|
||||
/*
|
||||
* Remove all empty zero pages from the mapping for lazy refaulting
|
||||
|
@ -1,2 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
obj-y += numa.o
|
@ -818,7 +818,7 @@ static int pkey_keyblob2pkey2(const struct pkey_apqn *apqns, size_t nr_apqns,
|
||||
static int pkey_apqns4key(const u8 *key, size_t keylen, u32 flags,
|
||||
struct pkey_apqn *apqns, size_t *nr_apqns)
|
||||
{
|
||||
int rc = EINVAL;
|
||||
int rc;
|
||||
u32 _nr_apqns, *_apqns = NULL;
|
||||
struct keytoken_header *hdr = (struct keytoken_header *)key;
|
||||
|
||||
@ -886,7 +886,7 @@ static int pkey_apqns4keytype(enum pkey_key_type ktype,
|
||||
u8 cur_mkvp[32], u8 alt_mkvp[32], u32 flags,
|
||||
struct pkey_apqn *apqns, size_t *nr_apqns)
|
||||
{
|
||||
int rc = -EINVAL;
|
||||
int rc;
|
||||
u32 _nr_apqns, *_apqns = NULL;
|
||||
|
||||
if (ktype == PKEY_TYPE_CCA_DATA || ktype == PKEY_TYPE_CCA_CIPHER) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user