Message ID | 1326806230-2734-4-git-send-email-imammedo@redhat.com |
---|---|
State | New |
Headers | show |
On 2012-01-17 14:17, Igor Mammedov wrote: > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > --- > qapi-schema.json | 9 +++++++++ > qmp-commands.hx | 26 ++++++++++++++++++++++++++ > qmp.c | 15 +++++++++++++++ > 3 files changed, 50 insertions(+), 0 deletions(-) > > diff --git a/qapi-schema.json b/qapi-schema.json > index 44cf764..05cc582 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -903,6 +903,15 @@ > { 'command': 'cpu', 'data': {'index': 'int'} } > > ## > +# @cpu_set > +# > +# Sets specified cpu to online/ofline mode > +# > +# Notes: semantics is : cpu_set x online|offline > +## > +{ 'command': 'cpu_set', 'data': {'cpu_index': 'int', 'status': 'str'} } > + > +## > # @memsave: > # > # Save a portion of guest memory to a file. > diff --git a/qmp-commands.hx b/qmp-commands.hx > index 7e3f4b9..ef1ac1e 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -348,6 +348,32 @@ Note: CPUs' indexes are obtained with the 'query-cpus' command. > EQMP > > { > + .name = "cpu_set", > + .args_type = "cpu_index:i,status:s", > + .mhandler.cmd_new = qmp_marshal_input_cpu_set, > + }, > + > +SQMP > +cpu_set > +------- > + > +Sets virtual cpu to online/ofline state > + > +Arguments: > + > +- "cpu_index": virtual cpu index (json-int) > +- "status": desired state of cpu, online/offline (json-string) > + > +Example: > + > +-> { "execute": "cpu_set", > + "arguments": { "cpu_index": 2, > + "status": "online" } } > +<- { "return": {} } > + > +EQMP > + > + { > .name = "memsave", > .args_type = "val:l,size:i,filename:s,cpu:i?", > .mhandler.cmd_new = qmp_marshal_input_memsave, > diff --git a/qmp.c b/qmp.c > index c74dde6..e2b268d 100644 > --- a/qmp.c > +++ b/qmp.c > @@ -101,6 +101,21 @@ void qmp_cpu(int64_t index, Error **errp) > /* Just do nothing */ > } > > +void qmp_cpu_set(int64_t cpu_index, const char *status, Error **errp) > +{ > + int state; > + > + if (!strcmp(status, "online")) { > + state = 1; > + } else if (!strcmp(status, "offline")) { > + state = 0; > + } else { > + error_set(errp, QERR_INVALID_PARAMETER, status); > + return; > + } > + qemu_system_cpu_hot_add(cpu_index, state); > +} > + > #ifndef CONFIG_VNC > /* If VNC support is enabled, the "true" query-vnc command is > defined in the VNC subsystem */ This shouldn't go upstream. We rather need qdev'ified CPUs that can be added and removed as any other device. Jan
On 01/17/2012 03:18 PM, Jan Kiszka wrote: > On 2012-01-17 14:17, Igor Mammedov wrote: >> Signed-off-by: Igor Mammedov<imammedo@redhat.com> >> --- >> qapi-schema.json | 9 +++++++++ >> qmp-commands.hx | 26 ++++++++++++++++++++++++++ >> qmp.c | 15 +++++++++++++++ >> 3 files changed, 50 insertions(+), 0 deletions(-) >> >> diff --git a/qapi-schema.json b/qapi-schema.json >> index 44cf764..05cc582 100644 >> --- a/qapi-schema.json >> +++ b/qapi-schema.json >> @@ -903,6 +903,15 @@ >> { 'command': 'cpu', 'data': {'index': 'int'} } >> >> ## >> +# @cpu_set >> +# >> +# Sets specified cpu to online/ofline mode >> +# >> +# Notes: semantics is : cpu_set x online|offline >> +## >> +{ 'command': 'cpu_set', 'data': {'cpu_index': 'int', 'status': 'str'} } >> + >> +## >> # @memsave: >> # >> # Save a portion of guest memory to a file. >> diff --git a/qmp-commands.hx b/qmp-commands.hx >> index 7e3f4b9..ef1ac1e 100644 >> --- a/qmp-commands.hx >> +++ b/qmp-commands.hx >> @@ -348,6 +348,32 @@ Note: CPUs' indexes are obtained with the 'query-cpus' command. >> EQMP >> >> { >> + .name = "cpu_set", >> + .args_type = "cpu_index:i,status:s", >> + .mhandler.cmd_new = qmp_marshal_input_cpu_set, >> + }, >> + >> +SQMP >> +cpu_set >> +------- >> + >> +Sets virtual cpu to online/ofline state >> + >> +Arguments: >> + >> +- "cpu_index": virtual cpu index (json-int) >> +- "status": desired state of cpu, online/offline (json-string) >> + >> +Example: >> + >> +-> { "execute": "cpu_set", >> + "arguments": { "cpu_index": 2, >> + "status": "online" } } >> +<- { "return": {} } >> + >> +EQMP >> + >> + { >> .name = "memsave", >> .args_type = "val:l,size:i,filename:s,cpu:i?", >> .mhandler.cmd_new = qmp_marshal_input_memsave, >> diff --git a/qmp.c b/qmp.c >> index c74dde6..e2b268d 100644 >> --- a/qmp.c >> +++ b/qmp.c >> @@ -101,6 +101,21 @@ void qmp_cpu(int64_t index, Error **errp) >> /* Just do nothing */ >> } >> >> +void qmp_cpu_set(int64_t cpu_index, const char *status, Error **errp) >> +{ >> + int state; >> + >> + if (!strcmp(status, "online")) { >> + state = 1; >> + } else if (!strcmp(status, "offline")) { >> + state = 0; >> + } else { >> + error_set(errp, QERR_INVALID_PARAMETER, status); >> + return; >> + } >> + qemu_system_cpu_hot_add(cpu_index, state); >> +} >> + >> #ifndef CONFIG_VNC >> /* If VNC support is enabled, the "true" query-vnc command is >> defined in the VNC subsystem */ > > This shouldn't go upstream. We rather need qdev'ified CPUs that can be > added and removed as any other device. > Jan, Thanks for review! Then I'll drop this patch and re-post the other ones after fixing them. > Jan >
On 2012-01-19 10:38, Igor Mammedov wrote: > On 01/17/2012 03:18 PM, Jan Kiszka wrote: >> On 2012-01-17 14:17, Igor Mammedov wrote: >>> Signed-off-by: Igor Mammedov<imammedo@redhat.com> >>> --- >>> qapi-schema.json | 9 +++++++++ >>> qmp-commands.hx | 26 ++++++++++++++++++++++++++ >>> qmp.c | 15 +++++++++++++++ >>> 3 files changed, 50 insertions(+), 0 deletions(-) >>> >>> diff --git a/qapi-schema.json b/qapi-schema.json >>> index 44cf764..05cc582 100644 >>> --- a/qapi-schema.json >>> +++ b/qapi-schema.json >>> @@ -903,6 +903,15 @@ >>> { 'command': 'cpu', 'data': {'index': 'int'} } >>> >>> ## >>> +# @cpu_set >>> +# >>> +# Sets specified cpu to online/ofline mode >>> +# >>> +# Notes: semantics is : cpu_set x online|offline >>> +## >>> +{ 'command': 'cpu_set', 'data': {'cpu_index': 'int', 'status': 'str'} } >>> + >>> +## >>> # @memsave: >>> # >>> # Save a portion of guest memory to a file. >>> diff --git a/qmp-commands.hx b/qmp-commands.hx >>> index 7e3f4b9..ef1ac1e 100644 >>> --- a/qmp-commands.hx >>> +++ b/qmp-commands.hx >>> @@ -348,6 +348,32 @@ Note: CPUs' indexes are obtained with the 'query-cpus' command. >>> EQMP >>> >>> { >>> + .name = "cpu_set", >>> + .args_type = "cpu_index:i,status:s", >>> + .mhandler.cmd_new = qmp_marshal_input_cpu_set, >>> + }, >>> + >>> +SQMP >>> +cpu_set >>> +------- >>> + >>> +Sets virtual cpu to online/ofline state >>> + >>> +Arguments: >>> + >>> +- "cpu_index": virtual cpu index (json-int) >>> +- "status": desired state of cpu, online/offline (json-string) >>> + >>> +Example: >>> + >>> +-> { "execute": "cpu_set", >>> + "arguments": { "cpu_index": 2, >>> + "status": "online" } } >>> +<- { "return": {} } >>> + >>> +EQMP >>> + >>> + { >>> .name = "memsave", >>> .args_type = "val:l,size:i,filename:s,cpu:i?", >>> .mhandler.cmd_new = qmp_marshal_input_memsave, >>> diff --git a/qmp.c b/qmp.c >>> index c74dde6..e2b268d 100644 >>> --- a/qmp.c >>> +++ b/qmp.c >>> @@ -101,6 +101,21 @@ void qmp_cpu(int64_t index, Error **errp) >>> /* Just do nothing */ >>> } >>> >>> +void qmp_cpu_set(int64_t cpu_index, const char *status, Error **errp) >>> +{ >>> + int state; >>> + >>> + if (!strcmp(status, "online")) { >>> + state = 1; >>> + } else if (!strcmp(status, "offline")) { >>> + state = 0; >>> + } else { >>> + error_set(errp, QERR_INVALID_PARAMETER, status); >>> + return; >>> + } >>> + qemu_system_cpu_hot_add(cpu_index, state); >>> +} >>> + >>> #ifndef CONFIG_VNC >>> /* If VNC support is enabled, the "true" query-vnc command is >>> defined in the VNC subsystem */ >> >> This shouldn't go upstream. We rather need qdev'ified CPUs that can be >> added and removed as any other device. >> > > Jan, > > Thanks for review! > Then I'll drop this patch and re-post the other ones after fixing them. Well, you will still need the control logic of this patch, thus need to think about converting x86 CPUs to qdev. Otherwise, testing will only be possible over qemu-kvm. Jan
On 01/19/2012 11:24 AM, Jan Kiszka wrote: > On 2012-01-19 10:38, Igor Mammedov wrote: >> On 01/17/2012 03:18 PM, Jan Kiszka wrote: >>> On 2012-01-17 14:17, Igor Mammedov wrote: >>>> Signed-off-by: Igor Mammedov<imammedo@redhat.com> >>>> --- >>>> qapi-schema.json | 9 +++++++++ >>>> qmp-commands.hx | 26 ++++++++++++++++++++++++++ >>>> qmp.c | 15 +++++++++++++++ >>>> 3 files changed, 50 insertions(+), 0 deletions(-) >>>> >>>> diff --git a/qapi-schema.json b/qapi-schema.json >>>> index 44cf764..05cc582 100644 >>>> --- a/qapi-schema.json >>>> +++ b/qapi-schema.json >>>> @@ -903,6 +903,15 @@ >>>> { 'command': 'cpu', 'data': {'index': 'int'} } >>>> >>>> ## >>>> +# @cpu_set >>>> +# >>>> +# Sets specified cpu to online/ofline mode >>>> +# >>>> +# Notes: semantics is : cpu_set x online|offline >>>> +## >>>> +{ 'command': 'cpu_set', 'data': {'cpu_index': 'int', 'status': 'str'} } >>>> + >>>> +## >>>> # @memsave: >>>> # >>>> # Save a portion of guest memory to a file. >>>> diff --git a/qmp-commands.hx b/qmp-commands.hx >>>> index 7e3f4b9..ef1ac1e 100644 >>>> --- a/qmp-commands.hx >>>> +++ b/qmp-commands.hx >>>> @@ -348,6 +348,32 @@ Note: CPUs' indexes are obtained with the 'query-cpus' command. >>>> EQMP >>>> >>>> { >>>> + .name = "cpu_set", >>>> + .args_type = "cpu_index:i,status:s", >>>> + .mhandler.cmd_new = qmp_marshal_input_cpu_set, >>>> + }, >>>> + >>>> +SQMP >>>> +cpu_set >>>> +------- >>>> + >>>> +Sets virtual cpu to online/ofline state >>>> + >>>> +Arguments: >>>> + >>>> +- "cpu_index": virtual cpu index (json-int) >>>> +- "status": desired state of cpu, online/offline (json-string) >>>> + >>>> +Example: >>>> + >>>> +-> { "execute": "cpu_set", >>>> + "arguments": { "cpu_index": 2, >>>> + "status": "online" } } >>>> +<- { "return": {} } >>>> + >>>> +EQMP >>>> + >>>> + { >>>> .name = "memsave", >>>> .args_type = "val:l,size:i,filename:s,cpu:i?", >>>> .mhandler.cmd_new = qmp_marshal_input_memsave, >>>> diff --git a/qmp.c b/qmp.c >>>> index c74dde6..e2b268d 100644 >>>> --- a/qmp.c >>>> +++ b/qmp.c >>>> @@ -101,6 +101,21 @@ void qmp_cpu(int64_t index, Error **errp) >>>> /* Just do nothing */ >>>> } >>>> >>>> +void qmp_cpu_set(int64_t cpu_index, const char *status, Error **errp) >>>> +{ >>>> + int state; >>>> + >>>> + if (!strcmp(status, "online")) { >>>> + state = 1; >>>> + } else if (!strcmp(status, "offline")) { >>>> + state = 0; >>>> + } else { >>>> + error_set(errp, QERR_INVALID_PARAMETER, status); >>>> + return; >>>> + } >>>> + qemu_system_cpu_hot_add(cpu_index, state); >>>> +} >>>> + >>>> #ifndef CONFIG_VNC >>>> /* If VNC support is enabled, the "true" query-vnc command is >>>> defined in the VNC subsystem */ >>> >>> This shouldn't go upstream. We rather need qdev'ified CPUs that can be >>> added and removed as any other device. >>> >> >> Jan, >> >> Thanks for review! >> Then I'll drop this patch and re-post the other ones after fixing them. > > Well, you will still need the control logic of this patch, thus need to > think about converting x86 CPUs to qdev. Otherwise, testing will only be > possible over qemu-kvm. > > Jan > I've agree that converting x86 CPUs to qdev is needed. I've seen RFC patches for qev-ifying ppc CPU but they haven't made to upstream yet. I'll look at them as model for x86 CPU conversion but I can't promise fast results here (I'm complete newbie in this). I'm open to suggestions if you have a better idea how to do it or a better example. I think there is sense in having in the tree the first 2 patches separately from qdev-ifying cpu patches, since they provide a basic infrastructure for vcpu hot-plug and we will reduce difference between qemu and qemu-kvm in this parts of code. In addition, it will open a road for hot-unplug patches that people send now against qemu-kvm. It still will be possible to play with hot-plug using 3rd patch off the tree while qdev-ifed cpu patch(es) in works.
diff --git a/qapi-schema.json b/qapi-schema.json index 44cf764..05cc582 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -903,6 +903,15 @@ { 'command': 'cpu', 'data': {'index': 'int'} } ## +# @cpu_set +# +# Sets specified cpu to online/ofline mode +# +# Notes: semantics is : cpu_set x online|offline +## +{ 'command': 'cpu_set', 'data': {'cpu_index': 'int', 'status': 'str'} } + +## # @memsave: # # Save a portion of guest memory to a file. diff --git a/qmp-commands.hx b/qmp-commands.hx index 7e3f4b9..ef1ac1e 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -348,6 +348,32 @@ Note: CPUs' indexes are obtained with the 'query-cpus' command. EQMP { + .name = "cpu_set", + .args_type = "cpu_index:i,status:s", + .mhandler.cmd_new = qmp_marshal_input_cpu_set, + }, + +SQMP +cpu_set +------- + +Sets virtual cpu to online/ofline state + +Arguments: + +- "cpu_index": virtual cpu index (json-int) +- "status": desired state of cpu, online/offline (json-string) + +Example: + +-> { "execute": "cpu_set", + "arguments": { "cpu_index": 2, + "status": "online" } } +<- { "return": {} } + +EQMP + + { .name = "memsave", .args_type = "val:l,size:i,filename:s,cpu:i?", .mhandler.cmd_new = qmp_marshal_input_memsave, diff --git a/qmp.c b/qmp.c index c74dde6..e2b268d 100644 --- a/qmp.c +++ b/qmp.c @@ -101,6 +101,21 @@ void qmp_cpu(int64_t index, Error **errp) /* Just do nothing */ } +void qmp_cpu_set(int64_t cpu_index, const char *status, Error **errp) +{ + int state; + + if (!strcmp(status, "online")) { + state = 1; + } else if (!strcmp(status, "offline")) { + state = 0; + } else { + error_set(errp, QERR_INVALID_PARAMETER, status); + return; + } + qemu_system_cpu_hot_add(cpu_index, state); +} + #ifndef CONFIG_VNC /* If VNC support is enabled, the "true" query-vnc command is defined in the VNC subsystem */
Signed-off-by: Igor Mammedov <imammedo@redhat.com> --- qapi-schema.json | 9 +++++++++ qmp-commands.hx | 26 ++++++++++++++++++++++++++ qmp.c | 15 +++++++++++++++ 3 files changed, 50 insertions(+), 0 deletions(-)