|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC] tools: Drop xc_cpuid_check() and bindings
There are no current users which I can locate. One piece of xend which didn't
move forwards into xl/libxl is this:
# Configure host CPUID consistency checks, which must be satisfied for this
# VM to be allowed to run on this host's processor type:
#cpuid_check=[ '1:ecx=xxxxxxxxxxxxxxxxxxxxxxxxxx1xxxxx' ]
# - Host must have VMX feature flag set
The implementation of xc_cpuid_check() is conceptually broken. Dom0's view of
CPUID is not the approprite view to check, and will be wrong in the presence
of CPUID masking/faulting, and for HVM-based toolstack domains.
If it turns out that the functionality is required, it should be implemented
in terms of XEN_SYSCTL_get_cpuid_policy to use the proper CPUID view.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
CC: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
CC: David Scott <dave@xxxxxxxxxx>
CC: Christian Lindig <christian.lindig@xxxxxxxxxx>
CC: Juergen Gross <jgross@xxxxxxxx>
CC: Jim Fehlig <jfehlig@xxxxxxxx>
CC: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
CC: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
RFC initially for feedback, and to see if anyone does expect to be using this
call. It turns out that Xapi has a library function using it, but that
function is dead so can be removed.
---
tools/libxc/include/xenctrl.h | 4 ---
tools/libxc/xc_cpuid_x86.c | 57 -------------------------------------
tools/ocaml/libs/xc/xenctrl.ml | 2 --
tools/ocaml/libs/xc/xenctrl.mli | 3 --
tools/ocaml/libs/xc/xenctrl_stubs.c | 43 ----------------------------
tools/python/xen/lowlevel/xc/xc.c | 34 ----------------------
6 files changed, 143 deletions(-)
diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index 96df836..acd778c 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -1793,10 +1793,6 @@ int xc_domain_debug_control(xc_interface *xch,
uint32_t vcpu);
#if defined(__i386__) || defined(__x86_64__)
-int xc_cpuid_check(xc_interface *xch,
- const unsigned int *input,
- const char **config,
- char **config_transformed);
int xc_cpuid_set(xc_interface *xch,
domid_t domid,
const unsigned int *input,
diff --git a/tools/libxc/xc_cpuid_x86.c b/tools/libxc/xc_cpuid_x86.c
index 6f82277..d1d0b51 100644
--- a/tools/libxc/xc_cpuid_x86.c
+++ b/tools/libxc/xc_cpuid_x86.c
@@ -855,63 +855,6 @@ int xc_cpuid_apply_policy(xc_interface *xch, domid_t domid,
}
/*
- * Check whether a VM is allowed to launch on this host's processor type.
- *
- * @config format is similar to that of xc_cpuid_set():
- * '1' -> the bit must be set to 1
- * '0' -> must be 0
- * 'x' -> we don't care
- * 's' -> (same) must be the same
- */
-int xc_cpuid_check(
- xc_interface *xch, const unsigned int *input,
- const char **config,
- char **config_transformed)
-{
- int i, j, rc;
- unsigned int regs[4];
-
- memset(config_transformed, 0, 4 * sizeof(*config_transformed));
-
- cpuid(input, regs);
-
- for ( i = 0; i < 4; i++ )
- {
- if ( config[i] == NULL )
- continue;
- config_transformed[i] = alloc_str();
- if ( config_transformed[i] == NULL )
- {
- rc = -ENOMEM;
- goto fail_rc;
- }
- for ( j = 0; j < 32; j++ )
- {
- unsigned char val = !!((regs[i] & (1U << (31 - j))));
- if ( !strchr("10xs", config[i][j]) ||
- ((config[i][j] == '1') && !val) ||
- ((config[i][j] == '0') && val) )
- goto fail;
- config_transformed[i][j] = config[i][j];
- if ( config[i][j] == 's' )
- config_transformed[i][j] = '0' + val;
- }
- }
-
- return 0;
-
- fail:
- rc = -EPERM;
- fail_rc:
- for ( i = 0; i < 4; i++ )
- {
- free(config_transformed[i]);
- config_transformed[i] = NULL;
- }
- return rc;
-}
-
-/*
* Configure a single input with the informatiom from config.
*
* Config is an array of strings:
diff --git a/tools/ocaml/libs/xc/xenctrl.ml b/tools/ocaml/libs/xc/xenctrl.ml
index 75006e7..70a325b 100644
--- a/tools/ocaml/libs/xc/xenctrl.ml
+++ b/tools/ocaml/libs/xc/xenctrl.ml
@@ -218,8 +218,6 @@ external domain_cpuid_set: handle -> domid -> (int64 *
(int64 option))
= "stub_xc_domain_cpuid_set"
external domain_cpuid_apply_policy: handle -> domid -> unit
= "stub_xc_domain_cpuid_apply_policy"
-external cpuid_check: handle -> (int64 * (int64 option)) -> string option
array -> (bool * string option array)
- = "stub_xc_cpuid_check"
external map_foreign_range: handle -> domid -> int
-> nativeint -> Xenmmap.mmap_interface
diff --git a/tools/ocaml/libs/xc/xenctrl.mli b/tools/ocaml/libs/xc/xenctrl.mli
index 720e4b2..702d8a7 100644
--- a/tools/ocaml/libs/xc/xenctrl.mli
+++ b/tools/ocaml/libs/xc/xenctrl.mli
@@ -179,6 +179,3 @@ external domain_cpuid_set: handle -> domid -> (int64 *
(int64 option))
= "stub_xc_domain_cpuid_set"
external domain_cpuid_apply_policy: handle -> domid -> unit
= "stub_xc_domain_cpuid_apply_policy"
-external cpuid_check: handle -> (int64 * (int64 option)) -> string option
array -> (bool * string option array)
- = "stub_xc_cpuid_check"
-
diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c
b/tools/ocaml/libs/xc/xenctrl_stubs.c
index f1b28db..c66732f 100644
--- a/tools/ocaml/libs/xc/xenctrl_stubs.c
+++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
@@ -805,49 +805,6 @@ CAMLprim value stub_xc_domain_cpuid_apply_policy(value
xch, value domid)
CAMLreturn(Val_unit);
}
-CAMLprim value stub_xc_cpuid_check(value xch, value input, value config)
-{
- CAMLparam3(xch, input, config);
- CAMLlocal3(ret, array, tmp);
-#if defined(__i386__) || defined(__x86_64__)
- int r;
- unsigned int c_input[2];
- char *c_config[4], *out_config[4];
-
- c_config[0] = string_of_option_array(config, 0);
- c_config[1] = string_of_option_array(config, 1);
- c_config[2] = string_of_option_array(config, 2);
- c_config[3] = string_of_option_array(config, 3);
-
- cpuid_input_of_val(c_input[0], c_input[1], input);
-
- array = caml_alloc(4, 0);
- for (r = 0; r < 4; r++) {
- tmp = Val_none;
- if (c_config[r]) {
- tmp = caml_alloc_small(1, 0);
- Field(tmp, 0) = caml_alloc_string(32);
- }
- Store_field(array, r, tmp);
- }
-
- for (r = 0; r < 4; r++)
- out_config[r] = (c_config[r]) ? String_val(Field(Field(array,
r), 0)) : NULL;
-
- r = xc_cpuid_check(_H(xch), c_input, (const char **)c_config,
out_config);
- if (r < 0)
- failwith_xc(_H(xch));
-
- ret = caml_alloc_tuple(2);
- Store_field(ret, 0, Val_bool(r));
- Store_field(ret, 1, array);
-
-#else
- caml_failwith("xc_domain_cpuid_check: not implemented");
-#endif
- CAMLreturn(ret);
-}
-
CAMLprim value stub_xc_version_version(value xch)
{
CAMLparam1(xch);
diff --git a/tools/python/xen/lowlevel/xc/xc.c
b/tools/python/xen/lowlevel/xc/xc.c
index 5d112af..aa9f8e4 100644
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -711,29 +711,6 @@ static PyObject *pyxc_create_cpuid_dict(char **regs)
return dict;
}
-static PyObject *pyxc_dom_check_cpuid(XcObject *self,
- PyObject *args)
-{
- PyObject *sub_input, *config;
- unsigned int input[2];
- char *regs[4], *regs_transform[4];
-
- if ( !PyArg_ParseTuple(args, "iOO", &input[0], &sub_input, &config) )
- return NULL;
-
- pyxc_dom_extract_cpuid(config, regs);
-
- input[1] = XEN_CPUID_INPUT_UNUSED;
- if ( PyLong_Check(sub_input) )
- input[1] = PyLong_AsUnsignedLong(sub_input);
-
- if ( xc_cpuid_check(self->xc_handle, input,
- (const char **)regs, regs_transform) )
- return pyxc_error_to_exception(self->xc_handle);
-
- return pyxc_create_cpuid_dict(regs_transform);
-}
-
static PyObject *pyxc_dom_set_policy_cpuid(XcObject *self,
PyObject *args)
{
@@ -2467,17 +2444,6 @@ static PyMethodDef pyxc_methods[] = {
" keys [str]: String of keys to inject.\n" },
#if defined(__i386__) || defined(__x86_64__)
- { "domain_check_cpuid",
- (PyCFunction)pyxc_dom_check_cpuid,
- METH_VARARGS, "\n"
- "Apply checks to host CPUID.\n"
- " input [long]: Input for cpuid instruction (eax)\n"
- " sub_input [long]: Second input (optional, may be None) for cpuid "
- " instruction (ecx)\n"
- " config [dict]: Dictionary of register\n"
- " config [dict]: Dictionary of register, use for checking\n\n"
- "Returns: [int] 0 on success; exception on error.\n" },
-
{ "domain_set_cpuid",
(PyCFunction)pyxc_dom_set_cpuid,
METH_VARARGS, "\n"
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |