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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).