From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43954) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YH7zm-0006w9-Fn for qemu-devel@nongnu.org; Fri, 30 Jan 2015 04:36:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YH7zj-0002zD-9A for qemu-devel@nongnu.org; Fri, 30 Jan 2015 04:36:10 -0500 Received: from mail-we0-x232.google.com ([2a00:1450:400c:c03::232]:33634) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YH7zj-0002z2-3M for qemu-devel@nongnu.org; Fri, 30 Jan 2015 04:36:07 -0500 Received: by mail-we0-f178.google.com with SMTP id k48so26025822wev.9 for ; Fri, 30 Jan 2015 01:36:06 -0800 (PST) Sender: Paolo Bonzini Message-ID: <54CB5082.5070100@redhat.com> Date: Fri, 30 Jan 2015 10:36:02 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1418780167-16231-1-git-send-email-jsnow@redhat.com> <1418780167-16231-17-git-send-email-jsnow@redhat.com> In-Reply-To: <1418780167-16231-17-git-send-email-jsnow@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 16/17] ahci: Recompute cur_cmd on migrate post load List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: John Snow , qemu-devel@nongnu.org Cc: kwolf@redhat.com, mreitz@redhat.com, armbru@redhat.com, stefanha@redhat.com, mst@redhat.com On 17/12/2014 02:36, John Snow wrote: > When the AHCI HBA device is migrated, all of the information that > led to the request being created is stored in the AHCIDevice > structures, except for pointers into guest data where return > information needs to be stored. > > The "cur_cmd" field is usually responsible for this. > > To rebuild the cur_cmd pointer post-migration, we can utilize > the busy_slot index to figure out where the command header > we are still processing is. > > This allows a machine in a halted state from rerror=stop or > werror=stop to be migrated and resume operations without issue. > > Signed-off-by: John Snow Reviewed-by: Paolo Bonzini > --- > hw/ide/ahci.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c > index c153228..8078d3e 100644 > --- a/hw/ide/ahci.c > +++ b/hw/ide/ahci.c > @@ -1373,6 +1373,10 @@ static int ahci_state_post_load(void *opaque, int version_id) > */ > if (ad->busy_slot == -1) { > check_cmd(s, i); > + } else { > + /* We are in the middle of a command, and may need to access > + * the command header in guest memory again. */ > + ad->cur_cmd = &((AHCICmdHdr *)ad->lst)[ad->busy_slot]; > } > } > >