From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33828) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YTXCK-0007Qb-IF for qemu-devel@nongnu.org; Thu, 05 Mar 2015 09:56:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YTXCG-00004q-E2 for qemu-devel@nongnu.org; Thu, 05 Mar 2015 09:56:24 -0500 Received: from e06smtp15.uk.ibm.com ([195.75.94.111]:45420) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YTXCG-0008Vc-55 for qemu-devel@nongnu.org; Thu, 05 Mar 2015 09:56:20 -0500 Received: from /spool/local by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 5 Mar 2015 14:56:17 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp02.portsmouth.uk.ibm.com (Postfix) with ESMTP id 410A22190046 for ; Thu, 5 Mar 2015 14:56:06 +0000 (GMT) Received: from d06av02.portsmouth.uk.ibm.com (d06av02.portsmouth.uk.ibm.com [9.149.37.228]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t25EuEJD55116006 for ; Thu, 5 Mar 2015 14:56:14 GMT Received: from d06av02.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av02.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t25Eu6jd012334 for ; Thu, 5 Mar 2015 07:56:13 -0700 Date: Thu, 5 Mar 2015 15:56:03 +0100 From: Michael Mueller Message-ID: <20150305155603.356b5ae7@bee> In-Reply-To: <20150304191925.GD13041@thinpad.lan.raisama.net> References: <1425300248-40277-1-git-send-email-mimu@linux.vnet.ibm.com> <1425300248-40277-2-git-send-email-mimu@linux.vnet.ibm.com> <54F46C41.3000201@suse.de> <20150302174352.3715f1e4@bee> <54F4965D.7000701@suse.de> <20150303115524.40bd40b0@bee> <20150304191925.GD13041@thinpad.lan.raisama.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v3 01/16] Introduce probe mode for machine type none List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eduardo Habkost Cc: linux-s390@vger.kernel.org, Peter Crosthwaite , kvm@vger.kernel.org, Gleb Natapov , linux-kernel@vger.kernel.org, qemu-devel@nongnu.org, Christian Borntraeger , Alexander Graf , "Jason J. Herne" , "Edgar E. Iglesias" , Cornelia Huck , Paolo Bonzini , Alistair Francis , Andreas =?UTF-8?B?RsOkcmJlcg==?= , Richard Henderson On Wed, 4 Mar 2015 16:19:25 -0300 Eduardo Habkost 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=C3=A4rber wrote: > >=20 > > > Am 02.03.2015 um 17:43 schrieb Michael Mueller: > > > > On Mon, 02 Mar 2015 14:57:21 +0100 > > > > Andreas F=C3=A4rber wrote: > > > >=20 > > > >>> int configure_accelerator(MachineState *ms) > > > >>> { > > > >>> - const char *p; > > > >>> + const char *p, *name; > > > >>> char buf[10]; > > > >>> int ret; > > > >>> bool accel_initialised =3D false; > > > >>> bool init_failed =3D false; > > > >>> AccelClass *acc =3D NULL; > > > >>> + ObjectClass *oc; > > > >>> + bool probe_mode =3D false; > > > >>> =20 > > > >>> p =3D qemu_opt_get(qemu_get_machine_opts(), "accel"); > > > >>> if (p =3D=3D NULL) { > > > >>> - /* Use the default "accelerator", tcg */ > > > >>> - p =3D "tcg"; > > > >>> + oc =3D (ObjectClass *) MACHINE_GET_CLASS(current_machine= ); > > > >>> + name =3D object_class_get_name(oc); > > > >>> + probe_mode =3D !strcmp(name, "none" TYPE_MACHINE_SUFFIX); > > > >>> + if (probe_mode) { > > > >>> + /* Use these accelerators in probe mode, tcg should = be last */ > > > >>> + p =3D probe_mode_accels; > > > >>> + } else { > > > >>> + /* Use the default "accelerator", tcg */ > > > >>> + p =3D "tcg"; > > > >>> + } > > > >>> } =20 > > > >> > > > >> Can't we instead use an explicit ,accel=3Dprobe or ,accel=3Dauto? > > > >> That would then obsolete the next patch. > > > >=20 > > > > How would you express the following with the accel=3D= approach? > > > >=20 > > > > -probe -machine s390-ccw,accel=3Dkvm=20 > > > >=20 > > > > Using machine "none" as default with tcg as last accelerator initia= lized should not break > > > > anything. > > > >=20 > > > > -M none > > >=20 > > > 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 > >=20 > > The machine none? nothing directly, I guess. What are real world use ca= ses for that > > machine type? > >=20 > > > you need both? If we have -probe, isn't that independent of which > >=20 > > It is just two different means to switch on the same mode. > >=20 > > > machine we specify? Who is going to call either, with which respectiv= e goal? > >=20 > > -probe itself would be sufficient but I currently do not want to enforc= e the use of > > a new parameter. Best would be not to have that mode at all if possible= .=20 > >=20 > > The intended use case is driven by management interfaces that need to d= raw decisions > > on, in this particular case runnable cpu models, with information origi= nated by qemu. > >=20 > > Let me walk through Eduardo's suggestion first and crosscheck it with m= y requirements > > before we enter in a maybe afterwards obsolete discussion. >=20 > 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 >=20 > Especially the commit: > kvm: Move /dev/kvm opening/closing to open/close methods >=20 So the idea is to use kvm_open/close() in the query-cpu-definitions callbac= k on the fly without to disturb the KVM-side data structures for the machine probe instead of go= ing 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 x8= 6 too > * Add -cpu string and machine-type arguments to the is_runnable() check >=20