Commit 0ee3f739 authored by Heiko Carstens's avatar Heiko Carstens
Browse files

Merge branch 'fixes' into features



* fixes:
  s390/entry: save the caller of psw_idle
  s390/entry: avoid setting up backchain in ext|io handlers
  s390/setup: use memblock_free_late() to free old stack
  s390/irq: fix reading of ext_params2 field from lowcore
  s390/unwind: add machine check handler stack
  s390/cpcmd: fix inline assembly register clobbering
  MAINTAINERS: add backups for s390 vfio drivers
  s390/vdso: fix initializing and updating of vdso_data
  s390/vdso: fix tod_steering_delta type
  s390/vdso: copy tod_steering_delta value to vdso_data page

Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parents 8bc00c04 a994eddb
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -15634,8 +15634,8 @@ F: Documentation/s390/pci.rst
S390 VFIO AP DRIVER
M:	Tony Krowiak <akrowiak@linux.ibm.com>
M:	Pierre Morel <pmorel@linux.ibm.com>
M:	Halil Pasic <pasic@linux.ibm.com>
M:	Jason Herne <jjherne@linux.ibm.com>
L:	linux-s390@vger.kernel.org
S:	Supported
W:	http://www.ibm.com/developerworks/linux/linux390/
@@ -15647,6 +15647,7 @@ F: drivers/s390/crypto/vfio_ap_private.h
S390 VFIO-CCW DRIVER
M:	Cornelia Huck <cohuck@redhat.com>
M:	Eric Farman <farman@linux.ibm.com>
M:	Matthew Rosato <mjrosato@linux.ibm.com>
R:	Halil Pasic <pasic@linux.ibm.com>
L:	linux-s390@vger.kernel.org
L:	kvm@vger.kernel.org
@@ -15657,6 +15658,7 @@ F: include/uapi/linux/vfio_ccw.h
S390 VFIO-PCI DRIVER
M:	Matthew Rosato <mjrosato@linux.ibm.com>
M:	Eric Farman <farman@linux.ibm.com>
L:	linux-s390@vger.kernel.org
L:	kvm@vger.kernel.org
S:	Supported
+1 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ enum stack_type {
	STACK_TYPE_IRQ,
	STACK_TYPE_NODAT,
	STACK_TYPE_RESTART,
	STACK_TYPE_MCCK,
};

struct stack_info {
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
#include <vdso/datapage.h>

struct arch_vdso_data {
	__u64 tod_steering_delta;
	__s64 tod_steering_delta;
	__u64 tod_steering_end;
};

+4 −2
Original line number Diff line number Diff line
@@ -37,10 +37,12 @@ static int diag8_noresponse(int cmdlen)

static int diag8_response(int cmdlen, char *response, int *rlen)
{
	unsigned long _cmdlen = cmdlen | 0x40000000L;
	unsigned long _rlen = *rlen;
	register unsigned long reg2 asm ("2") = (addr_t) cpcmd_buf;
	register unsigned long reg3 asm ("3") = (addr_t) response;
	register unsigned long reg4 asm ("4") = cmdlen | 0x40000000L;
	register unsigned long reg5 asm ("5") = *rlen;
	register unsigned long reg4 asm ("4") = _cmdlen;
	register unsigned long reg5 asm ("5") = _rlen;

	asm volatile(
		"	diag	%2,%0,0x8\n"
+11 −1
Original line number Diff line number Diff line
@@ -79,6 +79,15 @@ static bool in_nodat_stack(unsigned long sp, struct stack_info *info)
	return in_stack(sp, info, STACK_TYPE_NODAT, top - THREAD_SIZE, top);
}

static bool in_mcck_stack(unsigned long sp, struct stack_info *info)
{
	unsigned long frame_size, top;

	frame_size = STACK_FRAME_OVERHEAD + sizeof(struct pt_regs);
	top = S390_lowcore.mcck_stack + frame_size;
	return in_stack(sp, info, STACK_TYPE_MCCK, top - THREAD_SIZE, top);
}

static bool in_restart_stack(unsigned long sp, struct stack_info *info)
{
	unsigned long frame_size, top;
@@ -108,7 +117,8 @@ int get_stack_info(unsigned long sp, struct task_struct *task,
	/* Check per-cpu stacks */
	if (!in_irq_stack(sp, info) &&
	    !in_nodat_stack(sp, info) &&
	    !in_restart_stack(sp, info))
	    !in_restart_stack(sp, info) &&
	    !in_mcck_stack(sp, info))
		goto unknown;

recursion_check:
Loading