All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Cédric Le Goater" <clg@fr.ibm.com>
Cc: Marcel Apfelbaum <marcel@redhat.com>,
	Corey Minyard <cminyard@mvista.com>,
	qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v3 09/10] ipmi: use a file to load SDRs
Date: Tue, 15 Mar 2016 16:30:48 +0200	[thread overview]
Message-ID: <20160315163016-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <1457618643-32310-10-git-send-email-clg@fr.ibm.com>

On Thu, Mar 10, 2016 at 03:04:02PM +0100, Cédric Le Goater wrote:
> The IPMI BMC simulator populates the sdr/sensor tables with a minimal
> set of entries (Watchdog). But some qemu platforms might want to use
> extra entries for their custom needs.
> 
> This patch modifies slighty the initializing routine to take into
> account a larger set read from a file. The name of the file to use is
> defined through a new 'sdr' property of the simulator device.
> 
> Signed-off-by: Cédric Le Goater <clg@fr.ibm.com>
> Acked-by: Corey Minyard <cminyard@mvista.com>
> Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>

Same thing - I prefer deferring this until 2.7
as loading files needs to be done carefully.

> ---
> 
> Changes since v1:
> 
>  - log an error if file does not exist.
>  - change property name to 'sdrfile'
>  - add documentation of new properties
>  
>  hw/ipmi/ipmi_bmc_sim.c |   23 +++++++++++++++++++++--
>  qemu-options.hx        |   11 ++++++++++-
>  2 files changed, 31 insertions(+), 3 deletions(-)
> 
> Index: qemu-powernv.git/hw/ipmi/ipmi_bmc_sim.c
> ===================================================================
> --- qemu-powernv.git.orig/hw/ipmi/ipmi_bmc_sim.c
> +++ qemu-powernv.git/hw/ipmi/ipmi_bmc_sim.c
> @@ -27,6 +27,7 @@
>  #include "qemu/timer.h"
>  #include "hw/ipmi/ipmi.h"
>  #include "qemu/error-report.h"
> +#include "hw/loader.h"
>  
>  #define IPMI_NETFN_CHASSIS            0x00
>  
> @@ -213,6 +214,7 @@ struct IPMIBmcSim {
>      IPMISel sel;
>      IPMISdr sdr;
>      IPMISensor sensors[MAX_SENSORS];
> +    char *sdr_filename;
>  
>      /* Odd netfns are for responses, so we only need the even ones. */
>      const IPMINetfn *netfns[MAX_NETFNS / 2];
> @@ -1701,22 +1703,33 @@ static void ipmi_sdr_init(IPMIBmcSim *ib
>  
>      sdrs_size = sizeof(init_sdrs);
>      sdrs = init_sdrs;
> +    if (ibs->sdr_filename &&
> +        !g_file_get_contents(ibs->sdr_filename, (gchar **) &sdrs, &sdrs_size,
> +                             NULL)) {
> +        error_report("failed to load sdr file '%s'", ibs->sdr_filename);
> +        sdrs_size = sizeof(init_sdrs);
> +        sdrs = init_sdrs;
> +    }
>  
>      for (i = 0; i < sdrs_size; i += len) {
>          struct ipmi_sdr_header *sdrh;
>  
>          if (i + IPMI_SDR_HEADER_SIZE > sdrs_size) {
>              error_report("Problem with recid 0x%4.4x", i);
> -            return;
> +            break;
>          }
>          sdrh = (struct ipmi_sdr_header *) &sdrs[i];
>          len = ipmi_sdr_length(sdrh);
>          if (i + len > sdrs_size) {
>              error_report("Problem with recid 0x%4.4x", i);
> -            return;
> +            break;
>          }
>          sdr_add_entry(ibs, sdrh, len, NULL);
>      }
> +
> +    if (sdrs != init_sdrs) {
> +        g_free(sdrs);
> +    }
>  }
>  
>  static const VMStateDescription vmstate_ipmi_sim = {
> @@ -1786,12 +1799,18 @@ static void ipmi_sim_realize(DeviceState
>      vmstate_register(NULL, 0, &vmstate_ipmi_sim, ibs);
>  }
>  
> +static Property ipmi_sim_properties[] = {
> +    DEFINE_PROP_STRING("sdrfile", IPMIBmcSim, sdr_filename),
> +    DEFINE_PROP_END_OF_LIST(),
> +};
> +
>  static void ipmi_sim_class_init(ObjectClass *oc, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(oc);
>      IPMIBmcClass *bk = IPMI_BMC_CLASS(oc);
>  
>      dc->realize = ipmi_sim_realize;
> +    dc->props = ipmi_sim_properties;
>      bk->handle_command = ipmi_sim_handle_command;
>  }
>  
> Index: qemu-powernv.git/qemu-options.hx
> ===================================================================
> --- qemu-powernv.git.orig/qemu-options.hx
> +++ qemu-powernv.git/qemu-options.hx
> @@ -387,7 +387,7 @@ possible drivers and properties, use @co
>  @code{-device @var{driver},help}.
>  
>  Some drivers are:
> -@item -device ipmi-bmc-sim,id=@var{id}[,slave_addr=@var{val}]
> +@item -device ipmi-bmc-sim,id=@var{id}[,slave_addr=@var{val}][,sdrfile=@var{file}]
>  
>  Add an IPMI BMC.  This is a simulation of a hardware management
>  interface processor that normally sits on a system.  It provides
> @@ -399,6 +399,15 @@ This address is the BMC's address on the
>  controllers.  If you don't know what this means, it is safe to ignore
>  it.
>  
> +@table @option
> +@item bmc=@var{id}
> +The BMC to connect to, one of ipmi-bmc-sim or ipmi-bmc-extern above.
> +@item slave_addr=@var{val}
> +Define slave address to use for the BMC.  The default is 0x20.
> +@item sdrfile=@var{file}
> +file containing raw Sensor Data Records (SDR) data.  The default is none.
> +@end table
> +
>  @item -device ipmi-bmc-extern,id=@var{id},chardev=@var{id}[,slave_addr=@var{val}]
>  
>  Add a connection to an external IPMI BMC simulator.  Instead of

  reply	other threads:[~2016-03-15 14:31 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-10 14:03 [Qemu-devel] [PATCH v3 00/10] ipmi: a couple of enhancements to the BMC simulator (round 2) Cédric Le Goater
2016-03-10 14:03 ` [Qemu-devel] [PATCH v3 01/10] ipmi: remove IPMI_CHECK_CMD_LEN() macro Cédric Le Goater
2016-03-10 14:03 ` [Qemu-devel] [PATCH v3 02/10] ipmi: replace IPMI_ADD_RSP_DATA() macro with inline helpers Cédric Le Goater
2016-03-10 14:03 ` [Qemu-devel] [PATCH v3 03/10] ipmi: remove IPMI_CHECK_RESERVATION() macro Cédric Le Goater
2016-03-10 14:03 ` [Qemu-devel] [PATCH v3 04/10] ipmi: add rsp_buffer_set_error() helper Cédric Le Goater
2016-03-10 14:03 ` [Qemu-devel] [PATCH v3 05/10] ipmi: add a realize function to the device class Cédric Le Goater
2016-03-10 14:03 ` [Qemu-devel] [PATCH v3 06/10] ipmi: use a function to initialize the SDR table Cédric Le Goater
2016-03-10 14:04 ` [Qemu-devel] [PATCH v3 07/10] ipmi: remove the need of an ending record in " Cédric Le Goater
2016-03-10 14:04 ` [Qemu-devel] [PATCH v3 08/10] ipmi: add some local variables in ipmi_sdr_init Cédric Le Goater
2016-03-10 14:04 ` [Qemu-devel] [PATCH v3 09/10] ipmi: use a file to load SDRs Cédric Le Goater
2016-03-15 14:30   ` Michael S. Tsirkin [this message]
2016-03-10 14:04 ` [Qemu-devel] [PATCH v3 10/10] ipmi: provide support for FRUs Cédric Le Goater
2016-03-15 14:30   ` Michael S. Tsirkin
2016-03-15 14:36     ` Cédric Le Goater
2016-03-15 14:42       ` Michael S. Tsirkin
2016-06-08  7:25     ` Cédric Le Goater

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=20160315163016-mutt-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=clg@fr.ibm.com \
    --cc=cminyard@mvista.com \
    --cc=marcel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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.