Re: [Qemu-devel] [PATCH v3 01/16] Introduce probe mode for machine type none

2015-03-05 Thread Michael Mueller
On Wed, 4 Mar 2015 16:19:25 -0300
Eduardo Habkost ehabk...@redhat.com wrote:

 On Tue, Mar 03, 2015 at 11:55:24AM +0100, Michael Mueller wrote:
  On Mon, 02 Mar 2015 17:57:01 +0100
  Andreas Färber afaer...@suse.de wrote:
  
   Am 02.03.2015 um 17:43 schrieb Michael Mueller:
On Mon, 02 Mar 2015 14:57:21 +0100
Andreas Färber afaer...@suse.de wrote:

 int configure_accelerator(MachineState *ms)
 {
-const char *p;
+const char *p, *name;
 char buf[10];
 int ret;
 bool accel_initialised = false;
 bool init_failed = false;
 AccelClass *acc = NULL;
+ObjectClass *oc;
+bool probe_mode = false;
 
 p = qemu_opt_get(qemu_get_machine_opts(), accel);
 if (p == NULL) {
-/* Use the default accelerator, tcg */
-p = tcg;
+oc = (ObjectClass *) MACHINE_GET_CLASS(current_machine);
+name = object_class_get_name(oc);
+probe_mode = !strcmp(name, none TYPE_MACHINE_SUFFIX);
+if (probe_mode) {
+/* Use these accelerators in probe mode, tcg should be 
last */
+p = probe_mode_accels;
+} else {
+/* Use the default accelerator, tcg */
+p = tcg;
+}
 }  
   
Can't we instead use an explicit ,accel=probe or ,accel=auto?
That would then obsolete the next patch.

How would you express the following with the accel=pseudo-accel 
approach?

-probe -machine s390-ccw,accel=kvm 

Using machine none as default with tcg as last accelerator 
initialized should not break
anything.

-M none
   
   Let me ask differently: What does -machine none or -M none have to do
   with probing? It reads as if you are introducing two probe modes. Why do
  
  The machine none? nothing directly, I guess. What are real world use cases 
  for that
  machine type?
  
   you need both? If we have -probe, isn't that independent of which
  
  It is just two different means to switch on the same mode.
  
   machine we specify? Who is going to call either, with which respective 
   goal?
  
  -probe itself would be sufficient but I currently do not want to enforce 
  the use of
  a new parameter. Best would be not to have that mode at all if possible. 
  
  The intended use case is driven by management interfaces that need to draw 
  decisions
  on, in this particular case runnable cpu models, with information 
  originated by qemu.
  
  Let me walk through Eduardo's suggestion first and crosscheck it with my 
  requirements
  before we enter in a maybe afterwards obsolete discussion.
 
 I have been working on some changes to implement x86 CPU probing code
 that creates accel objects on the fly, that may be useful. See:
   https://github.com/ehabkost/qemu-hacks/tree/work/user-accel-init
 
 Especially the commit:
   kvm: Move /dev/kvm opening/closing to open/close methods
 

So the idea is to use kvm_open/close() in the query-cpu-definitions callback on 
the fly without
to disturb the KVM-side data structures for the machine probe instead of going 
through kvm_init()
during accelerator configuration?


 The next steps I plan are:
  * Create AccelState object on TCG too, and somehow pass it as argument
to cpu_x86_init()
  * Change all kvm_enabled() occurrences on target-i386/cpu.c to use
the provided accel object (including
x86_cpu_get_supported_feature_word() and x86_cpu_filter_features())
  * Use the new
x86_cpu_get_supported_feature_word()/x86_cpu_filter_features() code
to implement a is_runnable(X86CPUClass*, AccelState*) check
  * Use the new is_runnable() check to extend query-cpu-definitions for x86 too
  * Add -cpu string and machine-type arguments to the is_runnable() check
 

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Qemu-devel] [PATCH v3 01/16] Introduce probe mode for machine type none

2015-03-05 Thread Eduardo Habkost
On Thu, Mar 05, 2015 at 03:56:03PM +0100, Michael Mueller wrote:
 On Wed, 4 Mar 2015 16:19:25 -0300
 Eduardo Habkost ehabk...@redhat.com wrote:
 
  On Tue, Mar 03, 2015 at 11:55:24AM +0100, Michael Mueller wrote:
   On Mon, 02 Mar 2015 17:57:01 +0100
   Andreas Färber afaer...@suse.de wrote:
   
