From: Paolo Bonzini <pbonzini@redhat.com>
To: arei.gonglei@huawei.com, qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, weidong.huang@huawei.com,
mst@redhat.com, aik@ozlabs.ru, agraf@suse.de, kraxel@redhat.com,
dmitry@daynix.com, akong@redhat.com, armbru@redhat.com,
lersek@redhat.com, ehabkost@redhat.com, marcel.a@redhat.com,
somlo@cmu.edu, luonengjun@huawei.com, peter.huangpeng@huawei.com,
alex.williamson@redhat.com, stefanha@redhat.com,
lcapitulino@redhat.com, rth@twiddle.net, kwolf@redhat.com,
peter.crosthwaite@xilinx.com, chenliang88@huawei.com,
imammedo@redhat.com, afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH v11 04/34] fw_cfg: add fw_cfg_machine_reset function
Date: Thu, 09 Oct 2014 13:12:11 +0200 [thread overview]
Message-ID: <54366D8B.4020202@redhat.com> (raw)
In-Reply-To: <1412668838-8656-5-git-send-email-arei.gonglei@huawei.com>
Il 07/10/2014 10:00, arei.gonglei@huawei.com ha scritto:
> From: Gonglei <arei.gonglei@huawei.com>
>
> We must assure that the changed bootindex can take effect
> when guest is rebooted. So we introduce fw_cfg_machine_reset(),
> which change the fw_cfg file's bootindex data using the new
> global fw_boot_order list.
>
> Signed-off-by: Chenliang <chenliang88@huawei.com>
> Signed-off-by: Gonglei <arei.gonglei@huawei.com>
> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> hw/nvram/fw_cfg.c | 55 ++++++++++++++++++++++++++++++++++++++++++++---
> include/hw/nvram/fw_cfg.h | 2 ++
> 2 files changed, 54 insertions(+), 3 deletions(-)
>
> diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
> index b71d251..e7ed27e 100644
> --- a/hw/nvram/fw_cfg.c
> +++ b/hw/nvram/fw_cfg.c
> @@ -402,6 +402,26 @@ static void fw_cfg_add_bytes_read_callback(FWCfgState *s, uint16_t key,
> s->entries[arch][key].callback_opaque = callback_opaque;
> }
>
> +static void *fw_cfg_modify_bytes_read(FWCfgState *s, uint16_t key,
> + void *data, size_t len)
> +{
> + void *ptr;
> + int arch = !!(key & FW_CFG_ARCH_LOCAL);
> +
> + key &= FW_CFG_ENTRY_MASK;
> +
> + assert(key < FW_CFG_MAX_ENTRY && len < UINT32_MAX);
> +
> + /* return the old data to the function caller, avoid memory leak */
> + ptr = s->entries[arch][key].data;
> + s->entries[arch][key].data = data;
> + s->entries[arch][key].len = len;
> + s->entries[arch][key].callback_opaque = NULL;
> + s->entries[arch][key].callback = NULL;
> +
> + return ptr;
> +}
> +
> void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len)
> {
> fw_cfg_add_bytes_read_callback(s, key, NULL, NULL, data, len);
> @@ -499,13 +519,42 @@ void fw_cfg_add_file(FWCfgState *s, const char *filename,
> fw_cfg_add_file_callback(s, filename, NULL, NULL, data, len);
> }
>
> -static void fw_cfg_machine_ready(struct Notifier *n, void *data)
> +void *fw_cfg_modify_file(FWCfgState *s, const char *filename,
> + void *data, size_t len)
> +{
> + int i, index;
> +
> + assert(s->files);
> +
> + index = be32_to_cpu(s->files->count);
> + assert(index < FW_CFG_FILE_SLOTS);
> +
> + for (i = 0; i < index; i++) {
> + if (strcmp(filename, s->files->f[i].name) == 0) {
> + return fw_cfg_modify_bytes_read(s, FW_CFG_FILE_FIRST + i,
> + data, len);
> + }
> + }
> + /* add new one */
> + fw_cfg_add_file_callback(s, filename, NULL, NULL, data, len);
> + return NULL;
> +}
> +
> +static void fw_cfg_machine_reset(void *opaque)
> {
> + void *ptr;
> size_t len;
> - FWCfgState *s = container_of(n, FWCfgState, machine_ready);
> + FWCfgState *s = opaque;
> char *bootindex = get_boot_devices_list(&len, false);
>
> - fw_cfg_add_file(s, "bootorder", (uint8_t*)bootindex, len);
> + ptr = fw_cfg_modify_file(s, "bootorder", (uint8_t *)bootindex, len);
> + g_free(ptr);
> +}
> +
> +static void fw_cfg_machine_ready(struct Notifier *n, void *data)
> +{
> + FWCfgState *s = container_of(n, FWCfgState, machine_ready);
> + qemu_register_reset(fw_cfg_machine_reset, s);
> }
>
> FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
> diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h
> index 72b1549..56e1ed7 100644
> --- a/include/hw/nvram/fw_cfg.h
> +++ b/include/hw/nvram/fw_cfg.h
> @@ -76,6 +76,8 @@ void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data,
> void fw_cfg_add_file_callback(FWCfgState *s, const char *filename,
> FWCfgReadCallback callback, void *callback_opaque,
> void *data, size_t len);
> +void *fw_cfg_modify_file(FWCfgState *s, const char *filename, void *data,
> + size_t len);
> FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
> hwaddr crl_addr, hwaddr data_addr);
>
>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
next prev parent reply other threads:[~2014-10-09 11:12 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-07 8:00 [Qemu-devel] [PATCH v11 00/34] modify boot order of guest, and take effect after rebooting arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 01/34] bootdevice: move bootdevice related code to new file bootdevice.c arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 02/34] bootindex: add check bootindex function arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 03/34] bootindex: add del_boot_device_path function arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 04/34] fw_cfg: add fw_cfg_machine_reset function arei.gonglei
2014-10-09 11:12 ` Paolo Bonzini [this message]
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 05/34] bootindex: rework add_boot_device_path function arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 06/34] bootindex: support to set a existent device's bootindex to -1 arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 07/34] bootindex: add a setter/getter functions wrapper for bootindex property arei.gonglei
2014-10-09 11:14 ` Paolo Bonzini
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 08/34] virtio-net: add bootindex to qom property arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 09/34] e1000: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 10/34] eepro100: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 11/34] ne2000: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 12/34] pcnet: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 13/34] rtl8139: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 14/34] spapr_lian: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 15/34] vmxnet3: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 16/34] usb-net: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 17/34] net: remove bootindex property from qdev to qom arei.gonglei
2014-10-09 11:15 ` Paolo Bonzini
2014-10-09 11:56 ` Gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 18/34] virtio-net: alias bootindex property explicitly for virt-net-pci/ccw/s390 arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 19/34] host-libusb: remove bootindex property from qdev to qom arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 20/34] pci-assign: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 21/34] vfio: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 22/34] redirect: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 23/34] isa-fdc: remove bootindexA/B " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 24/34] scsi: add bootindex to qom property arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 25/34] ide: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 26/34] virtio-blk: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 27/34] block: remove bootindex property from qdev to qom arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 28/34] virtio-blk: alias bootindex property explicitly for virt-blk-pci/ccw/s390 arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 29/34] usb-storage: add bootindex to qom property arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 30/34] nvma: ide: " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 31/34] ide: add calling add_boot_device_patch in bootindex setter function arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 32/34] bootindex: move calling add_boot_device_patch to " arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 33/34] bootindex: delete bootindex when device is removed arei.gonglei
2014-10-07 8:00 ` [Qemu-devel] [PATCH v11 34/34] bootindex: change fprintf to error_report arei.gonglei
2014-10-08 11:00 ` [Qemu-devel] [PATCH v11 00/34] modify boot order of guest, and take effect after rebooting Gonglei
2014-10-09 9:47 ` Gerd Hoffmann
2014-10-09 10:09 ` Gonglei
2014-10-09 11:10 ` Andreas Färber
2014-10-09 11:07 ` Michael Mueller
2014-10-09 12:04 ` Gonglei
2014-10-09 11:17 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54366D8B.4020202@redhat.com \
--to=pbonzini@redhat.com \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=aik@ozlabs.ru \
--cc=akong@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=chenliang88@huawei.com \
--cc=dmitry@daynix.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=lersek@redhat.com \
--cc=luonengjun@huawei.com \
--cc=marcel.a@redhat.com \
--cc=mst@redhat.com \
--cc=peter.crosthwaite@xilinx.com \
--cc=peter.huangpeng@huawei.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=somlo@cmu.edu \
--cc=stefanha@redhat.com \
--cc=weidong.huang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.