mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 15:27:29 +00:00
xen: features and fixes for 4.3-rc0
- Convert xen-blkfront to the multiqueue API - [arm] Support binding event channels to different VCPUs. - [x86] Support > 512 GiB in a PV guests (off by default as such a guest cannot be migrated with the current toolstack). - [x86] PMU support for PV dom0 (limited support for using perf with Xen and other guests). -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJV7wIdAAoJEFxbo/MsZsTR0hEH/04HTKLKGnSJpZ5WbMPxqZxE UqGlvhvVWNAmFocZmbPcEi9T1qtcFrX5pM55JQr6UmAp3ovYsT2q1Q1kKaOaawks pSfc/YEH3oQW5VUQ9Lm9Ru5Z8Btox0WrzRREO92OF36UOgUOBOLkGsUfOwDinNIM lSk2djbYwDYAsoeC3PHB32wwMI//Lz6B/9ZVXcyL6ULynt1ULdspETjGnptRPZa7 JTB5L4/soioKOn18HDwwOhKmvaFUPQv9Odnv7dc85XwZreajhM/KMu3qFbMDaF/d WVB1NMeCBdQYgjOrUjrmpyr5uTMySiQEG54cplrEKinfeZgKlEyjKvjcAfJfiac= =Ktjl -----END PGP SIGNATURE----- Merge tag 'for-linus-4.3-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip Pull xen updates from David Vrabel: "Xen features and fixes for 4.3: - Convert xen-blkfront to the multiqueue API - [arm] Support binding event channels to different VCPUs. - [x86] Support > 512 GiB in a PV guests (off by default as such a guest cannot be migrated with the current toolstack). - [x86] PMU support for PV dom0 (limited support for using perf with Xen and other guests)" * tag 'for-linus-4.3-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: (33 commits) xen: switch extra memory accounting to use pfns xen: limit memory to architectural maximum xen: avoid another early crash of memory limited dom0 xen: avoid early crash of memory limited dom0 arm/xen: Remove helpers which are PV specific xen/x86: Don't try to set PCE bit in CR4 xen/PMU: PMU emulation code xen/PMU: Intercept PMU-related MSR and APIC accesses xen/PMU: Describe vendor-specific PMU registers xen/PMU: Initialization code for Xen PMU xen/PMU: Sysfs interface for setting Xen PMU mode xen: xensyms support xen: remove no longer needed p2m.h xen: allow more than 512 GB of RAM for 64 bit pv-domains xen: move p2m list if conflicting with e820 map xen: add explicit memblock_reserve() calls for special pages mm: provide early_memremap_ro to establish read-only mapping xen: check for initrd conflicting with e820 map xen: check pre-allocated page tables for conflict with memory map xen: check for kernel memory conflicting with memory layout ...
This commit is contained in:
commit
752240e74d
42 changed files with 2231 additions and 365 deletions
|
@ -92,7 +92,6 @@ void xen_hvm_callback_vector(void);
|
|||
#ifdef CONFIG_TRACING
|
||||
#define trace_xen_hvm_callback_vector xen_hvm_callback_vector
|
||||
#endif
|
||||
extern int xen_have_vector_callback;
|
||||
int xen_set_callback_via(uint64_t via);
|
||||
void xen_evtchn_do_upcall(struct pt_regs *regs);
|
||||
void xen_hvm_evtchn_do_upcall(void);
|
||||
|
|
|
@ -474,6 +474,23 @@ struct xenpf_core_parking {
|
|||
};
|
||||
DEFINE_GUEST_HANDLE_STRUCT(xenpf_core_parking);
|
||||
|
||||
#define XENPF_get_symbol 63
|
||||
struct xenpf_symdata {
|
||||
/* IN/OUT variables */
|
||||
uint32_t namelen; /* size of 'name' buffer */
|
||||
|
||||
/* IN/OUT variables */
|
||||
uint32_t symnum; /* IN: Symbol to read */
|
||||
/* OUT: Next available symbol. If same as IN */
|
||||
/* then we reached the end */
|
||||
|
||||
/* OUT variables */
|
||||
GUEST_HANDLE(char) name;
|
||||
uint64_t address;
|
||||
char type;
|
||||
};
|
||||
DEFINE_GUEST_HANDLE_STRUCT(xenpf_symdata);
|
||||
|
||||
struct xen_platform_op {
|
||||
uint32_t cmd;
|
||||
uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
|
||||
|
@ -495,6 +512,7 @@ struct xen_platform_op {
|
|||
struct xenpf_cpu_hotadd cpu_add;
|
||||
struct xenpf_mem_hotadd mem_add;
|
||||
struct xenpf_core_parking core_parking;
|
||||
struct xenpf_symdata symdata;
|
||||
uint8_t pad[128];
|
||||
} u;
|
||||
};
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
#define __HYPERVISOR_kexec_op 37
|
||||
#define __HYPERVISOR_tmem_op 38
|
||||
#define __HYPERVISOR_xc_reserved_op 39 /* reserved for XenClient */
|
||||
#define __HYPERVISOR_xenpmu_op 40
|
||||
|
||||
/* Architecture-specific hypercall definitions. */
|
||||
#define __HYPERVISOR_arch_0 48
|
||||
|
@ -112,6 +113,7 @@
|
|||
#define VIRQ_MEM_EVENT 10 /* G. (DOM0) A memory event has occured */
|
||||
#define VIRQ_XC_RESERVED 11 /* G. Reserved for XenClient */
|
||||
#define VIRQ_ENOMEM 12 /* G. (DOM0) Low on heap memory */
|
||||
#define VIRQ_XENPMU 13 /* PMC interrupt */
|
||||
|
||||
/* Architecture-specific VIRQ definitions. */
|
||||
#define VIRQ_ARCH_0 16
|
||||
|
@ -585,26 +587,29 @@ struct shared_info {
|
|||
};
|
||||
|
||||
/*
|
||||
* Start-of-day memory layout for the initial domain (DOM0):
|
||||
* Start-of-day memory layout
|
||||
*
|
||||
* 1. The domain is started within contiguous virtual-memory region.
|
||||
* 2. The contiguous region begins and ends on an aligned 4MB boundary.
|
||||
* 3. The region start corresponds to the load address of the OS image.
|
||||
* If the load address is not 4MB aligned then the address is rounded down.
|
||||
* 4. This the order of bootstrap elements in the initial virtual region:
|
||||
* 3. This the order of bootstrap elements in the initial virtual region:
|
||||
* a. relocated kernel image
|
||||
* b. initial ram disk [mod_start, mod_len]
|
||||
* (may be omitted)
|
||||
* c. list of allocated page frames [mfn_list, nr_pages]
|
||||
* (unless relocated due to XEN_ELFNOTE_INIT_P2M)
|
||||
* d. start_info_t structure [register ESI (x86)]
|
||||
* e. bootstrap page tables [pt_base, CR3 (x86)]
|
||||
* f. bootstrap stack [register ESP (x86)]
|
||||
* 5. Bootstrap elements are packed together, but each is 4kB-aligned.
|
||||
* 6. The initial ram disk may be omitted.
|
||||
* 7. The list of page frames forms a contiguous 'pseudo-physical' memory
|
||||
* in case of dom0 this page contains the console info, too
|
||||
* e. unless dom0: xenstore ring page
|
||||
* f. unless dom0: console ring page
|
||||
* g. bootstrap page tables [pt_base, CR3 (x86)]
|
||||
* h. bootstrap stack [register ESP (x86)]
|
||||
* 4. Bootstrap elements are packed together, but each is 4kB-aligned.
|
||||
* 5. The list of page frames forms a contiguous 'pseudo-physical' memory
|
||||
* layout for the domain. In particular, the bootstrap virtual-memory
|
||||
* region is a 1:1 mapping to the first section of the pseudo-physical map.
|
||||
* 8. All bootstrap elements are mapped read-writable for the guest OS. The
|
||||
* 6. All bootstrap elements are mapped read-writable for the guest OS. The
|
||||
* only exception is the bootstrap page table, which is mapped read-only.
|
||||
* 9. There is guaranteed to be at least 512kB padding after the final
|
||||
* 7. There is guaranteed to be at least 512kB padding after the final
|
||||
* bootstrap element. If necessary, the bootstrap virtual region is
|
||||
* extended by an extra 4MB to ensure this.
|
||||
*/
|
||||
|
@ -641,10 +646,12 @@ struct start_info {
|
|||
};
|
||||
|
||||
/* These flags are passed in the 'flags' field of start_info_t. */
|
||||
#define SIF_PRIVILEGED (1<<0) /* Is the domain privileged? */
|
||||
#define SIF_INITDOMAIN (1<<1) /* Is this the initial control domain? */
|
||||
#define SIF_MULTIBOOT_MOD (1<<2) /* Is mod_start a multiboot module? */
|
||||
#define SIF_MOD_START_PFN (1<<3) /* Is mod_start a PFN? */
|
||||
#define SIF_PRIVILEGED (1<<0) /* Is the domain privileged? */
|
||||
#define SIF_INITDOMAIN (1<<1) /* Is this the initial control domain? */
|
||||
#define SIF_MULTIBOOT_MOD (1<<2) /* Is mod_start a multiboot module? */
|
||||
#define SIF_MOD_START_PFN (1<<3) /* Is mod_start a PFN? */
|
||||
#define SIF_VIRT_P2M_4TOOLS (1<<4) /* Do Xen tools understand a virt. mapped */
|
||||
/* P->M making the 3 level tree obsolete? */
|
||||
#define SIF_PM_MASK (0xFF<<8) /* reserve 1 byte for xen-pm options */
|
||||
|
||||
/*
|
||||
|
|
94
include/xen/interface/xenpmu.h
Normal file
94
include/xen/interface/xenpmu.h
Normal file
|
@ -0,0 +1,94 @@
|
|||
#ifndef __XEN_PUBLIC_XENPMU_H__
|
||||
#define __XEN_PUBLIC_XENPMU_H__
|
||||
|
||||
#include "xen.h"
|
||||
|
||||
#define XENPMU_VER_MAJ 0
|
||||
#define XENPMU_VER_MIN 1
|
||||
|
||||
/*
|
||||
* ` enum neg_errnoval
|
||||
* ` HYPERVISOR_xenpmu_op(enum xenpmu_op cmd, struct xenpmu_params *args);
|
||||
*
|
||||
* @cmd == XENPMU_* (PMU operation)
|
||||
* @args == struct xenpmu_params
|
||||
*/
|
||||
/* ` enum xenpmu_op { */
|
||||
#define XENPMU_mode_get 0 /* Also used for getting PMU version */
|
||||
#define XENPMU_mode_set 1
|
||||
#define XENPMU_feature_get 2
|
||||
#define XENPMU_feature_set 3
|
||||
#define XENPMU_init 4
|
||||
#define XENPMU_finish 5
|
||||
#define XENPMU_lvtpc_set 6
|
||||
#define XENPMU_flush 7
|
||||
|
||||
/* ` } */
|
||||
|
||||
/* Parameters structure for HYPERVISOR_xenpmu_op call */
|
||||
struct xen_pmu_params {
|
||||
/* IN/OUT parameters */
|
||||
struct {
|
||||
uint32_t maj;
|
||||
uint32_t min;
|
||||
} version;
|
||||
uint64_t val;
|
||||
|
||||
/* IN parameters */
|
||||
uint32_t vcpu;
|
||||
uint32_t pad;
|
||||
};
|
||||
|
||||
/* PMU modes:
|
||||
* - XENPMU_MODE_OFF: No PMU virtualization
|
||||
* - XENPMU_MODE_SELF: Guests can profile themselves
|
||||
* - XENPMU_MODE_HV: Guests can profile themselves, dom0 profiles
|
||||
* itself and Xen
|
||||
* - XENPMU_MODE_ALL: Only dom0 has access to VPMU and it profiles
|
||||
* everyone: itself, the hypervisor and the guests.
|
||||
*/
|
||||
#define XENPMU_MODE_OFF 0
|
||||
#define XENPMU_MODE_SELF (1<<0)
|
||||
#define XENPMU_MODE_HV (1<<1)
|
||||
#define XENPMU_MODE_ALL (1<<2)
|
||||
|
||||
/*
|
||||
* PMU features:
|
||||
* - XENPMU_FEATURE_INTEL_BTS: Intel BTS support (ignored on AMD)
|
||||
*/
|
||||
#define XENPMU_FEATURE_INTEL_BTS 1
|
||||
|
||||
/*
|
||||
* Shared PMU data between hypervisor and PV(H) domains.
|
||||
*
|
||||
* The hypervisor fills out this structure during PMU interrupt and sends an
|
||||
* interrupt to appropriate VCPU.
|
||||
* Architecture-independent fields of xen_pmu_data are WO for the hypervisor
|
||||
* and RO for the guest but some fields in xen_pmu_arch can be writable
|
||||
* by both the hypervisor and the guest (see arch-$arch/pmu.h).
|
||||
*/
|
||||
struct xen_pmu_data {
|
||||
/* Interrupted VCPU */
|
||||
uint32_t vcpu_id;
|
||||
|
||||
/*
|
||||
* Physical processor on which the interrupt occurred. On non-privileged
|
||||
* guests set to vcpu_id;
|
||||
*/
|
||||
uint32_t pcpu_id;
|
||||
|
||||
/*
|
||||
* Domain that was interrupted. On non-privileged guests set to
|
||||
* DOMID_SELF.
|
||||
* On privileged guests can be DOMID_SELF, DOMID_XEN, or, when in
|
||||
* XENPMU_MODE_ALL mode, domain ID of another domain.
|
||||
*/
|
||||
domid_t domain_id;
|
||||
|
||||
uint8_t pad[6];
|
||||
|
||||
/* Architecture-specific information */
|
||||
struct xen_pmu_arch pmu;
|
||||
};
|
||||
|
||||
#endif /* __XEN_PUBLIC_XENPMU_H__ */
|
|
@ -9,8 +9,8 @@ static inline unsigned long page_to_mfn(struct page *page)
|
|||
}
|
||||
|
||||
struct xen_memory_region {
|
||||
phys_addr_t start;
|
||||
phys_addr_t size;
|
||||
unsigned long start_pfn;
|
||||
unsigned long n_pfns;
|
||||
};
|
||||
|
||||
#define XEN_EXTRA_MEM_MAX_REGIONS 128 /* == E820MAX */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue