SHA256
1
0
forked from pool/xen

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:
OBS User autobuild
2010-05-13 22:42:01 +00:00
committed by Git OBS Bridge
parent f774ff78ee
commit 6dd7e12d17
27 changed files with 321 additions and 1259 deletions

View File

@@ -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__ */