Am 02.03.2015 um 17:43 schrieb Michael Mueller:
 On Mon, 02 Mar 2015 14:57:21 +0100
 Andreas Färber afaer...@suse.de wrote:
 
  int configure_accelerator(MachineState *ms)
  {
 -const char *p;
 +const char *p, *name;
  char buf[10];
  int ret;
  bool accel_initialised = false;
  bool init_failed = false;
  AccelClass *acc = NULL;
 +ObjectClass *oc;
 +bool probe_mode = false;
  
  p = qemu_opt_get(qemu_get_machine_opts(), accel);
  if (p == NULL) {
 -/* Use the default accelerator, tcg */
 -p = tcg;
 +oc = (ObjectClass *) MACHINE_GET_CLASS(current_machine);
 +name = object_class_get_name(oc);
 +probe_mode = !strcmp(name, none TYPE_MACHINE_SUFFIX);
 +if (probe_mode) {
 +/* Use these accelerators in probe mode, tcg should be 
 last */
 +p = probe_mode_accels;
 +} else {
 +/* Use the default accelerator, tcg */
 +p = tcg;
 +}
  }  

 Can't we instead use an explicit ,accel=probe or ,accel=auto?
 That would then obsolete the next patch.
 
 How would you express the following with the accel=pseudo-accel 
 approach?
 
 -probe -machine s390-ccw,accel=kvm 
 
 Using machine none as default with tcg as last accelerator 
 initialized should not break
 anything.
 
 -M none

Let me ask differently: What does -machine none or -M none have to do
with probing? It reads as if you are introducing two probe modes. Why do
   
   The machine none? nothing directly, I guess. What are real world use 
   cases for that
   machine type?
   
you need both? If we have -probe, isn't that independent of which
   
   It is just two different means to switch on the same mode.
   
machine we specify? Who is going to call either, with which respective 
goal?
   
   -probe itself would be sufficient but I currently do not want to enforce 
   the use of
   a new parameter. Best would be not to have that mode at all if possible. 
   
   The intended use case is driven by management interfaces that need to 
   draw decisions
   on, in this particular case runnable cpu models, with information 
   originated by qemu.
   
   Let me walk through Eduardo's suggestion first and crosscheck it with my 
   requirements
   before we enter in a maybe afterwards obsolete discussion.
  
  I have been working on some changes to implement x86 CPU probing code
  that creates accel objects on the fly, that may be useful. See:
https://github.com/ehabkost/qemu-hacks/tree/work/user-accel-init
  
  Especially the commit:
kvm: Move /dev/kvm opening/closing to open/close methods
  
 
 So the idea is to use kvm_open/close() in the query-cpu-definitions callback 
 on the fly without
 to disturb the KVM-side data structures for the machine probe instead of 
 going through kvm_init()
 during accelerator configuration?

If by KVM-side data structures you mean globals like kvm_state, yes. The
idea is to not disturb any global state during probe (including
kvm_state). In the branch above, the open/close methods will affect only
the local AccelState object. Code that will affect MachineState or other
global state will be in the machine_init method.

 
 
  The next steps I plan are: * Create AccelState object on TCG too,
   and somehow pass it as argument to cpu_x86_init() * Change all
   kvm_enabled() occurrences on target-i386/cpu.c to use the provided
   accel object (including x86_cpu_get_supported_feature_word() and
   x86_cpu_filter_features())
   * Use the new
 x86_cpu_get_supported_feature_word()/x86_cpu_filter_features()
 code to implement a is_runnable(X86CPUClass*, AccelState*) check
 * Use the new is_runnable() check to extend query-cpu-definitions
 for x86 too * Add -cpu string and machine-type arguments to the
 is_runnable() check
  
 

-- 
Eduardo
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Qemu-devel] [PATCH v3 01/16] Introduce probe mode for machine type none

2015-03-04 Thread Eduardo Habkost
On Tue, Mar 03, 2015 at 11:55:24AM +0100, Michael Mueller wrote:
 On Mon, 02 Mar 2015 17:57:01 +0100
 Andreas Färber afaer...@suse.de wrote:
 
  Am 02.03.2015 um 17:43 schrieb Michael Mueller:
   On Mon, 02 Mar 2015 14:57:21 +0100
   Andreas Färber afaer...@suse.de wrote:
   
int configure_accelerator(MachineState *ms)
{
   -const char *p;
   +const char *p, *name;
char buf[10];
int ret;
bool accel_initialised = false;
bool init_failed = false;
AccelClass *acc = NULL;
   +ObjectClass *oc;
   +bool probe_mode = false;

p = qemu_opt_get(qemu_get_machine_opts(), accel);
if (p == NULL) {
   -/* Use the default accelerator, tcg */
   -p = tcg;
   +oc = (ObjectClass *) MACHINE_GET_CLASS(current_machine);
   +name = object_class_get_name(oc);
   +probe_mode = !strcmp(name, none TYPE_MACHINE_SUFFIX);
   +if (probe_mode) {
   +/* Use these accelerators in probe mode, tcg should be 
   last */
   +p = probe_mode_accels;
   +} else {
   +/* Use the default accelerator, tcg */
   +p = tcg;
   +}
}  
  
   Can't we instead use an explicit ,accel=probe or ,accel=auto?
   That would then obsolete the next patch.
   
   How would you express the following with the accel=pseudo-accel 
   approach?
   
   -probe -machine s390-ccw,accel=kvm 
   
   Using machine none as default with tcg as last accelerator initialized 
   should not break
   anything.
   
   -M none
  
  Let me ask differently: What does -machine none or -M none have to do
  with probing? It reads as if you are introducing two probe modes. Why do
 
 The machine none? nothing directly, I guess. What are real world use cases 
 for that
 machine type?
 
  you need both? If we have -probe, isn't that independent of which
 
 It is just two different means to switch on the same mode.
 
  machine we specify? Who is going to call either, with which respective goal?
 
 -probe itself would be sufficient but I currently do not want to enforce the 
 use of
 a new parameter. Best would be not to have that mode at all if possible. 
 
 The intended use case is driven by management interfaces that need to draw 
 decisions
 on, in this particular case runnable cpu models, with information originated 
 by qemu.
 
 Let me walk through Eduardo's suggestion first and crosscheck it with my 
 requirements
 before we enter in a maybe afterwards obsolete discussion.

I have been working on some changes to implement x86 CPU probing code
that creates accel objects on the fly, that may be useful. See:
  https://github.com/ehabkost/qemu-hacks/tree/work/user-accel-init

Especially the commit:
  kvm: Move /dev/kvm opening/closing to open/close methods

The next steps I plan are:
 * Create AccelState object on TCG too, and somehow pass it as argument
   to cpu_x86_init()
 * Change all kvm_enabled() occurrences on target-i386/cpu.c to use
   the provided accel object (including
   x86_cpu_get_supported_feature_word() and x86_cpu_filter_features())
 * Use the new
   x86_cpu_get_supported_feature_word()/x86_cpu_filter_features() code
   to implement a is_runnable(X86CPUClass*, AccelState*) check
 * Use the new is_runnable() check to extend query-cpu-definitions for x86 too
 * Add -cpu string and machine-type arguments to the is_runnable() check

-- 
Eduardo
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Qemu-devel] [PATCH v3 01/16] Introduce probe mode for machine type none

2015-03-03 Thread Michael Mueller
On Mon, 2 Mar 2015 16:17:33 -0300
Eduardo Habkost ehabk...@redhat.com wrote:

  +if (probe_mode) {
  +/* Use these accelerators in probe mode, tcg should be last */
  +p = probe_mode_accels;  
 
 I don't fully understand the purpose of this patch yet (I will discuss
 it in a reply to the cover letter). But if you really want -machine none
 to trigger different behavior, why you didn't add a probe_mode field
 to MachineClass, so you can set it in the mahine_none class code?

I initially had this machine attribute but, when I remember correctly, but 
wasn't able to
communicate it down into the target code. But anyhow, the mode is eventually 
obsolete in light
of the temporarily constructed accelerators.. I will further comment on this as 
reply to your
comment on the cover letter to keep it in place.

Michael

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Qemu-devel] [PATCH v3 01/16] Introduce probe mode for machine type none

2015-03-03 Thread Michael Mueller
On Mon, 02 Mar 2015 17:57:01 +0100
Andreas Färber afaer...@suse.de wrote:

 Am 02.03.2015 um 17:43 schrieb Michael Mueller:
  On Mon, 02 Mar 2015 14:57:21 +0100
  Andreas Färber afaer...@suse.de wrote:
  
   int configure_accelerator(MachineState *ms)
   {
  -const char *p;
  +const char *p, *name;
   char buf[10];
   int ret;
   bool accel_initialised = false;
   bool init_failed = false;
   AccelClass *acc = NULL;
  +ObjectClass *oc;
  +bool probe_mode = false;
   
   p = qemu_opt_get(qemu_get_machine_opts(), accel);
   if (p == NULL) {
  -/* Use the default accelerator, tcg */
  -p = tcg;
  +oc = (ObjectClass *) MACHINE_GET_CLASS(current_machine);
  +name = object_class_get_name(oc);
  +probe_mode = !strcmp(name, none TYPE_MACHINE_SUFFIX);
  +if (probe_mode) {
  +/* Use these accelerators in probe mode, tcg should be last 
  */
  +p = probe_mode_accels;
  +} else {
  +/* Use the default accelerator, tcg */
  +p = tcg;
  +}
   }  
 
  Can't we instead use an explicit ,accel=probe or ,accel=auto?
  That would then obsolete the next patch.
  
  How would you express the following with the accel=pseudo-accel approach?
  
  -probe -machine s390-ccw,accel=kvm 
  
  Using machine none as default with tcg as last accelerator initialized 
  should not break
  anything.
  
  -M none
 
 Let me ask differently: What does -machine none or -M none have to do
 with probing? It reads as if you are introducing two probe modes. Why do

The machine none? nothing directly, I guess. What are real world use cases for 
that
machine type?

 you need both? If we have -probe, isn't that independent of which

It is just two different means to switch on the same mode.

 machine we specify? Who is going to call either, with which respective goal?

-probe itself would be sufficient but I currently do not want to enforce the 
use of
a new parameter. Best would be not to have that mode at all if possible. 

The intended use case is driven by management interfaces that need to draw 
decisions
on, in this particular case runnable cpu models, with information originated by 
qemu.

Let me walk through Eduardo's suggestion first and crosscheck it with my 
requirements
before we enter in a maybe afterwards obsolete discussion.

Thanks,
Michael

 
 I think that changing the semantics of an absent ,accel=foo parameter to
 mean something else than its longtime default of tcg is a bad idea.

 Have you testing qtest with it? Doesn't -qtest imply accel=qtest or is
 that always passed explicitly?
 
 Regards,
 Andreas
 

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Qemu-devel] [PATCH v3 01/16] Introduce probe mode for machine type none

