mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
Clean up xc_vmx_build():
1. Remove linux parameters. 2. Remove init ramdisk. 3. Remove e820 memmap config file parse. 4. Removed provisional GDT. 5. Removed some ugly tailing space. Signed-off-by: Xin B Li <xin.b.li@intel.com>
This commit is contained in:
1 parent
01668ad066
commit
2b3f9eda6b
14 files changed
+317
-757
No files matched your search
@@ -17,7 +17,6 @@
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "xc_private.h"
|
||||
#include "linux_boot_params.h"
|
||||
|
||||
/* Needed for Python versions earlier than 2.3. */
|
||||
#ifndef PyMODINIT_FUNC
|
||||
@@ -310,80 +309,24 @@ static PyObject *pyxc_vmx_build(PyObject *self,
|
||||
XcObject *xc = (XcObject *)self;
|
||||
|
||||
u32 dom;
|
||||
char *image, *ramdisk = NULL, *cmdline = "";
|
||||
PyObject *memmap;
|
||||
char *image;
|
||||
int control_evtchn, store_evtchn;
|
||||
int flags = 0, vcpus = 1;
|
||||
int numItems, i;
|
||||
int memsize;
|
||||
struct mem_map mem_map;
|
||||
unsigned long store_mfn = 0;
|
||||
|
||||
static char *kwd_list[] = { "dom", "control_evtchn", "store_evtchn",
|
||||
"memsize", "image", "memmap",
|
||||
"ramdisk", "cmdline", "flags",
|
||||
"vcpus", NULL };
|
||||
"memsize", "image", "flags", "vcpus", NULL };
|
||||
|
||||
if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiiisO!|ssii", kwd_list,
|
||||
if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiiisii", kwd_list,
|
||||
&dom, &control_evtchn, &store_evtchn,
|
||||
&memsize,
|
||||
&image, &PyList_Type, &memmap,
|
||||
&ramdisk, &cmdline, &flags, &vcpus) )
|
||||
&memsize, &image, &flags, &vcpus) )
|
||||
return NULL;
|
||||
|
||||
memset(&mem_map, 0, sizeof(mem_map));
|
||||
/* Parse memmap */
|
||||
|
||||
/* get the number of lines passed to us */
|
||||
numItems = PyList_Size(memmap) - 1; /* removing the line
|
||||
containing "memmap" */
|
||||
mem_map.nr_map = numItems;
|
||||
|
||||
/* should raise an error here. */
|
||||
if (numItems < 0) return NULL; /* Not a list */
|
||||
|
||||
/* iterate over items of the list, grabbing ranges and parsing them */
|
||||
for (i = 1; i <= numItems; i++) { // skip over "memmap"
|
||||
PyObject *item, *f1, *f2, *f3, *f4;
|
||||
int numFields;
|
||||
unsigned long lf1, lf2, lf3, lf4;
|
||||
char *sf1, *sf2;
|
||||
|
||||
/* grab the string object from the next element of the list */
|
||||
item = PyList_GetItem(memmap, i); /* Can't fail */
|
||||
|
||||
/* get the number of lines passed to us */
|
||||
numFields = PyList_Size(item);
|
||||
|
||||
if (numFields != 4)
|
||||
return NULL;
|
||||
|
||||
f1 = PyList_GetItem(item, 0);
|
||||
f2 = PyList_GetItem(item, 1);
|
||||
f3 = PyList_GetItem(item, 2);
|
||||
f4 = PyList_GetItem(item, 3);
|
||||
|
||||
/* Convert objects to strings/longs */
|
||||
sf1 = PyString_AsString(f1);
|
||||
sf2 = PyString_AsString(f2);
|
||||
lf3 = PyLong_AsLong(f3);
|
||||
lf4 = PyLong_AsLong(f4);
|
||||
if ( sscanf(sf1, "%lx", &lf1) != 1 )
|
||||
return NULL;
|
||||
if ( sscanf(sf2, "%lx", &lf2) != 1 )
|
||||
return NULL;
|
||||
|
||||
mem_map.map[i-1].addr = lf1;
|
||||
mem_map.map[i-1].size = lf2 - lf1;
|
||||
mem_map.map[i-1].type = lf3;
|
||||
mem_map.map[i-1].caching_attr = lf4;
|
||||
}
|
||||
|
||||
if ( xc_vmx_build(xc->xc_handle, dom, memsize, image, &mem_map,
|
||||
ramdisk, cmdline, control_evtchn, flags,
|
||||
vcpus, store_evtchn, &store_mfn) != 0 )
|
||||
if ( xc_vmx_build(xc->xc_handle, dom, memsize, image, control_evtchn,
|
||||
flags, vcpus, store_evtchn, &store_mfn) != 0 )
|
||||
return PyErr_SetFromErrno(xc_error);
|
||||
|
||||
|
||||
return Py_BuildValue("{s:i}", "store_mfn", store_mfn);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
mem_caching_attr = {
|
||||
'UC' : 0,
|
||||
'WC' : 1,
|
||||
'WT' : 4,
|
||||
'WP' : 5,
|
||||
'WB' : 6,
|
||||
};
|
||||
|
||||
e820_mem_type = {
|
||||
'AddressRangeMemory' : 1,
|
||||
'AddressRangeReserved' : 2,
|
||||
'AddressRangeACPI' : 3,
|
||||
'AddressRangeNVS' : 4,
|
||||
'AddressRangeIO' : 16,
|
||||
'AddressRangeShared' : 17,
|
||||
};
|
||||
|
||||
MT_COL = 2
|
||||
MA_COL = 3
|
||||
|
||||
def strmap(row):
|
||||
if (type(row) != type([])):
|
||||
return row
|
||||
row[MT_COL] = e820_mem_type[row[MT_COL]]
|
||||
row[MA_COL] = mem_caching_attr[row[MA_COL]]
|
||||
return row
|
||||
|
||||
def memmap_parse(memmap):
|
||||
return map(strmap, memmap)
|
||||
|
||||
if __name__ == '__main__':
|
||||
memmap = [ 'memmap',
|
||||
[ '1', '2', 'AddressRangeMemory', 'UC'],
|
||||
[ '1', '2', 'AddressRangeReserved', 'UC'],
|
||||
[ '1', '2', 'AddressRangeACPI', 'WB'],
|
||||
[ '1', '2', 'AddressRangeNVS', 'WB'],
|
||||
[ '1', '2', 'AddressRangeIO', 'WB'],
|
||||
[ '1', '2', 'AddressRangeShared', 'WB']]
|
||||
print memmap_parse(memmap);
|
||||
|
||||
|
||||
@@ -238,22 +238,19 @@ class VmxImageHandler(ImageHandler):
|
||||
|
||||
def configure(self, imageConfig, deviceConfig):
|
||||
ImageHandler.configure(self, imageConfig, deviceConfig)
|
||||
|
||||
self.memmap = sxp.child_value(imageConfig, 'memmap')
|
||||
|
||||
self.dmargs = self.parseDeviceModelArgs(imageConfig, deviceConfig)
|
||||
self.device_model = sxp.child_value(imageConfig, 'device_model')
|
||||
if not self.device_model:
|
||||
raise VmError("vmx: missing device model")
|
||||
self.display = sxp.child_value(imageConfig, 'display')
|
||||
|
||||
self.vm.storeVm(("image/memmap", self.memmap),
|
||||
("image/dmargs", " ".join(self.dmargs)),
|
||||
self.vm.storeVm(("image/dmargs", " ".join(self.dmargs)),
|
||||
("image/device-model", self.device_model),
|
||||
("image/display", self.display))
|
||||
|
||||
self.device_channel = None
|
||||
self.pid = 0
|
||||
self.memmap_value = []
|
||||
|
||||
self.dmargs += self.configVNC(imageConfig)
|
||||
|
||||
@@ -261,7 +258,6 @@ class VmxImageHandler(ImageHandler):
|
||||
def createImage(self):
|
||||
"""Create a VM for the VMX environment.
|
||||
"""
|
||||
self.parseMemmap()
|
||||
self.createDomain()
|
||||
|
||||
def buildDomain(self):
|
||||
@@ -278,9 +274,6 @@ class VmxImageHandler(ImageHandler):
|
||||
log.debug("control_evtchn = %d", self.device_channel.port2)
|
||||
log.debug("store_evtchn = %d", store_evtchn)
|
||||
log.debug("memsize = %d", self.vm.getMemoryTarget() / 1024)
|
||||
log.debug("memmap = %s", self.memmap_value)
|
||||
log.debug("cmdline = %s", self.cmdline)
|
||||
log.debug("ramdisk = %s", self.ramdisk)
|
||||
log.debug("flags = %d", self.flags)
|
||||
log.debug("vcpus = %d", self.vm.getVCpuCount())
|
||||
|
||||
@@ -289,9 +282,6 @@ class VmxImageHandler(ImageHandler):
|
||||
control_evtchn = self.device_channel.port2,
|
||||
store_evtchn = store_evtchn,
|
||||
memsize = self.vm.getMemoryTarget() / 1024,
|
||||
memmap = self.memmap_value,
|
||||
cmdline = self.cmdline,
|
||||
ramdisk = self.ramdisk,
|
||||
flags = self.flags,
|
||||
vcpus = self.vm.getVCpuCount())
|
||||
if isinstance(ret, dict):
|
||||
@@ -299,18 +289,11 @@ class VmxImageHandler(ImageHandler):
|
||||
return 0
|
||||
return ret
|
||||
|
||||
def parseMemmap(self):
|
||||
if self.memmap is None:
|
||||
return
|
||||
memmap = sxp.parse(open(self.memmap))[0]
|
||||
from xen.util.memmap import memmap_parse
|
||||
self.memmap_value = memmap_parse(memmap)
|
||||
|
||||
# Return a list of cmd line args to the device models based on the
|
||||
# xm config file
|
||||
def parseDeviceModelArgs(self, imageConfig, deviceConfig):
|
||||
dmargs = [ 'cdrom', 'boot', 'fda', 'fdb',
|
||||
'localtime', 'serial', 'stdvga', 'isa', 'vcpus' ]
|
||||
'localtime', 'serial', 'stdvga', 'isa', 'vcpus' ]
|
||||
ret = []
|
||||
for a in dmargs:
|
||||
v = sxp.child_value(imageConfig, a)
|
||||
|
||||