From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52321) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WLTtS-0005n0-UD for qemu-devel@nongnu.org; Thu, 06 Mar 2014 03:43:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WLTtK-00045b-Fp for qemu-devel@nongnu.org; Thu, 06 Mar 2014 03:43:06 -0500 Received: from mail-ea0-x233.google.com ([2a00:1450:4013:c01::233]:62778) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WLTtK-00045S-4X for qemu-devel@nongnu.org; Thu, 06 Mar 2014 03:42:58 -0500 Received: by mail-ea0-f179.google.com with SMTP id q10so1557365ead.10 for ; Thu, 06 Mar 2014 00:42:57 -0800 (PST) Sender: Paolo Bonzini Message-ID: <5318350B.4020303@redhat.com> Date: Thu, 06 Mar 2014 09:42:51 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1394094362-12949-1-git-send-email-famz@redhat.com> In-Reply-To: <1394094362-12949-1-git-send-email-famz@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] scsi: Fix migration of scsi sense data List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng , qemu-devel@nongnu.org Cc: Gerd Hoffmann , =?ISO-8859-1?Q?Andreas_F=E4rber?= , Juan Quintela Il 06/03/2014 09:26, Fam Zheng ha scritto: > c5f52875 changed the size of sense array in vmstate_scsi_device by > mistake. This patch restores the old size, and add a subsection for the > remaining part of the buffer size. So that migration is not broken. > > Signed-off-by: Fam Zheng > --- > hw/scsi/scsi-bus.c | 30 +++++++++++++++++++++++++++++- > include/hw/scsi/scsi.h | 1 + > include/migration/vmstate.h | 3 +++ > 3 files changed, 33 insertions(+), 1 deletion(-) > > diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c > index 50a0acf..eaad925 100644 > --- a/hw/scsi/scsi-bus.c > +++ b/hw/scsi/scsi-bus.c > @@ -1905,6 +1905,26 @@ static const VMStateInfo vmstate_info_scsi_requests = { > .put = put_scsi_requests, > }; > > +static bool scsi_sense_state_needed(void *opaque) > +{ > + SCSIDevice *s = opaque; > + > + return s->sense_len > SCSI_SENSE_BUF_SIZE_OLD; > +} > + > +static const VMStateDescription vmstate_scsi_sense_state = { > + .name = "SCSIDevice/sense", > + .version_id = 1, > + .minimum_version_id = 1, > + .minimum_version_id_old = 1, > + .fields = (VMStateField []) { > + VMSTATE_UINT8_SUB_ARRAY(sense, SCSIDevice, > + SCSI_SENSE_BUF_SIZE_OLD, > + SCSI_SENSE_BUF_SIZE - SCSI_SENSE_BUF_SIZE_OLD), > + VMSTATE_END_OF_LIST() > + } > +}; > + > const VMStateDescription vmstate_scsi_device = { > .name = "SCSIDevice", > .version_id = 1, > @@ -1915,7 +1935,7 @@ const VMStateDescription vmstate_scsi_device = { > VMSTATE_UINT8(unit_attention.asc, SCSIDevice), > VMSTATE_UINT8(unit_attention.ascq, SCSIDevice), > VMSTATE_BOOL(sense_is_ua, SCSIDevice), > - VMSTATE_UINT8_ARRAY(sense, SCSIDevice, SCSI_SENSE_BUF_SIZE), > + VMSTATE_UINT8_SUB_ARRAY(sense, SCSIDevice, 0, SCSI_SENSE_BUF_SIZE_OLD), > VMSTATE_UINT32(sense_len, SCSIDevice), > { > .name = "requests", > @@ -1927,6 +1947,14 @@ const VMStateDescription vmstate_scsi_device = { > .offset = 0, > }, > VMSTATE_END_OF_LIST() > + }, > + .subsections = (VMStateSubsection []) { > + { > + .vmsd = &vmstate_scsi_sense_state, > + .needed = scsi_sense_state_needed, > + }, { > + /* empty */ > + } > } > }; > > diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h > index e5fc39d..1adb549 100644 > --- a/include/hw/scsi/scsi.h > +++ b/include/hw/scsi/scsi.h > @@ -31,6 +31,7 @@ typedef struct SCSISense { > uint8_t ascq; > } SCSISense; > > +#define SCSI_SENSE_BUF_SIZE_OLD 96 > #define SCSI_SENSE_BUF_SIZE 252 > > struct SCSICommand { > diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h > index ded8e23..e7e1705 100644 > --- a/include/migration/vmstate.h > +++ b/include/migration/vmstate.h > @@ -650,6 +650,9 @@ extern const VMStateInfo vmstate_info_bitmap; > #define VMSTATE_UINT8_ARRAY(_f, _s, _n) \ > VMSTATE_UINT8_ARRAY_V(_f, _s, _n, 0) > > +#define VMSTATE_UINT8_SUB_ARRAY(_f, _s, _start, _num) \ > + VMSTATE_SUB_ARRAY(_f, _s, _start, _num, 0, vmstate_info_uint8, uint8_t) > + > #define VMSTATE_UINT8_2DARRAY(_f, _s, _n1, _n2) \ > VMSTATE_UINT8_2DARRAY_V(_f, _s, _n1, _n2, 0) > > Looks good, thanks! I'll apply to scsi-next after a little more testing. Paolo