qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] d1fc68: xen: Fix IDE unplug


From: GitHub
Subject: [Qemu-commits] [qemu/qemu] d1fc68: xen: Fix IDE unplug
Date: Wed, 13 Apr 2016 11:00:04 -0700

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: d1fc684f3692d6bbe85d5ee35c2568f0bc68fa1c
      
https://github.com/qemu/qemu/commit/d1fc684f3692d6bbe85d5ee35c2568f0bc68fa1c
  Author: Anthony PERARD <address@hidden>
  Date:   2016-04-12 (Tue, 12 Apr 2016)

  Changed paths:
    M hw/ide/piix.c

  Log Message:
  -----------
  xen: Fix IDE unplug

After commit e5e7855 (blockdev: Separate BB name management), starting a
guest with PVHVM support result in this assert:
qemu-system-i386: block/block-backend.c:173: blk_delete: Assertion `!blk->name' 
failed.

A backtrace show that a caller is pci_piix3_xen_ide_unplug().

This patch fix it.

Signed-off-by: Anthony PERARD <address@hidden>
Message-id: address@hidden
Signed-off-by: John Snow <address@hidden>


  Commit: 218fd37c68e450dffe37832e82a1f0a6592e7169
      
https://github.com/qemu/qemu/commit/218fd37c68e450dffe37832e82a1f0a6592e7169
  Author: Pavel Butsykin <address@hidden>
  Date:   2016-04-12 (Tue, 12 Apr 2016)

  Changed paths:
    M hw/ide/core.c
    M hw/ide/internal.h
    M hw/ide/pci.c

  Log Message:
  -----------
  ide: don't lose pending dma state

If the migration occurs after the IDE DMA has been set up but before it
has been initiated, the state gets lost upon save/restore. Specifically,
->dma_cb callback gets cleared, so, when the guest eventually starts bus
mastering, the DMA never completes, causing the guest to time out the
operation.

OTOH all the infrastructure is already in place to restart the DMA if
the migration happens while the DMA is in progress.

So reuse that infrastructure, by setting bus->error_status based on
->dma_cmd in pre_save if ->dma_cb callback is already set but DMAING is
clear. This will indicate the need for restart and make sure ->dma_cb
is restored in ide_restart_bh(); howeover since DMAING is clear the state
upon restore will be exactly "ready for DMA" as before the save.

Signed-off-by: Pavel Butsykin <address@hidden>
Reviewed-by: Roman Kagan <address@hidden>
Signed-off-by: Denis V. Lunev <address@hidden>
Reviewed-by: John Snow <address@hidden>
Message-id: address@hidden
Signed-off-by: John Snow <address@hidden>


  Commit: 9a41826f3843bf11bf8f52f176071f8c1fb0aa7e
      
https://github.com/qemu/qemu/commit/9a41826f3843bf11bf8f52f176071f8c1fb0aa7e
  Author: Pavel Butsykin <address@hidden>
  Date:   2016-04-12 (Tue, 12 Apr 2016)

  Changed paths:
    M hw/ide/atapi.c

  Log Message:
  -----------
  ide: restart atapi dma by re-evaluating command packet

ide_atapi_dma_restart() used to just complete the DMA with an error,
under the assumption that there isn't enough information to restart it.

However, as the contents of the ->io_buffer is preserved, it looks safe to
just re-evaluate it and dispatch the ATAPI command again.

Signed-off-by: Pavel Butsykin <address@hidden>
Reviewed-by: Roman Kagan <address@hidden>
Signed-off-by: Denis V. Lunev <address@hidden>
Reviewed-by: John Snow <address@hidden>
Message-id: address@hidden
Signed-off-by: John Snow <address@hidden>


  Commit: 502356eeeb5fd2bdd92b2d5156e511626c1c3814
      
https://github.com/qemu/qemu/commit/502356eeeb5fd2bdd92b2d5156e511626c1c3814
  Author: Pavel Butsykin <address@hidden>
  Date:   2016-04-12 (Tue, 12 Apr 2016)

  Changed paths:
    M hw/ide/atapi.c
    M hw/ide/core.c
    M hw/ide/internal.h
    M hw/ide/macio.c

  Log Message:
  -----------
  ide: really restart pending and in-flight atapi dma

Restart of ATAPI DMA used to be unreachable, because the request to do
so wasn't indicated in bus->error_status due to the lack of spare bits, and
ide_restart_bh() would return early doing nothing.

This patch makes use of the observation that not all bit combinations were
possible in ->error_status. In particular, IDE_RETRY_READ only made sense
together with IDE_RETRY_DMA or IDE_RETRY_PIO. This allows to re-use
IDE_RETRY_READ alone as an indicator of ATAPI DMA restart request.

To makes things more uniform, ATAPI DMA gets its own value for ->dma_cmd.
As a means against confusion, macros are added to test the state of
->error_status.

The patch fixes the restart of both in-flight and pending ATAPI DMA,
following the scheme similar to that of IDE DMA.

[Including a fixup patch:
Message-id: address@hidden
--js]

Signed-off-by: Pavel Butsykin <address@hidden>
Signed-off-by: Denis V. Lunev <address@hidden>
Reviewed-by: Roman Kagan <address@hidden>
Reviewed-by: John Snow <address@hidden>
Message-id: address@hidden
Signed-off-by: John Snow <address@hidden>


  Commit: c0bc0fa352ffc7f0a89038ef594b0df8b6bfcf1b
      
https://github.com/qemu/qemu/commit/c0bc0fa352ffc7f0a89038ef594b0df8b6bfcf1b
  Author: Peter Maydell <address@hidden>
  Date:   2016-04-13 (Wed, 13 Apr 2016)

  Changed paths:
    M hw/ide/atapi.c
    M hw/ide/core.c
    M hw/ide/internal.h
    M hw/ide/macio.c
    M hw/ide/pci.c
    M hw/ide/piix.c

  Log Message:
  -----------
  Merge remote-tracking branch 'remotes/jnsnow/tags/ide-pull-request' into 
staging

# gpg: Signature made Wed 13 Apr 2016 00:32:22 BST using RSA key ID AAFC390E
# gpg: Good signature from "John Snow (John Huston) <address@hidden>"

* remotes/jnsnow/tags/ide-pull-request:
  ide: really restart pending and in-flight atapi dma
  ide: restart atapi dma by re-evaluating command packet
  ide: don't lose pending dma state
  xen: Fix IDE unplug

Signed-off-by: Peter Maydell <address@hidden>


Compare: https://github.com/qemu/qemu/compare/d44122ecd0fa...c0bc0fa352ff

reply via email to

[Prev in Thread] Current Thread [Next in Thread]