was a pretty active cycle for KVM.  Changes include:
 
 - a lot of s390 changes: optimizations, support for migration,
   GDB support and more
 
 - ARM changes are pretty small: support for the PSCI 0.2 hypercall
   interface on both the guest and the host (the latter acked by Catalin)
 
 - initial POWER8 and little-endian host support
 
 - support for running u-boot on embedded POWER targets
 
 - pretty large changes to MIPS too, completing the userspace interface
   and improving the handling of virtualized timer hardware
 
 - for x86, a larger set of changes is scheduled for 3.17.  Still,
   we have a few emulator bugfixes and support for running nested
   fully-virtualized Xen guests (para-virtualized Xen guests have
   always worked).  And some optimizations too.
 
 The only missing architecture here is ia64.  It's not a coincidence
 that support for KVM on ia64 is scheduled for removal in 3.17.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.22 (GNU/Linux)
 
 iQIcBAABAgAGBQJTjtlBAAoJEBvWZb6bTYbyMOUP/2NAePghE3IjG99ikHFdn+BX
 BfrURsuR6GD0AhYQnBidBmpFbAmN/LwSJxv/M7sV7OBRWLu3qbt69DrPTU2e/FK1
 j9q25peu8jRyHzJ1q9rBroo74nD9lQYuVr3uXNxxcg0DRnw14JHGlM3y8LDEknO8
 W+gpWTeAQ+2AuOX98MpRbCRMuzziCSv5bP5FhBVnsWHiZfvMbcUrbeJt+zYSiDAZ
 0tHm/5dFKzfj/vVrrnjD4EZcRr688Bs5rztG96hY6aoVJryjZGLtLp92wCWkRRmH
 CCvZwd245NmNthuKHzcs27/duSWfU0uOlu7AMrD44QYhzeDGyB/2nbCxbGqLLoBA
 nnOviXH4cC65/CnisZ79zfo979HbZcX+Lzg747EjBgCSxJmLlwgiG8yXtDvk5otB
 TH6GUeGDiEEPj//JD3XtgSz0sF2NvjREWRyemjDMvhz6JC/bLytXKb3sn+NXSj8m
 ujzF9eQoa4qKDcBL4IQYGTJ4z5nY3Pd68dHFIPHB7n82OxFLSQUBKxXw8/1fb5og
 VVb8PL4GOcmakQlAKtTMlFPmuy4bbL2r/2iV5xJiOZKmXIu8Hs1JezBE3SFAltbl
 3cAGwSM9/dDkKxUbTFblyOE9bkKbg4WYmq0LkdzsPEomb3IZWntOT25rYnX+LrBz
 bAknaZpPiOrW11Et1htY
 =j5Od
 -----END PGP SIGNATURE-----
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm into next
Pull KVM updates from Paolo Bonzini:
 "At over 200 commits, covering almost all supported architectures, this
  was a pretty active cycle for KVM.  Changes include:
   - a lot of s390 changes: optimizations, support for migration, GDB
     support and more
   - ARM changes are pretty small: support for the PSCI 0.2 hypercall
     interface on both the guest and the host (the latter acked by
     Catalin)
   - initial POWER8 and little-endian host support
   - support for running u-boot on embedded POWER targets
   - pretty large changes to MIPS too, completing the userspace
     interface and improving the handling of virtualized timer hardware
   - for x86, a larger set of changes is scheduled for 3.17.  Still, we
     have a few emulator bugfixes and support for running nested
     fully-virtualized Xen guests (para-virtualized Xen guests have
     always worked).  And some optimizations too.
  The only missing architecture here is ia64.  It's not a coincidence
  that support for KVM on ia64 is scheduled for removal in 3.17"
* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (203 commits)
  KVM: add missing cleanup_srcu_struct
  KVM: PPC: Book3S PR: Rework SLB switching code
  KVM: PPC: Book3S PR: Use SLB entry 0
  KVM: PPC: Book3S HV: Fix machine check delivery to guest
  KVM: PPC: Book3S HV: Work around POWER8 performance monitor bugs
  KVM: PPC: Book3S HV: Make sure we don't miss dirty pages
  KVM: PPC: Book3S HV: Fix dirty map for hugepages
  KVM: PPC: Book3S HV: Put huge-page HPTEs in rmap chain for base address
  KVM: PPC: Book3S HV: Fix check for running inside guest in global_invalidates()
  KVM: PPC: Book3S: Move KVM_REG_PPC_WORT to an unused register number
  KVM: PPC: Book3S: Add ONE_REG register names that were missed
  KVM: PPC: Add CAP to indicate hcall fixes
  KVM: PPC: MPIC: Reset IRQ source private members
  KVM: PPC: Graciously fail broken LE hypercalls
  PPC: ePAPR: Fix hypercall on LE guest
  KVM: PPC: BOOK3S: Remove open coded make_dsisr in alignment handler
  KVM: PPC: BOOK3S: Always use the saved DAR value
  PPC: KVM: Make NX bit available with magic page
  KVM: PPC: Disable NX for old magic page using guests
  KVM: PPC: BOOK3S: HV: Add mixed page-size support for guest
  ...
		
	
			
		
			
				
	
	
		
			175 lines
		
	
	
	
		
			4.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
	
		
			4.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 *  S390 version
 | 
						|
 *    Copyright IBM Corp. 1999, 2000
 | 
						|
 *    Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
 | 
						|
 */
 | 
						|
