-----BEGIN PGP SIGNATURE-----
iQEcBAABAgAGBQJZjJxdAAoJEJykq7OBq3PIIH0IALZoC3VFv9aEw9/lKBWN21bJ pB5OPuXvh8h8xgjQx9tGnNW9wyUQdwup9jSJncmRPJIF4+FxGouQRLTMD8bXrRPq 61zv0CTxHRi6o++NVWB0z0sMjzT29lnSXJjPJ45RiORM2+ErM9QxlgD172oIo49x fbwixqXofdAc2in+AmKhpm9PWC3qJ4kwqaIdPHmHKZG73lhTUPv5aFhoxO/48Z9C xlBB9daQ60QwnpKn1rw0Ewl3r2MWjxFEfKifARQkga9YaNwVf5zlJc73SfvUQEU/ J6QBUQfWO7l9et5U3AFM8rW4QbjCkO3fzAbWuPH3FHUukkA3K+kWGURR2jm8vsc= =Tn14 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging # gpg: Signature made Thu 10 Aug 2017 18:48:13 BST # gpg: using RSA key 0x9CA4ABB381AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" # Primary key fingerprint: 8695 A8BF D3F9 7CDA AC35 775A 9CA4 ABB3 81AB 73C8 * remotes/stefanha/tags/block-pull-request: virtio-blk: handle blk_getlength() errors IDE: test flush on empty CDROM IDE: Do not flush empty CDROM drives Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
95766c2cd0
@ -730,6 +730,7 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
|
||||
BlockConf *conf = &s->conf.conf;
|
||||
struct virtio_blk_config blkcfg;
|
||||
uint64_t capacity;
|
||||
int64_t length;
|
||||
int blk_size = conf->logical_block_size;
|
||||
|
||||
blk_get_geometry(s->blk, &capacity);
|
||||
@ -752,7 +753,8 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
|
||||
* divided by 512 - instead it is the amount of blk_size blocks
|
||||
* per track (cylinder).
|
||||
*/
|
||||
if (blk_getlength(s->blk) / conf->heads / conf->secs % blk_size) {
|
||||
length = blk_getlength(s->blk);
|
||||
if (length > 0 && length / conf->heads / conf->secs % blk_size) {
|
||||
blkcfg.geometry.sectors = conf->secs & ~s->sector_mask;
|
||||
} else {
|
||||
blkcfg.geometry.sectors = conf->secs;
|
||||
|
@ -1063,7 +1063,15 @@ static void ide_flush_cache(IDEState *s)
|
||||
s->status |= BUSY_STAT;
|
||||
ide_set_retry(s);
|
||||
block_acct_start(blk_get_stats(s->blk), &s->acct, 0, BLOCK_ACCT_FLUSH);
|
||||
s->pio_aiocb = blk_aio_flush(s->blk, ide_flush_cb, s);
|
||||
|
||||
if (blk_bs(s->blk)) {
|
||||
s->pio_aiocb = blk_aio_flush(s->blk, ide_flush_cb, s);
|
||||
} else {
|
||||
/* XXX blk_aio_flush() crashes when blk_bs(blk) is NULL, remove this
|
||||
* temporary workaround when blk_aio_*() functions handle NULL blk_bs.
|
||||
*/
|
||||
ide_flush_cb(s, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void ide_cfata_metadata_inquiry(IDEState *s)
|
||||
|
@ -689,6 +689,24 @@ static void test_flush_nodev(void)
|
||||
ide_test_quit();
|
||||
}
|
||||
|
||||
static void test_flush_empty_drive(void)
|
||||
{
|
||||
QPCIDevice *dev;
|
||||
QPCIBar bmdma_bar, ide_bar;
|
||||
|
||||
ide_test_start("-device ide-cd,bus=ide.0");
|
||||
dev = get_pci_device(&bmdma_bar, &ide_bar);
|
||||
|
||||
/* FLUSH CACHE command on device 0 */
|
||||
qpci_io_writeb(dev, ide_bar, reg_device, 0);
|
||||
qpci_io_writeb(dev, ide_bar, reg_command, CMD_FLUSH_CACHE);
|
||||
|
||||
/* Just testing that qemu doesn't crash... */
|
||||
|
||||
free_pci_device(dev);
|
||||
ide_test_quit();
|
||||
}
|
||||
|
||||
static void test_pci_retry_flush(void)
|
||||
{
|
||||
test_retry_flush("pc");
|
||||
@ -954,6 +972,7 @@ int main(int argc, char **argv)
|
||||
|
||||
qtest_add_func("/ide/flush", test_flush);
|
||||
qtest_add_func("/ide/flush/nodev", test_flush_nodev);
|
||||
qtest_add_func("/ide/flush/empty_drive", test_flush_empty_drive);
|
||||
qtest_add_func("/ide/flush/retry_pci", test_pci_retry_flush);
|
||||
qtest_add_func("/ide/flush/retry_isa", test_isa_retry_flush);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user