Accepting request 39909 from Virtualization
checked in (request 39909) OBS-URL: https://build.opensuse.org/request/show/39909 OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=47
This commit is contained in:
committed by
Git OBS Bridge
parent
f774ff78ee
commit
6dd7e12d17
@@ -154,7 +154,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
if ( opt_dom0_max_vcpus > MAX_VIRT_CPUS )
|
||||
opt_dom0_max_vcpus = MAX_VIRT_CPUS;
|
||||
|
||||
@@ -287,7 +288,7 @@ int __init construct_dom0(
|
||||
@@ -277,7 +278,7 @@ int __init construct_dom0(
|
||||
unsigned long _initrd_start, unsigned long initrd_len,
|
||||
char *cmdline)
|
||||
{
|
||||
@@ -163,7 +163,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
struct cpu_user_regs *regs;
|
||||
unsigned long pfn, mfn;
|
||||
unsigned long nr_pages;
|
||||
@@ -786,8 +787,12 @@ int __init construct_dom0(
|
||||
@@ -776,8 +777,12 @@ int __init construct_dom0(
|
||||
|
||||
printk("Dom0 has maximum %u VCPUs\n", opt_dom0_max_vcpus);
|
||||
|
||||
@@ -314,7 +314,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
if ( idle_domain == NULL )
|
||||
BUG();
|
||||
idle_domain->vcpu = idle_vcpu;
|
||||
@@ -1094,8 +1095,13 @@ void __init __start_xen(unsigned long mb
|
||||
@@ -1089,8 +1090,13 @@ void __init __start_xen(unsigned long mb
|
||||
if ( !tboot_protect_mem_regions() )
|
||||
panic("Could not protect TXT memory regions\n");
|
||||
|
||||
@@ -857,9 +857,9 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * do cpupool related sysctl operations
|
||||
+ * do cpupool related domctl operations
|
||||
+ */
|
||||
+int cpupool_do_sysctl(struct xen_sysctl_cpupool_op *op)
|
||||
+int cpupool_do_domctl(struct xen_domctl_cpupool_op *op)
|
||||
+{
|
||||
+ int ret;
|
||||
+ struct cpupool *c;
|
||||
@@ -867,12 +867,12 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ switch ( op->op )
|
||||
+ {
|
||||
+
|
||||
+ case XEN_SYSCTL_CPUPOOL_OP_CREATE:
|
||||
+ case XEN_DOMCTL_CPUPOOL_OP_CREATE:
|
||||
+ {
|
||||
+ int poolid;
|
||||
+ struct scheduler *sched;
|
||||
+
|
||||
+ poolid = (op->cpupool_id == XEN_SYSCTL_CPUPOOL_PAR_ANY) ?
|
||||
+ poolid = (op->cpupool_id == XEN_DOMCTL_CPUPOOL_PAR_ANY) ?
|
||||
+ CPUPOOLID_NONE: op->cpupool_id;
|
||||
+ sched = scheduler_get_by_id(op->sched_id);
|
||||
+ ret = -ENOENT;
|
||||
@@ -887,7 +887,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case XEN_SYSCTL_CPUPOOL_OP_DESTROY:
|
||||
+ case XEN_DOMCTL_CPUPOOL_OP_DESTROY:
|
||||
+ {
|
||||
+ spin_lock(&cpupool_lock);
|
||||
+ c = cpupool_find_by_id(op->cpupool_id, 1);
|
||||
@@ -899,7 +899,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case XEN_SYSCTL_CPUPOOL_OP_INFO:
|
||||
+ case XEN_DOMCTL_CPUPOOL_OP_INFO:
|
||||
+ {
|
||||
+ spin_lock(&cpupool_lock);
|
||||
+ c = cpupool_find_by_id(op->cpupool_id, 0);
|
||||
@@ -915,7 +915,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case XEN_SYSCTL_CPUPOOL_OP_ADDCPU:
|
||||
+ case XEN_DOMCTL_CPUPOOL_OP_ADDCPU:
|
||||
+ {
|
||||
+ unsigned cpu;
|
||||
+
|
||||
@@ -923,7 +923,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ printk(XENLOG_DEBUG "cpupool_assign_cpu(pool=%d,cpu=%d)\n",
|
||||
+ op->cpupool_id, cpu);
|
||||
+ spin_lock(&cpupool_lock);
|
||||
+ if ( cpu == XEN_SYSCTL_CPUPOOL_PAR_ANY )
|
||||
+ if ( cpu == XEN_DOMCTL_CPUPOOL_PAR_ANY )
|
||||
+ cpu = first_cpu(cpupool_free_cpus);
|
||||
+ ret = -EINVAL;
|
||||
+ if ( cpu >= NR_CPUS )
|
||||
@@ -943,7 +943,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case XEN_SYSCTL_CPUPOOL_OP_RMCPU:
|
||||
+ case XEN_DOMCTL_CPUPOOL_OP_RMCPU:
|
||||
+ {
|
||||
+ unsigned cpu;
|
||||
+
|
||||
@@ -954,7 +954,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ if ( c == NULL )
|
||||
+ break;
|
||||
+ cpu = op->cpu;
|
||||
+ if ( cpu == XEN_SYSCTL_CPUPOOL_PAR_ANY )
|
||||
+ if ( cpu == XEN_DOMCTL_CPUPOOL_PAR_ANY )
|
||||
+ cpu = last_cpu(c->cpu_valid);
|
||||
+ ret = -EINVAL;
|
||||
+ if ( cpu >= NR_CPUS )
|
||||
@@ -966,7 +966,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case XEN_SYSCTL_CPUPOOL_OP_MOVEDOMAIN:
|
||||
+ case XEN_DOMCTL_CPUPOOL_OP_MOVEDOMAIN:
|
||||
+ {
|
||||
+ struct domain *d;
|
||||
+
|
||||
@@ -1010,7 +1010,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case XEN_SYSCTL_CPUPOOL_OP_FREEINFO:
|
||||
+ case XEN_DOMCTL_CPUPOOL_OP_FREEINFO:
|
||||
+ {
|
||||
+ cpumask_to_xenctl_cpumap(&(op->cpumap),
|
||||
+ &cpupool_free_cpus);
|
||||
@@ -1176,6 +1176,21 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
|
||||
if ( alloc_vcpu(d, i, cpu) == NULL )
|
||||
goto maxvcpu_out;
|
||||
@@ -961,6 +967,14 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
|
||||
}
|
||||
break;
|
||||
|
||||
+ case XEN_DOMCTL_cpupool_op:
|
||||
+ {
|
||||
+ ret = cpupool_do_domctl(&op->u.cpupool_op);
|
||||
+ if ( (ret == 0) && copy_to_guest(u_domctl, op, 1) )
|
||||
+ ret = -EFAULT;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
ret = arch_do_domctl(op, u_domctl);
|
||||
break;
|
||||
--- a/xen/common/sched_credit.c
|
||||
+++ b/xen/common/sched_credit.c
|
||||
@@ -70,11 +70,15 @@
|
||||
@@ -2979,23 +2994,6 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
open_softirq(TASKLET_SOFTIRQ, tasklet_action);
|
||||
}
|
||||
|
||||
--- a/xen/common/sysctl.c
|
||||
+++ b/xen/common/sysctl.c
|
||||
@@ -314,6 +314,14 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysc
|
||||
}
|
||||
break;
|
||||
|
||||
+ case XEN_SYSCTL_cpupool_op:
|
||||
+ {
|
||||
+ ret = cpupool_do_sysctl(&op->u.cpupool_op);
|
||||
+ if ( (ret == 0) && copy_to_guest(u_sysctl, op, 1) )
|
||||
+ ret = -EFAULT;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
ret = arch_do_sysctl(op, u_sysctl);
|
||||
break;
|
||||
--- a/xen/include/asm-x86/domain.h
|
||||
+++ b/xen/include/asm-x86/domain.h
|
||||
@@ -451,7 +451,8 @@ struct arch_vcpu
|
||||
@@ -3040,31 +3038,23 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
};
|
||||
typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t;
|
||||
DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t);
|
||||
@@ -781,7 +782,6 @@ struct xen_domctl_mem_sharing_op {
|
||||
@@ -781,6 +782,30 @@ struct xen_domctl_mem_sharing_op {
|
||||
typedef struct xen_domctl_mem_sharing_op xen_domctl_mem_sharing_op_t;
|
||||
DEFINE_XEN_GUEST_HANDLE(xen_domctl_mem_sharing_op_t);
|
||||
|
||||
-
|
||||
struct xen_domctl {
|
||||
uint32_t cmd;
|
||||
#define XEN_DOMCTL_createdomain 1
|
||||
--- a/xen/include/public/sysctl.h
|
||||
+++ b/xen/include/public/sysctl.h
|
||||
@@ -491,6 +491,28 @@ struct xen_sysctl_lockprof_op {
|
||||
typedef struct xen_sysctl_lockprof_op xen_sysctl_lockprof_op_t;
|
||||
DEFINE_XEN_GUEST_HANDLE(xen_sysctl_lockprof_op_t);
|
||||
|
||||
+#define XEN_SYSCTL_cpupool_op 18
|
||||
+/* XEN_SYSCTL_cpupool_op */
|
||||
+#define XEN_SYSCTL_CPUPOOL_OP_CREATE 1 /* C */
|
||||
+#define XEN_SYSCTL_CPUPOOL_OP_DESTROY 2 /* D */
|
||||
+#define XEN_SYSCTL_CPUPOOL_OP_INFO 3 /* I */
|
||||
+#define XEN_SYSCTL_CPUPOOL_OP_ADDCPU 4 /* A */
|
||||
+#define XEN_SYSCTL_CPUPOOL_OP_RMCPU 5 /* R */
|
||||
+#define XEN_SYSCTL_CPUPOOL_OP_MOVEDOMAIN 6 /* M */
|
||||
+#define XEN_SYSCTL_CPUPOOL_OP_FREEINFO 7 /* F */
|
||||
+#define XEN_SYSCTL_CPUPOOL_PAR_ANY 0xFFFFFFFF
|
||||
+struct xen_sysctl_cpupool_op {
|
||||
+/*
|
||||
+ * cpupool operations
|
||||
+ */
|
||||
+/* XEN_DOMCTL_cpupool_op */
|
||||
+#define XEN_DOMCTL_CPUPOOL_OP_CREATE 1 /* C */
|
||||
+#define XEN_DOMCTL_CPUPOOL_OP_DESTROY 2 /* D */
|
||||
+#define XEN_DOMCTL_CPUPOOL_OP_INFO 3 /* I */
|
||||
+#define XEN_DOMCTL_CPUPOOL_OP_ADDCPU 4 /* A */
|
||||
+#define XEN_DOMCTL_CPUPOOL_OP_RMCPU 5 /* R */
|
||||
+#define XEN_DOMCTL_CPUPOOL_OP_MOVEDOMAIN 6 /* M */
|
||||
+#define XEN_DOMCTL_CPUPOOL_OP_FREEINFO 7 /* F */
|
||||
+#define XEN_DOMCTL_CPUPOOL_PAR_ANY 0xFFFFFFFF
|
||||
+struct xen_domctl_cpupool_op {
|
||||
+ uint32_t op; /* IN */
|
||||
+ uint32_t cpupool_id; /* IN: CDIARM OUT: CI */
|
||||
+ uint32_t sched_id; /* IN: C OUT: I */
|
||||
@@ -3073,20 +3063,28 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+ uint32_t n_dom; /* OUT: I */
|
||||
+ struct xenctl_cpumap cpumap; /* OUT: IF */
|
||||
+};
|
||||
+typedef struct xen_sysctl_cpupool_op xen_sysctl_cpupool_op_t;
|
||||
+DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpupool_op_t);
|
||||
+typedef struct xen_domctl_cpupool_op xen_domctl_cpupool_op_t;
|
||||
+DEFINE_XEN_GUEST_HANDLE(xen_domctl_cpupool_op_t);
|
||||
+
|
||||
struct xen_sysctl {
|
||||
|
||||
struct xen_domctl {
|
||||
uint32_t cmd;
|
||||
uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
|
||||
@@ -509,6 +531,7 @@ struct xen_sysctl {
|
||||
struct xen_sysctl_pm_op pm_op;
|
||||
struct xen_sysctl_page_offline_op page_offline;
|
||||
struct xen_sysctl_lockprof_op lockprof_op;
|
||||
+ struct xen_sysctl_cpupool_op cpupool_op;
|
||||
uint8_t pad[128];
|
||||
} u;
|
||||
};
|
||||
@@ -842,6 +867,7 @@ struct xen_domctl {
|
||||
#define XEN_DOMCTL_gettscinfo 59
|
||||
#define XEN_DOMCTL_settscinfo 60
|
||||
#define XEN_DOMCTL_getpageframeinfo3 61
|
||||
+#define XEN_DOMCTL_cpupool_op 62
|
||||
#define XEN_DOMCTL_gdbsx_guestmemio 1000
|
||||
#define XEN_DOMCTL_gdbsx_pausevcpu 1001
|
||||
#define XEN_DOMCTL_gdbsx_unpausevcpu 1002
|
||||
@@ -890,6 +916,7 @@ struct xen_domctl {
|
||||
struct xen_domctl_debug_op debug_op;
|
||||
struct xen_domctl_mem_event_op mem_event_op;
|
||||
struct xen_domctl_mem_sharing_op mem_sharing_op;
|
||||
+ struct xen_domctl_cpupool_op cpupool_op;
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
struct xen_domctl_cpuid cpuid;
|
||||
#endif
|
||||
--- a/xen/include/xen/sched-if.h
|
||||
+++ b/xen/include/xen/sched-if.h
|
||||
@@ -10,16 +10,29 @@
|
||||
@@ -3185,15 +3183,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
#endif /* __XEN_SCHED_IF_H__ */
|
||||
--- a/xen/include/xen/sched.h
|
||||
+++ b/xen/include/xen/sched.h
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <xen/shared.h>
|
||||
#include <public/xen.h>
|
||||
#include <public/domctl.h>
|
||||
+#include <public/sysctl.h>
|
||||
#include <public/vcpu.h>
|
||||
#include <public/xsm/acm.h>
|
||||
#include <xen/time.h>
|
||||
@@ -132,8 +133,6 @@ struct vcpu
|
||||
@@ -132,8 +132,6 @@ struct vcpu
|
||||
bool_t defer_shutdown;
|
||||
/* VCPU is paused following shutdown request (d->is_shutting_down)? */
|
||||
bool_t paused_for_shutdown;
|
||||
@@ -3202,7 +3192,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
|
||||
/*
|
||||
* > 0: a single port is being polled;
|
||||
@@ -211,6 +210,7 @@ struct domain
|
||||
@@ -211,6 +209,7 @@ struct domain
|
||||
|
||||
/* Scheduling. */
|
||||
void *sched_priv; /* scheduler-specific data */
|
||||
@@ -3210,7 +3200,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
|
||||
struct domain *next_in_list;
|
||||
struct domain *next_in_hashbucket;
|
||||
@@ -383,7 +383,7 @@ static inline struct domain *get_current
|
||||
@@ -383,7 +382,7 @@ static inline struct domain *get_current
|
||||
}
|
||||
|
||||
struct domain *domain_create(
|
||||
@@ -3219,7 +3209,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
/* DOMCRF_hvm: Create an HVM domain, as opposed to a PV domain. */
|
||||
#define _DOMCRF_hvm 0
|
||||
#define DOMCRF_hvm (1U<<_DOMCRF_hvm)
|
||||
@@ -471,6 +471,7 @@ int sched_init_vcpu(struct vcpu *v, uns
|
||||
@@ -471,6 +470,7 @@ int sched_init_vcpu(struct vcpu *v, uns
|
||||
void sched_destroy_vcpu(struct vcpu *v);
|
||||
int sched_init_domain(struct domain *d);
|
||||
void sched_destroy_domain(struct domain *d);
|
||||
@@ -3227,7 +3217,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
long sched_adjust(struct domain *, struct xen_domctl_scheduler_op *);
|
||||
int sched_id(void);
|
||||
void sched_tick_suspend(void);
|
||||
@@ -578,12 +579,14 @@ void domain_pause_by_systemcontroller(st
|
||||
@@ -578,12 +578,14 @@ void domain_pause_by_systemcontroller(st
|
||||
void domain_unpause_by_systemcontroller(struct domain *d);
|
||||
void cpu_init(void);
|
||||
|
||||
@@ -3246,7 +3236,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
|
||||
void vcpu_runstate_get(struct vcpu *v, struct vcpu_runstate_info *runstate);
|
||||
uint64_t get_cpu_idle_time(unsigned int cpu);
|
||||
@@ -606,6 +609,18 @@ extern enum cpufreq_controller {
|
||||
@@ -606,6 +608,18 @@ extern enum cpufreq_controller {
|
||||
FREQCTL_none, FREQCTL_dom0_kernel, FREQCTL_xen
|
||||
} cpufreq_controller;
|
||||
|
||||
@@ -3259,7 +3249,7 @@ From: Juergen Gross <juergen.gross@ts.fujitsu.com>
|
||||
+void cpupool_cpu_add(unsigned int cpu);
|
||||
+int cpupool_add_domain(struct domain *d, int poolid);
|
||||
+void cpupool_rm_domain(struct domain *d);
|
||||
+int cpupool_do_sysctl(struct xen_sysctl_cpupool_op *op);
|
||||
+int cpupool_do_domctl(struct xen_domctl_cpupool_op *op);
|
||||
+#define num_cpupool_cpus(c) (cpus_weight((c)->cpu_valid))
|
||||
+
|
||||
#endif /* __SCHED_H__ */
|
||||
|
Reference in New Issue
Block a user