#ifndef _S390_PTRACE_H
 | 
						|
#define _S390_PTRACE_H
 | 
						|
 | 
						|
#include <uapi/asm/ptrace.h>
 | 
						|
 | 
						|
#define PIF_SYSCALL		0	/* inside a system call */
 | 
						|
#define PIF_PER_TRAP		1	/* deliver sigtrap on return to user */
 | 
						|
 | 
						|
#define _PIF_SYSCALL		(1<<PIF_SYSCALL)
 | 
						|
#define _PIF_PER_TRAP		(1<<PIF_PER_TRAP)
 | 
						|
 | 
						|
#ifndef __ASSEMBLY__
 | 
						|
 | 
						|
#define PSW_KERNEL_BITS	(PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_ASC_HOME | \
 | 
						|
			 PSW_MASK_EA | PSW_MASK_BA)
 | 
						|
#define PSW_USER_BITS	(PSW_MASK_DAT | PSW_MASK_IO | PSW_MASK_EXT | \
 | 
						|
			 PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_MASK_MCHECK | \
 | 
						|
			 PSW_MASK_PSTATE | PSW_ASC_PRIMARY)
 | 
						|
 | 
						|
struct psw_bits {
 | 
						|
	unsigned long long	: 1;
 | 
						|
	unsigned long long r	: 1; /* PER-Mask */
 | 
						|
	unsigned long long	: 3;
 | 
						|
	unsigned long long t	: 1; /* DAT Mode */
 | 
						|
	unsigned long long i	: 1; /* Input/Output Mask */
 | 
						|
	unsigned long long e	: 1; /* External Mask */
 | 
						|
	unsigned long long key	: 4; /* PSW Key */
 | 
						|
	unsigned long long	: 1;
 | 
						|
	unsigned long long m	: 1; /* Machine-Check Mask */
 | 
						|
	unsigned long long w	: 1; /* Wait State */
 | 
						|
	unsigned long long p	: 1; /* Problem State */
 | 
						|
	unsigned long long as	: 2; /* Address Space Control */
 | 
						|
	unsigned long long cc	: 2; /* Condition Code */
 | 
						|
	unsigned long long pm	: 4; /* Program Mask */
 | 
						|
	unsigned long long ri	: 1; /* Runtime Instrumentation */
 | 
						|
	unsigned long long	: 6;
 | 
						|
	unsigned long long eaba : 2; /* Addressing Mode */
 | 
						|
#ifdef CONFIG_64BIT
 | 
						|
	unsigned long long	: 31;
 | 
						|
	unsigned long long ia	: 64;/* Instruction Address */
 | 
						|
#else
 | 
						|
	unsigned long long ia	: 31;/* Instruction Address */
 | 
						|
#endif
 | 
						|
};
 | 
						|
 | 
						|
enum {
 | 
						|
	PSW_AMODE_24BIT = 0,
 | 
						|
	PSW_AMODE_31BIT = 1,
 | 
						|
	PSW_AMODE_64BIT = 3
 | 
						|
};
 | 
						|
 | 
						|
enum {
 | 
						|
	PSW_AS_PRIMARY	 = 0,
 | 
						|
	PSW_AS_ACCREG	 = 1,
 | 
						|
	PSW_AS_SECONDARY = 2,
 | 
						|
	PSW_AS_HOME	 = 3
 | 
						|
};
 | 
						|
 | 
						|
#define psw_bits(__psw) (*({			\
 | 
						|
	typecheck(psw_t, __psw);		\
 | 
						|
	&(*(struct psw_bits *)(&(__psw)));	\
 | 
						|
}))
 | 
						|
 | 
						|
/*
 | 
						|
 * The pt_regs struct defines the way the registers are stored on
 | 
						|
 * the stack during a system call.
 | 
						|
 */
 | 
						|
struct pt_regs 
 | 
						|
{
 | 
						|
	unsigned long args[1];
 | 
						|
	psw_t psw;
 | 
						|
	unsigned long gprs[NUM_GPRS];
 | 
						|
	unsigned long orig_gpr2;
 | 
						|
	unsigned int int_code;
 | 
						|
	unsigned int int_parm;
 | 
						|
	unsigned long int_parm_long;
 | 
						|
	unsigned long flags;
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * Program event recording (PER) register set.
 | 
						|
 */
 | 
						|
struct per_regs {
 | 
						|
	unsigned long control;		/* PER control bits */
 | 
						|
	unsigned long start;		/* PER starting address */
 | 
						|
	unsigned long end;		/* PER ending address */
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * PER event contains information about the cause of the last PER exception.
 | 
						|
 */
 | 
						|
struct per_event {
 | 
						|
	unsigned short cause;		/* PER code, ATMID and AI */
 | 
						|
	unsigned long address;		/* PER address */
 | 
						|
	unsigned char paid;		/* PER access identification */
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
 * Simplified per_info structure used to decode the ptrace user space ABI.
 | 
						|
 */
 | 
						|
struct per_struct_kernel {
 | 
						|
	unsigned long cr9;		/* PER control bits */
 | 
						|
	unsigned long cr10;		/* PER starting address */
 | 
						|
	unsigned long cr11;		/* PER ending address */
 | 
						|
	unsigned long bits;		/* Obsolete software bits */
 | 
						|
	unsigned long starting_addr;	/* User specified start address */
 | 
						|
	unsigned long ending_addr;	/* User specified end address */
 | 
						|
	unsigned short perc_atmid;	/* PER trap ATMID */
 | 
						|
	unsigned long address;		/* PER trap instruction address */
 | 
						|
	unsigned char access_id;	/* PER trap access identification */
 | 
						|
};
 | 
						|
 | 
						|
#define PER_EVENT_MASK			0xEB000000UL
 | 
						|
 | 
						|
#define PER_EVENT_BRANCH		0x80000000UL
 | 
						|
#define PER_EVENT_IFETCH		0x40000000UL
 | 
						|
#define PER_EVENT_STORE			0x20000000UL
 | 
						|
#define PER_EVENT_STORE_REAL		0x08000000UL
 | 
						|
#define PER_EVENT_TRANSACTION_END	0x02000000UL
 | 
						|
#define PER_EVENT_NULLIFICATION		0x01000000UL
 | 
						|
 | 
						|
#define PER_CONTROL_MASK		0x00e00000UL
 | 
						|
 | 
						|
#define PER_CONTROL_BRANCH_ADDRESS	0x00800000UL
 | 
						|
#define PER_CONTROL_SUSPENSION		0x00400000UL
 | 
						|
#define PER_CONTROL_ALTERATION		0x00200000UL
 | 
						|
 | 
						|
static inline void set_pt_regs_flag(struct pt_regs *regs, int flag)
 | 
						|
{
 | 
						|
	regs->flags |= (1U << flag);
 | 
						|
}
 | 
						|
 | 
						|
static inline void clear_pt_regs_flag(struct pt_regs *regs, int flag)
 | 
						|
{
 | 
						|
	regs->flags &= ~(1U << flag);
 | 
						|
}
 | 
						|
 | 
						|
static inline int test_pt_regs_flag(struct pt_regs *regs, int flag)
 | 
						|
{
 | 
						|
	return !!(regs->flags & (1U << flag));
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * These are defined as per linux/ptrace.h, which see.
 | 
						|
 */
 | 
						|
#define arch_has_single_step()	(1)
 | 
						|
#define arch_has_block_step()	(1)
 | 
						|
 | 
						|
#define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0)
 | 
						|
#define instruction_pointer(regs) ((regs)->psw.addr & PSW_ADDR_INSN)
 | 
						|
#define user_stack_pointer(regs)((regs)->gprs[15])
 | 
						|
#define profile_pc(regs) instruction_pointer(regs)
 | 
						|
 | 
						|
static inline long regs_return_value(struct pt_regs *regs)
 | 
						|
{
 | 
						|
	return regs->gprs[2];
 | 
						|
}
 | 
						|
 | 
						|
int regs_query_register_offset(const char *name);
 | 
						|
const char *regs_query_register_name(unsigned int offset);
 | 
						|
unsigned long regs_get_register(struct pt_regs *regs, unsigned int offset);
 | 
						|
unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n);
 | 
						|
 | 
						|
static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
 | 
						|
{
 | 
						|
	return regs->gprs[15] & PSW_ADDR_INSN;
 | 
						|
}
 | 
						|
 | 
						|
#endif /* __ASSEMBLY__ */
 | 
						|
#endif /* _S390_PTRACE_H */
 |