2015-03-02 Thread Michael Mueller
On Mon, 02 Mar 2015 14:57:21 +0100
Andreas Färber afaer...@suse.de wrote:

   int configure_accelerator(MachineState *ms)
   {
  -const char *p;
  +const char *p, *name;
   char buf[10];
   int ret;
   bool accel_initialised = false;
   bool init_failed = false;
   AccelClass *acc = NULL;
  +ObjectClass *oc;
  +bool probe_mode = false;
   
   p = qemu_opt_get(qemu_get_machine_opts(), accel);
   if (p == NULL) {
  -/* Use the default accelerator, tcg */
  -p = tcg;
  +oc = (ObjectClass *) MACHINE_GET_CLASS(current_machine);
  +name = object_class_get_name(oc);
  +probe_mode = !strcmp(name, none TYPE_MACHINE_SUFFIX);
  +if (probe_mode) {
  +/* Use these accelerators in probe mode, tcg should be last */
  +p = probe_mode_accels;
  +} else {
  +/* Use the default accelerator, tcg */
  +p = tcg;
  +}
   }  
 
 Can't we instead use an explicit ,accel=probe or ,accel=auto?
 That would then obsolete the next patch.

How would you express the following with the accel=pseudo-accel approach?

-probe -machine s390-ccw,accel=kvm 

Using machine none as default with tcg as last accelerator initialized should 
not break
anything.

-M none

The return code of configure_accelerator() is ignored anyway.

Thanks,
Michael

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [Qemu-devel] [PATCH v3 01/16] Introduce probe mode for machine type none

2015-03-02 Thread Andreas Färber
Am 02.03.2015 um 17:43 schrieb Michael Mueller:
 On Mon, 02 Mar 2015 14:57:21 +0100
 Andreas Färber afaer...@suse.de wrote:
 
  int configure_accelerator(MachineState *ms)
  {
 -const char *p;
 +const char *p, *name;
  char buf[10];
  int ret;
  bool accel_initialised = false;
  bool init_failed = false;
  AccelClass *acc = NULL;
 +ObjectClass *oc;
 +bool probe_mode = false;
  
  p = qemu_opt_get(qemu_get_machine_opts(), accel);
  if (p == NULL) {
 -/* Use the default accelerator, tcg */
 -p = tcg;
 +oc = (ObjectClass *) MACHINE_GET_CLASS(current_machine);
 +name = object_class_get_name(oc);
 +probe_mode = !strcmp(name, none TYPE_MACHINE_SUFFIX);
 +if (probe_mode) {
 +/* Use these accelerators in probe mode, tcg should be last */
 +p = probe_mode_accels;
 +} else {
 +/* Use the default accelerator, tcg */
 +p = tcg;
 +}
  }  

 Can't we instead use an explicit ,accel=probe or ,accel=auto?
 That would then obsolete the next patch.
 
 How would you express the following with the accel=pseudo-accel approach?
 
 -probe -machine s390-ccw,accel=kvm 
 
 Using machine none as default with tcg as last accelerator initialized 
 should not break
 anything.
 
 -M none

Let me ask differently: What does -machine none or -M none have to do
with probing? It reads as if you are introducing two probe modes. Why do
you need both? If we have -probe, isn't that independent of which
machine we specify? Who is going to call either, with which respective goal?

I think that changing the semantics of an absent ,accel=foo parameter to
mean something else than its longtime default of tcg is a bad idea.

Have you testing qtest with it? Doesn't -qtest imply accel=qtest or is
that always passed explicitly?

Regards,
Andreas

-- 
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu,
Graham Norton; HRB 21284 (AG Nürnberg)
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html