All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marc-André Lureau" <marcandre.lureau@gmail.com>
To: Sergio Lopez <slp@redhat.com>
Cc: "Eduardo Habkost" <ehabkost@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	groug@kaod.org, QEMU <qemu-devel@nongnu.org>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Richard Henderson" <rth@twiddle.net>,
	"Laszlo Ersek" <lersek@redhat.com>,
	"Stefano Garzarella" <sgarzare@redhat.com>
Subject: Re: [PATCH v10 10/15] fw_cfg: add "modify" functions for all types
Date: Wed, 16 Oct 2019 17:02:09 +0200	[thread overview]
Message-ID: <CAJ+F1CKMvD-mVX-wwJ_kv8whyCF9UnPv3bcpVMiMbCSHEJcJVA@mail.gmail.com> (raw)
In-Reply-To: <20191016101241.24405-11-slp@redhat.com>

On Wed, Oct 16, 2019 at 12:22 PM Sergio Lopez <slp@redhat.com> wrote:
>
> This allows to alter the contents of an already added item.
>
> Signed-off-by: Sergio Lopez <slp@redhat.com>
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>

Used to fix kernel command line in following patch "hw/i386: Introduce
the microvm machine type", except fw_cfg_modify_i64().


Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  include/hw/nvram/fw_cfg.h | 42 +++++++++++++++++++++++++++++++++++++++
>  hw/nvram/fw_cfg.c         | 29 +++++++++++++++++++++++++++
>  2 files changed, 71 insertions(+)
>
> diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h
> index 80e435d303..b5291eefad 100644
> --- a/include/hw/nvram/fw_cfg.h
> +++ b/include/hw/nvram/fw_cfg.h
> @@ -98,6 +98,20 @@ void fw_cfg_add_bytes(FWCfgState *s, uint16_t key, void *data, size_t len);
>   */
>  void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value);
>
> +/**
> + * fw_cfg_modify_string:
> + * @s: fw_cfg device being modified
> + * @key: selector key value for new fw_cfg item
> + * @value: NUL-terminated ascii string
> + *
> + * Replace the fw_cfg item available by selecting the given key. The new
> + * data will consist of a dynamically allocated copy of the provided string,
> + * including its NUL terminator. The data being replaced, assumed to have
> + * been dynamically allocated during an earlier call to either
> + * fw_cfg_add_string() or fw_cfg_modify_string(), is freed before returning.
> + */
> +void fw_cfg_modify_string(FWCfgState *s, uint16_t key, const char *value);
> +
>  /**
>   * fw_cfg_add_i16:
>   * @s: fw_cfg device being modified
> @@ -136,6 +150,20 @@ void fw_cfg_modify_i16(FWCfgState *s, uint16_t key, uint16_t value);
>   */
>  void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
>
> +/**
> + * fw_cfg_modify_i32:
> + * @s: fw_cfg device being modified
> + * @key: selector key value for new fw_cfg item
> + * @value: 32-bit integer
> + *
> + * Replace the fw_cfg item available by selecting the given key. The new
> + * data will consist of a dynamically allocated copy of the given 32-bit
> + * value, converted to little-endian representation. The data being replaced,
> + * assumed to have been dynamically allocated during an earlier call to
> + * either fw_cfg_add_i32() or fw_cfg_modify_i32(), is freed before returning.
> + */
> +void fw_cfg_modify_i32(FWCfgState *s, uint16_t key, uint32_t value);
> +
>  /**
>   * fw_cfg_add_i64:
>   * @s: fw_cfg device being modified
> @@ -148,6 +176,20 @@ void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value);
>   */
>  void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value);
>
> +/**
> + * fw_cfg_modify_i64:
> + * @s: fw_cfg device being modified
> + * @key: selector key value for new fw_cfg item
> + * @value: 64-bit integer
> + *
> + * Replace the fw_cfg item available by selecting the given key. The new
> + * data will consist of a dynamically allocated copy of the given 64-bit
> + * value, converted to little-endian representation. The data being replaced,
> + * assumed to have been dynamically allocated during an earlier call to
> + * either fw_cfg_add_i64() or fw_cfg_modify_i64(), is freed before returning.
> + */
> +void fw_cfg_modify_i64(FWCfgState *s, uint16_t key, uint64_t value);
> +
>  /**
>   * fw_cfg_add_file:
>   * @s: fw_cfg device being modified
> diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c
> index 7dc3ac378e..aef1727250 100644
> --- a/hw/nvram/fw_cfg.c
> +++ b/hw/nvram/fw_cfg.c
> @@ -690,6 +690,15 @@ void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value)
>      fw_cfg_add_bytes(s, key, g_memdup(value, sz), sz);
>  }
>
> +void fw_cfg_modify_string(FWCfgState *s, uint16_t key, const char *value)
> +{
> +    size_t sz = strlen(value) + 1;
> +    char *old;
> +
> +    old = fw_cfg_modify_bytes_read(s, key, g_memdup(value, sz), sz);
> +    g_free(old);
> +}
> +
>  void fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value)
>  {
>      uint16_t *copy;
> @@ -720,6 +729,16 @@ void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value)
>      fw_cfg_add_bytes(s, key, copy, sizeof(value));
>  }
>
> +void fw_cfg_modify_i32(FWCfgState *s, uint16_t key, uint32_t value)
> +{
> +    uint32_t *copy, *old;
> +
> +    copy = g_malloc(sizeof(value));
> +    *copy = cpu_to_le32(value);
> +    old = fw_cfg_modify_bytes_read(s, key, copy, sizeof(value));
> +    g_free(old);
> +}
> +
>  void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value)
>  {
>      uint64_t *copy;
> @@ -730,6 +749,16 @@ void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value)
>      fw_cfg_add_bytes(s, key, copy, sizeof(value));
>  }
>
> +void fw_cfg_modify_i64(FWCfgState *s, uint16_t key, uint64_t value)
> +{
> +    uint64_t *copy, *old;
> +
> +    copy = g_malloc(sizeof(value));
> +    *copy = cpu_to_le64(value);
> +    old = fw_cfg_modify_bytes_read(s, key, copy, sizeof(value));
> +    g_free(old);
> +}
> +
>  void fw_cfg_set_order_override(FWCfgState *s, int order)
>  {
>      assert(s->fw_cfg_order_override == 0);
> --
> 2.21.0
>
>


--
Marc-André Lureau


  reply	other threads:[~2019-10-16 15:04 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-16 10:12 [PATCH v10 00/15] Introduce the microvm machine type Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 01/15] hw/virtio: Factorize virtio-mmio headers Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 02/15] hw/i386/pc: rename functions shared with non-PC machines Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 03/15] hw/i386/pc: fix code style issues on functions that will be moved out Sergio Lopez
2019-10-16 14:59   ` Marc-André Lureau
2019-10-16 10:12 ` [PATCH v10 04/15] hw/i386/pc: replace use of strtol with qemu_strtoui in x86_load_linux() Sergio Lopez
2019-10-16 15:02   ` Marc-André Lureau
2019-10-16 10:12 ` [PATCH v10 05/15] hw/i386/pc: avoid an assignment in if condition " Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 06/15] hw/i386/pc: remove commented out code from x86_load_linux() Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 07/15] hw/i386/pc: move shared x86 functions to x86.c and export them Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 08/15] hw/i386: split PCMachineState deriving X86MachineState from it Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 09/15] hw/i386: make x86.c independent from PCMachineState Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 10/15] fw_cfg: add "modify" functions for all types Sergio Lopez
2019-10-16 15:02   ` Marc-André Lureau [this message]
2019-10-16 10:12 ` [PATCH v10 11/15] hw/intc/apic: reject pic ints if isa_pic == NULL Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 12/15] roms: add microvm-bios (qboot) as binary and git submodule Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 13/15] docs/microvm.rst: document the new microvm machine type Sergio Lopez
2019-10-16 16:31   ` Marc-André Lureau
2019-10-17  6:48     ` Sergio Lopez
2019-10-17  9:52   ` Philippe Mathieu-Daudé
2019-10-17 10:45     ` Sergio Lopez
2019-10-17 10:56       ` Philippe Mathieu-Daudé
2019-10-17 11:52         ` Sergio Lopez
2019-10-17 11:00   ` Daniel P. Berrangé
2019-10-17 11:49     ` Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 14/15] hw/i386: Introduce the " Sergio Lopez
2019-10-16 19:35   ` Marc-André Lureau
2019-10-17  6:47     ` Sergio Lopez
2019-10-16 10:12 ` [PATCH v10 15/15] MAINTAINERS: add microvm related files Sergio Lopez

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=CAJ+F1CKMvD-mVX-wwJ_kv8whyCF9UnPv3bcpVMiMbCSHEJcJVA@mail.gmail.com \
    --to=marcandre.lureau@gmail.com \
    --cc=ehabkost@redhat.com \
    --cc=groug@kaod.org \
    --cc=imammedo@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=lersek@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=sgarzare@redhat.com \
    --cc=slp@redhat.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.