On Sun, 09 Jun 2013 03:11:35 +0200 Andreas Färber <afaer...@suse.de> wrote:
> Am 07.06.2013 19:28, schrieb Jason J. Herne: > > From: "Jason J. Herne" <jjhe...@us.ibm.com> > > > > Modify cpu initialization and QOM routines associated with s390-cpu such > > that > > all cpus on S390 are now created via the QOM device creation code path. > > > > Signed-off-by: Jason J. Herne <jjhe...@us.ibm.com> > > --- > > hw/s390x/s390-virtio-ccw.c | 15 ++++++++++----- > > hw/s390x/s390-virtio.c | 25 +++++-------------------- > > hw/s390x/s390-virtio.h | 2 +- > > include/qapi/qmp/qerror.h | 3 +++ > > qdev-monitor.c | 17 +++++++++++++++++ > > target-s390x/cpu.c | 24 ++++++++++++++++++++++-- > > 6 files changed, 58 insertions(+), 28 deletions(-) > > > > diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c > > index 70bd858..141adce 100644 > > --- a/hw/s390x/s390-virtio-ccw.c > > +++ b/hw/s390x/s390-virtio-ccw.c > > @@ -95,12 +95,8 @@ static void ccw_init(QEMUMachineInitArgs *args) > > /* allocate storage keys */ > > s390_set_storage_keys_p(g_malloc0(my_ram_size / TARGET_PAGE_SIZE)); > > > > - /* init CPUs */ > > - s390_init_cpus(args->cpu_model); > > + s390_init_ipi_states(); > > > > - if (kvm_enabled()) { > > - kvm_s390_enable_css_support(s390_cpu_addr2state(0)); > > - } > > /* > > * Create virtual css and set it as default so that non mcss-e > > * enabled guests only see virtio devices. > > @@ -112,11 +108,20 @@ static void ccw_init(QEMUMachineInitArgs *args) > > s390_create_virtio_net(BUS(css_bus), "virtio-net-ccw"); > > } > > > > +static void ccw_post_cpu_init(void) > > +{ > > + if (kvm_enabled()) { > > + kvm_s390_enable_css_support(s390_cpu_addr2state(0)); > > + } > > +} > > Am I understanding correctly that all this is about differentiating one > call between the ccw and legacy machines? > > Isn't there a machine-init-done Notifier that the ccw machine init could > register for? I wasn't aware of that, but it looks worth a try. > > What if CPU 0 were hot-unplugged? Would the capability need to be > re-enabled or will this remain a one-time task? KVM_ENABLE_CAP is a vcpu ioctl, but we use it to enable a machine-wide capability (which will stay enabled during the lifetime of the machine). (It probably should be "any cpu" instead of "cpu 0", but that's probably not the only place doing that.)