diff mbox

mptsas: Fix a migration compatible issue

Message ID 1469523803-12194-1-git-send-email-caoj.fnst@cn.fujitsu.com
State New
Headers show

Commit Message

Cao jin July 26, 2016, 9:03 a.m. UTC
My previous commit 2e2aa316 removed internal flag msi_in_use, which
exists in vmstate, use VMSTATE_UNUSED for migration compatibility.

Reported-by: Amit Shah <amit.shah@redhat.com>
Suggested-by: Amit Shah <amit.shah@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Cc: Marcel Apfelbaum <marcel@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Cao jin <caoj.fnst@cn.fujitsu.com>
---
 hw/scsi/mptsas.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Amit Shah July 26, 2016, 11:51 a.m. UTC | #1
On (Tue) 26 Jul 2016 [17:03:23], Cao jin wrote:
> My previous commit 2e2aa316 removed internal flag msi_in_use, which
> exists in vmstate, use VMSTATE_UNUSED for migration compatibility.
> 
> Reported-by: Amit Shah <amit.shah@redhat.com>
> Suggested-by: Amit Shah <amit.shah@redhat.com>
> Cc: Markus Armbruster <armbru@redhat.com>
> Cc: Marcel Apfelbaum <marcel@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Michael S. Tsirkin <mst@redhat.com>
> Cc: Amit Shah <amit.shah@redhat.com>
> Signed-off-by: Cao jin <caoj.fnst@cn.fujitsu.com>

Reviewed-by: Amit Shah <amit.shah@redhat.com>

		Amit
Cao jin Aug. 2, 2016, 8:59 a.m. UTC | #2
Hi

On 08/01/2016 11:29 PM, Amit Shah wrote:
> On (Mon) 01 Aug 2016 [10:16:50], Paolo Bonzini wrote:

>>> @@ -1370,7 +1370,7 @@ static const VMStateDescription vmstate_mptsas = {
>>>       .post_load = mptsas_post_load,
>>>       .fields      = (VMStateField[]) {
>>>           VMSTATE_PCI_DEVICE(dev, MPTSASState),
>>> -
>>> +        VMSTATE_UNUSED(sizeof(bool)), /* Was msi_in_use */
>>
>> This needs to be "1", not sizeof(bool), because vmstate_info_bool writes
>> a single byte.  I'll fix this and queue the patch (removing Amit's
>> reviewed-by since it's effectively a different change).
>
> Eeks, yes.
>
> This patch was merged in the meantime, so Cao Jin, please post a
> revert and a fix, thanks!
>
> 		Amit
>

Before I send the fix, I did a quick test on linux as following:

#include <stdio.h>
#include <stdbool.h>

int main()
{
     printf("bool size = %d\n", sizeof(bool));
}


then:
./a.out
bool size = 1

and there is mptsas.c #include "qemu/osdep.h", osdep.h #include <stdbool.h>

So, am I missing something?
Paolo Bonzini Aug. 2, 2016, 10:03 a.m. UTC | #3
> Before I send the fix, I did a quick test on linux as following:
> 
> #include <stdio.h>
> #include <stdbool.h>
> 
> int main()
> {
>      printf("bool size = %d\n", sizeof(bool));
> }
> 
> 
> then:
> ./a.out
> bool size = 1
> 
> and there is mptsas.c #include "qemu/osdep.h", osdep.h #include <stdbool.h>
> 
> So, am I missing something?

You are missing that the patch is: 1) not portable, because there's no guarantee
that sizeof(bool)==1; 2) wrong, because using sizeof within VMSTATE_UNUSED would
suggest a dependency of the migration stream on the host---and such a dependency
should not be there at all.

In fact, the patch is also wrong because old versions of QEMU _do_ need msi_in_use
so you need to either generate it or bump the migration version.  I'm sending a
patch now.

Paolo
diff mbox

Patch

diff --git a/hw/scsi/mptsas.c b/hw/scsi/mptsas.c
index c1a0649..0ed24d1 100644
--- a/hw/scsi/mptsas.c
+++ b/hw/scsi/mptsas.c
@@ -1370,7 +1370,7 @@  static const VMStateDescription vmstate_mptsas = {
     .post_load = mptsas_post_load,
     .fields      = (VMStateField[]) {
         VMSTATE_PCI_DEVICE(dev, MPTSASState),
-
+        VMSTATE_UNUSED(sizeof(bool)), /* Was msi_in_use */
         VMSTATE_UINT32(state, MPTSASState),
         VMSTATE_UINT8(who_init, MPTSASState),
         VMSTATE_UINT8(doorbell_state, MPTSASState),