All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Corey Minyard <minyard@acm.org>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
	"Michael S . Tsirkin" <mst@redhat.com>,
	Corey Minyard <cminyard@mvista.com>
Subject: Re: [Qemu-devel] [PATCH v2 07/12] i2c:pm_smbus: Fix state transfer
Date: Tue, 27 Nov 2018 18:20:09 +0000	[thread overview]
Message-ID: <20181127182008.GD2616@work-vm> (raw)
In-Reply-To: <9b21748b-10b9-427b-2822-18b5c3cd5066@acm.org>

* Corey Minyard (minyard@acm.org) wrote:
> On 11/26/18 12:24 PM, Corey Minyard wrote:
> > On 11/26/18 11:20 AM, Dr. David Alan Gilbert wrote:
> > > * minyard@acm.org (minyard@acm.org) wrote:
> > > > From: Corey Minyard <cminyard@mvista.com>
> > > > 
> > > > Transfer the state information for the SMBus registers and
> > > > internal data so it will work on a VM transfer.
> > > > 
> > > > Signed-off-by: Corey Minyard <cminyard@mvista.com>
> > > > Cc: Michael S. Tsirkin <mst@redhat.com>
> > > > Cc: Paolo Bonzini <pbonzini@redhat.com>
> > > > Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > > > ---
> > > >   hw/acpi/piix4.c           |  3 ++-
> > > >   hw/i2c/pm_smbus.c         | 31 +++++++++++++++++++++++++++++++
> > > >   hw/i2c/smbus_ich9.c       |  6 ++++--
> > > >   include/hw/i2c/pm_smbus.h |  2 ++
> > > >   4 files changed, 39 insertions(+), 3 deletions(-)
> > > > 
> > > > diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
> > > > index e330f24c71..313305f5a0 100644
> > > > --- a/hw/acpi/piix4.c
> > > > +++ b/hw/acpi/piix4.c
> > > > @@ -309,7 +309,7 @@ static const VMStateDescription
> > > > vmstate_cpuhp_state = {
> > > >    */
> > > >   static const VMStateDescription vmstate_acpi = {
> > > >       .name = "piix4_pm",
> > > > -    .version_id = 3,
> > > > +    .version_id = 4,
> > > OK, so do we need to bump this version ?  Ideally you'd keep the version
> > > as is and let the needed do the work.
> > 
> > 
> > Got it, that makes sense.  Same for the comments below, I'll get all
> > those.
> > 
> Well, maybe not.  the .needed function is only called on the save side, it
> is
> not called on the load side  So a 2.12 to 3.0 transfer fails.  So I've
> exported
> the migration needed function and I'm using the VMSTATE_STRUCT_TEST()
> function to transfer it in each case.  With that I can migrate from 2.12 to
> 3.0 and back without issue.

Ah OK, that's an interesting observation; I hadn't realised it wasn't
symmetric like that, but I can kind of see why thinking about how the
code got that way.

Dave

> -corey
> 
> 
> > Thanks,
> > 
> > -corey
> > 
> > 
> > > >       .minimum_version_id = 3,
> > > >       .minimum_version_id_old = 1,
> > > >       .load_state_old = acpi_load_old,
> > > > @@ -320,6 +320,7 @@ static const VMStateDescription vmstate_acpi = {
> > > >           VMSTATE_UINT16(ar.pm1.evt.en, PIIX4PMState),
> > > >           VMSTATE_UINT16(ar.pm1.cnt.cnt, PIIX4PMState),
> > > >           VMSTATE_STRUCT(apm, PIIX4PMState, 0, vmstate_apm, APMState),
> > > > +        VMSTATE_STRUCT(smb, PIIX4PMState, 4, pmsmb_vmstate, PMSMBus),
> > > >           VMSTATE_TIMER_PTR(ar.tmr.timer, PIIX4PMState),
> > > >           VMSTATE_INT64(ar.tmr.overflow_time, PIIX4PMState),
> > > >           VMSTATE_STRUCT(ar.gpe, PIIX4PMState, 2, vmstate_gpe,
> > > > ACPIGPE),
> > > > diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c
> > > > index 8793113c25..75907e1c22 100644
> > > > --- a/hw/i2c/pm_smbus.c
> > > > +++ b/hw/i2c/pm_smbus.c
> > > > @@ -19,6 +19,7 @@
> > > >    */
> > > >   #include "qemu/osdep.h"
> > > >   #include "hw/hw.h"
> > > > +#include "hw/boards.h"
> > > >   #include "hw/i2c/pm_smbus.h"
> > > >   #include "hw/i2c/smbus_master.h"
> > > >   @@ -450,6 +451,36 @@ static const MemoryRegionOps pm_smbus_ops = {
> > > >       .endianness = DEVICE_LITTLE_ENDIAN,
> > > >   };
> > > >   +static bool pm_smbus_vmstate_needed(void *opaque)
> > > > +{
> > > > +    MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
> > > > +
> > > > +    return !mc->smbus_no_migration_support;
> > > > +}
> > > OK
> > > 
> > > > +const VMStateDescription pmsmb_vmstate = {
> > > > +    .name = "pmsmb",
> > > > +    .version_id = 1,
> > > > +    .minimum_version_id = 1,
> > > > +    .needed = pm_smbus_vmstate_needed,
> > > > +    .fields = (VMStateField[]) {
> > > > +        VMSTATE_UINT8(smb_stat, PMSMBus),
> > > > +        VMSTATE_UINT8(smb_ctl, PMSMBus),
> > > > +        VMSTATE_UINT8(smb_cmd, PMSMBus),
> > > > +        VMSTATE_UINT8(smb_addr, PMSMBus),
> > > > +        VMSTATE_UINT8(smb_data0, PMSMBus),
> > > > +        VMSTATE_UINT8(smb_data1, PMSMBus),
> > > > +        VMSTATE_UINT32(smb_index, PMSMBus),
> > > > +        VMSTATE_UINT8_ARRAY(smb_data, PMSMBus, PM_SMBUS_MAX_MSG_SIZE),
> > > > +        VMSTATE_UINT8(smb_auxctl, PMSMBus),
> > > > +        VMSTATE_BOOL(i2c_enable, PMSMBus),
> > > > +        VMSTATE_BOOL(op_done, PMSMBus),
> > > > +        VMSTATE_BOOL(in_i2c_block_read, PMSMBus),
> > > > +        VMSTATE_BOOL(start_transaction_on_status_read, PMSMBus),
> > > > +        VMSTATE_END_OF_LIST()
> > > > +    }
> > > > +};
> > > > +
> > > >   void pm_smbus_init(DeviceState *parent, PMSMBus *smb, bool
> > > > force_aux_blk)
> > > >   {
> > > >       smb->op_done = true;
> > > > diff --git a/hw/i2c/smbus_ich9.c b/hw/i2c/smbus_ich9.c
> > > > index e6d8d28194..c9b7482a54 100644
> > > > --- a/hw/i2c/smbus_ich9.c
> > > > +++ b/hw/i2c/smbus_ich9.c
> > > > @@ -45,10 +45,12 @@ typedef struct ICH9SMBState {
> > > >     static const VMStateDescription vmstate_ich9_smbus = {
> > > >       .name = "ich9_smb",
> > > > -    .version_id = 1,
> > > > +    .version_id = 2,
> > > Again, do we need to bump this?
> > > 
> > > >       .minimum_version_id = 1,
> > > >       .fields = (VMStateField[]) {
> > > > -        VMSTATE_PCI_DEVICE(dev, struct ICH9SMBState),
> > > > +        VMSTATE_PCI_DEVICE(dev, ICH9SMBState),
> > > > +        VMSTATE_BOOL_V(irq_enabled, ICH9SMBState, 2),
> > > Can we make this a VMSTATE_BOOL_TEST (see VMSTATE_UINT64_TEST for the
> > > pattern) tied to the same .neede, and again we don't need to bump the
> > > version.
> > > 
> > > > +        VMSTATE_STRUCT(smb, ICH9SMBState, 2, pmsmb_vmstate, PMSMBus),
> > > So that's taken care of by the .needed.
> > > 
> > > Dave
> > > 
> > > >           VMSTATE_END_OF_LIST()
> > > >       }
> > > >   };
> > > > diff --git a/include/hw/i2c/pm_smbus.h b/include/hw/i2c/pm_smbus.h
> > > > index 7bcca97672..5075fc64fa 100644
> > > > --- a/include/hw/i2c/pm_smbus.h
> > > > +++ b/include/hw/i2c/pm_smbus.h
> > > > @@ -43,4 +43,6 @@ typedef struct PMSMBus {
> > > >     void pm_smbus_init(DeviceState *parent, PMSMBus *smb, bool
> > > > force_aux_blk);
> > > >   +extern const VMStateDescription pmsmb_vmstate;
> > > > +
> > > >   #endif /* PM_SMBUS_H */
> > > > -- 
> > > > 2.17.1
> > > > 
> > > -- 
> > > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> > 
> > 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

  reply	other threads:[~2018-11-27 18:20 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-15 19:24 [Qemu-devel] [PATCH v2 00/12] RFC: Fix/add vmstate handling in some I2C code minyard
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 01/12] i2c: Split smbus into parts minyard
2018-11-15 22:22   ` Philippe Mathieu-Daudé
2018-11-16 13:20     ` Corey Minyard
2018-11-20 15:47       ` Peter Maydell
2018-11-20 19:30         ` Philippe Mathieu-Daudé
2018-11-21 11:59           ` Peter Maydell
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 02/12] i2c: have I2C receive operation return uint8_t minyard
2018-11-20 15:31   ` Peter Maydell
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 03/12] i2c: Simplify and correct the SMBus state machine minyard
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 04/12] i2c: Add a length check to the SMBus write handling minyard
2018-11-20 15:33   ` Peter Maydell
2018-11-20 16:58     ` Corey Minyard
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 05/12] i2c: Fix pm_smbus handling of I2C block read minyard
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 06/12] boards.h: Ignore migration for SMBus devices on older machines minyard
2018-11-26 17:23   ` Dr. David Alan Gilbert
2018-11-26 18:22     ` Corey Minyard
2018-11-27 16:01       ` Dr. David Alan Gilbert
2018-11-27 16:59         ` Corey Minyard
2018-11-27 18:14           ` Dr. David Alan Gilbert
2018-11-27 18:41             ` Laurent Vivier
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 07/12] i2c:pm_smbus: Fix state transfer minyard
2018-11-26 17:20   ` Dr. David Alan Gilbert
2018-11-26 18:24     ` Corey Minyard
2018-11-26 19:41       ` Corey Minyard
2018-11-27 18:20         ` Dr. David Alan Gilbert [this message]
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 08/12] i2c: Add an SMBus vmstate structure minyard
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 09/12] i2c: Add normal type name and cast to smbus_eeprom.c minyard
2018-11-20 15:34   ` Peter Maydell
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 10/12] i2c: Add a size constant for the smbus_eeprom size minyard
2018-11-15 22:34   ` Philippe Mathieu-Daudé
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 11/12] i2c: Add vmstate handling to the smbus eeprom minyard
2018-11-26 17:30   ` Dr. David Alan Gilbert
2018-11-15 19:24 ` [Qemu-devel] [PATCH v2 12/12] i2c: Add a reset function to smbus_eeprom minyard
2018-11-15 23:01 ` [Qemu-devel] [PATCH v2 00/12] RFC: Fix/add vmstate handling in some I2C code Philippe Mathieu-Daudé
2018-11-16 13:30   ` Corey Minyard
2018-11-26 14:11   ` Corey Minyard
2018-11-26 14:35     ` Philippe Mathieu-Daudé

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=20181127182008.GD2616@work-vm \
    --to=dgilbert@redhat.com \
    --cc=cminyard@mvista.com \
    --cc=minyard@acm.org \
    --cc=mst@redhat.com \
    --cc=pbonzini@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.