qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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>

  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).