[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [PATCH v4 11/16] Add live migration of VMware's hyper-call RPC
- To: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>, Don Slutz <dslutz@xxxxxxxxxxx>, xen-devel@xxxxxxxxxxxxx
- From: Don Slutz <dslutz@xxxxxxxxxxx>
- Date: Tue, 16 Sep 2014 11:48:24 -0400
- Cc: Kevin Tian <kevin.tian@xxxxxxxxx>, Keir Fraser <keir@xxxxxxx>, Ian Campbell <ian.campbell@xxxxxxxxxx>, Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>, Jun Nakajima <jun.nakajima@xxxxxxxxx>, Eddie Dong <eddie.dong@xxxxxxxxx>, Ian Jackson <ian.jackson@xxxxxxxxxxxxx>, Tim Deegan <tim@xxxxxxx>, George Dunlap <George.Dunlap@xxxxxxxxxxxxx>, Aravind Gopalakrishnan <Aravind.Gopalakrishnan@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
- Delivery-date: Tue, 16 Sep 2014 15:49:06 +0000
- List-id: Xen developer discussion <xen-devel.lists.xen.org>
On 09/12/14 09:54, Boris Ostrovsky wrote:
On 09/11/2014 02:36 PM, Don Slutz wrote:
The VMware's hyper-call state is included in live migration and
save/restore. Because the max size of the VMware guestinfo is
large, then data is compressed and expanded in the
vmport_save_domain_ctxt and vmport_load_domain_ctxt.
Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx>
---
+
+ for ( i = 0; i < ctxt->used_guestinfo; i++ )
+ {
+ vmport_guestinfo_t *vg = vs->guestinfo[i];
+
+ if ( vg && vg->key_len )
+ {
+ guestinfo_size += sizeof(vg->key_len) +
sizeof(vg->val_len) +
+ vg->key_len + vg->val_len;
+ used_guestinfo++;
+ ASSERT(sizeof(vg->key_len) == 1);
+ *p++ = (char) vg->key_len;
+ ASSERT(sizeof(vg->val_len) == 1);
+ *p++ = (char) vg->val_len;
+ if ( vg->key_len )
You ASSERTed that vg->key_len is 1 so you may not need the 'if'. (And
in NDEBUG version the worst that could happen is you do memcpy(,,0),
which is safe).
You seem to have missed the sizeof() in there. So vg->key_len can be
zero. But I will agree
that the if could be dropped.
+ {
+ memcpy(p, vg->key_data, vg->key_len);
+ p += vg->key_len;
+ if ( vg->val_len )
Same here.
Yes, the if is not needed. Can drop if requested.
+ {
+ memcpy(p, vg->val_data, vg->val_len);
+ p += vg->val_len;
+ }
+ }
+ }
+ }
+ ctxt->used_guestinfo = used_guestinfo;
+
+ for ( i = 0; i < ctxt->used_guestinfo_jumbo; i++ )
+ {
+ vmport_guestinfo_jumbo_t *vgj =
+ vs->guestinfo_jumbo[i];
+ if ( vgj && vgj->key_len )
+ {
+ guestinfo_size += sizeof(vgj->key_len) +
sizeof(vgj->val_len) +
+ vgj->key_len + vgj->val_len;
+ used_guestinfo_jumbo++;
+ ASSERT(sizeof(vgj->key_len) == 1);
+ *p++ = (char) vgj->key_len;
+ memcpy(p, &vgj->val_len, sizeof(vgj->val_len));
+ p += sizeof(vgj->val_len);
+ if ( vgj->key_len )
And here.
And do you need ASSERT(vgj->val_len ==1) as well? Also, In
vmport_load_domain_ctxt() you don't seem to be making this assertions.
I don't know whether this is on purpose.
In this case sizeof(vgj->val_len) != 1.
I will add ASSERTs there also.
+
+ if ( !vs )
+ return -ENOMEM;
+
+ /* Customized checking for entry since our entry is of variable
length */
+ desc = (struct hvm_save_descriptor *)&h->data[h->cur];
+ if ( sizeof(*desc) > h->size - h->cur )
+ {
+ printk(XENLOG_G_WARNING
+ "HVM%d restore: not enough data left to read descriptor"
+ "for type %lu\n", d->domain_id,
+ HVM_SAVE_CODE(VMPORT));
+ return -1;
Since in some cases you are returning proper error codes you should
return them everywhere.
Will adjust to proper error codes.
-Don Slutz
-boris
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|