|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/3] piix4acpi, xen, vcpu hotplug: Split the notification from the changes.
On Mon, 13 May 2013, Konrad Rzeszutek Wilk wrote:
> This is a prepatory patch that splits the notification
> of an vCPU change from the actual changes to the vCPU array.
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> hw/piix4acpi.c | 12 ++++++++----
> monitor.c | 4 ++--
> sysemu.h | 4 +++-
> xenstore.c | 7 +++++--
> 4 files changed, 18 insertions(+), 9 deletions(-)
>
> diff --git a/hw/piix4acpi.c b/hw/piix4acpi.c
> index fb1e5c3..54d566b 100644
> --- a/hw/piix4acpi.c
> +++ b/hw/piix4acpi.c
> @@ -814,22 +814,26 @@ static int disable_processor(GPEState *g, int cpu)
> return 1;
> }
>
> -void qemu_cpu_add_remove(int cpu, int state)
> +int qemu_cpu_add_remove(int cpu, int state)
> {
> if ((cpu <0) || (cpu >= vcpus)) {
> fprintf(stderr, "vcpu out of range, should be [0~%d]\n", vcpus - 1);
> - return;
> + return -EINVAL;
> }
>
> if (state) {
> if (!enable_processor(&gpe_state, cpu))
> - return;
> + return 0;
> } else {
> if (!disable_processor(&gpe_state, cpu))
> - return;
> + return 0;
> }
> fprintf(logfile, "%s vcpu %d\n", state ? "Add" : "Remove", cpu);
>
> + return 1;
> +}
> +void qemu_cpu_notify(void)
> +{
> if (gpe_state.gpe0_en[0] & 4) {
> qemu_set_irq(sci_irq, 1);
> qemu_set_irq(sci_irq, 0);
> diff --git a/monitor.c b/monitor.c
> index 8915a6e..fa89c88 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -1485,8 +1485,8 @@ static void do_cpu_set_nr(int value, const char *status)
> term_printf("invalid status: %s\n", status);
> return;
> }
> -
> - qemu_cpu_add_remove(value, state);
> + if (qemu_cpu_add_remove(value, state))
> + qemu_cpu_notify();
> }
>
> /* Please update qemu-doc.texi when adding or changing commands */
> diff --git a/sysemu.h b/sysemu.h
> index 66b8ab2..968258a 100644
> --- a/sysemu.h
> +++ b/sysemu.h
> @@ -173,9 +173,11 @@ extern int drive_add(const char *file, const char *fmt,
> ...);
> extern int drive_init(struct drive_opt *arg, int snapshot, void *machine);
>
> /* acpi */
> -void qemu_cpu_add_remove(int cpu, int state);
> +/* Returns 0 if nothing changed, 1 if added or removed and < 0 for errors. */
> +int qemu_cpu_add_remove(int cpu, int state);
> void qemu_system_hot_add_init(void);
> void qemu_system_device_hot_add(int pcibus, int slot, int state);
> +void qemu_cpu_notify(void);
>
> /* device-hotplug */
>
> diff --git a/xenstore.c b/xenstore.c
> index d3a4588..c861d36 100644
> --- a/xenstore.c
> +++ b/xenstore.c
> @@ -1005,6 +1005,7 @@ static void xenstore_process_vcpu_set_event(char **vec)
> char *act = NULL;
> char *vcpustr, *node = vec[XS_WATCH_PATH];
> unsigned int vcpu, len;
> + int changed = -EINVAL;
>
> vcpustr = strstr(node, "cpu/");
> if (!vcpustr) {
> @@ -1020,13 +1021,15 @@ static void xenstore_process_vcpu_set_event(char
> **vec)
> }
>
> if (!strncmp(act, "online", len))
> - qemu_cpu_add_remove(vcpu, 1);
> + changed = qemu_cpu_add_remove(vcpu, 1);
> else if (!strncmp(act, "offline", len))
> - qemu_cpu_add_remove(vcpu, 0);
> + changed = qemu_cpu_add_remove(vcpu, 0);
> else
> fprintf(stderr, "vcpu-set: command error.\n");
>
> free(act);
> + if (changed > 0)
> + qemu_cpu_notify();
> return;
> }
>
> --
> 1.8.1.4
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |